{"version":3,"file":"CostOfCareCalculator/CostOfCareCalculator.js","mappings":"uBAAIA,ECCAC,EADAC,E,2pBCyDJ,IAAMC,EAAsB,CAC3BC,MAAO,KACPC,SAAU,KACVC,WAAY,KACZC,YAAa,KACbC,eAAgB,KAChBC,YAAY,EACZC,mBAAoB,KACpBC,SAAS,EACTC,gBAAiB,KACjBC,kBAAkB,EAClBC,gBAAiB,KACjBC,UAAW,KACXC,UAAW,KACXC,iBAAkB,KAClBC,iBAAiB,GAGZC,EAAU,SAACC,EAAOC,GAAU,IACzBC,EAAkBD,EAAlBC,KAAMC,EAAYF,EAAZE,QAEd,OAAQD,GACP,IAAK,YACJ,cACIF,GADJ,IAEChB,MAAOmB,IAGT,IAAK,aACJ,cACIH,GADJ,IAECf,SAAUkB,EAAQC,MAClBjB,YAAagB,EAAQE,MACrBjB,eAAgBe,EAAQG,SACxBpB,WAAYiB,EAAQjB,aAGtB,IAAK,iBACJ,cACIc,GADJ,IAECT,SAAUS,EAAMT,UAGlB,IAAK,qBACJ,cACIS,GADJ,IAECX,YAAY,EACZK,gBAAiBS,EAAQI,UACzBZ,UAAWQ,EAAQR,UACnBC,UAAWO,EAAQP,UACnBY,cAAeL,EAAQK,cACvBX,iBAAkBM,EAAQN,mBAG5B,IAAK,wBACJ,cACIG,GADJ,IAECF,gBAAiBK,IAGnB,QACC,OAAOH,EAET,EAEKS,EAA8B,qBAAoBC,GAExD,SAASC,EAA6BC,GACrC,IAD0C,EAGhB,aAAiBb,EAAShB,GAHV,eAGnCiB,EAHmC,KAG5Ba,EAH4B,KAWpCC,EAAgB,SAACC,GACtB,IAAIC,EAAMC,0CAAA,oBAAkDF,EAAOT,SAAzD,yBAAkFS,EAAOX,OAGnG,QAAUY,GAAKE,MAAK,SAACC,GAEpB,IAAIC,EAAOD,EAASC,KAGpB,GAAuB,KAAnBD,EAASE,QAAmBF,EAASC,KAAKE,OAAQ,CAErD,IAAIC,EAAYH,EAAKI,eACjBC,EAAWC,OAAOC,QAAQJ,GAAWK,OAErCC,EAAWC,WAAWJ,OAAOC,QAAQJ,GAAW,GAAG,IACnDQ,EAAWD,WAAWJ,OAAOC,QAAQJ,GAAWE,EAAW,GAAG,IAE9DO,EAAmB,KACnBC,EAAc,GACdC,EAAc,GACdC,EAAc,GAGlBT,OAAOC,QAAQJ,GAAWa,SAAQ,WAAeC,GAAS,mBAAtBC,EAAsB,KAAjBlC,EAAiB,KACrDmC,EAAMT,WAAWQ,GAEG,MAApBN,GAA6BQ,KAAKC,MAAMF,IAAQC,KAAKC,MAAMrB,EAAKE,SAMrC,MAApBU,GAA4BO,EAAMnB,EAAKE,QAJjDU,EAAmBK,EACnBJ,EAAYS,KAAZ,WAAqBtB,EAAKE,OAAOqB,QAAQ,GAAGC,aAC5CV,EAAYQ,KAAKtC,GACjB+B,EAAYO,KAAK,uBAUjBT,EAAYS,KAAZ,WAAqBH,EAAIK,aACzBV,EAAYQ,KAAKtC,GACjB+B,EAAYO,KAAK,oBAElB,IAGD,IAAIG,EAAuBb,GAAoBN,OAAOC,QAAQJ,GAAWK,OAAS,GAAM,IAGpFM,EAAYN,OAAS,EACxBf,EAAS,CAAEX,KAAM,wBAAyBC,SAAS,IAEnDU,EAAS,CAAEX,KAAM,wBAAyBC,SAAS,IAGpD,IAAIA,EAAU,CACbK,cAAeY,EAAKE,OACpBf,UAAW,CACV0B,YAAaA,EACbC,YAAaA,EACbC,YAAaA,EACbU,oBAAqBA,EAAoBF,QAAQ,IAElDhD,UAAWkC,EACXjC,UAAWmC,EACXC,iBAAkBA,EAClBnC,iBAAkBuB,EAAK0B,qBAGxBjC,EAAS,CAAEX,KAAM,mBACjBW,EAAS,CAAEX,KAAM,wBAAyBC,SAAS,IACnDU,EAAS,CAAEX,KAAM,qBAAsBC,QAASA,IAEhD4C,EAAsBhC,EAAOT,SAAUS,EAAOV,MAAOU,EAAOX,MAI5D,MACAS,EAAS,CACRX,KAAM,sBACNC,QAAS,CACR6C,QAAS5B,EAAK6B,OAAO,MAGvBpC,EAAS,CAAEX,KAAM,kBAIlB,IACCgD,OAAM,SAAAC,GAMNtC,EAAS,CACRX,KAAM,sBACNC,QANkB,CAClB6C,QAAS,2CAOVnC,EAAS,CAAEX,KAAM,kBAEjB,GACF,EAEK6C,EAAwB,SAACK,EAAU/C,EAAOpB,GAC/C,IAAI+B,EAAM,iCAAH,OAAoCoC,EAApC,yBAA6DnE,GAEpE,QAAU+B,GAAKE,MAAK,SAACC,GAAiB,QAGrC,GAAK,UAACA,EAASC,YAAV,OAAC,EAAeiC,uBAAiE,KAAxC,UAAAlC,EAASC,YAAT,eAAeiC,uBAA6B,CACzF,IAAIC,EAAYC,SAASC,eAAe,sBACxCF,EAAUG,UAAYtC,EAASC,KAAKiC,sBACpCK,QAAQC,qBAAqBL,GAC7B,IAAIM,EAAQL,SAASM,cAAc,qBAC7BD,IACLA,EAAMH,UAAN,+EAA0FpD,EAA1F,sCAED,IAAIyD,EAAiBP,SAASM,cAAc,yBACtCC,IACLA,EAAeL,UAAf,iDAAqEtC,EAASC,KAAK2C,UAAnF,yFAGD,CACD,IACCb,OAAM,SAAAC,GAEN,GAEF,EAED,OAKC,gBAAC1C,EAA4BuD,SAAQ,CACpC5D,MAAO,CACNJ,MAAAA,EACAa,SAAAA,EACAoD,mBApJwB,SAAC7D,GAC3BS,EAAS,CAAEX,KAAM,mBACjBW,EAAS,CAAEX,KAAM,aAAcC,QAASC,IACxCU,EAAcV,EACd,IAkJEQ,EAAMsD,SAGT,C,eC9QKlD,EAAOmD,OAAeC,IAAIC,KAAKC,qBAExBC,EAAwB,WAAK,MAEA,aAAiB9D,GAA/CT,EAF8B,EAE9BA,MAAOiE,EAFuB,EAEvBA,mBA+Bf,OACI,gBAAC,KAAW,CACRO,YAAa,SAACC,GAAD,OA9BE,SAACrE,GACpB,IAAMsE,EAAatE,EAAMuE,OAAOC,cAE5BC,EAAW7D,EAAM,SAAW0D,EAEhC,GAAIA,EAAW9C,OAAS,EAEpB,OAAO,IAAIkD,SAA6B,SAACC,EAASC,GAC9C,QAAUH,GAAU3D,MAAK,SAACC,GAGtB,IAAI8D,EAAU9D,EAASC,KAAK8D,KAAI,SAAAnE,GAC5B,MAAO,CACHX,MAAOW,EAAOuB,IACdjC,MAAOU,EAAOV,MACdC,SAAUS,EAAOT,SACjBpB,WAAY6B,EAAO7B,WAE1B,IACD6F,EAAQE,EACX,IACI/B,OAAM,SAAAC,GAEN,GACR,GAER,CAIgCgC,CAAeV,EAA3B,EACbW,SAAU,SAAChF,GAAD,OAAW6D,EAAmB7D,EAA9B,EACViF,UAAU,OACVC,YAAY,oCACZlF,MAASJ,EAAMb,YAAc,CAAEkB,MAAOL,EAAMb,YAAaiB,MAAOJ,EAAMf,UAAa,MAG9F,ECpDYsG,EAAiB,WAAK,YAEvBvF,EAAU,aAAiBS,GAA3BT,MAEJwF,GAAU,UAAAxF,EAAMhB,aAAN,eAAayG,uBAAwBjD,KAAKC,MAAL,UAAWzC,EAAMhB,aAAjB,aAAW,EAAayG,uBAAyB,EAAtF,UAA0FzF,EAAMhB,aAAhG,aAA0F,EAAayG,sBAAsB9C,QAAQ,GAArI,UAA0I3C,EAAMhB,aAAhJ,aAA0I,EAAayG,sBAErK,OACI,gBAAC,WAAc,KACX,uBAAKJ,UAAU,YACX,uBAAKA,UAAU,QACX,wBAAMA,UAAU,qBAAmB,uCAIvC,uBAAKA,UAAU,QACX,uBAAKA,UAAU,oCACX,uBAAKA,UAAU,uCAAqC,YACnDrF,EAAMT,SACH,uBAAK8F,UAAU,oCACX,uBAAKK,IAAI,wBAAwBC,IAAI,YAAY,wBAAMN,UAAU,2BAAyB,oBAItG,uBAAKA,UAAU,4BACX,gBAACd,EAAqB,SAK5BvE,EAAMX,YACJ,uBAAKgG,UAAU,4GACX,uBAAKA,UAAU,4CAA0C,0BACzD,uBAAKA,UAAU,2BAAf,IAA2CG,GAC3C,uBAAKH,UAAU,+BAA6B,sBASnE,ECrCD,MAAMO,EACkB,oBAAXzB,OACF,SAAS0B,GACd,OAAOA,GACT,EAEK1B,OAAO2B,sBAEhB,SAASC,EAAUC,EAAIC,EAASC,GAC9B,MAAMC,EAAaD,GAAY,CAAEE,GAASC,MAAMC,UAAUC,MAAMC,KAAKJ,IACrE,IAAIK,GAAU,EACVL,EAAO,GACX,OAAO,YAAYM,GACjBN,EAAOD,EAAWO,GACbD,IACHA,GAAU,EACVb,EAAiBY,KAAKrC,QAAQ,KAC5BsC,GAAU,EACVT,EAAGW,MAAMV,EAASG,EAAK,IAG7B,CACF,CAaA,MAAMQ,EAAsBC,GAAoB,UAAVA,EAAoB,OAAmB,QAAVA,EAAkB,QAAU,SACzFC,EAAiB,CAACD,EAAOE,EAAOC,IAAkB,UAAVH,EAAoBE,EAAkB,QAAVF,EAAkBG,GAAOD,EAAQC,GAAO,EAMlH,SAASC,IAAQ,CACjB,MAAMC,EAAO,WACX,IAAIC,EAAK,EACT,OAAO,WACL,OAAOA,GACT,CACF,CALY,GAMZ,SAASC,EAAchH,GACrB,OAAOA,OACT,CACA,SAASiH,EAAQjH,GACf,GAAIiG,MAAMgB,SAAWhB,MAAMgB,QAAQjH,GACjC,OAAO,EAET,MAAMF,EAAOwB,OAAO4E,UAAU1D,SAAS4D,KAAKpG,GAC5C,MAA0B,YAAtBF,EAAKoH,OAAO,EAAG,IAAwC,WAApBpH,EAAKoH,QAAQ,EAItD,CACA,SAASC,EAASnH,GAChB,OAAiB,OAAVA,GAA4D,oBAA1CsB,OAAO4E,UAAU1D,SAAS4D,KAAKpG,EAC1D,CACA,MAAMoH,EAAkBpH,IAA4B,iBAAVA,GAAsBA,aAAiBqH,SAAWC,UAAUtH,GACtG,SAASuH,EAAgBvH,EAAOwH,GAC9B,OAAOJ,EAAepH,GAASA,EAAQwH,CACzC,CACA,SAASC,EAAezH,EAAOwH,GAC7B,YAAwB,IAAVxH,EAAwBwH,EAAexH,CACvD,CACA,MAIM0H,EAAc,CAAC1H,EAAO2H,IACT,iBAAV3H,GAAsBA,EAAM4H,SAAS,KAC1ClG,WAAW1B,GAAS,IAAM2H,GACvB3H,EACP,SAASyF,EAASG,EAAII,EAAMH,GAC1B,GAAID,GAAyB,mBAAZA,EAAGQ,KAClB,OAAOR,EAAGW,MAAMV,EAASG,EAE7B,CACA,SAAS6B,EAAKC,EAAUlC,EAAIC,EAASkC,GACnC,IAAIC,EAAGC,EAAKC,EACZ,GAAIjB,EAAQa,GAEV,GADAG,EAAMH,EAAStG,OACXuG,EACF,IAAKC,EAAIC,EAAM,EAAGD,GAAK,EAAGA,IACxBpC,EAAGQ,KAAKP,EAASiC,EAASE,GAAIA,QAGhC,IAAKA,EAAI,EAAGA,EAAIC,EAAKD,IACnBpC,EAAGQ,KAAKP,EAASiC,EAASE,GAAIA,QAG7B,GAAIb,EAASW,GAGlB,IAFAI,EAAO5G,OAAO4G,KAAKJ,GACnBG,EAAMC,EAAK1G,OACNwG,EAAI,EAAGA,EAAIC,EAAKD,IACnBpC,EAAGQ,KAAKP,EAASiC,EAASI,EAAKF,IAAKE,EAAKF,GAG/C,CACA,SAASG,EAAeC,EAAIC,GAC1B,IAAIL,EAAGM,EAAMC,EAAIC,EACjB,IAAKJ,IAAOC,GAAMD,EAAG5G,SAAW6G,EAAG7G,OACjC,OAAO,EAET,IAAKwG,EAAI,EAAGM,EAAOF,EAAG5G,OAAQwG,EAAIM,IAAQN,EAGxC,GAFAO,EAAKH,EAAGJ,GACRQ,EAAKH,EAAGL,GACJO,EAAGE,eAAiBD,EAAGC,cAAgBF,EAAGtG,QAAUuG,EAAGvG,MACzD,OAAO,EAGX,OAAO,CACT,CACA,SAASyG,EAAQC,GACf,GAAI1B,EAAQ0B,GACV,OAAOA,EAAO7D,IAAI4D,GAEpB,GAAIvB,EAASwB,GAAS,CACpB,MAAMC,EAAStH,OAAOuH,OAAO,MACvBX,EAAO5G,OAAO4G,KAAKS,GACnBG,EAAOZ,EAAK1G,OAClB,IAAIuH,EAAI,EACR,KAAOA,EAAID,IAAQC,EACjBH,EAAOV,EAAKa,IAAML,EAAQC,EAAOT,EAAKa,KAExC,OAAOH,CACT,CACA,OAAOD,CACT,CACA,SAASK,EAAW9G,GAClB,OAAmE,IAA5D,CAAC,YAAa,YAAa,eAAe+G,QAAQ/G,EAC3D,CACA,SAASgH,EAAQhH,EAAK0G,EAAQD,EAAQQ,GACpC,IAAKH,EAAW9G,GACd,OAEF,MAAMkH,EAAOR,EAAO1G,GACdmH,EAAOV,EAAOzG,GAChBiF,EAASiC,IAASjC,EAASkC,GAC7BC,EAAMF,EAAMC,EAAMF,GAElBP,EAAO1G,GAAOwG,EAAQW,EAE1B,CACA,SAASC,EAAMV,EAAQD,EAAQQ,GAC7B,MAAMI,EAAUtC,EAAQ0B,GAAUA,EAAS,CAACA,GACtCL,EAAOiB,EAAQ/H,OACrB,IAAK2F,EAASyB,GACZ,OAAOA,EAGT,MAAMY,GADNL,EAAUA,GAAW,CAAC,GACCK,QAAUN,EACjC,IAAK,IAAIlB,EAAI,EAAGA,EAAIM,IAAQN,EAAG,CAE7B,IAAKb,EADLwB,EAASY,EAAQvB,IAEf,SAEF,MAAME,EAAO5G,OAAO4G,KAAKS,GACzB,IAAK,IAAII,EAAI,EAAGD,EAAOZ,EAAK1G,OAAQuH,EAAID,IAAQC,EAC9CS,EAAOtB,EAAKa,GAAIH,EAAQD,EAAQQ,EAEpC,CACA,OAAOP,CACT,CACA,SAASa,EAAQb,EAAQD,GACvB,OAAOW,EAAMV,EAAQD,EAAQ,CAACa,OAAQE,GACxC,CACA,SAASA,EAAUxH,EAAK0G,EAAQD,GAC9B,IAAKK,EAAW9G,GACd,OAEF,MAAMkH,EAAOR,EAAO1G,GACdmH,EAAOV,EAAOzG,GAChBiF,EAASiC,IAASjC,EAASkC,GAC7BI,EAAQL,EAAMC,GACJ/H,OAAO4E,UAAUyD,eAAevD,KAAKwC,EAAQ1G,KACvD0G,EAAO1G,GAAOwG,EAAQW,GAE1B,CASA,SAASO,EAAmB1H,EAAKyE,GAC/B,MAAMkD,EAAM3H,EAAI+G,QAFN,IAEmBtC,GAC7B,OAAgB,IAATkD,EAAa3H,EAAIV,OAASqI,CACnC,CACA,SAASC,EAAiBC,EAAK7H,GAC7B,GAPkB,KAOdA,EACF,OAAO6H,EAET,IAAIC,EAAM,EACNH,EAAMD,EAAmB1H,EAAK8H,GAClC,KAAOD,GAAOF,EAAMG,GAClBD,EAAMA,EAAI7H,EAAIgF,OAAO8C,EAAKH,EAAMG,IAChCA,EAAMH,EAAM,EACZA,EAAMD,EAAmB1H,EAAK8H,GAEhC,OAAOD,CACT,CACA,SAASE,EAAYC,GACnB,OAAOA,EAAIC,OAAO,GAAGC,cAAgBF,EAAI/D,MAAM,EACjD,CACA,MAAMkE,EAAWrK,QAA2B,IAAVA,EAC5BsK,EAActK,GAA2B,mBAAVA,EAC/BuK,EAAY,CAACC,EAAGC,KACpB,GAAID,EAAEE,OAASD,EAAEC,KACf,OAAO,EAET,IAAK,MAAMC,KAAQH,EACjB,IAAKC,EAAEG,IAAID,GACT,OAAO,EAGX,OAAO,CAAI,EAMb,MAAME,EAAKzI,KAAKyI,GACVC,EAAM,EAAID,EACVE,EAAQD,EAAMD,EACdG,EAAW3D,OAAO4D,kBAClBC,EAAcL,EAAK,IACnBM,EAAUN,EAAK,EACfO,EAAaP,EAAK,EAClBQ,GAAqB,EAALR,EAAS,EACzBS,GAAQlJ,KAAKkJ,MACbC,GAAOnJ,KAAKmJ,KAClB,SAASC,GAAQC,GACf,MAAMC,EAAetJ,KAAKuJ,MAAMF,GAChCA,EAAQG,GAAaH,EAAOC,EAAcD,EAAQ,KAAQC,EAAeD,EACzE,MAAMI,EAAYzJ,KAAK0J,IAAI,GAAI1J,KAAKC,MAAMiJ,GAAMG,KAC1CM,EAAWN,EAAQI,EAEzB,OADqBE,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAI,IAC3DF,CACxB,CAiBA,SAASG,GAASC,GAChB,OAAQC,MAAMxK,WAAWuK,KAAO3E,SAAS2E,EAC3C,CACA,SAASL,GAAaO,EAAGC,EAAGC,GAC1B,OAAOjK,KAAKkK,IAAIH,EAAIC,GAAKC,CAC3B,CAKA,SAASE,GAAmBC,EAAO5D,EAAQ6D,GACzC,IAAIzE,EAAGM,EAAMtI,EACb,IAAKgI,EAAI,EAAGM,EAAOkE,EAAMhL,OAAQwG,EAAIM,EAAMN,IACzChI,EAAQwM,EAAMxE,GAAGyE,GACZP,MAAMlM,KACT4I,EAAO8D,IAAMtK,KAAKsK,IAAI9D,EAAO8D,IAAK1M,GAClC4I,EAAO+D,IAAMvK,KAAKuK,IAAI/D,EAAO+D,IAAK3M,GAGxC,CACA,SAAS4M,GAAUC,GACjB,OAAOA,GAAWhC,EAAK,IACzB,CACA,SAASiC,GAAUC,GACjB,OAAOA,GAAW,IAAMlC,EAC1B,CACA,SAASmC,GAAeb,GACtB,IAAK/E,EAAe+E,GAClB,OAEF,IAAIc,EAAI,EACJC,EAAI,EACR,KAAO9K,KAAKuJ,MAAMQ,EAAIc,GAAKA,IAAMd,GAC/Bc,GAAK,GACLC,IAEF,OAAOA,CACT,CACA,SAASC,GAAkBC,EAAaC,GACtC,MAAMC,EAAsBD,EAAWlB,EAAIiB,EAAYjB,EACjDoB,EAAsBF,EAAWjB,EAAIgB,EAAYhB,EACjDoB,EAA2BpL,KAAKqL,KAAKH,EAAsBA,EAAsBC,EAAsBA,GAC7G,IAAIG,EAAQtL,KAAKuL,MAAMJ,EAAqBD,GAI5C,OAHII,GAAU,GAAM7C,IAClB6C,GAAS5C,GAEJ,CACL4C,QACAE,SAAUJ,EAEd,CACA,SAASK,GAAsBC,EAAKC,GAClC,OAAO3L,KAAKqL,KAAKrL,KAAK0J,IAAIiC,EAAI5B,EAAI2B,EAAI3B,EAAG,GAAK/J,KAAK0J,IAAIiC,EAAI3B,EAAI0B,EAAI1B,EAAG,GACxE,CACA,SAAS4B,GAAWxD,EAAGC,GACrB,OAAQD,EAAIC,EAAIM,GAASD,EAAMD,CACjC,CACA,SAASoD,GAAgBzD,GACvB,OAAQA,EAAIM,EAAMA,GAAOA,CAC3B,CACA,SAASoD,GAAcR,EAAO/G,EAAOC,EAAKuH,GACxC,MAAM3D,EAAIyD,GAAgBP,GACpBU,EAAIH,GAAgBtH,GACpBsG,EAAIgB,GAAgBrH,GACpByH,EAAeJ,GAAgBG,EAAI5D,GACnC8D,EAAaL,GAAgBhB,EAAIzC,GACjC+D,EAAeN,GAAgBzD,EAAI4D,GACnCI,EAAaP,GAAgBzD,EAAIyC,GACvC,OAAOzC,IAAM4D,GAAK5D,IAAMyC,GAAMkB,GAAyBC,IAAMnB,GACvDoB,EAAeC,GAAcC,EAAeC,CACpD,CACA,SAASC,GAAYzO,EAAO0M,EAAKC,GAC/B,OAAOvK,KAAKuK,IAAID,EAAKtK,KAAKsK,IAAIC,EAAK3M,GACrC,CAIA,SAAS0O,GAAW1O,EAAO2G,EAAOC,EAAKyF,EAAU,MAC/C,OAAOrM,GAASoC,KAAKsK,IAAI/F,EAAOC,GAAOyF,GAAWrM,GAASoC,KAAKuK,IAAIhG,EAAOC,GAAOyF,CACpF,CAEA,MAAMsC,GAAUC,GAAY,IAANA,GAAiB,IAANA,EAC3BC,GAAY,CAACD,EAAGR,EAAGlB,KAAQ9K,KAAK0J,IAAI,EAAG,IAAM8C,GAAK,IAAMxM,KAAK0M,KAAKF,EAAIR,GAAKtD,EAAMoC,GACjF6B,GAAa,CAACH,EAAGR,EAAGlB,IAAM9K,KAAK0J,IAAI,GAAI,GAAK8C,GAAKxM,KAAK0M,KAAKF,EAAIR,GAAKtD,EAAMoC,GAAK,EAC/E8B,GAAU,CACdC,OAAQL,GAAKA,EACbM,WAAYN,GAAKA,EAAIA,EACrBO,YAAaP,IAAMA,GAAKA,EAAI,GAC5BQ,cAAeR,IAAOA,GAAK,IAAO,EAC9B,GAAMA,EAAIA,GACT,MAAUA,GAAMA,EAAI,GAAK,GAC9BS,YAAaT,GAAKA,EAAIA,EAAIA,EAC1BU,aAAcV,IAAMA,GAAK,GAAKA,EAAIA,EAAI,EACtCW,eAAgBX,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EACd,KAAQA,GAAK,GAAKA,EAAIA,EAAI,GAC9BY,YAAaZ,GAAKA,EAAIA,EAAIA,EAAIA,EAC9Ba,aAAcb,MAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC5Cc,eAAgBd,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EAAIA,GACjB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GACnCe,YAAaf,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAClCgB,aAAchB,IAAMA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAC9CiB,eAAgBjB,IAAOA,GAAK,IAAO,EAC/B,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EACtB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GACtCkB,WAAYlB,GAA8B,EAAxBxM,KAAK2N,IAAInB,EAAIzD,GAC/B6E,YAAapB,GAAKxM,KAAK0M,IAAIF,EAAIzD,GAC/B8E,cAAerB,IAAM,IAAOxM,KAAK2N,IAAIlF,EAAK+D,GAAK,GAC/CsB,WAAYtB,GAAY,IAANA,EAAW,EAAIxM,KAAK0J,IAAI,EAAG,IAAM8C,EAAI,IACvDuB,YAAavB,GAAY,IAANA,EAAW,EAA4B,EAAvBxM,KAAK0J,IAAI,GAAI,GAAK8C,GACrDwB,cAAexB,GAAKD,GAAOC,GAAKA,EAAIA,EAAI,GACpC,GAAMxM,KAAK0J,IAAI,EAAG,IAAU,EAAJ8C,EAAQ,IAChC,IAAyC,EAAjCxM,KAAK0J,IAAI,GAAI,IAAU,EAAJ8C,EAAQ,KACvCyB,WAAYzB,GAAMA,GAAK,EAAKA,IAAMxM,KAAKqL,KAAK,EAAImB,EAAIA,GAAK,GACzD0B,YAAa1B,GAAKxM,KAAKqL,KAAK,GAAKmB,GAAK,GAAKA,GAC3C2B,cAAe3B,IAAOA,GAAK,IAAO,GAC7B,IAAOxM,KAAKqL,KAAK,EAAImB,EAAIA,GAAK,GAC/B,IAAOxM,KAAKqL,KAAK,GAAKmB,GAAK,GAAKA,GAAK,GACzC4B,cAAe5B,GAAKD,GAAOC,GAAKA,EAAIC,GAAUD,EAAG,KAAO,IACxD6B,eAAgB7B,GAAKD,GAAOC,GAAKA,EAAIG,GAAWH,EAAG,KAAO,IAC1D,gBAAA8B,CAAiB9B,GACf,MAAMR,EAAI,MAEV,OAAOO,GAAOC,GAAKA,EACjBA,EAAI,GACA,GAAMC,GAAc,EAAJD,EAAOR,EAHnB,KAIJ,GAAM,GAAMW,GAAe,EAAJH,EAAQ,EAAGR,EAJ9B,IAKZ,EACA,UAAAuC,CAAW/B,GACT,MAAMR,EAAI,QACV,OAAOQ,EAAIA,IAAMR,EAAI,GAAKQ,EAAIR,EAChC,EACA,WAAAwC,CAAYhC,GACV,MAAMR,EAAI,QACV,OAAQQ,GAAK,GAAKA,IAAMR,EAAI,GAAKQ,EAAIR,GAAK,CAC5C,EACA,aAAAyC,CAAcjC,GACZ,IAAIR,EAAI,QACR,OAAKQ,GAAK,IAAO,EACDA,EAAIA,IAAuB,GAAhBR,GAAK,QAAgBQ,EAAIR,GAA3C,GAEF,KAAQQ,GAAK,GAAKA,IAAuB,GAAhBR,GAAK,QAAgBQ,EAAIR,GAAK,EAChE,EACA0C,aAAclC,GAAK,EAAII,GAAQ+B,cAAc,EAAInC,GACjD,aAAAmC,CAAcnC,GACZ,MAAMoC,EAAI,OACJC,EAAI,KACV,OAAIrC,EAAK,EAAIqC,EACJD,EAAIpC,EAAIA,EAEbA,EAAK,EAAIqC,EACJD,GAAKpC,GAAM,IAAMqC,GAAMrC,EAAI,IAEhCA,EAAK,IAAMqC,EACND,GAAKpC,GAAM,KAAOqC,GAAMrC,EAAI,MAE9BoC,GAAKpC,GAAM,MAAQqC,GAAMrC,EAAI,OACtC,EACAsC,gBAAiBtC,GAAMA,EAAI,GACO,GAA9BI,GAAQ8B,aAAiB,EAAJlC,GACc,GAAnCI,GAAQ+B,cAAkB,EAAJnC,EAAQ,GAAW,IASzC9J,GAAM,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGqM,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIhH,EAAG,GAAIC,EAAG,GAAIgH,EAAG,GAAIR,EAAG,GAAIhE,EAAG,GAAIyE,EAAG,IACnJC,GAAM,mBACNC,GAAMnH,GAAMkH,GAAQ,GAAJlH,GAChBoH,GAAMpH,GAAMkH,IAAS,IAAJlH,IAAa,GAAKkH,GAAQ,GAAJlH,GACvCqH,GAAMrH,IAAa,IAAJA,IAAa,IAAY,GAAJA,GA0B1C,SAASsH,GAAUC,GAClB,IAAIN,EA1BL,SAAiBM,GAChB,OAAOF,GAAGE,EAAEC,IAAMH,GAAGE,EAAEE,IAAMJ,GAAGE,EAAEvH,IAAMqH,GAAGE,EAAExH,EAC9C,CAwBS2H,CAAQH,GAAKJ,GAAKC,GAC1B,OAAOG,EACJ,IAAMN,EAAEM,EAAEC,GAAKP,EAAEM,EAAEE,GAAKR,EAAEM,EAAEvH,IAAMuH,EAAExH,EAAI,IAAMkH,EAAEM,EAAExH,GAAK,IACvDwH,CACJ,CACA,SAASrG,GAAMqG,GACd,OAAOA,EAAI,GAAM,CAClB,CACA,MAAMI,GAAM,CAACJ,EAAGK,EAAGC,IAAMlQ,KAAKuK,IAAIvK,KAAKsK,IAAIsF,EAAGM,GAAID,GAClD,SAASE,GAAIP,GACZ,OAAOI,GAAIzG,GAAU,KAAJqG,GAAW,EAAG,IAChC,CACA,SAASQ,GAAIR,GACZ,OAAOI,GAAIzG,GAAU,IAAJqG,GAAU,EAAG,IAC/B,CACA,SAASS,GAAIT,GACZ,OAAOI,GAAIzG,GAAMqG,EAAI,MAAQ,IAAK,EAAG,EACtC,CACA,SAASU,GAAIV,GACZ,OAAOI,GAAIzG,GAAU,IAAJqG,GAAU,EAAG,IAC/B,CACA,MAAMW,GAAS,uGAgCf,MAAMC,GAAS,+GACf,SAASC,GAASP,EAAGlE,EAAGiE,GACvB,MAAM7H,EAAI4D,EAAIhM,KAAKsK,IAAI2F,EAAG,EAAIA,GACxBX,EAAI,CAACzF,EAAGlD,GAAKkD,EAAIqG,EAAI,IAAM,KAAOD,EAAI7H,EAAIpI,KAAKuK,IAAIvK,KAAKsK,IAAI3D,EAAI,EAAG,EAAIA,EAAG,IAAK,GACrF,MAAO,CAAC2I,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACvB,CACA,SAASoB,GAASR,EAAGlE,EAAG4D,GACvB,MAAMN,EAAI,CAACzF,EAAGlD,GAAKkD,EAAIqG,EAAI,IAAM,IAAMN,EAAIA,EAAI5D,EAAIhM,KAAKuK,IAAIvK,KAAKsK,IAAI3D,EAAG,EAAIA,EAAG,GAAI,GACnF,MAAO,CAAC2I,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACvB,CACA,SAASqB,GAAST,EAAGU,EAAGvI,GACvB,MAAMwI,EAAMJ,GAASP,EAAG,EAAG,IAC3B,IAAItK,EAMJ,IALIgL,EAAIvI,EAAI,IACXzC,EAAI,GAAKgL,EAAIvI,GACbuI,GAAKhL,EACLyC,GAAKzC,GAEDA,EAAI,EAAGA,EAAI,EAAGA,IAClBiL,EAAIjL,IAAM,EAAIgL,EAAIvI,EAClBwI,EAAIjL,IAAMgL,EAEX,OAAOC,CACR,CACA,SAASC,GAAQlB,GAChB,MACMC,EAAID,EAAEC,EADE,IAERC,EAAIF,EAAEE,EAFE,IAGRzH,EAAIuH,EAAEvH,EAHE,IAIRkC,EAAMvK,KAAKuK,IAAIsF,EAAGC,EAAGzH,GACrBiC,EAAMtK,KAAKsK,IAAIuF,EAAGC,EAAGzH,GACrB4H,GAAK1F,EAAMD,GAAO,EACxB,IAAI4F,EAAGlE,EAAG6C,EAWV,OAVItE,IAAQD,IACXuE,EAAItE,EAAMD,EACV0B,EAAIiE,EAAI,GAAMpB,GAAK,EAAItE,EAAMD,GAAOuE,GAAKtE,EAAMD,GAC/C4F,EAAI3F,IAAQsF,GACPC,EAAIzH,GAAKwG,GAAMiB,EAAIzH,EAAI,EAAI,GAC7BkC,IAAQuF,GACNzH,EAAIwH,GAAKhB,EAAI,GACbgB,EAAIC,GAAKjB,EAAI,EAClBqB,EAAQ,GAAJA,EAAS,IAEP,CAAK,EAAJA,EAAOlE,GAAK,EAAGiE,EACxB,CACA,SAASc,GAAMzB,EAAGlH,EAAGC,EAAGgH,GACvB,OACCxL,MAAMgB,QAAQuD,GACXkH,EAAElH,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAChBkH,EAAElH,EAAGC,EAAGgH,IACV3M,IAAI0N,GACP,CACA,SAASY,GAAQd,EAAGlE,EAAGiE,GACtB,OAAOc,GAAMN,GAAUP,EAAGlE,EAAGiE,EAC9B,CAOA,SAASgB,GAAIf,GACZ,OAAQA,EAAI,IAAM,KAAO,GAC1B,CACA,SAASgB,GAASpJ,GACjB,MAAM8G,EAAI4B,GAAOW,KAAKrJ,GACtB,IACI8H,EADAxH,EAAI,IAER,IAAKwG,EACJ,OAEGA,EAAE,KAAOgB,IACZxH,EAAIwG,EAAE,GAAKuB,IAAKvB,EAAE,IAAMwB,IAAKxB,EAAE,KAEhC,MAAMsB,EAAIe,IAAKrC,EAAE,IACXwC,GAAMxC,EAAE,GAAK,IACbyC,GAAMzC,EAAE,GAAK,IAQnB,OANCgB,EADY,QAAThB,EAAE,GAtBP,SAAiBsB,EAAGU,EAAGvI,GACtB,OAAO0I,GAAMJ,GAAUT,EAAGU,EAAGvI,EAC9B,CAqBMiJ,CAAQpB,EAAGkB,EAAIC,GACA,QAATzC,EAAE,GArBd,SAAiBsB,EAAGlE,EAAG4D,GACtB,OAAOmB,GAAML,GAAUR,EAAGlE,EAAG4D,EAC9B,CAoBM2B,CAAQrB,EAAGkB,EAAIC,GAEfL,GAAQd,EAAGkB,EAAIC,GAEb,CACNxB,EAAGD,EAAE,GACLE,EAAGF,EAAE,GACLvH,EAAGuH,EAAE,GACLxH,EAAGA,EAEL,CAqBA,MAAMoJ,GAAQ,CACbzH,EAAG,OACH0H,EAAG,QACHC,EAAG,KACHC,EAAG,MACHC,EAAG,KACHC,EAAG,SACHC,EAAG,QACH/C,EAAG,KACHgD,EAAG,KACHC,EAAG,KACHhD,EAAG,KACHC,EAAG,QACHC,EAAG,QACH+C,EAAG,KACHC,EAAG,WACH/C,EAAG,KACHgD,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,QACHnD,EAAG,KACHoD,EAAG,KACHC,EAAG,OACHC,EAAG,KACHC,EAAG,QACHC,EAAG,MAEEC,GAAQ,CACbC,OAAQ,SACRC,YAAa,SACbC,KAAM,OACNC,UAAW,SACXC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,MAAO,IACPC,aAAc,SACdC,GAAI,KACJC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,SAAU,SACVC,QAAS,SACTC,IAAK,SACLC,YAAa,SACbC,QAAS,SACTC,QAAS,SACTC,KAAM,OACNC,IAAK,KACLC,MAAO,OACPC,QAAS,SACTC,KAAM,SACNC,KAAM,OACNC,KAAM,SACNC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,IAAK,OACLC,OAAQ,SACRC,OAAQ,SACRC,SAAU,OACVC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,IAAK,SACLC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,IAAK,SACLC,QAAS,SACTC,OAAQ,SACRC,QAAS,SACTC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,UAAW,SACXC,QAAS,SACTC,WAAY,SACZC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,IAAK,SACLC,KAAM,OACNC,QAAS,SACTC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,IAAK,KACLC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,UAAW,OACXC,IAAK,SACLC,SAAU,SACVC,WAAY,SACZC,QAAS,SACTC,SAAU,SACVC,QAAS,SACTC,WAAY,SACZC,KAAM,KACNC,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,UAAW,SACXC,QAAS,SACTC,KAAM,SACNC,IAAK,SACLC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,YAAa,SACbC,GAAI,SACJC,SAAU,SACVC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,SAAU,OACVC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,OAAQ,SACRC,GAAI,SACJC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,UAAW,SACXC,GAAI,SACJC,MAAO,UAkBR,IAAIC,GACJ,SAASC,GAAUrU,GACboU,KACJA,GAnBF,WACC,MAAME,EAAW,CAAC,EACZtW,EAAO5G,OAAO4G,KAAK+M,IACnBwJ,EAAQnd,OAAO4G,KAAK0L,IAC1B,IAAI5L,EAAG0W,EAAG3V,EAAG4V,EAAIC,EACjB,IAAK5W,EAAI,EAAGA,EAAIE,EAAK1G,OAAQwG,IAAK,CAEjC,IADA2W,EAAKC,EAAK1W,EAAKF,GACV0W,EAAI,EAAGA,EAAID,EAAMjd,OAAQkd,IAC7B3V,EAAI0V,EAAMC,GACVE,EAAKA,EAAGC,QAAQ9V,EAAG6K,GAAM7K,IAE1BA,EAAI+V,SAAS7J,GAAM0J,GAAK,IACxBH,EAASI,GAAM,CAAC7V,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EAChD,CACA,OAAOyV,CACR,CAIYO,GACVT,GAAQU,YAAc,CAAC,EAAG,EAAG,EAAG,IAEjC,MAAMxU,EAAI8T,GAAQpU,EAAI1F,eACtB,OAAOgG,GAAK,CACXyH,EAAGzH,EAAE,GACL0H,EAAG1H,EAAE,GACLC,EAAGD,EAAE,GACLA,EAAgB,IAAbA,EAAEhJ,OAAegJ,EAAE,GAAK,IAE7B,CACA,SAASyU,GAAOjN,EAAGhK,EAAGkX,GACrB,GAAIlN,EAAG,CACN,IAAImN,EAAMjM,GAAQlB,GAClBmN,EAAInX,GAAK5F,KAAKuK,IAAI,EAAGvK,KAAKsK,IAAIyS,EAAInX,GAAKmX,EAAInX,GAAKkX,EAAa,IAANlX,EAAU,IAAM,IACvEmX,EAAM/L,GAAQ+L,GACdnN,EAAEC,EAAIkN,EAAI,GACVnN,EAAEE,EAAIiN,EAAI,GACVnN,EAAEvH,EAAI0U,EAAI,EACX,CACD,CACA,SAASC,GAAMpN,EAAGqN,GACjB,OAAOrN,EAAI1Q,OAAOge,OAAOD,GAAS,CAAC,EAAGrN,GAAKA,CAC5C,CACA,SAASuN,GAAWC,GACnB,IAAIxN,EAAI,CAACC,EAAG,EAAGC,EAAG,EAAGzH,EAAG,EAAGD,EAAG,KAY9B,OAXIvE,MAAMgB,QAAQuY,GACbA,EAAMhe,QAAU,IACnBwQ,EAAI,CAACC,EAAGuN,EAAM,GAAItN,EAAGsN,EAAM,GAAI/U,EAAG+U,EAAM,GAAIhV,EAAG,KAC3CgV,EAAMhe,OAAS,IAClBwQ,EAAExH,EAAIgI,GAAIgN,EAAM,OAIlBxN,EAAIoN,GAAMI,EAAO,CAACvN,EAAG,EAAGC,EAAG,EAAGzH,EAAG,EAAGD,EAAG,KACrCA,EAAIgI,GAAIR,EAAExH,GAENwH,CACR,CACA,SAASyN,GAAcvV,GACtB,MAAsB,MAAlBA,EAAIC,OAAO,GA5XhB,SAAkBD,GACjB,MAAM8G,EAAI2B,GAAOY,KAAKrJ,GACtB,IACI+H,EAAGC,EAAGzH,EADND,EAAI,IAER,GAAKwG,EAAL,CAGA,GAAIA,EAAE,KAAOiB,EAAG,CACf,MAAMD,GAAKhB,EAAE,GACbxG,EAAI,KAAOwG,EAAE,GAAKuB,GAAIP,GAAS,IAAJA,EAC5B,CAOA,OANAC,GAAKjB,EAAE,GACPkB,GAAKlB,EAAE,GACPvG,GAAKuG,EAAE,GACPiB,EAAI,KAAOjB,EAAE,GAAKuB,GAAIN,GAAKA,GAC3BC,EAAI,KAAOlB,EAAE,GAAKuB,GAAIL,GAAKA,GAC3BzH,EAAI,KAAOuG,EAAE,GAAKuB,GAAI9H,GAAKA,GACpB,CACNwH,EAAGA,EACHC,EAAGA,EACHzH,EAAGA,EACHD,EAAGA,EAfJ,CAiBD,CAsWSkV,CAASxV,GAEVoJ,GAASpJ,EACjB,CACA,MAAMyV,GACL,WAAAC,CAAYJ,GACX,GAAIA,aAAiBG,GACpB,OAAOH,EAER,MAAM1f,SAAc0f,EACpB,IAAIxN,EApbN,IAAkB9H,EAEb2V,EADA5X,EAobU,WAATnI,EACHkS,EAAIuN,GAAWC,GACI,WAAT1f,IAtbRmI,GADaiC,EAwbFsV,GAvbDhe,OAEC,MAAX0I,EAAI,KACK,IAARjC,GAAqB,IAARA,EAChB4X,EAAM,CACL5N,EAAG,IAAoB,GAAdnN,GAAIoF,EAAI,IACjBgI,EAAG,IAAoB,GAAdpN,GAAIoF,EAAI,IACjBO,EAAG,IAAoB,GAAd3F,GAAIoF,EAAI,IACjBM,EAAW,IAARvC,EAA0B,GAAdnD,GAAIoF,EAAI,IAAW,KAEjB,IAARjC,GAAqB,IAARA,IACvB4X,EAAM,CACL5N,EAAGnN,GAAIoF,EAAI,KAAO,EAAIpF,GAAIoF,EAAI,IAC9BgI,EAAGpN,GAAIoF,EAAI,KAAO,EAAIpF,GAAIoF,EAAI,IAC9BO,EAAG3F,GAAIoF,EAAI,KAAO,EAAIpF,GAAIoF,EAAI,IAC9BM,EAAW,IAARvC,EAAanD,GAAIoF,EAAI,KAAO,EAAIpF,GAAIoF,EAAI,IAAO,OAwanD8H,EApaK6N,GAoakBtB,GAAUiB,IAAUC,GAAcD,IAE1DM,KAAKC,KAAO/N,EACZ8N,KAAKE,SAAWhO,CACjB,CACA,SAAIiO,GACH,OAAOH,KAAKE,MACb,CACA,OAAI/M,GACH,IAAIjB,EAAIoN,GAAMU,KAAKC,MAInB,OAHI/N,IACHA,EAAExH,EAAIiI,GAAIT,EAAExH,IAENwH,CACR,CACA,OAAIiB,CAAIlJ,GACP+V,KAAKC,KAAOR,GAAWxV,EACxB,CACA,SAAAmW,GACC,OAAOJ,KAAKE,QAtYKhO,EAsYc8N,KAAKC,QApYpC/N,EAAExH,EAAI,IACH,QAAQwH,EAAEC,MAAMD,EAAEE,MAAMF,EAAEvH,MAAMgI,GAAIT,EAAExH,MACtC,OAAOwH,EAAEC,MAAMD,EAAEE,MAAMF,EAAEvH,MAkYgBqV,KAAKC,KAtYnD,IAAmB/N,CAuYlB,CACA,SAAAD,GACC,OAAO+N,KAAKE,OAASjO,GAAU+N,KAAKC,MAAQD,KAAKC,IAClD,CACA,SAAAI,GACC,OAAOL,KAAKE,OAlSd,SAAmBhO,GAClB,IAAKA,EACJ,OAED,MAAMxH,EAAI0I,GAAQlB,GACZM,EAAI9H,EAAE,GACN4D,EAAIsE,GAAIlI,EAAE,IACV6H,EAAIK,GAAIlI,EAAE,IAChB,OAAOwH,EAAExH,EAAI,IACV,QAAQ8H,MAAMlE,OAAOiE,OAAOI,GAAIT,EAAExH,MAClC,OAAO8H,MAAMlE,OAAOiE,KACxB,CAuRuB8N,CAAUL,KAAKC,MAAQD,KAAKC,IAClD,CACA,GAAAK,CAAIC,EAAOC,GACV,MAAMC,EAAKT,KACX,GAAIO,EAAO,CACV,MAAMG,EAAKD,EAAGtN,IACRwN,EAAKJ,EAAMpN,IACjB,IAAIyN,EACJ,MAAMxT,EAAIoT,IAAWI,EAAK,GAAMJ,EAC1BtN,EAAI,EAAI9F,EAAI,EACZ1C,EAAIgW,EAAGhW,EAAIiW,EAAGjW,EACdmW,IAAO3N,EAAIxI,IAAO,EAAIwI,GAAKA,EAAIxI,IAAM,EAAIwI,EAAIxI,IAAM,GAAK,EAC9DkW,EAAK,EAAIC,EACTH,EAAGvO,EAAI,IAAO0O,EAAKH,EAAGvO,EAAIyO,EAAKD,EAAGxO,EAAI,GACtCuO,EAAGtO,EAAI,IAAOyO,EAAKH,EAAGtO,EAAIwO,EAAKD,EAAGvO,EAAI,GACtCsO,EAAG/V,EAAI,IAAOkW,EAAKH,EAAG/V,EAAIiW,EAAKD,EAAGhW,EAAI,GACtC+V,EAAGhW,EAAI0C,EAAIsT,EAAGhW,GAAK,EAAI0C,GAAKuT,EAAGjW,EAC/B+V,EAAGtN,IAAMuN,CACV,CACA,OAAOD,CACR,CACA,KAAAnB,GACC,OAAO,IAAIO,GAAMG,KAAK7M,IACvB,CACA,KAAA2N,CAAMpW,GAEL,OADAsV,KAAKC,KAAKvV,EAAIgI,GAAIhI,GACXsV,IACR,CACA,OAAAe,CAAQ3B,GAGP,OAFYY,KAAKC,KACbvV,GAAK,EAAI0U,EACNY,IACR,CACA,SAAAgB,GACC,MAAM7N,EAAM6M,KAAKC,KACXgB,EAAMpV,GAAc,GAARsH,EAAIhB,EAAkB,IAARgB,EAAIf,EAAmB,IAARe,EAAIxI,GAEnD,OADAwI,EAAIhB,EAAIgB,EAAIf,EAAIe,EAAIxI,EAAIsW,EACjBjB,IACR,CACA,OAAAkB,CAAQ9B,GAGP,OAFYY,KAAKC,KACbvV,GAAK,EAAI0U,EACNY,IACR,CACA,MAAAmB,GACC,MAAMjP,EAAI8N,KAAKC,KAIf,OAHA/N,EAAEC,EAAI,IAAMD,EAAEC,EACdD,EAAEE,EAAI,IAAMF,EAAEE,EACdF,EAAEvH,EAAI,IAAMuH,EAAEvH,EACPqV,IACR,CACA,OAAAoB,CAAQhC,GAEP,OADAD,GAAOa,KAAKC,KAAM,EAAGb,GACdY,IACR,CACA,MAAAqB,CAAOjC,GAEN,OADAD,GAAOa,KAAKC,KAAM,GAAIb,GACfY,IACR,CACA,QAAAsB,CAASlC,GAER,OADAD,GAAOa,KAAKC,KAAM,EAAGb,GACdY,IACR,CACA,UAAAuB,CAAWnC,GAEV,OADAD,GAAOa,KAAKC,KAAM,GAAIb,GACfY,IACR,CACA,MAAAwB,CAAOC,GAEN,OA/WF,SAAgBvP,EAAGuP,GAClB,IAAIjP,EAAIY,GAAQlB,GAChBM,EAAE,GAAKe,GAAIf,EAAE,GAAKiP,GAClBjP,EAAIc,GAAQd,GACZN,EAAEC,EAAIK,EAAE,GACRN,EAAEE,EAAII,EAAE,GACRN,EAAEvH,EAAI6H,EAAE,EACT,CAuWEgP,CAAOxB,KAAKC,KAAMwB,GACXzB,IACR,EAED,SAAS0B,GAAUhC,GAClB,OAAO,IAAIG,GAAMH,EAClB,CAEA,MAAMiC,GAAuBzhB,GAAUA,aAAiB0hB,gBAAkB1hB,aAAiB2hB,cAC3F,SAAStB,GAAMrgB,GACb,OAAOyhB,GAAoBzhB,GAASA,EAAQwhB,GAAUxhB,EACxD,CACA,SAAS4hB,GAAc5hB,GACrB,OAAOyhB,GAAoBzhB,GACvBA,EACAwhB,GAAUxhB,GAAOohB,SAAS,IAAKD,OAAO,IAAKpP,WACjD,CAEA,MAAM8P,GAAYvgB,OAAOuH,OAAO,MAC1BiZ,GAAcxgB,OAAOuH,OAAO,MAClC,SAASkZ,GAAWC,EAAM9f,GACxB,IAAKA,EACH,OAAO8f,EAET,MAAM9Z,EAAOhG,EAAI+f,MAAM,KACvB,IAAK,IAAIja,EAAI,EAAGiE,EAAI/D,EAAK1G,OAAQwG,EAAIiE,IAAKjE,EAAG,CAC3C,MAAMe,EAAIb,EAAKF,GACfga,EAAOA,EAAKjZ,KAAOiZ,EAAKjZ,GAAKzH,OAAOuH,OAAO,MAC7C,CACA,OAAOmZ,CACT,CACA,SAASE,GAAIC,EAAMC,EAAOC,GACxB,MAAqB,iBAAVD,EACF9Y,EAAMyY,GAAWI,EAAMC,GAAQC,GAEjC/Y,EAAMyY,GAAWI,EAAM,IAAKC,EACrC,CAmFA,IAAIE,GAAW,IAlFf,MACE,WAAA1C,CAAY2C,GACVzC,KAAK0C,eAAYliB,EACjBwf,KAAK2C,gBAAkB,kBACvB3C,KAAK4C,YAAc,kBACnB5C,KAAKO,MAAQ,OACbP,KAAK6C,SAAW,CAAC,EACjB7C,KAAK8C,iBAAoBC,GAAYA,EAAQC,MAAMC,SAASC,sBAC5DlD,KAAKmD,SAAW,CAAC,EACjBnD,KAAKoD,OAAS,CACZ,YACA,WACA,QACA,aACA,aAEFpD,KAAKqD,KAAO,CACVC,OAAQ,qDACR1Y,KAAM,GACN2Y,MAAO,SACPC,WAAY,IACZhD,OAAQ,MAEVR,KAAKyD,MAAQ,CAAC,EACdzD,KAAK0D,qBAAuB,CAACC,EAAKta,IAAYyY,GAAczY,EAAQsZ,iBACpE3C,KAAK4D,iBAAmB,CAACD,EAAKta,IAAYyY,GAAczY,EAAQuZ,aAChE5C,KAAK6D,WAAa,CAACF,EAAKta,IAAYyY,GAAczY,EAAQkX,OAC1DP,KAAK8D,UAAY,IACjB9D,KAAK+D,YAAc,CACjBC,KAAM,UACNC,WAAW,GAEbjE,KAAKkE,qBAAsB,EAC3BlE,KAAKmE,QAAU,KACfnE,KAAKoE,QAAU,KACfpE,KAAKqE,SAAU,EACfrE,KAAKsE,QAAU,CAAC,EAChBtE,KAAKuE,YAAa,EAClBvE,KAAKwE,WAAQhkB,EACbwf,KAAKyE,OAAS,CAAC,EACfzE,KAAK0E,UAAW,EAChB1E,KAAK2E,yBAA0B,EAC/B3E,KAAK4E,SAASnC,EAChB,CACA,GAAAL,CAAIE,EAAOC,GACT,OAAOH,GAAIpC,KAAMsC,EAAOC,EAC1B,CACA,GAAAsC,CAAIvC,GACF,OAAOL,GAAWjC,KAAMsC,EAC1B,CACA,QAAAsC,CAAStC,EAAOC,GACd,OAAOH,GAAIJ,GAAaM,EAAOC,EACjC,CACA,QAAAuC,CAASxC,EAAOC,GACd,OAAOH,GAAIL,GAAWO,EAAOC,EAC/B,CACA,KAAAwC,CAAMzC,EAAO0C,EAAMC,EAAaC,GAC9B,MAAMC,EAAclD,GAAWjC,KAAMsC,GAC/B8C,EAAoBnD,GAAWjC,KAAMiF,GACrCI,EAAc,IAAML,EAC1BxjB,OAAO8jB,iBAAiBH,EAAa,CACnC,CAACE,GAAc,CACbnlB,MAAOilB,EAAYH,GACnBO,UAAU,GAEZ,CAACP,GAAO,CACNQ,YAAY,EACZ,GAAAX,GACE,MAAMY,EAAQzF,KAAKqF,GACbvc,EAASsc,EAAkBF,GACjC,OAAI7d,EAASoe,GACJjkB,OAAOge,OAAO,CAAC,EAAG1W,EAAQ2c,GAE5B9d,EAAe8d,EAAO3c,EAC/B,EACA,GAAAsZ,CAAIliB,GACF8f,KAAKqF,GAAenlB,CACtB,IAGN,GAE0B,CAC1BwlB,YAAcV,IAAUA,EAAKW,WAAW,MACxCC,WAAaZ,GAAkB,WAATA,EACtBvB,MAAO,CACLoC,UAAW,eAEb9B,YAAa,CACX2B,aAAa,EACbE,YAAY,KAahB,SAASE,GAAanC,EAAKziB,EAAM6kB,EAAIC,EAASC,GAC5C,IAAIC,EAAYhlB,EAAK+kB,GAQrB,OAPKC,IACHA,EAAYhlB,EAAK+kB,GAAUtC,EAAIwC,YAAYF,GAAQG,MACnDL,EAAGvjB,KAAKyjB,IAENC,EAAYF,IACdA,EAAUE,GAELF,CACT,CACA,SAASK,GAAa1C,EAAKN,EAAMiD,EAAeC,GAE9C,IAAIrlB,GADJqlB,EAAQA,GAAS,CAAC,GACDrlB,KAAOqlB,EAAMrlB,MAAQ,CAAC,EACnC6kB,EAAKQ,EAAMC,eAAiBD,EAAMC,gBAAkB,GACpDD,EAAMlD,OAASA,IACjBniB,EAAOqlB,EAAMrlB,KAAO,CAAC,EACrB6kB,EAAKQ,EAAMC,eAAiB,GAC5BD,EAAMlD,KAAOA,GAEfM,EAAI8C,OACJ9C,EAAIN,KAAOA,EACX,IAAI2C,EAAU,EACd,MAAMxd,EAAO8d,EAAc5kB,OAC3B,IAAIwG,EAAG0W,EAAG8H,EAAMC,EAAOC,EACvB,IAAK1e,EAAI,EAAGA,EAAIM,EAAMN,IAEpB,GADAye,EAAQL,EAAcpe,GAClBye,UAA4D,IAAnBxf,EAAQwf,GACnDX,EAAUF,GAAanC,EAAKziB,EAAM6kB,EAAIC,EAASW,QAC1C,GAAIxf,EAAQwf,GACjB,IAAK/H,EAAI,EAAG8H,EAAOC,EAAMjlB,OAAQkd,EAAI8H,EAAM9H,IACzCgI,EAAcD,EAAM/H,GAChBgI,SAAsDzf,EAAQyf,KAChEZ,EAAUF,GAAanC,EAAKziB,EAAM6kB,EAAIC,EAASY,IAKvDjD,EAAIkD,UACJ,MAAMC,EAAQf,EAAGrkB,OAAS,EAC1B,GAAIolB,EAAQR,EAAc5kB,OAAQ,CAChC,IAAKwG,EAAI,EAAGA,EAAI4e,EAAO5e,WACdhH,EAAK6kB,EAAG7d,IAEjB6d,EAAGgB,OAAO,EAAGD,EACf,CACA,OAAOd,CACT,CACA,SAASgB,GAAYhE,EAAOiE,EAAOb,GACjC,MAAMtD,EAAmBE,EAAMkE,wBACzBC,EAAsB,IAAVf,EAAc9jB,KAAKuK,IAAIuZ,EAAQ,EAAG,IAAO,EAC3D,OAAO9jB,KAAKuJ,OAAOob,EAAQE,GAAarE,GAAoBA,EAAmBqE,CACjF,CACA,SAASC,GAAYC,EAAQ1D,IAC3BA,EAAMA,GAAO0D,EAAOC,WAAW,OAC3Bb,OACJ9C,EAAI4D,iBACJ5D,EAAI6D,UAAU,EAAG,EAAGH,EAAOjB,MAAOiB,EAAOI,QACzC9D,EAAIkD,SACN,CACA,SAASa,GAAU/D,EAAKta,EAASgD,EAAGC,GAClC,IAAItM,EAAM2nB,EAASC,EAAShd,EAAMid,EAClC,MAAMtE,EAAQla,EAAQye,WAChBC,EAAW1e,EAAQ0e,SACnBC,EAAS3e,EAAQ2e,OACvB,IAAIC,GAAOF,GAAY,GAAK3c,EAC5B,GAAImY,GAA0B,iBAAVA,IAClBvjB,EAAOujB,EAAM7gB,WACA,8BAAT1C,GAAiD,+BAATA,GAM1C,OALA2jB,EAAI8C,OACJ9C,EAAIuE,UAAU7b,EAAGC,GACjBqX,EAAInC,OAAOyG,GACXtE,EAAIwE,UAAU5E,GAAQA,EAAM6C,MAAQ,GAAI7C,EAAMkE,OAAS,EAAGlE,EAAM6C,MAAO7C,EAAMkE,aAC7E9D,EAAIkD,UAIR,KAAIza,MAAM4b,IAAWA,GAAU,GAA/B,CAIA,OADArE,EAAIyE,YACI7E,GACR,QACEI,EAAI0E,IAAIhc,EAAGC,EAAG0b,EAAQ,EAAGhd,GACzB2Y,EAAI2E,YACJ,MACF,IAAK,WACH3E,EAAI4E,OAAOlc,EAAI/J,KAAK0M,IAAIiZ,GAAOD,EAAQ1b,EAAIhK,KAAK2N,IAAIgY,GAAOD,GAC3DC,GAAO1c,GACPoY,EAAI6E,OAAOnc,EAAI/J,KAAK0M,IAAIiZ,GAAOD,EAAQ1b,EAAIhK,KAAK2N,IAAIgY,GAAOD,GAC3DC,GAAO1c,GACPoY,EAAI6E,OAAOnc,EAAI/J,KAAK0M,IAAIiZ,GAAOD,EAAQ1b,EAAIhK,KAAK2N,IAAIgY,GAAOD,GAC3DrE,EAAI2E,YACJ,MACF,IAAK,cACHT,EAAwB,KAATG,EACfpd,EAAOod,EAASH,EAChBF,EAAUrlB,KAAK2N,IAAIgY,EAAM3c,GAAcV,EACvCgd,EAAUtlB,KAAK0M,IAAIiZ,EAAM3c,GAAcV,EACvC+Y,EAAI0E,IAAIhc,EAAIsb,EAASrb,EAAIsb,EAASC,EAAcI,EAAMld,EAAIkd,EAAM5c,GAChEsY,EAAI0E,IAAIhc,EAAIub,EAAStb,EAAIqb,EAASE,EAAcI,EAAM5c,EAAS4c,GAC/DtE,EAAI0E,IAAIhc,EAAIsb,EAASrb,EAAIsb,EAASC,EAAcI,EAAKA,EAAM5c,GAC3DsY,EAAI0E,IAAIhc,EAAIub,EAAStb,EAAIqb,EAASE,EAAcI,EAAM5c,EAAS4c,EAAMld,GACrE4Y,EAAI2E,YACJ,MACF,IAAK,OACH,IAAKP,EAAU,CACbnd,EAAOtI,KAAKmmB,QAAUT,EACtBrE,EAAI+E,KAAKrc,EAAIzB,EAAM0B,EAAI1B,EAAM,EAAIA,EAAM,EAAIA,GAC3C,KACF,CACAqd,GAAO3c,EACT,IAAK,UACHqc,EAAUrlB,KAAK2N,IAAIgY,GAAOD,EAC1BJ,EAAUtlB,KAAK0M,IAAIiZ,GAAOD,EAC1BrE,EAAI4E,OAAOlc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI6E,OAAOnc,EAAIub,EAAStb,EAAIqb,GAC5BhE,EAAI6E,OAAOnc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI6E,OAAOnc,EAAIub,EAAStb,EAAIqb,GAC5BhE,EAAI2E,YACJ,MACF,IAAK,WACHL,GAAO3c,EACT,IAAK,QACHqc,EAAUrlB,KAAK2N,IAAIgY,GAAOD,EAC1BJ,EAAUtlB,KAAK0M,IAAIiZ,GAAOD,EAC1BrE,EAAI4E,OAAOlc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI6E,OAAOnc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI4E,OAAOlc,EAAIub,EAAStb,EAAIqb,GAC5BhE,EAAI6E,OAAOnc,EAAIub,EAAStb,EAAIqb,GAC5B,MACF,IAAK,OACHA,EAAUrlB,KAAK2N,IAAIgY,GAAOD,EAC1BJ,EAAUtlB,KAAK0M,IAAIiZ,GAAOD,EAC1BrE,EAAI4E,OAAOlc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI6E,OAAOnc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI4E,OAAOlc,EAAIub,EAAStb,EAAIqb,GAC5BhE,EAAI6E,OAAOnc,EAAIub,EAAStb,EAAIqb,GAC5BM,GAAO3c,EACPqc,EAAUrlB,KAAK2N,IAAIgY,GAAOD,EAC1BJ,EAAUtlB,KAAK0M,IAAIiZ,GAAOD,EAC1BrE,EAAI4E,OAAOlc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI6E,OAAOnc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI4E,OAAOlc,EAAIub,EAAStb,EAAIqb,GAC5BhE,EAAI6E,OAAOnc,EAAIub,EAAStb,EAAIqb,GAC5B,MACF,IAAK,OACHA,EAAUrlB,KAAK2N,IAAIgY,GAAOD,EAC1BJ,EAAUtlB,KAAK0M,IAAIiZ,GAAOD,EAC1BrE,EAAI4E,OAAOlc,EAAIsb,EAASrb,EAAIsb,GAC5BjE,EAAI6E,OAAOnc,EAAIsb,EAASrb,EAAIsb,GAC5B,MACF,IAAK,OACHjE,EAAI4E,OAAOlc,EAAGC,GACdqX,EAAI6E,OAAOnc,EAAI/J,KAAK2N,IAAIgY,GAAOD,EAAQ1b,EAAIhK,KAAK0M,IAAIiZ,GAAOD,GAG7DrE,EAAIgF,OACAtf,EAAQuf,YAAc,GACxBjF,EAAIkF,QAhFN,CAkFF,CACA,SAASC,GAAeC,EAAOC,EAAMC,GAEnC,OADAA,EAASA,GAAU,IACXD,GAASD,GAASA,EAAM1c,EAAI2c,EAAKE,KAAOD,GAAUF,EAAM1c,EAAI2c,EAAKG,MAAQF,GACjFF,EAAMzc,EAAI0c,EAAKI,IAAMH,GAAUF,EAAMzc,EAAI0c,EAAKK,OAASJ,CACzD,CACA,SAASK,GAAS3F,EAAKqF,GACrBrF,EAAI8C,OACJ9C,EAAIyE,YACJzE,EAAI+E,KAAKM,EAAKE,KAAMF,EAAKI,IAAKJ,EAAKG,MAAQH,EAAKE,KAAMF,EAAKK,OAASL,EAAKI,KACzEzF,EAAI4F,MACN,CACA,SAASC,GAAW7F,GAClBA,EAAIkD,SACN,CACA,SAAS4C,GAAe9F,EAAK+F,EAAU5gB,EAAQ6gB,EAAM3F,GACnD,IAAK0F,EACH,OAAO/F,EAAI6E,OAAO1f,EAAOuD,EAAGvD,EAAOwD,GAErC,GAAa,WAAT0X,EAAmB,CACrB,MAAM4F,GAAYF,EAASrd,EAAIvD,EAAOuD,GAAK,EAC3CsX,EAAI6E,OAAOoB,EAAUF,EAASpd,GAC9BqX,EAAI6E,OAAOoB,EAAU9gB,EAAOwD,EAC9B,KAAoB,UAAT0X,KAAuB2F,EAChChG,EAAI6E,OAAOkB,EAASrd,EAAGvD,EAAOwD,GAE9BqX,EAAI6E,OAAO1f,EAAOuD,EAAGqd,EAASpd,GAEhCqX,EAAI6E,OAAO1f,EAAOuD,EAAGvD,EAAOwD,EAC9B,CACA,SAASud,GAAelG,EAAK+F,EAAU5gB,EAAQ6gB,GAC7C,IAAKD,EACH,OAAO/F,EAAI6E,OAAO1f,EAAOuD,EAAGvD,EAAOwD,GAErCqX,EAAImG,cACFH,EAAOD,EAASK,KAAOL,EAASM,KAChCL,EAAOD,EAASO,KAAOP,EAASQ,KAChCP,EAAO7gB,EAAOkhB,KAAOlhB,EAAOihB,KAC5BJ,EAAO7gB,EAAOohB,KAAOphB,EAAOmhB,KAC5BnhB,EAAOuD,EACPvD,EAAOwD,EACX,CACA,SAAS6d,GAAWxG,EAAKyG,EAAM/d,EAAGC,EAAG+W,EAAMgH,EAAO,CAAC,GACjD,MAAMC,EAAQnjB,EAAQijB,GAAQA,EAAO,CAACA,GAChCvB,EAASwB,EAAKE,YAAc,GAA0B,KAArBF,EAAKG,YAC5C,IAAItiB,EAAGuiB,EAIP,IAHA9G,EAAI8C,OACJ9C,EAAIN,KAAOA,EAAK4C,OAmBlB,SAAuBtC,EAAK0G,GACtBA,EAAKK,aACP/G,EAAIuE,UAAUmC,EAAKK,YAAY,GAAIL,EAAKK,YAAY,IAEjDxjB,EAAcmjB,EAAKtC,WACtBpE,EAAInC,OAAO6I,EAAKtC,UAEdsC,EAAK9J,QACPoD,EAAIgH,UAAYN,EAAK9J,OAEnB8J,EAAKO,YACPjH,EAAIiH,UAAYP,EAAKO,WAEnBP,EAAKQ,eACPlH,EAAIkH,aAAeR,EAAKQ,aAE5B,CAlCEC,CAAcnH,EAAK0G,GACdniB,EAAI,EAAGA,EAAIoiB,EAAM5oB,SAAUwG,EAC9BuiB,EAAOH,EAAMpiB,GACT2gB,IACEwB,EAAKG,cACP7G,EAAIoH,YAAcV,EAAKG,aAEpBtjB,EAAcmjB,EAAKE,eACtB5G,EAAIqH,UAAYX,EAAKE,aAEvB5G,EAAIsH,WAAWR,EAAMpe,EAAGC,EAAG+d,EAAKa,WAElCvH,EAAIwH,SAASV,EAAMpe,EAAGC,EAAG+d,EAAKa,UAC9BE,GAAazH,EAAKtX,EAAGC,EAAGme,EAAMJ,GAC9B/d,GAAK+W,EAAKG,WAEZG,EAAIkD,SACN,CAkBA,SAASuE,GAAazH,EAAKtX,EAAGC,EAAGme,EAAMJ,GACrC,GAAIA,EAAKgB,eAAiBhB,EAAKiB,UAAW,CACxC,MAAMC,EAAU5H,EAAIwC,YAAYsE,GAC1BvB,EAAO7c,EAAIkf,EAAQC,sBACnBrC,EAAQ9c,EAAIkf,EAAQE,uBACpBrC,EAAM9c,EAAIif,EAAQG,wBAClBrC,EAAS/c,EAAIif,EAAQI,yBACrBC,EAAcvB,EAAKgB,eAAiBjC,EAAMC,GAAU,EAAIA,EAC9D1F,EAAIoH,YAAcpH,EAAIgH,UACtBhH,EAAIyE,YACJzE,EAAIqH,UAAYX,EAAKwB,iBAAmB,EACxClI,EAAI4E,OAAOW,EAAM0C,GACjBjI,EAAI6E,OAAOW,EAAOyC,GAClBjI,EAAIkF,QACN,CACF,CACA,SAASiD,GAAmBnI,EAAK+E,GAC/B,MAAM,EAACrc,EAAC,EAAEC,EAAC,EAAE4G,EAAC,EAAEV,EAAC,OAAEwV,GAAUU,EAC7B/E,EAAI0E,IAAIhc,EAAI2b,EAAO+D,QAASzf,EAAI0b,EAAO+D,QAAS/D,EAAO+D,SAAU1gB,EAASN,GAAI,GAC9E4Y,EAAI6E,OAAOnc,EAAGC,EAAIkG,EAAIwV,EAAOgE,YAC7BrI,EAAI0E,IAAIhc,EAAI2b,EAAOgE,WAAY1f,EAAIkG,EAAIwV,EAAOgE,WAAYhE,EAAOgE,WAAYjhB,EAAIM,GAAS,GAC1FsY,EAAI6E,OAAOnc,EAAI6G,EAAI8U,EAAOiE,YAAa3f,EAAIkG,GAC3CmR,EAAI0E,IAAIhc,EAAI6G,EAAI8U,EAAOiE,YAAa3f,EAAIkG,EAAIwV,EAAOiE,YAAajE,EAAOiE,YAAa5gB,EAAS,GAAG,GAChGsY,EAAI6E,OAAOnc,EAAI6G,EAAG5G,EAAI0b,EAAOkE,UAC7BvI,EAAI0E,IAAIhc,EAAI6G,EAAI8U,EAAOkE,SAAU5f,EAAI0b,EAAOkE,SAAUlE,EAAOkE,SAAU,GAAI7gB,GAAS,GACpFsY,EAAI6E,OAAOnc,EAAI2b,EAAO+D,QAASzf,EACjC,CAEA,MAAM6f,GAAc,IAAIC,OAAO,wCACzBC,GAAa,IAAID,OAAO,yEAC9B,SAASE,GAAapsB,EAAO0K,GAC3B,MAAM2hB,GAAW,GAAKrsB,GAAOssB,MAAML,IACnC,IAAKI,GAA0B,WAAfA,EAAQ,GACtB,OAAc,IAAP3hB,EAGT,OADA1K,GAASqsB,EAAQ,GACTA,EAAQ,IAChB,IAAK,KACH,OAAOrsB,EACT,IAAK,IACHA,GAAS,IAGX,OAAO0K,EAAO1K,CAChB,CAEA,SAASusB,GAAkBvsB,EAAOQ,GAChC,MAAMqf,EAAM,CAAC,EACP2M,EAAWrlB,EAAS3G,GACpB0H,EAAOskB,EAAWlrB,OAAO4G,KAAK1H,GAASA,EACvCisB,EAAOtlB,EAASnH,GAClBwsB,EACEE,GAAQjlB,EAAezH,EAAM0sB,GAAO1sB,EAAMQ,EAAMksB,KAChDA,GAAQ1sB,EAAM0sB,GAChB,IAAM1sB,EACV,IAAK,MAAM0sB,KAAQxkB,EACjB2X,EAAI6M,IAAqBD,EAAKC,IAXF,EAa9B,OAAO7M,CACT,CACA,SAAS8M,GAAO3sB,GACd,OAAOusB,GAAkBvsB,EAAO,CAACkpB,IAAK,IAAKD,MAAO,IAAKE,OAAQ,IAAKH,KAAM,KAC5E,CACA,SAAS4D,GAAc5sB,GACrB,OAAOusB,GAAkBvsB,EAAO,CAAC,UAAW,WAAY,aAAc,eACxE,CACA,SAAS6sB,GAAU7sB,GACjB,MAAM+J,EAAM4iB,GAAO3sB,GAGnB,OAFA+J,EAAImc,MAAQnc,EAAIif,KAAOjf,EAAIkf,MAC3Blf,EAAIwd,OAASxd,EAAImf,IAAMnf,EAAIof,OACpBpf,CACT,CACA,SAAS+iB,GAAO3jB,EAAS4jB,GACvB5jB,EAAUA,GAAW,CAAC,EACtB4jB,EAAWA,GAAYzK,GAASa,KAChC,IAAIzY,EAAOjD,EAAe0B,EAAQuB,KAAMqiB,EAASriB,MAC7B,iBAATA,IACTA,EAAOoU,SAASpU,EAAM,KAExB,IAAI2Y,EAAQ5b,EAAe0B,EAAQka,MAAO0J,EAAS1J,OAC/CA,KAAW,GAAKA,GAAOiJ,MAAMH,MAE/B9I,EAAQ,IAEV,MAAMF,EAAO,CACXC,OAAQ3b,EAAe0B,EAAQia,OAAQ2J,EAAS3J,QAChDE,WAAY8I,GAAa3kB,EAAe0B,EAAQma,WAAYyJ,EAASzJ,YAAa5Y,GAClFA,OACA2Y,QACA/C,OAAQ7Y,EAAe0B,EAAQmX,OAAQyM,EAASzM,QAChDyF,OAAQ,IAGV,OADA5C,EAAK4C,OAzVP,SAAsB5C,GACpB,OAAKA,GAAQnc,EAAcmc,EAAKzY,OAAS1D,EAAcmc,EAAKC,QACnD,MAEDD,EAAKE,MAAQF,EAAKE,MAAQ,IAAM,KACrCF,EAAK7C,OAAS6C,EAAK7C,OAAS,IAAM,IACnC6C,EAAKzY,KAAO,MACZyY,EAAKC,MACT,CAiVgB4J,CAAa7J,GACpBA,CACT,CACA,SAASxe,GAAQsoB,EAAQpK,EAAS5gB,EAAOirB,GACvC,IACIllB,EAAGM,EAAMtI,EADTmtB,GAAY,EAEhB,IAAKnlB,EAAI,EAAGM,EAAO2kB,EAAOzrB,OAAQwG,EAAIM,IAAQN,EAE5C,GADAhI,EAAQitB,EAAOjlB,QACD1H,IAAVN,SAGYM,IAAZuiB,GAA0C,mBAAV7iB,IAClCA,EAAQA,EAAM6iB,GACdsK,GAAY,QAEA7sB,IAAV2B,GAAuBgF,EAAQjH,KACjCA,EAAQA,EAAMiC,EAAQjC,EAAMwB,QAC5B2rB,GAAY,QAEA7sB,IAAVN,GAIF,OAHIktB,IAASC,IACXD,EAAKC,WAAY,GAEZntB,CAGb,CAUA,SAASotB,GAAcC,EAAexK,GACpC,OAAOvhB,OAAOge,OAAOhe,OAAOuH,OAAOwkB,GAAgBxK,EACrD,CAEA,SAASyK,GAAQC,EAAOvtB,EAAOwtB,GAC7BA,EAAMA,GAAO,CAAEvrB,GAAUsrB,EAAMtrB,GAASjC,GACxC,IAEIytB,EAFAC,EAAKH,EAAM/rB,OAAS,EACpBmsB,EAAK,EAET,KAAOD,EAAKC,EAAK,GACfF,EAAOE,EAAKD,GAAO,EACfF,EAAIC,GACNE,EAAKF,EAELC,EAAKD,EAGT,MAAO,CAACE,KAAID,KACd,CACA,MAAME,GAAe,CAACL,EAAOrrB,EAAKlC,IAChCstB,GAAQC,EAAOvtB,GAAOiC,GAASsrB,EAAMtrB,GAAOC,GAAOlC,IAC/C6tB,GAAgB,CAACN,EAAOrrB,EAAKlC,IACjCstB,GAAQC,EAAOvtB,GAAOiC,GAASsrB,EAAMtrB,GAAOC,IAAQlC,IActD,MAAM8tB,GAAc,CAAC,OAAQ,MAAO,QAAS,SAAU,WA+BvD,SAASC,GAAoBvhB,EAAOwhB,GAClC,MAAMC,EAAOzhB,EAAM0hB,SACnB,IAAKD,EACH,OAEF,MAAME,EAAYF,EAAKE,UACjBlsB,EAAQksB,EAAUllB,QAAQ+kB,IACjB,IAAX/rB,GACFksB,EAAUtH,OAAO5kB,EAAO,GAEtBksB,EAAU3sB,OAAS,IAGvBssB,GAAY9rB,SAASE,WACZsK,EAAMtK,EAAI,WAEZsK,EAAM0hB,SACf,CACA,SAASE,GAAaC,GACpB,MAAMnM,EAAM,IAAIoM,IAChB,IAAItmB,EAAGM,EACP,IAAKN,EAAI,EAAGM,EAAO+lB,EAAM7sB,OAAQwG,EAAIM,IAAQN,EAC3Cka,EAAIqM,IAAIF,EAAMrmB,IAEhB,OAAIka,EAAIxX,OAASpC,EACR+lB,EAEFpoB,MAAMuoB,KAAKtM,EACpB,CAEA,SAASuM,GAAgBC,EAAQC,EAAW,CAAC,IAAKC,EAAaF,EAAQ3B,EAAU8B,EAAY,IAAMH,EAAO,IACnGrkB,EAAQ0iB,KACXA,EAAW+B,GAAS,YAAaJ,IAEnC,MAAMrI,EAAQ,CACZ,CAAC0I,OAAOC,aAAc,SACtBC,YAAY,EACZC,QAASR,EACTS,YAAaP,EACbjJ,UAAWoH,EACXqC,WAAYP,EACZjK,SAAWxC,GAAUqM,GAAgB,CAACrM,KAAUsM,GAASC,EAAUC,EAAY7B,IAEjF,OAAO,IAAIsC,MAAMhJ,EAAO,CACtBiJ,eAAc,CAAC1mB,EAAQ8jB,YACd9jB,EAAO8jB,UACP9jB,EAAO2mB,aACPb,EAAO,GAAGhC,IACV,GAET/H,IAAG,CAAC/b,EAAQ8jB,IACH8C,GAAQ5mB,EAAQ8jB,GACrB,IAuLR,SAA8BA,EAAMiC,EAAUD,EAAQe,GACpD,IAAIzvB,EACJ,IAAK,MAAM0vB,KAAUf,EAEnB,GADA3uB,EAAQ8uB,GAASa,GAAQD,EAAQhD,GAAOgC,GACpCrkB,EAAQrK,GACV,OAAO4vB,GAAiBlD,EAAM1sB,GAC1B6vB,GAAkBnB,EAAQe,EAAO/C,EAAM1sB,GACvCA,CAGV,CAjMc8vB,CAAqBpD,EAAMiC,EAAUD,EAAQ9lB,KAEvDmnB,yBAAwB,CAACnnB,EAAQ8jB,IACxBsD,QAAQD,yBAAyBnnB,EAAOsmB,QAAQ,GAAIxC,GAE7DuD,eAAc,IACLD,QAAQC,eAAevB,EAAO,IAEvC9jB,IAAG,CAAChC,EAAQ8jB,IACHwD,GAAqBtnB,GAAQunB,SAASzD,GAE/C0D,QAAQxnB,GACCsnB,GAAqBtnB,GAE9B,GAAAsZ,CAAItZ,EAAQ8jB,EAAM1sB,GAChB,MAAMqwB,EAAUznB,EAAO0nB,WAAa1nB,EAAO0nB,SAAWzB,KAGtD,OAFAjmB,EAAO8jB,GAAQ2D,EAAQ3D,GAAQ1sB,SACxB4I,EAAO2mB,OACP,CACT,GAEJ,CACA,SAASgB,GAAed,EAAO5M,EAAS2N,EAAUC,GAChD,MAAMpK,EAAQ,CACZ4I,YAAY,EACZyB,OAAQjB,EACRkB,SAAU9N,EACV+N,UAAWJ,EACXK,OAAQ,IAAIvC,IACZ/L,aAAcA,GAAakN,EAAOgB,GAClCK,WAAarN,GAAQ8M,GAAed,EAAOhM,EAAK+M,EAAUC,GAC1D7L,SAAWxC,GAAUmO,GAAed,EAAM7K,SAASxC,GAAQS,EAAS2N,EAAUC,IAEhF,OAAO,IAAIpB,MAAMhJ,EAAO,CACtBiJ,eAAc,CAAC1mB,EAAQ8jB,YACd9jB,EAAO8jB,UACP+C,EAAM/C,IACN,GAET/H,IAAG,CAAC/b,EAAQ8jB,EAAMqE,IACTvB,GAAQ5mB,EAAQ8jB,GACrB,IA4CR,SAA6B9jB,EAAQ8jB,EAAMqE,GACzC,MAAM,OAACL,EAAM,SAAEC,EAAQ,UAAEC,EAAWrO,aAAcT,GAAelZ,EACjE,IAAI5I,EAAQ0wB,EAAOhE,GACfpiB,EAAWtK,IAAU8hB,EAAYkP,aAAatE,KAChD1sB,EAUJ,SAA4B0sB,EAAM1sB,EAAO4I,EAAQmoB,GAC/C,MAAM,OAACL,EAAM,SAAEC,EAAQ,UAAEC,EAAS,OAAEC,GAAUjoB,EAC9C,GAAIioB,EAAOjmB,IAAI8hB,GACb,MAAM,IAAIuE,MAAM,uBAAyBhrB,MAAMuoB,KAAKqC,GAAQK,KAAK,MAAQ,KAAOxE,GAElFmE,EAAOtC,IAAI7B,GACX1sB,EAAQA,EAAM2wB,EAAUC,GAAaG,GACrCF,EAAOM,OAAOzE,GACVkD,GAAiBlD,EAAM1sB,KACzBA,EAAQ6vB,GAAkBa,EAAOxB,QAASwB,EAAQhE,EAAM1sB,IAE1D,OAAOA,CACT,CAtBYoxB,CAAmB1E,EAAM1sB,EAAO4I,EAAQmoB,IAE9C9pB,EAAQjH,IAAUA,EAAMwB,SAC1BxB,EAoBJ,SAAuB0sB,EAAM1sB,EAAO4I,EAAQyoB,GAC1C,MAAM,OAACX,EAAM,SAAEC,EAAQ,UAAEC,EAAWrO,aAAcT,GAAelZ,EACjE,GAAIyB,EAAQsmB,EAAS1uB,QAAUovB,EAAY3E,GACzC1sB,EAAQA,EAAM2wB,EAAS1uB,MAAQjC,EAAMwB,aAChC,GAAI2F,EAASnH,EAAM,IAAK,CAC7B,MAAMsxB,EAAMtxB,EACN0uB,EAASgC,EAAOxB,QAAQqC,QAAOnjB,GAAKA,IAAMkjB,IAChDtxB,EAAQ,GACR,IAAK,MAAM2K,KAAQ2mB,EAAK,CACtB,MAAME,EAAW3B,GAAkBnB,EAAQgC,EAAQhE,EAAM/hB,GACzD3K,EAAMsC,KAAKiuB,GAAeiB,EAAUb,EAAUC,GAAaA,EAAUlE,GAAO5K,GAC9E,CACF,CACA,OAAO9hB,CACT,CAlCYyxB,CAAc/E,EAAM1sB,EAAO4I,EAAQkZ,EAAYuP,cAErDzB,GAAiBlD,EAAM1sB,KACzBA,EAAQuwB,GAAevwB,EAAO2wB,EAAUC,GAAaA,EAAUlE,GAAO5K,IAExE,OAAO9hB,CACT,CAzDc0xB,CAAoB9oB,EAAQ8jB,EAAMqE,KAE5ChB,yBAAwB,CAACnnB,EAAQ8jB,IACxB9jB,EAAO2Z,aAAaoP,QACvB3B,QAAQplB,IAAI6kB,EAAO/C,GAAQ,CAACpH,YAAY,EAAMsM,cAAc,QAAQtxB,EACpE0vB,QAAQD,yBAAyBN,EAAO/C,GAE9CuD,eAAc,IACLD,QAAQC,eAAeR,GAEhC7kB,IAAG,CAAChC,EAAQ8jB,IACHsD,QAAQplB,IAAI6kB,EAAO/C,GAE5B0D,QAAO,IACEJ,QAAQI,QAAQX,GAEzBvN,IAAG,CAACtZ,EAAQ8jB,EAAM1sB,KAChByvB,EAAM/C,GAAQ1sB,SACP4I,EAAO8jB,IACP,IAGb,CACA,SAASnK,GAAakN,EAAOnN,EAAW,CAACuP,YAAY,EAAMC,WAAW,IACpE,MAAM,YAACtM,EAAclD,EAASuP,WAAU,WAAEnM,EAAapD,EAASwP,UAAS,SAAEC,EAAWzP,EAASqP,SAAWlC,EAC1G,MAAO,CACLkC,QAASI,EACTF,WAAYrM,EACZsM,UAAWpM,EACXsL,aAAc1mB,EAAWkb,GAAeA,EAAc,IAAMA,EAC5D6L,YAAa/mB,EAAWob,GAAcA,EAAa,IAAMA,EAE7D,CACA,MAAMiK,GAAU,CAACD,EAAQ5K,IAAS4K,EAASA,EAASzlB,EAAY6a,GAAQA,EAClE8K,GAAmB,CAAClD,EAAM1sB,IAAUmH,EAASnH,IAAmB,aAAT0sB,IACzB,OAAjCprB,OAAO2uB,eAAejwB,IAAmBA,EAAM4f,cAAgBte,QAClE,SAASkuB,GAAQ5mB,EAAQ8jB,EAAM/nB,GAC7B,GAAIrD,OAAO4E,UAAUyD,eAAevD,KAAKwC,EAAQ8jB,GAC/C,OAAO9jB,EAAO8jB,GAEhB,MAAM1sB,EAAQ2E,IAEd,OADAiE,EAAO8jB,GAAQ1sB,EACRA,CACT,CA2CA,SAASgyB,GAAgBjF,EAAUL,EAAM1sB,GACvC,OAAOsK,EAAWyiB,GAAYA,EAASL,EAAM1sB,GAAS+sB,CACxD,CACA,MAAMkF,GAAW,CAAC/vB,EAAKgwB,KAAmB,IAARhwB,EAAegwB,EAC9B,iBAARhwB,EAAmB4H,EAAiBooB,EAAQhwB,QAAO5B,EAC9D,SAAS6xB,GAAUjQ,EAAKkQ,EAAclwB,EAAKmwB,EAAgBryB,GACzD,IAAK,MAAMkyB,KAAUE,EAAc,CACjC,MAAMhQ,EAAQ6P,GAAS/vB,EAAKgwB,GAC5B,GAAI9P,EAAO,CACTF,EAAIqM,IAAInM,GACR,MAAM2K,EAAWiF,GAAgB5P,EAAMuD,UAAWzjB,EAAKlC,GACvD,GAAIqK,EAAQ0iB,IAAaA,IAAa7qB,GAAO6qB,IAAasF,EACxD,OAAOtF,CAEX,MAAO,IAAc,IAAV3K,GAAmB/X,EAAQgoB,IAAmBnwB,IAAQmwB,EAC/D,OAAO,IAEX,CACA,OAAO,CACT,CACA,SAASxC,GAAkBuC,EAAcZ,EAAU9E,EAAM1sB,GACvD,MAAM4uB,EAAa4C,EAASrC,YACtBpC,EAAWiF,GAAgBR,EAAS7L,UAAW+G,EAAM1sB,GACrDsyB,EAAY,IAAIF,KAAiBxD,GACjC1M,EAAM,IAAIoM,IAChBpM,EAAIqM,IAAIvuB,GACR,IAAIkC,EAAMqwB,GAAiBrQ,EAAKoQ,EAAW5F,EAAMK,GAAYL,EAAM1sB,GACnE,OAAY,OAARkC,MAGAmI,EAAQ0iB,IAAaA,IAAaL,IACpCxqB,EAAMqwB,GAAiBrQ,EAAKoQ,EAAWvF,EAAU7qB,EAAKlC,GAC1C,OAARkC,KAICusB,GAAgBxoB,MAAMuoB,KAAKtM,GAAM,CAAC,IAAK0M,EAAY7B,GACxD,IAQJ,SAAsByE,EAAU9E,EAAM1sB,GACpC,MAAMkyB,EAASV,EAASpC,aAClB1C,KAAQwF,IACZA,EAAOxF,GAAQ,CAAC,GAElB,MAAM9jB,EAASspB,EAAOxF,GACtB,GAAIzlB,EAAQ2B,IAAWzB,EAASnH,GAC9B,OAAOA,EAET,OAAO4I,CACT,CAlBU4pB,CAAahB,EAAU9E,EAAM1sB,KACvC,CACA,SAASuyB,GAAiBrQ,EAAKoQ,EAAWpwB,EAAK6qB,EAAUpiB,GACvD,KAAOzI,GACLA,EAAMiwB,GAAUjQ,EAAKoQ,EAAWpwB,EAAK6qB,EAAUpiB,GAEjD,OAAOzI,CACT,CAuBA,SAAS4sB,GAAS5sB,EAAKwsB,GACrB,IAAK,MAAMtM,KAASsM,EAAQ,CAC1B,IAAKtM,EACH,SAEF,MAAMpiB,EAAQoiB,EAAMlgB,GACpB,GAAImI,EAAQrK,GACV,OAAOA,CAEX,CACF,CACA,SAASkwB,GAAqBtnB,GAC5B,IAAIV,EAAOU,EAAO2mB,MAIlB,OAHKrnB,IACHA,EAAOU,EAAO2mB,MAIlB,SAAkCb,GAChC,MAAMxM,EAAM,IAAIoM,IAChB,IAAK,MAAMlM,KAASsM,EAClB,IAAK,MAAMxsB,KAAOZ,OAAO4G,KAAKka,GAAOmP,QAAOxoB,IAAMA,EAAE0c,WAAW,OAC7DvD,EAAIqM,IAAIrsB,GAGZ,OAAO+D,MAAMuoB,KAAKtM,EACpB,CAZ0BuQ,CAAyB7pB,EAAOsmB,UAEjDhnB,CACT,CAWA,MAAMwqB,GAAUrrB,OAAOqrB,SAAW,MAC5BC,GAAW,CAACC,EAAQ5qB,IAAMA,EAAI4qB,EAAOpxB,SAAWoxB,EAAO5qB,GAAG6qB,MAAQD,EAAO5qB,GACzE8qB,GAAgBlP,GAA4B,MAAdA,EAAoB,IAAM,IAC9D,SAASmP,GAAYC,EAAYC,EAAaC,EAAYtkB,GACxD,MAAM4a,EAAWwJ,EAAWH,KAAOI,EAAcD,EAC3CG,EAAUF,EACVG,EAAOF,EAAWL,KAAOI,EAAcC,EACvCG,EAAMxlB,GAAsBslB,EAAS3J,GACrC8J,EAAMzlB,GAAsBulB,EAAMD,GACxC,IAAII,EAAMF,GAAOA,EAAMC,GACnBE,EAAMF,GAAOD,EAAMC,GACvBC,EAAMrnB,MAAMqnB,GAAO,EAAIA,EACvBC,EAAMtnB,MAAMsnB,GAAO,EAAIA,EACvB,MAAMC,EAAK7kB,EAAI2kB,EACTG,EAAK9kB,EAAI4kB,EACf,MAAO,CACLhK,SAAU,CACRrd,EAAGgnB,EAAQhnB,EAAIsnB,GAAML,EAAKjnB,EAAIqd,EAASrd,GACvCC,EAAG+mB,EAAQ/mB,EAAIqnB,GAAML,EAAKhnB,EAAIod,EAASpd,IAEzCgnB,KAAM,CACJjnB,EAAGgnB,EAAQhnB,EAAIunB,GAAMN,EAAKjnB,EAAIqd,EAASrd,GACvCC,EAAG+mB,EAAQ/mB,EAAIsnB,GAAMN,EAAKhnB,EAAIod,EAASpd,IAG7C,CAoDA,SAASunB,GAAoBf,EAAQhP,EAAY,KAC/C,MAAMgQ,EAAYd,GAAalP,GACzBiQ,EAAYjB,EAAOpxB,OACnBsyB,EAAS7tB,MAAM4tB,GAAWpL,KAAK,GAC/BsL,EAAK9tB,MAAM4tB,GACjB,IAAI7rB,EAAGgsB,EAAaC,EAChBC,EAAavB,GAASC,EAAQ,GAClC,IAAK5qB,EAAI,EAAGA,EAAI6rB,IAAa7rB,EAI3B,GAHAgsB,EAAcC,EACdA,EAAeC,EACfA,EAAavB,GAASC,EAAQ5qB,EAAI,GAC7BisB,EAAL,CAGA,GAAIC,EAAY,CACd,MAAMC,EAAaD,EAAWtQ,GAAaqQ,EAAarQ,GACxDkQ,EAAO9rB,GAAoB,IAAfmsB,GAAoBD,EAAWN,GAAaK,EAAaL,IAAcO,EAAa,CAClG,CACAJ,EAAG/rB,GAAMgsB,EACJE,EACA3oB,GAAKuoB,EAAO9rB,EAAI,MAAQuD,GAAKuoB,EAAO9rB,IAAO,GAC3C8rB,EAAO9rB,EAAI,GAAK8rB,EAAO9rB,IAAM,EAFhB8rB,EAAO9rB,EAAI,GADN8rB,EAAO9rB,EAL9B,EAhEJ,SAAwB4qB,EAAQkB,EAAQC,GACtC,MAAMF,EAAYjB,EAAOpxB,OACzB,IAAI4yB,EAAQC,EAAOC,EAAMC,EAAkBN,EACvCC,EAAavB,GAASC,EAAQ,GAClC,IAAK,IAAI5qB,EAAI,EAAGA,EAAI6rB,EAAY,IAAK7rB,EACnCisB,EAAeC,EACfA,EAAavB,GAASC,EAAQ5qB,EAAI,GAC7BisB,GAAiBC,IAGlBtoB,GAAakoB,EAAO9rB,GAAI,EAAG0qB,IAC7BqB,EAAG/rB,GAAK+rB,EAAG/rB,EAAI,GAAK,GAGtBosB,EAASL,EAAG/rB,GAAK8rB,EAAO9rB,GACxBqsB,EAAQN,EAAG/rB,EAAI,GAAK8rB,EAAO9rB,GAC3BusB,EAAmBnyB,KAAK0J,IAAIsoB,EAAQ,GAAKhyB,KAAK0J,IAAIuoB,EAAO,GACrDE,GAAoB,IAGxBD,EAAO,EAAIlyB,KAAKqL,KAAK8mB,GACrBR,EAAG/rB,GAAKosB,EAASE,EAAOR,EAAO9rB,GAC/B+rB,EAAG/rB,EAAI,GAAKqsB,EAAQC,EAAOR,EAAO9rB,KAEtC,CAkDEwsB,CAAe5B,EAAQkB,EAAQC,GAjDjC,SAAyBnB,EAAQmB,EAAInQ,EAAY,KAC/C,MAAMgQ,EAAYd,GAAalP,GACzBiQ,EAAYjB,EAAOpxB,OACzB,IAAIizB,EAAOT,EAAaC,EACpBC,EAAavB,GAASC,EAAQ,GAClC,IAAK,IAAI5qB,EAAI,EAAGA,EAAI6rB,IAAa7rB,EAAG,CAIlC,GAHAgsB,EAAcC,EACdA,EAAeC,EACfA,EAAavB,GAASC,EAAQ5qB,EAAI,IAC7BisB,EACH,SAEF,MAAMS,EAAST,EAAarQ,GACtB+Q,EAASV,EAAaL,GACxBI,IACFS,GAASC,EAASV,EAAYpQ,IAAc,EAC5CqQ,EAAa,MAAMrQ,KAAe8Q,EAASD,EAC3CR,EAAa,MAAML,KAAee,EAASF,EAAQV,EAAG/rB,IAEpDksB,IACFO,GAASP,EAAWtQ,GAAa8Q,GAAU,EAC3CT,EAAa,MAAMrQ,KAAe8Q,EAASD,EAC3CR,EAAa,MAAML,KAAee,EAASF,EAAQV,EAAG/rB,GAE1D,CACF,CAyBE4sB,CAAgBhC,EAAQmB,EAAInQ,EAC9B,CACA,SAASiR,GAAgBC,EAAIpoB,EAAKC,GAChC,OAAOvK,KAAKuK,IAAIvK,KAAKsK,IAAIooB,EAAInoB,GAAMD,EACrC,CAsBA,SAASqoB,GAA2BnC,EAAQzpB,EAAS2f,EAAMkM,EAAMpR,GAC/D,IAAI5b,EAAGM,EAAMugB,EAAOoM,EAIpB,GAHI9rB,EAAQ+rB,WACVtC,EAASA,EAAOrB,QAAQuD,IAAQA,EAAGjC,QAEE,aAAnC1pB,EAAQgsB,uBACVxB,GAAoBf,EAAQhP,OACvB,CACL,IAAIwR,EAAOJ,EAAOpC,EAAOA,EAAOpxB,OAAS,GAAKoxB,EAAO,GACrD,IAAK5qB,EAAI,EAAGM,EAAOsqB,EAAOpxB,OAAQwG,EAAIM,IAAQN,EAC5C6gB,EAAQ+J,EAAO5qB,GACfitB,EAAgBlC,GACdqC,EACAvM,EACA+J,EAAOxwB,KAAKsK,IAAI1E,EAAI,EAAGM,GAAQ0sB,EAAO,EAAI,IAAM1sB,GAChDa,EAAQksB,SAEVxM,EAAMgB,KAAOoL,EAAczL,SAASrd,EACpC0c,EAAMkB,KAAOkL,EAAczL,SAASpd,EACpCyc,EAAMiB,KAAOmL,EAAc7B,KAAKjnB,EAChC0c,EAAMmB,KAAOiL,EAAc7B,KAAKhnB,EAChCgpB,EAAOvM,CAEX,CACI1f,EAAQmsB,iBA7Cd,SAAyB1C,EAAQ9J,GAC/B,IAAI9gB,EAAGM,EAAMugB,EAAO0M,EAAQC,EACxBC,EAAa7M,GAAegK,EAAO,GAAI9J,GAC3C,IAAK9gB,EAAI,EAAGM,EAAOsqB,EAAOpxB,OAAQwG,EAAIM,IAAQN,EAC5CwtB,EAAaD,EACbA,EAASE,EACTA,EAAaztB,EAAIM,EAAO,GAAKsgB,GAAegK,EAAO5qB,EAAI,GAAI8gB,GACtDyM,IAGL1M,EAAQ+J,EAAO5qB,GACXwtB,IACF3M,EAAMgB,KAAOgL,GAAgBhM,EAAMgB,KAAMf,EAAKE,KAAMF,EAAKG,OACzDJ,EAAMkB,KAAO8K,GAAgBhM,EAAMkB,KAAMjB,EAAKI,IAAKJ,EAAKK,SAEtDsM,IACF5M,EAAMiB,KAAO+K,GAAgBhM,EAAMiB,KAAMhB,EAAKE,KAAMF,EAAKG,OACzDJ,EAAMmB,KAAO6K,GAAgBhM,EAAMmB,KAAMlB,EAAKI,IAAKJ,EAAKK,SAG9D,CA0BImM,CAAgB1C,EAAQ9J,EAE5B,CAEA,SAAS4M,KACP,MAAyB,oBAAX3xB,QAA8C,oBAAbZ,QACjD,CACA,SAASwyB,GAAeC,GACtB,IAAI1D,EAAS0D,EAAQC,WAIrB,OAHI3D,GAAgC,wBAAtBA,EAAO1vB,aACnB0vB,EAASA,EAAO4D,MAEX5D,CACT,CACA,SAAS6D,GAAcC,EAAYhU,EAAMiU,GACvC,IAAIC,EASJ,MAR0B,iBAAfF,GACTE,EAAgBpX,SAASkX,EAAY,KACJ,IAA7BA,EAAW/sB,QAAQ,OACrBitB,EAAgBA,EAAgB,IAAMlU,EAAK6T,WAAWI,KAGxDC,EAAgBF,EAEXE,CACT,CACA,MAAMC,GAAoBC,GAAYryB,OAAOoyB,iBAAiBC,EAAS,MAIvE,MAAMC,GAAY,CAAC,MAAO,QAAS,SAAU,QAC7C,SAASC,GAAmBC,EAAQlT,EAAOmT,GACzC,MAAMC,EAAS,CAAC,EAChBD,EAASA,EAAS,IAAMA,EAAS,GACjC,IAAK,IAAIxuB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMgC,EAAMqsB,GAAUruB,GACtByuB,EAAOzsB,GAAOtI,WAAW60B,EAAOlT,EAAQ,IAAMrZ,EAAMwsB,KAAY,CAClE,CAGA,OAFAC,EAAOvQ,MAAQuQ,EAAOzN,KAAOyN,EAAOxN,MACpCwN,EAAOlP,OAASkP,EAAOvN,IAAMuN,EAAOtN,OAC7BsN,CACT,CAoBA,SAASC,GAAoBC,EAAK7T,GAChC,MAAM,OAACqE,EAAM,wBAAEH,GAA2BlE,EACpCO,EAAQ8S,GAAiBhP,GACzByP,EAAgC,eAApBvT,EAAMwT,UAClBC,EAAWR,GAAmBjT,EAAO,WACrC0T,EAAUT,GAAmBjT,EAAO,SAAU,UAC9C,EAAClX,EAAC,EAAEC,EAAC,IAAE4qB,GAxBf,SAA2BL,EAAKxP,GAC9B,MAAMla,EAAI0pB,EAAIM,QAAUN,EAClBO,EAAUjqB,EAAEiqB,QACZvuB,EAASuuB,GAAWA,EAAQ11B,OAAS01B,EAAQ,GAAKjqB,GAClD,QAACkqB,EAAO,QAAEC,GAAWzuB,EAC3B,IACIwD,EAAGC,EADH4qB,GAAM,EAEV,GARmB,EAAC7qB,EAAGC,EAAGxD,KAAYuD,EAAI,GAAKC,EAAI,MAAQxD,IAAWA,EAAOyuB,YAQzEC,CAAaH,EAASC,EAASnqB,EAAErE,QACnCuD,EAAIgrB,EACJ/qB,EAAIgrB,MACC,CACL,MAAM5O,EAAOrB,EAAOoQ,wBACpBprB,EAAIxD,EAAO6uB,QAAUhP,EAAKQ,KAC1B5c,EAAIzD,EAAO8uB,QAAUjP,EAAKU,IAC1B8N,GAAM,CACR,CACA,MAAO,CAAC7qB,IAAGC,IAAG4qB,MAChB,CAOsBU,CAAkBf,EAAKxP,GACrCM,EAAUqP,EAAS9N,MAAQgO,GAAOD,EAAQ/N,MAC1CtB,EAAUoP,EAAS5N,KAAO8N,GAAOD,EAAQ7N,KAC/C,IAAI,MAAChD,EAAK,OAAEqB,GAAUzE,EAKtB,OAJI8T,IACF1Q,GAAS4Q,EAAS5Q,MAAQ6Q,EAAQ7Q,MAClCqB,GAAUuP,EAASvP,OAASwP,EAAQxP,QAE/B,CACLpb,EAAG/J,KAAKuJ,OAAOQ,EAAIsb,GAAWvB,EAAQiB,EAAOjB,MAAQc,GACrD5a,EAAGhK,KAAKuJ,OAAOS,EAAIsb,GAAWH,EAASJ,EAAOI,OAASP,GAE3D,CA0BA,MAAM2Q,GAAS3lB,GAAK5P,KAAKuJ,MAAU,GAAJqG,GAAU,GACzC,SAAS4lB,GAAezQ,EAAQ0Q,EAASC,EAAUC,GACjD,MAAM1U,EAAQ8S,GAAiBhP,GACzB6Q,EAAU1B,GAAmBjT,EAAO,UACpC2H,EAAW+K,GAAc1S,EAAM2H,SAAU7D,EAAQ,gBAAkBnc,EACnEitB,EAAYlC,GAAc1S,EAAM4U,UAAW9Q,EAAQ,iBAAmBnc,EACtEktB,EA/BR,SAA0B/Q,EAAQjB,EAAOqB,GACvC,IAAIyD,EAAUiN,EACd,QAAc33B,IAAV4lB,QAAkC5lB,IAAXinB,EAAsB,CAC/C,MAAMrkB,EAAYyyB,GAAexO,GACjC,GAAKjkB,EAGE,CACL,MAAMslB,EAAOtlB,EAAUq0B,wBACjBY,EAAiBhC,GAAiBjzB,GAClCk1B,EAAkB9B,GAAmB6B,EAAgB,SAAU,SAC/DE,EAAmB/B,GAAmB6B,EAAgB,WAC5DjS,EAAQsC,EAAKtC,MAAQmS,EAAiBnS,MAAQkS,EAAgBlS,MAC9DqB,EAASiB,EAAKjB,OAAS8Q,EAAiB9Q,OAAS6Q,EAAgB7Q,OACjEyD,EAAW+K,GAAcoC,EAAenN,SAAU9nB,EAAW,eAC7D+0B,EAAYlC,GAAcoC,EAAeF,UAAW/0B,EAAW,eACjE,MAXEgjB,EAAQiB,EAAOmR,YACf/Q,EAASJ,EAAOoR,YAWpB,CACA,MAAO,CACLrS,QACAqB,SACAyD,SAAUA,GAAYhgB,EACtBitB,UAAWA,GAAajtB,EAE5B,CAOwBwtB,CAAiBrR,EAAQ0Q,EAASC,GACxD,IAAI,MAAC5R,EAAK,OAAEqB,GAAU2Q,EACtB,GAAwB,gBAApB7U,EAAMwT,UAA6B,CACrC,MAAME,EAAUT,GAAmBjT,EAAO,SAAU,SAC9CyT,EAAWR,GAAmBjT,EAAO,WAC3C6C,GAAS4Q,EAAS5Q,MAAQ6Q,EAAQ7Q,MAClCqB,GAAUuP,EAASvP,OAASwP,EAAQxP,MACtC,CAQA,OAPArB,EAAQ9jB,KAAKuK,IAAI,EAAGuZ,EAAQ8R,EAAQ9R,OACpCqB,EAASnlB,KAAKuK,IAAI,EAAGorB,EAAc31B,KAAKC,MAAM6jB,EAAQ6R,GAAexQ,EAASyQ,EAAQzQ,QACtFrB,EAAQyR,GAAOv1B,KAAKsK,IAAIwZ,EAAO8E,EAAUkN,EAAclN,WACvDzD,EAASoQ,GAAOv1B,KAAKsK,IAAI6a,EAAQ0Q,EAAWC,EAAcD,YACtD/R,IAAUqB,IACZA,EAASoQ,GAAOzR,EAAQ,IAEnB,CACLA,QACAqB,SAEJ,CACA,SAASkR,GAAY3V,EAAO4V,EAAYC,GACtC,MAAMC,EAAaF,GAAc,EAC3BG,EAAez2B,KAAKC,MAAMygB,EAAMyE,OAASqR,GACzCE,EAAc12B,KAAKC,MAAMygB,EAAMoD,MAAQ0S,GAC7C9V,EAAMyE,OAASsR,EAAeD,EAC9B9V,EAAMoD,MAAQ4S,EAAcF,EAC5B,MAAMzR,EAASrE,EAAMqE,OAKrB,OAJIA,EAAO9D,QAAUsV,IAAgBxR,EAAO9D,MAAMkE,SAAWJ,EAAO9D,MAAM6C,SACxEiB,EAAO9D,MAAMkE,OAAS,GAAGzE,EAAMyE,WAC/BJ,EAAO9D,MAAM6C,MAAQ,GAAGpD,EAAMoD,YAE5BpD,EAAMkE,0BAA4B4R,GAC/BzR,EAAOI,SAAWsR,GAClB1R,EAAOjB,QAAU4S,KACtBhW,EAAMkE,wBAA0B4R,EAChCzR,EAAOI,OAASsR,EAChB1R,EAAOjB,MAAQ4S,EACfhW,EAAMW,IAAIsV,aAAaH,EAAY,EAAG,EAAGA,EAAY,EAAG,IACjD,EAGX,CACA,MAAMI,GAAgC,WACpC,IAAIC,GAAmB,EACvB,IACE,MAAM9vB,EAAU,CACd,WAAI+vB,GAEF,OADAD,GAAmB,GACZ,CACT,GAEFl1B,OAAOo1B,iBAAiB,OAAQ,KAAMhwB,GACtCpF,OAAOq1B,oBAAoB,OAAQ,KAAMjwB,EAC3C,CAAE,MAAO8D,GACT,CACA,OAAOgsB,CACT,CAdqC,GAerC,SAASI,GAAajD,EAAS3pB,GAC7B,MAAMzM,EA9IR,SAAkBs5B,EAAI7sB,GACpB,OAAO0pB,GAAiBmD,GAAIC,iBAAiB9sB,EAC/C,CA4IgB+sB,CAASpD,EAAS3pB,GAC1B4f,EAAUrsB,GAASA,EAAMssB,MAAM,qBACrC,OAAOD,GAAWA,EAAQ,QAAK/rB,CACjC,CAEA,SAASm5B,GAAajmB,EAAIC,EAAI7E,EAAGkV,GAC/B,MAAO,CACL3X,EAAGqH,EAAGrH,EAAIyC,GAAK6E,EAAGtH,EAAIqH,EAAGrH,GACzBC,EAAGoH,EAAGpH,EAAIwC,GAAK6E,EAAGrH,EAAIoH,EAAGpH,GAE7B,CACA,SAASstB,GAAsBlmB,EAAIC,EAAI7E,EAAGkV,GACxC,MAAO,CACL3X,EAAGqH,EAAGrH,EAAIyC,GAAK6E,EAAGtH,EAAIqH,EAAGrH,GACzBC,EAAY,WAAT0X,EAAoBlV,EAAI,GAAM4E,EAAGpH,EAAIqH,EAAGrH,EAChC,UAAT0X,EAAmBlV,EAAI,EAAI4E,EAAGpH,EAAIqH,EAAGrH,EACrCwC,EAAI,EAAI6E,EAAGrH,EAAIoH,EAAGpH,EAExB,CACA,SAASutB,GAAqBnmB,EAAIC,EAAI7E,EAAGkV,GACvC,MAAM8V,EAAM,CAACztB,EAAGqH,EAAGsW,KAAM1d,EAAGoH,EAAGwW,MACzB6P,EAAM,CAAC1tB,EAAGsH,EAAGoW,KAAMzd,EAAGqH,EAAGsW,MACzBvf,EAAIivB,GAAajmB,EAAIomB,EAAKhrB,GAC1BnE,EAAIgvB,GAAaG,EAAKC,EAAKjrB,GAC3B6C,EAAIgoB,GAAaI,EAAKpmB,EAAI7E,GAC1BqC,EAAIwoB,GAAajvB,EAAGC,EAAGmE,GACvB3B,EAAIwsB,GAAahvB,EAAGgH,EAAG7C,GAC7B,OAAO6qB,GAAaxoB,EAAGhE,EAAG2B,EAC5B,CAEA,MAAMkrB,GAAY,IAAIC,IAWtB,SAASC,GAAaC,EAAKC,EAAQ/wB,GACjC,OAXF,SAAyB+wB,EAAQ/wB,GAC/BA,EAAUA,GAAW,CAAC,EACtB,MAAMgxB,EAAWD,EAASE,KAAKC,UAAUlxB,GACzC,IAAImxB,EAAYR,GAAUnV,IAAIwV,GAK9B,OAJKG,IACHA,EAAY,IAAIC,KAAKC,aAAaN,EAAQ/wB,GAC1C2wB,GAAU5X,IAAIiY,EAAUG,IAEnBA,CACT,CAESG,CAAgBP,EAAQ/wB,GAASuxB,OAAOT,EACjD,CA0CA,SAASU,GAAcC,EAAKC,EAAO3U,GACjC,OAAO0U,EAzCqB,SAASC,EAAO3U,GAC5C,MAAO,CACL/Z,EAAEA,GACO0uB,EAAQA,EAAQ3U,EAAQ/Z,EAEjC,QAAA2uB,CAAS9nB,GACPkT,EAAQlT,CACV,EACA0X,UAAUjkB,GACM,WAAVA,EACKA,EAEQ,UAAVA,EAAoB,OAAS,QAEtCs0B,MAAK,CAAC5uB,EAAGnM,IACAmM,EAAInM,EAEbg7B,WAAU,CAAC7uB,EAAG8uB,IACL9uB,EAAI8uB,EAGjB,CAoBeC,CAAsBL,EAAO3U,GAlBnC,CACL/Z,EAAEA,GACOA,EAET,QAAA2uB,CAAS9nB,GACT,EACA0X,UAAUjkB,GACDA,EAETs0B,MAAK,CAAC5uB,EAAGnM,IACAmM,EAAInM,EAEbg7B,WAAU,CAAC7uB,EAAGgvB,IACLhvB,EAMb,CACA,SAASivB,GAAsB3X,EAAK4X,GAClC,IAAIhY,EAAOiY,EACO,QAAdD,GAAqC,QAAdA,IACzBhY,EAAQI,EAAI0D,OAAO9D,MACnBiY,EAAW,CACTjY,EAAMkW,iBAAiB,aACvBlW,EAAMkY,oBAAoB,cAE5BlY,EAAMmY,YAAY,YAAaH,EAAW,aAC1C5X,EAAIgY,kBAAoBH,EAE5B,CACA,SAASI,GAAqBjY,EAAK6X,QAChBh7B,IAAbg7B,WACK7X,EAAIgY,kBACXhY,EAAI0D,OAAO9D,MAAMmY,YAAY,YAAaF,EAAS,GAAIA,EAAS,IAEpE,CAEA,SAASK,GAAWlvB,GAClB,MAAiB,UAAbA,EACK,CACLmvB,QAAS1tB,GACT2tB,QAAS7tB,GACT8tB,UAAW7tB,IAGR,CACL2tB,QAASltB,GACTmtB,QAAS,CAACrxB,EAAGC,IAAMD,EAAIC,EACvBqxB,UAAW3vB,GAAKA,EAEpB,CACA,SAAS4vB,IAAiB,MAACp1B,EAAK,IAAEC,EAAG,MAAEo1B,EAAK,KAAEhH,EAAI,MAAE3R,IAClD,MAAO,CACL1c,MAAOA,EAAQq1B,EACfp1B,IAAKA,EAAMo1B,EACXhH,KAAMA,IAASpuB,EAAMD,EAAQ,GAAKq1B,GAAU,EAC5C3Y,QAEJ,CAyBA,SAAS4Y,GAAcC,EAAStJ,EAAQuJ,GACtC,IAAKA,EACH,MAAO,CAACD,GAEV,MAAM,SAACzvB,EAAU9F,MAAOy1B,EAAYx1B,IAAKy1B,GAAYF,EAC/CH,EAAQpJ,EAAOpxB,QACf,QAACq6B,EAAO,QAAED,EAAO,UAAEE,GAAaH,GAAWlvB,IAC3C,MAAC9F,EAAK,IAAEC,EAAG,KAAEouB,EAAI,MAAE3R,GA/B3B,SAAoB6Y,EAAStJ,EAAQuJ,GACnC,MAAM,SAAC1vB,EAAU9F,MAAOy1B,EAAYx1B,IAAKy1B,GAAYF,GAC/C,QAACP,EAAO,UAAEE,GAAaH,GAAWlvB,GAClCuvB,EAAQpJ,EAAOpxB,OACrB,IACIwG,EAAGM,GADH,MAAC3B,EAAK,IAAEC,EAAG,KAAEouB,GAAQkH,EAEzB,GAAIlH,EAAM,CAGR,IAFAruB,GAASq1B,EACTp1B,GAAOo1B,EACFh0B,EAAI,EAAGM,EAAO0zB,EAAOh0B,EAAIM,GACvBszB,EAAQE,EAAUlJ,EAAOjsB,EAAQq1B,GAAOvvB,IAAY2vB,EAAYC,KADjCr0B,EAIpCrB,IACAC,IAEFD,GAASq1B,EACTp1B,GAAOo1B,CACT,CAIA,OAHIp1B,EAAMD,IACRC,GAAOo1B,GAEF,CAACr1B,QAAOC,MAAKouB,OAAM3R,MAAO6Y,EAAQ7Y,MAC3C,CAQoCiZ,CAAWJ,EAAStJ,EAAQuJ,GACxD1F,EAAS,GACf,IAEIz2B,EAAO6oB,EAAO0T,EAFdC,GAAS,EACTC,EAAW,KAEf,MAEMC,EAAc,IAAMF,GAFEZ,EAAQQ,EAAYG,EAAWv8B,IAA6C,IAAnC67B,EAAQO,EAAYG,GAGnFI,EAAa,KAAOH,GAF6B,IAA7BX,EAAQQ,EAAUr8B,IAAgB47B,EAAQS,EAAUE,EAAWv8B,GAGzF,IAAK,IAAIgI,EAAIrB,EAAOyuB,EAAOzuB,EAAOqB,GAAKpB,IAAOoB,EAC5C6gB,EAAQ+J,EAAO5qB,EAAIg0B,GACfnT,EAAMgK,OAGV7yB,EAAQ87B,EAAUjT,EAAMpc,IACpBzM,IAAUu8B,IAGdC,EAASZ,EAAQ57B,EAAOo8B,EAAYC,GACnB,OAAbI,GAAqBC,MACvBD,EAA0C,IAA/BZ,EAAQ77B,EAAOo8B,GAAoBp0B,EAAIotB,GAEnC,OAAbqH,GAAqBE,MACvBlG,EAAOn0B,KAAKy5B,GAAiB,CAACp1B,MAAO81B,EAAU71B,IAAKoB,EAAGgtB,OAAMgH,QAAO3Y,WACpEoZ,EAAW,MAEbrH,EAAOptB,EACPu0B,EAAYv8B,IAKd,OAHiB,OAAby8B,GACFhG,EAAOn0B,KAAKy5B,GAAiB,CAACp1B,MAAO81B,EAAU71B,MAAKouB,OAAMgH,QAAO3Y,WAE5DoT,CACT,CACA,SAASmG,GAAerS,EAAM4R,GAC5B,MAAM1F,EAAS,GACToG,EAAWtS,EAAKsS,SACtB,IAAK,IAAI70B,EAAI,EAAGA,EAAI60B,EAASr7B,OAAQwG,IAAK,CACxC,MAAM80B,EAAMb,GAAcY,EAAS70B,GAAIuiB,EAAKqI,OAAQuJ,GAChDW,EAAIt7B,QACNi1B,EAAOn0B,QAAQw6B,EAEnB,CACA,OAAOrG,CACT,CAiEA,SAASsG,GAAcxS,EAAMsS,EAAUjK,EAAQoK,GAC7C,OAAKA,GAAmBA,EAAelM,YAAe8B,EAKxD,SAAyBrI,EAAMsS,EAAUjK,EAAQoK,GAC/C,MAAMC,EAAe1S,EAAK2S,OAAO9V,aAC3B+V,EAAYC,GAAU7S,EAAKphB,UAC1Bk0B,cAAe50B,EAAcU,SAAS,SAAC+rB,IAAa3K,EACrDyR,EAAQpJ,EAAOpxB,OACfi1B,EAAS,GACf,IAAI6G,EAAYH,EACZx2B,EAAQk2B,EAAS,GAAGl2B,MACpBqB,EAAIrB,EACR,SAAS42B,EAASnvB,EAAGnB,EAAGoF,EAAGmrB,GACzB,MAAMC,EAAMvI,GAAY,EAAI,EAC5B,GAAI9mB,IAAMnB,EAAV,CAIA,IADAmB,GAAK4tB,EACEpJ,EAAOxkB,EAAI4tB,GAAOnJ,MACvBzkB,GAAKqvB,EAEP,KAAO7K,EAAO3lB,EAAI+uB,GAAOnJ,MACvB5lB,GAAKwwB,EAEHrvB,EAAI4tB,GAAU/uB,EAAI+uB,IACpBvF,EAAOn0B,KAAK,CAACqE,MAAOyH,EAAI4tB,EAAOp1B,IAAKqG,EAAI+uB,EAAOhH,KAAM3iB,EAAGgR,MAAOma,IAC/DF,EAAYE,EACZ72B,EAAQsG,EAAI+uB,EAXd,CAaF,CACA,IAAK,MAAME,KAAWW,EAAU,CAC9Bl2B,EAAQuuB,EAAWvuB,EAAQu1B,EAAQv1B,MACnC,IACI0c,EADA+R,EAAOxC,EAAOjsB,EAAQq1B,GAE1B,IAAKh0B,EAAIrB,EAAQ,EAAGqB,GAAKk0B,EAAQt1B,IAAKoB,IAAK,CACzC,MAAM8sB,EAAKlC,EAAO5qB,EAAIg0B,GACtB3Y,EAAQ+Z,GAAUJ,EAAelM,WAAW1D,GAAc6P,EAAc,CACtEn9B,KAAM,UACN49B,GAAItI,EACJ5hB,GAAIshB,EACJ6I,aAAc31B,EAAI,GAAKg0B,EACvB4B,YAAa51B,EAAIg0B,EACjBvzB,mBAEEo1B,GAAaxa,EAAOia,IACtBC,EAAS52B,EAAOqB,EAAI,EAAGk0B,EAAQlH,KAAMsI,GAEvClI,EAAON,EACPwI,EAAYja,CACd,CACI1c,EAAQqB,EAAI,GACdu1B,EAAS52B,EAAOqB,EAAI,EAAGk0B,EAAQlH,KAAMsI,EAEzC,CACA,OAAO7G,CACT,CAtDSqH,CAAgBvT,EAAMsS,EAAUjK,EAAQoK,GAFtCH,CAGX,CAsDA,SAASO,GAAUj0B,GACjB,MAAO,CACLsZ,gBAAiBtZ,EAAQsZ,gBACzBsb,eAAgB50B,EAAQ40B,eACxBC,WAAY70B,EAAQ60B,WACpBC,iBAAkB90B,EAAQ80B,iBAC1BC,gBAAiB/0B,EAAQ+0B,gBACzBxV,YAAavf,EAAQuf,YACrBhG,YAAavZ,EAAQuZ,YAEzB,CACA,SAASmb,GAAaxa,EAAOia,GAC3B,OAAOA,GAAalD,KAAKC,UAAUhX,KAAW+W,KAAKC,UAAUiD,EAC/D,CCpzEA,IAAIa,GAAW,IAvIf,MACE,WAAAve,GACEE,KAAKse,SAAW,KAChBte,KAAKue,QAAU,IAAItE,IACnBja,KAAKwe,UAAW,EAChBxe,KAAKye,eAAYj+B,CACnB,CACA,OAAAk+B,CAAQ1b,EAAO2b,EAAOC,EAAM5+B,GAC1B,MAAM6+B,EAAYF,EAAMtQ,UAAUruB,GAC5B8+B,EAAWH,EAAMI,SACvBF,EAAU38B,SAAQ4D,GAAMA,EAAG,CACzBkd,QACAgc,QAASL,EAAMK,QACfF,WACAG,YAAa38B,KAAKsK,IAAIgyB,EAAOD,EAAM93B,MAAOi4B,MAE9C,CACA,QAAAI,GACMlf,KAAKse,WAGTte,KAAKwe,UAAW,EAChBxe,KAAKse,SAAW54B,EAAiBY,KAAKrC,QAAQ,KAC5C+b,KAAKmf,UACLnf,KAAKse,SAAW,KACZte,KAAKwe,UACPxe,KAAKkf,UACP,IAEJ,CACA,OAAAC,CAAQP,EAAOQ,KAAKC,OAClB,IAAIC,EAAY,EAChBtf,KAAKue,QAAQr8B,SAAQ,CAACy8B,EAAO3b,KAC3B,IAAK2b,EAAMY,UAAYZ,EAAMpQ,MAAM7sB,OACjC,OAEF,MAAM6sB,EAAQoQ,EAAMpQ,MACpB,IAEI1jB,EAFA3C,EAAIqmB,EAAM7sB,OAAS,EACnB89B,GAAO,EAEX,KAAOt3B,GAAK,IAAKA,EACf2C,EAAO0jB,EAAMrmB,GACT2C,EAAK40B,SACH50B,EAAK60B,OAASf,EAAMI,WACtBJ,EAAMI,SAAWl0B,EAAK60B,QAExB70B,EAAK80B,KAAKf,GACVY,GAAO,IAEPjR,EAAMrmB,GAAKqmB,EAAMA,EAAM7sB,OAAS,GAChC6sB,EAAMqR,OAGNJ,IACFxc,EAAMwc,OACNxf,KAAK0e,QAAQ1b,EAAO2b,EAAOC,EAAM,aAE9BrQ,EAAM7sB,SACTi9B,EAAMY,SAAU,EAChBvf,KAAK0e,QAAQ1b,EAAO2b,EAAOC,EAAM,YACjCD,EAAMK,SAAU,GAElBM,GAAa/Q,EAAM7sB,MAAM,IAE3Bse,KAAKye,UAAYG,EACC,IAAdU,IACFtf,KAAKwe,UAAW,EAEpB,CACA,SAAAqB,CAAU7c,GACR,MAAM8c,EAAS9f,KAAKue,QACpB,IAAII,EAAQmB,EAAOjb,IAAI7B,GAavB,OAZK2b,IACHA,EAAQ,CACNY,SAAS,EACTP,SAAS,EACTzQ,MAAO,GACPF,UAAW,CACT0R,SAAU,GACVC,SAAU,KAGdF,EAAO1d,IAAIY,EAAO2b,IAEbA,CACT,CACA,MAAAsB,CAAOjd,EAAOkd,EAAOC,GACnBngB,KAAK6f,UAAU7c,GAAOqL,UAAU6R,GAAO19B,KAAK29B,EAC9C,CACA,GAAA1R,CAAIzL,EAAOuL,GACJA,GAAUA,EAAM7sB,QAGrBse,KAAK6f,UAAU7c,GAAOuL,MAAM/rB,QAAQ+rB,EACtC,CACA,GAAAzjB,CAAIkY,GACF,OAAOhD,KAAK6f,UAAU7c,GAAOuL,MAAM7sB,OAAS,CAC9C,CACA,KAAAmF,CAAMmc,GACJ,MAAM2b,EAAQ3e,KAAKue,QAAQ1Z,IAAI7B,GAC1B2b,IAGLA,EAAMY,SAAU,EAChBZ,EAAM93B,MAAQu4B,KAAKC,MACnBV,EAAMI,SAAWJ,EAAMpQ,MAAM6R,QAAO,CAACC,EAAKC,IAAQh+B,KAAKuK,IAAIwzB,EAAKC,EAAIC,YAAY,GAChFvgB,KAAKkf,WACP,CACA,OAAAK,CAAQvc,GACN,IAAKhD,KAAKwe,SACR,OAAO,EAET,MAAMG,EAAQ3e,KAAKue,QAAQ1Z,IAAI7B,GAC/B,SAAK2b,GAAUA,EAAMY,SAAYZ,EAAMpQ,MAAM7sB,OAI/C,CACA,IAAA8+B,CAAKxd,GACH,MAAM2b,EAAQ3e,KAAKue,QAAQ1Z,IAAI7B,GAC/B,IAAK2b,IAAUA,EAAMpQ,MAAM7sB,OACzB,OAEF,MAAM6sB,EAAQoQ,EAAMpQ,MACpB,IAAIrmB,EAAIqmB,EAAM7sB,OAAS,EACvB,KAAOwG,GAAK,IAAKA,EACfqmB,EAAMrmB,GAAGu4B,SAEX9B,EAAMpQ,MAAQ,GACdvO,KAAK0e,QAAQ1b,EAAO2b,EAAOS,KAAKC,MAAO,WACzC,CACA,MAAAqB,CAAO1d,GACL,OAAOhD,KAAKue,QAAQlN,OAAOrO,EAC7B,GAIF,MAAM9D,GAAc,cACdyhB,GAAgB,CACpBC,QAAO,CAAClS,EAAMmS,EAAIC,IACTA,EAAS,GAAMD,EAAKnS,EAE7B,KAAAnO,CAAMmO,EAAMmS,EAAIC,GACd,MAAMC,EAAKxgB,GAAMmO,GAAQxP,IACnBwB,EAAKqgB,EAAG5gB,OAASI,GAAMsgB,GAAM3hB,IACnC,OAAOwB,GAAMA,EAAGP,MACZO,EAAGJ,IAAIygB,EAAID,GAAQ7uB,YACnB4uB,CACN,EACAG,OAAM,CAACtS,EAAMmS,EAAIC,IACRpS,GAAQmS,EAAKnS,GAAQoS,GAGhC,MAAMG,GACJ,WAAAnhB,CAAYohB,EAAKp4B,EAAQ8jB,EAAMiU,GAC7B,MAAMM,EAAer4B,EAAO8jB,GAC5BiU,EAAKh8B,GAAQ,CAACq8B,EAAIL,GAAIA,EAAIM,EAAcD,EAAIxS,OAC5C,MAAMA,EAAO7pB,GAAQ,CAACq8B,EAAIxS,KAAMyS,EAAcN,IAC9C7gB,KAAKyf,SAAU,EACfzf,KAAKohB,IAAMF,EAAIp7B,IAAM66B,GAAcO,EAAIlhC,aAAe0uB,GACtD1O,KAAKqhB,QAAUnyB,GAAQgyB,EAAII,SAAWpyB,GAAQC,OAC9C6Q,KAAKuhB,OAASj/B,KAAKC,MAAM68B,KAAKC,OAAS6B,EAAIM,OAAS,IACpDxhB,KAAKugB,UAAYvgB,KAAK0f,OAASp9B,KAAKC,MAAM2+B,EAAInC,UAC9C/e,KAAKyhB,QAAUP,EAAIhM,KACnBlV,KAAK0hB,QAAU54B,EACfkX,KAAK2hB,MAAQ/U,EACb5M,KAAK4hB,MAAQlT,EACb1O,KAAK6hB,IAAMhB,EACX7gB,KAAK8hB,eAAYthC,CACnB,CACA,MAAAuhC,GACE,OAAO/hB,KAAKyf,OACd,CACA,MAAAuC,CAAOd,EAAKL,EAAIjC,GACd,GAAI5e,KAAKyf,QAAS,CAChBzf,KAAK0e,SAAQ,GACb,MAAMyC,EAAenhB,KAAK0hB,QAAQ1hB,KAAK2hB,OACjCM,EAAUrD,EAAO5e,KAAKuhB,OACtBW,EAASliB,KAAKugB,UAAY0B,EAChCjiB,KAAKuhB,OAAS3C,EACd5e,KAAKugB,UAAYj+B,KAAKC,MAAMD,KAAKuK,IAAIq1B,EAAQhB,EAAInC,WACjD/e,KAAK0f,QAAUuC,EACfjiB,KAAKyhB,QAAUP,EAAIhM,KACnBlV,KAAK6hB,IAAMh9B,GAAQ,CAACq8B,EAAIL,GAAIA,EAAIM,EAAcD,EAAIxS,OAClD1O,KAAK4hB,MAAQ/8B,GAAQ,CAACq8B,EAAIxS,KAAMyS,EAAcN,GAChD,CACF,CACA,MAAAJ,GACMzgB,KAAKyf,UACPzf,KAAK2f,KAAKP,KAAKC,OACfrf,KAAKyf,SAAU,EACfzf,KAAK0e,SAAQ,GAEjB,CACA,IAAAiB,CAAKf,GACH,MAAMqD,EAAUrD,EAAO5e,KAAKuhB,OACtBxC,EAAW/e,KAAKugB,UAChB3T,EAAO5M,KAAK2hB,MACZjT,EAAO1O,KAAK4hB,MACZ1M,EAAOlV,KAAKyhB,MACZZ,EAAK7gB,KAAK6hB,IAChB,IAAIf,EAEJ,GADA9gB,KAAKyf,QAAU/Q,IAASmS,IAAO3L,GAAS+M,EAAUlD,IAC7C/e,KAAKyf,QAGR,OAFAzf,KAAK0hB,QAAQ9U,GAAQiU,OACrB7gB,KAAK0e,SAAQ,GAGXuD,EAAU,EACZjiB,KAAK0hB,QAAQ9U,GAAQ8B,GAGvBoS,EAAUmB,EAAUlD,EAAY,EAChC+B,EAAS5L,GAAQ4L,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAAS9gB,KAAKqhB,QAAQ/+B,KAAKsK,IAAI,EAAGtK,KAAKuK,IAAI,EAAGi0B,KAC9C9gB,KAAK0hB,QAAQ9U,GAAQ5M,KAAKohB,IAAI1S,EAAMmS,EAAIC,GAC1C,CACA,IAAAqB,GACE,MAAMC,EAAWpiB,KAAK8hB,YAAc9hB,KAAK8hB,UAAY,IACrD,OAAO,IAAIl9B,SAAQ,CAACy9B,EAAKC,KACvBF,EAAS5/B,KAAK,CAAC6/B,MAAKC,OAAK,GAE7B,CACA,OAAA5D,CAAQ6D,GACN,MAAMC,EAASD,EAAW,MAAQ,MAC5BH,EAAWpiB,KAAK8hB,WAAa,GACnC,IAAK,IAAI55B,EAAI,EAAGA,EAAIk6B,EAAS1gC,OAAQwG,IACnCk6B,EAASl6B,GAAGs6B,IAEhB,EAKFhgB,GAASJ,IAAI,YAAa,CACxBof,WAAOhhC,EACPu+B,SAAU,IACVuC,OAAQ,eACRx7B,QAAItF,EACJkuB,UAAMluB,EACN00B,UAAM10B,EACNqgC,QAAIrgC,EACJR,UAAMQ,IAER,MAAMiiC,GAAmBjhC,OAAO4G,KAAKoa,GAASE,WAC9CF,GAASoC,SAAS,YAAa,CAC7BiB,WAAW,EACXD,YAAY,EACZF,YAAcV,GAAkB,eAATA,GAAkC,eAATA,GAAkC,OAATA,IAE3ExC,GAASJ,IAAI,aAAc,CACzBsgB,OAAQ,CACN1iC,KAAM,QACN2iC,WApBW,CAAC,QAAS,cAAe,oBAsBtCC,QAAS,CACP5iC,KAAM,SACN2iC,WAzBY,CAAC,IAAK,IAAK,cAAe,SAAU,cA4BpDngB,GAASoC,SAAS,aAAc,CAC9BiB,UAAW,cAEbrD,GAASJ,IAAI,cAAe,CAC1B2f,OAAQ,CACNrf,UAAW,CACTqc,SAAU,MAGd8D,OAAQ,CACNngB,UAAW,CACTqc,SAAU,IAGd+D,KAAM,CACJC,WAAY,CACVL,OAAQ,CACNhU,KAAM,eAERsU,QAAS,CACPhjC,KAAM,UACN++B,SAAU,KAIhBkE,KAAM,CACJF,WAAY,CACVL,OAAQ,CACN7B,GAAI,eAENmC,QAAS,CACPhjC,KAAM,UACNshC,OAAQ,SACRx7B,GAAIoM,GAAS,EAAJA,OAKjB,MAAMgxB,GACJ,WAAApjB,CAAYkD,EAAOmgB,GACjBnjB,KAAKod,OAASpa,EACdhD,KAAKojB,YAAc,IAAInJ,IACvBja,KAAKqjB,UAAUF,EACjB,CACA,SAAAE,CAAUF,GACR,IAAK97B,EAAS87B,GACZ,OAEF,MAAMG,EAAgBtjB,KAAKojB,YAC3B5hC,OAAO+hC,oBAAoBJ,GAAQjhC,SAAQE,IACzC,MAAM8+B,EAAMiC,EAAO/gC,GACnB,IAAKiF,EAAS65B,GACZ,OAEF,MAAMqB,EAAW,CAAC,EAClB,IAAK,MAAMh+B,KAAUk+B,GACnBF,EAASh+B,GAAU28B,EAAI38B,IAExB4C,EAAQ+5B,EAAIyB,aAAezB,EAAIyB,YAAc,CAACvgC,IAAMF,SAAS0qB,IACxDA,IAASxqB,GAAQkhC,EAAcx4B,IAAI8hB,IACrC0W,EAAclhB,IAAIwK,EAAM2V,EAC1B,GACA,GAEN,CACA,eAAAiB,CAAgB16B,EAAQyZ,GACtB,MAAMkhB,EAAalhB,EAAOlZ,QACpBA,EAwEV,SAA8BP,EAAQ26B,GACpC,IAAKA,EACH,OAEF,IAAIp6B,EAAUP,EAAOO,QACrB,IAAKA,EAEH,YADAP,EAAOO,QAAUo6B,GAGfp6B,EAAQq6B,UACV56B,EAAOO,QAAUA,EAAU7H,OAAOge,OAAO,CAAC,EAAGnW,EAAS,CAACq6B,SAAS,EAAOC,YAAa,CAAC,KAEvF,OAAOt6B,CACT,CArFoBu6B,CAAqB96B,EAAQ26B,GAC7C,IAAKp6B,EACH,MAAO,GAET,MAAM05B,EAAa/iB,KAAK6jB,kBAAkBx6B,EAASo6B,GAOnD,OANIA,EAAWC,SAwDnB,SAAkBX,EAAYJ,GAC5B,MAAMpD,EAAU,GACVn3B,EAAO5G,OAAO4G,KAAKu6B,GACzB,IAAK,IAAIz6B,EAAI,EAAGA,EAAIE,EAAK1G,OAAQwG,IAAK,CACpC,MAAM47B,EAAOf,EAAW36B,EAAKF,IACzB47B,GAAQA,EAAK/B,UACfxC,EAAQ/8B,KAAKshC,EAAK3B,OAEtB,CACA,OAAOv9B,QAAQm/B,IAAIxE,EACrB,CAjEMyE,CAASl7B,EAAOO,QAAQs6B,YAAaF,GAAYziC,MAAK,KACpD8H,EAAOO,QAAUo6B,CAAU,IAC1B,SAGEV,CACT,CACA,iBAAAc,CAAkB/6B,EAAQyZ,GACxB,MAAM+gB,EAAgBtjB,KAAKojB,YACrBL,EAAa,GACbxD,EAAUz2B,EAAO66B,cAAgB76B,EAAO66B,YAAc,CAAC,GACvDjjC,EAAQc,OAAO4G,KAAKma,GACpBqc,EAAOQ,KAAKC,MAClB,IAAIn3B,EACJ,IAAKA,EAAIxH,EAAMgB,OAAS,EAAGwG,GAAK,IAAKA,EAAG,CACtC,MAAM0kB,EAAOlsB,EAAMwH,GACnB,GAAuB,MAAnB0kB,EAAKviB,OAAO,GACd,SAEF,GAAa,YAATuiB,EAAoB,CACtBmW,EAAWvgC,QAAQwd,KAAKwjB,gBAAgB16B,EAAQyZ,IAChD,QACF,CACA,MAAMriB,EAAQqiB,EAAOqK,GACrB,IAAIlK,EAAY6c,EAAQ3S,GACxB,MAAMsU,EAAMoC,EAAcze,IAAI+H,GAC9B,GAAIlK,EAAW,CACb,GAAIwe,GAAOxe,EAAUqf,SAAU,CAC7Brf,EAAUsf,OAAOd,EAAKhhC,EAAO0+B,GAC7B,QACF,CACElc,EAAU+d,QAEd,CACKS,GAAQA,EAAInC,UAIjBQ,EAAQ3S,GAAQlK,EAAY,IAAIue,GAAUC,EAAKp4B,EAAQ8jB,EAAM1sB,GAC7D6iC,EAAWvgC,KAAKkgB,IAJd5Z,EAAO8jB,GAAQ1sB,CAKnB,CACA,OAAO6iC,CACT,CACA,MAAAf,CAAOl5B,EAAQyZ,GACb,GAA8B,IAA1BvC,KAAKojB,YAAYx4B,KAEnB,YADApJ,OAAOge,OAAO1W,EAAQyZ,GAGxB,MAAMwgB,EAAa/iB,KAAK6jB,kBAAkB/6B,EAAQyZ,GAClD,OAAIwgB,EAAWrhC,QACb28B,GAAS5P,IAAIzO,KAAKod,OAAQ2F,IACnB,QAFT,CAIF,EA4BF,SAASkB,GAAUzf,EAAO0f,GACxB,MAAM7Z,EAAO7F,GAASA,EAAMnb,SAAW,CAAC,EAClCpB,EAAUoiB,EAAKpiB,QACf2E,OAAmBpM,IAAb6pB,EAAKzd,IAAoBs3B,EAAkB,EACjDr3B,OAAmBrM,IAAb6pB,EAAKxd,IAAoBq3B,EAAkB,EACvD,MAAO,CACLr9B,MAAOoB,EAAU4E,EAAMD,EACvB9F,IAAKmB,EAAU2E,EAAMC,EAEzB,CAgCA,SAASs3B,GAAwBnhB,EAAOohB,GACtC,MAAMh8B,EAAO,GACPi8B,EAAWrhB,EAAMshB,uBAAuBF,GAC9C,IAAIl8B,EAAGM,EACP,IAAKN,EAAI,EAAGM,EAAO67B,EAAS3iC,OAAQwG,EAAIM,IAAQN,EAC9CE,EAAK5F,KAAK6hC,EAASn8B,GAAG/F,OAExB,OAAOiG,CACT,CACA,SAASm8B,GAAWC,EAAOtkC,EAAOukC,EAASp7B,EAAU,CAAC,GACpD,MAAMjB,EAAOo8B,EAAMp8B,KACbs8B,EAA8B,WAAjBr7B,EAAQ2a,KAC3B,IAAI9b,EAAGM,EAAMG,EAAcg8B,EAC3B,GAAc,OAAVzkC,EAAJ,CAGA,IAAKgI,EAAI,EAAGM,EAAOJ,EAAK1G,OAAQwG,EAAIM,IAAQN,EAAG,CAE7C,GADAS,GAAgBP,EAAKF,GACjBS,IAAiB87B,EAAS,CAC5B,GAAIp7B,EAAQ06B,IACV,SAEF,KACF,CACAY,EAAaH,EAAMjiB,OAAO5Z,GACtBrB,EAAeq9B,KAAgBD,GAAyB,IAAVxkC,GAAeuL,GAAKvL,KAAWuL,GAAKk5B,MACpFzkC,GAASykC,EAEb,CACA,OAAOzkC,CAdP,CAeF,CAcA,SAAS0kC,GAAUpgB,EAAOqgB,GACxB,MAAMC,EAAUtgB,GAASA,EAAMnb,QAAQy7B,QACvC,OAAOA,QAAwBtkC,IAAZskC,QAAwCtkC,IAAfqkC,EAAKL,KACnD,CAWA,SAASO,GAAiBC,EAAQC,EAAUC,GAC1C,MAAMC,EAAWH,EAAOC,KAAcD,EAAOC,GAAY,CAAC,GAC1D,OAAOE,EAASD,KAAgBC,EAASD,GAAc,CAAC,EAC1D,CACA,SAASE,GAAoBZ,EAAOa,EAAQC,EAAUtlC,GACpD,IAAK,MAAM6kC,KAAQQ,EAAOE,wBAAwBvlC,GAAMiI,UAAW,CACjE,MAAM/H,EAAQskC,EAAMK,EAAK1iC,OACzB,GAAKmjC,GAAYplC,EAAQ,IAAQolC,GAAYplC,EAAQ,EACnD,OAAO2kC,EAAK1iC,KAEhB,CACA,OAAO,IACT,CACA,SAASqjC,GAAaC,EAAYC,GAChC,MAAM,MAAC1iB,EAAO2iB,YAAad,GAAQY,EAC7BT,EAAShiB,EAAM4iB,UAAY5iB,EAAM4iB,QAAU,CAAC,IAC5C,OAACC,EAAM,OAAER,EAAQljC,MAAOwG,GAAgBk8B,EACxCiB,EAAQD,EAAOE,KACfC,EAAQX,EAAOU,KACf3jC,EA7BR,SAAqB6jC,EAAYC,EAAYrB,GAC3C,MAAO,GAAGoB,EAAWh/B,MAAMi/B,EAAWj/B,MAAM49B,EAAKL,OAASK,EAAK7kC,MACjE,CA2BcmmC,CAAYN,EAAQR,EAAQR,GAClCr8B,EAAOk9B,EAAOhkC,OACpB,IAAI8iC,EACJ,IAAK,IAAIt8B,EAAI,EAAGA,EAAIM,IAAQN,EAAG,CAC7B,MAAM2C,EAAO66B,EAAOx9B,IACb,CAAC49B,GAAQ3jC,EAAO,CAAC6jC,GAAQ9lC,GAAS2K,EAEzC25B,GADmB35B,EAAK+6B,UAAY/6B,EAAK+6B,QAAU,CAAC,IACjCI,GAASjB,GAAiBC,EAAQ5iC,EAAKD,GAC1DqiC,EAAM77B,GAAgBzI,EACtBskC,EAAM4B,KAAOhB,GAAoBZ,EAAOa,GAAQ,EAAMR,EAAK7kC,MAC3DwkC,EAAM6B,QAAUjB,GAAoBZ,EAAOa,GAAQ,EAAOR,EAAK7kC,KACjE,CACF,CACA,SAASsmC,GAAgBtjB,EAAO+iB,GAC9B,MAAMthB,EAASzB,EAAMyB,OACrB,OAAOjjB,OAAO4G,KAAKqc,GAAQgN,QAAOrvB,GAAOqiB,EAAOriB,GAAK2jC,OAASA,IAAMQ,OACtE,CAyBA,SAASC,GAAY3B,EAAMtW,GACzB,MAAM5lB,EAAek8B,EAAKY,WAAWtjC,MAC/B4jC,EAAOlB,EAAKQ,QAAUR,EAAKQ,OAAOU,KACxC,GAAKA,EAAL,CAGAxX,EAAQA,GAASsW,EAAK4B,QACtB,IAAK,MAAMf,KAAUnX,EAAO,CAC1B,MAAMyW,EAASU,EAAOE,QACtB,IAAKZ,QAA2BxkC,IAAjBwkC,EAAOe,SAAsDvlC,IAA/BwkC,EAAOe,GAAMp9B,GACxD,cAEKq8B,EAAOe,GAAMp9B,EACtB,CARA,CASF,CACA,MAAM+9B,GAAsB1iB,GAAkB,UAATA,GAA6B,SAATA,EACnD2iB,GAAmB,CAACC,EAAQC,IAAWA,EAASD,EAASplC,OAAOge,OAAO,CAAC,EAAGonB,GAGjF,MAAME,GACJ,WAAAhnB,CAAYkD,EAAOra,GACjBqX,KAAKgD,MAAQA,EACbhD,KAAK+mB,KAAO/jB,EAAMW,IAClB3D,KAAK7d,MAAQwG,EACbqX,KAAKgnB,gBAAkB,CAAC,EACxBhnB,KAAK2lB,YAAc3lB,KAAKinB,UACxBjnB,KAAKknB,MAAQlnB,KAAK2lB,YAAY3lC,KAC9BggB,KAAK3W,aAAU7I,EACfwf,KAAKmnB,UAAW,EAChBnnB,KAAKonB,WAAQ5mC,EACbwf,KAAKqnB,iBAAc7mC,EACnBwf,KAAKsnB,oBAAiB9mC,EACtBwf,KAAKunB,gBAAa/mC,EAClBwf,KAAKwnB,gBAAahnC,EAClBwf,KAAKynB,qBAAsB,EAC3BznB,KAAK0nB,cAAWlnC,EAChBwf,KAAK2nB,UAAY,GACjB3nB,KAAK4nB,YACP,CACA,UAAAA,GACE,MAAM/C,EAAO7kB,KAAK2lB,YAClB3lB,KAAKqjB,YACLrjB,KAAK6nB,aACLhD,EAAKiD,SAAWlD,GAAUC,EAAKQ,OAAQR,GACvC7kB,KAAK+nB,aACP,CACA,WAAAC,CAAYr/B,GACNqX,KAAK7d,QAAUwG,GACjB69B,GAAYxmB,KAAK2lB,aAEnB3lB,KAAK7d,MAAQwG,CACf,CACA,UAAAk/B,GACE,MAAM7kB,EAAQhD,KAAKgD,MACb6hB,EAAO7kB,KAAK2lB,YACZsC,EAAUjoB,KAAKkoB,aACfC,EAAW,CAACpC,EAAM15B,EAAGC,EAAG6F,IAAe,MAAT4zB,EAAe15B,EAAa,MAAT05B,EAAe5zB,EAAI7F,EACpE87B,EAAMvD,EAAKwD,QAAU1gC,EAAesgC,EAAQI,QAAS/B,GAAgBtjB,EAAO,MAC5EslB,EAAMzD,EAAK0D,QAAU5gC,EAAesgC,EAAQM,QAASjC,GAAgBtjB,EAAO,MAC5EwlB,EAAM3D,EAAK4D,QAAU9gC,EAAesgC,EAAQQ,QAASnC,GAAgBtjB,EAAO,MAC5Ec,EAAY+gB,EAAK/gB,UACjB4kB,EAAM7D,EAAK8D,QAAUR,EAASrkB,EAAWskB,EAAKE,EAAKE,GACnDI,EAAM/D,EAAKgE,QAAUV,EAASrkB,EAAWwkB,EAAKF,EAAKI,GACzD3D,EAAKiE,OAAS9oB,KAAK+oB,cAAcX,GACjCvD,EAAKmE,OAAShpB,KAAK+oB,cAAcT,GACjCzD,EAAKoE,OAASjpB,KAAK+oB,cAAcP,GACjC3D,EAAKgB,OAAS7lB,KAAK+oB,cAAcL,GACjC7D,EAAKQ,OAASrlB,KAAK+oB,cAAcH,EACnC,CACA,UAAAV,GACE,OAAOloB,KAAKgD,MAAM9hB,KAAK2hB,SAAS7C,KAAK7d,MACvC,CACA,OAAA8kC,GACE,OAAOjnB,KAAKgD,MAAMkmB,eAAelpB,KAAK7d,MACxC,CACA,aAAA4mC,CAAcI,GACZ,OAAOnpB,KAAKgD,MAAMyB,OAAO0kB,EAC3B,CACA,cAAAC,CAAe5kB,GACb,MAAMqgB,EAAO7kB,KAAK2lB,YAClB,OAAOnhB,IAAUqgB,EAAKgB,OAClBhB,EAAKQ,OACLR,EAAKgB,MACX,CACA,KAAAwD,GACErpB,KAAKmf,QAAQ,QACf,CACA,QAAAmK,GACE,MAAMzE,EAAO7kB,KAAK2lB,YACd3lB,KAAKonB,OACPnZ,GAAoBjO,KAAKonB,MAAOpnB,MAE9B6kB,EAAKiD,UACPtB,GAAY3B,EAEhB,CACA,UAAA0E,GACE,MAAMtB,EAAUjoB,KAAKkoB,aACfhnC,EAAO+mC,EAAQ/mC,OAAS+mC,EAAQ/mC,KAAO,IACvCkmC,EAAQpnB,KAAKonB,MACnB,GAAI//B,EAASnG,GACX8e,KAAKonB,MA5LX,SAAkClmC,GAChC,MAAMkH,EAAO5G,OAAO4G,KAAKlH,GACnBsoC,EAAQ,IAAIrjC,MAAMiC,EAAK1G,QAC7B,IAAIwG,EAAGM,EAAMpG,EACb,IAAK8F,EAAI,EAAGM,EAAOJ,EAAK1G,OAAQwG,EAAIM,IAAQN,EAC1C9F,EAAMgG,EAAKF,GACXshC,EAAMthC,GAAK,CACTmE,EAAGjK,EACHkK,EAAGpL,EAAKkB,IAGZ,OAAOonC,CACT,CAgLmBC,CAAyBvoC,QACjC,GAAIkmC,IAAUlmC,EAAM,CACzB,GAAIkmC,EAAO,CACTnZ,GAAoBmZ,EAAOpnB,MAC3B,MAAM6kB,EAAO7kB,KAAK2lB,YAClBa,GAAY3B,GACZA,EAAK4B,QAAU,EACjB,CACIvlC,GAAQM,OAAOkoC,aAAaxoC,KD20BJgtB,EC10BFlO,MD00BLtT,EC10BDxL,GD20BdktB,SACR1hB,EAAM0hB,SAASC,UAAU7rB,KAAK0rB,IAGhC1sB,OAAOmoC,eAAej9B,EAAO,WAAY,CACvColB,cAAc,EACdtM,YAAY,EACZtlB,MAAO,CACLmuB,UAAW,CAACH,MAGhBF,GAAY9rB,SAASE,IACnB,MAAMogC,EAAS,UAAYr4B,EAAY/H,GACjCwnC,EAAOl9B,EAAMtK,GACnBZ,OAAOmoC,eAAej9B,EAAOtK,EAAK,CAChC0vB,cAAc,EACdtM,YAAY,EACZ,KAAAtlB,IAASgG,GACP,MAAMm8B,EAAMuH,EAAKnjC,MAAMuZ,KAAM9Z,GAM7B,OALAwG,EAAM0hB,SAASC,UAAUnsB,SAAS2nC,IACF,mBAAnBA,EAAOrH,IAChBqH,EAAOrH,MAAWt8B,EACpB,IAEKm8B,CACT,GACA,MCn2BAriB,KAAK2nB,UAAY,GACjB3nB,KAAKonB,MAAQlmC,CACf,CDs0BJ,IAA2BwL,EAAOwhB,CCr0BhC,CACA,WAAA6Z,GACE,MAAMlD,EAAO7kB,KAAK2lB,YAClB3lB,KAAKupB,aACDvpB,KAAK8pB,qBACPjF,EAAKoD,QAAU,IAAIjoB,KAAK8pB,mBAE5B,CACA,qBAAAC,CAAsBC,GACpB,MAAMnF,EAAO7kB,KAAK2lB,YACZsC,EAAUjoB,KAAKkoB,aACrB,IAAI+B,GAAe,EACnBjqB,KAAKupB,aACL,MAAMW,EAAarF,EAAKiD,SACxBjD,EAAKiD,SAAWlD,GAAUC,EAAKQ,OAAQR,GACnCA,EAAKL,QAAUyD,EAAQzD,QACzByF,GAAe,EACfzD,GAAY3B,GACZA,EAAKL,MAAQyD,EAAQzD,OAEvBxkB,KAAKmqB,gBAAgBH,IACjBC,GAAgBC,IAAerF,EAAKiD,WACtCtC,GAAaxlB,KAAM6kB,EAAK4B,QAE5B,CACA,SAAApD,GACE,MAAMF,EAASnjB,KAAKgD,MAAMmgB,OACpBiH,EAAYjH,EAAOkH,iBAAiBrqB,KAAKknB,OACzCtY,EAASuU,EAAOmH,gBAAgBtqB,KAAKkoB,aAAckC,GAAW,GACpEpqB,KAAK3W,QAAU85B,EAAOoH,eAAe3b,EAAQ5O,KAAKsH,cAClDtH,KAAKmnB,SAAWnnB,KAAK3W,QAAQgb,QAC7BrE,KAAKgnB,gBAAkB,CAAC,CAC1B,CACA,KAAAwD,CAAM3jC,EAAOq1B,GACX,MAAOyJ,YAAad,EAAMuC,MAAOlmC,GAAQ8e,MACnC,OAAC6lB,EAAM,SAAEiC,GAAYjD,EACrBiB,EAAQD,EAAOE,KACrB,IAEI79B,EAAGo4B,EAAKoF,EAFR+E,EAAmB,IAAV5jC,GAAeq1B,IAAUh7B,EAAKQ,QAAgBmjC,EAAK6F,QAC5DpV,EAAOzuB,EAAQ,GAAKg+B,EAAK4B,QAAQ5/B,EAAQ,GAE7C,IAAsB,IAAlBmZ,KAAKmnB,SACPtC,EAAK4B,QAAUvlC,EACf2jC,EAAK6F,SAAU,EACfhF,EAASxkC,MACJ,CAEHwkC,EADEv+B,EAAQjG,EAAK2F,IACNmZ,KAAK2qB,eAAe9F,EAAM3jC,EAAM2F,EAAOq1B,GACvC70B,EAASnG,EAAK2F,IACdmZ,KAAK4qB,gBAAgB/F,EAAM3jC,EAAM2F,EAAOq1B,GAExClc,KAAK6qB,mBAAmBhG,EAAM3jC,EAAM2F,EAAOq1B,GAEtD,MAAM4O,EAA6B,IAAqB,OAAfxK,EAAIwF,IAAoBxQ,GAAQgL,EAAIwF,GAASxQ,EAAKwQ,GAC3F,IAAK59B,EAAI,EAAGA,EAAIg0B,IAASh0B,EACvB28B,EAAK4B,QAAQv+B,EAAIrB,GAASy5B,EAAMoF,EAAOx9B,GACnCuiC,IACEK,MACFL,GAAS,GAEXnV,EAAOgL,GAGXuE,EAAK6F,QAAUD,CACjB,CACI3C,GACFtC,GAAaxlB,KAAM0lB,EAEvB,CACA,kBAAAmF,CAAmBhG,EAAM3jC,EAAM2F,EAAOq1B,GACpC,MAAM,OAAC2J,EAAM,OAAER,GAAUR,EACnBiB,EAAQD,EAAOE,KACfC,EAAQX,EAAOU,KACfgF,EAASlF,EAAOmF,YAChBC,EAAcpF,IAAWR,EACzBK,EAAS,IAAIv/B,MAAM+1B,GACzB,IAAIh0B,EAAGM,EAAMrG,EACb,IAAK+F,EAAI,EAAGM,EAAO0zB,EAAOh0B,EAAIM,IAAQN,EACpC/F,EAAQ+F,EAAIrB,EACZ6+B,EAAOx9B,GAAK,CACV,CAAC49B,GAAQmF,GAAepF,EAAO2E,MAAMO,EAAO5oC,GAAQA,GACpD,CAAC6jC,GAAQX,EAAOmF,MAAMtpC,EAAKiB,GAAQA,IAGvC,OAAOujC,CACT,CACA,cAAAiF,CAAe9F,EAAM3jC,EAAM2F,EAAOq1B,GAChC,MAAM,OAAC4M,EAAM,OAAEE,GAAUnE,EACnBa,EAAS,IAAIv/B,MAAM+1B,GACzB,IAAIh0B,EAAGM,EAAMrG,EAAO0I,EACpB,IAAK3C,EAAI,EAAGM,EAAO0zB,EAAOh0B,EAAIM,IAAQN,EACpC/F,EAAQ+F,EAAIrB,EACZgE,EAAO3J,EAAKiB,GACZujC,EAAOx9B,GAAK,CACVmE,EAAGy8B,EAAO0B,MAAM3/B,EAAK,GAAI1I,GACzBmK,EAAG08B,EAAOwB,MAAM3/B,EAAK,GAAI1I,IAG7B,OAAOujC,CACT,CACA,eAAAkF,CAAgB/F,EAAM3jC,EAAM2F,EAAOq1B,GACjC,MAAM,OAAC4M,EAAM,OAAEE,GAAUnE,GACnB,SAACqG,EAAW,IAAG,SAAEC,EAAW,KAAOnrB,KAAKmnB,SACxCzB,EAAS,IAAIv/B,MAAM+1B,GACzB,IAAIh0B,EAAGM,EAAMrG,EAAO0I,EACpB,IAAK3C,EAAI,EAAGM,EAAO0zB,EAAOh0B,EAAIM,IAAQN,EACpC/F,EAAQ+F,EAAIrB,EACZgE,EAAO3J,EAAKiB,GACZujC,EAAOx9B,GAAK,CACVmE,EAAGy8B,EAAO0B,MAAMxgC,EAAiBa,EAAMqgC,GAAW/oC,GAClDmK,EAAG08B,EAAOwB,MAAMxgC,EAAiBa,EAAMsgC,GAAWhpC,IAGtD,OAAOujC,CACT,CACA,SAAA0F,CAAUjpC,GACR,OAAO6d,KAAK2lB,YAAYc,QAAQtkC,EAClC,CACA,cAAAkpC,CAAelpC,GACb,OAAO6d,KAAK2lB,YAAYzkC,KAAKiB,EAC/B,CACA,UAAAoiC,CAAW/f,EAAOkhB,EAAQ1hB,GACxB,MAAMhB,EAAQhD,KAAKgD,MACb6hB,EAAO7kB,KAAK2lB,YACZzlC,EAAQwlC,EAAOlhB,EAAMuhB,MAK3B,OAAOxB,GAJO,CACZn8B,KAAM+7B,GAAwBnhB,GAAO,GACrCT,OAAQmjB,EAAOE,QAAQphB,EAAMuhB,OAEN7lC,EAAO2kC,EAAK1iC,MAAO,CAAC6hB,QAC/C,CACA,qBAAAsnB,CAAsB3/B,EAAO6Y,EAAOkhB,EAAQlB,GAC1C,MAAM+G,EAAc7F,EAAOlhB,EAAMuhB,MACjC,IAAI7lC,EAAwB,OAAhBqrC,EAAuBC,IAAMD,EACzC,MAAMhpB,EAASiiB,GAASkB,EAAOE,QAAQphB,EAAMuhB,MACzCvB,GAASjiB,IACXiiB,EAAMjiB,OAASA,EACfriB,EAAQqkC,GAAWC,EAAO+G,EAAavrB,KAAK2lB,YAAYxjC,QAE1DwJ,EAAMiB,IAAMtK,KAAKsK,IAAIjB,EAAMiB,IAAK1M,GAChCyL,EAAMkB,IAAMvK,KAAKuK,IAAIlB,EAAMkB,IAAK3M,EAClC,CACA,SAAAurC,CAAUjnB,EAAOknB,GACf,MAAM7G,EAAO7kB,KAAK2lB,YACZc,EAAU5B,EAAK4B,QACfgE,EAAS5F,EAAK6F,SAAWlmB,IAAUqgB,EAAKgB,OACxCr9B,EAAOi+B,EAAQ/kC,OACfiqC,EAAa3rB,KAAKopB,eAAe5kB,GACjCggB,EArPU,EAACkH,EAAU7G,EAAM7hB,IAAU0oB,IAAa7G,EAAK+G,QAAU/G,EAAKiD,UAC3E,CAAC1/B,KAAM+7B,GAAwBnhB,GAAO,GAAOT,OAAQ,MAoPxCspB,CAAYH,EAAU7G,EAAM7kB,KAAKgD,OACzCrX,EAAQ,CAACiB,IAAKrF,OAAO4D,kBAAmB0B,IAAKtF,OAAOukC,oBACnDl/B,IAAKm/B,EAAUl/B,IAAKm/B,GA3U/B,SAAuBxnB,GACrB,MAAM,IAAC5X,EAAG,IAAEC,EAAG,WAAEo/B,EAAU,WAAEC,GAAc1nB,EAAM2nB,gBACjD,MAAO,CACLv/B,IAAKq/B,EAAar/B,EAAMrF,OAAOukC,kBAC/Bj/B,IAAKq/B,EAAar/B,EAAMtF,OAAO4D,kBAEnC,CAqU2CghC,CAAcR,GACrD,IAAIzjC,EAAGw9B,EACP,SAAS0G,IACP1G,EAASe,EAAQv+B,GACjB,MAAMy8B,EAAae,EAAOiG,EAAW5F,MACrC,OAAQz+B,EAAeo+B,EAAOlhB,EAAMuhB,QAAUgG,EAAWpH,GAAcqH,EAAWrH,CACpF,CACA,IAAKz8B,EAAI,EAAGA,EAAIM,IACV4jC,MAGJpsB,KAAKsrB,sBAAsB3/B,EAAO6Y,EAAOkhB,EAAQlB,IAC7CiG,MALkBviC,GASxB,GAAIuiC,EACF,IAAKviC,EAAIM,EAAO,EAAGN,GAAK,IAAKA,EAC3B,IAAIkkC,IAAJ,CAGApsB,KAAKsrB,sBAAsB3/B,EAAO6Y,EAAOkhB,EAAQlB,GACjD,KAFA,CAKJ,OAAO74B,CACT,CACA,kBAAA0gC,CAAmB7nB,GACjB,MAAMkhB,EAAS1lB,KAAK2lB,YAAYc,QAC1BlkB,EAAS,GACf,IAAIra,EAAGM,EAAMtI,EACb,IAAKgI,EAAI,EAAGM,EAAOk9B,EAAOhkC,OAAQwG,EAAIM,IAAQN,EAC5ChI,EAAQwlC,EAAOx9B,GAAGsc,EAAMuhB,MACpBz+B,EAAepH,IACjBqiB,EAAO/f,KAAKtC,GAGhB,OAAOqiB,CACT,CACA,cAAA+pB,GACE,OAAO,CACT,CACA,gBAAAC,CAAiBpqC,GACf,MAAM0iC,EAAO7kB,KAAK2lB,YACZE,EAAShB,EAAKgB,OACdR,EAASR,EAAKQ,OACdK,EAAS1lB,KAAKorB,UAAUjpC,GAC9B,MAAO,CACLhC,MAAO0lC,EAAS,GAAKA,EAAO2G,iBAAiB9G,EAAOG,EAAOE,OAAS,GACpE7lC,MAAOmlC,EAAS,GAAKA,EAAOmH,iBAAiB9G,EAAOL,EAAOU,OAAS,GAExE,CACA,OAAA5G,CAAQnb,GACN,MAAM6gB,EAAO7kB,KAAK2lB,YAClB3lB,KAAKgiB,OAAOhe,GAAQ,WACpB6gB,EAAK4H,MAvcT,SAAgBvsC,GACd,IAAI4O,EAAGqD,EAAGxH,EAAG4H,EASb,OARIlL,EAASnH,IACX4O,EAAI5O,EAAMkpB,IACVjX,EAAIjS,EAAMipB,MACVxe,EAAIzK,EAAMmpB,OACV9W,EAAIrS,EAAMgpB,MAEVpa,EAAIqD,EAAIxH,EAAI4H,EAAIrS,EAEX,CACLkpB,IAAKta,EACLqa,MAAOhX,EACPkX,OAAQ1e,EACRue,KAAM3W,EACNm6B,UAAoB,IAAVxsC,EAEd,CAsbiBysC,CAAOhlC,EAAeqY,KAAK3W,QAAQkgB,KApdpD,SAAqBuf,EAAQE,EAAQ9E,GACnC,IAAwB,IAApBA,EACF,OAAO,EAET,MAAM73B,EAAI43B,GAAU6E,EAAQ5E,GACtB53B,EAAI23B,GAAU+E,EAAQ9E,GAC5B,MAAO,CACL9a,IAAK9c,EAAExF,IACPqiB,MAAO9c,EAAEvF,IACTuiB,OAAQ/c,EAAEzF,MACVqiB,KAAM7c,EAAExF,MAEZ,CAwc0D+lC,CAAY/H,EAAKiE,OAAQjE,EAAKmE,OAAQhpB,KAAKssB,mBACnG,CACA,MAAAtK,CAAOhe,GAAO,CACd,IAAAwb,GACE,MAAM7b,EAAM3D,KAAK+mB,KACX/jB,EAAQhD,KAAKgD,MACb6hB,EAAO7kB,KAAK2lB,YACZxiB,EAAW0hB,EAAK3jC,MAAQ,GACxB8nB,EAAOhG,EAAM6pB,UACb9K,EAAS,GACTl7B,EAAQmZ,KAAKunB,YAAc,EAC3BrL,EAAQlc,KAAKwnB,YAAerkB,EAASzhB,OAASmF,EAC9C8d,EAA0B3E,KAAK3W,QAAQsb,wBAC7C,IAAIzc,EAIJ,IAHI28B,EAAKoD,SACPpD,EAAKoD,QAAQzI,KAAK7b,EAAKqF,EAAMniB,EAAOq1B,GAEjCh0B,EAAIrB,EAAOqB,EAAIrB,EAAQq1B,IAASh0B,EAAG,CACtC,MAAMouB,EAAUnT,EAASjb,GACrBouB,EAAQsV,SAGRtV,EAAQyL,QAAUpd,EACpBod,EAAOv/B,KAAK8zB,GAEZA,EAAQkJ,KAAK7b,EAAKqF,GAEtB,CACA,IAAK9gB,EAAI,EAAGA,EAAI65B,EAAOrgC,SAAUwG,EAC/B65B,EAAO75B,GAAGs3B,KAAK7b,EAAKqF,EAExB,CACA,QAAA0Q,CAASv3B,EAAO4/B,GACd,MAAM/d,EAAO+d,EAAS,SAAW,UACjC,YAAiBvhC,IAAV2B,GAAuB6d,KAAK2lB,YAAYsC,QAC3CjoB,KAAK8sB,6BAA6B9oB,GAClChE,KAAK+sB,0BAA0B5qC,GAAS,EAAG6hB,EACjD,CACA,UAAAsD,CAAWnlB,EAAO4/B,EAAQ/d,GACxB,MAAMikB,EAAUjoB,KAAKkoB,aACrB,IAAInlB,EACJ,GAAI5gB,GAAS,GAAKA,EAAQ6d,KAAK2lB,YAAYzkC,KAAKQ,OAAQ,CACtD,MAAM40B,EAAUtW,KAAK2lB,YAAYzkC,KAAKiB,GACtC4gB,EAAUuT,EAAQoR,WACfpR,EAAQoR,SAvXjB,SAA2BtV,EAAQjwB,EAAOm0B,GACxC,OAAOhJ,GAAc8E,EAAQ,CAC3B2P,QAAQ,EACRiL,UAAW7qC,EACXujC,YAAQllC,EACRysC,SAAKzsC,EACL81B,UACAn0B,QACA6hB,KAAM,UACNhkB,KAAM,QAEV,CA4W4BktC,CAAkBltB,KAAKsH,aAAcnlB,EAAOm0B,IAClEvT,EAAQ2iB,OAAS1lB,KAAKorB,UAAUjpC,GAChC4gB,EAAQkqB,IAAMhF,EAAQ/mC,KAAKiB,GAC3B4gB,EAAQ5gB,MAAQ4gB,EAAQiqB,UAAY7qC,CACtC,MACE4gB,EAAU/C,KAAK0nB,WACZ1nB,KAAK0nB,SAzYd,SAA8BtV,EAAQjwB,GACpC,OAAOmrB,GAAc8E,EACnB,CACE2P,QAAQ,EACRkG,aAASznC,EACTmI,aAAcxG,EACdA,QACA6hB,KAAM,UACNhkB,KAAM,WAGZ,CA8XyBmtC,CAAqBntB,KAAKgD,MAAMsE,aAActH,KAAK7d,QACtE4gB,EAAQklB,QAAUA,EAClBllB,EAAQ5gB,MAAQ4gB,EAAQpa,aAAeqX,KAAK7d,MAI9C,OAFA4gB,EAAQgf,SAAWA,EACnBhf,EAAQiB,KAAOA,EACRjB,CACT,CACA,4BAAA+pB,CAA6B9oB,GAC3B,OAAOhE,KAAKotB,uBAAuBptB,KAAK8pB,mBAAmB7iC,GAAI+c,EACjE,CACA,yBAAA+oB,CAA0B5qC,EAAO6hB,GAC/B,OAAOhE,KAAKotB,uBAAuBptB,KAAKqtB,gBAAgBpmC,GAAI+c,EAAM7hB,EACpE,CACA,sBAAAirC,CAAuBE,EAAatpB,EAAO,UAAW7hB,GACpD,MAAM4/B,EAAkB,WAAT/d,EACTuC,EAAQvG,KAAKgnB,gBACb3M,EAAWiT,EAAc,IAAMtpB,EAC/B4iB,EAASrgB,EAAM8T,GACfkT,EAAUvtB,KAAKynB,qBAAuBl9B,EAAQpI,GACpD,GAAIykC,EACF,OAAOD,GAAiBC,EAAQ2G,GAElC,MAAMpK,EAASnjB,KAAKgD,MAAMmgB,OACpBiH,EAAYjH,EAAOqK,wBAAwBxtB,KAAKknB,MAAOoG,GACvDze,EAAWkT,EAAS,CAAC,GAAGuL,SAAoB,QAASA,EAAa,IAAM,CAACA,EAAa,IACtF1e,EAASuU,EAAOmH,gBAAgBtqB,KAAKkoB,aAAckC,GACnDj1B,EAAQ3T,OAAO4G,KAAKoa,GAASW,SAASmqB,IAEtC/qB,EAAS4gB,EAAOsK,oBAAoB7e,EAAQzZ,GADlC,IAAM6K,KAAKsH,WAAWnlB,EAAO4/B,IACqBlT,GAKlE,OAJItM,EAAOmhB,UACTnhB,EAAOmhB,QAAU6J,EACjBhnB,EAAM8T,GAAY74B,OAAOksC,OAAO/G,GAAiBpkB,EAAQgrB,KAEpDhrB,CACT,CACA,kBAAAorB,CAAmBxrC,EAAOyrC,EAAY7L,GACpC,MAAM/e,EAAQhD,KAAKgD,MACbuD,EAAQvG,KAAKgnB,gBACb3M,EAAW,aAAauT,IACxBhH,EAASrgB,EAAM8T,GACrB,GAAIuM,EACF,OAAOA,EAET,IAAIv9B,EACJ,IAAgC,IAA5B2Z,EAAM3Z,QAAQqZ,UAAqB,CACrC,MAAMygB,EAASnjB,KAAKgD,MAAMmgB,OACpBiH,EAAYjH,EAAO0K,0BAA0B7tB,KAAKknB,MAAO0G,GACzDhf,EAASuU,EAAOmH,gBAAgBtqB,KAAKkoB,aAAckC,GACzD/gC,EAAU85B,EAAOoH,eAAe3b,EAAQ5O,KAAKsH,WAAWnlB,EAAO4/B,EAAQ6L,GACzE,CACA,MAAM7K,EAAa,IAAIG,GAAWlgB,EAAO3Z,GAAWA,EAAQ05B,YAI5D,OAHI15B,GAAWA,EAAQ8lB,aACrB5I,EAAM8T,GAAY74B,OAAOksC,OAAO3K,IAE3BA,CACT,CACA,gBAAA+K,CAAiBzkC,GACf,GAAKA,EAAQq6B,QAGb,OAAO1jB,KAAKsnB,iBAAmBtnB,KAAKsnB,eAAiB9lC,OAAOge,OAAO,CAAC,EAAGnW,GACzE,CACA,cAAA0kC,CAAe/pB,EAAMgqB,GACnB,OAAQA,GAAiBtH,GAAmB1iB,IAAShE,KAAKgD,MAAMirB,mBAClE,CACA,aAAAC,CAAc5X,EAASn0B,EAAOwgC,EAAY3e,GACpC0iB,GAAmB1iB,GACrBxiB,OAAOge,OAAO8W,EAASqM,GAEvB3iB,KAAK2tB,mBAAmBxrC,EAAO6hB,GAAMge,OAAO1L,EAASqM,EAEzD,CACA,mBAAAwL,CAAoBH,EAAehqB,EAAMyf,GACnCuK,IAAkBtH,GAAmB1iB,IACvChE,KAAK2tB,wBAAmBntC,EAAWwjB,GAAMge,OAAOgM,EAAevK,EAEnE,CACA,SAAA2K,CAAU9X,EAASn0B,EAAO6hB,EAAM+d,GAC9BzL,EAAQyL,OAASA,EACjB,MAAM14B,EAAU2W,KAAK0Z,SAASv3B,EAAO4/B,GACrC/hB,KAAK2tB,mBAAmBxrC,EAAO6hB,EAAM+d,GAAQC,OAAO1L,EAAS,CAC3DjtB,SAAW04B,GAAU/hB,KAAK8tB,iBAAiBzkC,IAAaA,GAE5D,CACA,gBAAAglC,CAAiB/X,EAAS3tB,EAAcxG,GACtC6d,KAAKouB,UAAU9X,EAASn0B,EAAO,UAAU,EAC3C,CACA,aAAAmsC,CAAchY,EAAS3tB,EAAcxG,GACnC6d,KAAKouB,UAAU9X,EAASn0B,EAAO,UAAU,EAC3C,CACA,wBAAAosC,GACE,MAAMjY,EAAUtW,KAAK2lB,YAAYsC,QAC7B3R,GACFtW,KAAKouB,UAAU9X,OAAS91B,EAAW,UAAU,EAEjD,CACA,qBAAAguC,GACE,MAAMlY,EAAUtW,KAAK2lB,YAAYsC,QAC7B3R,GACFtW,KAAKouB,UAAU9X,OAAS91B,EAAW,UAAU,EAEjD,CACA,eAAA2pC,CAAgBH,GACd,MAAM9oC,EAAO8e,KAAKonB,MACZjkB,EAAWnD,KAAK2lB,YAAYzkC,KAClC,IAAK,MAAOshC,EAAQiM,EAAMC,KAAS1uB,KAAK2nB,UACtC3nB,KAAKwiB,GAAQiM,EAAMC,GAErB1uB,KAAK2nB,UAAY,GACjB,MAAMgH,EAAUxrB,EAASzhB,OACnBktC,EAAU1tC,EAAKQ,OACfw6B,EAAQ55B,KAAKsK,IAAIgiC,EAASD,GAC5BzS,GACFlc,KAAKwqB,MAAM,EAAGtO,GAEZ0S,EAAUD,EACZ3uB,KAAK6uB,gBAAgBF,EAASC,EAAUD,EAAS3E,GACxC4E,EAAUD,GACnB3uB,KAAK8uB,gBAAgBF,EAASD,EAAUC,EAE5C,CACA,eAAAC,CAAgBhoC,EAAOq1B,EAAO8N,GAAmB,GAC/C,MAAMnF,EAAO7kB,KAAK2lB,YACZzkC,EAAO2jC,EAAK3jC,KACZ4F,EAAMD,EAAQq1B,EACpB,IAAIh0B,EACJ,MAAM6mC,EAAQvd,IAEZ,IADAA,EAAI9vB,QAAUw6B,EACTh0B,EAAIspB,EAAI9vB,OAAS,EAAGwG,GAAKpB,EAAKoB,IACjCspB,EAAItpB,GAAKspB,EAAItpB,EAAIg0B,EACnB,EAGF,IADA6S,EAAK7tC,GACAgH,EAAIrB,EAAOqB,EAAIpB,IAAOoB,EACzBhH,EAAKgH,GAAK,IAAI8X,KAAKqtB,gBAEjBrtB,KAAKmnB,UACP4H,EAAKlK,EAAK4B,SAEZzmB,KAAKwqB,MAAM3jC,EAAOq1B,GACd8N,GACFhqB,KAAKgvB,eAAe9tC,EAAM2F,EAAOq1B,EAAO,QAE5C,CACA,cAAA8S,CAAe1Y,EAASzvB,EAAOq1B,EAAOlY,GAAO,CAC7C,eAAA8qB,CAAgBjoC,EAAOq1B,GACrB,MAAM2I,EAAO7kB,KAAK2lB,YAClB,GAAI3lB,KAAKmnB,SAAU,CACjB,MAAM8H,EAAUpK,EAAK4B,QAAQ1f,OAAOlgB,EAAOq1B,GACvC2I,EAAKiD,UACPtB,GAAY3B,EAAMoK,EAEtB,CACApK,EAAK3jC,KAAK6lB,OAAOlgB,EAAOq1B,EAC1B,CACA,KAAAgT,CAAMhpC,GACJ,GAAI8Z,KAAKmnB,SACPnnB,KAAK2nB,UAAUnlC,KAAK0D,OACf,CACL,MAAOs8B,EAAQiM,EAAMC,GAAQxoC,EAC7B8Z,KAAKwiB,GAAQiM,EAAMC,EACrB,CACA1uB,KAAKgD,MAAMmsB,aAAa3sC,KAAK,CAACwd,KAAK7d,SAAU+D,GAC/C,CACA,WAAAkpC,GACE,MAAMlT,EAAQmT,UAAU3tC,OACxBse,KAAKkvB,MAAM,CAAC,kBAAmBlvB,KAAKkoB,aAAahnC,KAAKQ,OAASw6B,EAAOA,GACxE,CACA,UAAAoT,GACEtvB,KAAKkvB,MAAM,CAAC,kBAAmBlvB,KAAK2lB,YAAYzkC,KAAKQ,OAAS,EAAG,GACnE,CACA,YAAA6tC,GACEvvB,KAAKkvB,MAAM,CAAC,kBAAmB,EAAG,GACpC,CACA,aAAAM,CAAc3oC,EAAOq1B,GACfA,GACFlc,KAAKkvB,MAAM,CAAC,kBAAmBroC,EAAOq1B,IAExC,MAAMuT,EAAWJ,UAAU3tC,OAAS,EAChC+tC,GACFzvB,KAAKkvB,MAAM,CAAC,kBAAmBroC,EAAO4oC,GAE1C,CACA,cAAAC,GACE1vB,KAAKkvB,MAAM,CAAC,kBAAmB,EAAGG,UAAU3tC,QAC9C,EAiBF,SAASiuC,GAAqB9K,GAC5B,MAAMrgB,EAAQqgB,EAAKgB,OACbtjB,EAbR,SAA2BiC,EAAOxkB,GAChC,IAAKwkB,EAAMorB,OAAOC,KAAM,CACtB,MAAMC,EAAetrB,EAAM+gB,wBAAwBvlC,GACnD,IAAIuiB,EAAS,GACb,IAAK,IAAIra,EAAI,EAAGM,EAAOsnC,EAAapuC,OAAQwG,EAAIM,EAAMN,IACpDqa,EAASA,EAAOwtB,OAAOD,EAAa5nC,GAAGu9B,WAAW4G,mBAAmB7nB,IAEvEA,EAAMorB,OAAOC,KAAOvhB,GAAa/L,EAAOytB,MAAK,CAACtlC,EAAGC,IAAMD,EAAIC,IAC7D,CACA,OAAO6Z,EAAMorB,OAAOC,IACtB,CAGiBI,CAAkBzrB,EAAOqgB,EAAK7kC,MAC7C,IACIkI,EAAGM,EAAM0nC,EAAM5a,EADf1oB,EAAM4X,EAAM2rB,QAEhB,MAAMC,EAAmB,KACV,QAATF,IAA4B,QAAVA,IAGlB3lC,EAAQ+qB,KACV1oB,EAAMtK,KAAKsK,IAAIA,EAAKtK,KAAKkK,IAAI0jC,EAAO5a,IAAS1oB,IAE/C0oB,EAAO4a,EAAI,EAEb,IAAKhoC,EAAI,EAAGM,EAAO+Z,EAAO7gB,OAAQwG,EAAIM,IAAQN,EAC5CgoC,EAAO1rB,EAAM6rB,iBAAiB9tB,EAAOra,IACrCkoC,IAGF,IADA9a,OAAO90B,EACF0H,EAAI,EAAGM,EAAOgc,EAAM8rB,MAAM5uC,OAAQwG,EAAIM,IAAQN,EACjDgoC,EAAO1rB,EAAM+rB,gBAAgBroC,GAC7BkoC,IAEF,OAAOxjC,CACT,CA0DA,SAAS4jC,GAAWC,EAAO5lC,EAAMw6B,EAAQn9B,GAMvC,OALIf,EAAQspC,GAtBd,SAAuBA,EAAO5lC,EAAMw6B,EAAQn9B,GAC1C,MAAMwoC,EAAarL,EAAOmF,MAAMiG,EAAM,GAAIvoC,GACpCyoC,EAAWtL,EAAOmF,MAAMiG,EAAM,GAAIvoC,GAClC0E,EAAMtK,KAAKsK,IAAI8jC,EAAYC,GAC3B9jC,EAAMvK,KAAKuK,IAAI6jC,EAAYC,GACjC,IAAIC,EAAWhkC,EACXikC,EAAShkC,EACTvK,KAAKkK,IAAII,GAAOtK,KAAKkK,IAAIK,KAC3B+jC,EAAW/jC,EACXgkC,EAASjkC,GAEX/B,EAAKw6B,EAAOU,MAAQ8K,EACpBhmC,EAAKimC,QAAU,CACbF,WACAC,SACAhqC,MAAO6pC,EACP5pC,IAAK6pC,EACL/jC,MACAC,MAEJ,CAGIkkC,CAAcN,EAAO5lC,EAAMw6B,EAAQn9B,GAEnC2C,EAAKw6B,EAAOU,MAAQV,EAAOmF,MAAMiG,EAAOvoC,GAEnC2C,CACT,CACA,SAASmmC,GAAsBnM,EAAM3jC,EAAM2F,EAAOq1B,GAChD,MAAM2J,EAAShB,EAAKgB,OACdR,EAASR,EAAKQ,OACd0F,EAASlF,EAAOmF,YAChBC,EAAcpF,IAAWR,EACzBK,EAAS,GACf,IAAIx9B,EAAGM,EAAMqC,EAAM4lC,EACnB,IAAKvoC,EAAIrB,EAAO2B,EAAO3B,EAAQq1B,EAAOh0B,EAAIM,IAAQN,EAChDuoC,EAAQvvC,EAAKgH,GACb2C,EAAO,CAAC,EACRA,EAAKg7B,EAAOE,MAAQkF,GAAepF,EAAO2E,MAAMO,EAAO7iC,GAAIA,GAC3Dw9B,EAAOljC,KAAKguC,GAAWC,EAAO5lC,EAAMw6B,EAAQn9B,IAE9C,OAAOw9B,CACT,CACA,SAASuL,GAAWC,GAClB,OAAOA,QAA8B1wC,IAApB0wC,EAAON,eAA4CpwC,IAAlB0wC,EAAOL,MAC3D,CA2BA,SAASM,GAAiBxO,EAAYt5B,EAASm7B,EAAOriC,GACpD,IAAIivC,EAAO/nC,EAAQgoC,cACnB,MAAMhP,EAAM,CAAC,EACb,IAAK+O,EAEH,YADAzO,EAAW0O,cAAgBhP,GAG7B,MAAM,MAACx7B,EAAK,IAAEC,EAAG,QAAEmB,EAAO,IAAEmhB,EAAG,OAAEC,GA3BnC,SAAqBsZ,GACnB,IAAI16B,EAASpB,EAAOC,EAAKsiB,EAAKC,EAiB9B,OAhBIsZ,EAAW2O,YACbrpC,EAAU06B,EAAWiH,KAAOjH,EAAWt2B,EACvCxF,EAAQ,OACRC,EAAM,UAENmB,EAAU06B,EAAWiH,KAAOjH,EAAWr2B,EACvCzF,EAAQ,SACRC,EAAM,OAEJmB,GACFmhB,EAAM,MACNC,EAAS,UAETD,EAAM,QACNC,EAAS,OAEJ,CAACxiB,QAAOC,MAAKmB,UAASmhB,MAAKC,SACpC,CAQ6CkoB,CAAY5O,GAC1C,WAATyO,GAAqB5M,IACvB7B,EAAW6O,oBAAqB,GAC3BhN,EAAM4B,MAAQ,KAAOjkC,EACxBivC,EAAOhoB,GACGob,EAAM6B,SAAW,KAAOlkC,EAClCivC,EAAO/nB,GAEPgZ,EAAIoP,GAAUpoB,EAAQxiB,EAAOC,EAAKmB,KAAY,EAC9CmpC,EAAOhoB,IAGXiZ,EAAIoP,GAAUL,EAAMvqC,EAAOC,EAAKmB,KAAY,EAC5C06B,EAAW0O,cAAgBhP,CAC7B,CACA,SAASoP,GAAUL,EAAM1mC,EAAGC,EAAG1C,GAS/B,IAAcypC,EAAMhpC,EAAIipC,EAFtB,OANI1pC,GAQkB0pC,EAPChnC,EACrBymC,EAAOQ,GADPR,GAOUM,EAPEN,MAOI1oC,EAPEgC,GAQCinC,EAAKD,IAASC,EAAKjpC,EAAKgpC,EAPrB/mC,EAAGD,IAEzB0mC,EAAOQ,GAASR,EAAM1mC,EAAGC,GAEpBymC,CACT,CAIA,SAASQ,GAAS1/B,EAAGrL,EAAOC,GAC1B,MAAa,UAANoL,EAAgBrL,EAAc,QAANqL,EAAcpL,EAAMoL,CACrD,CACA,SAAS2/B,GAAiBlP,GAAY,cAACmP,GAAgB1yB,GACrDujB,EAAWmP,cAAkC,SAAlBA,EACb,IAAV1yB,EAAc,IAAO,EACrB0yB,CACN,CA9LAhL,GAAkBtkB,SAAW,CAAC,EAC9BskB,GAAkB1gC,UAAU0jC,mBAAqB,KACjDhD,GAAkB1gC,UAAUinC,gBAAkB,KA6L9C,MAAM0E,WAAsBjL,GAC1B,kBAAA+D,CAAmBhG,EAAM3jC,EAAM2F,EAAOq1B,GACpC,OAAO8U,GAAsBnM,EAAM3jC,EAAM2F,EAAOq1B,EAClD,CACA,cAAAyO,CAAe9F,EAAM3jC,EAAM2F,EAAOq1B,GAChC,OAAO8U,GAAsBnM,EAAM3jC,EAAM2F,EAAOq1B,EAClD,CACA,eAAA0O,CAAgB/F,EAAM3jC,EAAM2F,EAAOq1B,GACjC,MAAM,OAAC2J,EAAM,OAAER,GAAUR,GACnB,SAACqG,EAAW,IAAG,SAAEC,EAAW,KAAOnrB,KAAKmnB,SACxC6K,EAA2B,MAAhBnM,EAAOE,KAAemF,EAAWC,EAC5C8G,EAA2B,MAAhB5M,EAAOU,KAAemF,EAAWC,EAC5CzF,EAAS,GACf,IAAIx9B,EAAGM,EAAMqC,EAAMZ,EACnB,IAAK/B,EAAIrB,EAAO2B,EAAO3B,EAAQq1B,EAAOh0B,EAAIM,IAAQN,EAChD+B,EAAM/I,EAAKgH,GACX2C,EAAO,CAAC,EACRA,EAAKg7B,EAAOE,MAAQF,EAAO2E,MAAMxgC,EAAiBC,EAAK+nC,GAAW9pC,GAClEw9B,EAAOljC,KAAKguC,GAAWxmC,EAAiBC,EAAKgoC,GAAWpnC,EAAMw6B,EAAQn9B,IAExE,OAAOw9B,CACT,CACA,qBAAA4F,CAAsB3/B,EAAO6Y,EAAOkhB,EAAQlB,GAC1C0N,MAAM5G,sBAAsB3/B,EAAO6Y,EAAOkhB,EAAQlB,GAClD,MAAM0M,EAASxL,EAAOoL,QAClBI,GAAU1sB,IAAUxE,KAAK2lB,YAAYN,SACvC15B,EAAMiB,IAAMtK,KAAKsK,IAAIjB,EAAMiB,IAAKskC,EAAOtkC,KACvCjB,EAAMkB,IAAMvK,KAAKuK,IAAIlB,EAAMkB,IAAKqkC,EAAOrkC,KAE3C,CACA,cAAAy/B,GACE,OAAO,CACT,CACA,gBAAAC,CAAiBpqC,GACf,MAAM0iC,EAAO7kB,KAAK2lB,aACZ,OAACE,EAAM,OAAER,GAAUR,EACnBa,EAAS1lB,KAAKorB,UAAUjpC,GACxB+uC,EAASxL,EAAOoL,QAChB5wC,EAAQ+wC,GAAWC,GACrB,IAAMA,EAAOrqC,MAAQ,KAAOqqC,EAAOpqC,IAAM,IACzC,GAAKu+B,EAAOmH,iBAAiB9G,EAAOL,EAAOU,OAC/C,MAAO,CACL5lC,MAAO,GAAK0lC,EAAO2G,iBAAiB9G,EAAOG,EAAOE,OAClD7lC,QAEJ,CACA,UAAA0nC,GACE5nB,KAAKynB,qBAAsB,EAC3ByK,MAAMtK,aACO5nB,KAAK2lB,YACbnB,MAAQxkB,KAAKkoB,aAAa1D,KACjC,CACA,MAAAxC,CAAOhe,GACL,MAAM6gB,EAAO7kB,KAAK2lB,YAClB3lB,KAAKgvB,eAAenK,EAAK3jC,KAAM,EAAG2jC,EAAK3jC,KAAKQ,OAAQsiB,EACtD,CACA,cAAAgrB,CAAemD,EAAMtrC,EAAOq1B,EAAOlY,GACjC,MAAMqlB,EAAiB,UAATrlB,GACR,MAAC7hB,EAAOwjC,aAAa,OAACN,IAAWrlB,KACjC4pB,EAAOvE,EAAO+M,eACdd,EAAajM,EAAOgN,eACpBC,EAAQtyB,KAAKuyB,YACbC,EAAYxyB,KAAK+sB,0BAA0BlmC,EAAOmd,GAClDgqB,EAAgBhuB,KAAK8tB,iBAAiB0E,GACtCzE,EAAiB/tB,KAAK+tB,eAAe/pB,EAAMgqB,GACjDhuB,KAAKmuB,oBAAoBH,EAAehqB,EAAMwuB,GAC9C,IAAK,IAAItqC,EAAIrB,EAAOqB,EAAIrB,EAAQq1B,EAAOh0B,IAAK,CAC1C,MAAMw9B,EAAS1lB,KAAKorB,UAAUljC,GACxBuqC,EAAUpJ,GAASniC,EAAcw+B,EAAOL,EAAOU,OAAS,CAAC6D,OAAM8I,KAAM9I,GAAQ5pB,KAAK2yB,yBAAyBzqC,GAC3G0qC,EAAU5yB,KAAK6yB,yBAAyB3qC,EAAGoqC,GAC3C9N,GAASkB,EAAOE,SAAW,CAAC,GAAGP,EAAOU,MACtCpD,EAAa,CACjB2O,aACA1H,KAAM6I,EAAQ7I,KACd4H,oBAAqBhN,GAASyM,GAAWvL,EAAOoL,UAAa3uC,IAAUqiC,EAAM4B,MAAQjkC,IAAUqiC,EAAM6B,QACrGh6B,EAAGilC,EAAamB,EAAQC,KAAOE,EAAQE,OACvCxmC,EAAGglC,EAAasB,EAAQE,OAASL,EAAQC,KACzCjrB,OAAQ6pB,EAAasB,EAAQhoC,KAAOtI,KAAKkK,IAAIimC,EAAQ7nC,MACrDwb,MAAOkrB,EAAahvC,KAAKkK,IAAIimC,EAAQ7nC,MAAQgoC,EAAQhoC,MAEnDmjC,IACFpL,EAAWt5B,QAAU2kC,GAAiBhuB,KAAK+sB,0BAA0B7kC,EAAGiqC,EAAKjqC,GAAG65B,OAAS,SAAW/d,IAEtG,MAAM3a,EAAUs5B,EAAWt5B,SAAW8oC,EAAKjqC,GAAGmB,QAC9C8nC,GAAiBxO,EAAYt5B,EAASm7B,EAAOriC,GAC7C0vC,GAAiBlP,EAAYt5B,EAASipC,EAAMlzB,OAC5CY,KAAKkuB,cAAciE,EAAKjqC,GAAIA,EAAGy6B,EAAY3e,EAC7C,CACF,CACA,UAAA+uB,CAAWC,EAAMhG,GACf,MACMnH,EADO7lB,KAAK2lB,YACEE,OACdxB,EAAWwB,EAAON,wBAAwBvlB,KAAKknB,OAC/CpC,EAAUe,EAAOx8B,QAAQy7B,QACzBt8B,EAAO67B,EAAS3iC,OAChBsjC,EAAS,GACf,IAAI98B,EAAG2C,EACP,IAAK3C,EAAI,EAAGA,EAAIM,IAAQN,EAEtB,GADA2C,EAAOw5B,EAASn8B,GACX2C,EAAK46B,WAAWp8B,QAAQ4pC,QAA7B,CAGA,QAAyB,IAAdjG,EAA2B,CACpC,MAAM/rB,EAAMpW,EAAK46B,WAAW2F,UAAU4B,GACpCniC,EAAK46B,WAAWE,YAAYN,OAAOU,MAErC,GAAI7+B,EAAc+Z,IAAQ7U,MAAM6U,GAC9B,QAEJ,CAKA,KAJgB,IAAZ6jB,IAAqD,IAAhCE,EAAO77B,QAAQ0B,EAAK25B,aAClChkC,IAAZskC,QAAwCtkC,IAAfqK,EAAK25B,QAC3BQ,EAAOxiC,KAAKqI,EAAK25B,OAEf35B,EAAK1I,QAAU6wC,EACjB,KAdF,CAoBF,OAHKhO,EAAOtjC,QACVsjC,EAAOxiC,UAAKhC,GAEPwkC,CACT,CACA,cAAAkO,CAAe/wC,GACb,OAAO6d,KAAK+yB,gBAAWvyC,EAAW2B,GAAOT,MAC3C,CACA,cAAAyxC,CAAexqC,EAAcqc,EAAMgoB,GACjC,MAAMhI,EAAShlB,KAAK+yB,WAAWpqC,EAAcqkC,GACvC7qC,OAAkB3B,IAATwkB,EACXggB,EAAO77B,QAAQ6b,IACd,EACL,OAAmB,IAAX7iB,EACJ6iC,EAAOtjC,OAAS,EAChBS,CACN,CACA,SAAAowC,GACE,MAAMloB,EAAOrK,KAAK3W,QACZw7B,EAAO7kB,KAAK2lB,YACZE,EAAShB,EAAKgB,OACduN,EAAS,GACf,IAAIlrC,EAAGM,EACP,IAAKN,EAAI,EAAGM,EAAOq8B,EAAK3jC,KAAKQ,OAAQwG,EAAIM,IAAQN,EAC/CkrC,EAAO5wC,KAAKqjC,EAAOwK,iBAAiBrwB,KAAKorB,UAAUljC,GAAG29B,EAAOE,MAAO79B,IAEtE,MAAMmrC,EAAehpB,EAAKgpB,aAE1B,MAAO,CACLzmC,IAFUymC,GAAgB1D,GAAqB9K,GAG/CuO,SACAvsC,MAAOg/B,EAAOyN,YACdxsC,IAAK++B,EAAO0N,UACZC,WAAYxzB,KAAKkzB,iBACjB1uB,MAAOqhB,EACPoN,QAAS5oB,EAAK4oB,QACd7zB,MAAOi0B,EAAe,EAAIhpB,EAAKopB,mBAAqBppB,EAAKqpB,cAE7D,CACA,wBAAAf,CAAyBxwC,GACvB,MAAOwjC,aAAa,OAACN,EAAM,SAAEyC,GAAWz+B,SAAUugC,KAAM+J,EAAS,aAAEC,IAAiB5zB,KAC9E6zB,EAAaF,GAAa,EAC1BjO,EAAS1lB,KAAKorB,UAAUjpC,GACxB+uC,EAASxL,EAAOoL,QAChBgD,EAAW7C,GAAWC,GAC5B,IAGIwB,EAAM9nC,EAHN1K,EAAQwlC,EAAOL,EAAOU,MACtBl/B,EAAQ,EACRnF,EAASomC,EAAW9nB,KAAKukB,WAAWc,EAAQK,EAAQoC,GAAY5nC,EAEhEwB,IAAWxB,IACb2G,EAAQnF,EAASxB,EACjBwB,EAASxB,GAEP4zC,IACF5zC,EAAQgxC,EAAON,SACflvC,EAASwvC,EAAOL,OAASK,EAAON,SAClB,IAAV1wC,GAAeuL,GAAKvL,KAAWuL,GAAKylC,EAAOL,UAC7ChqC,EAAQ,GAEVA,GAAS3G,GAEX,MAAMwwC,EAAcxpC,EAAcysC,IAAeG,EAAuBjtC,EAAZ8sC,EAC5D,IAAI/J,EAAOvE,EAAOgL,iBAAiBK,GAcnC,GAZEgC,EADE1yB,KAAKgD,MAAM+wB,kBAAkB5xC,GACxBkjC,EAAOgL,iBAAiBxpC,EAAQnF,GAEhCkoC,EAETh/B,EAAO8nC,EAAO9I,EACVtnC,KAAKkK,IAAI5B,GAAQgpC,IACnBhpC,EAhQN,SAAiBA,EAAMy6B,EAAQwO,GAC7B,OAAa,IAATjpC,EACKa,GAAKb,IAENy6B,EAAOgN,eAAiB,GAAK,IAAMhN,EAAOz4B,KAAOinC,EAAa,GAAK,EAC7E,CA2PaG,CAAQppC,EAAMy6B,EAAQwO,GAAcD,EACvC1zC,IAAU2zC,IACZjK,GAAQh/B,EAAO,GAEjB8nC,EAAO9I,EAAOh/B,GAEZg/B,IAASvE,EAAOgL,iBAAiBwD,GAAa,CAChD,MAAMI,EAAWxoC,GAAKb,GAAQy6B,EAAO6O,qBAAqBL,GAAc,EACxEjK,GAAQqK,EACRrpC,GAAQqpC,CACV,CACA,MAAO,CACLrpC,OACAg/B,OACA8I,OACAI,OAAQJ,EAAO9nC,EAAO,EAE1B,CACA,wBAAAioC,CAAyB1wC,EAAOmwC,GAC9B,MAAM9tB,EAAQ8tB,EAAM9tB,MACdnb,EAAU2W,KAAK3W,QACf8qC,EAAW9qC,EAAQ8qC,SACnBC,EAAkBzsC,EAAe0B,EAAQ+qC,gBAAiBC,KAChE,IAAIvB,EAAQloC,EACZ,GAAI0nC,EAAMW,QAAS,CACjB,MAAMO,EAAaW,EAAWn0B,KAAKkzB,eAAe/wC,GAASmwC,EAAMkB,WAC3D7nC,EAAiC,SAAzBtC,EAAQgqC,aA7V5B,SAAmClxC,EAAOmwC,EAAOjpC,EAASmqC,GACxD,MAAMJ,EAASd,EAAMc,OACflD,EAAOkD,EAAOjxC,GACpB,IAAImzB,EAAOnzB,EAAQ,EAAIixC,EAAOjxC,EAAQ,GAAK,KACvCmxB,EAAOnxB,EAAQixC,EAAO1xC,OAAS,EAAI0xC,EAAOjxC,EAAQ,GAAK,KAC3D,MAAMmyC,EAAUjrC,EAAQoqC,mBACX,OAATne,IACFA,EAAO4a,GAAiB,OAAT5c,EAAgBgf,EAAMxrC,IAAMwrC,EAAMzrC,MAAQysB,EAAO4c,IAErD,OAAT5c,IACFA,EAAO4c,EAAOA,EAAO5a,GAEvB,MAAMzuB,EAAQqpC,GAAQA,EAAO5tC,KAAKsK,IAAI0oB,EAAMhC,IAAS,EAAIghB,EAEzD,MAAO,CACLC,MAFWjyC,KAAKkK,IAAI8mB,EAAOgC,GAAQ,EAAIgf,EAEzBd,EACdp0B,MAAO/V,EAAQqqC,cACf7sC,QAEJ,CA2UU2tC,CAA0BryC,EAAOmwC,EAAOjpC,EAASmqC,GA9W3D,SAAkCrxC,EAAOmwC,EAAOjpC,EAASmqC,GACvD,MAAMiB,EAAYprC,EAAQgqC,aAC1B,IAAIzoC,EAAMwU,EAQV,OAPIlY,EAAcutC,IAChB7pC,EAAO0nC,EAAM1lC,IAAMvD,EAAQoqC,mBAC3Br0B,EAAQ/V,EAAQqqC,gBAEhB9oC,EAAO6pC,EAAYjB,EACnBp0B,EAAQ,GAEH,CACLm1B,MAAO3pC,EAAO4oC,EACdp0B,QACAvY,MAAOyrC,EAAMc,OAAOjxC,GAAUyI,EAAO,EAEzC,CAgWU8pC,CAAyBvyC,EAAOmwC,EAAOjpC,EAASmqC,GAC9CmB,EAAa30B,KAAKmzB,eAAenzB,KAAK7d,MAAO6d,KAAK2lB,YAAYnB,MAAO2P,EAAWhyC,OAAQ3B,GAC9FsyC,EAASnnC,EAAM9E,MAAS8E,EAAM4oC,MAAQI,EAAehpC,EAAM4oC,MAAQ,EACnE3pC,EAAOtI,KAAKsK,IAAIwnC,EAAiBzoC,EAAM4oC,MAAQ5oC,EAAMyT,MACvD,MACE0zB,EAAStuB,EAAM6rB,iBAAiBrwB,KAAKorB,UAAUjpC,GAAOqiB,EAAMuhB,MAAO5jC,GACnEyI,EAAOtI,KAAKsK,IAAIwnC,EAAiB9B,EAAM1lC,IAAM0lC,EAAMlzB,OAErD,MAAO,CACLwqB,KAAMkJ,EAASloC,EAAO,EACtB8nC,KAAMI,EAASloC,EAAO,EACtBkoC,SACAloC,OAEJ,CACA,IAAA40B,GACE,MAAMqF,EAAO7kB,KAAK2lB,YACZN,EAASR,EAAKQ,OACduP,EAAQ/P,EAAK3jC,KACbsH,EAAOosC,EAAMlzC,OACnB,IAAIwG,EAAI,EACR,KAAOA,EAAIM,IAAQN,EACsB,OAAnC8X,KAAKorB,UAAUljC,GAAGm9B,EAAOU,OAC3B6O,EAAM1sC,GAAGs3B,KAAKxf,KAAK+mB,KAGzB,EAEFgL,GAAc9qC,GAAK,MACnB8qC,GAAcvvB,SAAW,CACvBsnB,oBAAoB,EACpBuD,gBAAiB,MACjBoG,mBAAoB,GACpBC,cAAe,GACfT,SAAS,EACTlQ,WAAY,CACVH,QAAS,CACP5iC,KAAM,SACN2iC,WAAY,CAAC,IAAK,IAAK,OAAQ,QAAS,aAI9CoP,GAAchwB,UAAY,CACxB0C,OAAQ,CACNowB,QAAS,CACP70C,KAAM,WACN80C,QAAQ,EACRC,KAAM,CACJD,QAAQ,IAGZE,QAAS,CACPh1C,KAAM,SACNi1C,aAAa,KAKnB,MAAM,WAAyBnO,GAC7B,UAAAc,GACE5nB,KAAKynB,qBAAsB,EAC3ByK,MAAMtK,YACR,CACA,kBAAAiD,CAAmBhG,EAAM3jC,EAAM2F,EAAOq1B,GACpC,MAAMwJ,EAASwM,MAAMrH,mBAAmBhG,EAAM3jC,EAAM2F,EAAOq1B,GAC3D,IAAK,IAAIh0B,EAAI,EAAGA,EAAIw9B,EAAOhkC,OAAQwG,IACjCw9B,EAAOx9B,GAAG4oC,QAAU9wB,KAAK+sB,0BAA0B7kC,EAAIrB,GAAOmhB,OAEhE,OAAO0d,CACT,CACA,cAAAiF,CAAe9F,EAAM3jC,EAAM2F,EAAOq1B,GAChC,MAAMwJ,EAASwM,MAAMvH,eAAe9F,EAAM3jC,EAAM2F,EAAOq1B,GACvD,IAAK,IAAIh0B,EAAI,EAAGA,EAAIw9B,EAAOhkC,OAAQwG,IAAK,CACtC,MAAM2C,EAAO3J,EAAK2F,EAAQqB,GAC1Bw9B,EAAOx9B,GAAG4oC,QAAUnpC,EAAekD,EAAK,GAAImV,KAAK+sB,0BAA0B7kC,EAAIrB,GAAOmhB,OACxF,CACA,OAAO0d,CACT,CACA,eAAAkF,CAAgB/F,EAAM3jC,EAAM2F,EAAOq1B,GACjC,MAAMwJ,EAASwM,MAAMtH,gBAAgB/F,EAAM3jC,EAAM2F,EAAOq1B,GACxD,IAAK,IAAIh0B,EAAI,EAAGA,EAAIw9B,EAAOhkC,OAAQwG,IAAK,CACtC,MAAM2C,EAAO3J,EAAK2F,EAAQqB,GAC1Bw9B,EAAOx9B,GAAG4oC,QAAUnpC,EAAekD,GAAQA,EAAKsH,IAAMtH,EAAKsH,EAAG6N,KAAK+sB,0BAA0B7kC,EAAIrB,GAAOmhB,OAC1G,CACA,OAAO0d,CACT,CACA,cAAA4G,GACE,MAAMprC,EAAO8e,KAAK2lB,YAAYzkC,KAC9B,IAAI2L,EAAM,EACV,IAAK,IAAI3E,EAAIhH,EAAKQ,OAAS,EAAGwG,GAAK,IAAKA,EACtC2E,EAAMvK,KAAKuK,IAAIA,EAAK3L,EAAKgH,GAAG0C,KAAKoV,KAAK+sB,0BAA0B7kC,IAAM,GAExE,OAAO2E,EAAM,GAAKA,CACpB,CACA,gBAAA0/B,CAAiBpqC,GACf,MAAM0iC,EAAO7kB,KAAK2lB,aACZ,OAACmD,EAAM,OAAEE,GAAUnE,EACnBa,EAAS1lB,KAAKorB,UAAUjpC,GACxBkK,EAAIy8B,EAAO0D,iBAAiB9G,EAAOr5B,GACnCC,EAAI08B,EAAOwD,iBAAiB9G,EAAOp5B,GACnC6F,EAAIuzB,EAAOoL,QACjB,MAAO,CACL3wC,MAAO0kC,EAAK1kC,MACZD,MAAO,IAAMmM,EAAI,KAAOC,GAAK6F,EAAI,KAAOA,EAAI,IAAM,IAEtD,CACA,MAAA6vB,CAAOhe,GACL,MAAM8O,EAAS9S,KAAK2lB,YAAYzkC,KAChC8e,KAAKgvB,eAAelc,EAAQ,EAAGA,EAAOpxB,OAAQsiB,EAChD,CACA,cAAAgrB,CAAelc,EAAQjsB,EAAOq1B,EAAOlY,GACnC,MAAMqlB,EAAiB,UAATrlB,GACR,OAAC6hB,EAAM,OAAER,GAAUrlB,KAAK2lB,YACxB6M,EAAYxyB,KAAK+sB,0BAA0BlmC,EAAOmd,GAClDgqB,EAAgBhuB,KAAK8tB,iBAAiB0E,GACtCzE,EAAiB/tB,KAAK+tB,eAAe/pB,EAAMgqB,GAC3ClI,EAAQD,EAAOE,KACfC,EAAQX,EAAOU,KACrB,IAAK,IAAI79B,EAAIrB,EAAOqB,EAAIrB,EAAQq1B,EAAOh0B,IAAK,CAC1C,MAAM6gB,EAAQ+J,EAAO5qB,GACfw9B,GAAU2D,GAASrpB,KAAKorB,UAAUljC,GAClCy6B,EAAa,CAAC,EACd/N,EAAS+N,EAAWmD,GAASuD,EAAQxD,EAAOqP,mBAAmB,IAAOrP,EAAOwK,iBAAiB3K,EAAOI,IACrGjR,EAAS8N,EAAWqD,GAASqD,EAAQhE,EAAO+M,eAAiB/M,EAAOgL,iBAAiB3K,EAAOM,IAClGrD,EAAW5P,KAAO3mB,MAAMwoB,IAAWxoB,MAAMyoB,GACrCkZ,IACFpL,EAAWt5B,QAAU2W,KAAK+sB,0BAA0B7kC,EAAG6gB,EAAMgZ,OAAS,SAAW/d,GAC7EqlB,IACF1G,EAAWt5B,QAAQ2e,OAAS,IAGhChI,KAAKkuB,cAAcnlB,EAAO7gB,EAAGy6B,EAAY3e,EAC3C,CACAhE,KAAKmuB,oBAAoBH,EAAehqB,EAAMwuB,EAChD,CACA,yBAAAzF,CAA0B5qC,EAAO6hB,GAC/B,MAAM0hB,EAAS1lB,KAAKorB,UAAUjpC,GAC9B,IAAIogB,EAAS2vB,MAAMnF,0BAA0B5qC,EAAO6hB,GAChDzB,EAAOmhB,UACTnhB,EAAS/gB,OAAOge,OAAO,CAAC,EAAG+C,EAAQ,CAACmhB,SAAS,KAE/C,MAAM1b,EAASzF,EAAOyF,OAKtB,MAJa,WAAThE,IACFzB,EAAOyF,OAAS,GAElBzF,EAAOyF,QAAUrgB,EAAe+9B,GAAUA,EAAOoL,QAAS9oB,GACnDzF,CACT,EAEF,GAAiBtb,GAAK,SACtB,GAAiBub,SAAW,CAC1BsnB,oBAAoB,EACpBuD,gBAAiB,QACjBtK,WAAY,CACVH,QAAS,CACP5iC,KAAM,SACN2iC,WAAY,CAAC,IAAK,IAAK,cAAe,aAI5C,GAAiB5gB,UAAY,CAC3B0C,OAAQ,CACNpY,EAAG,CACDrM,KAAM,UAERsM,EAAG,CACDtM,KAAM,WAGVskB,QAAS,CACP6wB,QAAS,CACPtW,UAAW,CACTn7B,MAAK,IACI,OAgCjB,MAAM,WAA2BojC,GAC/B,WAAAhnB,CAAYkD,EAAOra,GACjBupC,MAAMlvB,EAAOra,GACbqX,KAAKynB,qBAAsB,EAC3BznB,KAAKo1B,iBAAc50C,EACnBwf,KAAKq1B,iBAAc70C,EACnBwf,KAAKqX,aAAU72B,EACfwf,KAAKsX,aAAU92B,CACjB,CACA,UAAAqnC,GAAc,CACd,KAAA2C,CAAM3jC,EAAOq1B,GACX,MAAMh7B,EAAO8e,KAAKkoB,aAAahnC,KACzB2jC,EAAO7kB,KAAK2lB,YAClB,IAAsB,IAAlB3lB,KAAKmnB,SACPtC,EAAK4B,QAAUvlC,MACV,CACL,IAKIgH,EAAGM,EALH8sC,EAAUptC,IAAOhH,EAAKgH,GAC1B,GAAIb,EAASnG,EAAK2F,IAAS,CACzB,MAAM,IAACzE,EAAM,SAAW4d,KAAKmnB,SAC7BmO,EAAUptC,IAAO8B,EAAiB9I,EAAKgH,GAAI9F,EAC7C,CAEA,IAAK8F,EAAIrB,EAAO2B,EAAO3B,EAAQq1B,EAAOh0B,EAAIM,IAAQN,EAChD28B,EAAK4B,QAAQv+B,GAAKotC,EAAOptC,EAE7B,CACF,CACA,YAAAqtC,GACE,OAAOzoC,GAAUkT,KAAK3W,QAAQ0e,SAAW,GAC3C,CACA,iBAAAytB,GACE,OAAO1oC,GAAUkT,KAAK3W,QAAQosC,cAChC,CACA,mBAAAC,GACE,IAAI9oC,EAAM5B,EACN6B,GAAO7B,EACX,IAAK,IAAI9C,EAAI,EAAGA,EAAI8X,KAAKgD,MAAM9hB,KAAK2hB,SAASnhB,SAAUwG,EACrD,GAAI8X,KAAKgD,MAAM2yB,iBAAiBztC,GAAI,CAClC,MAAMu9B,EAAazlB,KAAKgD,MAAMkmB,eAAehhC,GAAGu9B,WAC1C1d,EAAW0d,EAAW8P,eACtBE,EAAgBhQ,EAAW+P,oBACjC5oC,EAAMtK,KAAKsK,IAAIA,EAAKmb,GACpBlb,EAAMvK,KAAKuK,IAAIA,EAAKkb,EAAW0tB,EACjC,CAEF,MAAO,CACL1tB,SAAUnb,EACV6oC,cAAe5oC,EAAMD,EAEzB,CACA,MAAAo1B,CAAOhe,GACL,MAAMhB,EAAQhD,KAAKgD,OACb,UAAC6pB,GAAa7pB,EACd6hB,EAAO7kB,KAAK2lB,YACZiQ,EAAO/Q,EAAK3jC,KACZ20C,EAAU71B,KAAK81B,oBAAsB91B,KAAK+1B,aAAaH,GAAQ51B,KAAK3W,QAAQwsC,QAC5EG,EAAU1zC,KAAKuK,KAAKvK,KAAKsK,IAAIigC,EAAUzmB,MAAOymB,EAAUplB,QAAUouB,GAAW,EAAG,GAChFI,EAAS3zC,KAAKsK,KD/rDF1M,EC+rDmB8f,KAAK3W,QAAQ4sC,OD/rDzBpuC,EC+rDiCmuC,ED9rD3C,iBAAV91C,GAAsBA,EAAM4H,SAAS,KAC1ClG,WAAW1B,GAAS,IAClBA,EAAQ2H,GC4rD0D,GD/rDnD,IAAC3H,EAAO2H,ECgsDzB,MAAMquC,EAAcl2B,KAAKm2B,eAAen2B,KAAK7d,QACvC,cAACszC,EAAa,SAAE1tB,GAAY/H,KAAK01B,uBACjC,OAACU,EAAM,OAAEC,EAAM,QAAEhf,EAAO,QAAEC,GArFpC,SAA2BvP,EAAU0tB,EAAeQ,GAClD,IAAIG,EAAS,EACTC,EAAS,EACThf,EAAU,EACVC,EAAU,EACd,GAAIme,EAAgBzqC,EAAK,CACvB,MAAMsrC,EAAavuB,EACbwuB,EAAWD,EAAab,EACxBe,EAASl0C,KAAK2N,IAAIqmC,GAClBG,EAASn0C,KAAK0M,IAAIsnC,GAClBI,EAAOp0C,KAAK2N,IAAIsmC,GAChBI,EAAOr0C,KAAK0M,IAAIunC,GAChBK,EAAU,CAAChpC,EAAOlD,EAAGC,IAAMyD,GAAcR,EAAO0oC,EAAYC,GAAU,GAAQ,EAAIj0C,KAAKuK,IAAInC,EAAGA,EAAIurC,EAAQtrC,EAAGA,EAAIsrC,GACjHY,EAAU,CAACjpC,EAAOlD,EAAGC,IAAMyD,GAAcR,EAAO0oC,EAAYC,GAAU,IAAS,EAAIj0C,KAAKsK,IAAIlC,EAAGA,EAAIurC,EAAQtrC,EAAGA,EAAIsrC,GAClHa,EAAOF,EAAQ,EAAGJ,EAAQE,GAC1BK,EAAOH,EAAQvrC,EAASorC,EAAQE,GAChCK,EAAOH,EAAQ9rC,EAAIyrC,EAAQE,GAC3BO,EAAOJ,EAAQ9rC,EAAKM,EAASorC,EAAQE,GAC3CP,GAAUU,EAAOE,GAAQ,EACzBX,GAAUU,EAAOE,GAAQ,EACzB5f,IAAYyf,EAAOE,GAAQ,EAC3B1f,IAAYyf,EAAOE,GAAQ,CAC7B,CACA,MAAO,CAACb,SAAQC,SAAQhf,UAASC,UACnC,CA6D+C4f,CAAkBnvB,EAAU0tB,EAAeQ,GAChF/qB,GAAY2hB,EAAUzmB,MAAQyvB,GAAWO,EACzCje,GAAa0U,EAAUplB,OAASouB,GAAWQ,EAC3Cc,EAAY70C,KAAKuK,IAAIvK,KAAKsK,IAAIse,EAAUiN,GAAa,EAAG,GACxDkd,EAAcztC,EAAYoY,KAAK3W,QAAQ2e,OAAQmvB,GAE/CC,GAAgB/B,EADF/yC,KAAKuK,IAAIwoC,EAAcY,EAAQ,IACAj2B,KAAKq3B,gCACxDr3B,KAAKqX,QAAUA,EAAUge,EACzBr1B,KAAKsX,QAAUA,EAAU+d,EACzBxQ,EAAKyS,MAAQt3B,KAAKu3B,iBAClBv3B,KAAKq1B,YAAcA,EAAc+B,EAAep3B,KAAKw3B,qBAAqBx3B,KAAK7d,OAC/E6d,KAAKo1B,YAAc9yC,KAAKuK,IAAImT,KAAKq1B,YAAc+B,EAAelB,EAAa,GAC3El2B,KAAKgvB,eAAe4G,EAAM,EAAGA,EAAKl0C,OAAQsiB,EAC5C,CACA,cAAAyzB,CAAevvC,EAAGmhC,GAChB,MAAMhf,EAAOrK,KAAK3W,QACZw7B,EAAO7kB,KAAK2lB,YACZ8P,EAAgBz1B,KAAKw1B,oBAC3B,OAAKnM,GAAShf,EAAK3H,UAAUg1B,gBAAmB13B,KAAKgD,MAAM+wB,kBAAkB7rC,IAA0B,OAApB28B,EAAK4B,QAAQv+B,IAAe28B,EAAK3jC,KAAKgH,GAAG0jC,OACnH,EAEF5rB,KAAK23B,uBAAuB9S,EAAK4B,QAAQv+B,GAAKutC,EAAgBzqC,EACvE,CACA,cAAAgkC,CAAe4G,EAAM/uC,EAAOq1B,EAAOlY,GACjC,MAAMqlB,EAAiB,UAATrlB,EACRhB,EAAQhD,KAAKgD,MACb6pB,EAAY7pB,EAAM6pB,UAElB+K,EADO50B,EAAM3Z,QACQqZ,UACrBm1B,GAAWhL,EAAU3jB,KAAO2jB,EAAU1jB,OAAS,EAC/C2uB,GAAWjL,EAAUzjB,IAAMyjB,EAAUxjB,QAAU,EAC/C0uB,EAAe1O,GAASuO,EAAcG,aACtC3C,EAAc2C,EAAe,EAAI/3B,KAAKo1B,YACtCC,EAAc0C,EAAe,EAAI/3B,KAAKq1B,YACtC7C,EAAYxyB,KAAK+sB,0BAA0BlmC,EAAOmd,GAClDgqB,EAAgBhuB,KAAK8tB,iBAAiB0E,GACtCzE,EAAiB/tB,KAAK+tB,eAAe/pB,EAAMgqB,GACjD,IACI9lC,EADAouC,EAAat2B,KAAKu1B,eAEtB,IAAKrtC,EAAI,EAAGA,EAAIrB,IAASqB,EACvBouC,GAAct2B,KAAKy3B,eAAevvC,EAAGmhC,GAEvC,IAAKnhC,EAAIrB,EAAOqB,EAAIrB,EAAQq1B,IAASh0B,EAAG,CACtC,MAAMutC,EAAgBz1B,KAAKy3B,eAAevvC,EAAGmhC,GACvChhB,EAAMutB,EAAK1tC,GACXy6B,EAAa,CACjBt2B,EAAGwrC,EAAU73B,KAAKqX,QAClB/qB,EAAGwrC,EAAU93B,KAAKsX,QAClBgf,aACAC,SAAUD,EAAab,EACvBA,gBACAJ,cACAD,eAEErH,IACFpL,EAAWt5B,QAAU2kC,GAAiBhuB,KAAK+sB,0BAA0B7kC,EAAGmgB,EAAI0Z,OAAS,SAAW/d,IAElGsyB,GAAcb,EACdz1B,KAAKkuB,cAAc7lB,EAAKngB,EAAGy6B,EAAY3e,EACzC,CACAhE,KAAKmuB,oBAAoBH,EAAehqB,EAAMwuB,EAChD,CACA,cAAA+E,GACE,MAAM1S,EAAO7kB,KAAK2lB,YACZqS,EAAWnT,EAAK3jC,KACtB,IACIgH,EADAovC,EAAQ,EAEZ,IAAKpvC,EAAI,EAAGA,EAAI8vC,EAASt2C,OAAQwG,IAAK,CACpC,MAAMhI,EAAQ2kC,EAAK4B,QAAQv+B,GACb,OAAVhI,GAAmBkM,MAAMlM,KAAU8f,KAAKgD,MAAM+wB,kBAAkB7rC,IAAO8vC,EAAS9vC,GAAG0jC,SACrF0L,GAASh1C,KAAKkK,IAAItM,GAEtB,CACA,OAAOo3C,CACT,CACA,sBAAAK,CAAuBz3C,GACrB,MAAMo3C,EAAQt3B,KAAK2lB,YAAY2R,MAC/B,OAAIA,EAAQ,IAAMlrC,MAAMlM,GACf8K,GAAO1I,KAAKkK,IAAItM,GAASo3C,GAE3B,CACT,CACA,gBAAA/K,CAAiBpqC,GACf,MAAM0iC,EAAO7kB,KAAK2lB,YACZ3iB,EAAQhD,KAAKgD,MACb+nB,EAAS/nB,EAAM9hB,KAAK6pC,QAAU,GAC9B7qC,EAAQg6B,GAAa2K,EAAK4B,QAAQtkC,GAAQ6gB,EAAM3Z,QAAQ+wB,QAC9D,MAAO,CACLj6B,MAAO4qC,EAAO5oC,IAAU,GACxBjC,QAEJ,CACA,iBAAA41C,CAAkBF,GAChB,IAAI/oC,EAAM,EACV,MAAMmW,EAAQhD,KAAKgD,MACnB,IAAI9a,EAAGM,EAAMq8B,EAAMY,EAAYp8B,EAC/B,IAAKusC,EACH,IAAK1tC,EAAI,EAAGM,EAAOwa,EAAM9hB,KAAK2hB,SAASnhB,OAAQwG,EAAIM,IAAQN,EACzD,GAAI8a,EAAM2yB,iBAAiBztC,GAAI,CAC7B28B,EAAO7hB,EAAMkmB,eAAehhC,GAC5B0tC,EAAO/Q,EAAK3jC,KACZukC,EAAaZ,EAAKY,WAClB,KACF,CAGJ,IAAKmQ,EACH,OAAO,EAET,IAAK1tC,EAAI,EAAGM,EAAOotC,EAAKl0C,OAAQwG,EAAIM,IAAQN,EAC1CmB,EAAUo8B,EAAWsH,0BAA0B7kC,GACnB,UAAxBmB,EAAQ4uC,cACVprC,EAAMvK,KAAKuK,IAAIA,EAAKxD,EAAQuf,aAAe,EAAGvf,EAAQ6uC,kBAAoB,IAG9E,OAAOrrC,CACT,CACA,YAAAkpC,CAAaH,GACX,IAAI/oC,EAAM,EACV,IAAK,IAAI3E,EAAI,EAAGM,EAAOotC,EAAKl0C,OAAQwG,EAAIM,IAAQN,EAAG,CACjD,MAAMmB,EAAU2W,KAAK+sB,0BAA0B7kC,GAC/C2E,EAAMvK,KAAKuK,IAAIA,EAAKxD,EAAQyrC,QAAU,EAAGzrC,EAAQ8uC,aAAe,EAClE,CACA,OAAOtrC,CACT,CACA,oBAAA2qC,CAAqB7uC,GACnB,IAAIyvC,EAAmB,EACvB,IAAK,IAAIlwC,EAAI,EAAGA,EAAIS,IAAgBT,EAC9B8X,KAAKgD,MAAM2yB,iBAAiBztC,KAC9BkwC,GAAoBp4B,KAAKm2B,eAAejuC,IAG5C,OAAOkwC,CACT,CACA,cAAAjC,CAAextC,GACb,OAAOrG,KAAKuK,IAAIlF,EAAeqY,KAAKgD,MAAM9hB,KAAK2hB,SAASla,GAAc6X,OAAQ,GAAI,EACpF,CACA,6BAAA62B,GACE,OAAOr3B,KAAKw3B,qBAAqBx3B,KAAKgD,MAAM9hB,KAAK2hB,SAASnhB,SAAW,CACvE,EAEF,GAAmBuF,GAAK,WACxB,GAAmBub,SAAW,CAC5BsnB,oBAAoB,EACpBuD,gBAAiB,MACjB3qB,UAAW,CACTg1B,eAAe,EACfK,cAAc,GAEhBhV,WAAY,CACVH,QAAS,CACP5iC,KAAM,SACN2iC,WAAY,CAAC,gBAAiB,WAAY,cAAe,cAAe,aAAc,IAAK,IAAK,SAAU,cAAe,aAG7HsT,OAAQ,MACRluB,SAAU,EACV0tB,cAAe,IACfztB,OAAQ,OACR6tB,QAAS,EACT/xB,UAAW,KAEb,GAAmB9B,YAAc,CAC/B0D,YAAcV,GAAkB,YAATA,EACvBY,WAAaZ,GAAkB,YAATA,GAExB,GAAmBjD,UAAY,CAC7BkW,YAAa,EACb3T,QAAS,CACP+zB,OAAQ,CACNtN,OAAQ,CACN,cAAAuN,CAAet1B,GACb,MAAM9hB,EAAO8hB,EAAM9hB,KACnB,GAAIA,EAAK6pC,OAAOrpC,QAAUR,EAAK2hB,SAASnhB,OAAQ,CAC9C,MAAOqpC,QAAQ,WAACjjB,IAAe9E,EAAMq1B,OAAOhvC,QAC5C,OAAOnI,EAAK6pC,OAAO/lC,KAAI,CAAC7E,EAAO+H,KAC7B,MACMqb,EADOP,EAAMkmB,eAAe,GACfzD,WAAW/L,SAASxxB,GACvC,MAAO,CACLkiB,KAAMjqB,EACNwqB,UAAWpH,EAAMZ,gBACjBoI,YAAaxH,EAAMX,YACnBoI,UAAWzH,EAAMqF,YACjBd,WAAYA,EACZ8jB,QAAS5oB,EAAM+wB,kBAAkB7rC,GACjC/F,MAAO+F,EACR,GAEL,CACA,MAAO,EACT,GAEF,OAAAkc,CAAQjX,EAAGorC,EAAYF,GACrBA,EAAOr1B,MAAMw1B,qBAAqBD,EAAWp2C,OAC7Ck2C,EAAOr1B,MAAMgf,QACf,GAEFmT,QAAS,CACPtW,UAAW,CACTn7B,MAAK,IACI,GAET,KAAAvD,CAAMs4C,GACJ,IAAIC,EAAYD,EAAYt4C,MAC5B,MAAMD,EAAQ,KAAOu4C,EAAYE,eAOjC,OANIxxC,EAAQuxC,IACVA,EAAYA,EAAUryC,QACtBqyC,EAAU,IAAMx4C,GAEhBw4C,GAAax4C,EAERw4C,CACT,MAMR,MAAM,WAAuB5R,GAC3B,UAAAc,GACE5nB,KAAKynB,qBAAsB,EAC3ByK,MAAMtK,YACR,CACA,MAAA5F,CAAOhe,GACL,MAAM6gB,EAAO7kB,KAAK2lB,aACXsC,QAASxd,EAAMvpB,KAAM4xB,EAAS,GAAE,SAAE8lB,GAAY/T,EAC/CgU,EAAqB74B,KAAKgD,MAAMirB,oBACtC,IAAI,MAACpnC,EAAK,MAAEq1B,GA4FhB,SAAyC2I,EAAM/R,EAAQ+lB,GACrD,MAAMC,EAAahmB,EAAOpxB,OAC1B,IAAImF,EAAQ,EACRq1B,EAAQ4c,EACZ,GAAIjU,EAAK6F,QAAS,CAChB,MAAM,OAAC7E,EAAM,QAAEY,GAAW5B,EACpBkB,EAAOF,EAAOE,MACd,IAACn5B,EAAG,IAAEC,EAAG,WAAEo/B,EAAU,WAAEC,GAAcrG,EAAOsG,gBAC9CF,IACFplC,EAAQ8H,GAAYrM,KAAKsK,IACvBkhB,GAAa2Y,EAASZ,EAAOE,KAAMn5B,GAAKihB,GACxCgrB,EAAqBC,EAAahrB,GAAagF,EAAQiT,EAAMF,EAAOwK,iBAAiBzjC,IAAMihB,IAC7F,EAAGirB,EAAa,IAGhB5c,EADEgQ,EACMv9B,GAAYrM,KAAKuK,IACvBihB,GAAa2Y,EAASZ,EAAOE,KAAMl5B,GAAK+gB,GAAK,EAC7CirB,EAAqB,EAAI/qB,GAAagF,EAAQiT,EAAMF,EAAOwK,iBAAiBxjC,IAAM+gB,GAAK,GACzF/mB,EAAOiyC,GAAcjyC,EAEbiyC,EAAajyC,CAEzB,CACA,MAAO,CAACA,QAAOq1B,QACjB,CApHyB6c,CAAgClU,EAAM/R,EAAQ+lB,GACnE74B,KAAKunB,WAAa1gC,EAClBmZ,KAAKwnB,WAAatL,EAmHtB,SAA4B2I,GAC1B,MAAM,OAACiE,EAAM,OAAEE,EAAM,aAAEgQ,GAAgBnU,EACjCoU,EAAY,CAChBC,KAAMpQ,EAAOl8B,IACbusC,KAAMrQ,EAAOj8B,IACbusC,KAAMpQ,EAAOp8B,IACbysC,KAAMrQ,EAAOn8B,KAEf,IAAKmsC,EAEH,OADAnU,EAAKmU,aAAeC,GACb,EAET,MAAMK,EAAUN,EAAaE,OAASpQ,EAAOl8B,KAC1CosC,EAAaG,OAASrQ,EAAOj8B,KAC7BmsC,EAAaI,OAASpQ,EAAOp8B,KAC7BosC,EAAaK,OAASrQ,EAAOn8B,IAEhC,OADArL,OAAOge,OAAOw5B,EAAcC,GACrBK,CACT,CApIQC,CAAmB1U,KACrBh+B,EAAQ,EACRq1B,EAAQpJ,EAAOpxB,QAEjB+oB,EAAK2S,OAASpd,KAAKgD,MACnByH,EAAK8S,cAAgBvd,KAAK7d,MAC1BsoB,EAAK+uB,aAAeZ,EAASY,WAC7B/uB,EAAKqI,OAASA,EACd,MAAMzpB,EAAU2W,KAAK8sB,6BAA6B9oB,GAC7ChE,KAAK3W,QAAQqb,WAChBrb,EAAQuf,YAAc,GAExBvf,EAAQ+yB,QAAUpc,KAAK3W,QAAQ+yB,QAC/Bpc,KAAKkuB,cAAczjB,OAAMjqB,EAAW,CAClCi5C,UAAWZ,EACXxvC,WACC2a,GACHhE,KAAKgvB,eAAelc,EAAQjsB,EAAOq1B,EAAOlY,EAC5C,CACA,cAAAgrB,CAAelc,EAAQjsB,EAAOq1B,EAAOlY,GACnC,MAAMqlB,EAAiB,UAATrlB,GACR,OAAC6hB,EAAM,OAAER,EAAM,SAAEyC,EAAQ,SAAE8Q,GAAY54B,KAAK2lB,YAC5C6M,EAAYxyB,KAAK+sB,0BAA0BlmC,EAAOmd,GAClDgqB,EAAgBhuB,KAAK8tB,iBAAiB0E,GACtCzE,EAAiB/tB,KAAK+tB,eAAe/pB,EAAMgqB,GAC3ClI,EAAQD,EAAOE,KACfC,EAAQX,EAAOU,MACf,SAAC3Q,EAAQ,QAAEgH,GAAWpc,KAAK3W,QAC3BqwC,EAAextC,GAASkpB,GAAYA,EAAW7tB,OAAO4D,kBACtDwuC,EAAe35B,KAAKgD,MAAMirB,qBAAuB5E,GAAkB,SAATrlB,EAChE,IAAI41B,EAAa/yC,EAAQ,GAAKmZ,KAAKorB,UAAUvkC,EAAQ,GACrD,IAAK,IAAIqB,EAAIrB,EAAOqB,EAAIrB,EAAQq1B,IAASh0B,EAAG,CAC1C,MAAM6gB,EAAQ+J,EAAO5qB,GACfw9B,EAAS1lB,KAAKorB,UAAUljC,GACxBy6B,EAAagX,EAAe5wB,EAAQ,CAAC,EACrC8wB,EAAW3yC,EAAcw+B,EAAOM,IAChCpR,EAAS+N,EAAWmD,GAASD,EAAOwK,iBAAiB3K,EAAOI,GAAQ59B,GACpE2sB,EAAS8N,EAAWqD,GAASqD,GAASwQ,EAAWxU,EAAO+M,eAAiB/M,EAAOgL,iBAAiBvI,EAAW9nB,KAAKukB,WAAWc,EAAQK,EAAQoC,GAAYpC,EAAOM,GAAQ99B,GAC7Ky6B,EAAW5P,KAAO3mB,MAAMwoB,IAAWxoB,MAAMyoB,IAAWglB,EACpDlX,EAAWnC,KAAOt4B,EAAI,GAAMw9B,EAAOI,GAAS8T,EAAW9T,GAAU4T,EAC7Dtd,IACFuG,EAAW+C,OAASA,EACpB/C,EAAWsK,IAAM2L,EAAS13C,KAAKgH,IAE7B6lC,IACFpL,EAAWt5B,QAAU2kC,GAAiBhuB,KAAK+sB,0BAA0B7kC,EAAG6gB,EAAMgZ,OAAS,SAAW/d,IAE/F21B,GACH35B,KAAKkuB,cAAcnlB,EAAO7gB,EAAGy6B,EAAY3e,GAE3C41B,EAAalU,CACf,CACA1lB,KAAKmuB,oBAAoBH,EAAehqB,EAAMwuB,EAChD,CACA,cAAAlG,GACE,MAAMzH,EAAO7kB,KAAK2lB,YACZsC,EAAUpD,EAAKoD,QACf6R,EAAS7R,EAAQ5+B,SAAW4+B,EAAQ5+B,QAAQuf,aAAe,EAC3D1nB,EAAO2jC,EAAK3jC,MAAQ,GAC1B,IAAKA,EAAKQ,OACR,OAAOo4C,EAET,MAAM5mB,EAAahyB,EAAK,GAAG0J,KAAKoV,KAAK+sB,0BAA0B,IACzDgN,EAAY74C,EAAKA,EAAKQ,OAAS,GAAGkJ,KAAKoV,KAAK+sB,0BAA0B7rC,EAAKQ,OAAS,IAC1F,OAAOY,KAAKuK,IAAIitC,EAAQ5mB,EAAY6mB,GAAa,CACnD,CACA,IAAAva,GACE,MAAMqF,EAAO7kB,KAAK2lB,YAClBd,EAAKoD,QAAQ+R,oBAAoBh6B,KAAKgD,MAAM6pB,UAAWhI,EAAKgB,OAAOE,MACnEmM,MAAM1S,MACR,EAEF,GAAev4B,GAAK,OACpB,GAAeub,SAAW,CACxBsnB,mBAAoB,OACpBuD,gBAAiB,QACjB3oB,UAAU,EACV0Q,UAAU,GAEZ,GAAerT,UAAY,CACzB0C,OAAQ,CACNowB,QAAS,CACP70C,KAAM,YAERg1C,QAAS,CACPh1C,KAAM,YAiDZ,MAAM,WAA4B8mC,GAChC,WAAAhnB,CAAYkD,EAAOra,GACjBupC,MAAMlvB,EAAOra,GACbqX,KAAKo1B,iBAAc50C,EACnBwf,KAAKq1B,iBAAc70C,CACrB,CACA,gBAAA+rC,CAAiBpqC,GACf,MAAM0iC,EAAO7kB,KAAK2lB,YACZ3iB,EAAQhD,KAAKgD,MACb+nB,EAAS/nB,EAAM9hB,KAAK6pC,QAAU,GAC9B7qC,EAAQg6B,GAAa2K,EAAK4B,QAAQtkC,GAAOgQ,EAAG6Q,EAAM3Z,QAAQ+wB,QAChE,MAAO,CACLj6B,MAAO4qC,EAAO5oC,IAAU,GACxBjC,QAEJ,CACA,MAAA8hC,CAAOhe,GACL,MAAM4xB,EAAO51B,KAAK2lB,YAAYzkC,KAC9B8e,KAAKi6B,gBACLj6B,KAAKgvB,eAAe4G,EAAM,EAAGA,EAAKl0C,OAAQsiB,EAC5C,CACA,aAAAi2B,GACE,MAAMj3B,EAAQhD,KAAKgD,MACb6pB,EAAY7pB,EAAM6pB,UAClBxiB,EAAOrH,EAAM3Z,QACb6wC,EAAU53C,KAAKsK,IAAIigC,EAAU1jB,MAAQ0jB,EAAU3jB,KAAM2jB,EAAUxjB,OAASwjB,EAAUzjB,KAClFisB,EAAc/yC,KAAKuK,IAAIqtC,EAAU,EAAG,GAEpC9C,GAAgB/B,EADF/yC,KAAKuK,IAAIwd,EAAK8vB,iBAAoB9E,EAAc,IAAQhrB,EAAqB,iBAAI,EAAG,IACrDrH,EAAMo3B,yBACzDp6B,KAAKq1B,YAAcA,EAAe+B,EAAep3B,KAAK7d,MACtD6d,KAAKo1B,YAAcp1B,KAAKq1B,YAAc+B,CACxC,CACA,cAAApI,CAAe4G,EAAM/uC,EAAOq1B,EAAOlY,GACjC,MAAMqlB,EAAiB,UAATrlB,EACRhB,EAAQhD,KAAKgD,MACbilB,EAAUjoB,KAAKkoB,aAEf0P,EADO50B,EAAM3Z,QACQqZ,UACrB8B,EAAQxE,KAAK2lB,YAAYsD,OACzB4O,EAAUrzB,EAAM61B,QAChBvC,EAAUtzB,EAAM81B,QAChBC,EAAoB/1B,EAAMg2B,cAAc,GAAK,GAAMzvC,EACzD,IACI7C,EADA0F,EAAQ2sC,EAEZ,MAAME,EAAe,IAAMz6B,KAAK06B,uBAChC,IAAKxyC,EAAI,EAAGA,EAAIrB,IAASqB,EACvB0F,GAASoS,KAAK26B,cAAczyC,EAAG8b,EAAMy2B,GAEvC,IAAKvyC,EAAIrB,EAAOqB,EAAIrB,EAAQq1B,EAAOh0B,IAAK,CACtC,MAAMmgB,EAAMutB,EAAK1tC,GACjB,IAAIouC,EAAa1oC,EACb2oC,EAAW3oC,EAAQoS,KAAK26B,cAAczyC,EAAG8b,EAAMy2B,GAC/CpF,EAAcryB,EAAM+wB,kBAAkB7rC,GAAKsc,EAAMo2B,8BAA8B3S,EAAQ/mC,KAAKgH,IAAM,EACtG0F,EAAQ2oC,EACJlN,IACEuO,EAAcG,eAChB1C,EAAc,GAEZuC,EAAcF,gBAChBpB,EAAaC,EAAWgE,IAG5B,MAAM5X,EAAa,CACjBt2B,EAAGwrC,EACHvrC,EAAGwrC,EACH1C,YAAa,EACbC,cACAiB,aACAC,WACAltC,QAAS2W,KAAK+sB,0BAA0B7kC,EAAGmgB,EAAI0Z,OAAS,SAAW/d,IAErEhE,KAAKkuB,cAAc7lB,EAAKngB,EAAGy6B,EAAY3e,EACzC,CACF,CACA,oBAAA02B,GACE,MAAMzS,EAAUjoB,KAAKkoB,aACfrD,EAAO7kB,KAAK2lB,YAClB,IAAIzJ,EAAQ,EAMZ,OALA2I,EAAK3jC,KAAKgB,SAAQ,CAACo0B,EAASn0B,MACrBiK,MAAM67B,EAAQ/mC,KAAKiB,KAAW6d,KAAKgD,MAAM+wB,kBAAkB5xC,IAC9D+5B,GACF,IAEKA,CACT,CACA,aAAAye,CAAcx4C,EAAO6hB,EAAMy2B,GACzB,OAAOz6B,KAAKgD,MAAM+wB,kBAAkB5xC,GAChC2K,GAAUkT,KAAK+sB,0BAA0B5qC,EAAO6hB,GAAMpW,OAAS6sC,GAC/D,CACN,EAEF,GAAoBxzC,GAAK,YACzB,GAAoBub,SAAW,CAC7B6qB,gBAAiB,MACjB3qB,UAAW,CACTg1B,eAAe,EACfK,cAAc,GAEhBhV,WAAY,CACVH,QAAS,CACP5iC,KAAM,SACN2iC,WAAY,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,iBAGpE7e,UAAW,IACXwyB,WAAY,GAEd,GAAoBv0B,UAAY,CAC9BkW,YAAa,EACb3T,QAAS,CACP+zB,OAAQ,CACNtN,OAAQ,CACN,cAAAuN,CAAet1B,GACb,MAAM9hB,EAAO8hB,EAAM9hB,KACnB,GAAIA,EAAK6pC,OAAOrpC,QAAUR,EAAK2hB,SAASnhB,OAAQ,CAC9C,MAAOqpC,QAAQ,WAACjjB,IAAe9E,EAAMq1B,OAAOhvC,QAC5C,OAAOnI,EAAK6pC,OAAO/lC,KAAI,CAAC7E,EAAO+H,KAC7B,MACMqb,EADOP,EAAMkmB,eAAe,GACfzD,WAAW/L,SAASxxB,GACvC,MAAO,CACLkiB,KAAMjqB,EACNwqB,UAAWpH,EAAMZ,gBACjBoI,YAAaxH,EAAMX,YACnBoI,UAAWzH,EAAMqF,YACjBd,WAAYA,EACZ8jB,QAAS5oB,EAAM+wB,kBAAkB7rC,GACjC/F,MAAO+F,EACR,GAEL,CACA,MAAO,EACT,GAEF,OAAAkc,CAAQjX,EAAGorC,EAAYF,GACrBA,EAAOr1B,MAAMw1B,qBAAqBD,EAAWp2C,OAC7Ck2C,EAAOr1B,MAAMgf,QACf,GAEFmT,QAAS,CACPtW,UAAW,CACTn7B,MAAK,IACI,GAETvD,MAAM4iB,GACGA,EAAQC,MAAM9hB,KAAK6pC,OAAOhoB,EAAQiqB,WAAa,KAAOjqB,EAAQ41B,kBAK7El0B,OAAQ,CACNtS,EAAG,CACDnS,KAAM,eACN66C,WAAY,CACVC,SAAS,GAEX7F,aAAa,EACbF,KAAM,CACJgG,UAAU,GAEZC,YAAa,CACXF,SAAS,GAEXxE,WAAY,KAKlB,MAAM,WAAsB,IAE5B,GAAcrvC,GAAK,MACnB,GAAcub,SAAW,CACvByzB,OAAQ,EACRluB,SAAU,EACV0tB,cAAe,IACfztB,OAAQ,QAGV,MAAM,WAAwB8e,GAC5B,gBAAAyF,CAAiBpqC,GACf,MAAMkjC,EAASrlB,KAAK2lB,YAAYN,OAC1BK,EAAS1lB,KAAKorB,UAAUjpC,GAC9B,MAAO,CACLhC,MAAOklC,EAAO2F,YAAY7oC,GAC1BjC,MAAO,GAAKmlC,EAAOmH,iBAAiB9G,EAAOL,EAAOU,OAEtD,CACA,MAAA/D,CAAOhe,GACL,MAAM6gB,EAAO7kB,KAAK2lB,YACZlb,EAAOoa,EAAKoD,QACZnV,EAAS+R,EAAK3jC,MAAQ,GACtB6pC,EAASlG,EAAKgB,OAAOmF,YAE3B,GADAvgB,EAAKqI,OAASA,EACD,WAAT9O,EAAmB,CACrB,MAAM3a,EAAU2W,KAAK8sB,6BAA6B9oB,GAC7ChE,KAAK3W,QAAQqb,WAChBrb,EAAQuf,YAAc,GAExB,MAAM+Z,EAAa,CACjBlB,OAAO,EACPwZ,UAAWlQ,EAAOrpC,SAAWoxB,EAAOpxB,OACpC2H,WAEF2W,KAAKkuB,cAAczjB,OAAMjqB,EAAWmiC,EAAY3e,EAClD,CACAhE,KAAKgvB,eAAelc,EAAQ,EAAGA,EAAOpxB,OAAQsiB,EAChD,CACA,cAAAgrB,CAAelc,EAAQjsB,EAAOq1B,EAAOlY,GACnC,MAAMikB,EAAUjoB,KAAKkoB,aACf1jB,EAAQxE,KAAK2lB,YAAYsD,OACzBI,EAAiB,UAATrlB,EACd,IAAK,IAAI9b,EAAIrB,EAAOqB,EAAIrB,EAAQq1B,EAAOh0B,IAAK,CAC1C,MAAM6gB,EAAQ+J,EAAO5qB,GACfmB,EAAU2W,KAAK+sB,0BAA0B7kC,EAAG6gB,EAAMgZ,OAAS,SAAW/d,GACtEk3B,EAAgB12B,EAAM22B,yBAAyBjzC,EAAG+/B,EAAQ/mC,KAAKgH,IAC/DmE,EAAIg9B,EAAQ7kB,EAAM61B,QAAUa,EAAc7uC,EAC1CC,EAAI+8B,EAAQ7kB,EAAM81B,QAAUY,EAAc5uC,EAC1Cq2B,EAAa,CACjBt2B,IACAC,IACAsB,MAAOstC,EAActtC,MACrBmlB,KAAM3mB,MAAMC,IAAMD,MAAME,GACxBjD,WAEF2W,KAAKkuB,cAAcnlB,EAAO7gB,EAAGy6B,EAAY3e,EAC3C,CACF,EAEF,GAAgB/c,GAAK,QACrB,GAAgBub,SAAW,CACzBsnB,mBAAoB,OACpBuD,gBAAiB,QACjBvpB,UAAW,IACXY,UAAU,EACVvB,SAAU,CACRsH,KAAM,CACJ9B,KAAM,WAIZ,GAAgB5G,UAAY,CAC1BkW,YAAa,EACbxT,OAAQ,CACNtS,EAAG,CACDnS,KAAM,kBAKZ,MAAM,WAA0B,IAEhC,GAAkBiH,GAAK,UACvB,GAAkBub,SAAW,CAC3BkC,UAAU,EACViE,MAAM,GAER,GAAkB5G,UAAY,CAC5BgC,YAAa,CACXC,KAAM,SAERM,QAAS,CACP6wB,QAAS,CACPtW,UAAW,CACTn7B,MAAK,IACI,GAETvD,MAAM0K,GACG,IAAMA,EAAK1K,MAAQ,KAAO0K,EAAK8tC,eAAiB,OAK/Dl0B,OAAQ,CACNpY,EAAG,CACDrM,KAAM,UAERsM,EAAG,CACDtM,KAAM,YAiBZ,SAAS,KACP,MAAM,IAAImxB,MAAM,kFAClB,CACA,MAAMiqB,GACJ,WAAAt7B,CAAYzW,GACV2W,KAAK3W,QAAUA,GAAW,CAAC,CAC7B,CACA,OAAAgyC,GACE,OAAO,IACT,CACA,KAAA7Q,CAAMtqC,EAAO06B,GACX,OAAO,IACT,CACA,MAAAA,CAAO0gB,EAAW1gB,GAChB,OAAO,IACT,CACA,GAAAnM,CAAI6sB,EAAWl6C,EAAQm6C,GACrB,OAAO,IACT,CACA,IAAAC,CAAK9wC,EAAGC,EAAG4wC,GACT,OAAO,IACT,CACA,OAAAE,CAAQH,EAAWC,EAAMG,GACvB,OAAO,IACT,CACA,KAAAC,CAAML,EAAWC,GACf,OAAO,IACT,EAEFH,GAAYt2B,SAAW,SAAS82B,GAC9Bp6C,OAAOge,OAAO47B,GAAYh1C,UAAWw1C,EACvC,EACA,IAAIC,GAAW,CACbC,MAAOV,IAGT,SAAS,GAAoBjuC,EAAG6V,GAC9B,MAAI,WAAY7V,EACP,CACLd,EAAGc,EAAEd,EACLC,EAAGa,EAAEb,GAGFsqB,GAAsBzpB,EAAG6V,EAClC,CAcA,SAAS+4B,GAAaC,EAASjW,EAAM7lC,EAAO+jB,GAC1C,MAAM,WAACwhB,EAAU,KAAEvkC,EAAI,QAAEwpC,GAAWsR,EAC9BnW,EAASJ,EAAWE,YAAYE,OACtC,GAAIA,GAAUE,IAASF,EAAOE,MAAiB,MAATA,GAAgB2E,GAAWxpC,EAAKQ,OAAQ,CAC5E,MAAMu6C,EAAepW,EAAOqW,eAAiBnuB,GAAgBD,GAC7D,IAAK7J,EACH,OAAOg4B,EAAa/6C,EAAM6kC,EAAM7lC,GAC3B,GAAIulC,EAAW6B,eAAgB,CACpC,MAAM9N,EAAKt4B,EAAK,GACVyK,EAA+B,mBAAhB6tB,EAAG2iB,UAA2B3iB,EAAG2iB,SAASpW,GAC/D,GAAIp6B,EAAO,CACT,MAAM9E,EAAQo1C,EAAa/6C,EAAM6kC,EAAM7lC,EAAQyL,GACzC7E,EAAMm1C,EAAa/6C,EAAM6kC,EAAM7lC,EAAQyL,GAC7C,MAAO,CAACkiB,GAAIhnB,EAAMgnB,GAAID,GAAI9mB,EAAI8mB,GAChC,CACF,CACF,CACA,MAAO,CAACC,GAAI,EAAGD,GAAI1sB,EAAKQ,OAAS,EACnC,CACA,SAAS06C,GAAuBp5B,EAAO+iB,EAAMsW,EAAUC,EAASr4B,GAC9D,MAAMogB,EAAWrhB,EAAMu5B,+BACjBr8C,EAAQm8C,EAAStW,GACvB,IAAK,IAAI79B,EAAI,EAAGM,EAAO67B,EAAS3iC,OAAQwG,EAAIM,IAAQN,EAAG,CACrD,MAAM,MAAC/F,EAAK,KAAEjB,GAAQmjC,EAASn8B,IACzB,GAAC2lB,EAAE,GAAED,GAAMmuB,GAAa1X,EAASn8B,GAAI69B,EAAM7lC,EAAO+jB,GACxD,IAAK,IAAIrF,EAAIiP,EAAIjP,GAAKgP,IAAMhP,EAAG,CAC7B,MAAM0X,EAAUp1B,EAAK0d,GAChB0X,EAAQvD,MACXupB,EAAQhmB,EAASn0B,EAAOyc,EAE5B,CACF,CACF,CAUA,SAAS49B,GAAkBx5B,EAAOq5B,EAAUtW,EAAM0W,GAChD,MAAMluB,EAAQ,GACd,IAAKzF,GAAeuzB,EAAUr5B,EAAM6pB,UAAW7pB,EAAM05B,aACnD,OAAOnuB,EAQT,OADA6tB,GAAuBp5B,EAAO+iB,EAAMsW,GALb,SAAS/lB,EAAS3tB,EAAcxG,GACjDm0B,EAAQqmB,QAAQN,EAAShwC,EAAGgwC,EAAS/vC,EAAGmwC,IAC1CluB,EAAM/rB,KAAK,CAAC8zB,UAAS3tB,eAAcxG,SAEvC,IAC8D,GACvDosB,CACT,CAaA,SAASquB,GAAyB55B,EAAOq5B,EAAUtW,EAAM9hB,EAAWw4B,GAClE,IAAIluB,EAAQ,GACZ,MAAMsuB,EApCR,SAAkC9W,GAChC,MAAM+W,GAA8B,IAAvB/W,EAAK58B,QAAQ,KACpB4zC,GAA8B,IAAvBhX,EAAK58B,QAAQ,KAC1B,OAAO,SAAS6E,EAAKC,GACnB,MAAM+uC,EAASF,EAAOx6C,KAAKkK,IAAIwB,EAAI3B,EAAI4B,EAAI5B,GAAK,EAC1C4wC,EAASF,EAAOz6C,KAAKkK,IAAIwB,EAAI1B,EAAI2B,EAAI3B,GAAK,EAChD,OAAOhK,KAAKqL,KAAKrL,KAAK0J,IAAIgxC,EAAQ,GAAK16C,KAAK0J,IAAIixC,EAAQ,GAC1D,CACF,CA4ByBC,CAAyBnX,GAChD,IAAIoX,EAAc51C,OAAO4D,kBAoBzB,OADAixC,GAAuBp5B,EAAO+iB,EAAMsW,GAlBpC,SAAwB/lB,EAAS3tB,EAAcxG,GAC7C,MAAMw6C,EAAUrmB,EAAQqmB,QAAQN,EAAShwC,EAAGgwC,EAAS/vC,EAAGmwC,GACxD,GAAIx4B,IAAc04B,EAChB,OAEF,MAAM7J,EAASxc,EAAQ8mB,eAAeX,GAEtC,IADoB3zB,GAAegqB,EAAQ9vB,EAAM6pB,UAAW7pB,EAAM05B,eAC7CC,EACnB,OAEF,MAAM7uC,EAAW+uC,EAAeR,EAAUvJ,GACtChlC,EAAWqvC,GACb5uB,EAAQ,CAAC,CAAC+H,UAAS3tB,eAAcxG,UACjCg7C,EAAcrvC,GACLA,IAAaqvC,GACtB5uB,EAAM/rB,KAAK,CAAC8zB,UAAS3tB,eAAcxG,SAEvC,IAEOosB,CACT,CACA,SAAS8uB,GAAgBr6B,EAAOq5B,EAAUtW,EAAM9hB,EAAWw4B,GACzD,OAAK3zB,GAAeuzB,EAAUr5B,EAAM6pB,UAAW7pB,EAAM05B,aAGrC,MAAT3W,GAAiB9hB,EAEpB24B,GAAyB55B,EAAOq5B,EAAUtW,EAAM9hB,EAAWw4B,GA3CjE,SAA+Bz5B,EAAOq5B,EAAUtW,EAAM0W,GACpD,IAAIluB,EAAQ,GASZ,OADA6tB,GAAuBp5B,EAAO+iB,EAAMsW,GAPpC,SAAwB/lB,EAAS3tB,EAAcxG,GAC7C,MAAM,WAACm0C,EAAU,SAAEC,GAAYjgB,EAAQgnB,SAAS,CAAC,aAAc,YAAab,IACtE,MAAC7uC,GAASP,GAAkBipB,EAAS,CAACjqB,EAAGgwC,EAAShwC,EAAGC,EAAG+vC,EAAS/vC,IACnE8B,GAAcR,EAAO0oC,EAAYC,IACnChoB,EAAM/rB,KAAK,CAAC8zB,UAAS3tB,eAAcxG,SAEvC,IAEOosB,CACT,CA+BMgvB,CAAsBv6B,EAAOq5B,EAAUtW,EAAM0W,GAHxC,EAKX,CACA,SAASe,GAAax6B,EAAO7V,EAAG9D,EAASozC,GACvC,MAAMJ,EAAW,GAAoBlvC,EAAG6V,GAClCuL,EAAQ,GACRwX,EAAO18B,EAAQ08B,KACf0X,EAAuB,MAAT1X,EAAe,WAAa,WAChD,IAAI2X,GAAiB,EASrB,OA/HF,SAAiC16B,EAAOs5B,GACtC,MAAMjY,EAAWrhB,EAAMu5B,+BACvB,IAAIp6C,EAAOjB,EAAMo1B,EACjB,IAAK,IAAIpuB,EAAI,EAAGM,EAAO67B,EAAS3iC,OAAQwG,EAAIM,IAAQN,EAAG,GACnD/F,QAAOjB,QAAQmjC,EAASn8B,IAC1B,IAAK,IAAI0W,EAAI,EAAG8H,EAAOxlB,EAAKQ,OAAQkd,EAAI8H,IAAQ9H,EAC9C0X,EAAUp1B,EAAK0d,GACV0X,EAAQvD,MACXupB,EAAQhmB,EAASn0B,EAAOyc,EAG9B,CACF,CA2GE++B,CAAwB36B,GAAO,CAACsT,EAAS3tB,EAAcxG,KACjDm0B,EAAQmnB,GAAapB,EAAStW,GAAO0W,IACvCluB,EAAM/rB,KAAK,CAAC8zB,UAAS3tB,eAAcxG,UAEjCm0B,EAAQqmB,QAAQN,EAAShwC,EAAGgwC,EAAS/vC,EAAGmwC,KAC1CiB,GAAiB,EACnB,IAEEr0C,EAAQ4a,YAAcy5B,EACjB,GAEFnvB,CACT,CACA,IAAIqvB,GAAc,CAChBC,MAAO,CACL,KAAA17C,CAAM6gB,EAAO7V,EAAG9D,EAASozC,GACvB,MAAMJ,EAAW,GAAoBlvC,EAAG6V,GAClC+iB,EAAO18B,EAAQ08B,MAAQ,IACvBxX,EAAQllB,EAAQ4a,UAClBu4B,GAAkBx5B,EAAOq5B,EAAUtW,EAAM0W,GACzCY,GAAgBr6B,EAAOq5B,EAAUtW,GAAM,EAAO0W,GAC5Ct5B,EAAW,GACjB,OAAKoL,EAAM7sB,QAGXshB,EAAMu5B,+BAA+Br6C,SAAS2iC,IAC5C,MAAM1iC,EAAQosB,EAAM,GAAGpsB,MACjBm0B,EAAUuO,EAAK3jC,KAAKiB,GACtBm0B,IAAYA,EAAQvD,MACtB5P,EAAS3gB,KAAK,CAAC8zB,UAAS3tB,aAAck8B,EAAK1iC,MAAOA,SACpD,IAEKghB,GATE,EAUX,EACA,OAAA8kB,CAAQjlB,EAAO7V,EAAG9D,EAASozC,GACzB,MAAMJ,EAAW,GAAoBlvC,EAAG6V,GAClC+iB,EAAO18B,EAAQ08B,MAAQ,KAC7B,IAAIxX,EAAQllB,EAAQ4a,UAChBu4B,GAAkBx5B,EAAOq5B,EAAUtW,EAAM0W,GAC3CY,GAAgBr6B,EAAOq5B,EAAUtW,GAAM,EAAO0W,GAChD,GAAIluB,EAAM7sB,OAAS,EAAG,CACpB,MAAMiH,EAAe4lB,EAAM,GAAG5lB,aACxBzH,EAAO8hB,EAAMkmB,eAAevgC,GAAczH,KAChDqtB,EAAQ,GACR,IAAK,IAAIrmB,EAAI,EAAGA,EAAIhH,EAAKQ,SAAUwG,EACjCqmB,EAAM/rB,KAAK,CAAC8zB,QAASp1B,EAAKgH,GAAIS,eAAcxG,MAAO+F,GAEvD,CACA,OAAOqmB,CACT,EACAxF,MAAK,CAAC/F,EAAO7V,EAAG9D,EAASozC,IAGhBD,GAAkBx5B,EAFR,GAAoB7V,EAAG6V,GAC3B3Z,EAAQ08B,MAAQ,KACmB0W,GAElDqB,QAAO,CAAC96B,EAAO7V,EAAG9D,EAASozC,IAGlBY,GAAgBr6B,EAFN,GAAoB7V,EAAG6V,GAC3B3Z,EAAQ08B,MAAQ,KACiB18B,EAAQ4a,UAAWw4B,GAEnEpwC,EAAC,CAAC2W,EAAO7V,EAAG9D,EAASozC,IACZe,GAAax6B,EAAO7V,EAAG,CAAC44B,KAAM,IAAK9hB,UAAW5a,EAAQ4a,WAAYw4B,GAE3EnwC,EAAC,CAAC0W,EAAO7V,EAAG9D,EAASozC,IACZe,GAAax6B,EAAO7V,EAAG,CAAC44B,KAAM,IAAK9hB,UAAW5a,EAAQ4a,WAAYw4B,KAK/E,MAAMsB,GAAmB,CAAC,OAAQ,MAAO,QAAS,UAClD,SAASC,GAAiBtxC,EAAO2vC,GAC/B,OAAO3vC,EAAM+kB,QAAOvf,GAAKA,EAAEhI,MAAQmyC,GACrC,CACA,SAAS4B,GAA4BvxC,EAAOq5B,GAC1C,OAAOr5B,EAAM+kB,QAAOvf,IAA0C,IAArC6rC,GAAiB50C,QAAQ+I,EAAEhI,MAAegI,EAAEglB,IAAI6O,OAASA,GACpF,CACA,SAASmY,GAAaxxC,EAAOzE,GAC3B,OAAOyE,EAAMsjC,MAAK,CAACtlC,EAAGC,KACpB,MAAMlC,EAAKR,EAAU0C,EAAID,EACnBhC,EAAKT,EAAUyC,EAAIC,EACzB,OAAOlC,EAAG+X,SAAW9X,EAAG8X,OACtB/X,EAAGtG,MAAQuG,EAAGvG,MACdsG,EAAG+X,OAAS9X,EAAG8X,MAAM,GAE3B,CAgCA,SAAS29B,GAAcC,EAASC,GAC9B,MAAMrZ,EAdR,SAAqBoZ,GACnB,MAAMpZ,EAAS,CAAC,EAChB,IAAK,MAAMsZ,KAAQF,EAAS,CAC1B,MAAM,MAAC5Z,EAAK,IAAEt6B,EAAG,YAAEq0C,GAAeD,EAClC,IAAK9Z,IAAUuZ,GAAiB1tB,SAASnmB,GACvC,SAEF,MAAM6mB,EAASiU,EAAOR,KAAWQ,EAAOR,GAAS,CAACtI,MAAO,EAAGsiB,OAAQ,EAAGh+B,OAAQ,EAAG5V,KAAM,IACxFmmB,EAAOmL,QACPnL,EAAOvQ,QAAU+9B,CACnB,CACA,OAAOvZ,CACT,CAEiByZ,CAAYL,IACrB,aAACM,EAAY,cAAEC,GAAiBN,EACtC,IAAIn2C,EAAGM,EAAMo2C,EACb,IAAK12C,EAAI,EAAGM,EAAO41C,EAAQ18C,OAAQwG,EAAIM,IAAQN,EAAG,CAChD02C,EAASR,EAAQl2C,GACjB,MAAM,SAAC22C,GAAYD,EAAO1nB,IACpBsN,EAAQQ,EAAO4Z,EAAOpa,OACtB1D,EAAS0D,GAASoa,EAAOL,YAAc/Z,EAAMhkB,OAC/Co+B,EAAOtN,YACTsN,EAAOx4B,MAAQ0a,EAASA,EAAS4d,EAAeG,GAAYR,EAAOS,eACnEF,EAAOn3B,OAASk3B,IAEhBC,EAAOx4B,MAAQs4B,EACfE,EAAOn3B,OAASqZ,EAASA,EAAS6d,EAAgBE,GAAYR,EAAOU,gBAEzE,CACA,OAAO/Z,CACT,CAmBA,SAASga,GAAeC,EAAYpS,EAAWniC,EAAGC,GAChD,OAAOrI,KAAKuK,IAAIoyC,EAAWv0C,GAAImiC,EAAUniC,IAAMpI,KAAKuK,IAAIoyC,EAAWt0C,GAAIkiC,EAAUliC,GACnF,CACA,SAASu0C,GAAiBD,EAAYE,GACpCF,EAAW71B,IAAM9mB,KAAKuK,IAAIoyC,EAAW71B,IAAK+1B,EAAW/1B,KACrD61B,EAAW/1B,KAAO5mB,KAAKuK,IAAIoyC,EAAW/1B,KAAMi2B,EAAWj2B,MACvD+1B,EAAW51B,OAAS/mB,KAAKuK,IAAIoyC,EAAW51B,OAAQ81B,EAAW91B,QAC3D41B,EAAW91B,MAAQ7mB,KAAKuK,IAAIoyC,EAAW91B,MAAOg2B,EAAWh2B,MAC3D,CACA,SAASi2B,GAAWvS,EAAWwR,EAAQO,EAAQ5Z,GAC7C,MAAM,IAAC96B,EAAG,IAAEgtB,GAAO0nB,EACbK,EAAapS,EAAUoS,WAC7B,IAAK53C,EAAS6C,GAAM,CACd00C,EAAOh0C,OACTiiC,EAAU3iC,IAAQ00C,EAAOh0C,MAE3B,MAAM45B,EAAQQ,EAAO4Z,EAAOpa,QAAU,CAAC55B,KAAM,EAAGsxB,MAAO,GACvDsI,EAAM55B,KAAOtI,KAAKuK,IAAI23B,EAAM55B,KAAMg0C,EAAOtN,WAAapa,EAAIzP,OAASyP,EAAI9Q,OACvEw4B,EAAOh0C,KAAO45B,EAAM55B,KAAO45B,EAAMtI,MACjC2Q,EAAU3iC,IAAQ00C,EAAOh0C,IAC3B,CACIssB,EAAImoB,YACNH,GAAiBD,EAAY/nB,EAAImoB,cAEnC,MAAMC,EAAWh9C,KAAKuK,IAAI,EAAGwxC,EAAOkB,WAAaP,GAAeC,EAAYpS,EAAW,OAAQ,UACzF2S,EAAYl9C,KAAKuK,IAAI,EAAGwxC,EAAOoB,YAAcT,GAAeC,EAAYpS,EAAW,MAAO,WAC1F6S,EAAeJ,IAAazS,EAAU35B,EACtCysC,EAAgBH,IAAc3S,EAAUr6B,EAG9C,OAFAq6B,EAAU35B,EAAIosC,EACdzS,EAAUr6B,EAAIgtC,EACPZ,EAAOtN,WACV,CAACsO,KAAMF,EAAcG,MAAOF,GAC5B,CAACC,KAAMD,EAAeE,MAAOH,EACnC,CAaA,SAASI,GAAWxO,EAAYzE,GAC9B,MAAMoS,EAAapS,EAAUoS,WAC7B,SAASc,EAAmBxpB,GAC1B,MAAMtN,EAAS,CAACC,KAAM,EAAGE,IAAK,EAAGD,MAAO,EAAGE,OAAQ,GAInD,OAHAkN,EAAUr0B,SAASgI,IACjB+e,EAAO/e,GAAO5H,KAAKuK,IAAIggC,EAAU3iC,GAAM+0C,EAAW/0C,GAAK,IAElD+e,CACT,CACA,OACI82B,EADGzO,EACgB,CAAC,OAAQ,SACT,CAAC,MAAO,UACjC,CACA,SAAS0O,GAASC,EAAOpT,EAAWwR,EAAQrZ,GAC1C,MAAMkb,EAAa,GACnB,IAAIh4C,EAAGM,EAAMo2C,EAAQ1nB,EAAKipB,EAAO7G,EACjC,IAAKpxC,EAAI,EAAGM,EAAOy3C,EAAMv+C,OAAQy+C,EAAQ,EAAGj4C,EAAIM,IAAQN,EAAG,CACzD02C,EAASqB,EAAM/3C,GACfgvB,EAAM0nB,EAAO1nB,IACbA,EAAI8K,OACF4c,EAAOx4B,OAASymB,EAAU35B,EAC1B0rC,EAAOn3B,QAAUolB,EAAUr6B,EAC3BstC,GAAWlB,EAAOtN,WAAYzE,IAEhC,MAAM,KAAC+S,EAAI,MAAEC,GAAST,GAAWvS,EAAWwR,EAAQO,EAAQ5Z,GAC5Dmb,GAASP,GAAQM,EAAWx+C,OAC5B43C,EAAUA,GAAWuG,EAChB3oB,EAAI2nB,UACPqB,EAAW19C,KAAKo8C,EAEpB,CACA,OAAOuB,GAASH,GAASE,EAAYrT,EAAWwR,EAAQrZ,IAAWsU,CACrE,CACA,SAAS8G,GAAWlpB,EAAKhO,EAAME,EAAKhD,EAAOqB,GACzCyP,EAAI9N,IAAMA,EACV8N,EAAIhO,KAAOA,EACXgO,EAAI/N,MAAQD,EAAO9C,EACnB8Q,EAAI7N,OAASD,EAAM3B,EACnByP,EAAI9Q,MAAQA,EACZ8Q,EAAIzP,OAASA,CACf,CACA,SAAS44B,GAAWJ,EAAOpT,EAAWwR,EAAQrZ,GAC5C,MAAMsb,EAAcjC,EAAOkC,QAC3B,IAAI,EAACl0C,EAAC,EAAEC,GAAKugC,EACb,IAAK,MAAM+R,KAAUqB,EAAO,CAC1B,MAAM/oB,EAAM0nB,EAAO1nB,IACbsN,EAAQQ,EAAO4Z,EAAOpa,QAAU,CAACtI,MAAO,EAAGsiB,OAAQ,EAAGh+B,OAAQ,GAC9DA,EAAUo+B,EAAOL,YAAc/Z,EAAMhkB,QAAW,EACtD,GAAIo+B,EAAOtN,WAAY,CACrB,MAAMlrB,EAAQymB,EAAU35B,EAAIsN,EACtBiH,EAAS+c,EAAM55B,MAAQssB,EAAIzP,OAC7Bld,EAAQi6B,EAAM39B,SAChByF,EAAIk4B,EAAM39B,OAERqwB,EAAI2nB,SACNuB,GAAWlpB,EAAKopB,EAAYp3B,KAAM5c,EAAG+xC,EAAOkB,WAAae,EAAYn3B,MAAQm3B,EAAYp3B,KAAMzB,GAE/F24B,GAAWlpB,EAAK2V,EAAU3jB,KAAOsb,EAAMga,OAAQlyC,EAAG8Z,EAAOqB,GAE3D+c,EAAM39B,MAAQyF,EACdk4B,EAAMga,QAAUp4B,EAChB9Z,EAAI4qB,EAAI7N,MACV,KAAO,CACL,MAAM5B,EAASolB,EAAUr6B,EAAIgO,EACvB4F,EAAQoe,EAAM55B,MAAQssB,EAAI9Q,MAC5B7b,EAAQi6B,EAAM39B,SAChBwF,EAAIm4B,EAAM39B,OAERqwB,EAAI2nB,SACNuB,GAAWlpB,EAAK7qB,EAAGi0C,EAAYl3B,IAAKhD,EAAOi4B,EAAOoB,YAAca,EAAYj3B,OAASi3B,EAAYl3B,KAEjGg3B,GAAWlpB,EAAK7qB,EAAGwgC,EAAUzjB,IAAMob,EAAMga,OAAQp4B,EAAOqB,GAE1D+c,EAAM39B,MAAQwF,EACdm4B,EAAMga,QAAU/2B,EAChBpb,EAAI6qB,EAAI/N,KACV,CACF,CACA0jB,EAAUxgC,EAAIA,EACdwgC,EAAUvgC,EAAIA,CAChB,CACAkW,GAASJ,IAAI,SAAU,CACrBo+B,aAAa,EACbD,QAAS,CACPn3B,IAAK,EACLD,MAAO,EACPE,OAAQ,EACRH,KAAM,KAGV,IAAIk1B,GAAU,CACZ,MAAAqC,CAAOz9B,EAAOnY,GACPmY,EAAMi9B,QACTj9B,EAAMi9B,MAAQ,IAEhBp1C,EAAKg0C,SAAWh0C,EAAKg0C,WAAY,EACjCh0C,EAAKwxC,SAAWxxC,EAAKwxC,UAAY,MACjCxxC,EAAK2V,OAAS3V,EAAK2V,QAAU,EAC7B3V,EAAK61C,QAAU71C,EAAK61C,SAAW,WAC7B,MAAO,CAAC,CACNC,EAAG,EACH,IAAAnhB,CAAKqN,GACHhiC,EAAK20B,KAAKqN,EACZ,GAEJ,EACA7pB,EAAMi9B,MAAMz9C,KAAKqI,EACnB,EACA,SAAA+1C,CAAU59B,EAAO69B,GACf,MAAM1+C,EAAQ6gB,EAAMi9B,MAAQj9B,EAAMi9B,MAAM92C,QAAQ03C,IAAe,GAChD,IAAX1+C,GACF6gB,EAAMi9B,MAAMl5B,OAAO5kB,EAAO,EAE9B,EACA,SAAAkhC,CAAUrgB,EAAOnY,EAAMxB,GACrBwB,EAAKg0C,SAAWx1C,EAAQw1C,SACxBh0C,EAAKwxC,SAAWhzC,EAAQgzC,SACxBxxC,EAAK2V,OAASnX,EAAQmX,MACxB,EACA,MAAAwhB,CAAOhf,EAAOoD,EAAOqB,EAAQq5B,GAC3B,IAAK99B,EACH,OAEF,MAAMu9B,EAAUxzB,GAAU/J,EAAM3Z,QAAQu1C,OAAO2B,SACzCzB,EAAiBx8C,KAAKuK,IAAIuZ,EAAQm6B,EAAQn6B,MAAO,GACjD24B,EAAkBz8C,KAAKuK,IAAI4a,EAAS84B,EAAQ94B,OAAQ,GACpDw4B,EA9LV,SAA0BA,GACxB,MAAMc,EAnDR,SAAmBd,GACjB,MAAMc,EAAc,GACpB,IAAI74C,EAAGM,EAAM0uB,EAAKhtB,EAAKs6B,EAAO+Z,EAC9B,IAAKr2C,EAAI,EAAGM,GAAQy3C,GAAS,IAAIv+C,OAAQwG,EAAIM,IAAQN,EACnDgvB,EAAM+oB,EAAM/3C,KACVm0C,SAAUnyC,EAAKb,SAAUm7B,QAAO+Z,cAAc,IAAMrnB,GACtD6pB,EAAYv+C,KAAK,CACfL,MAAO+F,EACPgvB,MACAhtB,MACAonC,WAAYpa,EAAImb,eAChB7xB,OAAQ0W,EAAI1W,OACZgkB,MAAOA,GAAUt6B,EAAMs6B,EACvB+Z,gBAGJ,OAAOwC,CACT,CAkCsBC,CAAUf,GACxBpB,EAAWX,GAAa6C,EAAYtvB,QAAO6sB,GAAQA,EAAKpnB,IAAI2nB,YAAW,GACvE31B,EAAOg1B,GAAaF,GAAiB+C,EAAa,SAAS,GAC3D53B,EAAQ+0B,GAAaF,GAAiB+C,EAAa,UACnD33B,EAAM80B,GAAaF,GAAiB+C,EAAa,QAAQ,GACzD13B,EAAS60B,GAAaF,GAAiB+C,EAAa,WACpDE,EAAmBhD,GAA4B8C,EAAa,KAC5DG,EAAiBjD,GAA4B8C,EAAa,KAChE,MAAO,CACLlC,WACAsC,WAAYj4B,EAAK6mB,OAAO3mB,GACxBg4B,eAAgBj4B,EAAM4mB,OAAOmR,GAAgBnR,OAAO1mB,GAAQ0mB,OAAOkR,GACnEpU,UAAWmR,GAAiB+C,EAAa,aACzCM,SAAUn4B,EAAK6mB,OAAO5mB,GAAO4mB,OAAOmR,GACpC5P,WAAYloB,EAAI2mB,OAAO1mB,GAAQ0mB,OAAOkR,GAE1C,CA6KkBK,CAAiBt+B,EAAMi9B,OAC/BsB,EAAgBtB,EAAMoB,SACtBG,EAAkBvB,EAAM3O,WAC9BvpC,EAAKib,EAAMi9B,OAAO/oB,IACgB,mBAArBA,EAAIuqB,cACbvqB,EAAIuqB,cACN,IAEF,MAAMC,EAA0BH,EAAcnhB,QAAO,CAACkX,EAAOgH,IAC3DA,EAAKpnB,IAAI7tB,UAAwC,IAA7Bi1C,EAAKpnB,IAAI7tB,QAAQyxC,QAAoBxD,EAAQA,EAAQ,GAAG,IAAM,EAC9E+G,EAAS78C,OAAOksC,OAAO,CAC3B6R,WAAYn5B,EACZq5B,YAAah4B,EACb84B,UACAzB,iBACAC,kBACAL,aAAcI,EAAiB,EAAI4C,EACnC/C,cAAeI,EAAkB,IAE7BE,EAAaz9C,OAAOge,OAAO,CAAC,EAAG+gC,GACrCrB,GAAiBD,EAAYlyB,GAAU+zB,IACvC,MAAMjU,EAAYrrC,OAAOge,OAAO,CAC9By/B,aACA/rC,EAAG4rC,EACHtsC,EAAGusC,EACH1yC,EAAGk0C,EAAQr3B,KACX5c,EAAGi0C,EAAQn3B,KACVm3B,GACGvb,EAASmZ,GAAcoD,EAAcxR,OAAOyR,GAAkBnD,GACpE2B,GAASC,EAAMpB,SAAUhS,EAAWwR,EAAQrZ,GAC5Cgb,GAASuB,EAAe1U,EAAWwR,EAAQrZ,GACvCgb,GAASwB,EAAiB3U,EAAWwR,EAAQrZ,IAC/Cgb,GAASuB,EAAe1U,EAAWwR,EAAQrZ,GA1KjD,SAA0B6H,GACxB,MAAMoS,EAAapS,EAAUoS,WAC7B,SAAS0C,EAAUz3C,GACjB,MAAM03C,EAASt/C,KAAKuK,IAAIoyC,EAAW/0C,GAAO2iC,EAAU3iC,GAAM,GAE1D,OADA2iC,EAAU3iC,IAAQ03C,EACXA,CACT,CACA/U,EAAUvgC,GAAKq1C,EAAU,OACzB9U,EAAUxgC,GAAKs1C,EAAU,QACzBA,EAAU,SACVA,EAAU,SACZ,CAiKIE,CAAiBhV,GACjBwT,GAAWJ,EAAMkB,WAAYtU,EAAWwR,EAAQrZ,GAChD6H,EAAUxgC,GAAKwgC,EAAU35B,EACzB25B,EAAUvgC,GAAKugC,EAAUr6B,EACzB6tC,GAAWJ,EAAMmB,eAAgBvU,EAAWwR,EAAQrZ,GACpDhiB,EAAM6pB,UAAY,CAChB3jB,KAAM2jB,EAAU3jB,KAChBE,IAAKyjB,EAAUzjB,IACfD,MAAO0jB,EAAU3jB,KAAO2jB,EAAU35B,EAClCmW,OAAQwjB,EAAUzjB,IAAMyjB,EAAUr6B,EAClCiV,OAAQolB,EAAUr6B,EAClB4T,MAAOymB,EAAU35B,GAEnBnL,EAAKk4C,EAAMpT,WAAY+R,IACrB,MAAM1nB,EAAM0nB,EAAO1nB,IACnB11B,OAAOge,OAAO0X,EAAKlU,EAAM6pB,WACzB3V,EAAI8K,OAAO6K,EAAU35B,EAAG25B,EAAUr6B,EAAG,CAAC0W,KAAM,EAAGE,IAAK,EAAGD,MAAO,EAAGE,OAAQ,GAAG,GAEhF,GAGF,MAAMy4B,GACJ,cAAAC,CAAe16B,EAAQ4Q,GAAc,CACrC,cAAA+pB,CAAej/B,GACb,OAAO,CACT,CACA,gBAAAsW,CAAiBrW,EAAOhjB,EAAMkuB,GAAW,CACzC,mBAAAoL,CAAoBtW,EAAOhjB,EAAMkuB,GAAW,CAC5C,mBAAAhL,GACE,OAAO,CACT,CACA,cAAA4U,CAAexB,EAASlQ,EAAOqB,EAAQwQ,GAGrC,OAFA7R,EAAQ9jB,KAAKuK,IAAI,EAAGuZ,GAASkQ,EAAQlQ,OACrCqB,EAASA,GAAU6O,EAAQ7O,OACpB,CACLrB,QACAqB,OAAQnlB,KAAKuK,IAAI,EAAGorB,EAAc31B,KAAKC,MAAM6jB,EAAQ6R,GAAexQ,GAExE,CACA,UAAAw6B,CAAW56B,GACT,OAAO,CACT,CACA,YAAA66B,CAAa/e,GACb,EAGF,MAAMgf,WAAsBL,GAC1B,cAAAC,CAAel3C,GACb,OAAOA,GAAQA,EAAKyc,YAAczc,EAAKyc,WAAW,OAAS,IAC7D,CACA,YAAA46B,CAAa/e,GACXA,EAAO95B,QAAQqZ,WAAY,CAC7B,EAGF,MAAM0/B,GAAc,WACdC,GAAc,CAClBC,WAAY,YACZC,UAAW,YACXC,SAAU,UACVC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,aAAc,WACdC,WAAY,YAERC,GAAgB7iD,GAAmB,OAAVA,GAA4B,KAAVA,EAoCjD,MAAM8iD,KAAuB9pB,IAA+B,CAACE,SAAS,GAItE,SAAS6pB,GAAejgC,EAAOhjB,EAAMkuB,GACnClL,EAAMqE,OAAOiS,oBAAoBt5B,EAAMkuB,EAAU80B,GACnD,CAYA,SAASE,GAAiBC,EAAU97B,GAClC,IAAK,MAAMnF,KAAQihC,EACjB,GAAIjhC,IAASmF,GAAUnF,EAAKkhC,SAAS/7B,GACnC,OAAO,CAGb,CACA,SAASg8B,GAAqBrgC,EAAOhjB,EAAMkuB,GACzC,MAAM7G,EAASrE,EAAMqE,OACfi8B,EAAW,IAAIC,kBAAiB9hD,IACpC,IAAI+hD,GAAU,EACd,IAAK,MAAM/S,KAAShvC,EAClB+hD,EAAUA,GAAWN,GAAiBzS,EAAMgT,WAAYp8B,GACxDm8B,EAAUA,IAAYN,GAAiBzS,EAAMiT,aAAcr8B,GAEzDm8B,GACFt1B,GACF,IAGF,OADAo1B,EAASK,QAAQtgD,SAAU,CAACugD,WAAW,EAAMC,SAAS,IAC/CP,CACT,CACA,SAASQ,GAAqB9gC,EAAOhjB,EAAMkuB,GACzC,MAAM7G,EAASrE,EAAMqE,OACfi8B,EAAW,IAAIC,kBAAiB9hD,IACpC,IAAI+hD,GAAU,EACd,IAAK,MAAM/S,KAAShvC,EAClB+hD,EAAUA,GAAWN,GAAiBzS,EAAMiT,aAAcr8B,GAC1Dm8B,EAAUA,IAAYN,GAAiBzS,EAAMgT,WAAYp8B,GAEvDm8B,GACFt1B,GACF,IAGF,OADAo1B,EAASK,QAAQtgD,SAAU,CAACugD,WAAW,EAAMC,SAAS,IAC/CP,CACT,CACA,MAAMS,GAAqB,IAAI9pB,IAC/B,IAAI+pB,GAAsB,EAC1B,SAASC,KACP,MAAMC,EAAMjgD,OAAO6e,iBACfohC,IAAQF,KAGZA,GAAsBE,EACtBH,GAAmB7hD,SAAQ,CAAC2gC,EAAQ7f,KAC9BA,EAAMkE,0BAA4Bg9B,GACpCrhB,GACF,IAEJ,CAaA,SAASshB,GAAqBnhC,EAAOhjB,EAAMkuB,GACzC,MAAM7G,EAASrE,EAAMqE,OACfjkB,EAAYikB,GAAUwO,GAAexO,GAC3C,IAAKjkB,EACH,OAEF,MAAMy/B,EAASh9B,GAAU,CAACugB,EAAOqB,KAC/B,MAAMvU,EAAI9P,EAAUo1B,YACpBtK,EAAS9H,EAAOqB,GACZvU,EAAI9P,EAAUo1B,aAChBtK,GACF,GACCjqB,QACGq/C,EAAW,IAAIc,gBAAe3iD,IAClC,MAAMgvC,EAAQhvC,EAAQ,GAChB2kB,EAAQqqB,EAAM4T,YAAYj+B,MAC1BqB,EAASgpB,EAAM4T,YAAY58B,OACnB,IAAVrB,GAA0B,IAAXqB,GAGnBob,EAAOzc,EAAOqB,EAAO,IAIvB,OAFA67B,EAASK,QAAQvgD,GAlCnB,SAAuC4f,EAAO6f,GACvCkhB,GAAmBn5C,MACtB3G,OAAOo1B,iBAAiB,SAAU4qB,IAEpCF,GAAmB3hC,IAAIY,EAAO6f,EAChC,CA8BEyhB,CAA8BthC,EAAO6f,GAC9BygB,CACT,CACA,SAASiB,GAAgBvhC,EAAOhjB,EAAMsjD,GAChCA,GACFA,EAASkB,aAEE,WAATxkD,GApCN,SAAyCgjB,GACvC+gC,GAAmB1yB,OAAOrO,GACrB+gC,GAAmBn5C,MACtB3G,OAAOq1B,oBAAoB,SAAU2qB,GAEzC,CAgCIQ,CAAgCzhC,EAEpC,CACA,SAAS0hC,GAAqB1hC,EAAOhjB,EAAMkuB,GACzC,MAAM7G,EAASrE,EAAMqE,OACfsI,EAAQ9pB,GAAWq6B,IACL,OAAdld,EAAMW,KACRuK,EAhHN,SAAyBgS,EAAOld,GAC9B,MAAMhjB,EAAOqiD,GAAYniB,EAAMlgC,OAASkgC,EAAMlgC,MACxC,EAACqM,EAAC,EAAEC,GAAKsqB,GAAsBsJ,EAAOld,GAC5C,MAAO,CACLhjB,OACAgjB,QACAmU,OAAQ+I,EACR7zB,OAAS7L,IAAN6L,EAAkBA,EAAI,KACzBC,OAAS9L,IAAN8L,EAAkBA,EAAI,KAE7B,CAsGeq4C,CAAgBzkB,EAAOld,GAClC,GACCA,GAAQ9c,IACT,MAAMg6B,EAAQh6B,EAAK,GACnB,MAAO,CAACg6B,EAAOA,EAAM7I,QAAS6I,EAAM5I,QAAQ,IAG9C,OA7HF,SAAqBpV,EAAMliB,EAAMkuB,GAC/BhM,EAAKmX,iBAAiBr5B,EAAMkuB,EAAU80B,GACxC,CA0HE4B,CAAYv9B,EAAQrnB,EAAM2vB,GACnBA,CACT,CACA,MAAMk1B,WAAoB/C,GACxB,cAAAC,CAAe16B,EAAQ4Q,GACrB,MAAMlV,EAAUsE,GAAUA,EAAOC,YAAcD,EAAOC,WAAW,MACjE,OAAIvE,GAAWA,EAAQsE,SAAWA,GAtKtC,SAAoBA,EAAQ4Q,GAC1B,MAAM1U,EAAQ8D,EAAO9D,MACfuhC,EAAez9B,EAAO09B,aAAa,UACnCC,EAAc39B,EAAO09B,aAAa,SAcxC,GAbA19B,EAAO+6B,IAAe,CACpBpjB,QAAS,CACPvX,OAAQq9B,EACR1+B,MAAO4+B,EACPzhC,MAAO,CACLu3B,QAASv3B,EAAMu3B,QACfrzB,OAAQlE,EAAMkE,OACdrB,MAAO7C,EAAM6C,SAInB7C,EAAMu3B,QAAUv3B,EAAMu3B,SAAW,QACjCv3B,EAAMwT,UAAYxT,EAAMwT,WAAa,aACjCgsB,GAAciC,GAAc,CAC9B,MAAMC,EAAe1rB,GAAalS,EAAQ,cACrB7mB,IAAjBykD,IACF59B,EAAOjB,MAAQ6+B,EAEnB,CACA,GAAIlC,GAAc+B,GAChB,GAA4B,KAAxBz9B,EAAO9D,MAAMkE,OACfJ,EAAOI,OAASJ,EAAOjB,OAAS6R,GAAe,OAC1C,CACL,MAAMitB,EAAgB3rB,GAAalS,EAAQ,eACrB7mB,IAAlB0kD,IACF79B,EAAOI,OAASy9B,EAEpB,CAGJ,CAqIMC,CAAW99B,EAAQ4Q,GACZlV,GAEF,IACT,CACA,cAAAi/B,CAAej/B,GACb,MAAMsE,EAAStE,EAAQsE,OACvB,IAAKA,EAAO+6B,IACV,OAAO,EAET,MAAMpjB,EAAU3X,EAAO+6B,IAAapjB,QACpC,CAAC,SAAU,SAAS98B,SAAS0qB,IAC3B,MAAM1sB,EAAQ8+B,EAAQpS,GAClB1lB,EAAchH,GAChBmnB,EAAO+9B,gBAAgBx4B,GAEvBvF,EAAOg+B,aAAaz4B,EAAM1sB,EAC5B,IAEF,MAAMqjB,EAAQyb,EAAQzb,OAAS,CAAC,EAMhC,OALA/hB,OAAO4G,KAAKmb,GAAOrhB,SAASE,IAC1BilB,EAAO9D,MAAMnhB,GAAOmhB,EAAMnhB,EAAI,IAEhCilB,EAAOjB,MAAQiB,EAAOjB,aACfiB,EAAO+6B,KACP,CACT,CACA,gBAAA/oB,CAAiBrW,EAAOhjB,EAAMkuB,GAC5BlO,KAAKsZ,oBAAoBtW,EAAOhjB,GAChC,MAAMslD,EAAUtiC,EAAMuiC,WAAaviC,EAAMuiC,SAAW,CAAC,GAM/CjJ,EALW,CACfkJ,OAAQnC,GACRoC,OAAQ3B,GACRjhB,OAAQshB,IAEenkD,IAAS0kD,GAClCY,EAAQtlD,GAAQs8C,EAAQt5B,EAAOhjB,EAAMkuB,EACvC,CACA,mBAAAoL,CAAoBtW,EAAOhjB,GACzB,MAAMslD,EAAUtiC,EAAMuiC,WAAaviC,EAAMuiC,SAAW,CAAC,GAC/C51B,EAAQ21B,EAAQtlD,GACtB,IAAK2vB,EACH,QAEe,CACf61B,OAAQjB,GACRkB,OAAQlB,GACR1hB,OAAQ0hB,IAEevkD,IAASijD,IAC1BjgC,EAAOhjB,EAAM2vB,GACrB21B,EAAQtlD,QAAQQ,CAClB,CACA,mBAAA0iB,GACE,OAAOjf,OAAO6e,gBAChB,CACA,cAAAgV,CAAezQ,EAAQjB,EAAOqB,EAAQwQ,GACpC,OAAOH,GAAezQ,EAAQjB,EAAOqB,EAAQwQ,EAC/C,CACA,UAAAgqB,CAAW56B,GACT,MAAMjkB,EAAYyyB,GAAexO,GACjC,SAAUjkB,IAAaA,EAAUsiD,YACnC,EAUF,MAAMC,GACJ,WAAA7lC,GACEE,KAAK3T,OAAI7L,EACTwf,KAAK1T,OAAI9L,EACTwf,KAAK+hB,QAAS,EACd/hB,KAAK3W,aAAU7I,EACfwf,KAAK2jB,iBAAcnjC,CACrB,CACA,eAAAolD,CAAgBnJ,GACd,MAAM,EAACpwC,EAAC,EAAEC,GAAK0T,KAAKs9B,SAAS,CAAC,IAAK,KAAMb,GACzC,MAAO,CAACpwC,IAAGC,IACb,CACA,QAAAu5C,GACE,OAAO35C,GAAS8T,KAAK3T,IAAMH,GAAS8T,KAAK1T,EAC3C,CACA,QAAAgxC,CAAS58C,EAAOolD,GACd,MAAMnnB,EAAQ3e,KAAK2jB,YACnB,IAAKmiB,IAAUnnB,EACb,OAAO3e,KAET,MAAMD,EAAM,CAAC,EAIb,OAHArf,EAAMwB,SAAQ0qB,IACZ7M,EAAI6M,GAAQ+R,EAAM/R,IAAS+R,EAAM/R,GAAMmV,SAAWpD,EAAM/R,GAAMiV,IAAM7hB,KAAK4M,EAAK,IAEzE7M,CACT,EAEF4lC,GAAQnjC,SAAW,CAAC,EACpBmjC,GAAQI,mBAAgBvlD,EAExB,MAAMwlD,GAAa,CACjBzjC,OAAOriB,GACEiH,EAAQjH,GAASA,EAAQ,GAAKA,EAEvC,OAAA+lD,CAAQC,EAAW/jD,EAAOmuC,GACxB,GAAkB,IAAd4V,EACF,MAAO,IAET,MAAM9rB,EAASpa,KAAKgD,MAAM3Z,QAAQ+wB,OAClC,IAAI+rB,EACAxxB,EAAQuxB,EACZ,GAAI5V,EAAM5uC,OAAS,EAAG,CACpB,MAAM0kD,EAAU9jD,KAAKuK,IAAIvK,KAAKkK,IAAI8jC,EAAM,GAAGpwC,OAAQoC,KAAKkK,IAAI8jC,EAAMA,EAAM5uC,OAAS,GAAGxB,SAChFkmD,EAAU,MAAQA,EAAU,QAC9BD,EAAW,cAEbxxB,EAmBN,SAAwBuxB,EAAW5V,GACjC,IAAI3b,EAAQ2b,EAAM5uC,OAAS,EAAI4uC,EAAM,GAAGpwC,MAAQowC,EAAM,GAAGpwC,MAAQowC,EAAM,GAAGpwC,MAAQowC,EAAM,GAAGpwC,MACvFoC,KAAKkK,IAAImoB,IAAU,GAAKuxB,IAAc5jD,KAAKC,MAAM2jD,KACnDvxB,EAAQuxB,EAAY5jD,KAAKC,MAAM2jD,IAEjC,OAAOvxB,CACT,CAzBc0xB,CAAeH,EAAW5V,EACpC,CACA,MAAMgW,EAAW96C,GAAMlJ,KAAKkK,IAAImoB,IAC1B4xB,EAAajkD,KAAKuK,IAAIvK,KAAKsK,KAAK,EAAItK,KAAKC,MAAM+jD,GAAW,IAAK,GAC/Dj9C,EAAU,CAAC88C,WAAUK,sBAAuBD,EAAYE,sBAAuBF,GAErF,OADA/kD,OAAOge,OAAOnW,EAAS2W,KAAK3W,QAAQinC,MAAM1V,QACnCV,GAAagsB,EAAW9rB,EAAQ/wB,EACzC,EACA,WAAAq9C,CAAYR,EAAW/jD,EAAOmuC,GAC5B,GAAkB,IAAd4V,EACF,MAAO,IAET,MAAMhkB,EAASgkB,EAAa5jD,KAAK0J,IAAI,GAAI1J,KAAKC,MAAMiJ,GAAM06C,KAC1D,OAAe,IAAXhkB,GAA2B,IAAXA,GAA2B,IAAXA,EAC3B8jB,GAAWC,QAAQ3/C,KAAK0Z,KAAMkmC,EAAW/jD,EAAOmuC,GAElD,EACT,GASF,IAAIqW,GAAQ,CAACX,eAqEb,SAASY,GAASpiC,EAAO8rB,GACvB,MAAMuW,EAAWriC,EAAMnb,QAAQinC,MACzBwW,EAAaD,EAASE,eAwB9B,SAA2BviC,GACzB,MAAMswB,EAAStwB,EAAMnb,QAAQyrC,OACvBkS,EAAaxiC,EAAMyiC,YACnBC,EAAW1iC,EAAM2rB,QAAU6W,GAAclS,EAAS,EAAI,GACtDqS,EAAW3iC,EAAM4iC,WAAaJ,EACpC,OAAO1kD,KAAKC,MAAMD,KAAKsK,IAAIs6C,EAAUC,GACvC,CA9B+CE,CAAkB7iC,GACzD8iC,EAAeT,EAASU,MAAMC,QA6CtC,SAAyBlX,GACvB,MAAM3Z,EAAS,GACf,IAAIzuB,EAAGM,EACP,IAAKN,EAAI,EAAGM,EAAO8nC,EAAM5uC,OAAQwG,EAAIM,EAAMN,IACrCooC,EAAMpoC,GAAGq/C,OACX5wB,EAAOn0B,KAAK0F,GAGhB,OAAOyuB,CACT,CAtDgD8wB,CAAgBnX,GAAS,GACjEoX,EAAkBJ,EAAa5lD,OAC/BimD,EAAQL,EAAa,GACrBtU,EAAOsU,EAAaI,EAAkB,GACtCE,EAAW,GACjB,GAAIF,EAAkBZ,EAEpB,OAgDJ,SAAoBxW,EAAOsX,EAAUN,EAAczR,GACjD,IAEI3tC,EAFAg0B,EAAQ,EACR5I,EAAOg0B,EAAa,GAGxB,IADAzR,EAAUvzC,KAAKulD,KAAKhS,GACf3tC,EAAI,EAAGA,EAAIooC,EAAM5uC,OAAQwG,IACxBA,IAAMorB,IACRs0B,EAASplD,KAAK8tC,EAAMpoC,IACpBg0B,IACA5I,EAAOg0B,EAAaprB,EAAQ2Z,GAGlC,CA7DIiS,CAAWxX,EAAOsX,EAAUN,EAAcI,EAAkBZ,GACrDc,EAET,MAAM/R,EAqBR,SAA0ByR,EAAchX,EAAOwW,GAC7C,MAAMiB,EA4DR,SAAwBv2B,GACtB,MAAMrpB,EAAMqpB,EAAI9vB,OAChB,IAAIwG,EAAGszC,EACP,GAAIrzC,EAAM,EACR,OAAO,EAET,IAAKqzC,EAAOhqB,EAAI,GAAItpB,EAAI,EAAGA,EAAIC,IAAOD,EACpC,GAAIspB,EAAItpB,GAAKspB,EAAItpB,EAAI,KAAOszC,EAC1B,OAAO,EAGX,OAAOA,CACT,CAxE2BwM,CAAeV,GAClCzR,EAAUvF,EAAM5uC,OAASolD,EAC/B,IAAKiB,EACH,OAAOzlD,KAAKuK,IAAIgpC,EAAS,GAE3B,MAAMoS,EDppGR,SAAoB/nD,GAClB,MAAMy2B,EAAS,GACThpB,EAAOrL,KAAKqL,KAAKzN,GACvB,IAAIgI,EACJ,IAAKA,EAAI,EAAGA,EAAIyF,EAAMzF,IAChBhI,EAAQgI,GAAM,IAChByuB,EAAOn0B,KAAK0F,GACZyuB,EAAOn0B,KAAKtC,EAAQgI,IAOxB,OAJIyF,KAAiB,EAAPA,IACZgpB,EAAOn0B,KAAKmL,GAEdgpB,EAAOqZ,MAAK,CAACtlC,EAAGC,IAAMD,EAAIC,IAAGi1B,MACtBjJ,CACT,CCqoGkBuxB,CAAWH,GAC3B,IAAK,IAAI7/C,EAAI,EAAGM,EAAOy/C,EAAQvmD,OAAS,EAAGwG,EAAIM,EAAMN,IAAK,CACxD,MAAM44B,EAASmnB,EAAQ//C,GACvB,GAAI44B,EAAS+U,EACX,OAAO/U,CAEX,CACA,OAAOx+B,KAAKuK,IAAIgpC,EAAS,EAC3B,CAnCkBsS,CAAiBb,EAAchX,EAAOwW,GACtD,GAAIY,EAAkB,EAAG,CACvB,IAAIx/C,EAAGM,EACP,MAAM4/C,EAAkBV,EAAkB,EAAIplD,KAAKuJ,OAAOmnC,EAAO2U,IAAUD,EAAkB,IAAM,KAEnG,IADA30B,GAAKud,EAAOsX,EAAU/R,EAAS3uC,EAAckhD,GAAmB,EAAIT,EAAQS,EAAiBT,GACxFz/C,EAAI,EAAGM,EAAOk/C,EAAkB,EAAGx/C,EAAIM,EAAMN,IAChD6qB,GAAKud,EAAOsX,EAAU/R,EAASyR,EAAap/C,GAAIo/C,EAAap/C,EAAI,IAGnE,OADA6qB,GAAKud,EAAOsX,EAAU/R,EAAS7C,EAAM9rC,EAAckhD,GAAmB9X,EAAM5uC,OAASsxC,EAAOoV,GACrFR,CACT,CAEA,OADA70B,GAAKud,EAAOsX,EAAU/R,GACf+R,CACT,CA8CA,SAAS70B,GAAKud,EAAOsX,EAAU/R,EAASwS,EAAYC,GAClD,MAAMzhD,EAAQc,EAAe0gD,EAAY,GACnCvhD,EAAMxE,KAAKsK,IAAIjF,EAAe2gD,EAAUhY,EAAM5uC,QAAS4uC,EAAM5uC,QACnE,IACIA,EAAQwG,EAAGorB,EADX4I,EAAQ,EAQZ,IANA2Z,EAAUvzC,KAAKulD,KAAKhS,GAChByS,IACF5mD,EAAS4mD,EAAWD,EACpBxS,EAAUn0C,EAASY,KAAKC,MAAMb,EAASm0C,IAEzCviB,EAAOzsB,EACAysB,EAAO,GACZ4I,IACA5I,EAAOhxB,KAAKuJ,MAAMhF,EAAQq1B,EAAQ2Z,GAEpC,IAAK3tC,EAAI5F,KAAKuK,IAAIhG,EAAO,GAAIqB,EAAIpB,EAAKoB,IAChCA,IAAMorB,IACRs0B,EAASplD,KAAK8tC,EAAMpoC,IACpBg0B,IACA5I,EAAOhxB,KAAKuJ,MAAMhF,EAAQq1B,EAAQ2Z,GAGxC,CAhKArzB,GAASJ,IAAI,QAAS,CACpB04B,SAAS,EACThG,QAAQ,EACR7sC,SAAS,EACTgtC,aAAa,EACb5Y,OAAQ,QACRksB,MAAO,EACPxT,KAAM,CACJ+F,SAAS,EACT9vB,UAAW,EACXw9B,YAAY,EACZC,iBAAiB,EACjBC,WAAW,EACX1B,WAAY,EACZ2B,UAAW,CAAC5hB,EAAM19B,IAAYA,EAAQ2hB,UACtC49B,UAAW,CAAC7hB,EAAM19B,IAAYA,EAAQkX,MACtCu0B,QAAQ,EACR5W,WAAY,GACZC,iBAAkB,EAClBvV,YAAa,GAEfllB,MAAO,CACLo3C,SAAS,EACT1wB,KAAM,GACNm2B,QAAS,CACPn3B,IAAK,EACLC,OAAQ,IAGZinB,MAAO,CACLuY,YAAa,EACbC,YAAa,GACbC,QAAQ,EACRC,gBAAiB,EACjBC,gBAAiB,GACjB1I,QAAS,EACTzF,SAAS,EACT8L,UAAU,EACVsC,gBAAiB,EACjBC,YAAa,EACbxjD,SAAUghD,GAAMX,WAAWzjC,OAC3B6mC,MAAO,CAAC,EACR7B,MAAO,CAAC,EACR5gD,MAAO,SACP0iD,WAAY,OACZC,mBAAmB,EACnBC,cAAe,4BACfC,gBAAiB,KAGrBhnC,GAASuC,MAAM,cAAe,QAAS,GAAI,SAC3CvC,GAASuC,MAAM,aAAc,QAAS,GAAI,eAC1CvC,GAASuC,MAAM,aAAc,cAAe,GAAI,eAChDvC,GAASuC,MAAM,cAAe,QAAS,GAAI,SAC3CvC,GAASoC,SAAS,QAAS,CACzBiB,WAAW,EACXH,YAAcV,IAAUA,EAAKW,WAAW,YAAcX,EAAKW,WAAW,UAAqB,aAATX,GAAgC,WAATA,EACzGY,WAAaZ,GAAkB,eAATA,GAAkC,mBAATA,IAEjDxC,GAASoC,SAAS,SAAU,CAC1BiB,UAAW,UAEbrD,GAASoC,SAAS,cAAe,CAC/Bc,YAAcV,GAAkB,oBAATA,GAAuC,aAATA,EACrDY,WAAaZ,GAAkB,oBAATA,IA+GxB,MACMykC,GAAiB,CAACjlC,EAAO4sB,EAAM0D,IAAoB,QAAT1D,GAA2B,SAATA,EAAkB5sB,EAAM4sB,GAAQ0D,EAAStwB,EAAM4sB,GAAQ0D,EACzH,SAAS4U,GAAOl4B,EAAKm4B,GACnB,MAAMhzB,EAAS,GACTizB,EAAYp4B,EAAI9vB,OAASioD,EACzBxhD,EAAMqpB,EAAI9vB,OAChB,IAAIwG,EAAI,EACR,KAAOA,EAAIC,EAAKD,GAAK0hD,EACnBjzB,EAAOn0B,KAAKgvB,EAAIlvB,KAAKC,MAAM2F,KAE7B,OAAOyuB,CACT,CACA,SAASkzB,GAAoBrlC,EAAOriB,EAAO2nD,GACzC,MAAMpoD,EAAS8iB,EAAM8rB,MAAM5uC,OACrBqoD,EAAaznD,KAAKsK,IAAIzK,EAAOT,EAAS,GACtCmF,EAAQ2d,EAAM8uB,YACdxsC,EAAM0d,EAAM+uB,UACZhnC,EAAU,KAChB,IACIuoC,EADAkV,EAAYxlC,EAAM+rB,gBAAgBwZ,GAEtC,KAAID,IAEAhV,EADa,IAAXpzC,EACOY,KAAKuK,IAAIm9C,EAAYnjD,EAAOC,EAAMkjD,GACxB,IAAV7nD,GACCqiB,EAAM+rB,gBAAgB,GAAKyZ,GAAa,GAExCA,EAAYxlC,EAAM+rB,gBAAgBwZ,EAAa,IAAM,EAEjEC,GAAaD,EAAa5nD,EAAQ2yC,GAAUA,EACxCkV,EAAYnjD,EAAQ0F,GAAWy9C,EAAYljD,EAAMyF,IAIvD,OAAOy9C,CACT,CAcA,SAASC,GAAkB5gD,GACzB,OAAOA,EAAQq/C,UAAYr/C,EAAQ29C,WAAa,CAClD,CACA,SAASkD,GAAe7gD,EAAS4jB,GAC/B,IAAK5jB,EAAQyxC,QACX,OAAO,EAET,MAAMz3B,EAAO2J,GAAO3jB,EAAQga,KAAM4J,GAC5BszB,EAAUxzB,GAAU1jB,EAAQk3C,SAElC,OADcp5C,EAAQkC,EAAQ+gB,MAAQ/gB,EAAQ+gB,KAAK1oB,OAAS,GAC5C2hB,EAAKG,WAAc+8B,EAAQ94B,MAC7C,CAcA,SAAS0iC,GAAWxjD,EAAO01C,EAAUp0C,GACnC,IAAI8X,EAAMrZ,EAAmBC,GAI7B,OAHKsB,GAAwB,UAAbo0C,IAA2Bp0C,GAAwB,UAAbo0C,KACpDt8B,EA5EiB,CAACpZ,GAAoB,SAAVA,EAAmB,QAAoB,UAAVA,EAAoB,OAASA,EA4EhFyjD,CAAarqC,IAEdA,CACT,CAmCA,MAAMsqC,WAAc1E,GAClB,WAAA7lC,CAAYohB,GACVgR,QACAlyB,KAAK/Y,GAAKi6B,EAAIj6B,GACd+Y,KAAKhgB,KAAOkhC,EAAIlhC,KAChBggB,KAAK3W,aAAU7I,EACfwf,KAAK2D,IAAMud,EAAIvd,IACf3D,KAAKgD,MAAQke,EAAIle,MACjBhD,KAAKoJ,SAAM5oB,EACXwf,KAAKqJ,YAAS7oB,EACdwf,KAAKkJ,UAAO1oB,EACZwf,KAAKmJ,WAAQ3oB,EACbwf,KAAKoG,WAAQ5lB,EACbwf,KAAKyH,YAASjnB,EACdwf,KAAKsqC,SAAW,CACdphC,KAAM,EACNC,MAAO,EACPC,IAAK,EACLC,OAAQ,GAEVrJ,KAAKkL,cAAW1qB,EAChBwf,KAAKmY,eAAY33B,EACjBwf,KAAKuqC,gBAAa/pD,EAClBwf,KAAKwqC,mBAAgBhqD,EACrBwf,KAAKyqC,iBAAcjqD,EACnBwf,KAAK0qC,kBAAelqD,EACpBwf,KAAK+lB,UAAOvlC,EACZwf,KAAK2qC,mBAAgBnqD,EACrBwf,KAAKpT,SAAMpM,EACXwf,KAAKnT,SAAMrM,EACXwf,KAAK4qC,YAASpqD,EACdwf,KAAKswB,MAAQ,GACbtwB,KAAK6qC,eAAiB,KACtB7qC,KAAK8qC,YAAc,KACnB9qC,KAAK+qC,YAAc,KACnB/qC,KAAKmwB,QAAU,EACfnwB,KAAKonC,WAAa,EAClBpnC,KAAKgrC,kBAAoB,CAAC,EAC1BhrC,KAAKszB,iBAAc9yC,EACnBwf,KAAKuzB,eAAY/yC,EACjBwf,KAAKk8B,gBAAiB,EACtBl8B,KAAKirC,cAAWzqD,EAChBwf,KAAKkrC,cAAW1qD,EAChBwf,KAAKmrC,mBAAgB3qD,EACrBwf,KAAKorC,mBAAgB5qD,EACrBwf,KAAKqrC,aAAe,EACpBrrC,KAAKsrC,aAAe,EACpBtrC,KAAK4vB,OAAS,CAAC,EACf5vB,KAAKurC,mBAAoB,EACzBvrC,KAAK0nB,cAAWlnC,CAClB,CACA,IAAAgrD,CAAKniD,GACH2W,KAAK3W,QAAUA,EAAQ2nB,WAAWhR,KAAKsH,cACvCtH,KAAK+lB,KAAO18B,EAAQ08B,KACpB/lB,KAAKkrC,SAAWlrC,KAAKwqB,MAAMnhC,EAAQuD,KACnCoT,KAAKirC,SAAWjrC,KAAKwqB,MAAMnhC,EAAQwD,KACnCmT,KAAKorC,cAAgBprC,KAAKwqB,MAAMnhC,EAAQoiD,cACxCzrC,KAAKmrC,cAAgBnrC,KAAKwqB,MAAMnhC,EAAQqiD,aAC1C,CACA,KAAAlhB,CAAMyC,EAAK9qC,GACT,OAAO8qC,CACT,CACA,aAAAd,GACE,IAAI,SAAC+e,EAAQ,SAAED,EAAQ,cAAEG,EAAa,cAAED,GAAiBnrC,KAKzD,OAJAkrC,EAAWzjD,EAAgByjD,EAAU3jD,OAAO4D,mBAC5C8/C,EAAWxjD,EAAgBwjD,EAAU1jD,OAAOukC,mBAC5Csf,EAAgB3jD,EAAgB2jD,EAAe7jD,OAAO4D,mBACtDggD,EAAgB1jD,EAAgB0jD,EAAe5jD,OAAOukC,mBAC/C,CACLl/B,IAAKnF,EAAgByjD,EAAUE,GAC/Bv+C,IAAKpF,EAAgBwjD,EAAUE,GAC/Blf,WAAY3kC,EAAe4jD,GAC3Bhf,WAAY5kC,EAAe2jD,GAE/B,CACA,SAAAxf,CAAUC,GACR,IACI//B,GADA,IAACiB,EAAG,IAAEC,EAAG,WAAEo/B,EAAU,WAAEC,GAAclsB,KAAKmsB,gBAE9C,GAAIF,GAAcC,EAChB,MAAO,CAACt/B,MAAKC,OAEf,MAAM8+C,EAAQ3rC,KAAKulB,0BACnB,IAAK,IAAIr9B,EAAI,EAAGM,EAAOmjD,EAAMjqD,OAAQwG,EAAIM,IAAQN,EAC/CyD,EAAQggD,EAAMzjD,GAAGu9B,WAAWgG,UAAUzrB,KAAM0rB,GACvCO,IACHr/B,EAAMtK,KAAKsK,IAAIA,EAAKjB,EAAMiB,MAEvBs/B,IACHr/B,EAAMvK,KAAKuK,IAAIA,EAAKlB,EAAMkB,MAK9B,OAFAD,EAAMs/B,GAAct/B,EAAMC,EAAMA,EAAMD,EACtCC,EAAMo/B,GAAcr/B,EAAMC,EAAMD,EAAMC,EAC/B,CACLD,IAAKnF,EAAgBmF,EAAKnF,EAAgBoF,EAAKD,IAC/CC,IAAKpF,EAAgBoF,EAAKpF,EAAgBmF,EAAKC,IAEnD,CACA,UAAAwyC,GACE,MAAO,CACLn2B,KAAMlJ,KAAKyqC,aAAe,EAC1BrhC,IAAKpJ,KAAKuqC,YAAc,EACxBphC,MAAOnJ,KAAK0qC,cAAgB,EAC5BrhC,OAAQrJ,KAAKwqC,eAAiB,EAElC,CACA,QAAAoB,GACE,OAAO5rC,KAAKswB,KACd,CACA,SAAAtF,GACE,MAAM9pC,EAAO8e,KAAKgD,MAAM9hB,KACxB,OAAO8e,KAAK3W,QAAQ0hC,SAAW/qB,KAAKqyB,eAAiBnxC,EAAK2qD,QAAU3qD,EAAK4qD,UAAY5qD,EAAK6pC,QAAU,EACtG,CACA,YAAA0W,GACEzhC,KAAK4vB,OAAS,CAAC,EACf5vB,KAAKurC,mBAAoB,CAC3B,CACA,YAAAQ,GACEpmD,EAASqa,KAAK3W,QAAQ0iD,aAAc,CAAC/rC,MACvC,CACA,MAAAgiB,CAAO9W,EAAUiN,EAAWD,GAC1B,MAAM,YAAC+c,EAAW,MAAEsT,EAAOjY,MAAOuW,GAAY7mC,KAAK3W,QAC7C2iD,EAAanF,EAASmF,WAC5BhsC,KAAK+rC,eACL/rC,KAAKkL,SAAWA,EAChBlL,KAAKmY,UAAYA,EACjBnY,KAAKsqC,SAAWpyB,EAAU12B,OAAOge,OAAO,CACtC0J,KAAM,EACNC,MAAO,EACPC,IAAK,EACLC,OAAQ,GACP6O,GACHlY,KAAKswB,MAAQ,KACbtwB,KAAK+qC,YAAc,KACnB/qC,KAAK6qC,eAAiB,KACtB7qC,KAAK8qC,YAAc,KACnB9qC,KAAKisC,sBACLjsC,KAAKksC,gBACLlsC,KAAKmsC,qBACLnsC,KAAKonC,WAAapnC,KAAKqyB,eACnBryB,KAAKoG,MAAQ8R,EAAQhP,KAAOgP,EAAQ/O,MACpCnJ,KAAKyH,OAASyQ,EAAQ9O,IAAM8O,EAAQ7O,OACnCrJ,KAAKurC,oBACRvrC,KAAKosC,mBACLpsC,KAAKqsC,sBACLrsC,KAAKssC,kBACLtsC,KAAK4qC,OD/wEX,SAAmB2B,EAAQhE,EAAOtT,GAChC,MAAM,IAACroC,EAAG,IAAEC,GAAO0/C,EACb3K,EAASh6C,EAAY2gD,GAAQ17C,EAAMD,GAAO,GAC1C4/C,EAAW,CAACtsD,EAAOuuB,IAAQwmB,GAAyB,IAAV/0C,EAAc,EAAIA,EAAQuuB,EAC1E,MAAO,CACL7hB,IAAK4/C,EAAS5/C,GAAMtK,KAAKkK,IAAIo1C,IAC7B/0C,IAAK2/C,EAAS3/C,EAAK+0C,GAEvB,CCuwEoB6K,CAAUzsC,KAAMuoC,EAAOtT,GACrCj1B,KAAKurC,mBAAoB,GAE3BvrC,KAAK0sC,mBACL1sC,KAAKswB,MAAQtwB,KAAK2sC,cAAgB,GAClC3sC,KAAK4sC,kBACL,MAAMC,EAAkBb,EAAahsC,KAAKswB,MAAM5uC,OAChDse,KAAK8sC,sBAAsBD,EAAkBnD,GAAO1pC,KAAKswB,MAAO0b,GAAchsC,KAAKswB,OACnFtwB,KAAKqjB,YACLrjB,KAAK+sC,+BACL/sC,KAAKgtC,yBACLhtC,KAAKitC,8BACDpG,EAAS/L,UAAY+L,EAASD,UAAgC,SAApBC,EAASh+C,UACrDmX,KAAKswB,MAAQsW,GAAS5mC,KAAMA,KAAKswB,OACjCtwB,KAAK+qC,YAAc,MAEjB8B,GACF7sC,KAAK8sC,sBAAsB9sC,KAAKswB,OAElCtwB,KAAKktC,YACLltC,KAAKmtC,MACLntC,KAAKotC,WACLptC,KAAKqtC,aACP,CACA,SAAAhqB,GACE,IACIiqB,EAAYC,EADZC,EAAgBxtC,KAAK3W,QAAQpB,QAE7B+X,KAAKqyB,gBACPib,EAAattC,KAAKkJ,KAClBqkC,EAAWvtC,KAAKmJ,QAEhBmkC,EAAattC,KAAKoJ,IAClBmkC,EAAWvtC,KAAKqJ,OAChBmkC,GAAiBA,GAEnBxtC,KAAKszB,YAAcga,EACnBttC,KAAKuzB,UAAYga,EACjBvtC,KAAKk8B,eAAiBsR,EACtBxtC,KAAKmwB,QAAUod,EAAWD,EAC1BttC,KAAKytC,eAAiBztC,KAAK3W,QAAQqkD,aACrC,CACA,WAAAL,GACE1nD,EAASqa,KAAK3W,QAAQgkD,YAAa,CAACrtC,MACtC,CACA,mBAAAisC,GACEtmD,EAASqa,KAAK3W,QAAQ4iD,oBAAqB,CAACjsC,MAC9C,CACA,aAAAksC,GACMlsC,KAAKqyB,gBACPryB,KAAKoG,MAAQpG,KAAKkL,SAClBlL,KAAKkJ,KAAO,EACZlJ,KAAKmJ,MAAQnJ,KAAKoG,QAElBpG,KAAKyH,OAASzH,KAAKmY,UACnBnY,KAAKoJ,IAAM,EACXpJ,KAAKqJ,OAASrJ,KAAKyH,QAErBzH,KAAKyqC,YAAc,EACnBzqC,KAAKuqC,WAAa,EAClBvqC,KAAK0qC,aAAe,EACpB1qC,KAAKwqC,cAAgB,CACvB,CACA,kBAAA2B,GACExmD,EAASqa,KAAK3W,QAAQ8iD,mBAAoB,CAACnsC,MAC7C,CACA,UAAA2tC,CAAW3oC,GACThF,KAAKgD,MAAM4qC,cAAc5oC,EAAMhF,KAAKsH,cACpC3hB,EAASqa,KAAK3W,QAAQ2b,GAAO,CAAChF,MAChC,CACA,gBAAAosC,GACEpsC,KAAK2tC,WAAW,mBAClB,CACA,mBAAAtB,GAAuB,CACvB,eAAAC,GACEtsC,KAAK2tC,WAAW,kBAClB,CACA,gBAAAjB,GACE1sC,KAAK2tC,WAAW,mBAClB,CACA,UAAAhB,GACE,MAAO,EACT,CACA,eAAAC,GACE5sC,KAAK2tC,WAAW,kBAClB,CACA,2BAAAE,GACEloD,EAASqa,KAAK3W,QAAQwkD,4BAA6B,CAAC7tC,MACtD,CACA,kBAAA8tC,CAAmBxd,GACjB,MAAMuW,EAAW7mC,KAAK3W,QAAQinC,MAC9B,IAAIpoC,EAAGM,EAAMm3B,EACb,IAAKz3B,EAAI,EAAGM,EAAO8nC,EAAM5uC,OAAQwG,EAAIM,EAAMN,IACzCy3B,EAAO2Q,EAAMpoC,GACby3B,EAAKx/B,MAAQwF,EAASkhD,EAASlhD,SAAU,CAACg6B,EAAKz/B,MAAOgI,EAAGooC,GAAQtwB,KAErE,CACA,0BAAA+tC,GACEpoD,EAASqa,KAAK3W,QAAQ0kD,2BAA4B,CAAC/tC,MACrD,CACA,4BAAA+sC,GACEpnD,EAASqa,KAAK3W,QAAQ0jD,6BAA8B,CAAC/sC,MACvD,CACA,sBAAAgtC,GACE,MAAM3jD,EAAU2W,KAAK3W,QACfw9C,EAAWx9C,EAAQinC,MACnB0d,EAAWhuC,KAAKswB,MAAM5uC,OACtBmnD,EAAchC,EAASgC,aAAe,EACtCC,EAAcjC,EAASiC,YAC7B,IACIH,EAAWxwB,EAAW81B,EADtBtD,EAAgB9B,EAEpB,IAAK7oC,KAAKkuC,eAAiBrH,EAAS/L,SAAW+N,GAAeC,GAAekF,GAAY,IAAMhuC,KAAKqyB,eAElG,YADAryB,KAAK2qC,cAAgB9B,GAGvB,MAAMsF,EAAanuC,KAAKouC,iBAClBC,EAAgBF,EAAWG,OAAOloC,MAClCmoC,EAAiBJ,EAAWK,QAAQ/mC,OACpCyD,EAAWvc,GAAYqR,KAAKgD,MAAMoD,MAAQioC,EAAe,EAAGruC,KAAKkL,UACvEy9B,EAAYt/C,EAAQyrC,OAAS90B,KAAKkL,SAAW8iC,EAAW9iC,GAAY8iC,EAAW,GAC3EK,EAAgB,EAAI1F,IACtBA,EAAYz9B,GAAY8iC,GAAY3kD,EAAQyrC,OAAS,GAAM,IAC3D3c,EAAYnY,KAAKmY,UAAY8xB,GAAkB5gD,EAAQ0rC,MACvD8R,EAAStG,QAAU2J,GAAe7gD,EAAQ3F,MAAOsc,KAAKgD,MAAM3Z,QAAQga,MACpE4qC,EAAmB3rD,KAAKqL,KAAK0gD,EAAgBA,EAAgBE,EAAiBA,GAC9E5D,EAAgB39C,GAAU1K,KAAKsK,IAC7BtK,KAAKmsD,KAAK9/C,IAAaw/C,EAAWK,QAAQ/mC,OAAS,GAAKkhC,GAAY,EAAG,IACvErmD,KAAKmsD,KAAK9/C,GAAYwpB,EAAY81B,GAAmB,EAAG,IAAM3rD,KAAKmsD,KAAK9/C,GAAY4/C,EAAiBN,GAAmB,EAAG,MAE7HtD,EAAgBroD,KAAKuK,IAAIg8C,EAAavmD,KAAKsK,IAAIk8C,EAAa6B,KAE9D3qC,KAAK2qC,cAAgBA,CACvB,CACA,2BAAAsC,GACEtnD,EAASqa,KAAK3W,QAAQ4jD,4BAA6B,CAACjtC,MACtD,CACA,SAAAktC,GACEvnD,EAASqa,KAAK3W,QAAQ6jD,UAAW,CAACltC,MACpC,CACA,GAAAmtC,GACE,MAAMjT,EAAU,CACd9zB,MAAO,EACPqB,OAAQ,IAEJ,MAACzE,EAAO3Z,SAAUinC,MAAOuW,EAAUnjD,MAAOgrD,EAAW3Z,KAAM4Z,IAAa3uC,KACxE86B,EAAU96B,KAAKkuC,aACf7b,EAAeryB,KAAKqyB,eAC1B,GAAIyI,EAAS,CACX,MAAM8T,EAAc1E,GAAewE,EAAW1rC,EAAM3Z,QAAQga,MAQ5D,GAPIgvB,GACF6H,EAAQ9zB,MAAQpG,KAAKkL,SACrBgvB,EAAQzyB,OAASwiC,GAAkB0E,GAAYC,IAE/C1U,EAAQzyB,OAASzH,KAAKmY,UACtB+hB,EAAQ9zB,MAAQ6jC,GAAkB0E,GAAYC,GAE5C/H,EAAS/L,SAAW96B,KAAKswB,MAAM5uC,OAAQ,CACzC,MAAM,MAACimD,EAAK,KAAE3U,EAAI,OAAEsb,EAAM,QAAEE,GAAWxuC,KAAKouC,iBACtCS,EAAiC,EAAnBhI,EAAStG,QACvBuO,EAAehiD,GAAUkT,KAAK2qC,eAC9B16C,EAAM3N,KAAK2N,IAAI6+C,GACf9/C,EAAM1M,KAAK0M,IAAI8/C,GACrB,GAAIzc,EAAc,CAChB,MAAM0c,EAAclI,EAASkC,OAAS,EAAI/5C,EAAMs/C,EAAOloC,MAAQnW,EAAMu+C,EAAQ/mC,OAC7EyyB,EAAQzyB,OAASnlB,KAAKsK,IAAIoT,KAAKmY,UAAW+hB,EAAQzyB,OAASsnC,EAAcF,EAC3E,KAAO,CACL,MAAMG,EAAanI,EAASkC,OAAS,EAAI94C,EAAMq+C,EAAOloC,MAAQpX,EAAMw/C,EAAQ/mC,OAC5EyyB,EAAQ9zB,MAAQ9jB,KAAKsK,IAAIoT,KAAKkL,SAAUgvB,EAAQ9zB,MAAQ4oC,EAAaH,EACvE,CACA7uC,KAAKivC,kBAAkBtH,EAAO3U,EAAMhkC,EAAKiB,EAC3C,CACF,CACA+P,KAAKkvC,iBACD7c,GACFryB,KAAKoG,MAAQpG,KAAKmwB,QAAUntB,EAAMoD,MAAQpG,KAAKsqC,SAASphC,KAAOlJ,KAAKsqC,SAASnhC,MAC7EnJ,KAAKyH,OAASyyB,EAAQzyB,SAEtBzH,KAAKoG,MAAQ8zB,EAAQ9zB,MACrBpG,KAAKyH,OAASzH,KAAKmwB,QAAUntB,EAAMyE,OAASzH,KAAKsqC,SAASlhC,IAAMpJ,KAAKsqC,SAASjhC,OAElF,CACA,iBAAA4lC,CAAkBtH,EAAO3U,EAAMhkC,EAAKiB,GAClC,MAAOqgC,OAAO,MAAC3pC,EAAK,QAAE45C,GAAQ,SAAElE,GAAYr8B,KAAK3W,QAC3C8lD,EAAmC,IAAvBnvC,KAAK2qC,cACjByE,EAAgC,QAAb/S,GAAoC,MAAdr8B,KAAK+lB,KACpD,GAAI/lB,KAAKqyB,eAAgB,CACvB,MAAMgd,EAAarvC,KAAKuwB,gBAAgB,GAAKvwB,KAAKkJ,KAC5ComC,EAActvC,KAAKmJ,MAAQnJ,KAAKuwB,gBAAgBvwB,KAAKswB,MAAM5uC,OAAS,GAC1E,IAAI+oD,EAAc,EACdC,EAAe,EACfyE,EACEC,GACF3E,EAAcx6C,EAAM03C,EAAMvhC,MAC1BskC,EAAe17C,EAAMgkC,EAAKvrB,SAE1BgjC,EAAcz7C,EAAM24C,EAAMlgC,OAC1BijC,EAAez6C,EAAM+iC,EAAK5sB,OAET,UAAVzf,EACT+jD,EAAe1X,EAAK5sB,MACD,QAAVzf,EACT8jD,EAAc9C,EAAMvhC,OAEpBqkC,EAAc9C,EAAMvhC,MAAQ,EAC5BskC,EAAe1X,EAAK5sB,MAAQ,GAE9BpG,KAAKyqC,YAAcnoD,KAAKuK,KAAK49C,EAAc4E,EAAa9O,GAAWvgC,KAAKoG,OAASpG,KAAKoG,MAAQipC,GAAa,GAC3GrvC,KAAK0qC,aAAepoD,KAAKuK,KAAK69C,EAAe4E,EAAc/O,GAAWvgC,KAAKoG,OAASpG,KAAKoG,MAAQkpC,GAAc,EACjH,KAAO,CACL,IAAI/E,EAAavX,EAAKvrB,OAAS,EAC3B+iC,EAAgB7C,EAAMlgC,OAAS,EACrB,UAAV9gB,GACF4jD,EAAa,EACbC,EAAgB7C,EAAMlgC,QACH,QAAV9gB,IACT4jD,EAAavX,EAAKvrB,OAClB+iC,EAAgB,GAElBxqC,KAAKuqC,WAAaA,EAAahK,EAC/BvgC,KAAKwqC,cAAgBA,EAAgBjK,CACvC,CACF,CACA,cAAA2O,GACMlvC,KAAKsqC,WACPtqC,KAAKsqC,SAASphC,KAAO5mB,KAAKuK,IAAImT,KAAKyqC,YAAazqC,KAAKsqC,SAASphC,MAC9DlJ,KAAKsqC,SAASlhC,IAAM9mB,KAAKuK,IAAImT,KAAKuqC,WAAYvqC,KAAKsqC,SAASlhC,KAC5DpJ,KAAKsqC,SAASnhC,MAAQ7mB,KAAKuK,IAAImT,KAAK0qC,aAAc1qC,KAAKsqC,SAASnhC,OAChEnJ,KAAKsqC,SAASjhC,OAAS/mB,KAAKuK,IAAImT,KAAKwqC,cAAexqC,KAAKsqC,SAASjhC,QAEtE,CACA,QAAA+jC,GACEznD,EAASqa,KAAK3W,QAAQ+jD,SAAU,CAACptC,MACnC,CACA,YAAAqyB,GACE,MAAM,KAACtM,EAAI,SAAEsW,GAAYr8B,KAAK3W,QAC9B,MAAoB,QAAbgzC,GAAmC,WAAbA,GAAkC,MAATtW,CACxD,CACA,UAAAwpB,GACE,OAAOvvC,KAAK3W,QAAQw1C,QACtB,CACA,qBAAAiO,CAAsBxc,GAGpB,IAAIpoC,EAAGM,EACP,IAHAwX,KAAK6tC,8BACL7tC,KAAK8tC,mBAAmBxd,GAEnBpoC,EAAI,EAAGM,EAAO8nC,EAAM5uC,OAAQwG,EAAIM,EAAMN,IACrChB,EAAcopC,EAAMpoC,GAAG/H,SACzBmwC,EAAMvpB,OAAO7e,EAAG,GAChBM,IACAN,KAGJ8X,KAAK+tC,4BACP,CACA,cAAAK,GACE,IAAID,EAAanuC,KAAK+qC,YACtB,IAAKoD,EAAY,CACf,MAAMnC,EAAahsC,KAAK3W,QAAQinC,MAAM0b,WACtC,IAAI1b,EAAQtwB,KAAKswB,MACb0b,EAAa1b,EAAM5uC,SACrB4uC,EAAQoZ,GAAOpZ,EAAO0b,IAExBhsC,KAAK+qC,YAAcoD,EAAanuC,KAAKwvC,mBAAmBlf,EAAOA,EAAM5uC,OACvE,CACA,OAAOysD,CACT,CACA,kBAAAqB,CAAmBlf,EAAO5uC,GACxB,MAAM,IAACiiB,EAAKqnC,kBAAmByE,GAAUzvC,KACnC0vC,EAAS,GACTC,EAAU,GAChB,IAEIznD,EAAG0W,EAAG8H,EAAMvmB,EAAOyvD,EAAUC,EAAYtpC,EAAO/C,EAAY4C,EAAOqB,EAAQqoC,EAF3EC,EAAkB,EAClBC,EAAmB,EAEvB,IAAK9nD,EAAI,EAAGA,EAAIxG,IAAUwG,EAAG,CAO3B,GANA/H,EAAQmwC,EAAMpoC,GAAG/H,MACjByvD,EAAW5vC,KAAKiwC,wBAAwB/nD,GACxCyb,EAAIN,KAAOwsC,EAAaD,EAAS3pC,OACjCM,EAAQkpC,EAAOI,GAAcJ,EAAOI,IAAe,CAAC3uD,KAAM,CAAC,EAAG6kB,GAAI,IAClEvC,EAAaosC,EAASpsC,WACtB4C,EAAQqB,EAAS,EACZvgB,EAAc/G,IAAWgH,EAAQhH,IAG/B,GAAIgH,EAAQhH,GACjB,IAAKye,EAAI,EAAG8H,EAAOvmB,EAAMuB,OAAQkd,EAAI8H,IAAQ9H,EAC3CkxC,EAAc3vD,EAAMye,GACf1X,EAAc4oD,IAAiB3oD,EAAQ2oD,KAC1C1pC,EAAQN,GAAanC,EAAK4C,EAAMrlB,KAAMqlB,EAAMR,GAAIK,EAAO0pC,GACvDroC,GAAUjE,QAPd4C,EAAQN,GAAanC,EAAK4C,EAAMrlB,KAAMqlB,EAAMR,GAAIK,EAAOjmB,GACvDsnB,EAASjE,EAUXksC,EAAOltD,KAAK4jB,GACZupC,EAAQntD,KAAKilB,GACbsoC,EAAkBztD,KAAKuK,IAAIuZ,EAAO2pC,GAClCC,EAAmB1tD,KAAKuK,IAAI4a,EAAQuoC,EACtC,EAvgBJ,SAAwBP,EAAQ/tD,GAC9BqG,EAAK0nD,GAASlpC,IACZ,MAAMR,EAAKQ,EAAMR,GACXe,EAAQf,EAAGrkB,OAAS,EAC1B,IAAIwG,EACJ,GAAI4e,EAAQplB,EAAQ,CAClB,IAAKwG,EAAI,EAAGA,EAAI4e,IAAS5e,SAChBqe,EAAMrlB,KAAK6kB,EAAG7d,IAEvB6d,EAAGgB,OAAO,EAAGD,EACf,IAEJ,CA4fIN,CAAeipC,EAAQ/tD,GACvB,MAAM4sD,EAASoB,EAAOvmD,QAAQ4mD,GACxBvB,EAAUmB,EAAQxmD,QAAQ6mD,GAC1BE,EAAWnmD,IAAQ,CAAEqc,MAAOspC,EAAO3lD,IAAQ,EAAG0d,OAAQkoC,EAAQ5lD,IAAQ,IAC5E,MAAO,CACL49C,MAAOuI,EAAQ,GACfld,KAAMkd,EAAQxuD,EAAS,GACvB4sD,OAAQ4B,EAAQ5B,GAChBE,QAAS0B,EAAQ1B,GACjBkB,SACAC,UAEJ,CACA,gBAAAnjB,CAAiBtsC,GACf,OAAOA,CACT,CACA,gBAAAmwC,CAAiBnwC,EAAOiC,GACtB,OAAOqpC,GACT,CACA,gBAAA2kB,CAAiBlpC,GAAQ,CACzB,eAAAspB,CAAgBpuC,GACd,MAAMmuC,EAAQtwB,KAAKswB,MACnB,OAAInuC,EAAQ,GAAKA,EAAQmuC,EAAM5uC,OAAS,EAC/B,KAEFse,KAAKqwB,iBAAiBC,EAAMnuC,GAAOjC,MAC5C,CACA,kBAAAg1C,CAAmBkb,GACbpwC,KAAKk8B,iBACPkU,EAAU,EAAIA,GAEhB,MAAMnpC,EAAQjH,KAAKszB,YAAc8c,EAAUpwC,KAAKmwB,QAChD,ODzsHKxhC,GCysHcqR,KAAKytC,eAAiBzmC,GAAYhH,KAAKgD,MAAOiE,EAAO,GAAKA,GDzsHpD,MAAO,MC0sHlC,CACA,kBAAAopC,CAAmBppC,GACjB,MAAMmpC,GAAWnpC,EAAQjH,KAAKszB,aAAetzB,KAAKmwB,QAClD,OAAOnwB,KAAKk8B,eAAiB,EAAIkU,EAAUA,CAC7C,CACA,YAAAhe,GACE,OAAOpyB,KAAKqwB,iBAAiBrwB,KAAKswC,eACpC,CACA,YAAAA,GACE,MAAM,IAAC1jD,EAAG,IAAEC,GAAOmT,KACnB,OAAOpT,EAAM,GAAKC,EAAM,EAAIA,EAC1BD,EAAM,GAAKC,EAAM,EAAID,EACrB,CACJ,CACA,UAAA0a,CAAWnlB,GACT,MAAMmuC,EAAQtwB,KAAKswB,OAAS,GAC5B,GAAInuC,GAAS,GAAKA,EAAQmuC,EAAM5uC,OAAQ,CACtC,MAAMi+B,EAAO2Q,EAAMnuC,GACnB,OAAOw9B,EAAK+H,WACb/H,EAAK+H,SA7hBV,SAA2BtV,EAAQjwB,EAAOw9B,GACxC,OAAOrS,GAAc8E,EAAQ,CAC3BuN,OACAx9B,QACAnC,KAAM,QAEV,CAuhBqBuwD,CAAkBvwC,KAAKsH,aAAcnlB,EAAOw9B,GAC7D,CACA,OAAO3f,KAAK0nB,WACZ1nB,KAAK0nB,SAriBApa,GAqiB8BtN,KAAKgD,MAAMsE,aAriBnB,CAC3B9C,MAoiB4DxE,KAniB5DhgB,KAAM,UAoiBR,CACA,SAAAinD,GACE,MAAMuJ,EAAcxwC,KAAK3W,QAAQinC,MAC3BmgB,EAAM3jD,GAAUkT,KAAK2qC,eACrB16C,EAAM3N,KAAKkK,IAAIlK,KAAK2N,IAAIwgD,IACxBzhD,EAAM1M,KAAKkK,IAAIlK,KAAK0M,IAAIyhD,IACxBtC,EAAanuC,KAAKouC,iBAClB7N,EAAUiQ,EAAYtH,iBAAmB,EACzCh2C,EAAIi7C,EAAaA,EAAWG,OAAOloC,MAAQm6B,EAAU,EACrD/tC,EAAI27C,EAAaA,EAAWK,QAAQ/mC,OAAS84B,EAAU,EAC7D,OAAOvgC,KAAKqyB,eACR7/B,EAAIvC,EAAMiD,EAAIlE,EAAMkE,EAAIjD,EAAMuC,EAAIxD,EAClCwD,EAAIxD,EAAMkE,EAAIjD,EAAMuC,EAAIvC,EAAMiD,EAAIlE,CACxC,CACA,UAAAk/C,GACE,MAAMpT,EAAU96B,KAAK3W,QAAQyxC,QAC7B,MAAgB,SAAZA,IACOA,EAEJ96B,KAAKulB,0BAA0B7jC,OAAS,CACjD,CACA,qBAAAgvD,CAAsB7jB,GACpB,MAAM9G,EAAO/lB,KAAK+lB,KACZ/iB,EAAQhD,KAAKgD,MACb3Z,EAAU2W,KAAK3W,SACf,KAAC0rC,EAAI,SAAEsH,GAAYhzC,EACnByrC,EAASC,EAAKD,OACdzC,EAAeryB,KAAKqyB,eAEpBse,EADQ3wC,KAAKswB,MACO5uC,QAAUozC,EAAS,EAAI,GAC3C8b,EAAK3G,GAAkBlV,GACvBxmB,EAAQ,GACRsiC,EAAa9b,EAAK/jB,WAAWhR,KAAKsH,cAClCwpC,EAAYD,EAAWrI,WAAaqI,EAAWjoC,YAAc,EAC7DmoC,EAAgBD,EAAY,EAC5BE,EAAmB,SAAS/pC,GAChC,OAAOD,GAAYhE,EAAOiE,EAAO6pC,EACnC,EACA,IAAIG,EAAa/oD,EAAG8hD,EAAWkH,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,EACpC,GAAiB,QAAbrV,EACF4U,EAAcD,EAAiBhxC,KAAKqJ,QACpC+nC,EAAMpxC,KAAKqJ,OAASunC,EACpBU,EAAML,EAAcF,EACpBS,EAAKR,EAAiBnkB,EAAUzjB,KAAO2nC,EACvCW,EAAK7kB,EAAUxjB,YACV,GAAiB,WAAbgzB,EACT4U,EAAcD,EAAiBhxC,KAAKoJ,KACpCooC,EAAK3kB,EAAUzjB,IACfsoC,EAAKV,EAAiBnkB,EAAUxjB,QAAU0nC,EAC1CK,EAAMH,EAAcF,EACpBO,EAAMtxC,KAAKoJ,IAAMwnC,OACZ,GAAiB,SAAbvU,EACT4U,EAAcD,EAAiBhxC,KAAKmJ,OACpCgoC,EAAMnxC,KAAKmJ,MAAQynC,EACnBS,EAAMJ,EAAcF,EACpBQ,EAAKP,EAAiBnkB,EAAU3jB,MAAQ6nC,EACxCU,EAAK5kB,EAAU1jB,WACV,GAAiB,UAAbkzB,EACT4U,EAAcD,EAAiBhxC,KAAKkJ,MACpCqoC,EAAK1kB,EAAU3jB,KACfuoC,EAAKT,EAAiBnkB,EAAU1jB,OAAS4nC,EACzCI,EAAMF,EAAcF,EACpBM,EAAMrxC,KAAKkJ,KAAO0nC,OACb,GAAa,MAAT7qB,EAAc,CACvB,GAAiB,WAAbsW,EACF4U,EAAcD,GAAkBnkB,EAAUzjB,IAAMyjB,EAAUxjB,QAAU,EAAI,SACnE,GAAIhiB,EAASg1C,GAAW,CAC7B,MAAMsV,EAAiBnwD,OAAO4G,KAAKi0C,GAAU,GACvCn8C,EAAQm8C,EAASsV,GACvBV,EAAcD,EAAiBhxC,KAAKgD,MAAMyB,OAAOktC,GAAgBthB,iBAAiBnwC,GACpF,CACAsxD,EAAK3kB,EAAUzjB,IACfsoC,EAAK7kB,EAAUxjB,OACf+nC,EAAMH,EAAcF,EACpBO,EAAMF,EAAMR,CACd,MAAO,GAAa,MAAT7qB,EAAc,CACvB,GAAiB,WAAbsW,EACF4U,EAAcD,GAAkBnkB,EAAU3jB,KAAO2jB,EAAU1jB,OAAS,QAC/D,GAAI9hB,EAASg1C,GAAW,CAC7B,MAAMsV,EAAiBnwD,OAAO4G,KAAKi0C,GAAU,GACvCn8C,EAAQm8C,EAASsV,GACvBV,EAAcD,EAAiBhxC,KAAKgD,MAAMyB,OAAOktC,GAAgBthB,iBAAiBnwC,GACpF,CACAixD,EAAMF,EAAcF,EACpBM,EAAMF,EAAMP,EACZW,EAAK1kB,EAAU3jB,KACfuoC,EAAK5kB,EAAU1jB,KACjB,CACA,MAAMyoC,EAAQjqD,EAAe0B,EAAQinC,MAAMyW,cAAe4J,GACpDkB,EAAOvvD,KAAKuK,IAAI,EAAGvK,KAAKulD,KAAK8I,EAAciB,IACjD,IAAK1pD,EAAI,EAAGA,EAAIyoD,EAAazoD,GAAK2pD,EAAM,CACtC,MAAMC,EAAc/c,EAAK/jB,WAAWhR,KAAKsH,WAAWpf,IAC9C8iB,EAAY8mC,EAAY9mC,UACxB+mC,EAAYD,EAAYvxC,MACxB2d,EAAa6W,EAAK7W,YAAc,GAChCC,EAAmB2zB,EAAY3zB,iBAC/BwqB,EAAYmJ,EAAYnJ,UACxBC,EAAYkJ,EAAYlJ,UACxBoJ,EAAiBF,EAAYE,gBAAkB,GAC/CC,EAAuBH,EAAYG,qBACzCjI,EAAYH,GAAoB7pC,KAAM9X,EAAG4sC,QACvBt0C,IAAdwpD,IAGJkH,EAAmBlqC,GAAYhE,EAAOgnC,EAAWh/B,GAC7CqnB,EACF8e,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,EAAKR,EAExB3iC,EAAM/rB,KAAK,CACT2uD,MACAC,MACAC,MACAC,MACAC,KACAC,KACAC,KACAC,KACAtrC,MAAO4E,EACPzK,MAAOwxC,EACP7zB,aACAC,mBACAwqB,YACAC,YACAoJ,iBACAC,yBAEJ,CAGA,OAFAjyC,KAAKqrC,aAAesF,EACpB3wC,KAAKsrC,aAAe2F,EACb1iC,CACT,CACA,kBAAA2jC,CAAmBrlB,GACjB,MAAM9G,EAAO/lB,KAAK+lB,KACZ18B,EAAU2W,KAAK3W,SACf,SAACgzC,EAAU/L,MAAOkgB,GAAennD,EACjCgpC,EAAeryB,KAAKqyB,eACpB/B,EAAQtwB,KAAKswB,OACb,MAAC3pC,EAAK,WAAE0iD,EAAU,QAAE9I,EAAO,OAAEwI,GAAUyH,EACvCI,EAAK3G,GAAkB5gD,EAAQ0rC,MAC/Bod,EAAiBvB,EAAKrQ,EACtB6R,EAAkBrJ,GAAUxI,EAAU4R,EACtCpqC,GAAYjb,GAAUkT,KAAK2qC,eAC3Bp8B,EAAQ,GACd,IAAIrmB,EAAGM,EAAMm3B,EAAMx/B,EAAOkM,EAAGC,EAAGse,EAAW3D,EAAO5D,EAAMG,EAAY6uC,EAAWC,EAC3EznC,EAAe,SACnB,GAAiB,QAAbwxB,EACF/vC,EAAI0T,KAAKqJ,OAAS+oC,EAClBxnC,EAAY5K,KAAKuyC,+BACZ,GAAiB,WAAblW,EACT/vC,EAAI0T,KAAKoJ,IAAMgpC,EACfxnC,EAAY5K,KAAKuyC,+BACZ,GAAiB,SAAblW,EAAqB,CAC9B,MAAMt8B,EAAMC,KAAKwyC,wBAAwB5B,GACzChmC,EAAY7K,EAAI6K,UAChBve,EAAI0T,EAAI1T,CACV,MAAO,GAAiB,UAAbgwC,EAAsB,CAC/B,MAAMt8B,EAAMC,KAAKwyC,wBAAwB5B,GACzChmC,EAAY7K,EAAI6K,UAChBve,EAAI0T,EAAI1T,CACV,MAAO,GAAa,MAAT05B,EAAc,CACvB,GAAiB,WAAbsW,EACF/vC,GAAMugC,EAAUzjB,IAAMyjB,EAAUxjB,QAAU,EAAK8oC,OAC1C,GAAI9qD,EAASg1C,GAAW,CAC7B,MAAMsV,EAAiBnwD,OAAO4G,KAAKi0C,GAAU,GACvCn8C,EAAQm8C,EAASsV,GACvBrlD,EAAI0T,KAAKgD,MAAMyB,OAAOktC,GAAgBthB,iBAAiBnwC,GAASiyD,CAClE,CACAvnC,EAAY5K,KAAKuyC,yBACnB,MAAO,GAAa,MAATxsB,EAAc,CACvB,GAAiB,WAAbsW,EACFhwC,GAAMwgC,EAAU3jB,KAAO2jB,EAAU1jB,OAAS,EAAKgpC,OAC1C,GAAI9qD,EAASg1C,GAAW,CAC7B,MAAMsV,EAAiBnwD,OAAO4G,KAAKi0C,GAAU,GACvCn8C,EAAQm8C,EAASsV,GACvBtlD,EAAI2T,KAAKgD,MAAMyB,OAAOktC,GAAgBthB,iBAAiBnwC,EACzD,CACA0qB,EAAY5K,KAAKwyC,wBAAwB5B,GAAIhmC,SAC/C,CACa,MAATmb,IACY,UAAVp/B,EACFkkB,EAAe,MACI,QAAVlkB,IACTkkB,EAAe,WAGnB,MAAMsjC,EAAanuC,KAAKouC,iBACxB,IAAKlmD,EAAI,EAAGM,EAAO8nC,EAAM5uC,OAAQwG,EAAIM,IAAQN,EAAG,CAC9Cy3B,EAAO2Q,EAAMpoC,GACb/H,EAAQw/B,EAAKx/B,MACb,MAAM2xD,EAActB,EAAYx/B,WAAWhR,KAAKsH,WAAWpf,IAC3D+e,EAAQjH,KAAKuwB,gBAAgBroC,GAAKsoD,EAAYrH,YAC9C9lC,EAAOrD,KAAKiwC,wBAAwB/nD,GACpCsb,EAAaH,EAAKG,WAClB6uC,EAAYlrD,EAAQhH,GAASA,EAAMuB,OAAS,EAC5C,MAAM+wD,EAAYJ,EAAY,EACxB9xC,EAAQuxC,EAAYvxC,MACpBiK,EAAcsnC,EAAY7I,gBAC1B1+B,EAAcunC,EAAY9I,gBA2BhC,IAAI0J,EACJ,GA3BIrgB,GACFhmC,EAAI4a,EAGAqrC,EAFa,QAAbjW,EACiB,SAAfgN,GAAsC,IAAbthC,GACbsqC,EAAY7uC,EAAaA,EAAa,EAC5B,WAAf6lC,GACK8E,EAAWK,QAAQ/mC,OAAS,EAAIgrC,EAAYjvC,EAAaA,GAEzD2qC,EAAWK,QAAQ/mC,OAASjE,EAAa,EAGtC,SAAf6lC,GAAsC,IAAbthC,EACdvE,EAAa,EACF,WAAf6lC,EACI8E,EAAWK,QAAQ/mC,OAAS,EAAIgrC,EAAYjvC,EAE5C2qC,EAAWK,QAAQ/mC,OAAS4qC,EAAY7uC,EAGrDulC,IACFuJ,IAAe,KAGjBhmD,EAAI2a,EACJqrC,GAAc,EAAID,GAAa7uC,EAAa,GAG1CsuC,EAAYxI,kBAAmB,CACjC,MAAMqJ,EAAe5lC,GAAU+kC,EAAYtI,iBACrC/hC,EAAS0mC,EAAWwB,QAAQznD,GAC5Bke,EAAQ+nC,EAAWuB,OAAOxnD,GAChC,IAAIkhB,EAAM9c,EAAIgmD,EAAaK,EAAavpC,IACpCF,EAAO7c,EAAIsmD,EAAazpC,KAC5B,OAAQ2B,GACR,IAAK,SACHzB,GAAO3B,EAAS,EAChB,MACF,IAAK,SACH2B,GAAO3B,EAGT,OAAQmD,GACR,IAAK,SACH1B,GAAQ9C,EAAQ,EAChB,MACF,IAAK,QACH8C,GAAQ9C,EAGVssC,EAAW,CACTxpC,OACAE,MACAhD,MAAOA,EAAQusC,EAAavsC,MAC5BqB,OAAQA,EAASkrC,EAAalrC,OAC9BlH,MAAOuxC,EAAYvI,cAEvB,CACAh7B,EAAM/rB,KAAK,CACTulB,WACA5nB,QACAkjB,OACA9C,QACAiK,cACAD,cACA+nC,aACA1nC,YACAC,eACAH,YAAa,CAACre,EAAGC,GACjBomD,YAEJ,CACA,OAAOnkC,CACT,CACA,uBAAAgkC,GACE,MAAM,SAAClW,EAAQ,MAAE/L,GAAStwB,KAAK3W,QAE/B,IADkByD,GAAUkT,KAAK2qC,eAE/B,MAAoB,QAAbtO,EAAqB,OAAS,QAEvC,IAAI11C,EAAQ,SAMZ,MALoB,UAAhB2pC,EAAM3pC,MACRA,EAAQ,OACiB,QAAhB2pC,EAAM3pC,QACfA,EAAQ,SAEHA,CACT,CACA,uBAAA6rD,CAAwB5B,GACtB,MAAM,SAACvU,EAAU/L,OAAO,WAAC+Y,EAAU,OAAEN,EAAM,QAAExI,IAAYvgC,KAAK3W,QAExD8oD,EAAiBvB,EAAKrQ,EACtB+N,EAFatuC,KAAKouC,iBAEEE,OAAOloC,MACjC,IAAIwE,EACAve,EAoDJ,MAnDiB,SAAbgwC,EACE0M,GACF18C,EAAI2T,KAAKmJ,MAAQo3B,EACE,SAAf8I,EACFz+B,EAAY,OACY,WAAfy+B,GACTz+B,EAAY,SACZve,GAAMiiD,EAAS,IAEf1jC,EAAY,QACZve,GAAKiiD,KAGPjiD,EAAI2T,KAAKmJ,MAAQgpC,EACE,SAAf9I,EACFz+B,EAAY,QACY,WAAfy+B,GACTz+B,EAAY,SACZve,GAAMiiD,EAAS,IAEf1jC,EAAY,OACZve,EAAI2T,KAAKkJ,OAGS,UAAbmzB,EACL0M,GACF18C,EAAI2T,KAAKkJ,KAAOq3B,EACG,SAAf8I,EACFz+B,EAAY,QACY,WAAfy+B,GACTz+B,EAAY,SACZve,GAAMiiD,EAAS,IAEf1jC,EAAY,OACZve,GAAKiiD,KAGPjiD,EAAI2T,KAAKkJ,KAAOipC,EACG,SAAf9I,EACFz+B,EAAY,OACY,WAAfy+B,GACTz+B,EAAY,SACZve,GAAKiiD,EAAS,IAEd1jC,EAAY,QACZve,EAAI2T,KAAKmJ,QAIbyB,EAAY,QAEP,CAACA,YAAWve,IACrB,CACA,iBAAAumD,GACE,GAAI5yC,KAAK3W,QAAQinC,MAAMyY,OACrB,OAEF,MAAM/lC,EAAQhD,KAAKgD,MACbq5B,EAAWr8B,KAAK3W,QAAQgzC,SAC9B,MAAiB,SAAbA,GAAoC,UAAbA,EAClB,CAACjzB,IAAK,EAAGF,KAAMlJ,KAAKkJ,KAAMG,OAAQrG,EAAMyE,OAAQ0B,MAAOnJ,KAAKmJ,OAClD,QAAbkzB,GAAmC,WAAbA,EACnB,CAACjzB,IAAKpJ,KAAKoJ,IAAKF,KAAM,EAAGG,OAAQrJ,KAAKqJ,OAAQF,MAAOnG,EAAMoD,YADlE,CAGJ,CACA,cAAAysC,GACE,MAAM,IAAClvC,EAAKta,SAAS,gBAACsZ,GAAgB,KAAEuG,EAAI,IAAEE,EAAG,MAAEhD,EAAK,OAAEqB,GAAUzH,KAChE2C,IACFgB,EAAI8C,OACJ9C,EAAIgH,UAAYhI,EAChBgB,EAAImvC,SAAS5pC,EAAME,EAAKhD,EAAOqB,GAC/B9D,EAAIkD,UAER,CACA,oBAAAqtB,CAAqBh0C,GACnB,MAAM60C,EAAO/0B,KAAK3W,QAAQ0rC,KAC1B,IAAK/0B,KAAKkuC,eAAiBnZ,EAAK+F,QAC9B,OAAO,EAET,MACM34C,EADQ6d,KAAKswB,MACCyiB,WAAUjkD,GAAKA,EAAE5O,QAAUA,IAC/C,GAAIiC,GAAS,EAAG,CAEd,OADa4yC,EAAK/jB,WAAWhR,KAAKsH,WAAWnlB,IACjC6oB,SACd,CACA,OAAO,CACT,CACA,QAAAgoC,CAASnmB,GACP,MAAMkI,EAAO/0B,KAAK3W,QAAQ0rC,KACpBpxB,EAAM3D,KAAK2D,IACX4K,EAAQvO,KAAK6qC,iBAAmB7qC,KAAK6qC,eAAiB7qC,KAAK0wC,sBAAsB7jB,IACvF,IAAI3kC,EAAGM,EACP,MAAMyqD,EAAW,CAACv/C,EAAIC,EAAI4P,KACnBA,EAAM6C,OAAU7C,EAAMhD,QAG3BoD,EAAI8C,OACJ9C,EAAIqH,UAAYzH,EAAM6C,MACtBzC,EAAIoH,YAAcxH,EAAMhD,MACxBoD,EAAIuvC,YAAY3vC,EAAM2a,YAAc,IACpCva,EAAIwvC,eAAiB5vC,EAAM4a,iBAC3Bxa,EAAIyE,YACJzE,EAAI4E,OAAO7U,EAAGrH,EAAGqH,EAAGpH,GACpBqX,EAAI6E,OAAO7U,EAAGtH,EAAGsH,EAAGrH,GACpBqX,EAAIkF,SACJlF,EAAIkD,UAAS,EAEf,GAAIkuB,EAAK+F,QACP,IAAK5yC,EAAI,EAAGM,EAAO+lB,EAAM7sB,OAAQwG,EAAIM,IAAQN,EAAG,CAC9C,MAAM2C,EAAO0jB,EAAMrmB,GACf6sC,EAAK0T,iBACPwK,EACE,CAAC5mD,EAAGxB,EAAK0mD,GAAIjlD,EAAGzB,EAAK2mD,IACrB,CAACnlD,EAAGxB,EAAK4mD,GAAInlD,EAAGzB,EAAK6mD,IACrB7mD,GAGAkqC,EAAK2T,WACPuK,EACE,CAAC5mD,EAAGxB,EAAKsmD,IAAK7kD,EAAGzB,EAAKumD,KACtB,CAAC/kD,EAAGxB,EAAKwmD,IAAK/kD,EAAGzB,EAAKymD,KACtB,CACE/wC,MAAO1V,EAAK+9C,UACZxiC,MAAOvb,EAAK89C,UACZzqB,WAAYrzB,EAAKmnD,eACjB7zB,iBAAkBtzB,EAAKonD,sBAI/B,CAEJ,CACA,UAAAzJ,GACE,MAAM,MAACxlC,EAAK,IAAEW,EAAKta,SAAS,KAAC0rC,IAAS/0B,KAChC6wC,EAAa9b,EAAK/jB,WAAWhR,KAAKsH,cAClCwpC,EAAY/b,EAAKyT,WAAaqI,EAAWjoC,YAAc,EAC7D,IAAKkoC,EACH,OAEF,MAAMsC,EAAgBre,EAAK/jB,WAAWhR,KAAKsH,WAAW,IAAI0D,UACpDimC,EAAcjxC,KAAKsrC,aACzB,IAAIiG,EAAIE,EAAID,EAAIE,EACZ1xC,KAAKqyB,gBACPkf,EAAKvqC,GAAYhE,EAAOhD,KAAKkJ,KAAM4nC,GAAaA,EAAY,EAC5DW,EAAKzqC,GAAYhE,EAAOhD,KAAKmJ,MAAOiqC,GAAiBA,EAAgB,EACrE5B,EAAKE,EAAKT,IAEVO,EAAKxqC,GAAYhE,EAAOhD,KAAKoJ,IAAK0nC,GAAaA,EAAY,EAC3DY,EAAK1qC,GAAYhE,EAAOhD,KAAKqJ,OAAQ+pC,GAAiBA,EAAgB,EACtE7B,EAAKE,EAAKR,GAEZttC,EAAI8C,OACJ9C,EAAIqH,UAAY6lC,EAAWjoC,YAC3BjF,EAAIoH,YAAc8lC,EAAWjuC,YAC7Be,EAAIyE,YACJzE,EAAI4E,OAAOgpC,EAAIC,GACf7tC,EAAI6E,OAAOipC,EAAIC,GACf/tC,EAAIkF,SACJlF,EAAIkD,SACN,CACA,UAAAwsC,CAAWxmB,GAET,IADoB7sB,KAAK3W,QAAQinC,MAChBwK,QACf,OAEF,MAAMn3B,EAAM3D,KAAK2D,IACXqF,EAAOhJ,KAAK4yC,oBACd5pC,GACFM,GAAS3F,EAAKqF,GAEhB,MAAMuF,EAAQvO,KAAK8qC,cAAgB9qC,KAAK8qC,YAAc9qC,KAAKkyC,mBAAmBrlB,IAC9E,IAAI3kC,EAAGM,EACP,IAAKN,EAAI,EAAGM,EAAO+lB,EAAM7sB,OAAQwG,EAAIM,IAAQN,EAAG,CAC9C,MAAM2C,EAAO0jB,EAAMrmB,GACb0nD,EAAW/kD,EAAKwY,KAChBljB,EAAQ0K,EAAK1K,MACf0K,EAAK6nD,WACP/uC,EAAIgH,UAAY9f,EAAK6nD,SAASnyC,MAC9BoD,EAAImvC,SAASjoD,EAAK6nD,SAASxpC,KAAMre,EAAK6nD,SAAStpC,IAAKve,EAAK6nD,SAAStsC,MAAOvb,EAAK6nD,SAASjrC,SAGzF0C,GAAWxG,EAAKxjB,EAAO,EADf0K,EAAKynD,WACgB1C,EAAU/kD,EACzC,CACIme,GACFQ,GAAW7F,EAEf,CACA,SAAA2vC,GACE,MAAM,IAAC3vC,EAAKta,SAAS,SAACgzC,EAAQ,MAAE34C,EAAK,QAAEuE,IAAY+X,KACnD,IAAKtc,EAAMo3C,QACT,OAEF,MAAMz3B,EAAO2J,GAAOtpB,EAAM2f,MACpBk9B,EAAUxzB,GAAUrpB,EAAM68C,SAC1B55C,EAAQjD,EAAMiD,MACpB,IAAImuC,EAASzxB,EAAKG,WAAa,EACd,WAAb64B,GAAsC,WAAbA,GAAyBh1C,EAASg1C,IAC7DvH,GAAUyL,EAAQl3B,OACdliB,EAAQzD,EAAM0mB,QAChB0qB,GAAUzxB,EAAKG,YAAc9f,EAAM0mB,KAAK1oB,OAAS,KAGnDozC,GAAUyL,EAAQn3B,IAEpB,MAAM,OAACmqC,EAAM,OAAEC,EAAM,SAAEtoC,EAAQ,SAAEnD,GAtgCrC,SAAmBvD,EAAOswB,EAAQuH,EAAU11C,GAC1C,MAAM,IAACyiB,EAAG,KAAEF,EAAI,OAAEG,EAAM,MAAEF,EAAK,MAAEnG,GAASwB,GACpC,UAACqoB,EAAS,OAAEpoB,GAAUzB,EAC5B,IACIkI,EAAUqoC,EAAQC,EADlBzrC,EAAW,EAEf,MAAMN,EAAS4B,EAASD,EAClBhD,EAAQ+C,EAAQD,EACtB,GAAI1E,EAAM6tB,eAAgB,CAExB,GADAkhB,EAAS3sD,EAAeD,EAAOuiB,EAAMC,GACjC9hB,EAASg1C,GAAW,CACtB,MAAMsV,EAAiBnwD,OAAO4G,KAAKi0C,GAAU,GACvCn8C,EAAQm8C,EAASsV,GACvB6B,EAAS/uC,EAAOktC,GAAgBthB,iBAAiBnwC,GAASunB,EAASqtB,CACrE,MACE0e,EADsB,WAAbnX,GACCxP,EAAUxjB,OAASwjB,EAAUzjB,KAAO,EAAI3B,EAASqtB,EAElD2U,GAAejlC,EAAO63B,EAAUvH,GAE3C5pB,EAAW/B,EAAQD,CACrB,KAAO,CACL,GAAI7hB,EAASg1C,GAAW,CACtB,MAAMsV,EAAiBnwD,OAAO4G,KAAKi0C,GAAU,GACvCn8C,EAAQm8C,EAASsV,GACvB4B,EAAS9uC,EAAOktC,GAAgBthB,iBAAiBnwC,GAASkmB,EAAQ0uB,CACpE,MACEye,EADsB,WAAblX,GACCxP,EAAU3jB,KAAO2jB,EAAU1jB,OAAS,EAAI/C,EAAQ0uB,EAEjD2U,GAAejlC,EAAO63B,EAAUvH,GAE3C0e,EAAS5sD,EAAeD,EAAO0iB,EAAQD,GACvCrB,EAAwB,SAAbs0B,GAAuBhxC,EAAUA,CAC9C,CACA,MAAO,CAACkoD,SAAQC,SAAQtoC,WAAUnD,WACpC,CAq+BiD0rC,CAAUzzC,KAAM80B,EAAQuH,EAAU11C,GAC/EwjB,GAAWxG,EAAKjgB,EAAM0mB,KAAM,EAAG,EAAG/G,EAAM,CACtC9C,MAAO7c,EAAM6c,MACb2K,WACAnD,WACA6C,UAAWu/B,GAAWxjD,EAAO01C,EAAUp0C,GACvC4iB,aAAc,SACdH,YAAa,CAAC6oC,EAAQC,IAE1B,CACA,IAAAh0B,CAAKqN,GACE7sB,KAAKkuC,eAGVluC,KAAK6yC,iBACL7yC,KAAKgzC,SAASnmB,GACd7sB,KAAKwoC,aACLxoC,KAAKszC,YACLtzC,KAAKqzC,WAAWxmB,GAClB,CACA,OAAA6T,GACE,MAAMr2B,EAAOrK,KAAK3W,QACZqqD,EAAKrpC,EAAKimB,OAASjmB,EAAKimB,MAAMqQ,GAAK,EACnCgT,EAAKhsD,EAAe0iB,EAAK0qB,MAAQ1qB,EAAK0qB,KAAK4L,GAAI,GACrD,OAAK3gC,KAAKkuC,cAAgBluC,KAAKwf,OAAS6qB,GAAMjkD,UAAUo5B,KAQjD,CAAC,CACNmhB,EAAGgT,EACHn0B,KAAOqN,IACL7sB,KAAK6yC,iBACL7yC,KAAKgzC,SAASnmB,GACd7sB,KAAKszC,WAAW,GAEjB,CACD3S,EAAGgT,EAAK,EACRn0B,KAAM,KACJxf,KAAKwoC,YAAY,GAElB,CACD7H,EAAG+S,EACHl0B,KAAOqN,IACL7sB,KAAKqzC,WAAWxmB,EAAU,IAtBrB,CAAC,CACN8T,EAAG+S,EACHl0B,KAAOqN,IACL7sB,KAAKwf,KAAKqN,EAAU,GAsB5B,CACA,uBAAAtH,CAAwBvlC,GACtB,MAAM2rD,EAAQ3rC,KAAKgD,MAAMu5B,+BACnBqX,EAAS5zC,KAAK+lB,KAAO,SACrBpP,EAAS,GACf,IAAIzuB,EAAGM,EACP,IAAKN,EAAI,EAAGM,EAAOmjD,EAAMjqD,OAAQwG,EAAIM,IAAQN,EAAG,CAC9C,MAAM28B,EAAO8mB,EAAMzjD,GACf28B,EAAK+uB,KAAY5zC,KAAK/Y,IAAQjH,GAAQ6kC,EAAK7kC,OAASA,GACtD22B,EAAOn0B,KAAKqiC,EAEhB,CACA,OAAOlO,CACT,CACA,uBAAAs5B,CAAwB9tD,GAEtB,OAAO6qB,GADMhN,KAAK3W,QAAQinC,MAAMtf,WAAWhR,KAAKsH,WAAWnlB,IACxCkhB,KACrB,CACA,UAAAwwC,GACE,MAAMC,EAAW9zC,KAAKiwC,wBAAwB,GAAGzsC,WACjD,OAAQxD,KAAKqyB,eAAiBryB,KAAKoG,MAAQpG,KAAKyH,QAAUqsC,CAC5D,EAGF,MAAMC,GACJ,WAAAj0C,CAAY9f,EAAMsiB,EAAOwC,GACvB9E,KAAKhgB,KAAOA,EACZggB,KAAKsC,MAAQA,EACbtC,KAAK8E,SAAWA,EAChB9E,KAAKuO,MAAQ/sB,OAAOuH,OAAO,KAC7B,CACA,SAAAirD,CAAUh0D,GACR,OAAOwB,OAAO4E,UAAU6tD,cAAc3tD,KAAK0Z,KAAKhgB,KAAKoG,UAAWpG,EAAKoG,UACvE,CACA,QAAA8tD,CAASrpD,GACP,MAAM0U,EAAQ/d,OAAO2uB,eAAetlB,GACpC,IAAIspD,GA+DR,SAA2B50C,GACzB,MAAO,OAAQA,GAAS,aAAcA,CACxC,EAhEQ60C,CAAkB70C,KACpB40C,EAAcn0C,KAAKk0C,SAAS30C,IAE9B,MAAMgP,EAAQvO,KAAKuO,MACbtnB,EAAK4D,EAAK5D,GACVqb,EAAQtC,KAAKsC,MAAQ,IAAMrb,EACjC,IAAKA,EACH,MAAM,IAAIkqB,MAAM,2BAA6BtmB,GAE/C,OAAI5D,KAAMsnB,IAGVA,EAAMtnB,GAAM4D,EAyBhB,SAA0BA,EAAMyX,EAAO6xC,GACrC,MAAME,EAAe7qD,EAAMhI,OAAOuH,OAAO,MAAO,CAC9CorD,EAAc3xC,GAASqC,IAAIsvC,GAAe,CAAC,EAC3C3xC,GAASqC,IAAIvC,GACbzX,EAAK2X,WAEPA,GAASJ,IAAIE,EAAO+xC,GAChBxpD,EAAKk7C,eAOX,SAAuBzjC,EAAOgyC,GAC5B9yD,OAAO4G,KAAKksD,GAAQpyD,SAAQyK,IAC1B,MAAM4nD,EAAgB5nD,EAASwV,MAAM,KAC/BqyC,EAAaD,EAAc30B,MAC3B60B,EAAc,CAACnyC,GAAOytB,OAAOwkB,GAAenjC,KAAK,KACjDsjC,EAAQJ,EAAO3nD,GAAUwV,MAAM,KAC/B+C,EAAawvC,EAAM90B,MACnB3a,EAAcyvC,EAAMtjC,KAAK,KAC/B5O,GAASuC,MAAM0vC,EAAaD,EAAYvvC,EAAaC,EAAW,GAEpE,CAhBIyvC,CAAcryC,EAAOzX,EAAKk7C,eAExBl7C,EAAKmX,aACPQ,GAASoC,SAAStC,EAAOzX,EAAKmX,YAElC,CArCI4yC,CAAiB/pD,EAAMyX,EAAO6xC,GAC1Bn0C,KAAK8E,UACPtC,GAASsC,SAASja,EAAK5D,GAAI4D,EAAKkX,YALzBO,CAQX,CACA,GAAAuC,CAAI5d,GACF,OAAO+Y,KAAKuO,MAAMtnB,EACpB,CACA,UAAA4tD,CAAWhqD,GACT,MAAM0jB,EAAQvO,KAAKuO,MACbtnB,EAAK4D,EAAK5D,GACVqb,EAAQtC,KAAKsC,MACfrb,KAAMsnB,UACDA,EAAMtnB,GAEXqb,GAASrb,KAAMub,GAASF,YACnBE,GAASF,GAAOrb,GACnB+Y,KAAK8E,iBACA/C,GAAU9a,GAGvB,EAqHF,IAAI6tD,GAAW,IAtFf,MACE,WAAAh1C,GACEE,KAAK+0C,YAAc,IAAIhB,GAAcjtB,GAAmB,YAAY,GACpE9mB,KAAKmD,SAAW,IAAI4wC,GAAcpO,GAAS,YAC3C3lC,KAAKsE,QAAU,IAAIyvC,GAAcvyD,OAAQ,WACzCwe,KAAKyE,OAAS,IAAIsvC,GAAc1J,GAAO,UACvCrqC,KAAKg1C,iBAAmB,CAACh1C,KAAK+0C,YAAa/0C,KAAKyE,OAAQzE,KAAKmD,SAC/D,CACA,GAAAsL,IAAOvoB,GACL8Z,KAAKi1C,MAAM,WAAY/uD,EACzB,CACA,MAAAw6B,IAAUx6B,GACR8Z,KAAKi1C,MAAM,aAAc/uD,EAC3B,CACA,cAAAgvD,IAAkBhvD,GAChB8Z,KAAKi1C,MAAM,WAAY/uD,EAAM8Z,KAAK+0C,YACpC,CACA,WAAAhtB,IAAe7hC,GACb8Z,KAAKi1C,MAAM,WAAY/uD,EAAM8Z,KAAKmD,SACpC,CACA,UAAAgyC,IAAcjvD,GACZ8Z,KAAKi1C,MAAM,WAAY/uD,EAAM8Z,KAAKsE,QACpC,CACA,SAAA8wC,IAAalvD,GACX8Z,KAAKi1C,MAAM,WAAY/uD,EAAM8Z,KAAKyE,OACpC,CACA,aAAA4wC,CAAcpuD,GACZ,OAAO+Y,KAAKs1C,KAAKruD,EAAI+Y,KAAK+0C,YAAa,aACzC,CACA,UAAAQ,CAAWtuD,GACT,OAAO+Y,KAAKs1C,KAAKruD,EAAI+Y,KAAKmD,SAAU,UACtC,CACA,SAAAqyC,CAAUvuD,GACR,OAAO+Y,KAAKs1C,KAAKruD,EAAI+Y,KAAKsE,QAAS,SACrC,CACA,QAAAmxC,CAASxuD,GACP,OAAO+Y,KAAKs1C,KAAKruD,EAAI+Y,KAAKyE,OAAQ,QACpC,CACA,iBAAAixC,IAAqBxvD,GACnB8Z,KAAKi1C,MAAM,aAAc/uD,EAAM8Z,KAAK+0C,YACtC,CACA,cAAAY,IAAkBzvD,GAChB8Z,KAAKi1C,MAAM,aAAc/uD,EAAM8Z,KAAKmD,SACtC,CACA,aAAAyyC,IAAiB1vD,GACf8Z,KAAKi1C,MAAM,aAAc/uD,EAAM8Z,KAAKsE,QACtC,CACA,YAAAuxC,IAAgB3vD,GACd8Z,KAAKi1C,MAAM,aAAc/uD,EAAM8Z,KAAKyE,OACtC,CACA,KAAAwwC,CAAMzyB,EAAQt8B,EAAM4vD,GAClB,IAAI5vD,GAAMhE,SAAQ6zD,IAChB,MAAMC,EAAMF,GAAiB91C,KAAKi2C,oBAAoBF,GAClDD,GAAiBE,EAAIhC,UAAU+B,IAASC,IAAQh2C,KAAKsE,SAAWyxC,EAAI9uD,GACtE+Y,KAAKk2C,MAAM1zB,EAAQwzB,EAAKD,GAExBhuD,EAAKguD,GAAKlrD,IACR,MAAMsrD,EAAUL,GAAiB91C,KAAKi2C,oBAAoBprD,GAC1DmV,KAAKk2C,MAAM1zB,EAAQ2zB,EAAStrD,EAAK,GAErC,GAEJ,CACA,KAAAqrD,CAAM1zB,EAAQsyB,EAAUsB,GACtB,MAAMC,EAAclsD,EAAYq4B,GAChC78B,EAASywD,EAAU,SAAWC,GAAc,GAAID,GAChDtB,EAAStyB,GAAQ4zB,GACjBzwD,EAASywD,EAAU,QAAUC,GAAc,GAAID,EACjD,CACA,mBAAAH,CAAoBj2D,GAClB,IAAK,IAAIkI,EAAI,EAAGA,EAAI8X,KAAKg1C,iBAAiBtzD,OAAQwG,IAAK,CACrD,MAAM8tD,EAAMh2C,KAAKg1C,iBAAiB9sD,GAClC,GAAI8tD,EAAIhC,UAAUh0D,GAChB,OAAOg2D,CAEX,CACA,OAAOh2C,KAAKsE,OACd,CACA,IAAAgxC,CAAKruD,EAAI6uD,EAAe91D,GACtB,MAAM6K,EAAOirD,EAAcjxC,IAAI5d,GAC/B,QAAazG,IAATqK,EACF,MAAM,IAAIsmB,MAAM,IAAMlqB,EAAK,yBAA2BjH,EAAO,KAE/D,OAAO6K,CACT,GAIF,MAAMyrD,GACJ,WAAAx2C,GACEE,KAAKu2C,MAAQ,EACf,CACA,MAAAC,CAAOxzC,EAAOyzC,EAAMvwD,EAAMurB,GACX,eAATglC,IACFz2C,KAAKu2C,MAAQv2C,KAAK02C,mBAAmB1zC,GAAO,GAC5ChD,KAAK0e,QAAQ1e,KAAKu2C,MAAOvzC,EAAO,YAElC,MAAMhB,EAAcyP,EAASzR,KAAKyC,aAAaO,GAAOyO,OAAOA,GAAUzR,KAAKyC,aAAaO,GACnF2T,EAAS3W,KAAK0e,QAAQ1c,EAAagB,EAAOyzC,EAAMvwD,GAKtD,MAJa,iBAATuwD,IACFz2C,KAAK0e,QAAQ1c,EAAagB,EAAO,QACjChD,KAAK0e,QAAQ1e,KAAKu2C,MAAOvzC,EAAO,cAE3B2T,CACT,CACA,OAAA+H,CAAQ1c,EAAagB,EAAOyzC,EAAMvwD,GAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAK,MAAMywD,KAAc30C,EAAa,CACpC,MAAM40C,EAASD,EAAWC,OAG1B,IAAyC,IAArCjxD,EAFWixD,EAAOH,GACP,CAACzzC,EAAO9c,EAAMywD,EAAWttD,SACXutD,IAAqB1wD,EAAK2wD,WACrD,OAAO,CAEX,CACA,OAAO,CACT,CACA,UAAAC,GACO5vD,EAAc8Y,KAAK4vB,UACtB5vB,KAAK+2C,UAAY/2C,KAAK4vB,OACtB5vB,KAAK4vB,YAASpvC,EAElB,CACA,YAAAiiB,CAAaO,GACX,GAAIhD,KAAK4vB,OACP,OAAO5vB,KAAK4vB,OAEd,MAAM5tB,EAAchC,KAAK4vB,OAAS5vB,KAAK02C,mBAAmB1zC,GAE1D,OADAhD,KAAKg3C,oBAAoBh0C,GAClBhB,CACT,CACA,kBAAA00C,CAAmB1zC,EAAO+gB,GACxB,MAAMZ,EAASngB,GAASA,EAAMmgB,OACxB95B,EAAU1B,EAAew7B,EAAO95B,SAAW85B,EAAO95B,QAAQib,QAAS,CAAC,GACpEA,EAWV,SAAoB6e,GAClB,MAAM7e,EAAU,GACVlc,EAAO5G,OAAO4G,KAAK0sD,GAASxwC,QAAQiK,OAC1C,IAAK,IAAIrmB,EAAI,EAAGA,EAAIE,EAAK1G,OAAQwG,IAC/Boc,EAAQ9hB,KAAKsyD,GAASU,UAAUptD,EAAKF,KAEvC,MAAMud,EAAQ0d,EAAO7e,SAAW,GAChC,IAAK,IAAIpc,EAAI,EAAGA,EAAIud,EAAM/jB,OAAQwG,IAAK,CACrC,MAAM0uD,EAASnxC,EAAMvd,IACY,IAA7Boc,EAAQnb,QAAQytD,IAClBtyC,EAAQ9hB,KAAKo0D,EAEjB,CACA,OAAOtyC,CACT,CAzBoB2yC,CAAW9zB,GAC3B,OAAmB,IAAZ95B,GAAsB06B,EAkCjC,SAA2B/gB,EAAOsB,EAASjb,EAAS06B,GAClD,MAAMpN,EAAS,GACT5T,EAAUC,EAAMsE,aACtB,IAAK,IAAIpf,EAAI,EAAGA,EAAIoc,EAAQ5iB,OAAQwG,IAAK,CACvC,MAAM0uD,EAAStyC,EAAQpc,GAEjBmiB,EAAO6sC,GAAQ7tD,EADVutD,EAAO3vD,IACgB88B,GACrB,OAAT1Z,GAGJsM,EAAOn0B,KAAK,CACVo0D,SACAvtD,QAAS8tD,GAAWn0C,EAAMmgB,OAAQyzB,EAAQvsC,EAAMtH,IAEpD,CACA,OAAO4T,CACT,CAlD4CygC,CAAkBp0C,EAAOsB,EAASjb,EAAS06B,GAAhD,EACrC,CACA,mBAAAizB,CAAoBh0C,GAClB,MAAMq0C,EAAsBr3C,KAAK+2C,WAAa,GACxC/0C,EAAchC,KAAK4vB,OACnB4L,EAAO,CAAC9wC,EAAGC,IAAMD,EAAE+mB,QAAOplB,IAAM1B,EAAE2sD,MAAKhrD,GAAKD,EAAEuqD,OAAO3vD,KAAOqF,EAAEsqD,OAAO3vD,OAC3E+Y,KAAK0e,QAAQ8c,EAAK6b,EAAqBr1C,GAAcgB,EAAO,QAC5DhD,KAAK0e,QAAQ8c,EAAKx5B,EAAaq1C,GAAsBr0C,EAAO,QAC9D,EAiBF,SAASk0C,GAAQ7tD,EAAS06B,GACxB,OAAKA,IAAmB,IAAZ16B,GAGI,IAAZA,EACK,CAAC,EAEHA,EALE,IAMX,CAkBA,SAAS8tD,GAAWh0B,EAAQyzB,EAAQvsC,EAAMtH,GACxC,MAAM3a,EAAO+6B,EAAOo0B,gBAAgBX,GAC9BhoC,EAASuU,EAAOmH,gBAAgBjgB,EAAMjiB,GAC5C,OAAO+6B,EAAOoH,eAAe3b,EAAQ7L,EAAS,CAAC,IAAK,CAACgP,YAAY,EAAOC,WAAW,EAAOH,SAAS,GACrG,CAEA,SAAS2lC,GAAax3D,EAAMqJ,GAC1B,MAAMouD,EAAkBj1C,GAASK,SAAS7iB,IAAS,CAAC,EAEpD,QADwBqJ,EAAQwZ,UAAY,CAAC,GAAG7iB,IAAS,CAAC,GACpC8jB,WAAaza,EAAQya,WAAa2zC,EAAgB3zC,WAAa,GACvF,CAqBA,SAAS4zC,GAAczwD,EAAI0wD,GACzB,MAAW,MAAP1wD,GAAqB,MAAPA,EACTA,EAEF0wD,EAAa5xB,OAXH,SADOsW,EAYqBsb,EAAatb,WAXnB,WAAbA,EACjB,IAEQ,SAAbA,GAAoC,UAAbA,EAClB,SADT,IAQuEp1C,EAAGoD,OAAO,GAAG3F,cAZtF,IAA0B23C,CAa1B,CAuCA,SAASub,GAAYz0B,GACnB,MAAM95B,EAAU85B,EAAO95B,UAAY85B,EAAO95B,QAAU,CAAC,GACrDA,EAAQib,QAAU3c,EAAe0B,EAAQib,QAAS,CAAC,GACnDjb,EAAQob,OAzCV,SAA0B0e,EAAQ95B,GAChC,MAAMwuD,EAAgB91C,GAAUohB,EAAOnjC,OAAS,CAACykB,OAAQ,CAAC,GACpDqzC,EAAezuD,EAAQob,QAAU,CAAC,EAClCszC,EAAiBP,GAAar0B,EAAOnjC,KAAMqJ,GAC3C2uD,EAAWx2D,OAAOuH,OAAO,MACzB0b,EAASjjB,OAAOuH,OAAO,MA+B7B,OA9BAvH,OAAO4G,KAAK0vD,GAAc51D,SAAQ+E,IAChC,MAAMgxD,EAAYH,EAAa7wD,GAC/B,IAAKI,EAAS4wD,GACZ,OAEF,GAAIA,EAAUrnC,OACZ,OAEF,MAAMmV,EAAO2xB,GAAczwD,EAAIgxD,GACzBC,EAhCV,SAAmCnyB,EAAMjiB,GACvC,OAAOiiB,IAASjiB,EAAY,UAAY,SAC1C,CA8BsBq0C,CAA0BpyB,EAAMgyB,GAC5CK,EAAsBP,EAAcpzC,QAAU,CAAC,EACrDuzC,EAASjyB,GAAQiyB,EAASjyB,IAAS9+B,EACnCwd,EAAOxd,GAAM0C,EAAQnI,OAAOuH,OAAO,MAAO,CAAC,CAACg9B,QAAOkyB,EAAWG,EAAoBryB,GAAOqyB,EAAoBF,IAAY,IAE3H/0B,EAAOjiC,KAAK2hB,SAAS3gB,SAAQ+lC,IAC3B,MAAMjoC,EAAOioC,EAAQjoC,MAAQmjC,EAAOnjC,KAC9B8jB,EAAYmkB,EAAQnkB,WAAa0zC,GAAax3D,EAAMqJ,GAEpD+uD,GADkBr2C,GAAU/hB,IAAS,CAAC,GACAykB,QAAU,CAAC,EACvDjjB,OAAO4G,KAAKgwD,GAAqBl2D,SAAQm2D,IACvC,MAAMtyB,EApDZ,SAAmC9+B,EAAI6c,GACrC,IAAIiiB,EAAO9+B,EAMX,MALW,YAAPA,EACF8+B,EAAOjiB,EACS,YAAP7c,IACT8+B,EAAqB,MAAdjiB,EAAoB,IAAM,KAE5BiiB,CACT,CA4CmBuyB,CAA0BD,EAAWv0C,GAC5C7c,EAAKghC,EAAQlC,EAAO,WAAaiyB,EAASjyB,IAASA,EACzDthB,EAAOxd,GAAMwd,EAAOxd,IAAOzF,OAAOuH,OAAO,MACzCY,EAAQ8a,EAAOxd,GAAK,CAAC,CAAC8+B,QAAO+xB,EAAa7wD,GAAKmxD,EAAoBC,IAAY,GAC/E,IAEJ72D,OAAO4G,KAAKqc,GAAQviB,SAAQE,IAC1B,MAAMoiB,EAAQC,EAAOriB,GACrBuH,EAAQ6a,EAAO,CAAChC,GAASiC,OAAOD,EAAMxkB,MAAOwiB,GAASgC,OAAO,IAExDC,CACT,CAImB8zC,CAAiBp1B,EAAQ95B,EAC5C,CACA,SAASmvD,GAASt3D,GAIhB,OAHAA,EAAOA,GAAQ,CAAC,GACX2hB,SAAW3hB,EAAK2hB,UAAY,GACjC3hB,EAAK6pC,OAAS7pC,EAAK6pC,QAAU,GACtB7pC,CACT,CAOA,MAAMu3D,GAAW,IAAIx+B,IACfy+B,GAAa,IAAIlqC,IACvB,SAASmqC,GAAWt+B,EAAUu+B,GAC5B,IAAIxwD,EAAOqwD,GAAS5zC,IAAIwV,GAMxB,OALKjyB,IACHA,EAAOwwD,IACPH,GAASr2C,IAAIiY,EAAUjyB,GACvBswD,GAAWjqC,IAAIrmB,IAEVA,CACT,CACA,MAAMywD,GAAa,CAACz2C,EAAKnY,EAAK7H,KAC5B,MAAMioB,EAAOrgB,EAAiBC,EAAK7H,QACtB5B,IAAT6pB,GACFjI,EAAIqM,IAAIpE,EACV,EAEF,MAAMyuC,GACJ,WAAAh5C,CAAYqjB,GACVnjB,KAAK+4C,QAzBT,SAAoB51B,GAIlB,OAHAA,EAASA,GAAU,CAAC,GACbjiC,KAAOs3D,GAASr1B,EAAOjiC,MAC9B02D,GAAYz0B,GACLA,CACT,CAoBmB61B,CAAW71B,GAC1BnjB,KAAKi5C,YAAc,IAAIh/B,IACvBja,KAAKk5C,eAAiB,IAAIj/B,GAC5B,CACA,YAAIhX,GACF,OAAOjD,KAAK+4C,QAAQ91C,QACtB,CACA,QAAIjjB,GACF,OAAOggB,KAAK+4C,QAAQ/4D,IACtB,CACA,QAAIA,CAAKA,GACPggB,KAAK+4C,QAAQ/4D,KAAOA,CACtB,CACA,QAAIkB,GACF,OAAO8e,KAAK+4C,QAAQ73D,IACtB,CACA,QAAIA,CAAKA,GACP8e,KAAK+4C,QAAQ73D,KAAOs3D,GAASt3D,EAC/B,CACA,WAAImI,GACF,OAAO2W,KAAK+4C,QAAQ1vD,OACtB,CACA,WAAIA,CAAQA,GACV2W,KAAK+4C,QAAQ1vD,QAAUA,CACzB,CACA,WAAIib,GACF,OAAOtE,KAAK+4C,QAAQz0C,OACtB,CACA,MAAA0d,GACE,MAAMmB,EAASnjB,KAAK+4C,QACpB/4C,KAAKm5C,aACLvB,GAAYz0B,EACd,CACA,UAAAg2B,GACEn5C,KAAKi5C,YAAYG,QACjBp5C,KAAKk5C,eAAeE,OACtB,CACA,gBAAA/uB,CAAiBgvB,GACf,OAAOV,GAAWU,GAChB,IAAM,CAAC,CACL,YAAYA,IACZ,MAEN,CACA,yBAAAxrB,CAA0BwrB,EAAazrB,GACrC,OAAO+qB,GAAW,GAAGU,gBAA0BzrB,KAC7C,IAAM,CACJ,CACE,YAAYyrB,iBAA2BzrB,IACvC,eAAeA,KAEjB,CACE,YAAYyrB,IACZ,MAGR,CACA,uBAAA7rB,CAAwB6rB,EAAa/rB,GACnC,OAAOqrB,GAAW,GAAGU,KAAe/rB,KAClC,IAAM,CAAC,CACL,YAAY+rB,cAAwB/rB,IACpC,YAAY+rB,IACZ,YAAY/rB,IACZ,MAEN,CACA,eAAAiqB,CAAgBX,GACd,MAAM3vD,EAAK2vD,EAAO3vD,GAElB,OAAO0xD,GAAW,GADL34C,KAAKhgB,eACkBiH,KAClC,IAAM,CAAC,CACL,WAAWA,OACR2vD,EAAO0C,wBAA0B,MAE1C,CACA,aAAAC,CAAcC,EAAWC,GACvB,MAAMR,EAAcj5C,KAAKi5C,YACzB,IAAI1yC,EAAQ0yC,EAAYp0C,IAAI20C,GAK5B,OAJKjzC,IAASkzC,IACZlzC,EAAQ,IAAI0T,IACZg/B,EAAY72C,IAAIo3C,EAAWjzC,IAEtBA,CACT,CACA,eAAA+jB,CAAgBkvB,EAAWE,EAAUD,GACnC,MAAM,QAACpwD,EAAO,KAAErJ,GAAQggB,KAClBuG,EAAQvG,KAAKu5C,cAAcC,EAAWC,GACtC7yB,EAASrgB,EAAM1B,IAAI60C,GACzB,GAAI9yB,EACF,OAAOA,EAET,MAAMhY,EAAS,IAAIJ,IACnBkrC,EAASx3D,SAAQkG,IACXoxD,IACF5qC,EAAOH,IAAI+qC,GACXpxD,EAAKlG,SAAQE,GAAOy2D,GAAWjqC,EAAQ4qC,EAAWp3D,MAEpDgG,EAAKlG,SAAQE,GAAOy2D,GAAWjqC,EAAQvlB,EAASjH,KAChDgG,EAAKlG,SAAQE,GAAOy2D,GAAWjqC,EAAQ7M,GAAU/hB,IAAS,CAAC,EAAGoC,KAC9DgG,EAAKlG,SAAQE,GAAOy2D,GAAWjqC,EAAQpM,GAAUpgB,KACjDgG,EAAKlG,SAAQE,GAAOy2D,GAAWjqC,EAAQ5M,GAAa5f,IAAK,IAE3D,MAAMsK,EAAQvG,MAAMuoB,KAAKE,GAOzB,OANqB,IAAjBliB,EAAMhL,QACRgL,EAAMlK,KAAKhB,OAAOuH,OAAO,OAEvB2vD,GAAW5tD,IAAI4uD,IACjBnzC,EAAMnE,IAAIs3C,EAAUhtD,GAEfA,CACT,CACA,iBAAAitD,GACE,MAAM,QAACtwD,EAAO,KAAErJ,GAAQggB,KACxB,MAAO,CACL3W,EACA0Y,GAAU/hB,IAAS,CAAC,EACpBwiB,GAASK,SAAS7iB,IAAS,CAAC,EAC5B,CAACA,QACDwiB,GACAR,GAEJ,CACA,mBAAAyrB,CAAoB7e,EAAQzZ,EAAO4N,EAAS8L,EAAW,CAAC,KACtD,MAAM8H,EAAS,CAAC+M,SAAS,IACnB,SAAChS,EAAQ,YAAEkoC,GAAeC,GAAY75C,KAAKk5C,eAAgBtqC,EAAQC,GACzE,IAAIxlB,EAAUqoB,EACd,GAsCJ,SAAqB/B,EAAOxa,GAC1B,MAAM,aAAC+b,EAAY,YAAEK,GAAe9O,GAAakN,GACjD,IAAK,MAAM/C,KAAQzX,EAAO,CACxB,MAAM4c,EAAab,EAAatE,GAC1BoF,EAAYT,EAAY3E,GACxB1sB,GAAS8xB,GAAaD,IAAepC,EAAM/C,GACjD,GAAKmF,IAAevnB,EAAWtK,IAAU45D,GAAY55D,KAC/C8xB,GAAa7qB,EAAQjH,GACzB,OAAO,CAEX,CACA,OAAO,CACT,CAlDQ65D,CAAYroC,EAAUvc,GAAQ,CAChCwhB,EAAO+M,SAAU,EAGjBr6B,EAAUonB,GAAeiB,EAFzB3O,EAAUvY,EAAWuY,GAAWA,IAAYA,EACxB/C,KAAKuqB,eAAe3b,EAAQ7L,EAAS62C,GAE3D,CACA,IAAK,MAAMhtC,KAAQzX,EACjBwhB,EAAO/J,GAAQvjB,EAAQujB,GAEzB,OAAO+J,CACT,CACA,cAAA4T,CAAe3b,EAAQ7L,EAAS8L,EAAW,CAAC,IAAK8B,GAC/C,MAAM,SAACe,GAAYmoC,GAAY75C,KAAKk5C,eAAgBtqC,EAAQC,GAC5D,OAAOxnB,EAAS0b,GACZ0N,GAAeiB,EAAU3O,OAASviB,EAAWmwB,GAC7Ce,CACN,EAEF,SAASmoC,GAAYG,EAAeprC,EAAQC,GAC1C,IAAItI,EAAQyzC,EAAcn1C,IAAI+J,GACzBrI,IACHA,EAAQ,IAAI0T,IACZ+/B,EAAc53C,IAAIwM,EAAQrI,IAE5B,MAAM8T,EAAWxL,EAASuC,OAC1B,IAAIwV,EAASrgB,EAAM1B,IAAIwV,GACvB,IAAKuM,EAAQ,CAEXA,EAAS,CACPlV,SAFe/C,GAAgBC,EAAQC,GAGvC+qC,YAAa/qC,EAAS4C,QAAOrkB,IAAMA,EAAE1I,cAAc2rB,SAAS,YAE9D9J,EAAMnE,IAAIiY,EAAUuM,EACtB,CACA,OAAOA,CACT,CACA,MAAMkzB,GAAc55D,GAASmH,EAASnH,IACjCsB,OAAO+hC,oBAAoBrjC,GAAOkgC,QAAO,CAACC,EAAKj+B,IAAQi+B,GAAO71B,EAAWtK,EAAMkC,MAAO,GAiB3F,MAAM63D,GAAkB,CAAC,MAAO,SAAU,OAAQ,QAAS,aAC3D,SAASC,GAAqB7d,EAAUtW,GACtC,MAAoB,QAAbsW,GAAmC,WAAbA,IAAiE,IAAvC4d,GAAgB9wD,QAAQkzC,IAA6B,MAATtW,CACrG,CACA,SAASo0B,GAAcC,EAAIC,GACzB,OAAO,SAAS3vD,EAAGC,GACjB,OAAOD,EAAE0vD,KAAQzvD,EAAEyvD,GACf1vD,EAAE2vD,GAAM1vD,EAAE0vD,GACV3vD,EAAE0vD,GAAMzvD,EAAEyvD,EAChB,CACF,CACA,SAASE,GAAqBv3C,GAC5B,MAAMC,EAAQD,EAAQC,MAChByf,EAAmBzf,EAAM3Z,QAAQqZ,UACvCM,EAAM4qC,cAAc,eACpBjoD,EAAS88B,GAAoBA,EAAiB83B,WAAY,CAACx3C,GAAUC,EACvE,CACA,SAASw3C,GAAoBz3C,GAC3B,MAAMC,EAAQD,EAAQC,MAChByf,EAAmBzf,EAAM3Z,QAAQqZ,UACvC/c,EAAS88B,GAAoBA,EAAiBg4B,WAAY,CAAC13C,GAAUC,EACvE,CACA,SAAS03C,GAAU7vD,GASjB,OARI+qB,MAAqC,iBAAT/qB,EAC9BA,EAAOxH,SAASC,eAAeuH,GACtBA,GAAQA,EAAKnJ,SACtBmJ,EAAOA,EAAK,IAEVA,GAAQA,EAAKwc,SACfxc,EAAOA,EAAKwc,QAEPxc,CACT,CACA,MAAM8vD,GAAY,CAAC,EACbC,GAAYx4D,IAChB,MAAMilB,EAASqzC,GAAUt4D,GACzB,OAAOZ,OAAO+gB,OAAOo4C,IAAWlpC,QAAQ9f,GAAMA,EAAE0V,SAAWA,IAAQuY,KAAK,EAE1E,SAASi7B,GAAgB5wD,EAAKpD,EAAOkoC,GACnC,MAAM3mC,EAAO5G,OAAO4G,KAAK6B,GACzB,IAAK,MAAM7H,KAAOgG,EAAM,CACtB,MAAM0yD,GAAU14D,EAChB,GAAI04D,GAAUj0D,EAAO,CACnB,MAAM3G,EAAQ+J,EAAI7H,UACX6H,EAAI7H,IACP2sC,EAAO,GAAK+rB,EAASj0D,KACvBoD,EAAI6wD,EAAS/rB,GAAQ7uC,EAEzB,CACF,CACF,CAUA,MAAM66D,GACJ,WAAAj7C,CAAYjV,EAAMmwD,GAChB,MAAM73B,EAASnjB,KAAKmjB,OAAS,IAAI21B,GAAOkC,GAClCC,EAAgBP,GAAU7vD,GAC1BqwD,EAAgBN,GAASK,GAC/B,GAAIC,EACF,MAAM,IAAI/pC,MACR,4CAA+C+pC,EAAcj0D,GAA7D,wDAIJ,MAAMoC,EAAU85B,EAAOoH,eAAepH,EAAOw2B,oBAAqB35C,KAAKsH,cACvEtH,KAAKiD,SAAW,IAAKkgB,EAAOlgB,UAphEhC,SAAyBoE,GACvB,OAAKuO,MAAiD,oBAApBulC,iBAAmC9zC,aAAkB8zC,gBAC9EhZ,GAEF0C,EACT,CA+gE4CuW,CAAgBH,IACxDj7C,KAAKiD,SAASi/B,aAAa/e,GAC3B,MAAMpgB,EAAU/C,KAAKiD,SAAS8+B,eAAekZ,EAAe5xD,EAAQ4uB,aAC9D5Q,EAAStE,GAAWA,EAAQsE,OAC5BI,EAASJ,GAAUA,EAAOI,OAC1BrB,EAAQiB,GAAUA,EAAOjB,MAC/BpG,KAAK/Y,GAAKD,IACVgZ,KAAK2D,IAAMZ,EACX/C,KAAKqH,OAASA,EACdrH,KAAKoG,MAAQA,EACbpG,KAAKyH,OAASA,EACdzH,KAAKq7C,SAAWhyD,EAChB2W,KAAKs7C,aAAet7C,KAAKiY,YACzBjY,KAAK0gC,QAAU,GACf1gC,KAAKu7C,UAAY,GACjBv7C,KAAK4lB,aAAUplC,EACfwf,KAAKigC,MAAQ,GACbjgC,KAAKkH,6BAA0B1mB,EAC/Bwf,KAAK6sB,eAAYrsC,EACjBwf,KAAKyf,QAAU,GACfzf,KAAKw7C,gBAAah7D,EAClBwf,KAAKy7C,WAAa,CAAC,EACnBz7C,KAAK07C,0BAAuBl7D,EAC5Bwf,KAAK27C,gBAAkB,GACvB37C,KAAKyE,OAAS,CAAC,EACfzE,KAAK47C,SAAW,IAAItF,GACpBt2C,KAAKulC,SAAW,CAAC,EACjBvlC,KAAK67C,eAAiB,CAAC,EACvB77C,KAAK87C,UAAW,EAChB97C,KAAKiuB,yBAAsBztC,EAC3Bwf,KAAK0nB,cAAWlnC,EAChBwf,KAAK+7C,UD9uKT,SAAkBj2D,EAAI07B,GACpB,IAAIw6B,EACJ,OAAO,YAAY91D,GAOjB,OANIs7B,GACFy6B,aAAaD,GACbA,EAAUE,WAAWp2D,EAAI07B,EAAOt7B,IAEhCJ,EAAGW,MAAMuZ,KAAM9Z,GAEVs7B,CACT,CACF,CCmuKqB26B,EAASn4C,GAAQhE,KAAKgiB,OAAOhe,IAAO3a,EAAQ+yD,aAAe,GAC5Ep8C,KAAKmvB,aAAe,GACpBwrB,GAAU36C,KAAK/Y,IAAM+Y,KAChB+C,GAAYsE,IAIjBgX,GAAS4B,OAAOjgB,KAAM,WAAYs6C,IAClCj8B,GAAS4B,OAAOjgB,KAAM,WAAYw6C,IAClCx6C,KAAKq8C,cACDr8C,KAAK87C,UACP97C,KAAKgiB,SAET,CACA,eAAI/J,GACF,MAAO5uB,SAAS,YAAC4uB,EAAW,oBAAE/T,GAAoB,MAAEkC,EAAK,OAAEqB,EAAM,aAAE6zC,GAAgBt7C,KACnF,OAAK9Y,EAAc+wB,GAGf/T,GAAuBo3C,EAClBA,EAEF7zC,EAASrB,EAAQqB,EAAS,KALxBwQ,CAMX,CACA,QAAI/2B,GACF,OAAO8e,KAAKmjB,OAAOjiC,IACrB,CACA,QAAIA,CAAKA,GACP8e,KAAKmjB,OAAOjiC,KAAOA,CACrB,CACA,WAAImI,GACF,OAAO2W,KAAKq7C,QACd,CACA,WAAIhyD,CAAQA,GACV2W,KAAKmjB,OAAO95B,QAAUA,CACxB,CACA,WAAAgzD,GASE,OARAr8C,KAAK4tC,cAAc,cACf5tC,KAAK3W,QAAQkb,WACfvE,KAAK6iB,SAELlK,GAAY3Y,KAAMA,KAAK3W,QAAQyZ,kBAEjC9C,KAAKs8C,aACLt8C,KAAK4tC,cAAc,aACZ5tC,IACT,CACA,KAAAo5C,GAEE,OADAhyC,GAAYpH,KAAKqH,OAAQrH,KAAK2D,KACvB3D,IACT,CACA,IAAAwgB,GAEE,OADAnC,GAASmC,KAAKxgB,MACPA,IACT,CACA,MAAA6iB,CAAOzc,EAAOqB,GACP4W,GAASkB,QAAQvf,MAGpBA,KAAKu8C,kBAAoB,CAACn2C,QAAOqB,UAFjCzH,KAAKw8C,QAAQp2C,EAAOqB,EAIxB,CACA,OAAA+0C,CAAQp2C,EAAOqB,GACb,MAAMpe,EAAU2W,KAAK3W,QACfge,EAASrH,KAAKqH,OACd4Q,EAAc5uB,EAAQ6a,qBAAuBlE,KAAKiY,YAClDwkC,EAAUz8C,KAAKiD,SAAS6U,eAAezQ,EAAQjB,EAAOqB,EAAQwQ,GAC9DykC,EAAWrzD,EAAQyZ,kBAAoB9C,KAAKiD,SAASC,sBACrDc,EAAOhE,KAAKoG,MAAQ,SAAW,SACrCpG,KAAKoG,MAAQq2C,EAAQr2C,MACrBpG,KAAKyH,OAASg1C,EAAQh1C,OACtBzH,KAAKs7C,aAAet7C,KAAKiY,YACpBU,GAAY3Y,KAAM08C,GAAU,KAGjC18C,KAAK4tC,cAAc,SAAU,CAAChjD,KAAM6xD,IACpC92D,EAAS0D,EAAQszD,SAAU,CAAC38C,KAAMy8C,GAAUz8C,MACxCA,KAAK87C,UACH97C,KAAK+7C,UAAU/3C,IACjBhE,KAAK48C,SAGX,CACA,mBAAAC,GAGE90D,EAFgBiY,KAAK3W,QACSob,QAAU,CAAC,GACrB,CAACq4C,EAAalJ,KAChCkJ,EAAY71D,GAAK2sD,CAAM,GAE3B,CACA,mBAAAmJ,GACE,MAAM1zD,EAAU2W,KAAK3W,QACf2zD,EAAY3zD,EAAQob,OACpBA,EAASzE,KAAKyE,OACdw4C,EAAUz7D,OAAO4G,KAAKqc,GAAQ2b,QAAO,CAACn2B,EAAKhD,KAC/CgD,EAAIhD,IAAM,EACHgD,IACN,CAAC,GACJ,IAAIskB,EAAQ,GACRyuC,IACFzuC,EAAQA,EAAMwhB,OACZvuC,OAAO4G,KAAK40D,GAAWh4D,KAAKiC,IAC1B,MAAM0wD,EAAeqF,EAAU/1D,GACzB8+B,EAAO2xB,GAAczwD,EAAI0wD,GACzBuF,EAAoB,MAATn3B,EACXsM,EAAwB,MAATtM,EACrB,MAAO,CACL18B,QAASsuD,EACTwF,UAAWD,EAAW,YAAc7qB,EAAe,SAAW,OAC9D+qB,MAAOF,EAAW,eAAiB7qB,EAAe,WAAa,SAChE,MAIPtqC,EAAKwmB,GAAQ1jB,IACX,MAAM8sD,EAAe9sD,EAAKxB,QACpBpC,EAAK0wD,EAAa1wD,GAClB8+B,EAAO2xB,GAAczwD,EAAI0wD,GACzB0F,EAAY11D,EAAegwD,EAAa33D,KAAM6K,EAAKuyD,YAC3B58D,IAA1Bm3D,EAAatb,UAA0B6d,GAAqBvC,EAAatb,SAAUtW,KAAUm0B,GAAqBrvD,EAAKsyD,aACzHxF,EAAatb,SAAWxxC,EAAKsyD,WAE/BF,EAAQh2D,IAAM,EACd,IAAIud,EAAQ,KACZ,GAAIvd,KAAMwd,GAAUA,EAAOxd,GAAIjH,OAASq9D,EACtC74C,EAAQC,EAAOxd,OACV,CAELud,EAAQ,IADWswC,GAASW,SAAS4H,GAC7B,CAAe,CACrBp2D,KACAjH,KAAMq9D,EACN15C,IAAK3D,KAAK2D,IACVX,MAAOhD,OAETyE,EAAOD,EAAMvd,IAAMud,CACrB,CACAA,EAAMgnC,KAAKmM,EAActuD,EAAQ,IAEnCtB,EAAKk1D,GAAS,CAACK,EAAYr2D,KACpBq2D,UACI74C,EAAOxd,EAChB,IAEFc,EAAK0c,GAASD,IACZ45B,GAAQ/a,UAAUrjB,KAAMwE,EAAOA,EAAMnb,SACrC+0C,GAAQqC,OAAOzgC,KAAMwE,EAAM,GAE/B,CACA,eAAA+4C,GACE,MAAMl5B,EAAWrkB,KAAKu7C,UAChB3sB,EAAU5uB,KAAK9e,KAAK2hB,SAASnhB,OAC7BitC,EAAUtK,EAAS3iC,OAEzB,GADA2iC,EAAS2L,MAAK,CAACtlC,EAAGC,IAAMD,EAAEvI,MAAQwI,EAAExI,QAChCwsC,EAAUC,EAAS,CACrB,IAAK,IAAI1mC,EAAI0mC,EAAS1mC,EAAIymC,IAAWzmC,EACnC8X,KAAKw9C,oBAAoBt1D,GAE3Bm8B,EAAStd,OAAO6nB,EAASD,EAAUC,EACrC,CACA5uB,KAAK27C,gBAAkBt3B,EAASh+B,MAAM,GAAG2pC,KAAKmqB,GAAc,QAAS,SACvE,CACA,2BAAAsD,GACE,MAAOlC,UAAWl3B,EAAUnjC,MAAM,SAAC2hB,IAAa7C,KAC5CqkB,EAAS3iC,OAASmhB,EAASnhB,eACtBse,KAAK4lB,QAEdvB,EAASniC,SAAQ,CAAC2iC,EAAM1iC,KACmC,IAArD0gB,EAAS4O,QAAOplB,GAAKA,IAAMw4B,EAAK+T,WAAUl3C,QAC5Cse,KAAKw9C,oBAAoBr7D,EAC3B,GAEJ,CACA,wBAAAu7D,GACE,MAAMC,EAAiB,GACjB96C,EAAW7C,KAAK9e,KAAK2hB,SAC3B,IAAI3a,EAAGM,EAEP,IADAwX,KAAKy9C,8BACAv1D,EAAI,EAAGM,EAAOqa,EAASnhB,OAAQwG,EAAIM,EAAMN,IAAK,CACjD,MAAM+/B,EAAUplB,EAAS3a,GACzB,IAAI28B,EAAO7kB,KAAKkpB,eAAehhC,GAC/B,MAAMlI,EAAOioC,EAAQjoC,MAAQggB,KAAKmjB,OAAOnjC,KAWzC,GAVI6kC,EAAK7kC,MAAQ6kC,EAAK7kC,OAASA,IAC7BggB,KAAKw9C,oBAAoBt1D,GACzB28B,EAAO7kB,KAAKkpB,eAAehhC,IAE7B28B,EAAK7kC,KAAOA,EACZ6kC,EAAK/gB,UAAYmkB,EAAQnkB,WAAa0zC,GAAax3D,EAAMggB,KAAK3W,SAC9Dw7B,EAAK+4B,MAAQ31B,EAAQ21B,OAAS,EAC9B/4B,EAAK1iC,MAAQ+F,EACb28B,EAAK1kC,MAAQ,GAAK8nC,EAAQ9nC,MAC1B0kC,EAAK7B,QAAUhjB,KAAK21B,iBAAiBztC,GACjC28B,EAAKY,WACPZ,EAAKY,WAAWuC,YAAY9/B,GAC5B28B,EAAKY,WAAWoC,iBACX,CACL,MAAMg2B,EAAkB/I,GAASO,cAAcr1D,IACzC,mBAAC8pC,EAAkB,gBAAEuD,GAAmB7qB,GAASK,SAAS7iB,GAChEwB,OAAOge,OAAOq+C,EAAgBz3D,UAAW,CACvCinC,gBAAiBynB,GAASS,WAAWloB,GACrCvD,mBAAoBA,GAAsBgrB,GAASS,WAAWzrB,KAEhEjF,EAAKY,WAAa,IAAIo4B,EAAgB79C,KAAM9X,GAC5Cy1D,EAAen7D,KAAKqiC,EAAKY,WAC3B,CACF,CAEA,OADAzlB,KAAKu9C,kBACEI,CACT,CACA,cAAAG,GACE/1D,EAAKiY,KAAK9e,KAAK2hB,UAAU,CAAColB,EAASt/B,KACjCqX,KAAKkpB,eAAevgC,GAAc88B,WAAW4D,OAAO,GACnDrpB,KACL,CACA,KAAAqpB,GACErpB,KAAK89C,iBACL99C,KAAK4tC,cAAc,QACrB,CACA,MAAA5rB,CAAOhe,GACL,MAAMmf,EAASnjB,KAAKmjB,OACpBA,EAAOnB,SACP,MAAM34B,EAAU2W,KAAKq7C,SAAWl4B,EAAOoH,eAAepH,EAAOw2B,oBAAqB35C,KAAKsH,cACjFy2C,EAAgB/9C,KAAKiuB,qBAAuB5kC,EAAQqZ,UAK1D,GAJA1C,KAAKg+C,gBACLh+C,KAAKi+C,sBACLj+C,KAAKk+C,uBACLl+C,KAAK47C,SAAS9E,cACuD,IAAjE92C,KAAK4tC,cAAc,eAAgB,CAAC5pC,OAAM6yC,YAAY,IACxD,OAEF,MAAM8G,EAAiB39C,KAAK09C,2BAC5B19C,KAAK4tC,cAAc,wBACnB,IAAI9M,EAAa,EACjB,IAAK,IAAI54C,EAAI,EAAGM,EAAOwX,KAAK9e,KAAK2hB,SAASnhB,OAAQwG,EAAIM,EAAMN,IAAK,CAC/D,MAAM,WAACu9B,GAAczlB,KAAKkpB,eAAehhC,GACnCmhC,GAAS00B,IAAyD,IAAxCJ,EAAex0D,QAAQs8B,GACvDA,EAAWsE,sBAAsBV,GACjCyX,EAAax+C,KAAKuK,KAAK44B,EAAW6G,iBAAkBwU,EACtD,CACAA,EAAa9gC,KAAK08B,YAAcrzC,EAAQu1C,OAAO4B,YAAcM,EAAa,EAC1E9gC,KAAKm+C,cAAcrd,GACdid,GACHh2D,EAAK41D,GAAiBl4B,IACpBA,EAAW4D,OAAO,IAGtBrpB,KAAKo+C,gBAAgBp6C,GACrBhE,KAAK4tC,cAAc,cAAe,CAAC5pC,SACnChE,KAAK0gC,QAAQ1Q,KAAKmqB,GAAc,IAAK,SACrC,MAAM,QAAC16B,EAAO,WAAE+7B,GAAcx7C,KAC1Bw7C,EACFx7C,KAAKq+C,cAAc7C,GAAY,GACtB/7B,EAAQ/9B,QACjBse,KAAKs+C,mBAAmB7+B,EAASA,GAAS,GAE5Czf,KAAK48C,QACP,CACA,aAAAoB,GACEj2D,EAAKiY,KAAKyE,QAASD,IACjB45B,GAAQwC,UAAU5gC,KAAMwE,EAAM,IAEhCxE,KAAK68C,sBACL78C,KAAK+8C,qBACP,CACA,mBAAAkB,GACE,MAAM50D,EAAU2W,KAAK3W,QACfk1D,EAAiB,IAAI/vC,IAAIhtB,OAAO4G,KAAK4X,KAAKy7C,aAC1C+C,EAAY,IAAIhwC,IAAInlB,EAAQ+Z,QAC7B3Y,EAAU8zD,EAAgBC,MAAgBx+C,KAAK07C,uBAAyBryD,EAAQkb,aACnFvE,KAAKy+C,eACLz+C,KAAKs8C,aAET,CACA,oBAAA4B,GACE,MAAM,eAACrC,GAAkB77C,KACnB0+C,EAAU1+C,KAAK2+C,0BAA4B,GACjD,IAAK,MAAM,OAACn8B,EAAM,MAAE37B,EAAK,MAAEq1B,KAAUwiC,EAAS,CAE5C7D,GAAgBgB,EAAgBh1D,EADR,oBAAX27B,GAAgCtG,EAAQA,EAEvD,CACF,CACA,sBAAAyiC,GACE,MAAMxvB,EAAenvB,KAAKmvB,aAC1B,IAAKA,IAAiBA,EAAaztC,OACjC,OAEFse,KAAKmvB,aAAe,GACpB,MAAMyvB,EAAe5+C,KAAK9e,KAAK2hB,SAASnhB,OAClCm9D,EAAW90D,GAAQ,IAAIykB,IAC3B2gB,EACG1d,QAAO9f,GAAKA,EAAE,KAAO5H,IACrB/E,KAAI,CAAC2M,EAAGzJ,IAAMA,EAAI,IAAMyJ,EAAEoV,OAAO,GAAGqK,KAAK,QAExC0tC,EAAYD,EAAQ,GAC1B,IAAK,IAAI32D,EAAI,EAAGA,EAAI02D,EAAc12D,IAChC,IAAKuC,EAAUq0D,EAAWD,EAAQ32D,IAChC,OAGJ,OAAO/B,MAAMuoB,KAAKowC,GACf95D,KAAI2M,GAAKA,EAAEwQ,MAAM,OACjBnd,KAAI0F,IAAK,CAAE83B,OAAQ93B,EAAE,GAAI7D,OAAQ6D,EAAE,GAAIwxB,OAAQxxB,EAAE,MACtD,CACA,aAAAyzD,CAAcrd,GACZ,IAA+D,IAA3D9gC,KAAK4tC,cAAc,eAAgB,CAACiJ,YAAY,IAClD,OAEFzY,GAAQpc,OAAOhiB,KAAMA,KAAKoG,MAAOpG,KAAKyH,OAAQq5B,GAC9C,MAAM93B,EAAOhJ,KAAK6sB,UACZkyB,EAAS/1C,EAAK5C,OAAS,GAAK4C,EAAKvB,QAAU,EACjDzH,KAAK0gC,QAAU,GACf34C,EAAKiY,KAAKigC,OAAQ/oB,IACZ6nC,GAA2B,cAAjB7nC,EAAImlB,WAGdnlB,EAAImM,WACNnM,EAAImM,YAENrjB,KAAK0gC,QAAQl+C,QAAQ00B,EAAIwpB,WAAU,GAClC1gC,MACHA,KAAK0gC,QAAQx+C,SAAQ,CAAC2I,EAAM1I,KAC1B0I,EAAKm0D,KAAO78D,CAAK,IAEnB6d,KAAK4tC,cAAc,cACrB,CACA,eAAAwQ,CAAgBp6C,GACd,IAA6E,IAAzEhE,KAAK4tC,cAAc,uBAAwB,CAAC5pC,OAAM6yC,YAAY,IAAlE,CAGA,IAAK,IAAI3uD,EAAI,EAAGM,EAAOwX,KAAK9e,KAAK2hB,SAASnhB,OAAQwG,EAAIM,IAAQN,EAC5D8X,KAAKkpB,eAAehhC,GAAGu9B,WAAWpC,YAEpC,IAAK,IAAIn7B,EAAI,EAAGM,EAAOwX,KAAK9e,KAAK2hB,SAASnhB,OAAQwG,EAAIM,IAAQN,EAC5D8X,KAAKi/C,eAAe/2D,EAAGsC,EAAWwZ,GAAQA,EAAK,CAACrb,aAAcT,IAAM8b,GAEtEhE,KAAK4tC,cAAc,sBAAuB,CAAC5pC,QAP3C,CAQF,CACA,cAAAi7C,CAAe98D,EAAO6hB,GACpB,MAAM6gB,EAAO7kB,KAAKkpB,eAAe/mC,GAC3B+D,EAAO,CAAC2+B,OAAM1iC,QAAO6hB,OAAM6yC,YAAY,IACW,IAApD72C,KAAK4tC,cAAc,sBAAuB1nD,KAG9C2+B,EAAKY,WAAWtG,QAAQnb,GACxB9d,EAAK2wD,YAAa,EAClB72C,KAAK4tC,cAAc,qBAAsB1nD,GAC3C,CACA,MAAA02D,IACiE,IAA3D58C,KAAK4tC,cAAc,eAAgB,CAACiJ,YAAY,MAGhDx4B,GAASvzB,IAAIkV,MACXA,KAAK87C,WAAaz9B,GAASkB,QAAQvf,OACrCqe,GAASx3B,MAAMmZ,OAGjBA,KAAKwf,OACL86B,GAAqB,CAACt3C,MAAOhD,QAEjC,CACA,IAAAwf,GACE,IAAIt3B,EACJ,GAAI8X,KAAKu8C,kBAAmB,CAC1B,MAAM,MAACn2C,EAAK,OAAEqB,GAAUzH,KAAKu8C,kBAC7Bv8C,KAAKw8C,QAAQp2C,EAAOqB,GACpBzH,KAAKu8C,kBAAoB,IAC3B,CAEA,GADAv8C,KAAKo5C,QACDp5C,KAAKoG,OAAS,GAAKpG,KAAKyH,QAAU,EACpC,OAEF,IAA6D,IAAzDzH,KAAK4tC,cAAc,aAAc,CAACiJ,YAAY,IAChD,OAEF,MAAMqI,EAASl/C,KAAK0gC,QACpB,IAAKx4C,EAAI,EAAGA,EAAIg3D,EAAOx9D,QAAUw9D,EAAOh3D,GAAGy4C,GAAK,IAAKz4C,EACnDg3D,EAAOh3D,GAAGs3B,KAAKxf,KAAK6sB,WAGtB,IADA7sB,KAAKm/C,gBACEj3D,EAAIg3D,EAAOx9D,SAAUwG,EAC1Bg3D,EAAOh3D,GAAGs3B,KAAKxf,KAAK6sB,WAEtB7sB,KAAK4tC,cAAc,YACrB,CACA,sBAAAtpB,CAAuBF,GACrB,MAAMC,EAAWrkB,KAAK27C,gBAChBhlC,EAAS,GACf,IAAIzuB,EAAGM,EACP,IAAKN,EAAI,EAAGM,EAAO67B,EAAS3iC,OAAQwG,EAAIM,IAAQN,EAAG,CACjD,MAAM28B,EAAOR,EAASn8B,GACjBk8B,IAAiBS,EAAK7B,SACzBrM,EAAOn0B,KAAKqiC,EAEhB,CACA,OAAOlO,CACT,CACA,4BAAA4lB,GACE,OAAOv8B,KAAKskB,wBAAuB,EACrC,CACA,aAAA66B,GACE,IAAqE,IAAjEn/C,KAAK4tC,cAAc,qBAAsB,CAACiJ,YAAY,IACxD,OAEF,MAAMxyB,EAAWrkB,KAAKu8B,+BACtB,IAAK,IAAIr0C,EAAIm8B,EAAS3iC,OAAS,EAAGwG,GAAK,IAAKA,EAC1C8X,KAAKo/C,aAAa/6B,EAASn8B,IAE7B8X,KAAK4tC,cAAc,oBACrB,CACA,YAAAwR,CAAav6B,GACX,MAAMlhB,EAAM3D,KAAK2D,IACX4F,EAAOsb,EAAK4H,MACZ4yB,GAAW91C,EAAKmjB,SAChB1jB,EAAOhJ,KAAK6sB,UACZ3mC,EAAO,CACX2+B,OACA1iC,MAAO0iC,EAAK1iC,MACZ00D,YAAY,IAEwC,IAAlD72C,KAAK4tC,cAAc,oBAAqB1nD,KAGxCm5D,GACF/1C,GAAS3F,EAAK,CACZuF,MAAoB,IAAdK,EAAKL,KAAiB,EAAIF,EAAKE,KAAOK,EAAKL,KACjDC,OAAsB,IAAfI,EAAKJ,MAAkBnJ,KAAKoG,MAAQ4C,EAAKG,MAAQI,EAAKJ,MAC7DC,KAAkB,IAAbG,EAAKH,IAAgB,EAAIJ,EAAKI,IAAMG,EAAKH,IAC9CC,QAAwB,IAAhBE,EAAKF,OAAmBrJ,KAAKyH,OAASuB,EAAKK,OAASE,EAAKF,SAGrEwb,EAAKY,WAAWjG,OACZ6/B,GACF71C,GAAW7F,GAEbzd,EAAK2wD,YAAa,EAClB72C,KAAK4tC,cAAc,mBAAoB1nD,GACzC,CACA,yBAAAo5D,CAA0BnyD,EAAG6W,EAAM3a,EAASozC,GAC1C,MAAMja,EAASob,GAAYC,MAAM75B,GACjC,MAAsB,mBAAXwe,EACFA,EAAOxiB,KAAM7S,EAAG9D,EAASozC,GAE3B,EACT,CACA,cAAAvT,CAAevgC,GACb,MAAMs/B,EAAUjoB,KAAK9e,KAAK2hB,SAASla,GAC7B07B,EAAWrkB,KAAKu7C,UACtB,IAAI12B,EAAOR,EAAS5S,QAAOplB,GAAKA,GAAKA,EAAEusC,WAAa3Q,IAASrI,MAkB7D,OAjBKiF,IACHA,EAAO,CACL7kC,KAAM,KACNkB,KAAM,GACN+mC,QAAS,KACTxC,WAAY,KACZmG,OAAQ,KACRvD,QAAS,KACTE,QAAS,KACTq1B,MAAO31B,GAAWA,EAAQ21B,OAAS,EACnCz7D,MAAOwG,EACPiwC,SAAU3Q,EACVxB,QAAS,GACTiE,SAAS,GAEXrG,EAAS7hC,KAAKqiC,IAETA,CACT,CACA,UAAAvd,GACE,OAAOtH,KAAK0nB,WAAa1nB,KAAK0nB,SAAWpa,GAAc,KAAM,CAACtK,MAAOhD,KAAMhgB,KAAM,UACnF,CACA,sBAAAo6C,GACE,OAAOp6B,KAAKu8B,+BAA+B76C,MAC7C,CACA,gBAAAi0C,CAAiBhtC,GACf,MAAMs/B,EAAUjoB,KAAK9e,KAAK2hB,SAASla,GACnC,IAAKs/B,EACH,OAAO,EAET,MAAMpD,EAAO7kB,KAAKkpB,eAAevgC,GACjC,MAA8B,kBAAhBk8B,EAAK+G,QAAwB/G,EAAK+G,QAAU3D,EAAQ2D,MACpE,CACA,oBAAA2zB,CAAqB52D,EAAcq6B,GACpBhjB,KAAKkpB,eAAevgC,GAC5BijC,QAAU5I,CACjB,CACA,oBAAAwV,CAAqBr2C,GACnB6d,KAAK67C,eAAe15D,IAAU6d,KAAK67C,eAAe15D,EACpD,CACA,iBAAA4xC,CAAkB5xC,GAChB,OAAQ6d,KAAK67C,eAAe15D,EAC9B,CACA,iBAAAq9D,CAAkB72D,EAAcqkC,EAAWhK,GACzC,MAAMhf,EAAOgf,EAAU,OAAS,OAC1B6B,EAAO7kB,KAAKkpB,eAAevgC,GAC3Bg2B,EAAQkG,EAAKY,WAAWkI,wBAAmBntC,EAAWwjB,GACxDzZ,EAAQyiC,IACVnI,EAAK3jC,KAAK8rC,GAAWpB,QAAU5I,EAC/BhjB,KAAKgiB,WAELhiB,KAAKu/C,qBAAqB52D,EAAcq6B,GACxCrE,EAAMqD,OAAO6C,EAAM,CAAC7B,YACpBhjB,KAAKgiB,QAAQre,GAAQA,EAAIhb,eAAiBA,EAAeqb,OAAOxjB,IAEpE,CACA,IAAAyiC,CAAKt6B,EAAcqkC,GACjBhtB,KAAKw/C,kBAAkB72D,EAAcqkC,GAAW,EAClD,CACA,IAAAlK,CAAKn6B,EAAcqkC,GACjBhtB,KAAKw/C,kBAAkB72D,EAAcqkC,GAAW,EAClD,CACA,mBAAAwwB,CAAoB70D,GAClB,MAAMk8B,EAAO7kB,KAAKu7C,UAAU5yD,GACxBk8B,GAAQA,EAAKY,YACfZ,EAAKY,WAAW6D,kBAEXtpB,KAAKu7C,UAAU5yD,EACxB,CACA,KAAA82D,GACE,IAAIv3D,EAAGM,EAGP,IAFAwX,KAAKwgB,OACLnC,GAASqC,OAAO1gB,MACX9X,EAAI,EAAGM,EAAOwX,KAAK9e,KAAK2hB,SAASnhB,OAAQwG,EAAIM,IAAQN,EACxD8X,KAAKw9C,oBAAoBt1D,EAE7B,CACA,OAAAw3D,GACE1/C,KAAK4tC,cAAc,iBACnB,MAAM,OAACvmC,EAAM,IAAE1D,GAAO3D,KACtBA,KAAKy/C,QACLz/C,KAAKmjB,OAAOg2B,aACR9xC,IACFrH,KAAKy+C,eACLr3C,GAAYC,EAAQ1D,GACpB3D,KAAKiD,SAAS++B,eAAer+B,GAC7B3D,KAAKqH,OAAS,KACdrH,KAAK2D,IAAM,MAEb3D,KAAK4tC,cAAc,kBACZ+M,GAAU36C,KAAK/Y,IACtB+Y,KAAK4tC,cAAc,eACrB,CACA,aAAA+R,IAAiBz5D,GACf,OAAO8Z,KAAKqH,OAAOu4C,aAAa15D,EAClC,CACA,UAAAo2D,GACEt8C,KAAK6/C,iBACD7/C,KAAK3W,QAAQkb,WACfvE,KAAK8/C,uBAEL9/C,KAAK87C,UAAW,CAEpB,CACA,cAAA+D,GACE,MAAMxxC,EAAYrO,KAAKy7C,WACjBx4C,EAAWjD,KAAKiD,SAChB88C,EAAO,CAAC//D,EAAMkuB,KAClBjL,EAASoW,iBAAiBrZ,KAAMhgB,EAAMkuB,GACtCG,EAAUruB,GAAQkuB,CAAQ,EAEtBA,EAAW,CAAC/gB,EAAGd,EAAGC,KACtBa,EAAEkqB,QAAUhrB,EACZc,EAAEmqB,QAAUhrB,EACZ0T,KAAKq+C,cAAclxD,EAAE,EAEvBpF,EAAKiY,KAAK3W,QAAQ+Z,QAASpjB,GAAS+/D,EAAK//D,EAAMkuB,IACjD,CACA,oBAAA4xC,GACO9/C,KAAK07C,uBACR17C,KAAK07C,qBAAuB,CAAC,GAE/B,MAAMrtC,EAAYrO,KAAK07C,qBACjBz4C,EAAWjD,KAAKiD,SAChB88C,EAAO,CAAC//D,EAAMkuB,KAClBjL,EAASoW,iBAAiBrZ,KAAMhgB,EAAMkuB,GACtCG,EAAUruB,GAAQkuB,CAAQ,EAEtB8xC,EAAU,CAAChgE,EAAMkuB,KACjBG,EAAUruB,KACZijB,EAASqW,oBAAoBtZ,KAAMhgB,EAAMkuB,UAClCG,EAAUruB,GACnB,EAEIkuB,EAAW,CAAC9H,EAAOqB,KACnBzH,KAAKqH,QACPrH,KAAK6iB,OAAOzc,EAAOqB,EACrB,EAEF,IAAIw4C,EACJ,MAAMnE,EAAW,KACfkE,EAAQ,SAAUlE,GAClB97C,KAAK87C,UAAW,EAChB97C,KAAK6iB,SACLk9B,EAAK,SAAU7xC,GACf6xC,EAAK,SAAUE,EAAS,EAE1BA,EAAW,KACTjgD,KAAK87C,UAAW,EAChBkE,EAAQ,SAAU9xC,GAClBlO,KAAKy/C,QACLz/C,KAAKw8C,QAAQ,EAAG,GAChBuD,EAAK,SAAUjE,EAAS,EAEtB74C,EAASg/B,WAAWjiC,KAAKqH,QAC3By0C,IAEAmE,GAEJ,CACA,YAAAxB,GACE12D,EAAKiY,KAAKy7C,YAAY,CAACvtC,EAAUluB,KAC/BggB,KAAKiD,SAASqW,oBAAoBtZ,KAAMhgB,EAAMkuB,EAAS,IAEzDlO,KAAKy7C,WAAa,CAAC,EACnB1zD,EAAKiY,KAAK07C,sBAAsB,CAACxtC,EAAUluB,KACzCggB,KAAKiD,SAASqW,oBAAoBtZ,KAAMhgB,EAAMkuB,EAAS,IAEzDlO,KAAK07C,0BAAuBl7D,CAC9B,CACA,gBAAA0/D,CAAiB3xC,EAAOvK,EAAMwjC,GAC5B,MAAM53B,EAAS43B,EAAU,MAAQ,SACjC,IAAI3iB,EAAMh6B,EAAM3C,EAAGM,EAKnB,IAJa,YAATwb,IACF6gB,EAAO7kB,KAAKkpB,eAAe3a,EAAM,GAAG5lB,cACpCk8B,EAAKY,WAAW,IAAM7V,EAAS,wBAE5B1nB,EAAI,EAAGM,EAAO+lB,EAAM7sB,OAAQwG,EAAIM,IAAQN,EAAG,CAC9C2C,EAAO0jB,EAAMrmB,GACb,MAAMu9B,EAAa56B,GAAQmV,KAAKkpB,eAAer+B,EAAKlC,cAAc88B,WAC9DA,GACFA,EAAW7V,EAAS,cAAc/kB,EAAKyrB,QAASzrB,EAAKlC,aAAckC,EAAK1I,MAE5E,CACF,CACA,iBAAAg+D,GACE,OAAOngD,KAAKyf,SAAW,EACzB,CACA,iBAAA2gC,CAAkBC,GAChB,MAAMC,EAAatgD,KAAKyf,SAAW,GAC7BsC,EAASs+B,EAAer7D,KAAI,EAAE2D,eAAcxG,YAChD,MAAM0iC,EAAO7kB,KAAKkpB,eAAevgC,GACjC,IAAKk8B,EACH,MAAM,IAAI1T,MAAM,6BAA+BxoB,GAEjD,MAAO,CACLA,eACA2tB,QAASuO,EAAK3jC,KAAKiB,GACnBA,QACD,KAEckG,EAAe05B,EAAQu+B,KAEtCtgD,KAAKyf,QAAUsC,EACf/hB,KAAKw7C,WAAa,KAClBx7C,KAAKs+C,mBAAmBv8B,EAAQu+B,GAEpC,CACA,aAAA1S,CAAc6I,EAAMvwD,EAAMurB,GACxB,OAAOzR,KAAK47C,SAASpF,OAAOx2C,KAAMy2C,EAAMvwD,EAAMurB,EAChD,CACA,kBAAA6sC,CAAmBv8B,EAAQu+B,EAAYC,GACrC,MAAMC,EAAexgD,KAAK3W,QAAQoa,MAC5B+3B,EAAO,CAAC9wC,EAAGC,IAAMD,EAAE+mB,QAAOplB,IAAM1B,EAAE2sD,MAAKhrD,GAAKD,EAAE1D,eAAiB2D,EAAE3D,cAAgB0D,EAAElK,QAAUmK,EAAEnK,UAC/Fs+D,EAAcjlB,EAAK8kB,EAAYv+B,GAC/B2+B,EAAYH,EAASx+B,EAASyZ,EAAKzZ,EAAQu+B,GAC7CG,EAAY/+D,QACdse,KAAKkgD,iBAAiBO,EAAaD,EAAax8C,MAAM,GAEpD08C,EAAUh/D,QAAU8+D,EAAax8C,MACnChE,KAAKkgD,iBAAiBQ,EAAWF,EAAax8C,MAAM,EAExD,CACA,aAAAq6C,CAAclxD,EAAGozD,GACf,MAAMr6D,EAAO,CACXg6B,MAAO/yB,EACPozD,SACA1J,YAAY,EACZ8J,YAAa73C,GAAe3b,EAAG6S,KAAK6sB,UAAW7sB,KAAK08B,cAEhDkkB,EAAehK,IAAYA,EAAOvtD,QAAQ+Z,QAAUpD,KAAK3W,QAAQ+Z,QAAQiN,SAASljB,EAAEgqB,OAAOn3B,MACjG,IAA6D,IAAzDggB,KAAK4tC,cAAc,cAAe1nD,EAAM06D,GAC1C,OAEF,MAAMtnB,EAAUt5B,KAAK6gD,aAAa1zD,EAAGozD,EAAQr6D,EAAKy6D,aAMlD,OALAz6D,EAAK2wD,YAAa,EAClB72C,KAAK4tC,cAAc,aAAc1nD,EAAM06D,IACnCtnB,GAAWpzC,EAAKozC,UAClBt5B,KAAK48C,SAEA58C,IACT,CACA,YAAA6gD,CAAa1zD,EAAGozD,EAAQI,GACtB,MAAOlhC,QAAS6gC,EAAa,GAAE,QAAEj3D,GAAW2W,KACtCy8B,EAAmB8jB,EACnBx+B,EAAS/hB,KAAK8gD,mBAAmB3zD,EAAGmzD,EAAYK,EAAalkB,GAC7DskB,EDvtLV,SAAuB5zD,GACrB,MAAkB,YAAXA,EAAEnN,MAAiC,UAAXmN,EAAEnN,MAA+B,gBAAXmN,EAAEnN,IACzD,CCqtLoBghE,CAAc7zD,GACxB8zD,EA1uBV,SAA4B9zD,EAAG8zD,EAAWN,EAAaI,GACrD,OAAKJ,GAA0B,aAAXxzD,EAAEnN,KAGlB+gE,EACKE,EAEF9zD,EALE,IAMX,CAkuBsB+zD,CAAmB/zD,EAAG6S,KAAKw7C,WAAYmF,EAAaI,GAClEJ,IACF3gD,KAAKw7C,WAAa,KAClB71D,EAAS0D,EAAQ8a,QAAS,CAAChX,EAAG40B,EAAQ/hB,MAAOA,MACzC+gD,GACFp7D,EAAS0D,EAAQ+a,QAAS,CAACjX,EAAG40B,EAAQ/hB,MAAOA,OAGjD,MAAMs5B,GAAWjxC,EAAe05B,EAAQu+B,GAMxC,OALIhnB,GAAWinB,KACbvgD,KAAKyf,QAAUsC,EACf/hB,KAAKs+C,mBAAmBv8B,EAAQu+B,EAAYC,IAE9CvgD,KAAKw7C,WAAayF,EACX3nB,CACT,CACA,kBAAAwnB,CAAmB3zD,EAAGmzD,EAAYK,EAAalkB,GAC7C,GAAe,aAAXtvC,EAAEnN,KACJ,MAAO,GAET,IAAK2gE,EACH,OAAOL,EAET,MAAME,EAAexgD,KAAK3W,QAAQoa,MAClC,OAAOzD,KAAKs/C,0BAA0BnyD,EAAGqzD,EAAax8C,KAAMw8C,EAAc/jB,EAC5E,EAEF,MAAM0kB,GAAoB,IAAMp5D,EAAKgzD,GAAMJ,WAAY33C,GAAUA,EAAM44C,SAAS9E,eAC1EtxC,IAAa,EA0CnB,SAAS47C,GAAQz9C,EAAK2S,EAASigB,GAC7B,MAAM,WAACD,EAAU,YAAE+qB,EAAW,EAAEh1D,EAAC,EAAEC,EAAC,YAAE+oC,EAAW,YAAED,GAAe9e,EAClE,IAAIgrC,EAAcD,EAAchsB,EAChC1xB,EAAIyE,YACJzE,EAAI0E,IAAIhc,EAAGC,EAAG+oC,EAAaiB,EAAagrB,EAAa/qB,EAAW+qB,GAC5DlsB,EAAcisB,GAChBC,EAAcD,EAAcjsB,EAC5BzxB,EAAI0E,IAAIhc,EAAGC,EAAG8oC,EAAamB,EAAW+qB,EAAahrB,EAAagrB,GAAa,IAE7E39C,EAAI0E,IAAIhc,EAAGC,EAAG+0D,EAAa9qB,EAAWlrC,EAASirC,EAAajrC,GAE9DsY,EAAI2E,YACJ3E,EAAI4F,MACN,CAIA,SAASg4C,GAAoBl5C,EAAK+sB,EAAaC,EAAamsB,GAC1D,MAAMC,EAHCh1C,GAGmBpE,EAAIhf,QAAQq4D,aAHN,CAAC,aAAc,WAAY,aAAc,aAIzE,MAAMC,GAAiBtsB,EAAcD,GAAe,EAC9CwsB,EAAat/D,KAAKsK,IAAI+0D,EAAeH,EAAapsB,EAAc,GAChEysB,EAAqB5gD,IACzB,MAAM6gD,GAAiBzsB,EAAc/yC,KAAKsK,IAAI+0D,EAAe1gD,IAAQugD,EAAa,EAClF,OAAO7yD,GAAYsS,EAAK,EAAG3e,KAAKsK,IAAI+0D,EAAeG,GAAe,EAEpE,MAAO,CACLC,WAAYF,EAAkBJ,EAAEM,YAChCC,SAAUH,EAAkBJ,EAAEO,UAC9BC,WAAYtzD,GAAY8yD,EAAEQ,WAAY,EAAGL,GACzCM,SAAUvzD,GAAY8yD,EAAES,SAAU,EAAGN,GAEzC,CACA,SAASO,GAAWhwD,EAAGiwD,EAAO/1D,EAAGC,GAC/B,MAAO,CACLD,EAAGA,EAAI8F,EAAI7P,KAAK2N,IAAImyD,GACpB91D,EAAGA,EAAI6F,EAAI7P,KAAK0M,IAAIozD,GAExB,CACA,SAASC,GAAQ1+C,EAAK2S,EAASwe,EAAQe,EAAS/uC,GAC9C,MAAM,EAACuF,EAAC,EAAEC,EAAGgqC,WAAYzvC,EAAK,YAAEw6D,EAAajsB,YAAaktB,GAAUhsC,EAC9D+e,EAAc/yC,KAAKuK,IAAIypB,EAAQ+e,YAAcQ,EAAUf,EAASusB,EAAa,GAC7EjsB,EAAcktB,EAAS,EAAIA,EAASzsB,EAAUf,EAASusB,EAAc,EAC3E,IAAIkB,EAAgB,EACpB,MAAMzhD,EAAQha,EAAMD,EACpB,GAAIgvC,EAAS,CACX,MAEM2sB,IAFuBF,EAAS,EAAIA,EAASzsB,EAAU,IAChCR,EAAc,EAAIA,EAAcQ,EAAU,IACI,EAE3E0sB,GAAiBzhD,GAD4B,IAAvB0hD,EAA4B1hD,EAAQ0hD,GAAuBA,EAAqB3sB,GAAW/0B,IACvE,CAC5C,CACA,MACM2hD,GAAe3hD,EADRxe,KAAKuK,IAAI,KAAOiU,EAAQu0B,EAAcP,EAAS/pC,GAAMsqC,GAC7B,EAC/BiB,EAAazvC,EAAQ47D,EAAcF,EACnChsB,EAAWzvC,EAAM27D,EAAcF,GAC/B,WAACR,EAAU,SAAEC,EAAQ,WAAEC,EAAU,SAAEC,GAAYX,GAAoBjrC,EAAS8e,EAAaC,EAAakB,EAAWD,GACjHosB,EAA2BrtB,EAAc0sB,EACzCY,EAAyBttB,EAAc2sB,EACvCY,EAA0BtsB,EAAayrB,EAAaW,EACpDG,EAAwBtsB,EAAWyrB,EAAWW,EAC9CG,EAA2B1tB,EAAc6sB,EACzCc,EAAyB3tB,EAAc8sB,EACvCc,EAA0B1sB,EAAa2rB,EAAaa,EACpDG,EAAwB1sB,EAAW2rB,EAAWa,EAGpD,GAFAp/C,EAAIyE,YACJzE,EAAI0E,IAAIhc,EAAGC,EAAG+oC,EAAautB,EAAyBC,GAChDb,EAAW,EAAG,CAChB,MAAMkB,EAAUf,GAAWQ,EAAwBE,EAAuBx2D,EAAGC,GAC7EqX,EAAI0E,IAAI66C,EAAQ72D,EAAG62D,EAAQ52D,EAAG01D,EAAUa,EAAuBtsB,EAAWlrC,EAC5E,CACA,MAAM83D,EAAKhB,GAAWY,EAAwBxsB,EAAUlqC,EAAGC,GAE3D,GADAqX,EAAI6E,OAAO26C,EAAG92D,EAAG82D,EAAG72D,GAChB41D,EAAW,EAAG,CAChB,MAAMgB,EAAUf,GAAWY,EAAwBE,EAAuB52D,EAAGC,GAC7EqX,EAAI0E,IAAI66C,EAAQ72D,EAAG62D,EAAQ52D,EAAG41D,EAAU3rB,EAAWlrC,EAAS43D,EAAwB3gE,KAAKyI,GAC3F,CAEA,GADA4Y,EAAI0E,IAAIhc,EAAGC,EAAG8oC,EAAamB,EAAY2rB,EAAW9sB,EAAckB,EAAc2rB,EAAa7sB,GAAc,GACrG6sB,EAAa,EAAG,CAClB,MAAMiB,EAAUf,GAAWW,EAA0BE,EAAyB32D,EAAGC,GACjFqX,EAAI0E,IAAI66C,EAAQ72D,EAAG62D,EAAQ52D,EAAG21D,EAAYe,EAA0B1gE,KAAKyI,GAAIurC,EAAajrC,EAC5F,CACA,MAAM+3D,EAAKjB,GAAWO,EAA0BpsB,EAAYjqC,EAAGC,GAE/D,GADAqX,EAAI6E,OAAO46C,EAAG/2D,EAAG+2D,EAAG92D,GAChBy1D,EAAa,EAAG,CAClB,MAAMmB,EAAUf,GAAWO,EAA0BE,EAAyBv2D,EAAGC,GACjFqX,EAAI0E,IAAI66C,EAAQ72D,EAAG62D,EAAQ52D,EAAGy1D,EAAYzrB,EAAajrC,EAASu3D,EAClE,CACAj/C,EAAI2E,WACN,CAuCA,SAASkgC,GAAW7kC,EAAK2S,EAASwe,EAAQe,EAASU,GACjD,MAAM,QAACltC,GAAWitB,GACZ,YAAC1N,EAAW,gBAAEwV,GAAmB/0B,EACjCg6D,EAAgC,UAAxBh6D,EAAQ4uC,YACjBrvB,IAGDy6C,GACF1/C,EAAIqH,UAA0B,EAAdpC,EAChBjF,EAAI2/C,SAAWllC,GAAmB,UAElCza,EAAIqH,UAAYpC,EAChBjF,EAAI2/C,SAAWllC,GAAmB,SAEhC9H,EAAQitC,aAjCd,SAA+B5/C,EAAK2S,EAAS+sC,GAC3C,MAAM,EAACh3D,EAAC,EAAEC,EAAC,WAAEgqC,EAAU,YAAE+qB,EAAW,YAAEkC,GAAejtC,EAC/C+e,EAAc/yC,KAAKuK,IAAIypB,EAAQ+e,YAAcgsB,EAAa,GAC1DjsB,EAAc9e,EAAQ8e,YAAcisB,EAC1C,IAAIn5D,EAMJ,IALIm7D,GACFjC,GAAQz9C,EAAK2S,EAASggB,EAAatrC,GAErC2Y,EAAIyE,YACJzE,EAAI0E,IAAIhc,EAAGC,EAAG8oC,EAAakB,EAAatrC,EAAKsrC,GAAY,GACpDpuC,EAAI,EAAGA,EAAIq7D,IAAer7D,EAC7Byb,EAAIkF,SAIN,IAFAlF,EAAIyE,YACJzE,EAAI0E,IAAIhc,EAAGC,EAAG+oC,EAAaiB,EAAYA,EAAatrC,GAC/C9C,EAAI,EAAGA,EAAIq7D,IAAer7D,EAC7Byb,EAAIkF,QAER,CAgBI26C,CAAsB7/C,EAAK2S,EAAS+sC,GAElCA,GACFjC,GAAQz9C,EAAK2S,EAASigB,GAExB8rB,GAAQ1+C,EAAK2S,EAASwe,EAAQe,EAASU,GACvC5yB,EAAIkF,SACN,CA9LArnB,OAAO8jB,iBAAiBy1C,GAAO,CAC7Bv4C,SAAU,CACRgD,cACAtlB,MAAOsiB,IAETm4C,UAAW,CACTn1C,cACAtlB,MAAOy6D,IAET54C,UAAW,CACTyD,cACAtlB,MAAO6hB,IAET+yC,SAAU,CACRtvC,cACAtlB,MAAO40D,IAET2O,QAAS,CACPj+C,cACAtlB,MA/0BU,SAi1BZ06D,SAAU,CACRp1C,cACAtlB,MAAO06D,IAET1G,SAAU,CACR1uC,cACAtlB,MAAO,IAAIquB,KACTumC,GAASrmC,OAAOF,GAChB4yC,IAAmB,GAGvBtM,WAAY,CACVrvC,cACAtlB,MAAO,IAAIquB,KACTumC,GAASp0B,UAAUnS,GACnB4yC,IAAmB,KA2JzB,MAAMuC,WAAmB/d,GACvB,WAAA7lC,CAAYohB,GACVgR,QACAlyB,KAAK3W,aAAU7I,EACfwf,KAAKy1B,mBAAgBj1C,EACrBwf,KAAKs2B,gBAAa91C,EAClBwf,KAAKu2B,cAAW/1C,EAChBwf,KAAKo1B,iBAAc50C,EACnBwf,KAAKq1B,iBAAc70C,EACnBwf,KAAKqhD,YAAc,EACnBrhD,KAAKujD,YAAc,EACfriC,GACF1/B,OAAOge,OAAOQ,KAAMkhB,EAExB,CACA,OAAAyb,CAAQgnB,EAAQC,EAAQnnB,GACtB,MAAM1zB,EAAQ/I,KAAKs9B,SAAS,CAAC,IAAK,KAAMb,IAClC,MAAC7uC,EAAK,SAAEE,GAAYT,GAAkB0b,EAAO,CAAC1c,EAAGs3D,EAAQr3D,EAAGs3D,KAC5D,WAACttB,EAAU,SAAEC,EAAQ,YAAEnB,EAAW,YAAEC,EAAW,cAAEI,GAAiBz1B,KAAKs9B,SAAS,CACpF,aACA,WACA,cACA,cACA,iBACCb,GACGonB,EAAU7jD,KAAK3W,QAAQwsC,QAAU,EAEjCiuB,EADiBn8D,EAAe8tC,EAAec,EAAWD,IACxBtrC,GAAOoD,GAAcR,EAAO0oC,EAAYC,GAC1EwtB,EAAen1D,GAAWd,EAAUsnC,EAAcyuB,EAASxuB,EAAcwuB,GAC/E,OAAQC,GAAiBC,CAC3B,CACA,cAAA3mB,CAAeX,GACb,MAAM,EAACpwC,EAAC,EAAEC,EAAC,WAAEgqC,EAAU,SAAEC,EAAQ,YAAEnB,EAAW,YAAEC,GAAer1B,KAAKs9B,SAAS,CAC3E,IACA,IACA,aACA,WACA,cACA,cACA,iBACCb,IACG,OAAC3H,EAAM,QAAEe,GAAW71B,KAAK3W,QACzB26D,GAAa1tB,EAAaC,GAAY,EACtC0tB,GAAc7uB,EAAcC,EAAcQ,EAAUf,GAAU,EACpE,MAAO,CACLzoC,EAAGA,EAAI/J,KAAK2N,IAAI+zD,GAAaC,EAC7B33D,EAAGA,EAAIhK,KAAK0M,IAAIg1D,GAAaC,EAEjC,CACA,eAAAre,CAAgBnJ,GACd,OAAOz8B,KAAKo9B,eAAeX,EAC7B,CACA,IAAAjd,CAAK7b,GACH,MAAM,QAACta,EAAO,cAAEosC,GAAiBz1B,KAC3B80B,GAAUzrC,EAAQyrC,QAAU,GAAK,EACjCe,GAAWxsC,EAAQwsC,SAAW,GAAK,EAGzC,GAFA71B,KAAKqhD,YAAuC,UAAxBh4D,EAAQ4uC,YAA2B,IAAO,EAC9Dj4B,KAAKujD,YAAc9tB,EAAgBzqC,EAAM1I,KAAKC,MAAMkzC,EAAgBzqC,GAAO,EACrD,IAAlByqC,GAAuBz1B,KAAKo1B,YAAc,GAAKp1B,KAAKq1B,YAAc,EACpE,OAEF1xB,EAAI8C,OACJ,IAAIy9C,EAAe,EACnB,GAAIpvB,EAAQ,CACVovB,EAAepvB,EAAS,EACxB,MAAMkvB,GAAahkD,KAAKs2B,WAAat2B,KAAKu2B,UAAY,EACtD5yB,EAAIuE,UAAU5lB,KAAK2N,IAAI+zD,GAAaE,EAAc5hE,KAAK0M,IAAIg1D,GAAaE,GACpElkD,KAAKy1B,eAAiB1qC,IACxBm5D,EAAepvB,EAEnB,CACAnxB,EAAIgH,UAAYthB,EAAQsZ,gBACxBgB,EAAIoH,YAAc1hB,EAAQuZ,YAC1B,MAAM2zB,EAtIV,SAAiB5yB,EAAK2S,EAASwe,EAAQe,GACrC,MAAM,YAAC0tB,EAAW,WAAEjtB,EAAU,cAAEb,GAAiBnf,EACjD,IAAIigB,EAAWjgB,EAAQigB,SACvB,GAAIgtB,EAAa,CACflB,GAAQ1+C,EAAK2S,EAASwe,EAAQe,EAASS,EAAatrC,GACpD,IAAK,IAAI9C,EAAI,EAAGA,EAAIq7D,IAAer7D,EACjCyb,EAAIgF,OAEDvc,MAAMqpC,KACTc,EAAWD,EAAab,EAAgBzqC,EACpCyqC,EAAgBzqC,GAAQ,IAC1BurC,GAAYvrC,GAGlB,CAGA,OAFAq3D,GAAQ1+C,EAAK2S,EAASwe,EAAQe,EAASU,GACvC5yB,EAAIgF,OACG4tB,CACT,CAoHqB4tB,CAAQxgD,EAAK3D,KAAMkkD,EAAcruB,GAClD2S,GAAW7kC,EAAK3D,KAAMkkD,EAAcruB,EAASU,GAC7C5yB,EAAIkD,SACN,EAiBF,SAASu9C,GAASzgD,EAAKta,EAASka,EAAQla,GACtCsa,EAAI0gD,QAAU18D,EAAe4b,EAAM0a,eAAgB50B,EAAQ40B,gBAC3Dta,EAAIuvC,YAAYvrD,EAAe4b,EAAM2a,WAAY70B,EAAQ60B,aACzDva,EAAIwvC,eAAiBxrD,EAAe4b,EAAM4a,iBAAkB90B,EAAQ80B,kBACpExa,EAAI2/C,SAAW37D,EAAe4b,EAAM6a,gBAAiB/0B,EAAQ+0B,iBAC7Dza,EAAIqH,UAAYrjB,EAAe4b,EAAMqF,YAAavf,EAAQuf,aAC1DjF,EAAIoH,YAAcpjB,EAAe4b,EAAMX,YAAavZ,EAAQuZ,YAC9D,CACA,SAAS4F,GAAO7E,EAAK+F,EAAU5gB,GAC7B6a,EAAI6E,OAAO1f,EAAOuD,EAAGvD,EAAOwD,EAC9B,CAUA,SAASg4D,GAASxxC,EAAQsJ,EAASiiB,EAAS,CAAC,GAC3C,MAAMniB,EAAQpJ,EAAOpxB,QACdmF,MAAO09D,EAAc,EAAGz9D,IAAK09D,EAAYtoC,EAAQ,GAAKmiB,GACtDx3C,MAAO49D,EAAc39D,IAAK49D,GAActoC,EACzCv1B,EAAQvE,KAAKuK,IAAI03D,EAAaE,GAC9B39D,EAAMxE,KAAKsK,IAAI43D,EAAWE,GAC1BC,EAAUJ,EAAcE,GAAgBD,EAAYC,GAAgBF,EAAcG,GAAcF,EAAYE,EAClH,MAAO,CACLxoC,QACAr1B,QACAquB,KAAMkH,EAAQlH,KACd1sB,KAAM1B,EAAMD,IAAU89D,EAAUzoC,EAAQp1B,EAAMD,EAAQC,EAAMD,EAEhE,CACA,SAAS+9D,GAAYjhD,EAAK8G,EAAM2R,EAASiiB,GACvC,MAAM,OAACvrB,EAAM,QAAEzpB,GAAWohB,GACpB,MAACyR,EAAK,MAAEr1B,EAAK,KAAEquB,EAAI,KAAE1sB,GAAQ87D,GAASxxC,EAAQsJ,EAASiiB,GACvDwmB,EA1BR,SAAuBx7D,GACrB,OAAIA,EAAQy7D,QACHr7C,GAELpgB,EAAQksB,SAA8C,aAAnClsB,EAAQgsB,uBACtBxL,GAEFrB,EACT,CAkBqBu8C,CAAc17D,GACjC,IACInB,EAAG6gB,EAAOuM,GADV,KAACyZ,GAAO,EAAI,QAAE9mC,GAAWo2C,GAAU,CAAC,EAExC,IAAKn2C,EAAI,EAAGA,GAAKM,IAAQN,EACvB6gB,EAAQ+J,GAAQjsB,GAASoB,EAAUO,EAAON,EAAIA,IAAMg0B,GAChDnT,EAAMgK,OAECgc,GACTprB,EAAI4E,OAAOQ,EAAM1c,EAAG0c,EAAMzc,GAC1ByiC,GAAO,GAEP81B,EAAWlhD,EAAK2R,EAAMvM,EAAO9gB,EAASoB,EAAQy7D,SAEhDxvC,EAAOvM,GAMT,OAJImM,IACFnM,EAAQ+J,GAAQjsB,GAASoB,EAAUO,EAAO,IAAM0zB,GAChD2oC,EAAWlhD,EAAK2R,EAAMvM,EAAO9gB,EAASoB,EAAQy7D,YAEvC5vC,CACX,CACA,SAAS8vC,GAAgBrhD,EAAK8G,EAAM2R,EAASiiB,GAC3C,MAAMvrB,EAASrI,EAAKqI,QACd,MAACoJ,EAAK,MAAEr1B,EAAK,KAAE2B,GAAQ87D,GAASxxC,EAAQsJ,EAASiiB,IACjD,KAACtP,GAAO,EAAI,QAAE9mC,GAAWo2C,GAAU,CAAC,EAC1C,IAEIn2C,EAAG6gB,EAAOk8C,EAAOhuB,EAAMF,EAAMmuB,EAF7BC,EAAO,EACPC,EAAS,EAEb,MAAMC,EAAcljE,IAAW0E,GAASoB,EAAUO,EAAOrG,EAAQA,IAAU+5B,EACrEopC,EAAQ,KACRruB,IAASF,IACXpzB,EAAI6E,OAAO28C,EAAMpuB,GACjBpzB,EAAI6E,OAAO28C,EAAMluB,GACjBtzB,EAAI6E,OAAO28C,EAAMD,GACnB,EAMF,IAJIn2B,IACFhmB,EAAQ+J,EAAOuyC,EAAW,IAC1B1hD,EAAI4E,OAAOQ,EAAM1c,EAAG0c,EAAMzc,IAEvBpE,EAAI,EAAGA,GAAKM,IAAQN,EAAG,CAE1B,GADA6gB,EAAQ+J,EAAOuyC,EAAWn9D,IACtB6gB,EAAMgK,KACR,SAEF,MAAM1mB,EAAI0c,EAAM1c,EACVC,EAAIyc,EAAMzc,EACVi5D,EAAa,EAAJl5D,EACXk5D,IAAWN,GACT34D,EAAI2qC,EACNA,EAAO3qC,EACEA,EAAIyqC,IACbA,EAAOzqC,GAET64D,GAAQC,EAASD,EAAO94D,KAAO+4D,IAE/BE,IACA3hD,EAAI6E,OAAOnc,EAAGC,GACd24D,EAAQM,EACRH,EAAS,EACTnuB,EAAOF,EAAOzqC,GAEhB44D,EAAQ54D,CACV,CACAg5D,GACF,CACA,SAASE,GAAkB/6C,GACzB,MAAMJ,EAAOI,EAAKphB,QACZ60B,EAAa7T,EAAK6T,YAAc7T,EAAK6T,WAAWx8B,OAEtD,QADqB+oB,EAAK+uB,YAAe/uB,EAAKgX,OAAUpX,EAAKkL,SAA2C,aAAhClL,EAAKgL,wBAA0ChL,EAAKy6C,SAAY5mC,GACnH8mC,GAAkBJ,EACzC,CA3HAlB,GAAWz8D,GAAK,MAChBy8D,GAAWlhD,SAAW,CACpBy1B,YAAa,SACbr1B,YAAa,OACbwb,qBAAiB59B,EACjBkhE,aAAc,EACd94C,YAAa,EACbksB,OAAQ,EACRe,QAAS,EACTjoC,WAAOpN,GAETkjE,GAAW3d,cAAgB,CACzBpjC,gBAAiB,mBAgJnB,MAAM8iD,GAA8B,mBAAXC,OACzB,SAASlmC,GAAK7b,EAAK8G,EAAM5jB,EAAOq1B,GAC1BupC,KAAch7C,EAAKphB,QAAQ+yB,QAzBjC,SAA6BzY,EAAK8G,EAAM5jB,EAAOq1B,GAC7C,IAAIypC,EAAOl7C,EAAKm7C,MACXD,IACHA,EAAOl7C,EAAKm7C,MAAQ,IAAIF,OACpBj7C,EAAKk7C,KAAKA,EAAM9+D,EAAOq1B,IACzBypC,EAAKr9C,aAGT87C,GAASzgD,EAAK8G,EAAKphB,SACnBsa,EAAIkF,OAAO88C,EACb,CAgBIE,CAAoBliD,EAAK8G,EAAM5jB,EAAOq1B,GAf1C,SAA0BvY,EAAK8G,EAAM5jB,EAAOq1B,GAC1C,MAAM,SAACa,EAAQ,QAAE1zB,GAAWohB,EACtBq7C,EAAgBN,GAAkB/6C,GACxC,IAAK,MAAM2R,KAAWW,EACpBqnC,GAASzgD,EAAKta,EAAS+yB,EAAQ7Y,OAC/BI,EAAIyE,YACA09C,EAAcniD,EAAK8G,EAAM2R,EAAS,CAACv1B,QAAOC,IAAKD,EAAQq1B,EAAQ,KACjEvY,EAAI2E,YAEN3E,EAAIkF,QAER,CAMIk9C,CAAiBpiD,EAAK8G,EAAM5jB,EAAOq1B,EAEvC,CACA,MAAM8pC,WAAoBrgB,GACxB,WAAA7lC,CAAYohB,GACVgR,QACAlyB,KAAKy5B,UAAW,EAChBz5B,KAAK3W,aAAU7I,EACfwf,KAAKod,YAAS58B,EACdwf,KAAKyhB,WAAQjhC,EACbwf,KAAKi7B,eAAYz6C,EACjBwf,KAAK4lD,WAAQplE,EACbwf,KAAKimD,aAAUzlE,EACfwf,KAAKkmD,eAAY1lE,EACjBwf,KAAKw5B,YAAa,EAClBx5B,KAAKmmD,gBAAiB,EACtBnmD,KAAKud,mBAAgB/8B,EACjB0gC,GACF1/B,OAAOge,OAAOQ,KAAMkhB,EAExB,CACA,mBAAA8Y,CAAoBnN,EAAW/oB,GAC7B,MAAMza,EAAU2W,KAAK3W,QACrB,IAAKA,EAAQksB,SAA8C,aAAnClsB,EAAQgsB,0BAA2ChsB,EAAQy7D,UAAY9kD,KAAKmmD,eAAgB,CAClH,MAAMjxC,EAAO7rB,EAAQ+rB,SAAWpV,KAAKyhB,MAAQzhB,KAAKi7B,UAClDhmB,GAA2BjV,KAAKimD,QAAS58D,EAASwjC,EAAW3X,EAAMpR,GACnE9D,KAAKmmD,gBAAiB,CACxB,CACF,CACA,UAAIrzC,CAAOA,GACT9S,KAAKimD,QAAUnzC,SACR9S,KAAKkmD,iBACLlmD,KAAK4lD,MACZ5lD,KAAKmmD,gBAAiB,CACxB,CACA,UAAIrzC,GACF,OAAO9S,KAAKimD,OACd,CACA,YAAIlpC,GACF,OAAO/c,KAAKkmD,YAAclmD,KAAKkmD,UD1kInC,SAA0Bz7C,EAAMyS,GAC9B,MAAMpK,EAASrI,EAAKqI,OACdsC,EAAW3K,EAAKphB,QAAQ+rB,SACxB8G,EAAQpJ,EAAOpxB,OACrB,IAAKw6B,EACH,MAAO,GAET,MAAMhH,IAASzK,EAAKgX,OACd,MAAC56B,EAAK,IAAEC,GAxDhB,SAAyBgsB,EAAQoJ,EAAOhH,EAAME,GAC5C,IAAIvuB,EAAQ,EACRC,EAAMo1B,EAAQ,EAClB,GAAIhH,IAASE,EACX,KAAOvuB,EAAQq1B,IAAUpJ,EAAOjsB,GAAOksB,MACrClsB,IAGJ,KAAOA,EAAQq1B,GAASpJ,EAAOjsB,GAAOksB,MACpClsB,IAMF,IAJAA,GAASq1B,EACLhH,IACFpuB,GAAOD,GAEFC,EAAMD,GAASisB,EAAOhsB,EAAMo1B,GAAOnJ,MACxCjsB,IAGF,OADAA,GAAOo1B,EACA,CAACr1B,QAAOC,MACjB,CAoCuBs/D,CAAgBtzC,EAAQoJ,EAAOhH,EAAME,GAC1D,OACS6H,GAAcxS,GADN,IAAb2K,EACyB,CAAC,CAACvuB,QAAOC,MAAKouB,SArC7C,SAAuBpC,EAAQjsB,EAAOgG,EAAKqoB,GACzC,MAAMgH,EAAQpJ,EAAOpxB,OACfi1B,EAAS,GACf,IAEI7vB,EAFAksC,EAAOnsC,EACPyuB,EAAOxC,EAAOjsB,GAElB,IAAKC,EAAMD,EAAQ,EAAGC,GAAO+F,IAAO/F,EAAK,CACvC,MAAMw5B,EAAMxN,EAAOhsB,EAAMo1B,GACrBoE,EAAIvN,MAAQuN,EAAIE,KACblL,EAAKvC,OACRmC,GAAO,EACPyB,EAAOn0B,KAAK,CAACqE,MAAOA,EAAQq1B,EAAOp1B,KAAMA,EAAM,GAAKo1B,EAAOhH,SAC3DruB,EAAQmsC,EAAO1S,EAAIE,KAAO15B,EAAM,OAGlCksC,EAAOlsC,EACHwuB,EAAKvC,OACPlsB,EAAQC,IAGZwuB,EAAOgL,CACT,CAIA,OAHa,OAAT0S,GACFrc,EAAOn0B,KAAK,CAACqE,MAAOA,EAAQq1B,EAAOp1B,IAAKksC,EAAO9W,EAAOhH,SAEjDyB,CACT,CAe6B0vC,CAAcvzC,EAAQjsB,EAFrCC,EAAMD,EAAQC,EAAMo1B,EAAQp1B,IACjB2jB,EAAKwwB,WAAuB,IAAVp0C,GAAeC,IAAQo1B,EAAQ,GAHrBpJ,EAAQoK,EAK7D,CC2jI+CopC,CAAiBtmD,KAAMA,KAAK3W,QAAQ+yB,SACjF,CACA,KAAAurB,GACE,MAAM5qB,EAAW/c,KAAK+c,SAChBjK,EAAS9S,KAAK8S,OACpB,OAAOiK,EAASr7B,QAAUoxB,EAAOiK,EAAS,GAAGl2B,MAC/C,CACA,IAAAmsC,GACE,MAAMjW,EAAW/c,KAAK+c,SAChBjK,EAAS9S,KAAK8S,OACdoJ,EAAQa,EAASr7B,OACvB,OAAOw6B,GAASpJ,EAAOiK,EAASb,EAAQ,GAAGp1B,IAC7C,CACA,WAAAy/D,CAAYx9C,EAAOpc,GACjB,MAAMtD,EAAU2W,KAAK3W,QACfnJ,EAAQ6oB,EAAMpc,GACdmmB,EAAS9S,KAAK8S,OACdiK,EAAWD,GAAe9c,KAAM,CAACrT,WAAU9F,MAAO3G,EAAO4G,IAAK5G,IACpE,IAAK68B,EAASr7B,OACZ,OAEF,MAAMi1B,EAAS,GACT6vC,EAlGV,SAAiCn9D,GAC/B,OAAIA,EAAQy7D,QACHlrC,GAELvwB,EAAQksB,SAA8C,aAAnClsB,EAAQgsB,uBACtBwE,GAEFF,EACT,CA0FyB8sC,CAAwBp9D,GAC7C,IAAInB,EAAGM,EACP,IAAKN,EAAI,EAAGM,EAAOu0B,EAASr7B,OAAQwG,EAAIM,IAAQN,EAAG,CACjD,MAAM,MAACrB,EAAK,IAAEC,GAAOi2B,EAAS70B,GACxBwL,EAAKof,EAAOjsB,GACZ8M,EAAKmf,EAAOhsB,GAClB,GAAI4M,IAAOC,EAAI,CACbgjB,EAAOn0B,KAAKkR,GACZ,QACF,CACA,MACMgzD,EAAeF,EAAa9yD,EAAIC,EAD5BrR,KAAKkK,KAAKtM,EAAQwT,EAAG/G,KAAcgH,EAAGhH,GAAY+G,EAAG/G,KAClBtD,EAAQy7D,SACrD4B,EAAa/5D,GAAYoc,EAAMpc,GAC/BgqB,EAAOn0B,KAAKkkE,EACd,CACA,OAAyB,IAAlB/vC,EAAOj1B,OAAei1B,EAAO,GAAKA,CAC3C,CACA,WAAAiuC,CAAYjhD,EAAKyY,EAASiiB,GAExB,OADsBmnB,GAAkBxlD,KACjC8lD,CAAcniD,EAAK3D,KAAMoc,EAASiiB,EAC3C,CACA,IAAAsnB,CAAKhiD,EAAK9c,EAAOq1B,GACf,MAAMa,EAAW/c,KAAK+c,SAChB+oC,EAAgBN,GAAkBxlD,MACxC,IAAIkV,EAAOlV,KAAKyhB,MAChB56B,EAAQA,GAAS,EACjBq1B,EAAQA,GAAUlc,KAAK8S,OAAOpxB,OAASmF,EACvC,IAAK,MAAMu1B,KAAWW,EACpB7H,GAAQ4wC,EAAcniD,EAAK3D,KAAMoc,EAAS,CAACv1B,QAAOC,IAAKD,EAAQq1B,EAAQ,IAEzE,QAAShH,CACX,CACA,IAAAsK,CAAK7b,EAAKkpB,EAAWhmC,EAAOq1B,GAC1B,MAAM7yB,EAAU2W,KAAK3W,SAAW,CAAC,GAClB2W,KAAK8S,QAAU,IACnBpxB,QAAU2H,EAAQuf,cAC3BjF,EAAI8C,OACJ+Y,GAAK7b,EAAK3D,KAAMnZ,EAAOq1B,GACvBvY,EAAIkD,WAEF7G,KAAKy5B,WACPz5B,KAAKmmD,gBAAiB,EACtBnmD,KAAK4lD,WAAQplE,EAEjB,EAyBF,SAASmmE,GAAUntC,EAAItvB,EAAK67B,EAAM0W,GAChC,MAAMpzC,EAAUmwB,EAAGnwB,SACZ,CAAC08B,GAAO7lC,GAASs5B,EAAG8jB,SAAS,CAACvX,GAAO0W,GAC5C,OAAQn6C,KAAKkK,IAAItC,EAAMhK,GAASmJ,EAAQ2e,OAAS3e,EAAQu9D,SAC3D,CA3BAZ,GAAY/+D,GAAK,OACjB++D,GAAYxjD,SAAW,CACrByb,eAAgB,OAChBC,WAAY,GACZC,iBAAkB,EAClBC,gBAAiB,QACjBxV,YAAa,EACb4M,iBAAiB,EACjBH,uBAAwB,UACxB1M,MAAM,EACNyM,UAAU,EACV0vC,SAAS,EACTvvC,QAAS,GAEXywC,GAAYjgB,cAAgB,CAC1BpjC,gBAAiB,kBACjBC,YAAa,eAEfojD,GAAYhkD,YAAc,CACxB0D,aAAa,EACbE,WAAaZ,GAAkB,eAATA,GAAkC,SAATA,GAQjD,MAAM6hD,WAAqBlhB,GACzB,WAAA7lC,CAAYohB,GACVgR,QACAlyB,KAAK3W,aAAU7I,EACfwf,KAAK0lB,YAASllC,EACdwf,KAAK+S,UAAOvyB,EACZwf,KAAKwgB,UAAOhgC,EACR0gC,GACF1/B,OAAOge,OAAOQ,KAAMkhB,EAExB,CACA,OAAAyb,CAAQmqB,EAAQC,EAAQtqB,GACtB,MAAMpzC,EAAU2W,KAAK3W,SACf,EAACgD,EAAC,EAAEC,GAAK0T,KAAKs9B,SAAS,CAAC,IAAK,KAAMb,GACzC,OAASn6C,KAAK0J,IAAI86D,EAASz6D,EAAG,GAAK/J,KAAK0J,IAAI+6D,EAASz6D,EAAG,GAAMhK,KAAK0J,IAAI3C,EAAQu9D,UAAYv9D,EAAQ2e,OAAQ,EAC7G,CACA,QAAAg/C,CAASF,EAAQrqB,GACf,OAAOkqB,GAAU3mD,KAAM8mD,EAAQ,IAAKrqB,EACtC,CACA,QAAAwqB,CAASF,EAAQtqB,GACf,OAAOkqB,GAAU3mD,KAAM+mD,EAAQ,IAAKtqB,EACtC,CACA,cAAAW,CAAeX,GACb,MAAM,EAACpwC,EAAC,EAAEC,GAAK0T,KAAKs9B,SAAS,CAAC,IAAK,KAAMb,GACzC,MAAO,CAACpwC,IAAGC,IACb,CACA,IAAA1B,CAAKvB,GAEH,IAAI2e,GADJ3e,EAAUA,GAAW2W,KAAK3W,SAAW,CAAC,GACjB2e,QAAU,EAC/BA,EAAS1lB,KAAKuK,IAAImb,EAAQA,GAAU3e,EAAQ69D,aAAe,GAE3D,OAAgC,GAAxBl/C,GADYA,GAAU3e,EAAQuf,aAAe,GAEvD,CACA,IAAA4W,CAAK7b,EAAKqF,GACR,MAAM3f,EAAU2W,KAAK3W,QACjB2W,KAAK+S,MAAQ1pB,EAAQ2e,OAAS,KAAQc,GAAe9I,KAAMgJ,EAAMhJ,KAAKpV,KAAKvB,GAAW,KAG1Fsa,EAAIoH,YAAc1hB,EAAQuZ,YAC1Be,EAAIqH,UAAY3hB,EAAQuf,YACxBjF,EAAIgH,UAAYthB,EAAQsZ,gBACxB+E,GAAU/D,EAAKta,EAAS2W,KAAK3T,EAAG2T,KAAK1T,GACvC,CACA,QAAA6vC,GACE,MAAM9yC,EAAU2W,KAAK3W,SAAW,CAAC,EACjC,OAAOA,EAAQ2e,OAAS3e,EAAQu9D,SAClC,EAiBF,SAASO,GAAaC,EAAK3qB,GACzB,MAAM,EAACpwC,EAAC,EAAEC,EAAC,KAAEs9B,EAAI,MAAExjB,EAAK,OAAEqB,GAAU2/C,EAAI9pB,SAAS,CAAC,IAAK,IAAK,OAAQ,QAAS,UAAWb,GACxF,IAAIvzB,EAAMC,EAAOC,EAAKC,EAAQg+C,EAc9B,OAbID,EAAI91B,YACN+1B,EAAO5/C,EAAS,EAChByB,EAAO5mB,KAAKsK,IAAIP,EAAGu9B,GACnBzgB,EAAQ7mB,KAAKuK,IAAIR,EAAGu9B,GACpBxgB,EAAM9c,EAAI+6D,EACVh+C,EAAS/c,EAAI+6D,IAEbA,EAAOjhD,EAAQ,EACf8C,EAAO7c,EAAIg7D,EACXl+C,EAAQ9c,EAAIg7D,EACZj+C,EAAM9mB,KAAKsK,IAAIN,EAAGs9B,GAClBvgB,EAAS/mB,KAAKuK,IAAIP,EAAGs9B,IAEhB,CAAC1gB,OAAME,MAAKD,QAAOE,SAC5B,CACA,SAASi+C,GAAYv0C,EAAM7yB,EAAO0M,EAAKC,GACrC,OAAOkmB,EAAO,EAAIpkB,GAAYzO,EAAO0M,EAAKC,EAC5C,CA0BA,SAAS06D,GAAcH,GACrB,MAAM/qC,EAAS8qC,GAAaC,GACtBhhD,EAAQiW,EAAOlT,MAAQkT,EAAOnT,KAC9BzB,EAAS4U,EAAOhT,OAASgT,EAAOjT,IAChC0wB,EA7BR,SAA0BstB,EAAKI,EAAMC,GACnC,MAAMvnE,EAAQknE,EAAI/9D,QAAQuf,YACpBmK,EAAOq0C,EAAI/1B,cACXowB,EAAI50C,GAAO3sB,GACjB,MAAO,CACL4O,EAAGw4D,GAAYv0C,EAAK3J,IAAKq4C,EAAEr4C,IAAK,EAAGq+C,GACnCt1D,EAAGm1D,GAAYv0C,EAAK5J,MAAOs4C,EAAEt4C,MAAO,EAAGq+C,GACvC78D,EAAG28D,GAAYv0C,EAAK1J,OAAQo4C,EAAEp4C,OAAQ,EAAGo+C,GACzCl1D,EAAG+0D,GAAYv0C,EAAK7J,KAAMu4C,EAAEv4C,KAAM,EAAGs+C,GAEzC,CAmBiBE,CAAiBN,EAAKhhD,EAAQ,EAAGqB,EAAS,GACnDO,EAnBR,SAA2Bo/C,EAAKI,EAAMC,GACpC,MAAM,mBAACj2B,GAAsB41B,EAAI9pB,SAAS,CAAC,uBACrCp9C,EAAQknE,EAAI/9D,QAAQq4D,aACpBD,EAAI30C,GAAc5sB,GAClBynE,EAAOrlE,KAAKsK,IAAI46D,EAAMC,GACtB10C,EAAOq0C,EAAI/1B,cACXu2B,EAAep2B,GAAsBnqC,EAASnH,GACpD,MAAO,CACL6rB,QAASu7C,IAAaM,GAAgB70C,EAAK3J,KAAO2J,EAAK7J,KAAMu4C,EAAE11C,QAAS,EAAG47C,GAC3Ez7C,SAAUo7C,IAAaM,GAAgB70C,EAAK3J,KAAO2J,EAAK5J,MAAOs4C,EAAEv1C,SAAU,EAAGy7C,GAC9E37C,WAAYs7C,IAAaM,GAAgB70C,EAAK1J,QAAU0J,EAAK7J,KAAMu4C,EAAEz1C,WAAY,EAAG27C,GACpF17C,YAAaq7C,IAAaM,GAAgB70C,EAAK1J,QAAU0J,EAAK5J,MAAOs4C,EAAEx1C,YAAa,EAAG07C,GAE3F,CAMiBE,CAAkBT,EAAKhhD,EAAQ,EAAGqB,EAAS,GAC1D,MAAO,CACLqgD,MAAO,CACLz7D,EAAGgwB,EAAOnT,KACV5c,EAAG+vB,EAAOjT,IACVlW,EAAGkT,EACH5T,EAAGiV,EACHO,UAEFq7C,MAAO,CACLh3D,EAAGgwB,EAAOnT,KAAO4wB,EAAOvnC,EACxBjG,EAAG+vB,EAAOjT,IAAM0wB,EAAOhrC,EACvBoE,EAAGkT,EAAQ0zB,EAAOvnC,EAAIunC,EAAO3nC,EAC7BK,EAAGiV,EAASqyB,EAAOhrC,EAAIgrC,EAAOnvC,EAC9Bqd,OAAQ,CACN+D,QAASzpB,KAAKuK,IAAI,EAAGmb,EAAO+D,QAAUzpB,KAAKuK,IAAIitC,EAAOhrC,EAAGgrC,EAAOvnC,IAChE2Z,SAAU5pB,KAAKuK,IAAI,EAAGmb,EAAOkE,SAAW5pB,KAAKuK,IAAIitC,EAAOhrC,EAAGgrC,EAAO3nC,IAClE6Z,WAAY1pB,KAAKuK,IAAI,EAAGmb,EAAOgE,WAAa1pB,KAAKuK,IAAIitC,EAAOnvC,EAAGmvC,EAAOvnC,IACtE0Z,YAAa3pB,KAAKuK,IAAI,EAAGmb,EAAOiE,YAAc3pB,KAAKuK,IAAIitC,EAAOnvC,EAAGmvC,EAAO3nC,MAIhF,CACA,SAASwqC,GAAQyqB,EAAK/6D,EAAGC,EAAGmwC,GAC1B,MAAMsrB,EAAc,OAAN17D,EACR27D,EAAc,OAAN17D,EAER+vB,EAAS+qC,KADEW,GAASC,IACSb,GAAaC,EAAK3qB,GACrD,OAAOpgB,IACH0rC,GAASn5D,GAAWvC,EAAGgwB,EAAOnT,KAAMmT,EAAOlT,UAC3C6+C,GAASp5D,GAAWtC,EAAG+vB,EAAOjT,IAAKiT,EAAOhT,QAChD,CAIA,SAAS4+C,GAAkBtkD,EAAK+E,GAC9B/E,EAAI+E,KAAKA,EAAKrc,EAAGqc,EAAKpc,EAAGoc,EAAKxV,EAAGwV,EAAKlW,EACxC,CACA,SAAS01D,GAAYx/C,EAAMtnB,EAAQ+mE,EAAU,CAAC,GAC5C,MAAM97D,EAAIqc,EAAKrc,IAAM87D,EAAQ97D,GAAKjL,EAAS,EACrCkL,EAAIoc,EAAKpc,IAAM67D,EAAQ77D,GAAKlL,EAAS,EACrC8R,GAAKwV,EAAKrc,EAAIqc,EAAKxV,IAAMi1D,EAAQ97D,EAAI87D,EAAQj1D,EAAI9R,EAAS,GAAKiL,EAC/DmG,GAAKkW,EAAKpc,EAAIoc,EAAKlW,IAAM21D,EAAQ77D,EAAI67D,EAAQ31D,EAAIpR,EAAS,GAAKkL,EACrE,MAAO,CACLD,EAAGqc,EAAKrc,EAAIA,EACZC,EAAGoc,EAAKpc,EAAIA,EACZ4G,EAAGwV,EAAKxV,EAAIA,EACZV,EAAGkW,EAAKlW,EAAIA,EACZwV,OAAQU,EAAKV,OAEjB,CApHA6+C,GAAa5/D,GAAK,QAClB4/D,GAAarkD,SAAW,CACtBoG,YAAa,EACbg+C,UAAW,EACX1uB,iBAAkB,EAClBgvB,YAAa,EACbp/C,WAAY,SACZE,OAAQ,EACRD,SAAU,GAEZ8+C,GAAa9gB,cAAgB,CAC3BpjC,gBAAiB,kBACjBC,YAAa,eAyGf,MAAMwlD,WAAmBziB,GACvB,WAAA7lC,CAAYohB,GACVgR,QACAlyB,KAAK3W,aAAU7I,EACfwf,KAAKsxB,gBAAa9wC,EAClBwf,KAAK4pB,UAAOppC,EACZwf,KAAKoG,WAAQ5lB,EACbwf,KAAKyH,YAASjnB,EACdwf,KAAK8xB,mBAAgBtxC,EACjB0gC,GACF1/B,OAAOge,OAAOQ,KAAMkhB,EAExB,CACA,IAAA1B,CAAK7b,GACH,MAAM,cAACmuB,EAAezoC,SAAS,YAACuZ,EAAW,gBAAED,IAAoB3C,MAC3D,MAACqjD,EAAK,MAAEyE,GAASP,GAAcvnD,MAC/BqoD,GAnCSrgD,EAmCe8/C,EAAM9/C,QAlCxB+D,SAAW/D,EAAOkE,UAAYlE,EAAOgE,YAAchE,EAAOiE,YAkCxBH,GAAqBm8C,GAnCvE,IAAmBjgD,EAoCfrE,EAAI8C,OACAqhD,EAAM50D,IAAMmwD,EAAMnwD,GAAK40D,EAAMt1D,IAAM6wD,EAAM7wD,IAC3CmR,EAAIyE,YACJigD,EAAY1kD,EAAKukD,GAAYJ,EAAOh2B,EAAeuxB,IACnD1/C,EAAI4F,OACJ8+C,EAAY1kD,EAAKukD,GAAY7E,GAAQvxB,EAAeg2B,IACpDnkD,EAAIgH,UAAY/H,EAChBe,EAAIgF,KAAK,YAEXhF,EAAIyE,YACJigD,EAAY1kD,EAAKukD,GAAY7E,EAAOvxB,IACpCnuB,EAAIgH,UAAYhI,EAChBgB,EAAIgF,OACJhF,EAAIkD,SACN,CACA,OAAA81B,CAAQmqB,EAAQC,EAAQtqB,GACtB,OAAOE,GAAQ38B,KAAM8mD,EAAQC,EAAQtqB,EACvC,CACA,QAAAuqB,CAASF,EAAQrqB,GACf,OAAOE,GAAQ38B,KAAM8mD,EAAQ,KAAMrqB,EACrC,CACA,QAAAwqB,CAASF,EAAQtqB,GACf,OAAOE,GAAQ38B,KAAM,KAAM+mD,EAAQtqB,EACrC,CACA,cAAAW,CAAeX,GACb,MAAM,EAACpwC,EAAC,EAAEC,EAAC,KAAEs9B,EAAI,WAAE0H,GAActxB,KAAKs9B,SAAS,CAAC,IAAK,IAAK,OAAQ,cAAeb,GACjF,MAAO,CACLpwC,EAAGilC,GAAcjlC,EAAIu9B,GAAQ,EAAIv9B,EACjCC,EAAGglC,EAAahlC,GAAKA,EAAIs9B,GAAQ,EAErC,CACA,QAAAuS,CAASpW,GACP,MAAgB,MAATA,EAAe/lB,KAAKoG,MAAQ,EAAIpG,KAAKyH,OAAS,CACvD,EAEF2gD,GAAWnhE,GAAK,MAChBmhE,GAAW5lD,SAAW,CACpB6uB,cAAe,QACfzoB,YAAa,EACb84C,aAAc,EACd5vB,cAAe,OACfhqB,gBAAYtnB,GAEd4nE,GAAWriB,cAAgB,CACzBpjC,gBAAiB,kBACjBC,YAAa,eAkxCH,IAAI0lD,QA2ChB,MAAMC,GAAc,CAClB,OAAAjjE,CAAQipB,GACN,IAAKA,EAAM7sB,OACT,OAAO,EAET,IAAIwG,EAAGC,EACHkE,EAAI,EACJC,EAAI,EACJ4vB,EAAQ,EACZ,IAAKh0B,EAAI,EAAGC,EAAMomB,EAAM7sB,OAAQwG,EAAIC,IAAOD,EAAG,CAC5C,MAAMsxB,EAAKjL,EAAMrmB,GAAGouB,QACpB,GAAIkD,GAAMA,EAAGqsB,WAAY,CACvB,MAAM37C,EAAMsvB,EAAGosB,kBACfv5C,GAAKnC,EAAImC,EACTC,GAAKpC,EAAIoC,IACP4vB,CACJ,CACF,CACA,MAAO,CACL7vB,EAAGA,EAAI6vB,EACP5vB,EAAGA,EAAI4vB,EAEX,EACA,OAAA4hB,CAAQvvB,EAAOi6C,GACb,IAAKj6C,EAAM7sB,OACT,OAAO,EAET,IAGIwG,EAAGC,EAAKsgE,EAHRp8D,EAAIm8D,EAAcn8D,EAClBC,EAAIk8D,EAAcl8D,EAClB6wC,EAAc51C,OAAO4D,kBAEzB,IAAKjD,EAAI,EAAGC,EAAMomB,EAAM7sB,OAAQwG,EAAIC,IAAOD,EAAG,CAC5C,MAAMsxB,EAAKjL,EAAMrmB,GAAGouB,QACpB,GAAIkD,GAAMA,EAAGqsB,WAAY,CACvB,MACM10C,EAAIpD,GAAsBy6D,EADjBhvC,EAAG4jB,kBAEdjsC,EAAIgsC,IACNA,EAAchsC,EACds3D,EAAiBjvC,EAErB,CACF,CACA,GAAIivC,EAAgB,CAClB,MAAMC,EAAKD,EAAe7iB,kBAC1Bv5C,EAAIq8D,EAAGr8D,EACPC,EAAIo8D,EAAGp8D,CACT,CACA,MAAO,CACLD,IACAC,IAEJ,GAEF,SAASq8D,GAAa/+B,EAAMg/B,GAQ1B,OAPIA,IACEzhE,EAAQyhE,GACVziE,MAAMC,UAAU5D,KAAKiE,MAAMmjC,EAAMg/B,GAEjCh/B,EAAKpnC,KAAKomE,IAGPh/B,CACT,CACA,SAASi/B,GAAcz+D,GACrB,OAAoB,iBAARA,GAAoBA,aAAe0+D,SAAW1+D,EAAIjB,QAAQ,OAAS,EACtEiB,EAAI+X,MAAM,MAEZ/X,CACT,CACA,SAAS2+D,GAAkB/lD,EAAOnY,GAChC,MAAM,QAACyrB,EAAO,aAAE3tB,EAAY,MAAExG,GAAS0I,EACjC46B,EAAaziB,EAAMkmB,eAAevgC,GAAc88B,YAChD,MAACtlC,EAAK,MAAED,GAASulC,EAAW8G,iBAAiBpqC,GACnD,MAAO,CACL6gB,QACA7iB,QACAulC,OAAQD,EAAW2F,UAAUjpC,GAC7B8qC,IAAKjqB,EAAM9hB,KAAK2hB,SAASla,GAAczH,KAAKiB,GAC5Cw2C,eAAgBz4C,EAChB+nC,QAASxC,EAAWyC,aACpB8E,UAAW7qC,EACXwG,eACA2tB,UAEJ,CACA,SAAS0yC,GAAe7zB,EAAS9rC,GAC/B,MAAMsa,EAAMwxB,EAAQnyB,MAAMW,KACpB,KAACslD,EAAI,OAAEC,EAAM,MAAExlE,GAASyxC,GACxB,SAACg0B,EAAQ,UAAEC,GAAa//D,EACxBggE,EAAWr8C,GAAO3jB,EAAQggE,UAC1BC,EAAYt8C,GAAO3jB,EAAQigE,WAC3BC,EAAav8C,GAAO3jB,EAAQkgE,YAC5BC,EAAiB9lE,EAAMhC,OACvB+nE,EAAkBP,EAAOxnE,OACzBgoE,EAAoBT,EAAKvnE,OACzB6+C,EAAUxzB,GAAU1jB,EAAQk3C,SAClC,IAAI94B,EAAS84B,EAAQ94B,OACjBrB,EAAQ,EACRujD,EAAqBV,EAAK7oC,QAAO,CAAClE,EAAO0tC,IAAa1tC,EAAQ0tC,EAASC,OAAOnoE,OAASkoE,EAASt/C,MAAM5oB,OAASkoE,EAASE,MAAMpoE,QAAQ,GAO1I,GANAioE,GAAsBx0B,EAAQ40B,WAAWroE,OAASyzC,EAAQ60B,UAAUtoE,OAChE8nE,IACF/hD,GAAU+hD,EAAiBF,EAAU9lD,YACnCgmD,EAAiB,GAAKngE,EAAQ4gE,aAC/B5gE,EAAQ6gE,mBAEPP,EAAoB,CAEtBliD,GAAUiiD,GADargE,EAAQ8gE,cAAgB7nE,KAAKuK,IAAIu8D,EAAWC,EAAS7lD,YAAc6lD,EAAS7lD,aAEjGmmD,EAAqBD,GAAqBL,EAAS7lD,YACnDmmD,EAAqB,GAAKtgE,EAAQ+gE,WACtC,CACIX,IACFhiD,GAAUpe,EAAQghE,gBACjBZ,EAAkBF,EAAW/lD,YAC5BimD,EAAkB,GAAKpgE,EAAQihE,eAEnC,IAAIC,EAAe,EACnB,MAAMC,EAAe,SAAS//C,GAC5BrE,EAAQ9jB,KAAKuK,IAAIuZ,EAAOzC,EAAIwC,YAAYsE,GAAMrE,MAAQmkD,EACxD,EAiBA,OAhBA5mD,EAAI8C,OACJ9C,EAAIN,KAAOimD,EAAUrjD,OACrBle,EAAKotC,EAAQzxC,MAAO8mE,GACpB7mD,EAAIN,KAAOgmD,EAASpjD,OACpBle,EAAKotC,EAAQ40B,WAAWh6B,OAAOoF,EAAQ60B,WAAYQ,GACnDD,EAAelhE,EAAQ8gE,cAAiBhB,EAAW,EAAI9/D,EAAQ81C,WAAc,EAC7Ep3C,EAAKkhE,GAAOW,IACV7hE,EAAK6hE,EAASC,OAAQW,GACtBziE,EAAK6hE,EAASt/C,MAAOkgD,GACrBziE,EAAK6hE,EAASE,MAAOU,EAAa,IAEpCD,EAAe,EACf5mD,EAAIN,KAAOkmD,EAAWtjD,OACtBle,EAAKotC,EAAQ+zB,OAAQsB,GACrB7mD,EAAIkD,UACJT,GAASm6B,EAAQn6B,MACV,CAACA,QAAOqB,SACjB,CAoBA,SAASgjD,GAAgBznD,EAAO3Z,EAASuB,EAAM8/D,GAC7C,MAAM,EAACr+D,EAAC,MAAE+Z,GAASxb,GACZwb,MAAOukD,EAAY99B,WAAW,KAAC3jB,EAAI,MAAEC,IAAUnG,EACtD,IAAI4nD,EAAS,SAWb,MAVe,WAAXF,EACFE,EAASv+D,IAAM6c,EAAOC,GAAS,EAAI,OAAS,QACnC9c,GAAK+Z,EAAQ,EACtBwkD,EAAS,OACAv+D,GAAKs+D,EAAavkD,EAAQ,IACnCwkD,EAAS,SAnBb,SAA6BA,EAAQ5nD,EAAO3Z,EAASuB,GACnD,MAAM,EAACyB,EAAC,MAAE+Z,GAASxb,EACbigE,EAAQxhE,EAAQyhE,UAAYzhE,EAAQ0hE,aAC1C,MAAe,SAAXH,GAAqBv+D,EAAI+Z,EAAQykD,EAAQ7nD,EAAMoD,OAGpC,UAAXwkD,GAAsBv+D,EAAI+Z,EAAQykD,EAAQ,QAA9C,CAGF,CAYMG,CAAoBJ,EAAQ5nD,EAAO3Z,EAASuB,KAC9CggE,EAAS,UAEJA,CACT,CACA,SAASK,GAAmBjoD,EAAO3Z,EAASuB,GAC1C,MAAM8/D,EAAS9/D,EAAK8/D,QAAUrhE,EAAQqhE,QApCxC,SAAyB1nD,EAAOpY,GAC9B,MAAM,EAAC0B,EAAC,OAAEmb,GAAU7c,EACpB,OAAI0B,EAAImb,EAAS,EACR,MACEnb,EAAK0W,EAAMyE,OAASA,EAAS,EAC/B,SAEF,QACT,CA4BkDyjD,CAAgBloD,EAAOpY,GACvE,MAAO,CACLggE,OAAQhgE,EAAKggE,QAAUvhE,EAAQuhE,QAAUH,GAAgBznD,EAAO3Z,EAASuB,EAAM8/D,GAC/EA,SAEJ,CAqBA,SAASS,GAAmB9hE,EAASuB,EAAMwgE,EAAWpoD,GACpD,MAAM,UAAC8nD,EAAS,aAAEC,EAAY,aAAEljD,GAAgBxe,GAC1C,OAACuhE,EAAM,OAAEF,GAAUU,EACnBC,EAAiBP,EAAYC,GAC7B,QAACh/C,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAea,GAAcjF,GACnE,IAAIxb,EAzBN,SAAgBzB,EAAMggE,GACpB,IAAI,EAACv+D,EAAC,MAAE+Z,GAASxb,EAMjB,MALe,UAAXggE,EACFv+D,GAAK+Z,EACe,WAAXwkD,IACTv+D,GAAM+Z,EAAQ,GAET/Z,CACT,CAiBUi/D,CAAO1gE,EAAMggE,GACrB,MAAMt+D,EAjBR,SAAgB1B,EAAM8/D,EAAQW,GAC5B,IAAI,EAAC/+D,EAAC,OAAEmb,GAAU7c,EAQlB,MAPe,QAAX8/D,EACFp+D,GAAK++D,EAEL/+D,GADoB,WAAXo+D,EACJjjD,EAAS4jD,EAER5jD,EAAS,EAEVnb,CACT,CAOYi/D,CAAO3gE,EAAM8/D,EAAQW,GAY/B,MAXe,WAAXX,EACa,SAAXE,EACFv+D,GAAKg/D,EACe,UAAXT,IACTv+D,GAAKg/D,GAEa,SAAXT,EACTv+D,GAAK/J,KAAKuK,IAAIkf,EAASC,GAAc8+C,EACjB,UAAXF,IACTv+D,GAAK/J,KAAKuK,IAAIqf,EAAUD,GAAe6+C,GAElC,CACLz+D,EAAGsC,GAAYtC,EAAG,EAAG2W,EAAMoD,MAAQxb,EAAKwb,OACxC9Z,EAAGqC,GAAYrC,EAAG,EAAG0W,EAAMyE,OAAS7c,EAAK6c,QAE7C,CACA,SAAS+jD,GAAYr2B,EAASxuC,EAAO0C,GACnC,MAAMk3C,EAAUxzB,GAAU1jB,EAAQk3C,SAClC,MAAiB,WAAV55C,EACHwuC,EAAQ9oC,EAAI8oC,EAAQ/uB,MAAQ,EAClB,UAAVzf,EACEwuC,EAAQ9oC,EAAI8oC,EAAQ/uB,MAAQm6B,EAAQp3B,MACpCgsB,EAAQ9oC,EAAIk0C,EAAQr3B,IAC5B,CACA,SAASuiD,GAAwB9lE,GAC/B,OAAOgjE,GAAa,GAAIE,GAAcljE,GACxC,CAQA,SAAS+lE,GAAkB7sC,EAAW9b,GACpC,MAAM+B,EAAW/B,GAAWA,EAAQklB,SAAWllB,EAAQklB,QAAQkN,SAAWpyB,EAAQklB,QAAQkN,QAAQtW,UAClG,OAAO/Z,EAAW+Z,EAAU/Z,SAASA,GAAY+Z,CACnD,CACA,MAAM8sC,WAAgBhmB,GACpB,WAAA7lC,CAAYqjB,GACV+O,QACAlyB,KAAK4rD,QAAU,EACf5rD,KAAKyf,QAAU,GACfzf,KAAK6rD,oBAAiBrrE,EACtBwf,KAAK8rD,WAAQtrE,EACbwf,KAAK+rD,uBAAoBvrE,EACzBwf,KAAKgsD,cAAgB,GACrBhsD,KAAK2jB,iBAAcnjC,EACnBwf,KAAK0nB,cAAWlnC,EAChBwf,KAAKgD,MAAQmgB,EAAOngB,OAASmgB,EAAO/F,OACpCpd,KAAKod,OAASpd,KAAKgD,MACnBhD,KAAK3W,QAAU85B,EAAO95B,QACtB2W,KAAKisD,gBAAazrE,EAClBwf,KAAKtc,WAAQlD,EACbwf,KAAK+pD,gBAAavpE,EAClBwf,KAAKipD,UAAOzoE,EACZwf,KAAKgqD,eAAYxpE,EACjBwf,KAAKkpD,YAAS1oE,EACdwf,KAAK4qD,YAASpqE,EACdwf,KAAK0qD,YAASlqE,EACdwf,KAAK3T,OAAI7L,EACTwf,KAAK1T,OAAI9L,EACTwf,KAAKyH,YAASjnB,EACdwf,KAAKoG,WAAQ5lB,EACbwf,KAAKksD,YAAS1rE,EACdwf,KAAKmsD,YAAS3rE,EACdwf,KAAKosD,iBAAc5rE,EACnBwf,KAAKqsD,sBAAmB7rE,EACxBwf,KAAKssD,qBAAkB9rE,CACzB,CACA,UAAAonC,CAAWv+B,GACT2W,KAAK3W,QAAUA,EACf2W,KAAK+rD,uBAAoBvrE,EACzBwf,KAAK0nB,cAAWlnC,CAClB,CACA,kBAAAmtC,GACE,MAAM/G,EAAS5mB,KAAK+rD,kBACpB,GAAInlC,EACF,OAAOA,EAET,MAAM5jB,EAAQhD,KAAKgD,MACb3Z,EAAU2W,KAAK3W,QAAQ2nB,WAAWhR,KAAKsH,cACvC+C,EAAOhhB,EAAQm+C,SAAWxkC,EAAM3Z,QAAQqZ,WAAarZ,EAAQ05B,WAC7DA,EAAa,IAAIG,GAAWljB,KAAKgD,MAAOqH,GAI9C,OAHIA,EAAK8E,aACPnP,KAAK+rD,kBAAoBvqE,OAAOksC,OAAO3K,IAElCA,CACT,CACA,UAAAzb,GACE,OAAOtH,KAAK0nB,WACZ1nB,KAAK0nB,UAhEqBtV,EAgEWpS,KAAKgD,MAAMsE,aAhEd6tB,EAgE4Bn1B,KAhEnBusD,EAgEyBvsD,KAAKgsD,cA/DpE1+C,GAAc8E,EAAQ,CAC3B+iB,UACAo3B,eACAvsE,KAAM,cAJV,IAA8BoyB,EAAQ+iB,EAASo3B,CAiE7C,CACA,QAAAC,CAASzpD,EAAS1Z,GAChB,MAAM,UAACw1B,GAAax1B,EACdojE,EAAc5tC,EAAU4tC,YAAYhmE,MAAMuZ,KAAM,CAAC+C,IACjDrf,EAAQm7B,EAAUn7B,MAAM+C,MAAMuZ,KAAM,CAAC+C,IACrC2pD,EAAa7tC,EAAU6tC,WAAWjmE,MAAMuZ,KAAM,CAAC+C,IACrD,IAAIuH,EAAQ,GAIZ,OAHAA,EAAQq+C,GAAar+C,EAAOu+C,GAAc4D,IAC1CniD,EAAQq+C,GAAar+C,EAAOu+C,GAAcnlE,IAC1C4mB,EAAQq+C,GAAar+C,EAAOu+C,GAAc6D,IACnCpiD,CACT,CACA,aAAAqiD,CAAcJ,EAAcljE,GAC1B,OAAOoiE,GAAwBpiE,EAAQw1B,UAAUkrC,WAAWtjE,MAAMuZ,KAAM,CAACusD,IAC3E,CACA,OAAAK,CAAQL,EAAcljE,GACpB,MAAM,UAACw1B,GAAax1B,EACdwjE,EAAY,GAalB,OAZA9kE,EAAKwkE,GAAexpD,IAClB,MAAM6mD,EAAW,CACfC,OAAQ,GACRv/C,MAAO,GACPw/C,MAAO,IAEHgD,EAASpB,GAAkB7sC,EAAW9b,GAC5C4lD,GAAaiB,EAASC,OAAQhB,GAAciE,EAAOC,YAAYzmE,KAAK0Z,KAAM+C,KAC1E4lD,GAAaiB,EAASt/C,MAAOwiD,EAAO3sE,MAAMmG,KAAK0Z,KAAM+C,IACrD4lD,GAAaiB,EAASE,MAAOjB,GAAciE,EAAOE,WAAW1mE,KAAK0Z,KAAM+C,KACxE8pD,EAAUrqE,KAAKonE,EAAS,IAEnBiD,CACT,CACA,YAAAI,CAAaV,EAAcljE,GACzB,OAAOoiE,GAAwBpiE,EAAQw1B,UAAUmrC,UAAUvjE,MAAMuZ,KAAM,CAACusD,IAC1E,CACA,SAAAW,CAAUX,EAAcljE,GACtB,MAAM,UAACw1B,GAAax1B,EACd8jE,EAAetuC,EAAUsuC,aAAa1mE,MAAMuZ,KAAM,CAACusD,IACnDrD,EAASrqC,EAAUqqC,OAAOziE,MAAMuZ,KAAM,CAACusD,IACvCa,EAAcvuC,EAAUuuC,YAAY3mE,MAAMuZ,KAAM,CAACusD,IACvD,IAAIjiD,EAAQ,GAIZ,OAHAA,EAAQq+C,GAAar+C,EAAOu+C,GAAcsE,IAC1C7iD,EAAQq+C,GAAar+C,EAAOu+C,GAAcK,IAC1C5+C,EAAQq+C,GAAar+C,EAAOu+C,GAAcuE,IACnC9iD,CACT,CACA,YAAA+iD,CAAahkE,GACX,MAAM04B,EAAS/hB,KAAKyf,QACdv+B,EAAO8e,KAAKgD,MAAM9hB,KAClBkrE,EAAc,GACdC,EAAmB,GACnBC,EAAkB,GACxB,IACIpkE,EAAGC,EADHokE,EAAe,GAEnB,IAAKrkE,EAAI,EAAGC,EAAM45B,EAAOrgC,OAAQwG,EAAIC,IAAOD,EAC1CqkE,EAAa/pE,KAAKumE,GAAkB/oD,KAAKgD,MAAO+e,EAAO75B,KAkBzD,OAhBImB,EAAQooB,SACV86C,EAAeA,EAAa96C,QAAO,CAAC6E,EAASn0B,EAAOuK,IAAUrD,EAAQooB,OAAO6E,EAASn0B,EAAOuK,EAAOxL,MAElGmI,EAAQikE,WACVf,EAAeA,EAAav8B,MAAK,CAACtlC,EAAGC,IAAMtB,EAAQikE,SAAS5iE,EAAGC,EAAGzJ,MAEpE6G,EAAKwkE,GAAexpD,IAClB,MAAM+pD,EAASpB,GAAkBriE,EAAQw1B,UAAW9b,GACpDqpD,EAAY5pE,KAAKsqE,EAAOS,WAAWjnE,KAAK0Z,KAAM+C,IAC9CspD,EAAiB7pE,KAAKsqE,EAAOU,gBAAgBlnE,KAAK0Z,KAAM+C,IACxDupD,EAAgB9pE,KAAKsqE,EAAOW,eAAennE,KAAK0Z,KAAM+C,GAAS,IAEjE/C,KAAKosD,YAAcA,EACnBpsD,KAAKqsD,iBAAmBA,EACxBrsD,KAAKssD,gBAAkBA,EACvBtsD,KAAKisD,WAAaM,EACXA,CACT,CACA,MAAAvqC,CAAOsX,EAASinB,GACd,MAAMl3D,EAAU2W,KAAK3W,QAAQ2nB,WAAWhR,KAAKsH,cACvCya,EAAS/hB,KAAKyf,QACpB,IAAIkD,EACA4pC,EAAe,GACnB,GAAKxqC,EAAOrgC,OAML,CACL,MAAM26C,EAAWksB,GAAYl/D,EAAQgzC,UAAU/1C,KAAK0Z,KAAM+hB,EAAQ/hB,KAAK6rD,gBACvEU,EAAevsD,KAAKqtD,aAAahkE,GACjC2W,KAAKtc,MAAQsc,KAAKwsD,SAASD,EAAcljE,GACzC2W,KAAK+pD,WAAa/pD,KAAK2sD,cAAcJ,EAAcljE,GACnD2W,KAAKipD,KAAOjpD,KAAK4sD,QAAQL,EAAcljE,GACvC2W,KAAKgqD,UAAYhqD,KAAKitD,aAAaV,EAAcljE,GACjD2W,KAAKkpD,OAASlpD,KAAKktD,UAAUX,EAAcljE,GAC3C,MAAMuB,EAAOoV,KAAK8rD,MAAQ9C,GAAehpD,KAAM3W,GACzCqkE,EAAkBlsE,OAAOge,OAAO,CAAC,EAAG68B,EAAUzxC,GAC9CwgE,EAAYH,GAAmBjrD,KAAKgD,MAAO3Z,EAASqkE,GACpDC,EAAkBxC,GAAmB9hE,EAASqkE,EAAiBtC,EAAWprD,KAAKgD,OACrFhD,KAAK4qD,OAASQ,EAAUR,OACxB5qD,KAAK0qD,OAASU,EAAUV,OACxB/nC,EAAa,CACXipC,QAAS,EACTv/D,EAAGshE,EAAgBthE,EACnBC,EAAGqhE,EAAgBrhE,EACnB8Z,MAAOxb,EAAKwb,MACZqB,OAAQ7c,EAAK6c,OACbykD,OAAQ7vB,EAAShwC,EACjB8/D,OAAQ9vB,EAAS/vC,EAErB,MA5BuB,IAAjB0T,KAAK4rD,UACPjpC,EAAa,CACXipC,QAAS,IA2Bf5rD,KAAKgsD,cAAgBO,EACrBvsD,KAAK0nB,cAAWlnC,EACZmiC,GACF3iB,KAAK2tB,qBAAqB3L,OAAOhiB,KAAM2iB,GAErC2W,GAAWjwC,EAAQukE,UACrBvkE,EAAQukE,SAAStnE,KAAK0Z,KAAM,CAACgD,MAAOhD,KAAKgD,MAAOmyB,QAASn1B,KAAMugD,UAEnE,CACA,SAAAsN,CAAUC,EAAcnqD,EAAK/Y,EAAMvB,GACjC,MAAM0kE,EAAgB/tD,KAAKguD,iBAAiBF,EAAcljE,EAAMvB,GAChEsa,EAAI6E,OAAOulD,EAAcxc,GAAIwc,EAAcvc,IAC3C7tC,EAAI6E,OAAOulD,EAActc,GAAIsc,EAAcrc,IAC3C/tC,EAAI6E,OAAOulD,EAAcE,GAAIF,EAAcG,GAC7C,CACA,gBAAAF,CAAiBF,EAAcljE,EAAMvB,GACnC,MAAM,OAACuhE,EAAM,OAAEF,GAAU1qD,MACnB,UAAC8qD,EAAS,aAAEjjD,GAAgBxe,GAC5B,QAAC0iB,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAea,GAAcjF,IAC5Dxb,EAAG8hE,EAAK7hE,EAAG8hE,GAAON,GACnB,MAAC1nD,EAAK,OAAEqB,GAAU7c,EACxB,IAAI2mD,EAAIE,EAAIwc,EAAIzc,EAAIE,EAAIwc,EAoCxB,MAnCe,WAAXxD,GACFhZ,EAAK0c,EAAO3mD,EAAS,EACN,SAAXmjD,GACFrZ,EAAK4c,EACL1c,EAAKF,EAAKuZ,EACVtZ,EAAKE,EAAKoZ,EACVoD,EAAKxc,EAAKoZ,IAEVvZ,EAAK4c,EAAM/nD,EACXqrC,EAAKF,EAAKuZ,EACVtZ,EAAKE,EAAKoZ,EACVoD,EAAKxc,EAAKoZ,GAEZmD,EAAK1c,IAGHE,EADa,SAAXmZ,EACGuD,EAAM7rE,KAAKuK,IAAIkf,EAASC,GAAc,EACvB,UAAX4+C,EACJuD,EAAM/nD,EAAQ9jB,KAAKuK,IAAIqf,EAAUD,GAAe6+C,EAEhD9qD,KAAKksD,OAEG,QAAXxB,GACFlZ,EAAK4c,EACL1c,EAAKF,EAAKsZ,EACVvZ,EAAKE,EAAKqZ,EACVmD,EAAKxc,EAAKqZ,IAEVtZ,EAAK4c,EAAM3mD,EACXiqC,EAAKF,EAAKsZ,EACVvZ,EAAKE,EAAKqZ,EACVmD,EAAKxc,EAAKqZ,GAEZoD,EAAK1c,GAEA,CAACD,KAAIE,KAAIwc,KAAIzc,KAAIE,KAAIwc,KAC9B,CACA,SAAA5a,CAAUt+B,EAAIrR,EAAKta,GACjB,MAAM3F,EAAQsc,KAAKtc,MACbhC,EAASgC,EAAMhC,OACrB,IAAI4nE,EAAWW,EAAc/hE,EAC7B,GAAIxG,EAAQ,CACV,MAAM2sE,EAAYxzC,GAAcxxB,EAAQyxB,IAAK9a,KAAK3T,EAAG2T,KAAKoG,OAQ1D,IAPA4O,EAAG3oB,EAAIm/D,GAAYxrD,KAAM3W,EAAQ8gD,WAAY9gD,GAC7Csa,EAAIiH,UAAYyjD,EAAUzjD,UAAUvhB,EAAQ8gD,YAC5CxmC,EAAIkH,aAAe,SACnBy+C,EAAYt8C,GAAO3jB,EAAQigE,WAC3BW,EAAe5gE,EAAQ4gE,aACvBtmD,EAAIgH,UAAYthB,EAAQilE,WACxB3qD,EAAIN,KAAOimD,EAAUrjD,OAChB/d,EAAI,EAAGA,EAAIxG,IAAUwG,EACxByb,EAAIwH,SAASznB,EAAMwE,GAAImmE,EAAUhiE,EAAE2oB,EAAG3oB,GAAI2oB,EAAG1oB,EAAIg9D,EAAU9lD,WAAa,GACxEwR,EAAG1oB,GAAKg9D,EAAU9lD,WAAaymD,EAC3B/hE,EAAI,IAAMxG,IACZszB,EAAG1oB,GAAKjD,EAAQ6gE,kBAAoBD,EAG1C,CACF,CACA,aAAAsE,CAAc5qD,EAAKqR,EAAI9sB,EAAGmmE,EAAWhlE,GACnC,MAAM+iE,EAAcpsD,KAAKosD,YAAYlkE,GAC/BslE,EAAkBxtD,KAAKqsD,iBAAiBnkE,IACxC,UAACkhE,EAAS,SAAED,EAAQ,WAAEhqB,GAAc91C,EACpCggE,EAAWr8C,GAAO3jB,EAAQggE,UAC1BmF,EAAShD,GAAYxrD,KAAM,OAAQ3W,GACnColE,EAAYJ,EAAUhiE,EAAEmiE,GACxBE,EAAUtF,EAAYC,EAAS7lD,YAAc6lD,EAAS7lD,WAAa4lD,GAAa,EAAI,EACpFuF,EAAS35C,EAAG1oB,EAAIoiE,EACtB,GAAIrlE,EAAQulE,cAAe,CACzB,MAAMC,EAAc,CAClB7mD,OAAQ1lB,KAAKsK,IAAIu8D,EAAUC,GAAa,EACxCthD,WAAY0lD,EAAgB1lD,WAC5BC,SAAUylD,EAAgBzlD,SAC1Ba,YAAa,GAETivB,EAAUw2B,EAAUnzC,WAAWuzC,EAAWtF,GAAYA,EAAW,EACjErxB,EAAU62B,EAASvF,EAAY,EACrCzlD,EAAIoH,YAAc1hB,EAAQylE,mBAC1BnrD,EAAIgH,UAAYthB,EAAQylE,mBACxBpnD,GAAU/D,EAAKkrD,EAAah3B,EAASC,GACrCn0B,EAAIoH,YAAcqhD,EAAYxpD,YAC9Be,EAAIgH,UAAYyhD,EAAYzpD,gBAC5B+E,GAAU/D,EAAKkrD,EAAah3B,EAASC,EACvC,KAAO,CACLn0B,EAAIqH,UAAYohD,EAAYxjD,aAAe,EAC3CjF,EAAIoH,YAAcqhD,EAAYxpD,YAC9Be,EAAIuvC,YAAYkZ,EAAYluC,YAAc,IAC1Cva,EAAIwvC,eAAiBiZ,EAAYjuC,kBAAoB,EACrD,MAAM4wC,EAASV,EAAUnzC,WAAWuzC,EAAWtF,EAAWhqB,GACpD6vB,EAASX,EAAUnzC,WAAWmzC,EAAUpzC,MAAMwzC,EAAW,GAAItF,EAAWhqB,EAAa,GACrFuiB,EAAe50C,GAAcs/C,EAAY1K,cAC3ClgE,OAAO+gB,OAAOm/C,GAAcpK,MAAKplD,GAAW,IAANA,KACxCyR,EAAIyE,YACJzE,EAAIgH,UAAYthB,EAAQylE,mBACxBhjD,GAAmBnI,EAAK,CACtBtX,EAAG0iE,EACHziE,EAAGqiE,EACHz7D,EAAGi2D,EACH32D,EAAG42D,EACHphD,OAAQ05C,IAEV/9C,EAAIgF,OACJhF,EAAIkF,SACJlF,EAAIgH,UAAYyhD,EAAYzpD,gBAC5BgB,EAAIyE,YACJ0D,GAAmBnI,EAAK,CACtBtX,EAAG2iE,EACH1iE,EAAGqiE,EAAS,EACZz7D,EAAGi2D,EAAW,EACd32D,EAAG42D,EAAY,EACfphD,OAAQ05C,IAEV/9C,EAAIgF,SAEJhF,EAAIgH,UAAYthB,EAAQylE,mBACxBnrD,EAAImvC,SAASic,EAAQJ,EAAQxF,EAAUC,GACvCzlD,EAAIsrD,WAAWF,EAAQJ,EAAQxF,EAAUC,GACzCzlD,EAAIgH,UAAYyhD,EAAYzpD,gBAC5BgB,EAAImvC,SAASkc,EAAQL,EAAS,EAAGxF,EAAW,EAAGC,EAAY,GAE/D,CACAzlD,EAAIgH,UAAY3K,KAAKssD,gBAAgBpkE,EACvC,CACA,QAAAgnE,CAASl6C,EAAIrR,EAAKta,GAChB,MAAM,KAAC4/D,GAAQjpD,MACT,YAACoqD,EAAW,UAAE+E,EAAS,cAAEhF,EAAa,UAAEf,EAAS,SAAED,EAAQ,WAAEhqB,GAAc91C,EAC3EggE,EAAWr8C,GAAO3jB,EAAQggE,UAChC,IAAI+F,EAAiB/F,EAAS7lD,WAC1B6rD,EAAe,EACnB,MAAMhB,EAAYxzC,GAAcxxB,EAAQyxB,IAAK9a,KAAK3T,EAAG2T,KAAKoG,OACpDkpD,EAAiB,SAAS7kD,GAC9B9G,EAAIwH,SAASV,EAAM4jD,EAAUhiE,EAAE2oB,EAAG3oB,EAAIgjE,GAAer6C,EAAG1oB,EAAI8iE,EAAiB,GAC7Ep6C,EAAG1oB,GAAK8iE,EAAiBhF,CAC3B,EACMmF,EAA0BlB,EAAUzjD,UAAUukD,GACpD,IAAIvF,EAAU4F,EAAWllD,EAAOpiB,EAAG0W,EAAGpW,EAAMke,EAU5C,IATA/C,EAAIiH,UAAYukD,EAChBxrD,EAAIkH,aAAe,SACnBlH,EAAIN,KAAOgmD,EAASpjD,OACpB+O,EAAG3oB,EAAIm/D,GAAYxrD,KAAMuvD,EAAyBlmE,GAClDsa,EAAIgH,UAAYthB,EAAQomE,UACxB1nE,EAAKiY,KAAK+pD,WAAYuF,GACtBD,EAAelF,GAA6C,UAA5BoF,EACd,WAAdJ,EAA0BhG,EAAW,EAAIhqB,EAAegqB,EAAW,EAAIhqB,EACvE,EACCj3C,EAAI,EAAGM,EAAOygE,EAAKvnE,OAAQwG,EAAIM,IAAQN,EAAG,CAU7C,IATA0hE,EAAWX,EAAK/gE,GAChBsnE,EAAYxvD,KAAKssD,gBAAgBpkE,GACjCyb,EAAIgH,UAAY6kD,EAChBznE,EAAK6hE,EAASC,OAAQyF,GACtBhlD,EAAQs/C,EAASt/C,MACb6/C,GAAiB7/C,EAAM5oB,SACzBse,KAAKuuD,cAAc5qD,EAAKqR,EAAI9sB,EAAGmmE,EAAWhlE,GAC1C+lE,EAAiB9sE,KAAKuK,IAAIw8D,EAAS7lD,WAAY4lD,IAE5CxqD,EAAI,EAAG8H,EAAO4D,EAAM5oB,OAAQkd,EAAI8H,IAAQ9H,EAC3C0wD,EAAehlD,EAAM1L,IACrBwwD,EAAiB/F,EAAS7lD,WAE5Bzb,EAAK6hE,EAASE,MAAOwF,EACvB,CACAD,EAAe,EACfD,EAAiB/F,EAAS7lD,WAC1Bzb,EAAKiY,KAAKgqD,UAAWsF,GACrBt6C,EAAG1oB,GAAK89D,CACV,CACA,UAAAsF,CAAW16C,EAAIrR,EAAKta,GAClB,MAAM6/D,EAASlpD,KAAKkpD,OACdxnE,EAASwnE,EAAOxnE,OACtB,IAAI6nE,EAAYrhE,EAChB,GAAIxG,EAAQ,CACV,MAAM2sE,EAAYxzC,GAAcxxB,EAAQyxB,IAAK9a,KAAK3T,EAAG2T,KAAKoG,OAQ1D,IAPA4O,EAAG3oB,EAAIm/D,GAAYxrD,KAAM3W,EAAQsmE,YAAatmE,GAC9C2rB,EAAG1oB,GAAKjD,EAAQghE,gBAChB1mD,EAAIiH,UAAYyjD,EAAUzjD,UAAUvhB,EAAQsmE,aAC5ChsD,EAAIkH,aAAe,SACnB0+C,EAAav8C,GAAO3jB,EAAQkgE,YAC5B5lD,EAAIgH,UAAYthB,EAAQumE,YACxBjsD,EAAIN,KAAOkmD,EAAWtjD,OACjB/d,EAAI,EAAGA,EAAIxG,IAAUwG,EACxByb,EAAIwH,SAAS+9C,EAAOhhE,GAAImmE,EAAUhiE,EAAE2oB,EAAG3oB,GAAI2oB,EAAG1oB,EAAIi9D,EAAW/lD,WAAa,GAC1EwR,EAAG1oB,GAAKi9D,EAAW/lD,WAAana,EAAQihE,aAE5C,CACF,CACA,cAAAzX,CAAe79B,EAAIrR,EAAKksD,EAAaxmE,GACnC,MAAM,OAACuhE,EAAM,OAAEF,GAAU1qD,MACnB,EAAC3T,EAAC,EAAEC,GAAK0oB,GACT,MAAC5O,EAAK,OAAEqB,GAAUooD,GAClB,QAAC9jD,EAAO,SAAEG,EAAQ,WAAEF,EAAU,YAAEC,GAAea,GAAczjB,EAAQwe,cAC3ElE,EAAIgH,UAAYthB,EAAQsZ,gBACxBgB,EAAIoH,YAAc1hB,EAAQuZ,YAC1Be,EAAIqH,UAAY3hB,EAAQuf,YACxBjF,EAAIyE,YACJzE,EAAI4E,OAAOlc,EAAI0f,EAASzf,GACT,QAAXo+D,GACF1qD,KAAK6tD,UAAU74C,EAAIrR,EAAKksD,EAAaxmE,GAEvCsa,EAAI6E,OAAOnc,EAAI+Z,EAAQ8F,EAAU5f,GACjCqX,EAAImsD,iBAAiBzjE,EAAI+Z,EAAO9Z,EAAGD,EAAI+Z,EAAO9Z,EAAI4f,GACnC,WAAXw+C,GAAkC,UAAXE,GACzB5qD,KAAK6tD,UAAU74C,EAAIrR,EAAKksD,EAAaxmE,GAEvCsa,EAAI6E,OAAOnc,EAAI+Z,EAAO9Z,EAAImb,EAASwE,GACnCtI,EAAImsD,iBAAiBzjE,EAAI+Z,EAAO9Z,EAAImb,EAAQpb,EAAI+Z,EAAQ6F,EAAa3f,EAAImb,GAC1D,WAAXijD,GACF1qD,KAAK6tD,UAAU74C,EAAIrR,EAAKksD,EAAaxmE,GAEvCsa,EAAI6E,OAAOnc,EAAI2f,EAAY1f,EAAImb,GAC/B9D,EAAImsD,iBAAiBzjE,EAAGC,EAAImb,EAAQpb,EAAGC,EAAImb,EAASuE,GACrC,WAAX0+C,GAAkC,SAAXE,GACzB5qD,KAAK6tD,UAAU74C,EAAIrR,EAAKksD,EAAaxmE,GAEvCsa,EAAI6E,OAAOnc,EAAGC,EAAIyf,GAClBpI,EAAImsD,iBAAiBzjE,EAAGC,EAAGD,EAAI0f,EAASzf,GACxCqX,EAAI2E,YACJ3E,EAAIgF,OACAtf,EAAQuf,YAAc,GACxBjF,EAAIkF,QAER,CACA,sBAAAknD,CAAuB1mE,GACrB,MAAM2Z,EAAQhD,KAAKgD,MACb2b,EAAQ3e,KAAK2jB,YACbqsC,EAAQrxC,GAASA,EAAMtyB,EACvB4jE,EAAQtxC,GAASA,EAAMryB,EAC7B,GAAI0jE,GAASC,EAAO,CAClB,MAAM5zB,EAAWksB,GAAYl/D,EAAQgzC,UAAU/1C,KAAK0Z,KAAMA,KAAKyf,QAASzf,KAAK6rD,gBAC7E,IAAKxvB,EACH,OAEF,MAAMzxC,EAAOoV,KAAK8rD,MAAQ9C,GAAehpD,KAAM3W,GACzCqkE,EAAkBlsE,OAAOge,OAAO,CAAC,EAAG68B,EAAUr8B,KAAK8rD,OACnDV,EAAYH,GAAmBjoD,EAAO3Z,EAASqkE,GAC/C3kD,EAAQoiD,GAAmB9hE,EAASqkE,EAAiBtC,EAAWpoD,GAClEgtD,EAAMnuC,MAAQ9Y,EAAM1c,GAAK4jE,EAAMpuC,MAAQ9Y,EAAMzc,IAC/C0T,KAAK4qD,OAASQ,EAAUR,OACxB5qD,KAAK0qD,OAASU,EAAUV,OACxB1qD,KAAKoG,MAAQxb,EAAKwb,MAClBpG,KAAKyH,OAAS7c,EAAK6c,OACnBzH,KAAKksD,OAAS7vB,EAAShwC,EACvB2T,KAAKmsD,OAAS9vB,EAAS/vC,EACvB0T,KAAK2tB,qBAAqB3L,OAAOhiB,KAAM+I,GAE3C,CACF,CACA,IAAAyW,CAAK7b,GACH,MAAMta,EAAU2W,KAAK3W,QAAQ2nB,WAAWhR,KAAKsH,cAC7C,IAAIskD,EAAU5rD,KAAK4rD,QACnB,IAAKA,EACH,OAEF5rD,KAAK+vD,uBAAuB1mE,GAC5B,MAAMwmE,EAAc,CAClBzpD,MAAOpG,KAAKoG,MACZqB,OAAQzH,KAAKyH,QAETuN,EAAK,CACT3oB,EAAG2T,KAAK3T,EACRC,EAAG0T,KAAK1T,GAEVs/D,EAAUtpE,KAAKkK,IAAIo/D,GAAW,KAAO,EAAIA,EACzC,MAAMrrB,EAAUxzB,GAAU1jB,EAAQk3C,SAC5B2vB,EAAoBlwD,KAAKtc,MAAMhC,QAAUse,KAAK+pD,WAAWroE,QAAUse,KAAKipD,KAAKvnE,QAAUse,KAAKgqD,UAAUtoE,QAAUse,KAAKkpD,OAAOxnE,OAC9H2H,EAAQm+C,SAAW0oB,IACrBvsD,EAAI8C,OACJ9C,EAAIwsD,YAAcvE,EAClB5rD,KAAK6yC,eAAe79B,EAAIrR,EAAKksD,EAAaxmE,GAC1CiyB,GAAsB3X,EAAKta,EAAQ+mE,eACnCp7C,EAAG1oB,GAAKi0C,EAAQn3B,IAChBpJ,KAAKszC,UAAUt+B,EAAIrR,EAAKta,GACxB2W,KAAKkvD,SAASl6C,EAAIrR,EAAKta,GACvB2W,KAAK0vD,WAAW16C,EAAIrR,EAAKta,GACzBuyB,GAAqBjY,EAAKta,EAAQ+mE,eAClCzsD,EAAIkD,UAER,CACA,iBAAAs5C,GACE,OAAOngD,KAAKyf,SAAW,EACzB,CACA,iBAAA2gC,CAAkBC,EAAgBmI,GAChC,MAAMlI,EAAatgD,KAAKyf,QAClBsC,EAASs+B,EAAer7D,KAAI,EAAE2D,eAAcxG,YAChD,MAAM0iC,EAAO7kB,KAAKgD,MAAMkmB,eAAevgC,GACvC,IAAKk8B,EACH,MAAM,IAAI1T,MAAM,kCAAoCxoB,GAEtD,MAAO,CACLA,eACA2tB,QAASuO,EAAK3jC,KAAKiB,GACnBA,QACD,IAEGm3C,GAAWjxC,EAAei4D,EAAYv+B,GACtCsuC,EAAkBrwD,KAAKswD,iBAAiBvuC,EAAQymC,IAClDlvB,GAAW+2B,KACbrwD,KAAKyf,QAAUsC,EACf/hB,KAAK6rD,eAAiBrD,EACtBxoD,KAAKuwD,qBAAsB,EAC3BvwD,KAAKgiB,QAAO,GAEhB,CACA,WAAAwuC,CAAYrjE,EAAGozD,EAAQI,GAAc,GACnC,GAAIJ,GAAUvgD,KAAKuwD,oBACjB,OAAO,EAETvwD,KAAKuwD,qBAAsB,EAC3B,MAAMlnE,EAAU2W,KAAK3W,QACfi3D,EAAatgD,KAAKyf,SAAW,GAC7BsC,EAAS/hB,KAAK8gD,mBAAmB3zD,EAAGmzD,EAAYC,EAAQI,GACxD0P,EAAkBrwD,KAAKswD,iBAAiBvuC,EAAQ50B,GAChDmsC,EAAUinB,IAAWl4D,EAAe05B,EAAQu+B,IAAe+P,EAWjE,OAVI/2B,IACFt5B,KAAKyf,QAAUsC,GACX14B,EAAQm+C,SAAWn+C,EAAQukE,YAC7B5tD,KAAK6rD,eAAiB,CACpBx/D,EAAGc,EAAEd,EACLC,EAAGa,EAAEb,GAEP0T,KAAKgiB,QAAO,EAAMu+B,KAGfjnB,CACT,CACA,kBAAAwnB,CAAmB3zD,EAAGmzD,EAAYC,EAAQI,GACxC,MAAMt3D,EAAU2W,KAAK3W,QACrB,GAAe,aAAX8D,EAAEnN,KACJ,MAAO,GAET,IAAK2gE,EACH,OAAOL,EAET,MAAMv+B,EAAS/hB,KAAKgD,MAAMs8C,0BAA0BnyD,EAAG9D,EAAQ2a,KAAM3a,EAASk3D,GAI9E,OAHIl3D,EAAQpB,SACV85B,EAAO95B,UAEF85B,CACT,CACA,gBAAAuuC,CAAiBvuC,EAAQ50B,GACvB,MAAM,OAAC++D,EAAM,OAAEC,EAAM,QAAE9iE,GAAW2W,KAC5Bq8B,EAAWksB,GAAYl/D,EAAQgzC,UAAU/1C,KAAK0Z,KAAM+hB,EAAQ50B,GAClE,OAAoB,IAAbkvC,IAAuB6vB,IAAW7vB,EAAShwC,GAAK8/D,IAAW9vB,EAAS/vC,EAC7E,EAEFq/D,GAAQpD,YAAcA,GACtB,IAAIkI,GAAiB,CACnBxpE,GAAI,UACJypE,SAAU/E,GACVpD,eACA,SAAAoI,CAAU3tD,EAAO4tD,EAAOvnE,GAClBA,IACF2Z,EAAMmyB,QAAU,IAAIw2B,GAAQ,CAAC3oD,QAAO3Z,YAExC,EACA,YAAA0iD,CAAa/oC,EAAO4tD,EAAOvnE,GACrB2Z,EAAMmyB,SACRnyB,EAAMmyB,QAAQvN,WAAWv+B,EAE7B,EACA,KAAAggC,CAAMrmB,EAAO4tD,EAAOvnE,GACd2Z,EAAMmyB,SACRnyB,EAAMmyB,QAAQvN,WAAWv+B,EAE7B,EACA,SAAAwnE,CAAU7tD,GACR,MAAMmyB,EAAUnyB,EAAMmyB,QAChBjvC,EAAO,CACXivC,YAEqD,IAAnDnyB,EAAM4qC,cAAc,oBAAqB1nD,KAGzCivC,GACFA,EAAQ3V,KAAKxc,EAAMW,KAErBX,EAAM4qC,cAAc,mBAAoB1nD,GAC1C,EACA,UAAA4qE,CAAW9tD,EAAO9c,GAChB,GAAI8c,EAAMmyB,QAAS,CACjB,MAAMsH,EAAmBv2C,EAAKq6D,OAC1Bv9C,EAAMmyB,QAAQq7B,YAAYtqE,EAAKg6B,MAAOuc,EAAkBv2C,EAAKy6D,eAC/Dz6D,EAAKozC,SAAU,EAEnB,CACF,EACA92B,SAAU,CACRglC,SAAS,EACTomB,SAAU,KACVvxB,SAAU,UACV15B,gBAAiB,kBACjB2rD,WAAY,OACZhF,UAAW,CACT9oD,OAAQ,QAEVypD,aAAc,EACdC,kBAAmB,EACnB/f,WAAY,OACZslB,UAAW,OACXrF,YAAa,EACbf,SAAU,CACV,EACA8F,UAAW,OACXS,YAAa,OACbtF,cAAe,EACfD,gBAAiB,EACjBd,WAAY,CACV/oD,OAAQ,QAEVmvD,YAAa,OACbpvB,QAAS,EACTwqB,aAAc,EACdD,UAAW,EACXjjD,aAAc,EACduhD,UAAW,CAACzlD,EAAK0G,IAASA,EAAKg/C,SAASz+D,KACxCu+D,SAAU,CAACxlD,EAAK0G,IAASA,EAAKg/C,SAASz+D,KACvCkkE,mBAAoB,OACpB3E,eAAe,EACfhrB,WAAY,EACZv8B,YAAa,gBACbgG,YAAa,EACblG,UAAW,CACTqc,SAAU,IACVuC,OAAQ,gBAEVyB,WAAY,CACVH,QAAS,CACP5iC,KAAM,SACN2iC,WAAY,CAAC,IAAK,IAAK,QAAS,SAAU,SAAU,WAEtDipC,QAAS,CACPtqC,OAAQ,SACRvC,SAAU,MAGdF,UAAW,CACT4tC,YAAa1lE,EACb,KAAArD,CAAM6oE,GACJ,GAAIA,EAAa7qE,OAAS,EAAG,CAC3B,MAAMmJ,EAAO0hE,EAAa,GACpBxhC,EAASlgC,EAAKmY,MAAM9hB,KAAK6pC,OACzBgmC,EAAahmC,EAASA,EAAOrpC,OAAS,EAC5C,GAAIse,MAAQA,KAAK3W,SAAiC,YAAtB2W,KAAK3W,QAAQ2a,KACvC,OAAOnZ,EAAKo9B,QAAQ9nC,OAAS,GACxB,GAAI0K,EAAK1K,MACd,OAAO0K,EAAK1K,MACP,GAAI4wE,EAAa,GAAKlmE,EAAKmiC,UAAY+jC,EAC5C,OAAOhmC,EAAOlgC,EAAKmiC,UAEvB,CACA,MAAO,EACT,EACA0/B,WAAY3lE,EACZgjE,WAAYhjE,EACZgmE,YAAahmE,EACb,KAAA5G,CAAMs4C,GACJ,GAAIz4B,MAAQA,KAAK3W,SAAiC,YAAtB2W,KAAK3W,QAAQ2a,KACvC,OAAOy0B,EAAYt4C,MAAQ,KAAOs4C,EAAYE,gBAAkBF,EAAYE,eAE9E,IAAIx4C,EAAQs4C,EAAYxQ,QAAQ9nC,OAAS,GACrCA,IACFA,GAAS,MAEX,MAAMD,EAAQu4C,EAAYE,eAI1B,OAHKzxC,EAAchH,KACjBC,GAASD,GAEJC,CACT,EACA,UAAAotE,CAAW90B,GACT,MACMpvC,EADOovC,EAAYz1B,MAAMkmB,eAAeuP,EAAY9vC,cACrC88B,WAAW/L,SAAS+e,EAAYzL,WACrD,MAAO,CACLpqB,YAAavZ,EAAQuZ,YACrBD,gBAAiBtZ,EAAQsZ,gBACzBiG,YAAavf,EAAQuf,YACrBsV,WAAY70B,EAAQ60B,WACpBC,iBAAkB90B,EAAQ80B,iBAC1BujC,aAAc,EAElB,EACA,cAAA+L,GACE,OAAOztD,KAAK3W,QAAQomE,SACtB,EACA,eAAAjC,CAAgB/0B,GACd,MACMpvC,EADOovC,EAAYz1B,MAAMkmB,eAAeuP,EAAY9vC,cACrC88B,WAAW/L,SAAS+e,EAAYzL,WACrD,MAAO,CACLllB,WAAYze,EAAQye,WACpBC,SAAU1e,EAAQ0e,SAEtB,EACAilD,WAAYjmE,EACZijE,UAAWjjE,EACXomE,aAAcpmE,EACdmiE,OAAQniE,EACRqmE,YAAarmE,IAGjBg/C,cAAe,CACbsjB,SAAU,OACVE,WAAY,OACZD,UAAW,QAEbtnD,YAAa,CACX0D,YAAcV,GAAkB,WAATA,GAA8B,aAATA,GAAgC,aAATA,EACnEY,YAAY,EACZiZ,UAAW,CACTnZ,aAAa,EACbE,YAAY,GAEdlD,UAAW,CACTmD,WAAW,GAEbkd,WAAY,CACVld,UAAW,cAGfyzC,uBAAwB,CAAC,gBAsB3B,SAAS0X,GAAejmC,EAAQkC,EAAK9qC,EAAO8uE,GAC1C,MAAMtpB,EAAQ5c,EAAO5hC,QAAQ8jC,GAC7B,IAAe,IAAX0a,EACF,MAZgB,EAAC5c,EAAQkC,EAAK9qC,EAAO8uE,KACpB,iBAARhkC,GACT9qC,EAAQ4oC,EAAOvoC,KAAKyqC,GAAO,EAC3BgkC,EAAYC,QAAQ,CAAC/uE,QAAOhC,MAAO8sC,KAC1B7gC,MAAM6gC,KACf9qC,EAAQ,MAEHA,GAKEgvE,CAAYpmC,EAAQkC,EAAK9qC,EAAO8uE,GAGzC,OAAOtpB,IADM5c,EAAOqmC,YAAYnkC,GACR9qC,EAAQwlD,CAClC,CAEA,MAAM0pB,WAAsBhnB,GAC1B,WAAAvqC,CAAYohB,GACVgR,MAAMhR,GACNlhB,KAAKsxD,iBAAc9wE,EACnBwf,KAAKuxD,YAAc,EACnBvxD,KAAKwxD,aAAe,EACtB,CACA,IAAAhmB,CAAKmM,GACH,MAAM8Z,EAAQzxD,KAAKwxD,aACnB,GAAIC,EAAM/vE,OAAQ,CAChB,MAAMqpC,EAAS/qB,KAAKgrB,YACpB,IAAK,MAAM,MAAC7oC,EAAK,MAAEhC,KAAUsxE,EACvB1mC,EAAO5oC,KAAWhC,GACpB4qC,EAAOhkB,OAAO5kB,EAAO,GAGzB6d,KAAKwxD,aAAe,EACtB,CACAt/B,MAAMsZ,KAAKmM,EACb,CACA,KAAAntB,CAAMyC,EAAK9qC,GACT,GAAI+E,EAAc+lC,GAChB,OAAO,KAET,MAAMlC,EAAS/qB,KAAKgrB,YAGpB,MA5Be,EAAC7oC,EAAO0K,IAAkB,OAAV1K,EAAiB,KAAOwM,GAAYrM,KAAKuJ,MAAM1J,GAAQ,EAAG0K,GA4BlFk9C,CAFP5nD,EAAQqF,SAASrF,IAAU4oC,EAAO5oC,KAAW8qC,EAAM9qC,EAC/C6uE,GAAejmC,EAAQkC,EAAKtlC,EAAexF,EAAO8qC,GAAMjtB,KAAKwxD,cACxCzmC,EAAOrpC,OAAS,EAC3C,CACA,mBAAA2qD,GACE,MAAM,WAACpgB,EAAU,WAAEC,GAAclsB,KAAKmsB,gBACtC,IAAI,IAACv/B,EAAG,IAAEC,GAAOmT,KAAKyrB,WAAU,GACJ,UAAxBzrB,KAAK3W,QAAQgzB,SACV4P,IACHr/B,EAAM,GAEHs/B,IACHr/B,EAAMmT,KAAKgrB,YAAYtpC,OAAS,IAGpCse,KAAKpT,IAAMA,EACXoT,KAAKnT,IAAMA,CACb,CACA,UAAA8/C,GACE,MAAM//C,EAAMoT,KAAKpT,IACXC,EAAMmT,KAAKnT,IACXioC,EAAS90B,KAAK3W,QAAQyrC,OACtBxE,EAAQ,GACd,IAAIvF,EAAS/qB,KAAKgrB,YAClBD,EAAkB,IAARn+B,GAAaC,IAAQk+B,EAAOrpC,OAAS,EAAKqpC,EAASA,EAAO1kC,MAAMuG,EAAKC,EAAM,GACrFmT,KAAKuxD,YAAcjvE,KAAKuK,IAAIk+B,EAAOrpC,QAAUozC,EAAS,EAAI,GAAI,GAC9D90B,KAAKsxD,YAActxD,KAAKpT,KAAOkoC,EAAS,GAAM,GAC9C,IAAK,IAAI50C,EAAQ0M,EAAK1M,GAAS2M,EAAK3M,IAClCowC,EAAM9tC,KAAK,CAACtC,UAEd,OAAOowC,CACT,CACA,gBAAA9D,CAAiBtsC,GACf,MAAM6qC,EAAS/qB,KAAKgrB,YACpB,OAAI9qC,GAAS,GAAKA,EAAQ6qC,EAAOrpC,OACxBqpC,EAAO7qC,GAETA,CACT,CACA,SAAAmjC,GACE6O,MAAM7O,YACDrjB,KAAKqyB,iBACRryB,KAAKk8B,gBAAkBl8B,KAAKk8B,eAEhC,CACA,gBAAA7L,CAAiBnwC,GAIf,MAHqB,iBAAVA,IACTA,EAAQ8f,KAAKwqB,MAAMtqC,IAEJ,OAAVA,EAAiBsrC,IAAMxrB,KAAKk1B,oBAAoBh1C,EAAQ8f,KAAKsxD,aAAetxD,KAAKuxD,YAC1F,CACA,eAAAhhC,CAAgBpuC,GACd,MAAMmuC,EAAQtwB,KAAKswB,MACnB,OAAInuC,EAAQ,GAAKA,EAAQmuC,EAAM5uC,OAAS,EAC/B,KAEFse,KAAKqwB,iBAAiBC,EAAMnuC,GAAOjC,MAC5C,CACA,gBAAAiwD,CAAiBlpC,GACf,OAAO3kB,KAAKuJ,MAAMmU,KAAKsxD,YAActxD,KAAKqwC,mBAAmBppC,GAASjH,KAAKuxD,YAC7E,CACA,YAAAn/B,GACE,OAAOpyB,KAAKqJ,MACd,EASF,SAASqoD,GAAgBC,EAAmBC,GAC1C,MAAMthC,EAAQ,IAER,OAACjU,EAAM,KAAEw1B,EAAI,IAAEjlD,EAAG,IAAEC,EAAG,UAAEglE,EAAS,MAAE31C,EAAK,SAAE41C,EAAQ,UAAEC,EAAS,cAAEC,GAAiBL,EACjFp2B,EAAOsW,GAAQ,EACfogB,EAAYH,EAAW,GACtBllE,IAAKslE,EAAMrlE,IAAKslE,GAAQP,EACzB3lC,GAAc/kC,EAAc0F,GAC5Bs/B,GAAchlC,EAAc2F,GAC5BulE,GAAgBlrE,EAAcg1B,GAC9Bm2C,GAAcF,EAAOD,IAASH,EAAY,GAChD,IACIjxC,EAAQwxC,EAASC,EAASC,EAD1B38B,EAAUnqC,IAASymE,EAAOD,GAAQD,EAAY12B,GAAQA,EAE1D,GAAI1F,EAXgB,QAWU5J,IAAeC,EAC3C,MAAO,CAAC,CAAChsC,MAAOgyE,GAAO,CAAChyE,MAAOiyE,IAEjCK,EAAYlwE,KAAKulD,KAAKsqB,EAAOt8B,GAAWvzC,KAAKC,MAAM2vE,EAAOr8B,GACtD28B,EAAYP,IACdp8B,EAAUnqC,GAAQ8mE,EAAY38B,EAAUo8B,EAAY12B,GAAQA,GAEzDr0C,EAAc2qE,KACjB/wC,EAASx+B,KAAK0J,IAAI,GAAI6lE,GACtBh8B,EAAUvzC,KAAKulD,KAAKhS,EAAU/U,GAAUA,GAE3B,UAAXzE,GACFi2C,EAAUhwE,KAAKC,MAAM2vE,EAAOr8B,GAAWA,EACvC08B,EAAUjwE,KAAKulD,KAAKsqB,EAAOt8B,GAAWA,IAEtCy8B,EAAUJ,EACVK,EAAUJ,GAERlmC,GAAcC,GAAc2lB,GDj3RlC,SAAqBxlD,EAAGE,GACtB,MAAMkmE,EAAUnwE,KAAKuJ,MAAMQ,GAC3B,OAASomE,EAAUlmE,GAAYF,GAAQomE,EAAUlmE,GAAYF,CAC/D,CC82R0CqmE,EAAa7lE,EAAMD,GAAOilD,EAAMhc,EAAU,MAChF28B,EAAYlwE,KAAKuJ,MAAMvJ,KAAKsK,KAAKC,EAAMD,GAAOipC,EAASi8B,IACvDj8B,GAAWhpC,EAAMD,GAAO4lE,EACxBF,EAAU1lE,EACV2lE,EAAU1lE,GACDulE,GACTE,EAAUrmC,EAAar/B,EAAM0lE,EAC7BC,EAAUrmC,EAAar/B,EAAM0lE,EAC7BC,EAAYt2C,EAAQ,EACpB2Z,GAAW08B,EAAUD,GAAWE,IAEhCA,GAAaD,EAAUD,GAAWz8B,EAEhC28B,EADE1mE,GAAa0mE,EAAWlwE,KAAKuJ,MAAM2mE,GAAY38B,EAAU,KAC/CvzC,KAAKuJ,MAAM2mE,GAEXlwE,KAAKulD,KAAK2qB,IAG1B,MAAMG,EAAgBrwE,KAAKuK,IACzBK,GAAe2oC,GACf3oC,GAAeolE,IAEjBxxC,EAASx+B,KAAK0J,IAAI,GAAI9E,EAAc2qE,GAAac,EAAgBd,GACjES,EAAUhwE,KAAKuJ,MAAMymE,EAAUxxC,GAAUA,EACzCyxC,EAAUjwE,KAAKuJ,MAAM0mE,EAAUzxC,GAAUA,EACzC,IAAIliB,EAAI,EAcR,IAbIqtB,IACE+lC,GAAiBM,IAAY1lE,GAC/B0jC,EAAM9tC,KAAK,CAACtC,MAAO0M,IACf0lE,EAAU1lE,GACZgS,IAEE9S,GAAaxJ,KAAKuJ,OAAOymE,EAAU1zD,EAAIi3B,GAAW/U,GAAUA,EAAQl0B,EAAKgmE,GAAkBhmE,EAAKylE,EAAYV,KAC9G/yD,KAEO0zD,EAAU1lE,GACnBgS,KAGGA,EAAI4zD,IAAa5zD,EACtB0xB,EAAM9tC,KAAK,CAACtC,MAAOoC,KAAKuJ,OAAOymE,EAAU1zD,EAAIi3B,GAAW/U,GAAUA,IAWpE,OATIoL,GAAc8lC,GAAiBO,IAAY1lE,EACzCyjC,EAAM5uC,QAAUoK,GAAawkC,EAAMA,EAAM5uC,OAAS,GAAGxB,MAAO2M,EAAK+lE,GAAkB/lE,EAAKwlE,EAAYV,IACtGrhC,EAAMA,EAAM5uC,OAAS,GAAGxB,MAAQ2M,EAEhCyjC,EAAM9tC,KAAK,CAACtC,MAAO2M,IAEXq/B,GAAcqmC,IAAY1lE,GACpCyjC,EAAM9tC,KAAK,CAACtC,MAAOqyE,IAEdjiC,CACT,CACA,SAASsiC,GAAkB1yE,EAAOmyE,GAAY,WAAC/gC,EAAU,YAAEuX,IACzD,MAAM5gC,EAAMnb,GAAU+7C,GAChBzpC,GAASkyB,EAAahvC,KAAK0M,IAAIiZ,GAAO3lB,KAAK2N,IAAIgY,KAAS,KACxDvmB,EAAS,IAAO2wE,GAAc,GAAKnyE,GAAOwB,OAChD,OAAOY,KAAKsK,IAAIylE,EAAajzD,EAAO1d,EACtC,CAhGA2vE,GAAcpqE,GAAK,WACnBoqE,GAAc7uD,SAAW,CACvB8tB,MAAO,CACL3qC,SAAU0rE,GAAcjrE,UAAUomC,mBA8FtC,MAAMqmC,WAAwBxoB,GAC5B,WAAAvqC,CAAYohB,GACVgR,MAAMhR,GACNlhB,KAAKnZ,WAAQrG,EACbwf,KAAKlZ,SAAMtG,EACXwf,KAAKsxD,iBAAc9wE,EACnBwf,KAAK8yD,eAAYtyE,EACjBwf,KAAKuxD,YAAc,CACrB,CACA,KAAA/mC,CAAMyC,EAAK9qC,GACT,OAAI+E,EAAc+lC,KAGE,iBAARA,GAAoBA,aAAe1lC,UAAYC,UAAUylC,GAF5D,MAKDA,CACV,CACA,sBAAA8lC,GACE,MAAM,YAAC99B,GAAej1B,KAAK3W,SACrB,WAAC4iC,EAAU,WAAEC,GAAclsB,KAAKmsB,gBACtC,IAAI,IAACv/B,EAAG,IAAEC,GAAOmT,KACjB,MAAMgzD,EAAS9gE,GAAMtF,EAAMq/B,EAAar/B,EAAMsF,EACxC+gE,EAAS/gE,GAAMrF,EAAMq/B,EAAar/B,EAAMqF,EAC9C,GAAI+iC,EAAa,CACf,MAAMi+B,EAAUznE,GAAKmB,GACfumE,EAAU1nE,GAAKoB,GACjBqmE,EAAU,GAAKC,EAAU,EAC3BF,EAAO,GACEC,EAAU,GAAKC,EAAU,GAClCH,EAAO,EAEX,CACA,GAAIpmE,IAAQC,EAAK,CACf,IAAIioC,EAAS,GACTjoC,GAAOtF,OAAO6rE,kBAAoBxmE,GAAOrF,OAAO8rE,oBAClDv+B,EAASxyC,KAAKkK,IAAU,IAANK,IAEpBomE,EAAOpmE,EAAMioC,GACRG,GACH+9B,EAAOpmE,EAAMkoC,EAEjB,CACA90B,KAAKpT,IAAMA,EACXoT,KAAKnT,IAAMA,CACb,CACA,YAAAymE,GACE,MAAMzsB,EAAW7mC,KAAK3W,QAAQinC,MAC9B,IACIwhC,GADA,cAAC/qB,EAAa,SAAEwsB,GAAY1sB,EAehC,OAbI0sB,GACFzB,EAAWxvE,KAAKulD,KAAK7nC,KAAKnT,IAAM0mE,GAAYjxE,KAAKC,MAAMyd,KAAKpT,IAAM2mE,GAAY,EAC1EzB,EAAW,MAEbA,EAAW,OAGbA,EAAW9xD,KAAKwzD,mBAChBzsB,EAAgBA,GAAiB,IAE/BA,IACF+qB,EAAWxvE,KAAKsK,IAAIm6C,EAAe+qB,IAE9BA,CACT,CACA,gBAAA0B,GACE,OAAOjsE,OAAO4D,iBAChB,CACA,UAAAwhD,GACE,MAAMtiC,EAAOrK,KAAK3W,QACZw9C,EAAWx8B,EAAKimB,MACtB,IAAIwhC,EAAW9xD,KAAKszD,eACpBxB,EAAWxvE,KAAKuK,IAAI,EAAGilE,GACvB,MAcMxhC,EAAQohC,GAdkB,CAC9BI,WACAz1C,OAAQhS,EAAKgS,OACbzvB,IAAKyd,EAAKzd,IACVC,IAAKwd,EAAKxd,IACVglE,UAAWhrB,EAASgrB,UACpBhgB,KAAMhL,EAAS0sB,SACfr3C,MAAO2qB,EAAS3qB,MAChB61C,UAAW/xD,KAAK6zC,aAChBviB,WAAYtxB,KAAKqyB,eACjBwW,YAAahC,EAASgC,aAAe,EACrCmpB,eAA0C,IAA3BnrB,EAASmrB,eAERhyD,KAAK4qC,QAAU5qC,MAajC,MAXoB,UAAhBqK,EAAKgS,QACP5vB,GAAmB6jC,EAAOtwB,KAAM,SAE9BqK,EAAKpiB,SACPqoC,EAAMroC,UACN+X,KAAKnZ,MAAQmZ,KAAKnT,IAClBmT,KAAKlZ,IAAMkZ,KAAKpT,MAEhBoT,KAAKnZ,MAAQmZ,KAAKpT,IAClBoT,KAAKlZ,IAAMkZ,KAAKnT,KAEXyjC,CACT,CACA,SAAAjN,GACE,MAAMiN,EAAQtwB,KAAKswB,MACnB,IAAIzpC,EAAQmZ,KAAKpT,IACb9F,EAAMkZ,KAAKnT,IAEf,GADAqlC,MAAM7O,YACFrjB,KAAK3W,QAAQyrC,QAAUxE,EAAM5uC,OAAQ,CACvC,MAAMozC,GAAUhuC,EAAMD,GAASvE,KAAKuK,IAAIyjC,EAAM5uC,OAAS,EAAG,GAAK,EAC/DmF,GAASiuC,EACThuC,GAAOguC,CACT,CACA90B,KAAKsxD,YAAczqE,EACnBmZ,KAAK8yD,UAAYhsE,EACjBkZ,KAAKuxD,YAAczqE,EAAMD,CAC3B,CACA,gBAAA2lC,CAAiBtsC,GACf,OAAOg6B,GAAah6B,EAAO8f,KAAKgD,MAAM3Z,QAAQ+wB,OAAQpa,KAAK3W,QAAQinC,MAAM1V,OAC3E,EAGF,MAAM64C,WAAoBZ,GACxB,mBAAAxmB,GACE,MAAM,IAACz/C,EAAG,IAAEC,GAAOmT,KAAKyrB,WAAU,GAClCzrB,KAAKpT,IAAMtF,EAAesF,GAAOA,EAAM,EACvCoT,KAAKnT,IAAMvF,EAAeuF,GAAOA,EAAM,EACvCmT,KAAK+yD,wBACP,CACA,gBAAAS,GACE,MAAMliC,EAAatxB,KAAKqyB,eAClB3wC,EAAS4vC,EAAatxB,KAAKoG,MAAQpG,KAAKyH,OACxCohC,EAAc/7C,GAAUkT,KAAK3W,QAAQinC,MAAMuY,aAC3CzpC,GAASkyB,EAAahvC,KAAK0M,IAAI65C,GAAevmD,KAAK2N,IAAI44C,KAAiB,KACxE+G,EAAW5vC,KAAKiwC,wBAAwB,GAC9C,OAAO3tD,KAAKulD,KAAKnmD,EAASY,KAAKsK,IAAI,GAAIgjD,EAASpsC,WAAapE,GAC/D,CACA,gBAAAixB,CAAiBnwC,GACf,OAAiB,OAAVA,EAAiBsrC,IAAMxrB,KAAKk1B,oBAAoBh1C,EAAQ8f,KAAKsxD,aAAetxD,KAAKuxD,YAC1F,CACA,gBAAAphB,CAAiBlpC,GACf,OAAOjH,KAAKsxD,YAActxD,KAAKqwC,mBAAmBppC,GAASjH,KAAKuxD,WAClE,EASF,SAASmC,GAAQC,GAEf,OAAkB,IADHA,EAAWrxE,KAAK0J,IAAI,GAAI1J,KAAKC,MAAMiJ,GAAMmoE,IAE1D,CAVAF,GAAYxsE,GAAK,SACjBwsE,GAAYjxD,SAAW,CACrB8tB,MAAO,CACL3qC,SAAUghD,GAAMX,WAAWC,UA8B/B,MAAM2tB,WAAyBvpB,GAC7B,WAAAvqC,CAAYohB,GACVgR,MAAMhR,GACNlhB,KAAKnZ,WAAQrG,EACbwf,KAAKlZ,SAAMtG,EACXwf,KAAKsxD,iBAAc9wE,EACnBwf,KAAKuxD,YAAc,CACrB,CACA,KAAA/mC,CAAMyC,EAAK9qC,GACT,MAAMjC,EAAQ2yE,GAAgBzsE,UAAUokC,MAAM/jC,MAAMuZ,KAAM,CAACitB,EAAK9qC,IAChE,GAAc,IAAVjC,EAIJ,OAAOoH,EAAepH,IAAUA,EAAQ,EAAIA,EAAQ,KAHlD8f,KAAK6zD,OAAQ,CAIjB,CACA,mBAAAxnB,GACE,MAAM,IAACz/C,EAAG,IAAEC,GAAOmT,KAAKyrB,WAAU,GAClCzrB,KAAKpT,IAAMtF,EAAesF,GAAOtK,KAAKuK,IAAI,EAAGD,GAAO,KACpDoT,KAAKnT,IAAMvF,EAAeuF,GAAOvK,KAAKuK,IAAI,EAAGA,GAAO,KAChDmT,KAAK3W,QAAQ4rC,cACfj1B,KAAK6zD,OAAQ,GAEf7zD,KAAK+yD,wBACP,CACA,sBAAAA,GACE,MAAM,WAAC9mC,EAAU,WAAEC,GAAclsB,KAAKmsB,gBACtC,IAAIv/B,EAAMoT,KAAKpT,IACXC,EAAMmT,KAAKnT,IACf,MAAMmmE,EAAS9gE,GAAMtF,EAAMq/B,EAAar/B,EAAMsF,EACxC+gE,EAAS/gE,GAAMrF,EAAMq/B,EAAar/B,EAAMqF,EACxC4hE,EAAM,CAAC5hE,EAAGhB,IAAM5O,KAAK0J,IAAI,GAAI1J,KAAKC,MAAMiJ,GAAM0G,IAAMhB,GACtDtE,IAAQC,IACND,GAAO,GACTomE,EAAO,GACPC,EAAO,MAEPD,EAAOc,EAAIlnE,GAAM,IACjBqmE,EAAOa,EAAIjnE,EAAK,MAGhBD,GAAO,GACTomE,EAAOc,EAAIjnE,GAAM,IAEfA,GAAO,GACTomE,EAAOa,EAAIlnE,EAAK,IAEdoT,KAAK6zD,OAAS7zD,KAAKpT,MAAQoT,KAAKorC,eAAiBx+C,IAAQknE,EAAI9zD,KAAKpT,IAAK,IACzEomE,EAAOc,EAAIlnE,GAAM,IAEnBoT,KAAKpT,IAAMA,EACXoT,KAAKnT,IAAMA,CACb,CACA,UAAA8/C,GACE,MAAMtiC,EAAOrK,KAAK3W,QAKZinC,EAjFV,SAAuBqhC,EAAmBC,GACxC,MAAMmC,EAASzxE,KAAKC,MAAMiJ,GAAMomE,EAAU/kE,MACpCmnE,EAAiB1xE,KAAKulD,KAAK+pB,EAAU/kE,IAAMvK,KAAK0J,IAAI,GAAI+nE,IACxDzjC,EAAQ,GACd,IAAIqjC,EAAUlsE,EAAgBkqE,EAAkB/kE,IAAKtK,KAAK0J,IAAI,GAAI1J,KAAKC,MAAMiJ,GAAMomE,EAAUhlE,QACzFknE,EAAMxxE,KAAKC,MAAMiJ,GAAMmoE,IACvBM,EAAc3xE,KAAKC,MAAMoxE,EAAUrxE,KAAK0J,IAAI,GAAI8nE,IAChDjC,EAAYiC,EAAM,EAAIxxE,KAAK0J,IAAI,GAAI1J,KAAKkK,IAAIsnE,IAAQ,EACxD,GACExjC,EAAM9tC,KAAK,CAACtC,MAAOyzE,EAASpsB,MAAOmsB,GAAQC,OACzCM,EACkB,KAAhBA,IACFA,EAAc,IACZH,EACFjC,EAAYiC,GAAO,EAAI,EAAIjC,GAE7B8B,EAAUrxE,KAAKuJ,MAAMooE,EAAc3xE,KAAK0J,IAAI,GAAI8nE,GAAOjC,GAAaA,QAC7DiC,EAAMC,GAAWD,IAAQC,GAAUE,EAAcD,GAC1D,MAAME,EAAWzsE,EAAgBkqE,EAAkB9kE,IAAK8mE,GAExD,OADArjC,EAAM9tC,KAAK,CAACtC,MAAOg0E,EAAU3sB,MAAOmsB,GAAQC,KACrCrjC,CACT,CA4DkB6jC,CAJY,CACxBvnE,IAAKoT,KAAKkrC,SACVr+C,IAAKmT,KAAKirC,UAEmCjrC,MAY/C,MAXoB,UAAhBqK,EAAKgS,QACP5vB,GAAmB6jC,EAAOtwB,KAAM,SAE9BqK,EAAKpiB,SACPqoC,EAAMroC,UACN+X,KAAKnZ,MAAQmZ,KAAKnT,IAClBmT,KAAKlZ,IAAMkZ,KAAKpT,MAEhBoT,KAAKnZ,MAAQmZ,KAAKpT,IAClBoT,KAAKlZ,IAAMkZ,KAAKnT,KAEXyjC,CACT,CACA,gBAAA9D,CAAiBtsC,GACf,YAAiBM,IAAVN,EACH,IACAg6B,GAAah6B,EAAO8f,KAAKgD,MAAM3Z,QAAQ+wB,OAAQpa,KAAK3W,QAAQinC,MAAM1V,OACxE,CACA,SAAAyI,GACE,MAAMx8B,EAAQmZ,KAAKpT,IACnBslC,MAAM7O,YACNrjB,KAAKsxD,YAAc9lE,GAAM3E,GACzBmZ,KAAKuxD,YAAc/lE,GAAMwU,KAAKnT,KAAOrB,GAAM3E,EAC7C,CACA,gBAAAwpC,CAAiBnwC,GAIf,YAHcM,IAAVN,GAAiC,IAAVA,IACzBA,EAAQ8f,KAAKpT,KAED,OAAV1M,GAAkBkM,MAAMlM,GACnBsrC,IAEFxrB,KAAKk1B,mBAAmBh1C,IAAU8f,KAAKpT,IAC1C,GACCpB,GAAMtL,GAAS8f,KAAKsxD,aAAetxD,KAAKuxD,YAC/C,CACA,gBAAAphB,CAAiBlpC,GACf,MAAMmpC,EAAUpwC,KAAKqwC,mBAAmBppC,GACxC,OAAO3kB,KAAK0J,IAAI,GAAIgU,KAAKsxD,YAAclhB,EAAUpwC,KAAKuxD,YACxD,EAYF,SAAS6C,GAAsB/pD,GAC7B,MAAMw8B,EAAWx8B,EAAKimB,MACtB,GAAIuW,EAAS/L,SAAWzwB,EAAKywB,QAAS,CACpC,MAAMyF,EAAUxzB,GAAU85B,EAAS2C,iBACnC,OAAO7hD,EAAek/C,EAASxjC,MAAQwjC,EAASxjC,KAAKzY,KAAM4X,GAASa,KAAKzY,MAAQ21C,EAAQ94B,MAC3F,CACA,OAAO,CACT,CAQA,SAAS4sD,GAAgBzmE,EAAO1D,EAAKU,EAAMgC,EAAKC,GAC9C,OAAIe,IAAUhB,GAAOgB,IAAUf,EACtB,CACLhG,MAAOqD,EAAOU,EAAO,EACrB9D,IAAKoD,EAAOU,EAAO,GAEZgD,EAAQhB,GAAOgB,EAAQf,EACzB,CACLhG,MAAOqD,EAAMU,EACb9D,IAAKoD,GAGF,CACLrD,MAAOqD,EACPpD,IAAKoD,EAAMU,EAEf,CACA,SAAS0pE,GAAmB9vD,GAC1B,MAAMktB,EAAO,CACXn/B,EAAGiS,EAAM0E,KAAO1E,EAAM+vD,SAASrrD,KAC/B/W,EAAGqS,EAAM2E,MAAQ3E,EAAM+vD,SAASprD,MAChCra,EAAG0V,EAAM4E,IAAM5E,EAAM+vD,SAASnrD,IAC9Bze,EAAG6Z,EAAM6E,OAAS7E,EAAM+vD,SAASlrD,QAE7BmrD,EAAShzE,OAAOge,OAAO,CAAC,EAAGkyB,GAC3Byc,EAAa,GACb5N,EAAU,GACVk0B,EAAajwD,EAAMkwD,aAAahzE,OAChCizE,EAAiBnwD,EAAMnb,QAAQ2xC,YAC/B45B,EAAkBD,EAAeE,kBAAoB9pE,EAAK0pE,EAAa,EAC7E,IAAK,IAAIvsE,EAAI,EAAGA,EAAIusE,EAAYvsE,IAAK,CACnC,MAAMmiB,EAAOsqD,EAAe3jD,WAAWxM,EAAMswD,qBAAqB5sE,IAClEq4C,EAAQr4C,GAAKmiB,EAAKk2B,QAClB,MAAMrF,EAAgB12B,EAAMuwD,iBAAiB7sE,EAAGsc,EAAMwwD,YAAcz0B,EAAQr4C,GAAI0sE,GAC1EK,EAASjoD,GAAO3C,EAAKhH,MACrB6xD,GA1CgBvxD,EA0CYa,EAAMb,IA1CbN,EA0CkB4xD,EAzC/C90E,EAAQgH,EAD2BhH,EA0CoBqkB,EAAMkwD,aAAaxsE,IAzCjD/H,EAAQ,CAACA,GAC3B,CACL+S,EAAGmT,GAAa1C,EAAKN,EAAK4C,OAAQ9lB,GAClCqS,EAAGrS,EAAMuB,OAAS2hB,EAAKG,aAuCvB2qC,EAAWjmD,GAAKgtE,EAChB,MAAMpmB,EAAe3gD,GAAgBqW,EAAMg2B,cAActyC,GAAK0sE,GACxDhnE,EAAQtL,KAAKuJ,MAAMmB,GAAU8hD,IAGnCqmB,GAAaX,EAAQ9iC,EAAMod,EAFXulB,GAAgBzmE,EAAOstC,EAAc7uC,EAAG6oE,EAAShiE,EAAG,EAAG,KACvDmhE,GAAgBzmE,EAAOstC,EAAc5uC,EAAG4oE,EAAS1iE,EAAG,GAAI,KAE1E,CAjDF,IAA0BmR,EAAKN,EAAMljB,EAkDnCqkB,EAAM4wD,eACJ1jC,EAAKn/B,EAAIiiE,EAAOjiE,EAChBiiE,EAAOriE,EAAIu/B,EAAKv/B,EAChBu/B,EAAK5iC,EAAI0lE,EAAO1lE,EAChB0lE,EAAO7pE,EAAI+mC,EAAK/mC,GAElB6Z,EAAM6wD,iBAsBR,SAA8B7wD,EAAO2pC,EAAY5N,GAC/C,MAAMhyB,EAAQ,GACRkmD,EAAajwD,EAAMkwD,aAAahzE,OAChC2oB,EAAO7F,EAAMnb,QACbisE,EAAQlB,GAAsB/pD,GAAQ,EACtCkrD,EAAgB/wD,EAAMwwD,YACtBJ,EAAkBvqD,EAAK2wB,YAAY65B,kBAAoB9pE,EAAK0pE,EAAa,EAC/E,IAAK,IAAIvsE,EAAI,EAAGA,EAAIusE,EAAYvsE,IAAK,CACnC,MAAMstE,EAAqBhxD,EAAMuwD,iBAAiB7sE,EAAGqtE,EAAgBD,EAAQ/0B,EAAQr4C,GAAI0sE,GACnFhnE,EAAQtL,KAAKuJ,MAAMmB,GAAUmB,GAAgBqnE,EAAmB5nE,MAAQvC,KACxET,EAAOujD,EAAWjmD,GAClBoE,EAAImpE,GAAUD,EAAmBlpE,EAAG1B,EAAK4H,EAAG5E,GAC5Cgd,EAAY8qD,GAAqB9nE,GACjCsb,EAAOysD,GAAiBH,EAAmBnpE,EAAGzB,EAAKsI,EAAG0X,GAC5D2D,EAAM/rB,KAAK,CACT6J,EAAGmpE,EAAmBnpE,EACtBC,IACAse,YACA1B,OACAE,IAAK9c,EACL6c,MAAOD,EAAOte,EAAKsI,EACnBmW,OAAQ/c,EAAI1B,EAAK4H,GAErB,CACA,OAAO+b,CACT,CA/C2BqnD,CAAqBpxD,EAAO2pC,EAAY5N,EACnE,CACA,SAAS40B,GAAaX,EAAQ9iC,EAAM9jC,EAAOioE,EAASC,GAClD,MAAM9mE,EAAM1M,KAAKkK,IAAIlK,KAAK0M,IAAIpB,IACxBqC,EAAM3N,KAAKkK,IAAIlK,KAAK2N,IAAIrC,IAC9B,IAAIvB,EAAI,EACJC,EAAI,EACJupE,EAAQhvE,MAAQ6qC,EAAKn/B,GACvBlG,GAAKqlC,EAAKn/B,EAAIsjE,EAAQhvE,OAASmI,EAC/BwlE,EAAOjiE,EAAIjQ,KAAKsK,IAAI4nE,EAAOjiE,EAAGm/B,EAAKn/B,EAAIlG,IAC9BwpE,EAAQ/uE,IAAM4qC,EAAKv/B,IAC5B9F,GAAKwpE,EAAQ/uE,IAAM4qC,EAAKv/B,GAAKnD,EAC7BwlE,EAAOriE,EAAI7P,KAAKuK,IAAI2nE,EAAOriE,EAAGu/B,EAAKv/B,EAAI9F,IAErCypE,EAAQjvE,MAAQ6qC,EAAK5iC,GACvBxC,GAAKolC,EAAK5iC,EAAIgnE,EAAQjvE,OAASoJ,EAC/BukE,EAAO1lE,EAAIxM,KAAKsK,IAAI4nE,EAAO1lE,EAAG4iC,EAAK5iC,EAAIxC,IAC9BwpE,EAAQhvE,IAAM4qC,EAAK/mC,IAC5B2B,GAAKwpE,EAAQhvE,IAAM4qC,EAAK/mC,GAAKsF,EAC7BukE,EAAO7pE,EAAIrI,KAAKuK,IAAI2nE,EAAO7pE,EAAG+mC,EAAK/mC,EAAI2B,GAE3C,CA2BA,SAASopE,GAAqB9nE,GAC5B,OAAc,IAAVA,GAAyB,MAAVA,EACV,SACEA,EAAQ,IACV,OAEF,OACT,CACA,SAAS+nE,GAAiBtpE,EAAG6G,EAAGvM,GAM9B,MALc,UAAVA,EACF0F,GAAK6G,EACc,WAAVvM,IACT0F,GAAM6G,EAAI,GAEL7G,CACT,CACA,SAASopE,GAAUnpE,EAAGkG,EAAG5E,GAMvB,OALc,KAAVA,GAA0B,MAAVA,EAClBtB,GAAMkG,EAAI,GACD5E,EAAQ,KAAOA,EAAQ,MAChCtB,GAAKkG,GAEAlG,CACT,CA2BA,SAASypE,GAAevxD,EAAOwD,EAAQ+yB,EAAUg2B,GAC/C,MAAM,IAACptD,GAAOa,EACd,GAAIu2B,EACFp3B,EAAI0E,IAAI7D,EAAM61B,QAAS71B,EAAM81B,QAAStyB,EAAQ,EAAGhd,OAC5C,CACL,IAAIkwC,EAAgB12B,EAAMuwD,iBAAiB,EAAG/sD,GAC9CrE,EAAI4E,OAAO2yB,EAAc7uC,EAAG6uC,EAAc5uC,GAC1C,IAAK,IAAIpE,EAAI,EAAGA,EAAI6oE,EAAY7oE,IAC9BgzC,EAAgB12B,EAAMuwD,iBAAiB7sE,EAAG8f,GAC1CrE,EAAI6E,OAAO0yB,EAAc7uC,EAAG6uC,EAAc5uC,EAE9C,CACF,CAxLAsnE,GAAiB3sE,GAAK,cACtB2sE,GAAiBpxD,SAAW,CAC1B8tB,MAAO,CACL3qC,SAAUghD,GAAMX,WAAWU,YAC3Ba,MAAO,CACLC,SAAS,KA6Mf,MAAMwuB,WAA0BnD,GAC9B,WAAA/yD,CAAYohB,GACVgR,MAAMhR,GACNlhB,KAAKq6B,aAAU75C,EACfwf,KAAKs6B,aAAU95C,EACfwf,KAAKg1D,iBAAcx0E,EACnBwf,KAAK00D,aAAe,GACpB10D,KAAKq1D,iBAAmB,EAC1B,CACA,aAAAnpB,GACE,MAAM3L,EAAUvgC,KAAKu0D,SAAWxnD,GAAUqnD,GAAsBp0D,KAAK3W,SAAW,GAC1E6J,EAAI8M,KAAKoG,MAAQpG,KAAKkL,SAAWq1B,EAAQn6B,MACzC5T,EAAIwN,KAAKyH,OAASzH,KAAKmY,UAAYooB,EAAQ94B,OACjDzH,KAAKq6B,QAAU/3C,KAAKC,MAAMyd,KAAKkJ,KAAOhW,EAAI,EAAIqtC,EAAQr3B,MACtDlJ,KAAKs6B,QAAUh4C,KAAKC,MAAMyd,KAAKoJ,IAAM5W,EAAI,EAAI+tC,EAAQn3B,KACrDpJ,KAAKg1D,YAAc1yE,KAAKC,MAAMD,KAAKsK,IAAIsG,EAAGV,GAAK,EACjD,CACA,mBAAA65C,GACE,MAAM,IAACz/C,EAAG,IAAEC,GAAOmT,KAAKyrB,WAAU,GAClCzrB,KAAKpT,IAAMtF,EAAesF,KAASR,MAAMQ,GAAOA,EAAM,EACtDoT,KAAKnT,IAAMvF,EAAeuF,KAAST,MAAMS,GAAOA,EAAM,EACtDmT,KAAK+yD,wBACP,CACA,gBAAAS,GACE,OAAOlxE,KAAKulD,KAAK7nC,KAAKg1D,YAAcZ,GAAsBp0D,KAAK3W,SACjE,CACA,kBAAAykD,CAAmBxd,GACjBuiC,GAAgBzsE,UAAU0nD,mBAAmBxnD,KAAK0Z,KAAMswB,GACxDtwB,KAAK00D,aAAe10D,KAAKgrB,YACtBhmC,KAAI,CAAC9E,EAAOiC,KACX,MAAMhC,EAAQwF,EAASqa,KAAK3W,QAAQ2xC,YAAYr1C,SAAU,CAACzF,EAAOiC,GAAQ6d,MAC1E,OAAO7f,GAAmB,IAAVA,EAAcA,EAAQ,EAAE,IAEzCsxB,QAAO,CAACvf,EAAGhK,IAAM8X,KAAKgD,MAAM+wB,kBAAkB7rC,IACnD,CACA,GAAAilD,GACE,MAAM9iC,EAAOrK,KAAK3W,QACdghB,EAAKywB,SAAWzwB,EAAK2wB,YAAYF,QACnCw5B,GAAmBt0D,MAEnBA,KAAKo1D,eAAe,EAAG,EAAG,EAAG,EAEjC,CACA,cAAAA,CAAea,EAAcC,EAAeC,EAAaC,GACvDp2D,KAAKq6B,SAAW/3C,KAAKC,OAAO0zE,EAAeC,GAAiB,GAC5Dl2D,KAAKs6B,SAAWh4C,KAAKC,OAAO4zE,EAAcC,GAAkB,GAC5Dp2D,KAAKg1D,aAAe1yE,KAAKsK,IAAIoT,KAAKg1D,YAAc,EAAG1yE,KAAKuK,IAAIopE,EAAcC,EAAeC,EAAaC,GACxG,CACA,aAAA57B,CAAcr4C,GAGZ,OAAOgM,GAAgBhM,GAFC6I,GAAOgV,KAAK00D,aAAahzE,QAAU,IAEVoL,GAD9BkT,KAAK3W,QAAQitC,YAAc,GAEhD,CACA,6BAAAsE,CAA8B16C,GAC5B,GAAIgH,EAAchH,GAChB,OAAOsrC,IAET,MAAM6qC,EAAgBr2D,KAAKg1D,aAAeh1D,KAAKnT,IAAMmT,KAAKpT,KAC1D,OAAIoT,KAAK3W,QAAQpB,SACP+X,KAAKnT,IAAM3M,GAASm2E,GAEtBn2E,EAAQ8f,KAAKpT,KAAOypE,CAC9B,CACA,6BAAAC,CAA8BxoE,GAC5B,GAAI5G,EAAc4G,GAChB,OAAO09B,IAET,MAAM+qC,EAAiBzoE,GAAYkS,KAAKg1D,aAAeh1D,KAAKnT,IAAMmT,KAAKpT,MACvE,OAAOoT,KAAK3W,QAAQpB,QAAU+X,KAAKnT,IAAM0pE,EAAiBv2D,KAAKpT,IAAM2pE,CACvE,CACA,oBAAAzB,CAAqB3yE,GACnB,MAAM64C,EAAch7B,KAAK00D,cAAgB,GACzC,GAAIvyE,GAAS,GAAKA,EAAQ64C,EAAYt5C,OAAQ,CAC5C,MAAM80E,EAAax7B,EAAY74C,GAC/B,OAjFN,SAAiCiwB,EAAQjwB,EAAOhC,GAC9C,OAAOmtB,GAAc8E,EAAQ,CAC3BjyB,QACAgC,QACAnC,KAAM,cAEV,CA2Eay2E,CAAwBz2D,KAAKsH,aAAcnlB,EAAOq0E,EAC3D,CACF,CACA,gBAAAzB,CAAiB5yE,EAAOu0E,EAAoB9B,EAAkB,GAC5D,MAAMhnE,EAAQoS,KAAKw6B,cAAcr4C,GAASkJ,EAAUupE,EACpD,MAAO,CACLvoE,EAAG/J,KAAK2N,IAAIrC,GAAS8oE,EAAqB12D,KAAKq6B,QAC/C/tC,EAAGhK,KAAK0M,IAAIpB,GAAS8oE,EAAqB12D,KAAKs6B,QAC/C1sC,QAEJ,CACA,wBAAAutC,CAAyBh5C,EAAOjC,GAC9B,OAAO8f,KAAK+0D,iBAAiB5yE,EAAO6d,KAAK46B,8BAA8B16C,GACzE,CACA,eAAAy2E,CAAgBx0E,GACd,OAAO6d,KAAKm7B,yBAAyBh5C,GAAS,EAAG6d,KAAKswC,eACxD,CACA,qBAAAsmB,CAAsBz0E,GACpB,MAAM,KAAC+mB,EAAI,IAAEE,EAAG,MAAED,EAAK,OAAEE,GAAUrJ,KAAKq1D,iBAAiBlzE,GACzD,MAAO,CACL+mB,OACAE,MACAD,QACAE,SAEJ,CACA,cAAAwpC,GACE,MAAM,gBAAClwC,EAAiBoyB,MAAM,SAACgG,IAAa/6B,KAAK3W,QACjD,GAAIsZ,EAAiB,CACnB,MAAMgB,EAAM3D,KAAK2D,IACjBA,EAAI8C,OACJ9C,EAAIyE,YACJ2tD,GAAe/1D,KAAMA,KAAK46B,8BAA8B56B,KAAK8yD,WAAY/3B,EAAU/6B,KAAK00D,aAAahzE,QACrGiiB,EAAI2E,YACJ3E,EAAIgH,UAAYhI,EAChBgB,EAAIgF,OACJhF,EAAIkD,SACN,CACF,CACA,QAAAmsC,GACE,MAAMrvC,EAAM3D,KAAK2D,IACX0G,EAAOrK,KAAK3W,SACZ,WAACwxC,EAAU,KAAE9F,GAAQ1qB,EACrB0mD,EAAa/wD,KAAK00D,aAAahzE,OACrC,IAAIwG,EAAG4sC,EAAQuH,EAaf,GAZIhyB,EAAK2wB,YAAYF,SAvLzB,SAAyBt2B,EAAOusD,GAC9B,MAAM,IAACptD,EAAKta,SAAS,YAAC2xC,IAAgBx2B,EACtC,IAAK,IAAItc,EAAI6oE,EAAa,EAAG7oE,GAAK,EAAGA,IAAK,CACxC,MAAM4pD,EAAc9W,EAAYhqB,WAAWxM,EAAMswD,qBAAqB5sE,IAChE+sE,EAASjoD,GAAO8kC,EAAYzuC,OAC5B,EAAChX,EAAC,EAAEC,EAAC,UAAEse,EAAS,KAAE1B,EAAI,IAAEE,EAAG,MAAED,EAAK,OAAEE,GAAU7E,EAAM6wD,iBAAiBntE,IACrE,cAACqhD,GAAiBuI,EACxB,IAAK5qD,EAAcqiD,GAAgB,CACjC,MAAMhJ,EAAUxzB,GAAU+kC,EAAYtI,iBACtC7lC,EAAIgH,UAAY4+B,EAChB5lC,EAAImvC,SAAS5pC,EAAOq3B,EAAQr3B,KAAME,EAAMm3B,EAAQn3B,IAAKD,EAAQD,EAAOq3B,EAAQn6B,MAAOiD,EAASD,EAAMm3B,EAAQ94B,OAC5G,CACA0C,GACExG,EACAa,EAAMkwD,aAAaxsE,GACnBmE,EACAC,EAAK2oE,EAAOzxD,WAAa,EACzByxD,EACA,CACE10D,MAAOuxC,EAAYvxC,MACnBqK,UAAWA,EACXC,aAAc,UAGpB,CACF,CA+JMgsD,CAAgB72D,KAAM+wD,GAEpBh8B,EAAK+F,SACP96B,KAAKswB,MAAMpuC,SAAQ,CAACy9B,EAAMx9B,KACxB,GAAc,IAAVA,EAAa,CACf2yC,EAAS90B,KAAK46B,8BAA8Bjb,EAAKz/B,QAtJ3D,SAAwBskB,EAAOsyD,EAAc9uD,EAAQ+oD,GACnD,MAAMptD,EAAMa,EAAMb,IACZo3B,EAAW+7B,EAAa/7B,UACxB,MAACx6B,EAAK,UAAEyK,GAAa8rD,GACrB/7B,IAAag2B,IAAgBxwD,IAAUyK,GAAahD,EAAS,IAGnErE,EAAI8C,OACJ9C,EAAIoH,YAAcxK,EAClBoD,EAAIqH,UAAYA,EAChBrH,EAAIuvC,YAAY4jB,EAAa54C,YAC7Bva,EAAIwvC,eAAiB2jB,EAAa34C,iBAClCxa,EAAIyE,YACJ2tD,GAAevxD,EAAOwD,EAAQ+yB,EAAUg2B,GACxCptD,EAAI2E,YACJ3E,EAAIkF,SACJlF,EAAIkD,UACN,CAuIUkwD,CAAe/2D,KADK+0B,EAAK/jB,WAAWhR,KAAKsH,WAAWnlB,EAAQ,IAC1B2yC,EAAQi8B,EAC5C,KAGAl2B,EAAWC,QAAS,CAEtB,IADAn3B,EAAI8C,OACCve,EAAI6oE,EAAa,EAAG7oE,GAAK,EAAGA,IAAK,CACpC,MAAM4pD,EAAcjX,EAAW7pB,WAAWhR,KAAK80D,qBAAqB5sE,KAC9D,MAACqY,EAAK,UAAEyK,GAAa8mC,EACtB9mC,GAAczK,IAGnBoD,EAAIqH,UAAYA,EAChBrH,EAAIoH,YAAcxK,EAClBoD,EAAIuvC,YAAYpB,EAAY5zB,YAC5Bva,EAAIwvC,eAAiBrB,EAAY3zB,iBACjC2W,EAAS90B,KAAK46B,8BAA8BvwB,EAAKimB,MAAMroC,QAAU+X,KAAKpT,IAAMoT,KAAKnT,KACjFwvC,EAAWr8B,KAAK+0D,iBAAiB7sE,EAAG4sC,GACpCnxB,EAAIyE,YACJzE,EAAI4E,OAAOvI,KAAKq6B,QAASr6B,KAAKs6B,SAC9B32B,EAAI6E,OAAO6zB,EAAShwC,EAAGgwC,EAAS/vC,GAChCqX,EAAIkF,SACN,CACAlF,EAAIkD,SACN,CACF,CACA,UAAA2hC,GAAc,CACd,UAAA6K,GACE,MAAM1vC,EAAM3D,KAAK2D,IACX0G,EAAOrK,KAAK3W,QACZw9C,EAAWx8B,EAAKimB,MACtB,IAAKuW,EAAS/L,QACZ,OAEF,MAAMxE,EAAat2B,KAAKw6B,cAAc,GACtC,IAAI1F,EAAQ1uB,EACZzC,EAAI8C,OACJ9C,EAAIuE,UAAUlI,KAAKq6B,QAASr6B,KAAKs6B,SACjC32B,EAAInC,OAAO80B,GACX3yB,EAAIiH,UAAY,SAChBjH,EAAIkH,aAAe,SACnB7K,KAAKswB,MAAMpuC,SAAQ,CAACy9B,EAAMx9B,KACxB,GAAc,IAAVA,IAAgBkoB,EAAKpiB,QACvB,OAEF,MAAM6pD,EAAcjL,EAAS71B,WAAWhR,KAAKsH,WAAWnlB,IAClDytD,EAAW5iC,GAAO8kC,EAAYzuC,MAEpC,GADAyxB,EAAS90B,KAAK46B,8BAA8B56B,KAAKswB,MAAMnuC,GAAOjC,OAC1D4xD,EAAYxI,kBAAmB,CACjC3lC,EAAIN,KAAOusC,EAAS3pC,OACpBG,EAAQzC,EAAIwC,YAAYwZ,EAAKx/B,OAAOimB,MACpCzC,EAAIgH,UAAYmnC,EAAYvI,cAC5B,MAAMhJ,EAAUxzB,GAAU+kC,EAAYtI,iBACtC7lC,EAAImvC,UACD1sC,EAAQ,EAAIm6B,EAAQr3B,MACpB4rB,EAAS8a,EAAShlD,KAAO,EAAI21C,EAAQn3B,IACtChD,EAAQm6B,EAAQn6B,MAChBwpC,EAAShlD,KAAO21C,EAAQ94B,OAE5B,CACA0C,GAAWxG,EAAKgc,EAAKx/B,MAAO,GAAI20C,EAAQ8a,EAAU,CAChDrvC,MAAOuxC,EAAYvxC,OACnB,IAEJoD,EAAIkD,SACN,CACA,SAAAysC,GAAa,EAEf0iB,GAAkB/uE,GAAK,eACvB+uE,GAAkBxzD,SAAW,CAC3Bs4B,SAAS,EACTk8B,SAAS,EACT36B,SAAU,YACVxB,WAAY,CACVC,SAAS,EACT9vB,UAAW,EACXkT,WAAY,GACZC,iBAAkB,GAEpB4W,KAAM,CACJgG,UAAU,GAEZzE,WAAY,EACZhG,MAAO,CACLgZ,mBAAmB,EACnB3jD,SAAUghD,GAAMX,WAAWC,SAE7BjL,YAAa,CACXuO,mBAAe/oD,EACfgpD,gBAAiB,EACjB1O,SAAS,EACTz3B,KAAM,CACJzY,KAAM,IAERjF,SAASxF,GACAA,EAETogD,QAAS,EACTs0B,mBAAmB,IAGvBmB,GAAkBjwB,cAAgB,CAChC,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,SAEjBiwB,GAAkBh0D,YAAc,CAC9B64B,WAAY,CACVh1B,UAAW,SAIf,MAAMoxD,GAAY,CAChBC,YAAa,CAACC,QAAQ,EAAMvsE,KAAM,EAAGwsE,MAAO,KAC5CC,OAAQ,CAACF,QAAQ,EAAMvsE,KAAM,IAAMwsE,MAAO,IAC1CE,OAAQ,CAACH,QAAQ,EAAMvsE,KAAM,IAAOwsE,MAAO,IAC3CG,KAAM,CAACJ,QAAQ,EAAMvsE,KAAM,KAASwsE,MAAO,IAC3CI,IAAK,CAACL,QAAQ,EAAMvsE,KAAM,MAAUwsE,MAAO,IAC3CK,KAAM,CAACN,QAAQ,EAAOvsE,KAAM,OAAWwsE,MAAO,GAC9CM,MAAO,CAACP,QAAQ,EAAMvsE,KAAM,OAASwsE,MAAO,IAC5CO,QAAS,CAACR,QAAQ,EAAOvsE,KAAM,OAASwsE,MAAO,GAC/CQ,KAAM,CAACT,QAAQ,EAAMvsE,KAAM,SAEvBitE,GAASr2E,OAAO4G,KAAK6uE,IAC3B,SAASa,GAAOptE,EAAGC,GACjB,OAAOD,EAAIC,CACb,CACA,SAAS6/B,GAAMhmB,EAAO9E,GACpB,GAAIxY,EAAcwY,GAChB,OAAO,KAET,MAAMq4D,EAAUvzD,EAAMwzD,UAChB,OAACC,EAAM,MAAEpsE,EAAK,WAAEqsE,GAAc1zD,EAAM2zD,WAC1C,IAAIj4E,EAAQwf,EASZ,MARsB,mBAAXu4D,IACT/3E,EAAQ+3E,EAAO/3E,IAEZoH,EAAepH,KAClBA,EAA0B,iBAAX+3E,EACXF,EAAQvtC,MAAMtqC,EAAO+3E,GACrBF,EAAQvtC,MAAMtqC,IAEN,OAAVA,EACK,MAEL2L,IACF3L,EAAkB,SAAV2L,IAAqBK,GAASgsE,KAA8B,IAAfA,EAEjDH,EAAQt8B,QAAQv7C,EAAO2L,GADvBksE,EAAQt8B,QAAQv7C,EAAO,UAAWg4E,KAGhCh4E,EACV,CACA,SAASk4E,GAA0BC,EAASzrE,EAAKC,EAAKyrE,GACpD,MAAM9vE,EAAOqvE,GAAMn2E,OACnB,IAAK,IAAIwG,EAAI2vE,GAAM1uE,QAAQkvE,GAAUnwE,EAAIM,EAAO,IAAKN,EAAG,CACtD,MAAMqwE,EAAWtB,GAAUY,GAAM3vE,IAC3B44B,EAASy3C,EAASnB,MAAQmB,EAASnB,MAAQ7vE,OAAO6rE,iBACxD,GAAImF,EAASpB,QAAU70E,KAAKulD,MAAMh7C,EAAMD,IAAQk0B,EAASy3C,EAAS3tE,QAAU0tE,EAC1E,OAAOT,GAAM3vE,EAEjB,CACA,OAAO2vE,GAAMrvE,EAAO,EACtB,CAiBA,SAASgwE,GAAQloC,EAAOmoC,EAAMC,GAC5B,GAAKA,GAEE,GAAIA,EAAWh3E,OAAQ,CAC5B,MAAM,GAACmsB,EAAE,GAAED,GAAMJ,GAAQkrD,EAAYD,GAErCnoC,EADkBooC,EAAW7qD,IAAO4qD,EAAOC,EAAW7qD,GAAM6qD,EAAW9qD,KACpD,CACrB,OALE0iB,EAAMmoC,IAAQ,CAMlB,CAcA,SAASE,GAAoBn0D,EAAOjC,EAAQq2D,GAC1C,MAAMtoC,EAAQ,GACRtrC,EAAM,CAAC,EACPwD,EAAO+Z,EAAO7gB,OACpB,IAAIwG,EAAGhI,EACP,IAAKgI,EAAI,EAAGA,EAAIM,IAAQN,EACtBhI,EAAQqiB,EAAOra,GACflD,EAAI9E,GAASgI,EACbooC,EAAM9tC,KAAK,CACTtC,QACAqnD,OAAO,IAGX,OAAiB,IAAT/+C,GAAeowE,EA1BzB,SAAuBp0D,EAAO8rB,EAAOtrC,EAAK4zE,GACxC,MAAMb,EAAUvzD,EAAMwzD,SAChBrwB,GAASowB,EAAQt8B,QAAQnL,EAAM,GAAGpwC,MAAO04E,GACzC5lC,EAAO1C,EAAMA,EAAM5uC,OAAS,GAAGxB,MACrC,IAAIqnD,EAAOplD,EACX,IAAKolD,EAAQI,EAAOJ,GAASvU,EAAMuU,GAASwwB,EAAQtpD,IAAI84B,EAAO,EAAGqxB,GAChEz2E,EAAQ6C,EAAIuiD,GACRplD,GAAS,IACXmuC,EAAMnuC,GAAOolD,OAAQ,GAGzB,OAAOjX,CACT,CAc8CuoC,CAAcr0D,EAAO8rB,EAAOtrC,EAAK4zE,GAAzCtoC,CACtC,CACA,MAAMwoC,WAAkBzuB,GACtB,WAAAvqC,CAAYpf,GACVwxC,MAAMxxC,GACNsf,KAAK4vB,OAAS,CACZ1uC,KAAM,GACN6pC,OAAQ,GACRhH,IAAK,IAEP/jB,KAAK+4D,MAAQ,MACb/4D,KAAKg5D,gBAAax4E,EAClBwf,KAAKi5D,SAAW,CAAC,EACjBj5D,KAAKk5D,aAAc,EACnBl5D,KAAKm4D,gBAAa33E,CACpB,CACA,IAAAgrD,CAAKwR,EAAW3yC,GACd,MAAMouD,EAAOzb,EAAUyb,OAASzb,EAAUyb,KAAO,CAAC,GAC5CV,EAAU/3D,KAAKg4D,SAAW,IAAIn8B,GAASC,MAAMkhB,EAAUnhB,SAASjd,MACtEj1B,EAAQ8uE,EAAKU,eAAgBpB,EAAQ18B,WACrCr7B,KAAKm4D,WAAa,CAChBF,OAAQQ,EAAKR,OACbpsE,MAAO4sE,EAAK5sE,MACZqsE,WAAYO,EAAKP,YAEnBhmC,MAAMsZ,KAAKwR,GACXh9C,KAAKk5D,YAAc7uD,EAAK+uD,UAC1B,CACA,KAAA5uC,CAAMyC,EAAK9qC,GACT,YAAY3B,IAARysC,EACK,KAEFzC,GAAMxqB,KAAMitB,EACrB,CACA,YAAAwU,GACEvP,MAAMuP,eACNzhC,KAAK4vB,OAAS,CACZ1uC,KAAM,GACN6pC,OAAQ,GACRhH,IAAK,GAET,CACA,mBAAAsoB,GACE,MAAMhjD,EAAU2W,KAAK3W,QACf0uE,EAAU/3D,KAAKg4D,SACfz8B,EAAOlyC,EAAQovE,KAAKl9B,MAAQ,MAClC,IAAI,IAAC3uC,EAAG,IAAEC,EAAG,WAAEo/B,EAAU,WAAEC,GAAclsB,KAAKmsB,gBAC9C,SAASktC,EAAah9C,GACf4P,GAAe7/B,MAAMiwB,EAAOzvB,OAC/BA,EAAMtK,KAAKsK,IAAIA,EAAKyvB,EAAOzvB,MAExBs/B,GAAe9/B,MAAMiwB,EAAOxvB,OAC/BA,EAAMvK,KAAKuK,IAAIA,EAAKwvB,EAAOxvB,KAE/B,CACKo/B,GAAeC,IAClBmtC,EAAar5D,KAAKs5D,mBACK,UAAnBjwE,EAAQgzB,QAA+C,WAAzBhzB,EAAQinC,MAAMznC,QAC9CwwE,EAAar5D,KAAKyrB,WAAU,KAGhC7+B,EAAMtF,EAAesF,KAASR,MAAMQ,GAAOA,GAAOmrE,EAAQt8B,QAAQrc,KAAKC,MAAOkc,GAC9E1uC,EAAMvF,EAAeuF,KAAST,MAAMS,GAAOA,GAAOkrE,EAAQp8B,MAAMvc,KAAKC,MAAOkc,GAAQ,EACpFv7B,KAAKpT,IAAMtK,KAAKsK,IAAIA,EAAKC,EAAM,GAC/BmT,KAAKnT,IAAMvK,KAAKuK,IAAID,EAAM,EAAGC,EAC/B,CACA,eAAAysE,GACE,MAAM9nD,EAAMxR,KAAKu5D,qBACjB,IAAI3sE,EAAMrF,OAAO4D,kBACb0B,EAAMtF,OAAOukC,kBAKjB,OAJIta,EAAI9vB,SACNkL,EAAM4kB,EAAI,GACV3kB,EAAM2kB,EAAIA,EAAI9vB,OAAS,IAElB,CAACkL,MAAKC,MACf,CACA,UAAA8/C,GACE,MAAMtjD,EAAU2W,KAAK3W,QACfmwE,EAAWnwE,EAAQovE,KACnB5xB,EAAWx9C,EAAQinC,MACnBooC,EAAiC,WAApB7xB,EAASh+C,OAAsBmX,KAAKu5D,qBAAuBv5D,KAAKy5D,YAC5D,UAAnBpwE,EAAQgzB,QAAsBq8C,EAAWh3E,SAC3Cse,KAAKpT,IAAMoT,KAAKkrC,UAAYwtB,EAAW,GACvC14D,KAAKnT,IAAMmT,KAAKirC,UAAYytB,EAAWA,EAAWh3E,OAAS,IAE7D,MAAMkL,EAAMoT,KAAKpT,IAEX0jC,EDrmRV,SAAwB/tB,EAAQ3V,EAAKC,GACnC,IAAIhG,EAAQ,EACRC,EAAMyb,EAAO7gB,OACjB,KAAOmF,EAAQC,GAAOyb,EAAO1b,GAAS+F,GACpC/F,IAEF,KAAOC,EAAMD,GAAS0b,EAAOzb,EAAM,GAAK+F,GACtC/F,IAEF,OAAOD,EAAQ,GAAKC,EAAMyb,EAAO7gB,OAC7B6gB,EAAOlc,MAAMQ,EAAOC,GACpByb,CACN,CCylRkBm3D,CAAehB,EAAY9rE,EAD7BoT,KAAKnT,KAWjB,OATAmT,KAAK+4D,MAAQS,EAASj+B,OAASsL,EAASD,SACpCwxB,GAA0BoB,EAASnB,QAASr4D,KAAKpT,IAAKoT,KAAKnT,IAAKmT,KAAK25D,kBAAkB/sE,IA5I/F,SAAoC4X,EAAOwpC,EAAUqqB,EAASzrE,EAAKC,GACjE,IAAK,IAAI3E,EAAI2vE,GAAMn2E,OAAS,EAAGwG,GAAK2vE,GAAM1uE,QAAQkvE,GAAUnwE,IAAK,CAC/D,MAAMqzC,EAAOs8B,GAAM3vE,GACnB,GAAI+uE,GAAU17B,GAAM47B,QAAU3yD,EAAMwzD,SAASx8B,KAAK3uC,EAAKD,EAAK2uC,IAASyS,EAAW,EAC9E,OAAOzS,CAEX,CACA,OAAOs8B,GAAMQ,EAAUR,GAAM1uE,QAAQkvE,GAAW,EAClD,CAqIQuB,CAA2B55D,KAAMswB,EAAM5uC,OAAQ83E,EAASnB,QAASr4D,KAAKpT,IAAKoT,KAAKnT,MACpFmT,KAAKg5D,WAAcnyB,EAASU,MAAMC,SAA0B,SAAfxnC,KAAK+4D,MArItD,SAA4Bx9B,GAC1B,IAAK,IAAIrzC,EAAI2vE,GAAM1uE,QAAQoyC,GAAQ,EAAG/yC,EAAOqvE,GAAMn2E,OAAQwG,EAAIM,IAAQN,EACrE,GAAI+uE,GAAUY,GAAM3vE,IAAIivE,OACtB,OAAOU,GAAM3vE,EAGnB,CAgIQ2xE,CAAmB75D,KAAK+4D,YADyCv4E,EAErEwf,KAAK85D,YAAYpB,GACbrvE,EAAQpB,SACVqoC,EAAMroC,UAED0wE,GAAoB34D,KAAMswB,EAAOtwB,KAAKg5D,WAC/C,CACA,WAAAc,CAAYpB,GACV,IAEI/wB,EAAO3U,EAFPnsC,EAAQ,EACRC,EAAM,EAENkZ,KAAK3W,QAAQyrC,QAAU4jC,EAAWh3E,SACpCimD,EAAQ3nC,KAAK+5D,mBAAmBrB,EAAW,IAEzC7xE,EADwB,IAAtB6xE,EAAWh3E,OACL,EAAIimD,GAEH3nC,KAAK+5D,mBAAmBrB,EAAW,IAAM/wB,GAAS,EAE7D3U,EAAOhzB,KAAK+5D,mBAAmBrB,EAAWA,EAAWh3E,OAAS,IAE5DoF,EADwB,IAAtB4xE,EAAWh3E,OACPsxC,GAECA,EAAOhzB,KAAK+5D,mBAAmBrB,EAAWA,EAAWh3E,OAAS,KAAO,GAGhF,MAAMkwD,EAAQ8mB,EAAWh3E,OAAS,EAAI,GAAM,IAC5CmF,EAAQ8H,GAAY9H,EAAO,EAAG+qD,GAC9B9qD,EAAM6H,GAAY7H,EAAK,EAAG8qD,GAC1B5xC,KAAKi5D,SAAW,CAACpyE,QAAOC,MAAKg6B,OAAQ,GAAKj6B,EAAQ,EAAIC,GACxD,CACA,SAAA2yE,GACE,MAAM1B,EAAU/3D,KAAKg4D,SACfprE,EAAMoT,KAAKpT,IACXC,EAAMmT,KAAKnT,IACXxD,EAAU2W,KAAK3W,QACfmwE,EAAWnwE,EAAQovE,KACnBrvB,EAAQowB,EAASj+B,MAAQ68B,GAA0BoB,EAASnB,QAASzrE,EAAKC,EAAKmT,KAAK25D,kBAAkB/sE,IACtG2mE,EAAW5rE,EAAe6xE,EAASjG,SAAU,GAC7C73B,EAAoB,SAAV0N,GAAmBowB,EAAStB,WACtC8B,EAAa9tE,GAASwvC,KAAwB,IAAZA,EAClCpL,EAAQ,CAAC,EACf,IACImoC,EAAMv8C,EADNyrB,EAAQ/6C,EAMZ,GAJIotE,IACFryB,GAASowB,EAAQt8B,QAAQkM,EAAO,UAAWjM,IAE7CiM,GAASowB,EAAQt8B,QAAQkM,EAAOqyB,EAAa,MAAQ5wB,GACjD2uB,EAAQv8B,KAAK3uC,EAAKD,EAAKw8C,GAAS,IAASmqB,EAC3C,MAAM,IAAIpiD,MAAMvkB,EAAM,QAAUC,EAAM,uCAAyC0mE,EAAW,IAAMnqB,GAElG,MAAMsvB,EAAsC,SAAzBrvE,EAAQinC,MAAMznC,QAAqBmX,KAAKi6D,oBAC3D,IAAKxB,EAAO9wB,EAAOzrB,EAAQ,EAAGu8C,EAAO5rE,EAAK4rE,GAAQV,EAAQtpD,IAAIgqD,EAAMlF,EAAUnqB,GAAQltB,IACpFs8C,GAAQloC,EAAOmoC,EAAMC,GAKvB,OAHID,IAAS5rE,GAA0B,UAAnBxD,EAAQgzB,QAAgC,IAAVH,GAChDs8C,GAAQloC,EAAOmoC,EAAMC,GAEhBl3E,OAAO4G,KAAKkoC,GAAON,MAAK,CAACtlC,EAAGC,IAAMD,EAAIC,IAAG3F,KAAIqH,IAAMA,GAC5D,CACA,gBAAAmgC,CAAiBtsC,GACf,MAAM63E,EAAU/3D,KAAKg4D,SACfwB,EAAWx5D,KAAK3W,QAAQovE,KAC9B,OAAIe,EAASU,cACJnC,EAAQn9C,OAAO16B,EAAOs5E,EAASU,eAEjCnC,EAAQn9C,OAAO16B,EAAOs5E,EAASL,eAAegB,SACvD,CACA,mBAAAC,CAAoB3B,EAAMt2E,EAAOmuC,EAAO1V,GACtC,MAAMvxB,EAAU2W,KAAK3W,QACfgyC,EAAUhyC,EAAQovE,KAAKU,eACvB59B,EAAOv7B,KAAK+4D,MACZH,EAAY54D,KAAKg5D,WACjBqB,EAAc9+B,GAAQF,EAAQE,GAC9B++B,EAAc1B,GAAav9B,EAAQu9B,GACnCj5C,EAAO2Q,EAAMnuC,GACbolD,EAAQqxB,GAAa0B,GAAe36C,GAAQA,EAAK4nB,MACjDpnD,EAAQ6f,KAAKg4D,SAASp9C,OAAO69C,EAAM79C,IAAW2sB,EAAQ+yB,EAAcD,IACpE7/C,EAAYnxB,EAAQinC,MAAM3qC,SAChC,OAAO60B,EAAY70B,EAAS60B,EAAW,CAACr6B,EAAOgC,EAAOmuC,GAAQtwB,MAAQ7f,CACxE,CACA,kBAAA2tD,CAAmBxd,GACjB,IAAIpoC,EAAGM,EAAMm3B,EACb,IAAKz3B,EAAI,EAAGM,EAAO8nC,EAAM5uC,OAAQwG,EAAIM,IAAQN,EAC3Cy3B,EAAO2Q,EAAMpoC,GACby3B,EAAKx/B,MAAQ6f,KAAKo6D,oBAAoBz6C,EAAKz/B,MAAOgI,EAAGooC,EAEzD,CACA,kBAAAypC,CAAmB75E,GACjB,OAAiB,OAAVA,EAAiBsrC,KAAOtrC,EAAQ8f,KAAKpT,MAAQoT,KAAKnT,IAAMmT,KAAKpT,IACtE,CACA,gBAAAyjC,CAAiBnwC,GACf,MAAMq6E,EAAUv6D,KAAKi5D,SACf/uE,EAAM8V,KAAK+5D,mBAAmB75E,GACpC,OAAO8f,KAAKk1B,oBAAoBqlC,EAAQ1zE,MAAQqD,GAAOqwE,EAAQz5C,OACjE,CACA,gBAAAqvB,CAAiBlpC,GACf,MAAMszD,EAAUv6D,KAAKi5D,SACf/uE,EAAM8V,KAAKqwC,mBAAmBppC,GAASszD,EAAQz5C,OAASy5C,EAAQzzE,IACtE,OAAOkZ,KAAKpT,IAAM1C,GAAO8V,KAAKnT,IAAMmT,KAAKpT,IAC3C,CACA,aAAA4tE,CAAcr6E,GACZ,MAAMs6E,EAAYz6D,KAAK3W,QAAQinC,MACzBoqC,EAAiB16D,KAAK2D,IAAIwC,YAAYhmB,GAAOimB,MAC7CxY,EAAQd,GAAUkT,KAAKqyB,eAAiBooC,EAAU3xB,YAAc2xB,EAAU5xB,aAC1E8xB,EAAcr4E,KAAK2N,IAAIrC,GACvBgtE,EAAct4E,KAAK0M,IAAIpB,GACvBitE,EAAe76D,KAAKiwC,wBAAwB,GAAGrlD,KACrD,MAAO,CACLsI,EAAIwnE,EAAiBC,EAAgBE,EAAeD,EACpDpoE,EAAIkoE,EAAiBE,EAAgBC,EAAeF,EAExD,CACA,iBAAAhB,CAAkBmB,GAChB,MAAMtB,EAAWx5D,KAAK3W,QAAQovE,KACxBU,EAAiBK,EAASL,eAC1Bv+C,EAASu+C,EAAeK,EAASj+B,OAAS49B,EAAejC,YACzD6D,EAAe/6D,KAAKo6D,oBAAoBU,EAAa,EAAGnC,GAAoB34D,KAAM,CAAC86D,GAAc96D,KAAKg5D,YAAap+C,GACnHhwB,EAAOoV,KAAKw6D,cAAcO,GAC1BzC,EAAWh2E,KAAKC,MAAMyd,KAAKqyB,eAAiBryB,KAAKoG,MAAQxb,EAAKsI,EAAI8M,KAAKyH,OAAS7c,EAAK4H,GAAK,EAChG,OAAO8lE,EAAW,EAAIA,EAAW,CACnC,CACA,iBAAA2B,GACE,IACI/xE,EAAGM,EADHkwE,EAAa14D,KAAK4vB,OAAO1uC,MAAQ,GAErC,GAAIw3E,EAAWh3E,OACb,OAAOg3E,EAET,MAAM/sB,EAAQ3rC,KAAKulB,0BACnB,GAAIvlB,KAAKk5D,aAAevtB,EAAMjqD,OAC5B,OAAQse,KAAK4vB,OAAO1uC,KAAOyqD,EAAM,GAAGlmB,WAAW4G,mBAAmBrsB,MAEpE,IAAK9X,EAAI,EAAGM,EAAOmjD,EAAMjqD,OAAQwG,EAAIM,IAAQN,EAC3CwwE,EAAaA,EAAW3oC,OAAO4b,EAAMzjD,GAAGu9B,WAAW4G,mBAAmBrsB,OAExE,OAAQA,KAAK4vB,OAAO1uC,KAAO8e,KAAKgc,UAAU08C,EAC5C,CACA,kBAAAa,GACE,MAAMb,EAAa14D,KAAK4vB,OAAO7E,QAAU,GACzC,IAAI7iC,EAAGM,EACP,GAAIkwE,EAAWh3E,OACb,OAAOg3E,EAET,MAAM3tC,EAAS/qB,KAAKgrB,YACpB,IAAK9iC,EAAI,EAAGM,EAAOuiC,EAAOrpC,OAAQwG,EAAIM,IAAQN,EAC5CwwE,EAAWl2E,KAAKgoC,GAAMxqB,KAAM+qB,EAAO7iC,KAErC,OAAQ8X,KAAK4vB,OAAO7E,OAAS/qB,KAAKk5D,YAAcR,EAAa14D,KAAKgc,UAAU08C,EAC9E,CACA,SAAA18C,CAAUzZ,GACR,OAAO+L,GAAa/L,EAAOytB,KAAK8nC,IAClC,EAsBF,SAASvR,GAAY94C,EAAOxM,EAAKhZ,GAC/B,IAEI+yE,EAAYC,EAAYC,EAAYC,EAFpCttD,EAAK,EACLD,EAAKH,EAAM/rB,OAAS,EAEpBuG,GACEgZ,GAAOwM,EAAMI,GAAI3jB,KAAO+W,GAAOwM,EAAMG,GAAI1jB,OACzC2jB,KAAID,MAAME,GAAaL,EAAO,MAAOxM,MAEvC/W,IAAK8wE,EAAYvC,KAAMyC,GAAcztD,EAAMI,MAC3C3jB,IAAK+wE,EAAYxC,KAAM0C,GAAc1tD,EAAMG,MAEzC3M,GAAOwM,EAAMI,GAAI4qD,MAAQx3D,GAAOwM,EAAMG,GAAI6qD,QAC1C5qD,KAAID,MAAME,GAAaL,EAAO,OAAQxM,MAExCw3D,KAAMuC,EAAY9wE,IAAKgxE,GAAcztD,EAAMI,MAC3C4qD,KAAMwC,EAAY/wE,IAAKixE,GAAc1tD,EAAMG,KAE/C,MAAMwtD,EAAOH,EAAaD,EAC1B,OAAOI,EAAOF,GAAcC,EAAaD,IAAej6D,EAAM+5D,GAAcI,EAAOF,CACrF,CAvCApC,GAAU7xE,GAAK,OACf6xE,GAAUt2D,SAAW,CACnB6Z,OAAQ,OACRwf,SAAU,CAAC,EACX48B,KAAM,CACJR,QAAQ,EACR18B,MAAM,EACN1vC,OAAO,EACPqsE,YAAY,EACZG,QAAS,cACTc,eAAgB,CAAC,GAEnB7oC,MAAO,CACLznC,OAAQ,OACR0+C,MAAO,CACLC,SAAS,KAyBf,MAAM6zB,WAAwBvC,GAC5B,WAAAh5D,CAAYpf,GACVwxC,MAAMxxC,GACNsf,KAAKs7D,OAAS,GACdt7D,KAAKu7D,aAAU/6E,EACfwf,KAAKw7D,iBAAch7E,CACrB,CACA,WAAAs5E,GACE,MAAMpB,EAAa14D,KAAKy7D,yBAClBhuD,EAAQzN,KAAKs7D,OAASt7D,KAAK07D,iBAAiBhD,GAClD14D,KAAKu7D,QAAUhV,GAAY94C,EAAOzN,KAAKpT,KACvCoT,KAAKw7D,YAAcjV,GAAY94C,EAAOzN,KAAKnT,KAAOmT,KAAKu7D,QACvDrpC,MAAM4nC,YAAYpB,EACpB,CACA,gBAAAgD,CAAiBhD,GACf,MAAM,IAAC9rE,EAAG,IAAEC,GAAOmT,KACbuO,EAAQ,GACRd,EAAQ,GACd,IAAIvlB,EAAGM,EAAM8sB,EAAM4a,EAAM5c,EACzB,IAAKprB,EAAI,EAAGM,EAAOkwE,EAAWh3E,OAAQwG,EAAIM,IAAQN,EAChDgoC,EAAOwoC,EAAWxwE,GACdgoC,GAAQtjC,GAAOsjC,GAAQrjC,GACzB0hB,EAAM/rB,KAAK0tC,GAGf,GAAI3hB,EAAM7sB,OAAS,EACjB,MAAO,CACL,CAAC+2E,KAAM7rE,EAAK1C,IAAK,GACjB,CAACuuE,KAAM5rE,EAAK3C,IAAK,IAGrB,IAAKhC,EAAI,EAAGM,EAAO+lB,EAAM7sB,OAAQwG,EAAIM,IAAQN,EAC3CorB,EAAO/E,EAAMrmB,EAAI,GACjBotB,EAAO/G,EAAMrmB,EAAI,GACjBgoC,EAAO3hB,EAAMrmB,GACT5F,KAAKuJ,OAAOynB,EAAOgC,GAAQ,KAAO4a,GACpCziB,EAAMjrB,KAAK,CAACi2E,KAAMvoC,EAAMhmC,IAAKhC,GAAKM,EAAO,KAG7C,OAAOilB,CACT,CACA,sBAAAguD,GACE,IAAI/C,EAAa14D,KAAK4vB,OAAO7L,KAAO,GACpC,GAAI20C,EAAWh3E,OACb,OAAOg3E,EAET,MAAMx3E,EAAO8e,KAAKi6D,oBACZ95E,EAAQ6f,KAAKu5D,qBAOnB,OALEb,EADEx3E,EAAKQ,QAAUvB,EAAMuB,OACVse,KAAKgc,UAAU96B,EAAK6uC,OAAO5vC,IAE3Be,EAAKQ,OAASR,EAAOf,EAEpCu4E,EAAa14D,KAAK4vB,OAAO7L,IAAM20C,EACxBA,CACT,CACA,kBAAAqB,CAAmB75E,GACjB,OAAQqmE,GAAYvmD,KAAKs7D,OAAQp7E,GAAS8f,KAAKu7D,SAAWv7D,KAAKw7D,WACjE,CACA,gBAAArrB,CAAiBlpC,GACf,MAAMszD,EAAUv6D,KAAKi5D,SACf7oB,EAAUpwC,KAAKqwC,mBAAmBppC,GAASszD,EAAQz5C,OAASy5C,EAAQzzE,IAC1E,OAAOy/D,GAAYvmD,KAAKs7D,OAAQlrB,EAAUpwC,KAAKw7D,YAAcx7D,KAAKu7D,SAAS,EAC7E,EAEFF,GAAgBp0E,GAAK,aACrBo0E,GAAgB74D,SAAWs2D,GAAUt2D,SAYrC,MCr2UMm5D,GAAsB,QAC5B,SAASC,GAAaC,EAAK37E,GACJ,mBAAR27E,EACPA,EAAI37E,GACG27E,IACPA,EAAIxoD,QAAUnzB,EAEtB,CAMA,SAAS47E,GAAUC,EAAaC,GAC5BD,EAAYhxC,OAASixC,CACzB,CACA,SAASC,GAAYF,EAAaG,GAC9B,IAAIC,EAAe9sC,UAAU3tC,OAAS,QAAsB,IAAjB2tC,UAAU,GAAgBA,UAAU,GAAKssC,GACpF,MAAMS,EAAgB,GACtBL,EAAYl5D,SAAWq5D,EAAal3E,KAAKq3E,IAErC,MAAMC,EAAiBP,EAAYl5D,SAAS05D,MAAMt0C,GAAUA,EAAQk0C,KAAkBE,EAAYF,KAGlG,OAAKG,GAAmBD,EAAYn7E,OAAQk7E,EAAc/rD,SAASisD,IAKnEF,EAAc55E,KAAK85E,GACnB96E,OAAOge,OAAO88D,EAAgBD,GACvBC,GANI,IACAD,EAKU,GAE7B,CACA,SAASG,GAAUt7E,GACf,IAAIi7E,EAAe9sC,UAAU3tC,OAAS,QAAsB,IAAjB2tC,UAAU,GAAgBA,UAAU,GAAKssC,GACpF,MAAMc,EAAW,CACb1xC,OAAQ,GACRloB,SAAU,IAId,OAFAi5D,GAAUW,EAAUv7E,EAAK6pC,QACzBkxC,GAAYQ,EAAUv7E,EAAK2hB,SAAUs5D,GAC9BM,CACX,CAgCA,SAASC,GAAeC,EAAOd,GAC3B,IAAI,OAAEp0D,EAAQ,IAAI,MAAErB,EAAO,IAAI,OAAEw2D,GAAQ,EAAM,aAAET,EAAa,KAAEn8E,EAAK,KAAEkB,EAAK,QAAEmI,EAAQ,QAAEib,EAAS,GAAG,gBAAEu4D,KAAqBn8E,GAAUi8E,EACrI,MAAMG,GAAY,IAAAC,QAAO,MACnBC,GAAW,IAAAD,UACXE,EAAc,KACXH,EAAUzpD,UACf2pD,EAAS3pD,QAAU,IAAI0nC,GAAQ+hB,EAAUzpD,QAAS,CAC9CrzB,OACAkB,KAAMs7E,GAAUt7E,EAAMi7E,GACtB9yE,UACAib,YAEJs3D,GAAaC,EAAKmB,EAAS3pD,SAAQ,EAEjC6pD,EAAe,KACjBtB,GAAaC,EAAK,MACdmB,EAAS3pD,UACT2pD,EAAS3pD,QAAQqsC,UACjBsd,EAAS3pD,QAAU,KACvB,EA6CJ,OA3CA,IAAA8pD,YAAU,KAxFd,IAAoBn6D,EAAOo6D,GAyFdR,GAAUI,EAAS3pD,SAAWhqB,IAzFvB2Z,EA0FGg6D,EAAS3pD,QA1FL+pD,EA0Fc/zE,EAzFrC2Z,EAAM3Z,QAAU,IACT+zE,GAyFH,GACD,CACCR,EACAvzE,KAEJ,IAAA8zE,YAAU,MACDP,GAAUI,EAAS3pD,SACpByoD,GAAUkB,EAAS3pD,QAAQ8P,OAAOjiC,KAAMA,EAAK6pC,OACjD,GACD,CACC6xC,EACA17E,EAAK6pC,UAET,IAAAoyC,YAAU,MACDP,GAAUI,EAAS3pD,SAAWnyB,EAAK2hB,UACpCo5D,GAAYe,EAAS3pD,QAAQ8P,OAAOjiC,KAAMA,EAAK2hB,SAAUs5D,EAC7D,GACD,CACCS,EACA17E,EAAK2hB,YAET,IAAAs6D,YAAU,KACDH,EAAS3pD,UACVupD,GACAM,IACAhhB,WAAW+gB,IAEXD,EAAS3pD,QAAQ2O,SACrB,GACD,CACC46C,EACAvzE,EACAnI,EAAK6pC,OACL7pC,EAAK2hB,YAET,IAAAs6D,YAAU,KACNF,IACO,IAAIC,MAEZ,IACkB,gBAAoB,SAAU17E,OAAOge,OAAO,CAC7Dq8D,IAAKiB,EACLO,KAAM,MACN51D,OAAQA,EACRrB,MAAOA,GACR1lB,GAAQm8E,EACf,CACA,MAAM,IAAsB,IAAAS,YAAWZ,IAEvC,SAASa,GAAiBv9E,EAAMw9E,GAE5B,OADAziB,GAAQ7G,SAASspB,IACI,IAAAF,aAAW,CAAC58E,EAAOm7E,IAAoB,gBAAoB,GAAOr6E,OAAOge,OAAO,CAAC,EAAG9e,EAAO,CACxGm7E,IAAKA,EACL77E,KAAMA,MAGlB,CACA,MACMy9E,GAAsBF,GAAiB,MAAOxrC,ICrJpDgpB,GAAQ7G,SACJmd,GACAoC,GACArL,GACA,IAGG,IAAMsV,GAAwB,WAAK,oCAEV,aAAiBn9E,GAArCT,EAF8B,EAE9BA,MAEJ6B,GAJkC,EAEvBhB,UAEA,UAAAb,EAAMhB,aAAN,eAAa6+E,aAAcr7E,KAAKC,MAAL,UAAWzC,EAAMhB,aAAjB,aAAW,EAAa6+E,aAAe,EAAlE,UAAsE79E,EAAMhB,aAA5E,aAAsE,EAAa6+E,YAAYl7E,QAAQ,GAAvG,UAA4G3C,EAAMhB,aAAlH,aAA4G,EAAa6+E,aACpI97E,GAAW,UAAA/B,EAAMhB,aAAN,eAAa8+E,aAAct7E,KAAKC,MAAL,UAAWzC,EAAMhB,aAAjB,aAAW,EAAa8+E,aAAe,EAAlE,UAAsE99E,EAAMhB,aAA5E,aAAsE,EAAa8+E,YAAYn7E,QAAQ,GAAvG,UAA4G3C,EAAMhB,aAAlH,aAA4G,EAAa8+E,YACpIt4E,GAAU,UAAAxF,EAAMhB,aAAN,eAAayG,uBAAwBjD,KAAKC,MAAL,UAAWzC,EAAMhB,aAAjB,aAAW,EAAayG,uBAAyB,EAAtF,UAA0FzF,EAAMhB,aAAhG,aAA0F,EAAayG,sBAAsB9C,QAAQ,GAArI,UAA0I3C,EAAMhB,aAAhJ,aAA0I,EAAayG,sBAyBjKrE,EAAO,CACP6pC,OAAM,UAAEjrC,EAAMhB,aAAR,aAAE,EAAa++E,kBAAkB97E,YACvC8gB,SAAU,CAAC,CACP1iB,MAAO,GACPe,KAAI,UAAEpB,EAAMhB,aAAR,aAAE,EAAa++E,kBAAkB77E,YACrC2gB,gBAAe,UAAE7iB,EAAMhB,aAAR,aAAE,EAAa++E,kBAAkB57E,eAIxD,OACI,gBAAC,WAAc,KACX,uBAAKkD,UAAU,iDACX,uBAAKA,UAAU,4CAA0C,kDAEzD,uBAAKA,UAAU,QACX,uBAAK8B,GAAG,qBAAqB9B,UAAU,UACnC,gBAACs4E,GAAG,CACAv8E,KAAMA,EACNmI,QAzCV,CACVib,QAAS,CACL+zB,OAAQ,CACJyC,SAAS,GAEbp3C,MAAO,CACHo3C,SAAS,IAGjBv2B,YAAY,EACZE,OAAQ,CACJq5D,MAAO,CACHhjC,SAAS,GAEbijC,MAAO,CACHztC,MAAO,CACHwK,SAAS,GAEbA,SAAS,SA4BT,uBAAK31C,UAAU,qDACX,uBAAKA,UAAU,WACX,uBAAKA,UAAU,gBAAf,IAAgCxD,GAChC,uBAAKwD,UAAU,wBAAsB,QAEzC,uBAAKA,UAAU,0CACX,uBAAKA,UAAU,4BACf,qBAAGA,UAAU,uCAAsC,wBAAMA,UAAU,0BAAhB,IAA2CG,GAAoC,sBAEtI,uBAAKH,UAAU,WACX,uBAAKA,UAAU,gBAAf,IAAgCtD,GAChC,uBAAKsD,UAAU,mCAAiC,UAMvE,ECrFY64E,GAA4B,WAAK,IAElCl+E,EAAU,aAAiBS,GAA3BT,MAEJ6B,EAAW7B,EAAML,UAAY6C,KAAKC,MAAMzC,EAAML,WAAa,EAAIK,EAAML,UAAUgD,QAAQ,GAAK3C,EAAML,UAClGoC,EAAW/B,EAAMJ,UAAY4C,KAAKC,MAAMzC,EAAMJ,WAAa,EAAII,EAAMJ,UAAU+C,QAAQ,GAAK3C,EAAMJ,UAClG4F,EAAUxF,EAAMQ,cAAgBgC,KAAKC,MAAMzC,EAAMQ,eAAiB,EAAIR,EAAMQ,cAAcmC,QAAQ,GAAK3C,EAAMQ,cAyB7GY,EAAO,CACP6pC,OAAQjrC,EAAMN,gBAAgBuC,YAC9B8gB,SAAU,CAAC,CACP3hB,KAAMpB,EAAMN,gBAAgBwC,YAC5B2gB,gBAAiB7iB,EAAMN,gBAAgByC,eAI/C,OACI,gBAAC,WAAc,KACX,uBAAKkD,UAAU,kCACX,uBAAKA,UAAU,gDAAgDrF,EAAMd,WAAoC,uBAEzG,uBAAKmG,UAAU,QACX,uBAAKA,UAAU,UACX,gBAACs4E,GAAG,CACAv8E,KAAMA,EACNmI,QAxCR,CACZib,QAAS,CACL+zB,OAAQ,CACJyC,SAAS,GAEbp3C,MAAO,CACHo3C,SAAS,IAGjBv2B,YAAY,EACZE,OAAQ,CACJq5D,MAAO,CACHhjC,SAAS,GAEbijC,MAAO,CACHztC,MAAO,CACHwK,SAAS,GAEbA,SAAS,SA2BT,uBAAK31C,UAAU,qDACX,uBAAKA,UAAU,WACX,uBAAKA,UAAU,gBAAf,IAAgCxD,GAChC,uBAAKwD,UAAU,wBAAsB,QAEzC,uBAAKA,UAAU,0CACX,uBAAKA,UAAU,4BACf,qBAAGA,UAAU,uCAAsC,wBAAMA,UAAU,aAAhB,IAA8BG,GAAkC,oBAEvH,uBAAKH,UAAU,WACX,uBAAKA,UAAU,gBAAf,IAAgCtD,GAChC,uBAAKsD,UAAU,mCAAiC,UAMvE,E,WCtEY84E,GAAe,SAACv9E,GAAS,MACQ,YAAe,GADvB,eAC3Bw9E,EAD2B,KACZC,EADY,OAGI,aAAiB59E,GAA/CT,EAH0B,EAG1BA,MAAOiE,EAHmB,EAGnBA,mBAEPlD,EAA6CH,EAA7CG,OAAQu9E,EAAqC19E,EAArC09E,SAAU/qD,EAA2B3yB,EAA3B2yB,QAAS/yB,EAAkBI,EAAlBJ,cAEnC,aAAgB,WACZ2D,OAAOo1B,iBAAiB,qBAAqB,SAAC6G,GAC1Cr/B,EAAOw9E,MAAQn+C,EAAMo+C,OAAOt5D,KAAOm5D,GAAiB,GAAQA,GAAiB,EAChF,GACJ,IAED,IAAMI,EAAc,SAACv5D,GACjBA,EAAOA,GAAQllB,EAAMd,WAAa,KAAOgmB,EACzC,IAAI6R,EAAM,IAAI2nD,YAAY,oBAAqB,CAAEF,OAAQ,CAAEt5D,KAAMA,KACjE/gB,OAAOw6E,cAAc5nD,EAExB,EAcD,OACI,gBAAC,WAAc,KACX,gBAAC6nD,GAAAA,QAAO,CACJC,OAAQT,EACR3nD,UAAW,CAAC,MAAO,SAAU,OAAQ,SACrCqoD,QAAS,cAAGviC,SAAH,EAAawiC,UAAb,EAAwBC,YAAxB,OACD,uBACI16D,QAAS,kBAAM+5D,GAAkBD,EAAxB,GAET,uBAAKa,YAAa,kBAAMZ,GAAiB,EAAvB,EAA8Ba,aAAc,kBAAMb,GAAiB,EAAvB,EAA+Bh5E,UAAU,qCACnG,uBAAKA,UAAU,8BAA8BtE,EAAOw9E,MACpD,uBAAKl5E,UAAU,gEACX,uBAAKA,UAAU,iBAAe,OAC9B,uBAAKA,UAAU,aAAf,IAA6BtE,EAAOo+E,WAAWryE,IAAInK,QAAQ,KAE/D,uBAAK0C,UAAU,gEACX,uBAAKA,UAAU,iBAAe,OAC9B,uBAAKA,UAAU,aAAf,IAA6BtE,EAAOo+E,WAAWpyE,IAAIpK,QAAQ,KAE/D,uBAAK0C,UAAU,gEACX,uBAAKA,UAAU,iBAAe,WAC9B,uBAAKA,UAAU,aAAatE,EAAOo+E,WAAWC,qBAElD,2BAAK,0BAAQ96D,QAAS,SAAC8b,GAAD,OAnC7B,SAACA,EAAOr/B,GACzBq/B,EAAMi/C,kBAEN,IAAIC,EAAa,CACbl/E,MAAOW,EAAOw+E,aACdl/E,MAAO,GAAF,OAAKU,EAAOw9E,KAAZ,aAAqBx9E,EAAOy+E,SAA5B,KACLtgF,WAAY6B,EAAOw9E,KACnBj+E,SAAUS,EAAOy+E,UAErBv7E,EAAmBq7E,EACtB,CAyB4DG,CAAar/C,EAAOr/B,EAA/B,EAAwCsE,UAAU,sBAAoB,eAlBnG,GAuBT,uBAAKA,UAAU,mDACX,uBAAKA,UAAU,QAAQ45E,YAAa,kBAAMR,EAAY19E,EAAOw9E,KAAzB,EAAgCj6D,QAAS,kBAAMm6D,EAAY19E,EAAOw9E,KAAzB,GACzE,uBAAKl5E,UAAS,0EAAqEkuB,EAAU,kBAAoB,wCAA0C9P,MAAO,CAAE6C,MAAO,GAAF,OAAMvlB,EAAOo+E,WAAW79E,OAAOqB,QAAQ,GAAK27E,EAAS37E,QAAQ,GAAM,IAAnE,OAAzK,IAAwPnC,IAE5P,uBAAK6E,UAAS,8DAAyDkuB,EAAU,8BAAgC,qCAAuC0rD,YAAa,kBAAMR,EAAY19E,EAAOw9E,KAAzB,EAAgCj6D,QAAS,kBAAMm6D,EAAY19E,EAAOw9E,KAAzB,GACzMx9E,EAAOw9E,QAM/B,ECvEYmB,GAAyB,WAAK,MAEX,aAAiBj/E,GAArCT,EAF+B,EAE/BA,MAEFs+E,GAJiC,EAExBz9E,SAEEb,EAAMH,iBAAiB,GAAGs/E,WAAW79E,QAOtD,OACI,gBAAC,WAAc,KACX,uBAAK+D,UAAU,SAAS65E,aAAc,kBANtCnoD,EAAM,IAAI2nD,YAAY,oBAAqB,CAAEF,OAAQ,CAAEt5D,KAAM,aACjE/gB,OAAOw6E,cAAc5nD,GAFJ,IACbA,CAMsC,GAClC,uBAAK1xB,UAAU,gDAA8C,8BAC7D,uBAAKA,UAAU,UAEFrF,EAAMH,iBAAiBqF,KAAI,SAACnE,EAAQsB,GACjC,IAAI7B,EAAgBO,EAAOo+E,WAAW79E,OAASkB,KAAKC,MAAM1B,EAAOo+E,WAAW79E,QAAU,EAAIP,EAAOo+E,WAAW79E,OAAOqB,QAAQ,GAAK5B,EAAOo+E,WAAW79E,OAElJ,OAAIP,EAAOw9E,MAAQv+E,EAAMd,WACd,gBAACi/E,GAAY,CAAC77E,IAAKD,EAAOtB,OAAQA,EAAQu9E,SAAUA,EAAU99E,cAAeA,EAAe+yB,SAAS,IAErG,gBAAC4qD,GAAY,CAAC77E,IAAKD,EAAOtB,OAAQA,EAAQu9E,SAAUA,EAAU99E,cAAeA,EAAe+yB,SAAS,GAEnH,MAM5B,EC7BYosD,GAAmB,WAAK,IAEzB3/E,EAAU,aAAiBS,GAA3BT,MAEJ6B,EAAW7B,EAAML,UAAY6C,KAAKC,MAAMzC,EAAML,WAAa,EAAIK,EAAML,UAAUgD,QAAQ,GAAK3C,EAAML,UAClGoC,EAAW/B,EAAMJ,UAAY4C,KAAKC,MAAMzC,EAAMJ,WAAa,EAAII,EAAMJ,UAAU+C,QAAQ,GAAK3C,EAAMJ,UAClG4F,EAAUxF,EAAMQ,cAAgBgC,KAAKC,MAAMzC,EAAMQ,eAAiB,EAAIR,EAAMQ,cAAcmC,QAAQ,GAAK3C,EAAMQ,cAEjH,OACI,gBAAC,WAAc,KACX,uBAAK6E,UAAU,iDACX,uBAAKA,UAAU,uFACX,uBAAKA,UAAU,4CAA4CrF,EAAMd,WAAWsL,cAAuC,uBACnH,uBAAKnF,UAAU,6CAAf,IAA6DxD,EAA7D,QAA4EE,GAC5E,uBAAKsD,UAAU,+BAA6B,qBAIhD,uBAAKA,UAAU,uFACX,uBAAKA,UAAU,4CAA4CrF,EAAMd,WAAWsL,cAAkC,kBAC9G,uBAAKnF,UAAU,uDAAf,IAAuEG,GACvE,uBAAKH,UAAU,+BAA6B,sBAM1B,GAAzBrF,EAAMF,iBACH,uBAAKuF,UAAU,0DACX,gBAAC64E,GAAyB,MAC1B,gBAACwB,GAAsB,OAIL,GAAzB1/E,EAAMF,iBACH,uBAAKuF,UAAU,kDACX,gBAACq6E,GAAsB,OAM1C,ECtCKE,GAA0B,SAACh/E,GAAS,MAIlC,aAAiBH,GAFjBT,EAFkC,EAElCA,MACAa,EAHkC,EAGlCA,SAGIO,EAASR,EAATQ,KAER,aAAgB,WAGZy+E,EAAgBz+E,EAAK0+E,mBACxB,GAAE,IAEH,IAAMD,EAAkB,SAACE,GAGrB,IAAIx+E,EAAYw+E,EAASC,sBACrBv+E,EAAWC,OAAOC,QAAQJ,GAAWK,OAErCC,EAAWC,WAAWJ,OAAOC,QAAQJ,GAAW,GAAG,IACnDQ,EAAWD,WAAWJ,OAAOC,QAAQJ,GAAWE,EAAW,GAAG,IAG9Dw+E,EAAa,GACbC,EAAQr+E,EAAW,GAGvB,EAAG,CACC,IAAIs+E,EAAc,CAAC,EACnBA,EAAYD,GAAS,EAErBD,EAAWv9E,KAAKy9E,GAChBD,GAAgB,EAEnB,OAAQA,EAASn+E,EAAW,IAG7B,IAAIq+E,EAAe,KAEnB1+E,OAAOC,QAAQJ,GAAWa,SAAQ,YAE9B,IAF+C,mBAAfE,EAAe,KAAVlC,EAAU,KAEtCgI,EAAI,EAAGA,EAAI63E,EAAWr+E,OAAQwG,IAAK,CACxC,IAAIi4E,EAAQv+E,WAAWJ,OAAO4G,KAAK23E,EAAW73E,IAAI,IAKlD,GAJoB,MAAhBg4E,GAAyBC,EAAQN,EAASz+E,SAC1C8+E,EAAeh4E,GAGftG,WAAWQ,GAAO+9E,EAAO,CACzBJ,EAAW73E,GAAGi4E,IAAUjgF,EACxB,KACH,CACJ,CACJ,IAID,IAAI6B,EAAc,GACdC,EAAc,GACdC,EAAc,GAElB89E,EAAW79E,SAAQ,SAAC2nC,EAAQ1nC,GACZX,OAAO4G,KAAKyhC,GAAQ,GACpBroC,OAAO+gB,OAAOsnB,GAAQ,GAI9B9nC,EAAYS,KAAKhB,OAAO4G,KAAKyhC,GAAQ,IACrC7nC,EAAYQ,KAAKhB,OAAO+gB,OAAOsnB,GAAQ,IACvC1nC,GAAS+9E,EAAej+E,EAAYO,KAAK,qBAAuBP,EAAYO,KAAK,mBAExF,IAEDX,EAAWmd,SAASjd,EAAYA,EAAYL,OAAS,IAErD,IAAI0+E,EAA2BF,EAAeH,EAAWr+E,OAAU,IAE/DzB,EAAU,CACVsF,sBAAuBs6E,EAASz+E,OAChCy8E,kBAAmB,CACf97E,YAAaA,EACbC,YAAaA,EACbC,YAAaA,EACbU,oBAAqBy9E,EAAwB39E,QAAQ,IAEzDk7E,YAAah8E,EACbi8E,YAAa/7E,GAEjBlB,EAAS,CAAEX,KAAM,YAAaC,QAASA,GAC1C,EAED,OACI,gBAAC,WAAc,KAEX,uBAAKkF,UAAU,6DAA6Doe,MAAO,CAAE88D,UAAW,oCAC5F,uBAAKl7E,UAAU,yCACX,sBAAIA,UAAU,OAAO8B,GAAG,aAAW,uBAMvC,uBAAK9B,UAAU,+DAA6D,uTAK5E,uBAAKA,UAAU,iDAEX,gBAACE,EAAc,OAGbvF,EAAMX,YACJ,gBAACu+E,GAAqB,QAI3B59E,EAAMT,SAAWS,EAAMX,YACtB,gBAACsgF,GAAgB,MAGrB,uBAAKx4E,GAAG,wBAMvB,EAEAhD,OAAeq8E,oCAAsC,SAAU5/E,GAC5D,SACI,gBAACD,EAA4B,KACzB,gBAACi/E,GAAuB,iBAAKh/E,KAE/B2C,SAASC,eAAe,iCACjC,C,wBChJD,IAAIi9E,EAAYvgE,MAAQA,KAAKugE,UAAa,WAStC,OARAA,EAAW/+E,OAAOge,QAAU,SAAS1Q,GACjC,IAAK,IAAIR,EAAGpG,EAAI,EAAGiE,EAAIkjC,UAAU3tC,OAAQwG,EAAIiE,EAAGjE,IAE5C,IAAK,IAAIkF,KADTkB,EAAI+gC,UAAUnnC,GACO1G,OAAO4E,UAAUyD,eAAevD,KAAKgI,EAAGlB,KACzD0B,EAAE1B,GAAKkB,EAAElB,IAEjB,OAAO0B,CACX,EACOyxE,EAAS95E,MAAMuZ,KAAMqvB,UAChC,EACA7tC,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,IACtDsgF,EAAQC,oBAAiB,EACzB,IAAIC,EAAgB,EAAQ,OACxBC,EAAU,EAAQ,OAClBC,EAAsB,EAAQ,OAclCJ,EAAQC,eAba,SAAUI,GAC3B,IAAIhC,EAAYgC,EAAGhC,UAAWC,EAAc+B,EAAG/B,YAAaziC,EAAWwkC,EAAGxkC,SAAUykC,EAAaD,EAAGC,WAAYC,EAAYF,EAAGE,UAAWC,EAAiBH,EAAGG,eAAgBC,EAAqBJ,EAAGK,WAAY/7E,EAAY07E,EAAG17E,UAAWnB,EAAW68E,EAAG78E,SAAUm9E,EAA8BN,EAAGt9D,MACjS69D,EAAKR,EAAoBS,kBAAkB,CAC3CxC,UAAWA,EACXC,YAAaA,EACbziC,SAAUA,EACVykC,WAAYA,EACZC,UAAWA,IACXO,EAAsBF,EAAGE,oBAAqBJ,EAAaE,EAAGF,WAC9DK,EAAuBZ,EAAQa,SAAQ,WAAc,OAAQjB,EAASA,EAAS,CAAC,EAAGe,GAAsBH,EAA+B,GAAG,CAACG,EAAqBH,IACjKM,EAAmBd,EAAQa,SAAQ,WAAc,OAAQjB,EAASA,EAAS,CAAC,EAAGW,GAAaD,EAAsB,GAAG,CAACC,EAAYD,IACtI,OAAQP,EAAcgB,KAAK,MAAOnB,EAAS,CAAEp7E,UAAWA,EAAWoe,MAAOg+D,GAAwB,CAAEv9E,SAAU,CAAC08E,EAAciB,IAAI,MAAO,CAAEp+D,MAAOk+D,EAAkBt8E,UAAW67E,QAAkB,GAASh9E,UAAc,EAC3N,C,uBC5BA,IAAIu8E,EAAYvgE,MAAQA,KAAKugE,UAAa,WAStC,OARAA,EAAW/+E,OAAOge,QAAU,SAAS1Q,GACjC,IAAK,IAAIR,EAAGpG,EAAI,EAAGiE,EAAIkjC,UAAU3tC,OAAQwG,EAAIiE,EAAGjE,IAE5C,IAAK,IAAIkF,KADTkB,EAAI+gC,UAAUnnC,GACO1G,OAAO4E,UAAUyD,eAAevD,KAAKgI,EAAGlB,KACzD0B,EAAE1B,GAAKkB,EAAElB,IAEjB,OAAO0B,CACX,EACOyxE,EAAS95E,MAAMuZ,KAAMqvB,UAChC,EACA7tC,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,IACtDsgF,EAAQ9B,QAAU8B,EAAQoB,WAAapB,EAAQC,eAAiBD,EAAQa,uBAAoB,EAC5F,IAAIX,EAAgB,EAAQ,OACxBC,EAAU,EAAQ,OAClBkB,EAAkB,EAAQ,OAC1BC,EAAS,EAAQ,OACjBC,EAAe,EAAQ,OAC3BvgF,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEh7D,YAAY,EAAMX,IAAK,WAAc,OAAOk9D,EAAaH,UAAY,IACpH,IAAII,EAAqB,EAAQ,OAC7BpB,EAAsB,EAAQ,OAClCp/E,OAAOmoC,eAAe62C,EAAS,oBAAqB,CAAEh7D,YAAY,EAAMX,IAAK,WAAc,OAAO+7D,EAAoBS,iBAAmB,IACzI,IAAIY,EAAmB,EAAQ,OAC/BzgF,OAAOmoC,eAAe62C,EAAS,iBAAkB,CAAEh7D,YAAY,EAAMX,IAAK,WAAc,OAAOo9D,EAAiBxB,cAAgB,IAChI,IAAIyB,EAAkBvB,EAAQrD,YAAW,SAAUuD,EAAIsB,GACnD,IAAIxD,EAASkC,EAAGlC,OAAQ36E,EAAW68E,EAAG78E,SAAU46E,EAAUiC,EAAGjC,QAASwC,EAAKP,EAAGtqD,UAAW6rD,OAA2B,IAAPhB,EAAgBU,EAAOO,UAAUC,kBAAoBlB,EAAImB,EAAK1B,EAAGl6E,MAAOA,OAAe,IAAP47E,EAAgBT,EAAOO,UAAUG,cAAgBD,EAAIE,EAAK5B,EAAGtgC,QAASA,OAAiB,IAAPkiC,EAAgB,EAAIA,EAAIC,EAAK7B,EAAG8B,WAAYA,OAAoB,IAAPD,GAAuBA,EAAIE,EAAK/B,EAAGgC,cAAeA,OAAuB,IAAPD,EAAgB3+E,OAAOZ,SAAS4lE,KAAO2Z,EAAIE,EAAKjC,EAAGkC,gBAAiBA,OAAyB,IAAPD,EAAgBD,EAAgBC,EAAIE,EAAKnC,EAAGoC,mBAAoBA,OAA4B,IAAPD,EAAgB,+BAAiCA,EAAI3qD,EAAiBwoD,EAAGxoD,eAAgB6qD,EAAkBrC,EAAGqC,gBAAiBC,EAAKtC,EAAGuC,cAAeA,OAAuB,IAAPD,EAAgB,EAAIA,EAAIE,EAAiBxC,EAAGwC,eACjwB9sD,EAAYyrD,EAAmBsB,iBAAiBlB,GAEhDmB,EAAa5C,EAAQ5D,QAAO,GAC5ByG,EAAgB7C,EAAQ5D,SACxB0G,EAAsB9C,EAAQ5D,SAC9B2G,EAAiB/C,EAAQ5D,OAAO4F,GAChCgB,EAAWhD,EAAQ5D,SACnB6G,EAAKjD,EAAQkD,SAAS,CACtBl9E,MAAOA,EACPm9E,WAAY,EACZC,UAAW,EACX1nC,SAAU9lB,EAAU,GACpBgqB,QAASA,EACTs+B,UAAWiD,EAAOO,UAAU2B,kBAC5BlF,YAAagD,EAAOO,UAAU2B,kBAC9BC,WAAYnC,EAAOO,UAAU2B,kBAC7BE,aAAcpC,EAAOO,UAAU2B,kBAC/BZ,cAAeA,IACfe,EAAeP,EAAG,GAAIQ,EAAkBR,EAAG,GAC3CS,EAAoB1D,EAAQ2D,aAAY,SAAUH,GAAgB,OAAOC,EAAgBD,EAAe,GAAG,IAC3GI,EAAKxC,EAAaH,WAAW,CAC7B+B,SAAUA,EACVV,mBAAoBA,EACpBJ,cAAeA,EACfE,gBAAiBA,EACjBG,gBAAiBA,EACjB3sD,UAAWA,EACX5vB,MAAOA,EACP45C,QAASA,EACT6iC,cAAeA,EACfT,WAAYA,EACZ0B,kBAAmBA,IACnBG,EAAkBD,EAAGC,gBAAiBC,EAAaF,EAAGE,WAAYC,EAAWH,EAAGG,SACpF/D,EAAQgE,iBAAgB,WACpB,IAAIC,GAAe,EACfC,EAAgB,WAChB,IAAIhE,EAAIO,EACR,GAAIzC,GAAUiG,EAAc,CACxB,IAAI/F,EAA4F,QAA/EgC,EAAK8C,aAA2C,EAASA,EAAStwD,eAA4B,IAAPwtD,OAAgB,EAASA,EAAGppD,wBAChIqnD,EAAoG,QAArFsC,EAAKqD,aAA+C,EAASA,EAAWpxD,eAA4B,IAAP+tD,OAAgB,EAASA,EAAG3pD,wBAC3H,MAAbonD,GACe,MAAfC,GACEgD,EAAOgD,cAAcjG,EAAW,CAC9Bz1D,IAAK+6D,EAAatF,UAAUz1D,IAC5BF,KAAMi7D,EAAatF,UAAU31D,KAC7B9C,MAAO+9D,EAAatF,UAAUz4D,MAC9BqB,OAAQ08D,EAAatF,UAAUp3D,OAC/B4B,OAAQ86D,EAAatF,UAAUz1D,IAAM+6D,EAAatF,UAAUp3D,OAC5D0B,MAAOg7D,EAAatF,UAAU31D,KAAOi7D,EAAatF,UAAUz4D,SAE5D04D,EAAY14D,QAAU+9D,EAAarF,YAAY14D,OAC/C04D,EAAYr3D,SAAW08D,EAAarF,YAAYr3D,QAChD08D,EAAa5jC,UAAYA,GACzB4jC,EAAax9E,QAAUA,GACvB4vB,IAAcitD,EAAcnwD,SAC5B6vD,IAAoBO,EAAoBpwD,SACxCsvD,IAAee,EAAerwD,SAClCmxD,IAGAjuD,IAAcitD,EAAcnwD,UAC5BmwD,EAAcnwD,QAAUkD,GAExB2sD,IAAoBO,EAAoBpwD,UACxCowD,EAAoBpwD,QAAU6vD,GAE9BP,IAAee,EAAerwD,UAC9BqwD,EAAerwD,QAAUsvD,GAEzBiC,GACA3gF,OAAO2B,sBAAsBi/E,EAErC,CACAtB,EAAWlwD,QAAUsrD,CACzB,EAEA,OADA16E,OAAO2B,sBAAsBi/E,GACtB,WACHD,GAAe,CACnB,CACJ,GAAG,CACCj+E,EACAu8E,EACAvE,EACAp+B,EACAkkC,EACAN,EAAax9E,MACbw9E,EAAatF,UAAUp3D,OACvB08D,EAAatF,UAAU31D,KACvBi7D,EAAatF,UAAUz1D,IACvB+6D,EAAatF,UAAUz4D,MACvB+9D,EAAa5jC,QACb4jC,EAAarF,YAAYr3D,OACzB08D,EAAarF,YAAY14D,MACzBo+D,EACAjuD,EACAosD,IAEJhC,EAAQxD,WAAU,WACd,IAAI4H,EAAiBN,EAAWpxD,QAEhC,OADA7xB,OAAOge,OAAOulE,EAAexhE,MAAO8U,GAC7B,WACH72B,OAAO4G,KAAKiwB,QAAuDA,EAAiB,CAAC,GAAGn2B,SAAQ,SAAUE,GACtG,cAAc2iF,EAAexhE,MAAMnhB,EACvC,GACJ,CACJ,GAAG,CAACi2B,EAAgBsmD,EAAQ8F,IAC5B,IAAIO,EAAuBrE,EAAQ2D,aAAY,SAAUn3E,GACrD,IAAI0zE,EAAIO,GACJzC,IACgC,QAA7BkC,EAAK4D,EAAWpxD,eAA4B,IAAPwtD,OAAgB,EAASA,EAAGz9B,SAASj2C,EAAErE,WACjD,QAA3Bs4E,EAAKuC,EAAStwD,eAA4B,IAAP+tD,OAAgB,EAASA,EAAGh+B,SAASj2C,EAAErE,UAC7Eu6E,SAAgEA,EAAel2E,EAEvF,GAAG,CAACwxE,EAAQ0E,EAAgBoB,IACxBQ,EAAqBtE,EAAQ2D,aAAY,WACrCX,EAAStwD,SACTpvB,OAAO2B,uBAAsB,WAAc,OAAO4+E,GAAmB,GAE7E,GAAG,CAACA,IACJ7D,EAAQxD,WAAU,WAGd,OAFAl5E,OAAOo1B,iBAAiB,QAAS2rD,GACjC/gF,OAAOo1B,iBAAiB,SAAU4rD,GAC3B,WACHhhF,OAAOq1B,oBAAoB,QAAS0rD,GACpC/gF,OAAOq1B,oBAAoB,SAAU2rD,EACzC,CACJ,GAAG,CAACD,EAAsBC,IAC1B,IAAIC,EAAYvE,EAAQ2D,aAAY,SAAUpiE,GAC1CyhE,EAAStwD,QAAUnR,EACA,MAAfigE,IAC2B,iBAAhBA,EACPA,EAAY9uD,QAAUnR,EAEM,mBAAhBigE,GACZA,EAAYjgE,GAGxB,GAAG,CAACigE,IAWJ,OAAQzB,EAAcgB,KAAKhB,EAAcyE,SAAU,CAAEnhF,SAAU,CATpD28E,EAAQyE,aAAaphF,EAAU,CAClC63E,IAAKqJ,IAIJvG,EAEG+B,EAAciB,IAAIE,EAAgBwD,cAAe9E,EAAS,CAAEjqD,QAASmuD,EAAWpxD,QAASiyD,aAAcZ,EAASrxD,QAASjwB,UAAWy/E,GAAiB,CAAE7+E,SAA6B,mBAAZ46E,EAAyBA,EAAQuF,GAAgBvF,SAAY,GADlO,YAGoF,EACvG,IACA4B,EAAQ9B,QAAUiC,EAAQrD,YAAW,SAAU58E,EAAOm7E,GAClD,MAAsB,oBAAX53E,OACAvD,EAAMsD,SACV08E,EAAciB,IAAIO,EAAiB3B,EAAS,CAAC,EAAG7/E,EAAO,CAAEm7E,IAAKA,SAAQ,EACjF,G,kBCpLAr6E,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,IACtDsgF,EAAQ6E,mBAAgB,EACxB,IAAI1E,EAAU,EAAQ,OAClB4E,EAAc,EAAQ,OAa1B/E,EAAQ6E,cAZY,SAAUxE,GAC1B,IAAIz9E,EAAYy9E,EAAGz9E,UAAWkzB,EAAUuqD,EAAGvqD,QAASgvD,EAAezE,EAAGyE,aAActhF,EAAW68E,EAAG78E,SASlG,OARA28E,EAAQgE,iBAAgB,WAGpB,OAFAvhF,EAAUoiF,YAAYlvD,GACtBlzB,EAAUoiF,YAAYF,GACf,WACHliF,EAAUqiF,YAAYnvD,GACtBlzB,EAAUqiF,YAAYH,EAC1B,CACJ,GAAG,CAACliF,EAAWkzB,IACRivD,EAAYG,aAAa1hF,EAAUsyB,EAC9C,C,wBCfA,IAAIiqD,EAAYvgE,MAAQA,KAAKugE,UAAa,WAStC,OARAA,EAAW/+E,OAAOge,QAAU,SAAS1Q,GACjC,IAAK,IAAIR,EAAGpG,EAAI,EAAGiE,EAAIkjC,UAAU3tC,OAAQwG,EAAIiE,EAAGjE,IAE5C,IAAK,IAAIkF,KADTkB,EAAI+gC,UAAUnnC,GACO1G,OAAO4E,UAAUyD,eAAevD,KAAKgI,EAAGlB,KACzD0B,EAAE1B,GAAKkB,EAAElB,IAEjB,OAAO0B,CACX,EACOyxE,EAAS95E,MAAMuZ,KAAMqvB,UAChC,EACA7tC,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,IACtDsgF,EAAQa,uBAAoB,EAC5B,IAAIV,EAAU,EAAQ,OA+EtBH,EAAQa,kBA9EgB,SAAUR,GAC9B,IAAIhC,EAAYgC,EAAGhC,UAAWC,EAAc+B,EAAG/B,YAAaziC,EAAWwkC,EAAGxkC,SAAU0kC,EAAYF,EAAGE,UAAWD,EAAaD,EAAGC,WAwE9H,MAAO,CACHQ,oBAxEsBX,EAAQa,SAAQ,WACtC,MAAO,CACHjhC,QAASwgC,EAEjB,GAAG,CAACA,IAqEAG,WApEaP,EAAQa,SAAQ,WAC7B,OAAQjB,EAAS,CAAElkC,SAAU,YAAc,WACvC,IAAIspC,EAAyB,EAAZ5E,EACb33D,EAAMy1D,EAAUz1D,IAAM01D,EAAY11D,IAAMy1D,EAAUp3D,OAAS,EAAIk+D,EAAa,EAC5Ez8D,EAAO21D,EAAU31D,KAAO41D,EAAY51D,KAAO21D,EAAUz4D,MAAQ,EAAIu/D,EAAa,EAC9EC,EAAa7E,EACb8E,EAAiB/G,EAAY14D,MAAQ26D,EACrC+E,EAAgBhH,EAAYr3D,OAASs5D,EAOzC,OALA73D,GADAA,EAAOA,EAAO08D,EAAaA,EAAa18D,GAC1By8D,EAAaE,EAAiBA,EAAiBF,EAAaz8D,EAE1EE,GADAA,EAAMA,EAAMw8D,EAAaA,EAAax8D,GAC1Bu8D,EAAaG,EAAgBA,EAAgBH,EAAav8D,EACtEA,EAAM7hB,OAAO6E,MAAMgd,GAAO,EAAIA,EAC9BF,EAAO3hB,OAAO6E,MAAM8c,GAAQ,EAAIA,EACxBmzB,GACJ,IAAK,QACD,MAAO,CACH0pC,UAAWhF,EAAY,uBACvBiF,aAAcjF,EAAY,uBAC1BkF,YAAalF,EAAY,YAAcD,EACvC53D,KAAM,EACNE,IAAKA,GAEb,IAAK,OACD,MAAO,CACH28D,UAAWhF,EAAY,uBACvBiF,aAAcjF,EAAY,uBAC1BmF,WAAYnF,EAAY,YAAcD,EACtC33D,MAAO,EACPC,IAAKA,GAEb,IAAK,SACD,MAAO,CACH88D,WAAYnF,EAAY,uBACxBkF,YAAalF,EAAY,uBACzBiF,aAAcjF,EAAY,YAAcD,EACxC13D,IAAK,EACLF,KAAMA,GAEd,IAAK,MACD,MAAO,CACHg9D,WAAYnF,EAAY,uBACxBkF,YAAalF,EAAY,uBACzBgF,UAAWhF,EAAY,YAAcD,EACrCz3D,OAAQ,EACRH,KAAMA,GAEd,QACI,MAAO,CACH4xB,QAAS,UAGxB,CAnD0C,GAoD/C,GAAG,CACCgmC,EACAC,EACAlC,EAAUp3D,OACVo3D,EAAU31D,KACV21D,EAAUz1D,IACVy1D,EAAUz4D,MACV04D,EAAYr3D,OACZq3D,EAAY51D,KACZ41D,EAAY11D,IACZ01D,EAAY14D,MACZi2B,IAMR,C,iBC3FA76C,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,IACtDsgF,EAAQ2F,mBAAgB,EACxB,IAAIxF,EAAU,EAAQ,OAClBmB,EAAS,EAAQ,OAKrBtB,EAAQ2F,cAJY,SAAUlD,EAAoB5qD,GAC9C,IAAI/B,EAAUqqD,EAAQa,SAAQ,WAAc,OAAOM,EAAOsE,gBAAgB/tD,EAAgB4qD,EAAqB,GAAG,CAACA,EAAoB5qD,IACvI,OAAOsoD,EAAQ5D,OAAOzmD,EAC1B,C,kBCPA90B,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,IACtDsgF,EAAQ8C,sBAAmB,EAC3B,IAAI3C,EAAU,EAAQ,OAoBtBH,EAAQ8C,iBAnBe,SAAU+C,GAC7B,IAAIC,EAAe3F,EAAQ5D,OAAOsJ,GAgBlC,OAfY1F,EAAQa,SAAQ,WACxB,GAAI8E,EAAajzD,UAAYgzD,EACzB,OAAOC,EAAajzD,QACxB,GAAIizD,EAAajzD,QAAQ3xB,SAAW2kF,EAAc3kF,OAE9C,OADA4kF,EAAajzD,QAAUgzD,EAChBA,EAEX,IAAK,IAAIn+E,EAAI,EAAGA,EAAIm+E,EAAc3kF,OAAQwG,GAAK,EAC3C,GAAIm+E,EAAcn+E,KAAOo+E,EAAajzD,QAAQnrB,GAE1C,OADAo+E,EAAajzD,QAAUgzD,EAChBA,EAGf,OAAOC,EAAajzD,OACxB,GAAG,CAACgzD,GAER,C,kBCrBA7kF,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,IACtDsgF,EAAQoB,gBAAa,EACrB,IAAIjB,EAAU,EAAQ,OAClBmB,EAAS,EAAQ,OACjByE,EAAkB,EAAQ,MA0H9B/F,EAAQoB,WAzHS,SAAUf,GACvB,IAAI8C,EAAW9C,EAAG8C,SAAUptD,EAAYsqD,EAAGtqD,UAAW0sD,EAAqBpC,EAAGoC,mBAAoBJ,EAAgBhC,EAAGgC,cAAeK,EAAkBrC,EAAGqC,gBAAiBv8E,EAAQk6E,EAAGl6E,MAAO45C,EAAUsgC,EAAGtgC,QAASoiC,EAAa9B,EAAG8B,WAAYS,EAAgBvC,EAAGuC,cAAeL,EAAkBlC,EAAGkC,gBAAiBsB,EAAoBxD,EAAGwD,kBACzUI,EAAa8B,EAAgBJ,cAAclD,EAAoB,CAC/D5mC,SAAU,QACVmqC,SAAU,UACVp9D,IAAK,MACLF,KAAM,QAENw7D,EAAW6B,EAAgBJ,cAAc,2BAA4B,CACrE9pC,SAAU,QACVjzB,IAAK,MACLF,KAAM,MACN9C,MAAO,MACPqB,OAAQ,MACRg/D,WAAY,WAEZjC,EAAkB7D,EAAQ2D,aAAY,SAAUzD,GAChD,IAAIO,EAAImB,EACJE,OAAY,IAAP5B,EAAgB,CAAC,EAAIA,EAAI6B,EAAKD,EAAGiE,cAAeA,OAAuB,IAAPhE,EAAgB,EAAIA,EAAIE,EAAKH,EAAGwB,WAAYA,OAAoB,IAAPrB,EAAgBC,EAAcprD,wBAA0BmrD,EAAIE,EAAKL,EAAG5D,UAAWA,OAAmB,IAAPiE,EAAgG,QAA/E1B,EAAKuC,aAA2C,EAASA,EAAStwD,eAA4B,IAAP+tD,OAAgB,EAASA,EAAG3pD,wBAA0BqrD,EAAIE,EAAKP,EAAGkE,UAAWA,OAAmB,IAAP3D,EAAgG,QAA/ET,EAAKmC,aAA2C,EAASA,EAASrxD,eAA4B,IAAPkvD,OAAgB,EAASA,EAAG9qD,wBAA0BurD,EAAIG,EAAKV,EAAG3D,YAAaA,OAAqB,IAAPqE,EAAgBsB,EAAWpxD,QAAQoE,wBAA0B0rD,EAAIS,EAAKnB,EAAGyB,aAAcA,OAAsB,IAAPN,EAAgBb,IAAoBF,EACvuBoB,EACAlB,EAAgBtrD,wBAA0BmsD,EAChD,GAAK/E,GAAcoF,EAAnB,CAGA,GAAIf,EAAiB,CACjB,IAAIqB,EAAgC,mBAApBrB,EACVA,EAAgB,CACdrE,UAAWA,EACXC,YAAaA,EACbmF,WAAYA,EACZC,aAAcA,EACd3jC,QAASA,EACTwjC,UAAW,EACXD,WAAY,EACZV,cAAeA,IAEjBF,EAAiB0D,EAAWrC,EAAGn7D,IAAKy9D,EAAYtC,EAAGr7D,KACrD49D,EAAS7C,EAAW/6D,KAAO29D,EAC3BE,EAAQ9C,EAAW76D,IAAMw9D,EAY7B,OAXAnC,EAAWpxD,QAAQ9P,MAAMyjE,UAAY,cAAgBF,EAASH,EAAUz9D,MAAQ,QAAU69D,EAAQJ,EAAUv9D,KAAO,WACnHi7D,EAAkB,CACdxF,UAAWA,EACXC,YAAaA,EACbmF,WAAYA,EACZC,aAAcA,EACd3jC,QAASA,EACTwjC,UAAW,EACXD,WAAY,EACZV,cAAeA,GAGvB,CACA,IAAI6D,EAAcP,IAAkBnwD,EAAU70B,OAC1C26C,EAAW4qC,EAAc1wD,EAAU,GAAKA,EAAUmwD,GAClDQ,EAAKpF,EAAOqF,kBAAkB,CAC9BtI,UAAWA,EACXC,YAAaA,EACboF,aAAcA,EACd7nC,SAAUA,EACV11C,MAAOA,EACP45C,QAASA,EACToiC,WAAYA,GACbS,GAAgB16D,EAAOw+D,EAAGx+D,KAC7B,GADuDw+D,EAAGE,mBACjCzE,IAAesE,EACpCzC,EAAgB,CACZkC,cAAeA,EAAgB,EAC/B7H,UAAWA,EACXC,YAAaA,EACbmF,WAAYA,EACZC,aAAcA,QANtB,CAUA,IAAI96D,EAAMV,EAAKU,IAAKF,EAAOR,EAAKQ,KAAM9C,EAAQsC,EAAKtC,MAAOqB,EAASiB,EAAKjB,OACpE4/D,EAAc1E,IAAesE,EAC7BK,EAAKxF,EAAOyF,qBAAqB7+D,EAAMw7D,EAAcd,GAAgBU,EAAawD,EAAGp+D,KAAM66D,EAAYuD,EAAGl+D,IAC1Go+D,EAAWp+D,EACXq+D,EAAYv+D,EACZm+D,IACAG,EAAWzD,EACX0D,EAAY3D,GAEhBW,EAAWpxD,QAAQ9P,MAAMyjE,UAAY,cAAgBS,EAAYd,EAAUz9D,MAAQ,QAAUs+D,EAAWb,EAAUv9D,KAAO,MACzHi7D,EAAkB,CACdxF,UAAWA,EACXC,YAAa,CACT11D,IAAKo+D,EACLt+D,KAAMu+D,EACNrhE,MAAOA,EACPqB,OAAQA,EACR0B,MAAOs+D,EAAYrhE,EACnBiD,OAAQm+D,EAAW//D,GAEvBw8D,WAAYA,EACZC,aAAcA,EACd7nC,SAAUA,EACV11C,MAAOA,EACP45C,QAASA,EACTwjC,UAAWA,EAAY36D,EACvB06D,WAAYA,EAAa56D,EACzBk6D,cAAeA,GA5BnB,CAjDA,CA+EJ,GAAG,CACCP,EACAc,EACAc,EACA1B,EACAG,EACA3sD,EACA5vB,EACA45C,EACAoiC,EACAS,EACAiB,IAEJ,MAAO,CACHG,gBAAiBA,EACjBC,WAAYA,EACZC,SAAUA,EAElB,C,gBC7HAljF,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,IACtDsgF,EAAQ+G,qBAAuB/G,EAAQ2G,kBAAoB3G,EAAQkH,uBAAyBlH,EAAQmH,6CAA+CnH,EAAQ4F,gBAAkB5F,EAAQoH,yBAA2BpH,EAAQqH,sBAAwBrH,EAAQsE,cAAgBtE,EAAQsH,YAActH,EAAQ6B,eAAY,EAClT7B,EAAQ6B,UAAY,CAChB0F,6BAA8B,+BAC9BvF,cAAe,SACfwF,oBAAqB7hF,MAAM,KACtBwiB,KAAK,MACL3jB,KAAI,SAAUijF,EAAG//E,GAAK,OAAOA,EAAI,GAAM,IACvCD,UACLq6E,kBAAmB,CAAC,MAAO,OAAQ,QAAS,UAC5C0B,kBAAmB,CACf56D,IAAK,EACLF,KAAM,EACNG,OAAQ,EACR5B,OAAQ,EACR0B,MAAO,EACP/C,MAAO,IAMfo6D,EAAQsH,YAHU,SAAUp7E,GACxB,OAAOA,EAAM+kB,QAAO,SAAUvxB,EAAOiC,EAAO+lF,GAAQ,OAAOA,EAAK/+E,QAAQjJ,KAAWiC,CAAO,GAC9F,EAWAq+E,EAAQsE,cATY,SAAUqD,EAAOC,GACjC,OAAOD,IAAUC,IACXD,aAAqC,EAASA,EAAM9+D,WAAa++D,aAAqC,EAASA,EAAM/+D,UAClH8+D,aAAqC,EAASA,EAAM1gE,WAAa2gE,aAAqC,EAASA,EAAM3gE,UACrH0gE,aAAqC,EAASA,EAAMj/D,SAAWk/D,aAAqC,EAASA,EAAMl/D,QACnHi/D,aAAqC,EAASA,EAAMh/D,UAAYi/D,aAAqC,EAASA,EAAMj/D,SACpHg/D,aAAqC,EAASA,EAAM/+D,QAAUg/D,aAAqC,EAASA,EAAMh/D,OAClH++D,aAAqC,EAASA,EAAM/hE,UAAYgiE,aAAqC,EAASA,EAAMhiE,MACjI,EAYAo6D,EAAQqH,sBAVoB,SAAUQ,EAAQC,GAC1C,OAAOD,IAAWC,IACZD,aAAuC,EAASA,EAAO1hF,UAAY2hF,aAAuC,EAASA,EAAO3hF,SACvH0hF,aAAuC,EAASA,EAAOvE,eAAiBwE,aAAuC,EAASA,EAAOxE,cAC/HuE,aAAuC,EAASA,EAAOtE,cAAgBuE,aAAuC,EAASA,EAAOvE,YAC/HsE,EAAO9nC,UAAY+nC,EAAO/nC,SAC1BigC,EAAQsE,cAAcuD,aAAuC,EAASA,EAAOvJ,YAAawJ,aAAuC,EAASA,EAAOxJ,cACjJ0B,EAAQsE,cAAcuD,aAAuC,EAASA,EAAOxJ,UAAWyJ,aAAuC,EAASA,EAAOzJ,aAC9IwJ,aAAuC,EAASA,EAAOhsC,aAAeisC,aAAuC,EAASA,EAAOjsC,SAC1I,EASAmkC,EAAQoH,yBAPuB,SAAUW,EAASC,GAC9C,YAAmBhoF,IAAZ+nF,GACHA,EAAQr/D,OAASs/D,EAAQt/D,MACzBq/D,EAAQn/D,MAAQo/D,EAAQp/D,KACxBm/D,EAAQniE,QAAUoiE,EAAQpiE,OAC1BmiE,EAAQ9gE,SAAW+gE,EAAQ/gE,MACnC,EASA+4D,EAAQ4F,gBAPc,SAAU/tD,EAAgB4qD,GAC5C,IAAI7/E,EAAYa,OAAOZ,SAASolF,cAAc,OAI9C,OAHIxF,IACA7/E,EAAU+B,UAAY89E,GAC1BzhF,OAAOge,OAAOpc,EAAUmgB,MAAO8U,GACxBj1B,CACX,EA0BAo9E,EAAQmH,6CAxB2C,SAAUrxD,GACzD,GAAe,MAAXA,EAAJ,CAEA,IAAIkD,EAAKlD,EACLlN,EAAM,EACNF,EAAO,EACX,GACIE,GAAOoQ,EAAGkvD,UACVx/D,GAAQsQ,EAAG61B,WACX71B,EAAKA,EAAGmvD,mBACG,MAANnvD,GACT,IAAIovD,EAAY,EACZC,EAAa,EACjBrvD,EAAKlD,EACL,GACIsyD,GAAapvD,EAAGovD,UAChBC,GAAcrvD,EAAGqvD,WACjBrvD,EAAKA,EAAGqpD,oBACG,MAANrpD,GACTpQ,GAAOw/D,EACP1/D,GAAQ2/D,EACR,IAAIhI,EAAKvqD,EAAQmB,wBAAyBrR,EAAQy6D,EAAGz6D,MAAOqB,EAASo5D,EAAGp5D,OACxE,MAAO,CAAE2B,IAAKA,EAAKF,KAAMA,EAAM9C,MAAOA,EAAOqB,OAAQA,EAAQ4B,OAAQD,EAAM3B,EAAQ0B,MAAOD,EAAO9C,EApB7E,CAqBxB,EAoDAo6D,EAAQkH,uBAlDqB,SAAUrrC,EAAUwiC,EAAWC,EAAav+B,EAAS55C,GAC9E,IAGIyiB,EACAF,EAJA4/D,EAAajK,EAAU31D,KAAO21D,EAAUz4D,MAAQ,EAChD2iE,EAAalK,EAAUz1D,IAAMy1D,EAAUp3D,OAAS,EAChDrB,EAAQ04D,EAAY14D,MAAOqB,EAASq3D,EAAYr3D,OAGpD,OAAQ40B,GACJ,IAAK,OACDjzB,EAAM2/D,EAAathE,EAAS,EAC5ByB,EAAO21D,EAAU31D,KAAOq3B,EAAUn6B,EACpB,UAAVzf,IACAyiB,EAAMy1D,EAAUz1D,KAEN,QAAVziB,IACAyiB,EAAMy1D,EAAUx1D,OAAS5B,GAE7B,MACJ,IAAK,SACD2B,EAAMy1D,EAAUx1D,OAASk3B,EACzBr3B,EAAO4/D,EAAa1iE,EAAQ,EACd,UAAVzf,IACAuiB,EAAO21D,EAAU31D,MAEP,QAAVviB,IACAuiB,EAAO21D,EAAU11D,MAAQ/C,GAE7B,MACJ,IAAK,QACDgD,EAAM2/D,EAAathE,EAAS,EAC5ByB,EAAO21D,EAAU11D,MAAQo3B,EACX,UAAV55C,IACAyiB,EAAMy1D,EAAUz1D,KAEN,QAAVziB,IACAyiB,EAAMy1D,EAAUx1D,OAAS5B,GAE7B,MACJ,QACI2B,EAAMy1D,EAAUz1D,IAAM3B,EAAS84B,EAC/Br3B,EAAO4/D,EAAa1iE,EAAQ,EACd,UAAVzf,IACAuiB,EAAO21D,EAAU31D,MAEP,QAAVviB,IACAuiB,EAAO21D,EAAU11D,MAAQ/C,GAIrC,MAAO,CAAEgD,IAAKA,EAAKF,KAAMA,EAAM9C,MAAOA,EAAOqB,OAAQA,EAAQ0B,MAAOD,EAAO9C,EAAOiD,OAAQD,EAAM3B,EACpG,EAeA+4D,EAAQ2G,kBAbgB,SAAUtG,EAAIuC,GAClC,IAAI/mC,EAAWwkC,EAAGxkC,SAAU11C,EAAQk6E,EAAGl6E,MAAOk4E,EAAYgC,EAAGhC,UAAWC,EAAc+B,EAAG/B,YAAaoF,EAAerD,EAAGqD,aAAc3jC,EAAUsgC,EAAGtgC,QAASoiC,EAAa9B,EAAG8B,WACxKj6D,EAAO83D,EAAQkH,uBAAuBrrC,EAAUwiC,EAAWC,EAAav+B,EAAS55C,GAMrF,MAAO,CACH+hB,KAAMA,EACN0+D,kBAPoBzE,IACL,QAAbtmC,GAAsB3zB,EAAKU,IAAM86D,EAAa96D,IAAMg6D,GACpC,SAAb/mC,GAAuB3zB,EAAKQ,KAAOg7D,EAAah7D,KAAOk6D,GAC1C,UAAb/mC,GAAwB3zB,EAAKS,MAAQ+6D,EAAa/6D,MAAQi6D,GAC7C,WAAb/mC,GAAyB3zB,EAAKW,OAAS66D,EAAa76D,OAAS+5D,GAK1E,EAoBA5C,EAAQ+G,qBAlBmB,SAAUzI,EAAaoF,EAAcd,GAC5D,IAAI4F,EAAc9E,EAAa96D,IAAMg6D,EACjC6F,EAAe/E,EAAah7D,KAAOk6D,EACnC8F,EAAgBhF,EAAa/6D,MAAQi6D,EACrC+F,EAAiBjF,EAAa76D,OAAS+5D,EACvCh6D,EAAM01D,EAAY11D,IAAM4/D,EAAcA,EAAclK,EAAY11D,IACpEA,EAAMA,EAAM01D,EAAYr3D,OAAS0hE,EAAiBA,EAAiBrK,EAAYr3D,OAAS2B,EACxF,IAAIF,EAAO41D,EAAY51D,KAAO+/D,EAAeA,EAAenK,EAAY51D,KAExE,MAAO,CACHE,IAAKA,EACLF,KAHJA,EAAOA,EAAO41D,EAAY14D,MAAQ8iE,EAAgBA,EAAgBpK,EAAY14D,MAAQ8C,EAIlF9C,MAAO04D,EAAY14D,MACnBqB,OAAQq3D,EAAYr3D,OACpB0B,MAAOD,EAAO41D,EAAY14D,MAC1BiD,OAAQD,EAAM01D,EAAYr3D,OAElC,C,GCvKI2hE,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB9oF,IAAjB+oF,EACH,OAAOA,EAAa/I,QAGrB,IAAIgJ,EAASJ,EAAyBE,GAAY,CACjDriF,GAAIqiF,EACJG,QAAQ,EACRjJ,QAAS,CAAC,GAUX,OANAkJ,EAAoBJ,GAAUhjF,KAAKkjF,EAAOhJ,QAASgJ,EAAQA,EAAOhJ,QAAS6I,GAG3EG,EAAOC,QAAS,EAGTD,EAAOhJ,OACf,CAGA6I,EAAoBn4E,EAAIw4E,EtB5BpBhrF,EAAW,GACf2qF,EAAoB30E,EAAI,CAACiiB,EAAQgzD,EAAU7jF,EAAI8jF,KAC9C,IAAGD,EAAH,CAMA,IAAIE,EAAex1C,IACnB,IAASnsC,EAAI,EAAGA,EAAIxJ,EAASgD,OAAQwG,IAAK,CAGzC,IAFA,IAAKyhF,EAAU7jF,EAAI8jF,GAAYlrF,EAASwJ,GACpC4hF,GAAY,EACPlrE,EAAI,EAAGA,EAAI+qE,EAASjoF,OAAQkd,MACpB,EAAXgrE,GAAsBC,GAAgBD,IAAapoF,OAAO4G,KAAKihF,EAAoB30E,GAAGq1E,OAAO3nF,GAASinF,EAAoB30E,EAAEtS,GAAKunF,EAAS/qE,MAC9I+qE,EAAS5iE,OAAOnI,IAAK,IAErBkrE,GAAY,EACTF,EAAWC,IAAcA,EAAeD,IAG7C,GAAGE,EAAW,CACbprF,EAASqoB,OAAO7e,IAAK,GACrB,IAAIiK,EAAIrM,SACEtF,IAAN2R,IAAiBwkB,EAASxkB,EAC/B,CACD,CACA,OAAOwkB,CAnBP,CAJCizD,EAAWA,GAAY,EACvB,IAAI,IAAI1hF,EAAIxJ,EAASgD,OAAQwG,EAAI,GAAKxJ,EAASwJ,EAAI,GAAG,GAAK0hF,EAAU1hF,IAAKxJ,EAASwJ,GAAKxJ,EAASwJ,EAAI,GACrGxJ,EAASwJ,GAAK,CAACyhF,EAAU7jF,EAAI8jF,EAqBjB,EuBzBdP,EAAoBl9E,EAAKq9E,IACxB,IAAIl0C,EAASk0C,GAAUA,EAAOQ,WAC7B,IAAOR,EAAiB,QACxB,IAAM,EAEP,OADAH,EAAoBl4E,EAAEmkC,EAAQ,CAAE5qC,EAAG4qC,IAC5BA,CAAM,EtBNV12C,EAAW4C,OAAO2uB,eAAkBlmB,GAASzI,OAAO2uB,eAAelmB,GAASA,GAASA,EAAa,UAQtGo/E,EAAoBv6E,EAAI,SAAS5O,EAAO8jB,GAEvC,GADU,EAAPA,IAAU9jB,EAAQ8f,KAAK9f,IAChB,EAAP8jB,EAAU,OAAO9jB,EACpB,GAAoB,iBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAP8jB,GAAa9jB,EAAM8pF,WAAY,OAAO9pF,EAC1C,GAAW,GAAP8jB,GAAoC,mBAAf9jB,EAAMc,KAAqB,OAAOd,CAC5D,CACA,IAAI+pF,EAAKzoF,OAAOuH,OAAO,MACvBsgF,EAAoBl3E,EAAE83E,GACtB,IAAIC,EAAM,CAAC,EACXvrF,EAAiBA,GAAkB,CAAC,KAAMC,EAAS,CAAC,GAAIA,EAAS,IAAKA,EAASA,IAC/E,IAAI,IAAIy0B,EAAiB,EAAPrP,GAAY9jB,EAAyB,iBAAXmzB,KAAyB10B,EAAewK,QAAQkqB,GAAUA,EAAUz0B,EAASy0B,GACxH7xB,OAAO+hC,oBAAoBlQ,GAASnxB,SAASE,GAAS8nF,EAAI9nF,GAAO,IAAOlC,EAAMkC,KAI/E,OAFA8nF,EAAa,QAAI,IAAM,EACvBb,EAAoBl4E,EAAE84E,EAAIC,GACnBD,CACR,EuBxBAZ,EAAoBl4E,EAAI,CAACqvE,EAAS2J,KACjC,IAAI,IAAI/nF,KAAO+nF,EACXd,EAAoB5nB,EAAE0oB,EAAY/nF,KAASinF,EAAoB5nB,EAAE+e,EAASp+E,IAC5EZ,OAAOmoC,eAAe62C,EAASp+E,EAAK,CAAEojB,YAAY,EAAMX,IAAKslE,EAAW/nF,IAE1E,ECNDinF,EAAoBj3E,EAAI,WACvB,GAA0B,iBAAfg4E,WAAyB,OAAOA,WAC3C,IACC,OAAOpqE,MAAQ,IAAIqqE,SAAS,cAAb,EAChB,CAAE,MAAOl9E,GACR,GAAsB,iBAAXlJ,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBolF,EAAoB5nB,EAAI,CAACx3D,EAAK2iB,IAAUprB,OAAO4E,UAAUyD,eAAevD,KAAK2D,EAAK2iB,GCClFy8D,EAAoBl3E,EAAKquE,IACH,oBAAXvxD,QAA0BA,OAAOC,aAC1C1tB,OAAOmoC,eAAe62C,EAASvxD,OAAOC,YAAa,CAAEhvB,MAAO,WAE7DsB,OAAOmoC,eAAe62C,EAAS,aAAc,CAAEtgF,OAAO,GAAO,ECL9DmpF,EAAoBiB,IAAOd,IAC1BA,EAAOe,MAAQ,GACVf,EAAOxlF,WAAUwlF,EAAOxlF,SAAW,IACjCwlF,GCHRH,EAAoBzqE,EAAI,I,MCKxB,IAAI4rE,EAAkB,CACrB,IAAK,GAaNnB,EAAoB30E,EAAEkK,EAAK6rE,GAA0C,IAA7BD,EAAgBC,GAGxD,IAAIC,EAAuB,CAACC,EAA4BzpF,KACvD,IAGIooF,EAAUmB,GAHTd,EAAUiB,EAAaC,GAAW3pF,EAGhBgH,EAAI,EAC3B,GAAGyhF,EAASryB,MAAMrwD,GAAgC,IAAxBujF,EAAgBvjF,KAAa,CACtD,IAAIqiF,KAAYsB,EACZvB,EAAoB5nB,EAAEmpB,EAAatB,KACrCD,EAAoBn4E,EAAEo4E,GAAYsB,EAAYtB,IAGhD,GAAGuB,EAAS,IAAIl0D,EAASk0D,EAAQxB,EAClC,CAEA,IADGsB,GAA4BA,EAA2BzpF,GACrDgH,EAAIyhF,EAASjoF,OAAQwG,IACzBuiF,EAAUd,EAASzhF,GAChBmhF,EAAoB5nB,EAAE+oB,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOpB,EAAoB30E,EAAEiiB,EAAO,EAGjCm0D,EAAqB5C,KAAsB,gBAAIA,KAAsB,iBAAK,GAC9E4C,EAAmB5oF,QAAQwoF,EAAqBK,KAAK,KAAM,IAC3DD,EAAmBtoF,KAAOkoF,EAAqBK,KAAK,KAAMD,EAAmBtoF,KAAKuoF,KAAKD,G,KC7CvF,IAAIE,EAAsB3B,EAAoB30E,OAAElU,EAAW,CAAC,KAAK,IAAO6oF,EAAoB,SAC5F2B,EAAsB3B,EAAoB30E,EAAEs2E,E","sources":["webpack://c4k/webpack/runtime/chunk loaded","webpack://c4k/webpack/runtime/create fake namespace object","webpack://c4k/./jsx-modules/CostOfCareCalculator/context/CostOfCareCalculatorState.tsx","webpack://c4k/./jsx-modules/CostOfCareCalculator/CocSuburbAutocomplete.tsx","webpack://c4k/./jsx-modules/CostOfCareCalculator/InputComponent.tsx","webpack://c4k/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://c4k/./node_modules/chart.js/dist/chart.esm.js","webpack://c4k/./node_modules/react-chartjs-2/dist/index.js","webpack://c4k/./jsx-modules/CostOfCareCalculator/CountryChartComponent.tsx","webpack://c4k/./jsx-modules/CostOfCareCalculator/SuburbPriceChartComponent.tsx","webpack://c4k/./jsx-modules/CostOfCareCalculator/NearbySuburb.tsx","webpack://c4k/./jsx-modules/CostOfCareCalculator/NearbySuburbsComponent.tsx","webpack://c4k/./jsx-modules/CostOfCareCalculator/ResultsComponent.tsx","webpack://c4k/./jsx-modules/CostOfCareCalculator/CostOfCareCalculator.tsx","webpack://c4k/./node_modules/react-tiny-popover/dist/ArrowContainer.js","webpack://c4k/./node_modules/react-tiny-popover/dist/Popover.js","webpack://c4k/./node_modules/react-tiny-popover/dist/PopoverPortal.js","webpack://c4k/./node_modules/react-tiny-popover/dist/useArrowContainer.js","webpack://c4k/./node_modules/react-tiny-popover/dist/useElementRef.js","webpack://c4k/./node_modules/react-tiny-popover/dist/useMemoizedArray.js","webpack://c4k/./node_modules/react-tiny-popover/dist/usePopover.js","webpack://c4k/./node_modules/react-tiny-popover/dist/util.js","webpack://c4k/webpack/bootstrap","webpack://c4k/webpack/runtime/compat get default export","webpack://c4k/webpack/runtime/define property getters","webpack://c4k/webpack/runtime/global","webpack://c4k/webpack/runtime/hasOwnProperty shorthand","webpack://c4k/webpack/runtime/make namespace object","webpack://c4k/webpack/runtime/node module decorator","webpack://c4k/webpack/runtime/runtimeId","webpack://c4k/webpack/runtime/jsonp chunk loading","webpack://c4k/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","import * as React from \"react\";\r\nimport axios from \"axios\";\r\n\r\ntype State = {\r\n\tmodel: modelObject,\r\n\tsuburbId: string,\r\n\tsuburbName: string,\r\n\tsuburbLabel: string,\r\n\tsuburbPostCode: string,\r\n\thasResults: boolean,\r\n\trecommendedCentres: string,\r\n\tloading: boolean,\r\n\tcalculateErrors: string,\r\n\tcalculateSuccess: boolean,\r\n\tsuburbChartData: Array,\r\n\tsuburbMin: number,\r\n\tsuburbMax: number,\r\n\tnearbySuburbData: Array\r\n\tshowSuburbChart: boolean,\r\n};\r\n\r\ntype modelObject = {\r\n\tnationalAverageAmount: number,\r\n\tnationalChartData: Array,\r\n\tnationalMin: number,\r\n\tnationalMax: number,\r\n}\r\n\r\ntype chartDataObject = {\r\n\tchartLabels: Array,\r\n\tchartValues: Array,\r\n\tchartColors: Array,\r\n\taverageItemPosition: number,\r\n}\r\n\r\ntype nearbySuburbObject = {\r\n\taverageFee: averageFeeObject,\r\n\tname: string,\r\n\tpostcode: number,\r\n\tsuburbIdHash: string\r\n}\r\n\r\ntype averageFeeObject = {\r\n\tamount: number,\r\n\tamountWithCurrency: string,\r\n\taverageDailyFeeSpread: {},\r\n\tfeeAreaType: number,\r\n\tmax: number,\r\n\tmin: number,\r\n\tnearBySuburbResults: Array,\r\n\tperDayText: string,\r\n\trawFees: {},\r\n\trawFeesGrouped: Array,\r\n}\r\n\r\ndeclare var c4kCore: any;\r\n\r\nconst initialState: State = {\r\n\tmodel: null,\r\n\tsuburbId: null,\r\n\tsuburbName: null,\r\n\tsuburbLabel: null,\r\n\tsuburbPostCode: null,\r\n\thasResults: false,\r\n\trecommendedCentres: null,\r\n\tloading: false,\r\n\tcalculateErrors: null,\r\n\tcalculateSuccess: false,\r\n\tsuburbChartData: null,\r\n\tsuburbMin: null,\r\n\tsuburbMax: null,\r\n\tnearbySuburbData: null,\r\n\tshowSuburbChart: true,\r\n};\r\n\r\nconst reducer = (state, action) => {\r\n\tconst { type, payload } = action;\r\n\r\n\tswitch (type) {\r\n\t\tcase \"SET_MODEL\":\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tmodel: payload\r\n\t\t\t}\r\n\r\n\t\tcase \"SET_SUBURB\":\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tsuburbId: payload.value,\r\n\t\t\t\tsuburbLabel: payload.label,\r\n\t\t\t\tsuburbPostCode: payload.postcode,\r\n\t\t\t\tsuburbName: payload.suburbName\r\n\t\t\t}\r\n\r\n\t\tcase \"TOGGLE_LOADING\":\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tloading: !state.loading\r\n\t\t\t}\r\n\r\n\t\tcase \"SET_SUBURB_RESULTS\":\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\thasResults: true,\r\n\t\t\t\tsuburbChartData: payload.chartData,\r\n\t\t\t\tsuburbMin: payload.suburbMin,\r\n\t\t\t\tsuburbMax: payload.suburbMax,\r\n\t\t\t\tsuburbAverage: payload.suburbAverage,\r\n\t\t\t\tnearbySuburbData: payload.nearbySuburbData,\r\n\t\t\t}\r\n\r\n\t\tcase \"SET_SHOW_SUBURB_CHART\":\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tshowSuburbChart: payload\r\n\t\t\t}\r\n\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n};\r\n\r\nconst CostOfCareCalculatorContext = React.createContext(undefined);\r\n\r\nfunction CostOfCareCalculatorProvider(props) {\r\n\tconst calcBaseUrl = \"/costofcarecalculator\"\r\n\r\n\tconst [state, dispatch] = React.useReducer(reducer, initialState);\r\n\r\n\tconst HandleSelectSuburb = (value) => {\r\n\t\tdispatch({ type: \"TOGGLE_LOADING\"})\r\n\t\tdispatch({ type: \"SET_SUBURB\", payload: value })\r\n\t\tGetSuburbData(value)\r\n\t}\r\n\r\n\tconst GetSuburbData = (suburb) => {\r\n\t\tlet url = calcBaseUrl + \"/getchildcarecosts\" + `?postcode=${suburb.postcode}&suburbIdHash=${suburb.value}`\r\n\r\n\t\t// AXIOS REQUEST\r\n\t\taxios.get(url).then((response: any) => {\r\n\r\n\t\t\tlet data = response.data\r\n\t\t\t//console.log('RESP DATA::', response)\r\n\r\n\t\t\tif (response.status == 200 && !!response.data.amount) {\r\n\t\t\t\t\r\n\t\t\t\tlet feeSpread = data.rawFeesGrouped\r\n\t\t\t\tlet maxIndex = Object.entries(feeSpread).length\r\n\r\n\t\t\t\tlet minValue = parseFloat(Object.entries(feeSpread)[0][0])\r\n\t\t\t\tlet maxValue = parseFloat(Object.entries(feeSpread)[maxIndex - 1][0])\r\n\r\n\t\t\t\tlet averageItemIndex = null\r\n\t\t\t\tlet chartLabels = []\r\n\t\t\t\tlet chartValues = []\r\n\t\t\t\tlet chartColors = []\r\n\r\n\t\t\t\t// Loop through all prices in the spread and add them to the relevant bound group\r\n\t\t\t\tObject.entries(feeSpread).forEach(([key, value], index) => {\r\n\t\t\t\t\tlet Key = parseFloat(key)\r\n\r\n\t\t\t\t\tif (averageItemIndex == null && (Math.floor(Key) == Math.floor(data.amount))) {\r\n\t\t\t\t\t\t// If the key amount matches the average and an average chart item has not been set\r\n\t\t\t\t\t\taverageItemIndex = index\r\n\t\t\t\t\t\tchartLabels.push(`$${data.amount.toFixed(2).toString()}`)\r\n\t\t\t\t\t\tchartValues.push(value)\r\n\t\t\t\t\t\tchartColors.push('rgb(233, 24, 124)')\r\n\t\t\t\t\t} else if (averageItemIndex == null && Key > data.amount) {\r\n\t\t\t\t\t\t// If the key amount is more than the average and the average chart item has not been set\r\n\t\t\t\t\t\taverageItemIndex = index\r\n\t\t\t\t\t\tchartLabels.push(`$${data.amount.toFixed(2).toString()}`)\r\n\t\t\t\t\t\tchartValues.push(value)\r\n\t\t\t\t\t\tchartColors.push('rgb(233, 24, 124)')\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t// Create a normal price item\r\n\t\t\t\t\t\tchartLabels.push(`$${Key.toString()}`)\r\n\t\t\t\t\t\tchartValues.push(value)\r\n\t\t\t\t\t\tchartColors.push('rgb(35, 22, 115)')\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Calc percentage of average item index vs length of data, for positioning of average in the chart\r\n\t\t\t\tlet averageItemPosition = (averageItemIndex / (Object.entries(feeSpread).length - 1)) * 100\r\n\r\n\t\t\t\t// Don;t show the chart if there are less than 5 bars\r\n\t\t\t\tif (chartValues.length > 5) {\r\n\t\t\t\t\tdispatch({ type: 'SET_SHOW_SUBURB_CHART', payload: true })\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdispatch({ type: 'SET_SHOW_SUBURB_CHART', payload: false })\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet payload = {\r\n\t\t\t\t\tsuburbAverage: data.amount,\r\n\t\t\t\t\tchartData: {\r\n\t\t\t\t\t\tchartLabels: chartLabels,\r\n\t\t\t\t\t\tchartValues: chartValues,\r\n\t\t\t\t\t\tchartColors: chartColors,\r\n\t\t\t\t\t\taverageItemPosition: averageItemPosition.toFixed(0)\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsuburbMin: minValue,\r\n\t\t\t\t\tsuburbMax: maxValue,\r\n\t\t\t\t\taverageItemIndex: averageItemIndex,\r\n\t\t\t\t\tnearbySuburbData: data.nearBySuburbResults\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdispatch({ type: 'TOGGLE_LOADING' })\r\n\t\t\t\tdispatch({ type: 'SET_CALCULATE_SUCCESS', payload: true })\r\n\t\t\t\tdispatch({ type: \"SET_SUBURB_RESULTS\", payload: payload})\r\n\r\n\t\t\t\tGetRecommendedCentres(suburb.postcode, suburb.label, suburb.value)\r\n\r\n\t\t\t\t// Fire the GA event for submission\r\n\t\t\t\t//TrackSubmitAnalyticsEvent();\r\n\t\t\t} else {\r\n\t\t\t\tdispatch({\r\n\t\t\t\t\ttype: 'SET_CALCULATE_ERROR',\r\n\t\t\t\t\tpayload: {\r\n\t\t\t\t\t\tmessage: data.errors[0]\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\tdispatch({ type: \"TOGGLE_LOADING\" });\r\n\r\n\t\t\t}\r\n\r\n\t\t})\r\n\t\t\t.catch(error => {\r\n\r\n\t\t\t\tlet errorMessage = {\r\n\t\t\t\t\tmessage: \"Something went wrong please try again\"\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdispatch({\r\n\t\t\t\t\ttype: 'SET_CALCULATE_ERROR',\r\n\t\t\t\t\tpayload: errorMessage\r\n\t\t\t\t})\r\n\t\t\t\tdispatch({ type: 'TOGGLE_LOADING' })\r\n\r\n\t\t\t})\r\n\t}\r\n\r\n\tconst GetRecommendedCentres = (postCode, label, suburbId) => {\r\n\t\tlet url = `/recommended/centres?postcode=${postCode}&suburbIdHash=${suburbId}`\r\n\t\t//Do Axios\r\n\t\taxios.get(url).then((response: any) => {\r\n\r\n\t\t\t// Drop the html data into the c4k recommends container\r\n\t\t\tif (!!response.data?.RecommendedCentreHtml && response.data?.RecommendedCentreHtml != \"\") {\r\n\t\t\t\tlet container = document.getElementById('coc-c4k-recommends')\r\n\t\t\t\tcontainer.innerHTML = response.data.RecommendedCentreHtml\r\n\t\t\t\tc4kCore.initImageLazyLoading(container)\r\n\t\t\t\tlet title = document.querySelector('#recommends-title')\r\n\t\t\t\tif (!!title) {\r\n\t\t\t\t\ttitle.innerHTML = `
Centres in ${label} you might be interested in
`\r\n\t\t\t\t}\r\n\t\t\t\tlet viewMoreButton = document.querySelector('#recommends-view-more')\r\n\t\t\t\tif (!!viewMoreButton) {\r\n\t\t\t\t\tviewMoreButton.innerHTML = `
View more results
`\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t})\r\n\t\t\t.catch(error => {\r\n\t\t\t\tconsole.log(error)\r\n\t\t\t})\r\n\t\t// END AXIOS\r\n\t}\r\n\r\n\treturn (\r\n\r\n\t\t/*Must add any function names to the provider value object*/\r\n\t\t/*You can also customise the values ie name = state.name*/\r\n\t\t/*You will use the keys from this object to unpack the values in components*/\r\n\t\t\r\n\t\t\t{props.children}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport { CostOfCareCalculatorContext, CostOfCareCalculatorProvider };","import * as React from \"react\";\r\nimport AsyncSelect from 'react-select/async';\r\nimport axios from \"axios\";\r\nimport { CostOfCareCalculatorContext } from \"./context/CostOfCareCalculatorState\";\r\n\r\ntype suburbObject = {\r\n value: string,\r\n label: string,\r\n postcode: string,\r\n suburbName: string\r\n}\r\n\r\nconst url = (window as any).c4k.urls.locationAutocomplete\r\n\r\nexport const CocSuburbAutocomplete = () => {\r\n\r\n const { state, HandleSelectSuburb } = React.useContext(CostOfCareCalculatorContext);\r\n\r\n // Filter logic\r\n const GetSuggestions = (value) => {\r\n const inputValue = value.trim().toLowerCase();\r\n\r\n let queryUrl = url + \"?term=\" + inputValue;\r\n\r\n if (inputValue.length > 2) {\r\n\r\n return new Promise>((resolve, reject) => {\r\n axios.get(queryUrl).then((response: any) => {\r\n\r\n // Format to an array that matches the value label structure\r\n let results = response.data.map(suburb => {\r\n return {\r\n value: suburb.key,\r\n label: suburb.label,\r\n postcode: suburb.postcode,\r\n suburbName: suburb.suburbName\r\n }\r\n })\r\n resolve(results)\r\n })\r\n .catch(error => {\r\n console.log('Suburb search error', error)\r\n })\r\n })\r\n }\r\n };\r\n\r\n return (\r\n GetSuggestions(option)}\r\n onChange={(value) => HandleSelectSuburb(value)}\r\n className=\"h-10\"\r\n placeholder=\"Please enter a postcode or suburb\"\r\n value={!!state.suburbLabel ? { label: state.suburbLabel, value: state.suburbId } : null}\r\n />\r\n );\r\n}","import * as React from \"react\";\r\nimport { CostOfCareCalculatorContext } from \"./context/CostOfCareCalculatorState\";\r\nimport { CocSuburbAutocomplete } from \"./CocSuburbAutocomplete\";\r\n\r\nexport const InputComponent = () => {\r\n\r\n const { state } = React.useContext(CostOfCareCalculatorContext)\r\n\r\n let average = state.model?.nationalAverageAmount % Math.floor(state.model?.nationalAverageAmount) > 0 ? state.model?.nationalAverageAmount.toFixed(2) : state.model?.nationalAverageAmount\r\n\r\n return (\r\n \r\n
\r\n
\r\n How much could my child care cost?\r\n
\r\n\r\n {/*Post Code Input*/}\r\n
\r\n
\r\n
LOCATION
\r\n {state.loading &&\r\n
\r\n \"spinner\"Calculating...\r\n
\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n {/*National Daily Average*/}\r\n {!state.hasResults &&\r\n
\r\n
NATIONAL DAILY AVERAGE
\r\n
${average}
\r\n
\r\n Before subsidies\r\n
\r\n
\r\n }\r\n \r\n
\r\n
\r\n );\r\n}","/*!\n * Chart.js v3.7.0\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n const idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n let pos = 0;\n let idx = indexOfDotOrLength(key, pos);\n while (obj && idx > pos) {\n obj = obj[key.substr(pos, idx - pos)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n return obj;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\nconst map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = '0123456789ABCDEF';\nconst h1 = (b) => hex[b & 0xF];\nconst h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF));\nfunction isShort(v) {\n\treturn eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\nfunction hexParse(str) {\n\tvar len = str.length;\n\tvar ret;\n\tif (str[0] === '#') {\n\t\tif (len === 4 || len === 5) {\n\t\t\tret = {\n\t\t\t\tr: 255 & map[str[1]] * 17,\n\t\t\t\tg: 255 & map[str[2]] * 17,\n\t\t\t\tb: 255 & map[str[3]] * 17,\n\t\t\t\ta: len === 5 ? map[str[4]] * 17 : 255\n\t\t\t};\n\t\t} else if (len === 7 || len === 9) {\n\t\t\tret = {\n\t\t\t\tr: map[str[1]] << 4 | map[str[2]],\n\t\t\t\tg: map[str[3]] << 4 | map[str[4]],\n\t\t\t\tb: map[str[5]] << 4 | map[str[6]],\n\t\t\t\ta: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n\t\t\t};\n\t\t}\n\t}\n\treturn ret;\n}\nfunction hexString(v) {\n\tvar f = isShort(v) ? h1 : h2;\n\treturn v\n\t\t? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '')\n\t\t: v;\n}\nfunction round(v) {\n\treturn v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n\treturn lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n\treturn lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n\treturn lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n\treturn lim(round(v * 100), 0, 100);\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n\tconst m = RGB_RE.exec(str);\n\tlet a = 255;\n\tlet r, g, b;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[7] !== r) {\n\t\tconst v = +m[7];\n\t\ta = 255 & (m[8] ? p2b(v) : v * 255);\n\t}\n\tr = +m[1];\n\tg = +m[3];\n\tb = +m[5];\n\tr = 255 & (m[2] ? p2b(r) : r);\n\tg = 255 & (m[4] ? p2b(g) : g);\n\tb = 255 & (m[6] ? p2b(b) : b);\n\treturn {\n\t\tr: r,\n\t\tg: g,\n\t\tb: b,\n\t\ta: a\n\t};\n}\nfunction rgbString(v) {\n\treturn v && (\n\t\tv.a < 255\n\t\t\t? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n\t\t\t: `rgb(${v.r}, ${v.g}, ${v.b})`\n\t);\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\treturn [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n\tconst f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n\tconst rgb = hsl2rgbn(h, 1, 0.5);\n\tlet i;\n\tif (w + b > 1) {\n\t\ti = 1 / (w + b);\n\t\tw *= i;\n\t\tb *= i;\n\t}\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] *= 1 - w - b;\n\t\trgb[i] += w;\n\t}\n\treturn rgb;\n}\nfunction rgb2hsl(v) {\n\tconst range = 255;\n\tconst r = v.r / range;\n\tconst g = v.g / range;\n\tconst b = v.b / range;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h, s, d;\n\tif (max !== min) {\n\t\td = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\th = max === r\n\t\t\t? ((g - b) / d) + (g < b ? 6 : 0)\n\t\t\t: max === g\n\t\t\t\t? (b - r) / d + 2\n\t\t\t\t: (r - g) / d + 4;\n\t\th = h * 60 + 0.5;\n\t}\n\treturn [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n\treturn (\n\t\tArray.isArray(a)\n\t\t\t? f(a[0], a[1], a[2])\n\t\t\t: f(a, b, c)\n\t).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n\treturn calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n\treturn calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n\treturn calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n\treturn (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n\tconst m = HUE_RE.exec(str);\n\tlet a = 255;\n\tlet v;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[5] !== v) {\n\t\ta = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n\t}\n\tconst h = hue(+m[2]);\n\tconst p1 = +m[3] / 100;\n\tconst p2 = +m[4] / 100;\n\tif (m[1] === 'hwb') {\n\t\tv = hwb2rgb(h, p1, p2);\n\t} else if (m[1] === 'hsv') {\n\t\tv = hsv2rgb(h, p1, p2);\n\t} else {\n\t\tv = hsl2rgb(h, p1, p2);\n\t}\n\treturn {\n\t\tr: v[0],\n\t\tg: v[1],\n\t\tb: v[2],\n\t\ta: a\n\t};\n}\nfunction rotate(v, deg) {\n\tvar h = rgb2hsl(v);\n\th[0] = hue(h[0] + deg);\n\th = hsl2rgb(h);\n\tv.r = h[0];\n\tv.g = h[1];\n\tv.b = h[2];\n}\nfunction hslString(v) {\n\tif (!v) {\n\t\treturn;\n\t}\n\tconst a = rgb2hsl(v);\n\tconst h = a[0];\n\tconst s = n2p(a[1]);\n\tconst l = n2p(a[2]);\n\treturn v.a < 255\n\t\t? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n\t\t: `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map$1 = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n\tconst unpacked = {};\n\tconst keys = Object.keys(names);\n\tconst tkeys = Object.keys(map$1);\n\tlet i, j, k, ok, nk;\n\tfor (i = 0; i < keys.length; i++) {\n\t\tok = nk = keys[i];\n\t\tfor (j = 0; j < tkeys.length; j++) {\n\t\t\tk = tkeys[j];\n\t\t\tnk = nk.replace(k, map$1[k]);\n\t\t}\n\t\tk = parseInt(names[ok], 16);\n\t\tunpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n\t}\n\treturn unpacked;\n}\nlet names$1;\nfunction nameParse(str) {\n\tif (!names$1) {\n\t\tnames$1 = unpack();\n\t\tnames$1.transparent = [0, 0, 0, 0];\n\t}\n\tconst a = names$1[str.toLowerCase()];\n\treturn a && {\n\t\tr: a[0],\n\t\tg: a[1],\n\t\tb: a[2],\n\t\ta: a.length === 4 ? a[3] : 255\n\t};\n}\nfunction modHSL(v, i, ratio) {\n\tif (v) {\n\t\tlet tmp = rgb2hsl(v);\n\t\ttmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n\t\ttmp = hsl2rgb(tmp);\n\t\tv.r = tmp[0];\n\t\tv.g = tmp[1];\n\t\tv.b = tmp[2];\n\t}\n}\nfunction clone(v, proto) {\n\treturn v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n\tvar v = {r: 0, g: 0, b: 0, a: 255};\n\tif (Array.isArray(input)) {\n\t\tif (input.length >= 3) {\n\t\t\tv = {r: input[0], g: input[1], b: input[2], a: 255};\n\t\t\tif (input.length > 3) {\n\t\t\t\tv.a = n2b(input[3]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = clone(input, {r: 0, g: 0, b: 0, a: 1});\n\t\tv.a = n2b(v.a);\n\t}\n\treturn v;\n}\nfunction functionParse(str) {\n\tif (str.charAt(0) === 'r') {\n\t\treturn rgbParse(str);\n\t}\n\treturn hueParse(str);\n}\nclass Color {\n\tconstructor(input) {\n\t\tif (input instanceof Color) {\n\t\t\treturn input;\n\t\t}\n\t\tconst type = typeof input;\n\t\tlet v;\n\t\tif (type === 'object') {\n\t\t\tv = fromObject(input);\n\t\t} else if (type === 'string') {\n\t\t\tv = hexParse(input) || nameParse(input) || functionParse(input);\n\t\t}\n\t\tthis._rgb = v;\n\t\tthis._valid = !!v;\n\t}\n\tget valid() {\n\t\treturn this._valid;\n\t}\n\tget rgb() {\n\t\tvar v = clone(this._rgb);\n\t\tif (v) {\n\t\t\tv.a = b2n(v.a);\n\t\t}\n\t\treturn v;\n\t}\n\tset rgb(obj) {\n\t\tthis._rgb = fromObject(obj);\n\t}\n\trgbString() {\n\t\treturn this._valid ? rgbString(this._rgb) : this._rgb;\n\t}\n\thexString() {\n\t\treturn this._valid ? hexString(this._rgb) : this._rgb;\n\t}\n\thslString() {\n\t\treturn this._valid ? hslString(this._rgb) : this._rgb;\n\t}\n\tmix(color, weight) {\n\t\tconst me = this;\n\t\tif (color) {\n\t\t\tconst c1 = me.rgb;\n\t\t\tconst c2 = color.rgb;\n\t\t\tlet w2;\n\t\t\tconst p = weight === w2 ? 0.5 : weight;\n\t\t\tconst w = 2 * p - 1;\n\t\t\tconst a = c1.a - c2.a;\n\t\t\tconst w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\tw2 = 1 - w1;\n\t\t\tc1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n\t\t\tc1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n\t\t\tc1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n\t\t\tc1.a = p * c1.a + (1 - p) * c2.a;\n\t\t\tme.rgb = c1;\n\t\t}\n\t\treturn me;\n\t}\n\tclone() {\n\t\treturn new Color(this.rgb);\n\t}\n\talpha(a) {\n\t\tthis._rgb.a = n2b(a);\n\t\treturn this;\n\t}\n\tclearer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 - ratio;\n\t\treturn this;\n\t}\n\tgreyscale() {\n\t\tconst rgb = this._rgb;\n\t\tconst val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n\t\trgb.r = rgb.g = rgb.b = val;\n\t\treturn this;\n\t}\n\topaquer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 + ratio;\n\t\treturn this;\n\t}\n\tnegate() {\n\t\tconst v = this._rgb;\n\t\tv.r = 255 - v.r;\n\t\tv.g = 255 - v.g;\n\t\tv.b = 255 - v.b;\n\t\treturn this;\n\t}\n\tlighten(ratio) {\n\t\tmodHSL(this._rgb, 2, ratio);\n\t\treturn this;\n\t}\n\tdarken(ratio) {\n\t\tmodHSL(this._rgb, 2, -ratio);\n\t\treturn this;\n\t}\n\tsaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, ratio);\n\t\treturn this;\n\t}\n\tdesaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, -ratio);\n\t\treturn this;\n\t}\n\trotate(deg) {\n\t\trotate(this._rgb, deg);\n\t\treturn this;\n\t}\n}\nfunction index_esm(input) {\n\treturn new Color(input);\n}\n\nconst isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern;\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n let type, xOffset, yOffset, size, cornerRadius;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(evt, canvas) {\n const e = evt.native || evt;\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _toLeftRightCenter as $, _rlookupByKey as A, getAngleFromPoint as B, toPadding as C, each as D, getMaximumSize as E, _getParentNode as F, readUsedSize as G, HALF_PI as H, throttled as I, supportsEventListenerOptions as J, _isDomSupported as K, log10 as L, _factorize as M, finiteOrDefault as N, callback as O, PI as P, _addGrace as Q, toDegrees as R, _measureText as S, TAU as T, _int16Range as U, _alignPixel as V, clipArea as W, renderText as X, unclipArea as Y, toFont as Z, _arrayUnique as _, resolve as a, _angleDiff as a$, _alignStartEnd as a0, overrides as a1, merge as a2, _capitalize as a3, descriptors as a4, isFunction as a5, _attachContext as a6, _createResolver as a7, _descriptors as a8, mergeIf as a9, restoreTextDirection as aA, noop as aB, distanceBetweenPoints as aC, _setMinAndMaxByKey as aD, niceNum as aE, almostWhole as aF, almostEquals as aG, _decimalPlaces as aH, _longestText as aI, _filterBetween as aJ, _lookup as aK, getHoverColor as aL, clone$1 as aM, _merger as aN, _mergerIf as aO, _deprecated as aP, toFontString as aQ, splineCurve as aR, splineCurveMonotone as aS, getStyle as aT, fontString as aU, toLineHeight as aV, PITAU as aW, INFINITY as aX, RAD_PER_DEG as aY, QUARTER_PI as aZ, TWO_THIRDS_PI as a_, uid as aa, debounce as ab, retinaScale as ac, clearCanvas as ad, setsEqual as ae, _elementsEqual as af, _isClickEvent as ag, _isBetween as ah, _readValueToProps as ai, _updateBezierControlPoints as aj, _computeSegments as ak, _boundSegments as al, _steppedInterpolation as am, _bezierInterpolation as an, _pointInLine as ao, _steppedLineTo as ap, _bezierCurveTo as aq, drawPoint as ar, addRoundedRectPath as as, toTRBL as at, toTRBLCorners as au, _boundSegment as av, _normalizeAngle as aw, getRtlAdapter as ax, overrideTextDirection as ay, _textX as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, getRelativePosition as y, _isPointInArea as z };\n","/*!\n * Chart.js v3.7.0\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as getAngleFromPoint, C as toPadding, D as each, E as getMaximumSize, F as _getParentNode, G as readUsedSize, I as throttled, J as supportsEventListenerOptions, K as _isDomSupported, L as log10, M as _factorize, N as finiteOrDefault, O as callback, Q as _addGrace, R as toDegrees, S as _measureText, U as _int16Range, V as _alignPixel, W as clipArea, X as renderText, Y as unclipArea, Z as toFont, $ as _toLeftRightCenter, a0 as _alignStartEnd, a1 as overrides, a2 as merge, a3 as _capitalize, a4 as descriptors, a5 as isFunction, a6 as _attachContext, a7 as _createResolver, a8 as _descriptors, a9 as mergeIf, aa as uid, ab as debounce, ac as retinaScale, ad as clearCanvas, ae as setsEqual, af as _elementsEqual, ag as _isClickEvent, ah as _isBetween, ai as _readValueToProps, aj as _updateBezierControlPoints, ak as _computeSegments, al as _boundSegments, am as _steppedInterpolation, an as _bezierInterpolation, ao as _pointInLine, ap as _steppedLineTo, aq as _bezierCurveTo, ar as drawPoint, as as addRoundedRectPath, at as toTRBL, au as toTRBLCorners, av as _boundSegment, aw as _normalizeAngle, ax as getRtlAdapter, ay as overrideTextDirection, az as _textX, aA as restoreTextDirection, aB as noop, aC as distanceBetweenPoints, aD as _setMinAndMaxByKey, aE as niceNum, aF as almostWhole, aG as almostEquals, aH as _decimalPlaces, aI as _longestText, aJ as _filterBetween, aK as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || (elapsed < duration));\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n});\ndefaults.describe('animations', {\n _fallback: 'animation',\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const metasets = iScale.getMatchingVisibleMetas(this._type);\n const stacked = iScale.options.stacked;\n const ilen = metasets.length;\n const stacks = [];\n let i, item;\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n if (!item.controller.options.grouped) {\n continue;\n }\n if (typeof dataIndex !== 'undefined') {\n const val = item.controller.getParsed(dataIndex)[\n item.controller._cachedMeta.vScale.axis\n ];\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n stacks.push(item.stack);\n }\n if (item.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n};\n\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false,\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const dataset = this.getDataset();\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const dataset = this.getDataset();\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const dataset = this.getDataset();\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n return getRelativePosition$1(e, chart);\n}\nfunction evaluateAllVisibleItems(chart, handler) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n let index, data, element;\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n ({index, data} = metasets[i]);\n for (let j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n const items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = _isPointInArea(center, chart.chartArea, chart._minPadding);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n }\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return [];\n }\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition);\n}\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const items = [];\n const axis = options.axis;\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateAllVisibleItems(chart, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n if (options.intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition)\n : getNearestItems(chart, position, axis, false, useFinalPosition);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition) :\n getNearestItems(chart, position, axis, false, useFinalPosition);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'x', intersect: options.intersect}, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'y', intersect: options.intersect}, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition$1(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(this.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = grid.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n if (isHorizontal) {\n x = pixel;\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {textAlign, x};\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n drawBorder() {\n const {chart, ctx, options: {grid}} = this;\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n return plugins;\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n const result = [];\n const context = chart.getContext();\n for (let i = 0; i < plugins.length; i++) {\n const plugin = plugins[i];\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.7.0\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nclass Chart {\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {mode});\n this._layers.sort(compare2Level('z', '_idx'));\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: _isPointInArea(e, this.chartArea, this._minPadding)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n const {options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (meta.type !== 'line') {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\nfunction decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n let target = null;\n let horizontal;\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n return null;\n}\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const target = [];\n const start = options.reverse ? scale.max : scale.min;\n const end = options.reverse ? scale.min : scale.max;\n let i, center, value;\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\nfunction getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return createBoundaryLine(boundary, line);\n}\nfunction createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _clip(ctx, target, clipY) {\n ctx.beginPath();\n target.path(ctx);\n ctx.lineTo(target.last().x, clipY);\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = findSegmentEnd(start, end, points);\n const bounds = getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\nfunction _fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n _fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n _clip(ctx, target, area.bottom);\n }\n _fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction drawfill(ctx, source, area) {\n const target = getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart || config._chart;\n this._chart = this.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n const title = callbacks.title.apply(this, [context]);\n const afterTitle = callbacks.afterTitle.apply(this, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n const footer = callbacks.footer.apply(this, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(this, context));\n labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n labelTextColors.push(scoped.labelTextColor.call(this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n chart.notifyPlugins('afterTooltipDraw', args);\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: plugin_filler,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid} = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(this.getContext(index - 1));\n drawRadiusLine(this, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","import React, { forwardRef, useRef, useEffect } from 'react';\nimport { Chart as Chart$1, LineController, BarController, RadarController, DoughnutController, PolarAreaController, BubbleController, PieController, ScatterController } from 'chart.js';\n\nconst defaultDatasetIdKey = 'label';\nfunction reforwardRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\nfunction setOptions(chart, nextOptions) {\n chart.options = {\n ...nextOptions\n };\n}\nfunction setLabels(currentData, nextLabels) {\n currentData.labels = nextLabels;\n}\nfunction setDatasets(currentData, nextDatasets) {\n let datasetIdKey = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : defaultDatasetIdKey;\n const addedDatasets = [];\n currentData.datasets = nextDatasets.map((nextDataset)=>{\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]\n );\n // There is no original to update, so simply add new one\n if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n return {\n ...nextDataset\n };\n }\n addedDatasets.push(currentDataset);\n Object.assign(currentDataset, nextDataset);\n return currentDataset;\n });\n}\nfunction cloneData(data) {\n let datasetIdKey = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : defaultDatasetIdKey;\n const nextData = {\n labels: [],\n datasets: []\n };\n setLabels(nextData, data.labels);\n setDatasets(nextData, data.datasets, datasetIdKey);\n return nextData;\n}\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getDatasetAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'dataset', {\n intersect: true\n }, false);\n}\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'nearest', {\n intersect: true\n }, false);\n}\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementsAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'index', {\n intersect: true\n }, false);\n}\n\nfunction ChartComponent(param, ref) {\n let { height =150 , width =300 , redraw =false , datasetIdKey , type , data , options , plugins =[] , fallbackContent , ...props } = param;\n const canvasRef = useRef(null);\n const chartRef = useRef();\n const renderChart = ()=>{\n if (!canvasRef.current) return;\n chartRef.current = new Chart$1(canvasRef.current, {\n type,\n data: cloneData(data, datasetIdKey),\n options,\n plugins\n });\n reforwardRef(ref, chartRef.current);\n };\n const destroyChart = ()=>{\n reforwardRef(ref, null);\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n };\n useEffect(()=>{\n if (!redraw && chartRef.current && options) {\n setOptions(chartRef.current, options);\n }\n }, [\n redraw,\n options\n ]);\n useEffect(()=>{\n if (!redraw && chartRef.current) {\n setLabels(chartRef.current.config.data, data.labels);\n }\n }, [\n redraw,\n data.labels\n ]);\n useEffect(()=>{\n if (!redraw && chartRef.current && data.datasets) {\n setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);\n }\n }, [\n redraw,\n data.datasets\n ]);\n useEffect(()=>{\n if (!chartRef.current) return;\n if (redraw) {\n destroyChart();\n setTimeout(renderChart);\n } else {\n chartRef.current.update();\n }\n }, [\n redraw,\n options,\n data.labels,\n data.datasets\n ]);\n useEffect(()=>{\n renderChart();\n return ()=>destroyChart()\n ;\n }, []);\n return(/*#__PURE__*/ React.createElement(\"canvas\", Object.assign({\n ref: canvasRef,\n role: \"img\",\n height: height,\n width: width\n }, props), fallbackContent));\n}\nconst Chart = /*#__PURE__*/ forwardRef(ChartComponent);\n\nfunction createTypedChart(type, registerables) {\n Chart$1.register(registerables);\n return(/*#__PURE__*/ forwardRef((props, ref)=>/*#__PURE__*/ React.createElement(Chart, Object.assign({}, props, {\n ref: ref,\n type: type\n }))\n ));\n}\nconst Line = /* #__PURE__ */ createTypedChart('line', LineController);\nconst Bar = /* #__PURE__ */ createTypedChart('bar', BarController);\nconst Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);\nconst Doughnut = /* #__PURE__ */ createTypedChart('doughnut', DoughnutController);\nconst PolarArea = /* #__PURE__ */ createTypedChart('polarArea', PolarAreaController);\nconst Bubble = /* #__PURE__ */ createTypedChart('bubble', BubbleController);\nconst Pie = /* #__PURE__ */ createTypedChart('pie', PieController);\nconst Scatter = /* #__PURE__ */ createTypedChart('scatter', ScatterController);\n\nexport { Bar, Bubble, Chart, Doughnut, Line, Pie, PolarArea, Radar, Scatter, getDatasetAtEvent, getElementAtEvent, getElementsAtEvent };\n//# sourceMappingURL=index.js.map\n","import * as React from \"react\";\r\nimport { CostOfCareCalculatorContext } from \"./context/CostOfCareCalculatorState\";\r\nimport { Bar } from 'react-chartjs-2';\r\nimport {\r\n Chart as ChartJS,\r\n CategoryScale,\r\n LinearScale,\r\n BarElement,\r\n Tooltip,\r\n} from 'chart.js';\r\n\r\nChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n BarElement,\r\n Tooltip,\r\n);\r\n\r\nexport const CountryChartComponent = () => {\r\n\r\n const { state, dispatch } = React.useContext(CostOfCareCalculatorContext)\r\n\r\n let minValue = state.model?.nationalMin % Math.floor(state.model?.nationalMin) > 0 ? state.model?.nationalMin.toFixed(2) : state.model?.nationalMin\r\n let maxValue = state.model?.nationalMax % Math.floor(state.model?.nationalMax) > 0 ? state.model?.nationalMax.toFixed(2) : state.model?.nationalMax\r\n let average = state.model?.nationalAverageAmount % Math.floor(state.model?.nationalAverageAmount) > 0 ? state.model?.nationalAverageAmount.toFixed(2) : state.model?.nationalAverageAmount\r\n\r\n let options = {\r\n plugins: {\r\n legend: {\r\n display: false,\r\n },\r\n title: {\r\n display: false,\r\n },\r\n },\r\n responsive: true,\r\n scales: {\r\n xAxis: {\r\n display: false,\r\n },\r\n yAxis: {\r\n ticks: {\r\n display: false,\r\n },\r\n display: false,\r\n },\r\n }\r\n }\r\n\r\n let data = {\r\n labels: state.model?.nationalChartData.chartLabels,\r\n datasets: [{\r\n label: '',\r\n data: state.model?.nationalChartData.chartValues,\r\n backgroundColor: state.model?.nationalChartData.chartColors,\r\n }]\r\n }\r\n\r\n return (\r\n \r\n
\r\n
NATIONAL DAILY PRICE SPREAD (before subsidies)
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
${minValue}
\r\n
min
\r\n
\r\n
\r\n
\r\n

${average} National Average

\r\n
\r\n
\r\n
${maxValue}
\r\n
max
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import * as React from \"react\";\r\nimport { CostOfCareCalculatorContext } from \"./context/CostOfCareCalculatorState\";\r\nimport { Bar } from 'react-chartjs-2';\r\n\r\nexport const SuburbPriceChartComponent = () => {\r\n\r\n const { state } = React.useContext(CostOfCareCalculatorContext)\r\n\r\n let minValue = state.suburbMin % Math.floor(state.suburbMin) > 0 ? state.suburbMin.toFixed(2) : state.suburbMin\r\n let maxValue = state.suburbMax % Math.floor(state.suburbMax) > 0 ? state.suburbMax.toFixed(2) : state.suburbMax\r\n let average = state.suburbAverage % Math.floor(state.suburbAverage) > 0 ? state.suburbAverage.toFixed(2) : state.suburbAverage\r\n\r\n const options = {\r\n plugins: {\r\n legend: {\r\n display: false,\r\n },\r\n title: {\r\n display: false,\r\n }\r\n },\r\n responsive: true,\r\n scales: {\r\n xAxis: {\r\n display: false,\r\n },\r\n yAxis: {\r\n ticks: {\r\n display: false,\r\n },\r\n display: false,\r\n },\r\n },\r\n }\r\n\r\n let data = {\r\n labels: state.suburbChartData.chartLabels,\r\n datasets: [{\r\n data: state.suburbChartData.chartValues,\r\n backgroundColor: state.suburbChartData.chartColors,\r\n }],\r\n }\r\n\r\n return (\r\n \r\n
\r\n
{state.suburbName} daily price spread
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
${minValue}
\r\n
min
\r\n
\r\n
\r\n
\r\n

${average} Suburb Average

\r\n
\r\n
\r\n
${maxValue}
\r\n
max
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import * as React from \"react\";\r\nimport { CostOfCareCalculatorContext } from \"./context/CostOfCareCalculatorState\";\r\nimport { Popover, ArrowContainer } from 'react-tiny-popover';\r\n\r\nexport const NearbySuburb = (props) => {\r\n const [isPopoverOpen, setIsPopoverOpen] = React.useState(false)\r\n\r\n const { state, HandleSelectSuburb } = React.useContext(CostOfCareCalculatorContext)\r\n\r\n const { suburb, maxPrice, current, suburbAverage } = props\r\n\r\n React.useEffect(() => {\r\n window.addEventListener('opensuburbpopover', (event: CustomEvent) => {\r\n suburb.Name == event.detail.name ? setIsPopoverOpen(true) : setIsPopoverOpen(false)\r\n });\r\n })\r\n\r\n const OpenPopover = (name) => {\r\n name = name == state.suburbName ? null : name\r\n var evt = new CustomEvent(\"opensuburbpopover\", { detail: { name: name } });\r\n window.dispatchEvent(evt);\r\n \r\n }\r\n\r\n const SelectSuburb = (event, suburb) => {\r\n event.stopPropagation()\r\n\r\n let suburbData = {\r\n value: suburb.SuburbIdHash,\r\n label: `${suburb.Name} (${suburb.Postcode})`,\r\n suburbName: suburb.Name,\r\n postcode: suburb.Postcode,\r\n }\r\n HandleSelectSuburb(suburbData)\r\n }\r\n\r\n return (\r\n \r\n (\r\n setIsPopoverOpen(!isPopoverOpen)}\r\n >\r\n
setIsPopoverOpen(true)} onMouseLeave={() => setIsPopoverOpen(false)} className=\"p-6 bg-white shadow-md rounded-lg\">\r\n
{suburb.Name}
\r\n
\r\n
Min
\r\n
${suburb.AverageFee.min.toFixed(2)}
\r\n
\r\n
\r\n
Max
\r\n
${suburb.AverageFee.max.toFixed(2)}
\r\n
\r\n
\r\n
Average
\r\n
{suburb.AverageFee.amountWithCurrency}
\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n >\r\n
\r\n
OpenPopover(suburb.Name)} onClick={() => OpenPopover(suburb.Name)}>\r\n
${suburbAverage}
\r\n
\r\n
OpenPopover(suburb.Name)} onClick={() => OpenPopover(suburb.Name)}>\r\n {suburb.Name}\r\n
\r\n
\r\n \r\n \r\n );\r\n}","import * as React from \"react\";\r\nimport { NearbySuburb } from \"./NearbySuburb\";\r\nimport { CostOfCareCalculatorContext } from \"./context/CostOfCareCalculatorState\";\r\n\r\nexport const NearbySuburbsComponent = () => {\r\n\r\n const { state, dispatch } = React.useContext(CostOfCareCalculatorContext)\r\n\r\n const maxPrice = state.nearbySuburbData[0].AverageFee.amount\r\n\r\n const ClosePopover = () => {\r\n var evt = new CustomEvent(\"opensuburbpopover\", { detail: { name: null } });\r\n window.dispatchEvent(evt);\r\n }\r\n\r\n return (\r\n \r\n
ClosePopover()}>\r\n
Compared to nearby suburbs
\r\n
\r\n \r\n {state.nearbySuburbData.map((suburb, index) => {\r\n let suburbAverage = suburb.AverageFee.amount % Math.floor(suburb.AverageFee.amount) > 0 ? suburb.AverageFee.amount.toFixed(2) : suburb.AverageFee.amount\r\n\r\n if (suburb.Name == state.suburbName) {\r\n return \r\n } else {\r\n return \r\n }\r\n })}\r\n \r\n
\r\n
\r\n
\r\n );\r\n}","import * as React from \"react\";\r\nimport { CostOfCareCalculatorContext } from \"./context/CostOfCareCalculatorState\";\r\n\r\nimport { SuburbPriceChartComponent } from \"./SuburbPriceChartComponent\";\r\nimport { NearbySuburbsComponent } from \"./NearbySuburbsComponent\";\r\n\r\nexport const ResultsComponent = () => {\r\n\r\n const { state } = React.useContext(CostOfCareCalculatorContext)\r\n\r\n let minValue = state.suburbMin % Math.floor(state.suburbMin) > 0 ? state.suburbMin.toFixed(2) : state.suburbMin\r\n let maxValue = state.suburbMax % Math.floor(state.suburbMax) > 0 ? state.suburbMax.toFixed(2) : state.suburbMax\r\n let average = state.suburbAverage % Math.floor(state.suburbAverage) > 0 ? state.suburbAverage.toFixed(2) : state.suburbAverage\r\n\r\n return (\r\n \r\n
\r\n
\r\n
{state.suburbName.toUpperCase()} DAILY PRICE SPREAD
\r\n
${minValue} to ${maxValue}
\r\n
\r\n Before subsidies\r\n
\r\n
\r\n
\r\n
{state.suburbName.toUpperCase()} DAILY AVERAGE
\r\n
${average}
\r\n
\r\n Before subsidies\r\n
\r\n
\r\n
\r\n\r\n {state.showSuburbChart == true &&\r\n
\r\n \r\n \r\n
\r\n }\r\n\r\n {state.showSuburbChart == false &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n}","import * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\n\r\nimport { CostOfCareCalculatorProvider } from \"./context/CostOfCareCalculatorState\";\r\nimport { CostOfCareCalculatorContext } from \"./context/CostOfCareCalculatorState\";\r\nimport { InputComponent } from \"./InputComponent\";\r\nimport { CountryChartComponent } from \"./CountryChartComponent\";\r\nimport { ResultsComponent } from \"./ResultsComponent\";\r\n\r\n\r\nconst CostOfCareCalculatorApp = (props) => {\r\n const {\r\n state,\r\n dispatch,\r\n } = React.useContext(CostOfCareCalculatorContext)\r\n\r\n const { data } = props\r\n\r\n React.useEffect(() => {\r\n //console.log(data)\r\n\r\n FormatChartData(data.ChildCareCostModel)\r\n }, [])\r\n\r\n const FormatChartData = (costData) => {\r\n\r\n //Format the price spread data\r\n let feeSpread = costData.averageDailyFeeSpread\r\n let maxIndex = Object.entries(feeSpread).length\r\n\r\n let minValue = parseFloat(Object.entries(feeSpread)[0][0])\r\n let maxValue = parseFloat(Object.entries(feeSpread)[maxIndex - 1][0])\r\n //console.log(minValue, maxValue)\r\n\r\n let boundGroup = []\r\n let bound = minValue + 10\r\n\r\n // Start from min value and add incrememnts to create a bound object that will later hold the accumulated values of relevant prices within that bound\r\n do {\r\n let boundObject = {}\r\n boundObject[bound] = 0\r\n\r\n boundGroup.push(boundObject)\r\n bound = bound + 10\r\n\r\n } while (bound < (maxValue + 10));\r\n //console.log(boundGroup)\r\n\r\n let averageIndex = null\r\n // Loop through all prices in the spread and add them to the relevant bound group\r\n Object.entries(feeSpread).forEach(([key, value]) => {\r\n\r\n for (let i = 0; i < boundGroup.length; i++) {\r\n let bgKey = parseFloat(Object.keys(boundGroup[i])[0])\r\n if (averageIndex == null && (bgKey > costData.amount)) {\r\n averageIndex = i\r\n }\r\n // Check if the key of the price spread is below the bound group amount, add it to the boundgroup value\r\n if (parseFloat(key) < bgKey) {\r\n boundGroup[i][bgKey] += value\r\n break\r\n } \r\n }\r\n });\r\n\r\n //console.log(boundGroup, averageIndex)\r\n\r\n let chartLabels = []\r\n let chartValues = []\r\n let chartColors = []\r\n // Loop through bound groups to create chart data arrays\r\n boundGroup.forEach((object, index) => {\r\n let label = Object.keys(object)[0]\r\n let value = Object.values(object)[0]\r\n\r\n // Dont include outlier data ie values below 20??\r\n if (true) {\r\n chartLabels.push(Object.keys(object)[0])\r\n chartValues.push(Object.values(object)[0])\r\n index == averageIndex ? chartColors.push('rgb(233, 24, 124)') : chartColors.push('rgb(35, 22, 115)')\r\n\t\t\t}\r\n })\r\n\r\n maxValue = parseInt(chartLabels[chartLabels.length - 1])\r\n\r\n let nationalAveragePosition = (averageIndex / boundGroup.length) * 100\r\n\r\n let payload = {\r\n nationalAverageAmount: costData.amount,\r\n nationalChartData: {\r\n chartLabels: chartLabels,\r\n chartValues: chartValues,\r\n chartColors: chartColors,\r\n averageItemPosition: nationalAveragePosition.toFixed(0)\r\n },\r\n nationalMin: minValue,\r\n nationalMax: maxValue,\r\n }\r\n dispatch({ type: 'SET_MODEL', payload: payload })\r\n }\r\n\r\n return (\r\n \r\n\r\n
\r\n
\r\n

\r\n Cost of child care\r\n\t\t\t

\r\n {/*\"Info*/}\r\n
\r\n\r\n
\r\n Child care can be expensive depending on where you live. If you’re ineligible for the CCS, you could be paying up to $200 per day for child care.\r\n Our Child care cost calculator can help you decide which suburbs are more affordable for your family while knowing your little ones have been left in good hands.\r\n
\r\n\r\n
\r\n {/*Cost Component*/}\r\n \r\n\r\n {/*Chart Component*/}\r\n {!state.hasResults &&\r\n \r\n }\r\n
\r\n\r\n {(!state.loading && state.hasResults) &&\r\n \r\n }\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n );\r\n}\r\n\r\n(window as any).RenderCostOfCareCalculatorComponent = function (props) {\r\n ReactDOM.render(\r\n \r\n \r\n \r\n , document.getElementById(\"costOfCareCalculatorComponent\"));\r\n}","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ArrowContainer = void 0;\nvar jsx_runtime_1 = require(\"react/jsx-runtime\");\nvar react_1 = require(\"react\");\nvar useArrowContainer_1 = require(\"./useArrowContainer\");\nvar ArrowContainer = function (_a) {\n var childRect = _a.childRect, popoverRect = _a.popoverRect, position = _a.position, arrowColor = _a.arrowColor, arrowSize = _a.arrowSize, arrowClassName = _a.arrowClassName, externalArrowStyle = _a.arrowStyle, className = _a.className, children = _a.children, externalArrowContainerStyle = _a.style;\n var _b = useArrowContainer_1.useArrowContainer({\n childRect: childRect,\n popoverRect: popoverRect,\n position: position,\n arrowColor: arrowColor,\n arrowSize: arrowSize,\n }), arrowContainerStyle = _b.arrowContainerStyle, arrowStyle = _b.arrowStyle;\n var mergedContainerStyle = react_1.useMemo(function () { return (__assign(__assign({}, arrowContainerStyle), externalArrowContainerStyle)); }, [arrowContainerStyle, externalArrowContainerStyle]);\n var mergedArrowStyle = react_1.useMemo(function () { return (__assign(__assign({}, arrowStyle), externalArrowStyle)); }, [arrowStyle, externalArrowStyle]);\n return (jsx_runtime_1.jsxs(\"div\", __assign({ className: className, style: mergedContainerStyle }, { children: [jsx_runtime_1.jsx(\"div\", { style: mergedArrowStyle, className: arrowClassName }, void 0), children] }), void 0));\n};\nexports.ArrowContainer = ArrowContainer;\n//# sourceMappingURL=ArrowContainer.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Popover = exports.usePopover = exports.ArrowContainer = exports.useArrowContainer = void 0;\nvar jsx_runtime_1 = require(\"react/jsx-runtime\");\nvar react_1 = require(\"react\");\nvar PopoverPortal_1 = require(\"./PopoverPortal\");\nvar util_1 = require(\"./util\");\nvar usePopover_1 = require(\"./usePopover\");\nObject.defineProperty(exports, \"usePopover\", { enumerable: true, get: function () { return usePopover_1.usePopover; } });\nvar useMemoizedArray_1 = require(\"./useMemoizedArray\");\nvar useArrowContainer_1 = require(\"./useArrowContainer\");\nObject.defineProperty(exports, \"useArrowContainer\", { enumerable: true, get: function () { return useArrowContainer_1.useArrowContainer; } });\nvar ArrowContainer_1 = require(\"./ArrowContainer\");\nObject.defineProperty(exports, \"ArrowContainer\", { enumerable: true, get: function () { return ArrowContainer_1.ArrowContainer; } });\nvar PopoverInternal = react_1.forwardRef(function (_a, externalRef) {\n var isOpen = _a.isOpen, children = _a.children, content = _a.content, _b = _a.positions, externalPositions = _b === void 0 ? util_1.Constants.DEFAULT_POSITIONS : _b, _c = _a.align, align = _c === void 0 ? util_1.Constants.DEFAULT_ALIGN : _c, _d = _a.padding, padding = _d === void 0 ? 0 : _d, _e = _a.reposition, reposition = _e === void 0 ? true : _e, _f = _a.parentElement, parentElement = _f === void 0 ? window.document.body : _f, _g = _a.boundaryElement, boundaryElement = _g === void 0 ? parentElement : _g, _h = _a.containerClassName, containerClassName = _h === void 0 ? 'react-tiny-popover-container' : _h, containerStyle = _a.containerStyle, contentLocation = _a.contentLocation, _j = _a.boundaryInset, boundaryInset = _j === void 0 ? 0 : _j, onClickOutside = _a.onClickOutside;\n var positions = useMemoizedArray_1.useMemoizedArray(externalPositions);\n // TODO: factor prevs out into a custom prevs hook\n var prevIsOpen = react_1.useRef(false);\n var prevPositions = react_1.useRef();\n var prevContentLocation = react_1.useRef();\n var prevReposition = react_1.useRef(reposition);\n var childRef = react_1.useRef();\n var _k = react_1.useState({\n align: align,\n nudgedLeft: 0,\n nudgedTop: 0,\n position: positions[0],\n padding: padding,\n childRect: util_1.Constants.EMPTY_CLIENT_RECT,\n popoverRect: util_1.Constants.EMPTY_CLIENT_RECT,\n parentRect: util_1.Constants.EMPTY_CLIENT_RECT,\n boundaryRect: util_1.Constants.EMPTY_CLIENT_RECT,\n boundaryInset: boundaryInset,\n }), popoverState = _k[0], setPopoverState = _k[1];\n var onPositionPopover = react_1.useCallback(function (popoverState) { return setPopoverState(popoverState); }, []);\n var _l = usePopover_1.usePopover({\n childRef: childRef,\n containerClassName: containerClassName,\n parentElement: parentElement,\n boundaryElement: boundaryElement,\n contentLocation: contentLocation,\n positions: positions,\n align: align,\n padding: padding,\n boundaryInset: boundaryInset,\n reposition: reposition,\n onPositionPopover: onPositionPopover,\n }), positionPopover = _l.positionPopover, popoverRef = _l.popoverRef, scoutRef = _l.scoutRef;\n react_1.useLayoutEffect(function () {\n var shouldUpdate = true;\n var updatePopover = function () {\n var _a, _b;\n if (isOpen && shouldUpdate) {\n var childRect = (_a = childRef === null || childRef === void 0 ? void 0 : childRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();\n var popoverRect = (_b = popoverRef === null || popoverRef === void 0 ? void 0 : popoverRef.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect();\n if (childRect != null &&\n popoverRect != null &&\n (!util_1.rectsAreEqual(childRect, {\n top: popoverState.childRect.top,\n left: popoverState.childRect.left,\n width: popoverState.childRect.width,\n height: popoverState.childRect.height,\n bottom: popoverState.childRect.top + popoverState.childRect.height,\n right: popoverState.childRect.left + popoverState.childRect.width,\n }) ||\n popoverRect.width !== popoverState.popoverRect.width ||\n popoverRect.height !== popoverState.popoverRect.height ||\n popoverState.padding !== padding ||\n popoverState.align !== align ||\n positions !== prevPositions.current ||\n contentLocation !== prevContentLocation.current ||\n reposition !== prevReposition.current)) {\n positionPopover();\n }\n // TODO: factor prev checks out into the custom prevs hook\n if (positions !== prevPositions.current) {\n prevPositions.current = positions;\n }\n if (contentLocation !== prevContentLocation.current) {\n prevContentLocation.current = contentLocation;\n }\n if (reposition !== prevReposition.current) {\n prevReposition.current = reposition;\n }\n if (shouldUpdate) {\n window.requestAnimationFrame(updatePopover);\n }\n }\n prevIsOpen.current = isOpen;\n };\n window.requestAnimationFrame(updatePopover);\n return function () {\n shouldUpdate = false;\n };\n }, [\n align,\n contentLocation,\n isOpen,\n padding,\n popoverRef,\n popoverState.align,\n popoverState.childRect.height,\n popoverState.childRect.left,\n popoverState.childRect.top,\n popoverState.childRect.width,\n popoverState.padding,\n popoverState.popoverRect.height,\n popoverState.popoverRect.width,\n positionPopover,\n positions,\n reposition,\n ]);\n react_1.useEffect(function () {\n var popoverElement = popoverRef.current;\n Object.assign(popoverElement.style, containerStyle);\n return function () {\n Object.keys(containerStyle !== null && containerStyle !== void 0 ? containerStyle : {}).forEach(function (key) {\n return delete popoverElement.style[key];\n });\n };\n }, [containerStyle, isOpen, popoverRef]);\n var handleOnClickOutside = react_1.useCallback(function (e) {\n var _a, _b;\n if (isOpen &&\n !((_a = popoverRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) &&\n !((_b = childRef.current) === null || _b === void 0 ? void 0 : _b.contains(e.target))) {\n onClickOutside === null || onClickOutside === void 0 ? void 0 : onClickOutside(e);\n }\n }, [isOpen, onClickOutside, popoverRef]);\n var handleWindowResize = react_1.useCallback(function () {\n if (childRef.current) {\n window.requestAnimationFrame(function () { return positionPopover(); });\n }\n }, [positionPopover]);\n react_1.useEffect(function () {\n window.addEventListener('click', handleOnClickOutside);\n window.addEventListener('resize', handleWindowResize);\n return function () {\n window.removeEventListener('click', handleOnClickOutside);\n window.removeEventListener('resize', handleWindowResize);\n };\n }, [handleOnClickOutside, handleWindowResize]);\n var handleRef = react_1.useCallback(function (node) {\n childRef.current = node;\n if (externalRef != null) {\n if (typeof externalRef === 'object') {\n externalRef.current = node;\n }\n else if (typeof externalRef === 'function') {\n externalRef(node);\n }\n }\n }, [externalRef]);\n var renderChild = function () {\n return react_1.cloneElement(children, {\n ref: handleRef,\n });\n };\n var renderPopover = function () {\n if (!isOpen)\n return null;\n return (jsx_runtime_1.jsx(PopoverPortal_1.PopoverPortal, __assign({ element: popoverRef.current, scoutElement: scoutRef.current, container: parentElement }, { children: typeof content === 'function' ? content(popoverState) : content }), void 0));\n };\n return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [renderChild(), renderPopover()] }, void 0));\n});\nexports.Popover = react_1.forwardRef(function (props, ref) {\n if (typeof window === 'undefined')\n return props.children;\n return jsx_runtime_1.jsx(PopoverInternal, __assign({}, props, { ref: ref }), void 0);\n});\n//# sourceMappingURL=Popover.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PopoverPortal = void 0;\nvar react_1 = require(\"react\");\nvar react_dom_1 = require(\"react-dom\");\nvar PopoverPortal = function (_a) {\n var container = _a.container, element = _a.element, scoutElement = _a.scoutElement, children = _a.children;\n react_1.useLayoutEffect(function () {\n container.appendChild(element);\n container.appendChild(scoutElement);\n return function () {\n container.removeChild(element);\n container.removeChild(scoutElement);\n };\n }, [container, element]);\n return react_dom_1.createPortal(children, element);\n};\nexports.PopoverPortal = PopoverPortal;\n//# sourceMappingURL=PopoverPortal.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useArrowContainer = void 0;\nvar react_1 = require(\"react\");\nvar useArrowContainer = function (_a) {\n var childRect = _a.childRect, popoverRect = _a.popoverRect, position = _a.position, arrowSize = _a.arrowSize, arrowColor = _a.arrowColor;\n var arrowContainerStyle = react_1.useMemo(function () {\n return ({\n padding: arrowSize,\n });\n }, [arrowSize]);\n var arrowStyle = react_1.useMemo(function () {\n return (__assign({ position: 'absolute' }, (function () {\n var arrowWidth = arrowSize * 2;\n var top = childRect.top - popoverRect.top + childRect.height / 2 - arrowWidth / 2;\n var left = childRect.left - popoverRect.left + childRect.width / 2 - arrowWidth / 2;\n var lowerBound = arrowSize;\n var leftUpperBound = popoverRect.width - arrowSize;\n var topUpperBound = popoverRect.height - arrowSize;\n left = left < lowerBound ? lowerBound : left;\n left = left + arrowWidth > leftUpperBound ? leftUpperBound - arrowWidth : left;\n top = top < lowerBound ? lowerBound : top;\n top = top + arrowWidth > topUpperBound ? topUpperBound - arrowWidth : top;\n top = Number.isNaN(top) ? 0 : top;\n left = Number.isNaN(left) ? 0 : left;\n switch (position) {\n case 'right':\n return {\n borderTop: arrowSize + \"px solid transparent\",\n borderBottom: arrowSize + \"px solid transparent\",\n borderRight: arrowSize + \"px solid \" + arrowColor,\n left: 0,\n top: top,\n };\n case 'left':\n return {\n borderTop: arrowSize + \"px solid transparent\",\n borderBottom: arrowSize + \"px solid transparent\",\n borderLeft: arrowSize + \"px solid \" + arrowColor,\n right: 0,\n top: top,\n };\n case 'bottom':\n return {\n borderLeft: arrowSize + \"px solid transparent\",\n borderRight: arrowSize + \"px solid transparent\",\n borderBottom: arrowSize + \"px solid \" + arrowColor,\n top: 0,\n left: left,\n };\n case 'top':\n return {\n borderLeft: arrowSize + \"px solid transparent\",\n borderRight: arrowSize + \"px solid transparent\",\n borderTop: arrowSize + \"px solid \" + arrowColor,\n bottom: 0,\n left: left,\n };\n default:\n return {\n display: 'hidden',\n };\n }\n })()));\n }, [\n arrowColor,\n arrowSize,\n childRect.height,\n childRect.left,\n childRect.top,\n childRect.width,\n popoverRect.height,\n popoverRect.left,\n popoverRect.top,\n popoverRect.width,\n position,\n ]);\n return {\n arrowContainerStyle: arrowContainerStyle,\n arrowStyle: arrowStyle,\n };\n};\nexports.useArrowContainer = useArrowContainer;\n//# sourceMappingURL=useArrowContainer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useElementRef = void 0;\nvar react_1 = require(\"react\");\nvar util_1 = require(\"./util\");\nvar useElementRef = function (containerClassName, containerStyle) {\n var element = react_1.useMemo(function () { return util_1.createContainer(containerStyle, containerClassName); }, [containerClassName, containerStyle]);\n return react_1.useRef(element);\n};\nexports.useElementRef = useElementRef;\n//# sourceMappingURL=useElementRef.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useMemoizedArray = void 0;\nvar react_1 = require(\"react\");\nvar useMemoizedArray = function (externalArray) {\n var prevArrayRef = react_1.useRef(externalArray);\n var array = react_1.useMemo(function () {\n if (prevArrayRef.current === externalArray)\n return prevArrayRef.current;\n if (prevArrayRef.current.length !== externalArray.length) {\n prevArrayRef.current = externalArray;\n return externalArray;\n }\n for (var i = 0; i < externalArray.length; i += 1) {\n if (externalArray[i] !== prevArrayRef.current[i]) {\n prevArrayRef.current = externalArray;\n return externalArray;\n }\n }\n return prevArrayRef.current;\n }, [externalArray]);\n return array;\n};\nexports.useMemoizedArray = useMemoizedArray;\n//# sourceMappingURL=useMemoizedArray.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.usePopover = void 0;\nvar react_1 = require(\"react\");\nvar util_1 = require(\"./util\");\nvar useElementRef_1 = require(\"./useElementRef\");\nvar usePopover = function (_a) {\n var childRef = _a.childRef, positions = _a.positions, containerClassName = _a.containerClassName, parentElement = _a.parentElement, contentLocation = _a.contentLocation, align = _a.align, padding = _a.padding, reposition = _a.reposition, boundaryInset = _a.boundaryInset, boundaryElement = _a.boundaryElement, onPositionPopover = _a.onPositionPopover;\n var popoverRef = useElementRef_1.useElementRef(containerClassName, {\n position: 'fixed',\n overflow: 'visible',\n top: '0px',\n left: '0px',\n });\n var scoutRef = useElementRef_1.useElementRef('react-tiny-popover-scout', {\n position: 'fixed',\n top: '0px',\n left: '0px',\n width: '0px',\n height: '0px',\n visibility: 'hidden',\n });\n var positionPopover = react_1.useCallback(function (_a) {\n var _b, _c;\n var _d = _a === void 0 ? {} : _a, _e = _d.positionIndex, positionIndex = _e === void 0 ? 0 : _e, _f = _d.parentRect, parentRect = _f === void 0 ? parentElement.getBoundingClientRect() : _f, _g = _d.childRect, childRect = _g === void 0 ? (_b = childRef === null || childRef === void 0 ? void 0 : childRef.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect() : _g, _h = _d.scoutRect, scoutRect = _h === void 0 ? (_c = scoutRef === null || scoutRef === void 0 ? void 0 : scoutRef.current) === null || _c === void 0 ? void 0 : _c.getBoundingClientRect() : _h, _j = _d.popoverRect, popoverRect = _j === void 0 ? popoverRef.current.getBoundingClientRect() : _j, _k = _d.boundaryRect, boundaryRect = _k === void 0 ? boundaryElement === parentElement\n ? parentRect\n : boundaryElement.getBoundingClientRect() : _k;\n if (!childRect || !parentRect) {\n return;\n }\n if (contentLocation) {\n var _l = typeof contentLocation === 'function'\n ? contentLocation({\n childRect: childRect,\n popoverRect: popoverRect,\n parentRect: parentRect,\n boundaryRect: boundaryRect,\n padding: padding,\n nudgedTop: 0,\n nudgedLeft: 0,\n boundaryInset: boundaryInset,\n })\n : contentLocation, inputTop = _l.top, inputLeft = _l.left;\n var left_1 = parentRect.left + inputLeft;\n var top_1 = parentRect.top + inputTop;\n popoverRef.current.style.transform = \"translate(\" + (left_1 - scoutRect.left) + \"px, \" + (top_1 - scoutRect.top) + \"px)\";\n onPositionPopover({\n childRect: childRect,\n popoverRect: popoverRect,\n parentRect: parentRect,\n boundaryRect: boundaryRect,\n padding: padding,\n nudgedTop: 0,\n nudgedLeft: 0,\n boundaryInset: boundaryInset,\n });\n return;\n }\n var isExhausted = positionIndex === positions.length;\n var position = isExhausted ? positions[0] : positions[positionIndex];\n var _m = util_1.getNewPopoverRect({\n childRect: childRect,\n popoverRect: popoverRect,\n boundaryRect: boundaryRect,\n position: position,\n align: align,\n padding: padding,\n reposition: reposition,\n }, boundaryInset), rect = _m.rect, boundaryViolation = _m.boundaryViolation;\n if (boundaryViolation && reposition && !isExhausted) {\n positionPopover({\n positionIndex: positionIndex + 1,\n childRect: childRect,\n popoverRect: popoverRect,\n parentRect: parentRect,\n boundaryRect: boundaryRect,\n });\n return;\n }\n var top = rect.top, left = rect.left, width = rect.width, height = rect.height;\n var shouldNudge = reposition && !isExhausted;\n var _o = util_1.getNudgedPopoverRect(rect, boundaryRect, boundaryInset), nudgedLeft = _o.left, nudgedTop = _o.top;\n var finalTop = top;\n var finalLeft = left;\n if (shouldNudge) {\n finalTop = nudgedTop;\n finalLeft = nudgedLeft;\n }\n popoverRef.current.style.transform = \"translate(\" + (finalLeft - scoutRect.left) + \"px, \" + (finalTop - scoutRect.top) + \"px)\";\n onPositionPopover({\n childRect: childRect,\n popoverRect: {\n top: finalTop,\n left: finalLeft,\n width: width,\n height: height,\n right: finalLeft + width,\n bottom: finalTop + height,\n },\n parentRect: parentRect,\n boundaryRect: boundaryRect,\n position: position,\n align: align,\n padding: padding,\n nudgedTop: nudgedTop - top,\n nudgedLeft: nudgedLeft - left,\n boundaryInset: boundaryInset,\n });\n }, [\n parentElement,\n childRef,\n popoverRef,\n boundaryElement,\n contentLocation,\n positions,\n align,\n padding,\n reposition,\n boundaryInset,\n onPositionPopover,\n ]);\n return {\n positionPopover: positionPopover,\n popoverRef: popoverRef,\n scoutRef: scoutRef,\n };\n};\nexports.usePopover = usePopover;\n//# sourceMappingURL=usePopover.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getNudgedPopoverRect = exports.getNewPopoverRect = exports.popoverRectForPosition = exports.getBoundingRectNeglectingPositionalTransform = exports.createContainer = exports.targetPositionHasChanged = exports.popoverStatesAreEqual = exports.rectsAreEqual = exports.arrayUnique = exports.Constants = void 0;\nexports.Constants = {\n POPOVER_CONTAINER_CLASS_NAME: 'react-tiny-popover-container',\n DEFAULT_ALIGN: 'center',\n OBSERVER_THRESHOLDS: Array(1000)\n .fill(null)\n .map(function (_, i) { return i / 1000; })\n .reverse(),\n DEFAULT_POSITIONS: ['top', 'left', 'right', 'bottom'],\n EMPTY_CLIENT_RECT: {\n top: 0,\n left: 0,\n bottom: 0,\n height: 0,\n right: 0,\n width: 0,\n },\n};\nvar arrayUnique = function (array) {\n return array.filter(function (value, index, self) { return self.indexOf(value) === index; });\n};\nexports.arrayUnique = arrayUnique;\nvar rectsAreEqual = function (rectA, rectB) {\n return rectA === rectB ||\n ((rectA === null || rectA === void 0 ? void 0 : rectA.bottom) === (rectB === null || rectB === void 0 ? void 0 : rectB.bottom) &&\n (rectA === null || rectA === void 0 ? void 0 : rectA.height) === (rectB === null || rectB === void 0 ? void 0 : rectB.height) &&\n (rectA === null || rectA === void 0 ? void 0 : rectA.left) === (rectB === null || rectB === void 0 ? void 0 : rectB.left) &&\n (rectA === null || rectA === void 0 ? void 0 : rectA.right) === (rectB === null || rectB === void 0 ? void 0 : rectB.right) &&\n (rectA === null || rectA === void 0 ? void 0 : rectA.top) === (rectB === null || rectB === void 0 ? void 0 : rectB.top) &&\n (rectA === null || rectA === void 0 ? void 0 : rectA.width) === (rectB === null || rectB === void 0 ? void 0 : rectB.width));\n};\nexports.rectsAreEqual = rectsAreEqual;\nvar popoverStatesAreEqual = function (stateA, stateB) {\n return stateA === stateB ||\n ((stateA === null || stateA === void 0 ? void 0 : stateA.align) === (stateB === null || stateB === void 0 ? void 0 : stateB.align) &&\n (stateA === null || stateA === void 0 ? void 0 : stateA.nudgedLeft) === (stateB === null || stateB === void 0 ? void 0 : stateB.nudgedLeft) &&\n (stateA === null || stateA === void 0 ? void 0 : stateA.nudgedTop) === (stateB === null || stateB === void 0 ? void 0 : stateB.nudgedTop) &&\n stateA.padding === stateB.padding &&\n exports.rectsAreEqual(stateA === null || stateA === void 0 ? void 0 : stateA.popoverRect, stateB === null || stateB === void 0 ? void 0 : stateB.popoverRect) &&\n exports.rectsAreEqual(stateA === null || stateA === void 0 ? void 0 : stateA.childRect, stateB === null || stateB === void 0 ? void 0 : stateB.childRect) &&\n (stateA === null || stateA === void 0 ? void 0 : stateA.position) === (stateB === null || stateB === void 0 ? void 0 : stateB.position));\n};\nexports.popoverStatesAreEqual = popoverStatesAreEqual;\nvar targetPositionHasChanged = function (oldRect, newRect) {\n return oldRect === undefined ||\n oldRect.left !== newRect.left ||\n oldRect.top !== newRect.top ||\n oldRect.width !== newRect.width ||\n oldRect.height !== newRect.height;\n};\nexports.targetPositionHasChanged = targetPositionHasChanged;\nvar createContainer = function (containerStyle, containerClassName) {\n var container = window.document.createElement('div');\n if (containerClassName)\n container.className = containerClassName;\n Object.assign(container.style, containerStyle);\n return container;\n};\nexports.createContainer = createContainer;\nvar getBoundingRectNeglectingPositionalTransform = function (element) {\n if (element == null)\n return undefined;\n var el = element;\n var top = 0;\n var left = 0;\n do {\n top += el.offsetTop;\n left += el.offsetLeft;\n el = el.offsetParent;\n } while (el != null);\n var scrollTop = 0;\n var scrollLeft = 0;\n el = element;\n do {\n scrollTop += el.scrollTop;\n scrollLeft += el.scrollLeft;\n el = el.parentElement;\n } while (el != null);\n top -= scrollTop;\n left -= scrollLeft;\n var _a = element.getBoundingClientRect(), width = _a.width, height = _a.height;\n return { top: top, left: left, width: width, height: height, bottom: top + height, right: left + width };\n};\nexports.getBoundingRectNeglectingPositionalTransform = getBoundingRectNeglectingPositionalTransform;\nvar popoverRectForPosition = function (position, childRect, popoverRect, padding, align) {\n var targetMidX = childRect.left + childRect.width / 2;\n var targetMidY = childRect.top + childRect.height / 2;\n var width = popoverRect.width, height = popoverRect.height;\n var top;\n var left;\n switch (position) {\n case 'left':\n top = targetMidY - height / 2;\n left = childRect.left - padding - width;\n if (align === 'start') {\n top = childRect.top;\n }\n if (align === 'end') {\n top = childRect.bottom - height;\n }\n break;\n case 'bottom':\n top = childRect.bottom + padding;\n left = targetMidX - width / 2;\n if (align === 'start') {\n left = childRect.left;\n }\n if (align === 'end') {\n left = childRect.right - width;\n }\n break;\n case 'right':\n top = targetMidY - height / 2;\n left = childRect.right + padding;\n if (align === 'start') {\n top = childRect.top;\n }\n if (align === 'end') {\n top = childRect.bottom - height;\n }\n break;\n default:\n top = childRect.top - height - padding;\n left = targetMidX - width / 2;\n if (align === 'start') {\n left = childRect.left;\n }\n if (align === 'end') {\n left = childRect.right - width;\n }\n break;\n }\n return { top: top, left: left, width: width, height: height, right: left + width, bottom: top + height };\n};\nexports.popoverRectForPosition = popoverRectForPosition;\nvar getNewPopoverRect = function (_a, boundaryInset) {\n var position = _a.position, align = _a.align, childRect = _a.childRect, popoverRect = _a.popoverRect, boundaryRect = _a.boundaryRect, padding = _a.padding, reposition = _a.reposition;\n var rect = exports.popoverRectForPosition(position, childRect, popoverRect, padding, align);\n var boundaryViolation = reposition &&\n ((position === 'top' && rect.top < boundaryRect.top + boundaryInset) ||\n (position === 'left' && rect.left < boundaryRect.left + boundaryInset) ||\n (position === 'right' && rect.right > boundaryRect.right - boundaryInset) ||\n (position === 'bottom' && rect.bottom > boundaryRect.bottom - boundaryInset));\n return {\n rect: rect,\n boundaryViolation: boundaryViolation,\n };\n};\nexports.getNewPopoverRect = getNewPopoverRect;\nvar getNudgedPopoverRect = function (popoverRect, boundaryRect, boundaryInset) {\n var topBoundary = boundaryRect.top + boundaryInset;\n var leftBoundary = boundaryRect.left + boundaryInset;\n var rightBoundary = boundaryRect.right - boundaryInset;\n var bottomBoundary = boundaryRect.bottom - boundaryInset;\n var top = popoverRect.top < topBoundary ? topBoundary : popoverRect.top;\n top = top + popoverRect.height > bottomBoundary ? bottomBoundary - popoverRect.height : top;\n var left = popoverRect.left < leftBoundary ? leftBoundary : popoverRect.left;\n left = left + popoverRect.width > rightBoundary ? rightBoundary - popoverRect.width : left;\n return {\n top: top,\n left: left,\n width: popoverRect.width,\n height: popoverRect.height,\n right: left + popoverRect.width,\n bottom: top + popoverRect.height,\n };\n};\nexports.getNudgedPopoverRect = getNudgedPopoverRect;\n//# sourceMappingURL=util.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 184;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t184: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkc4k\"] = self[\"webpackChunkc4k\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [76], () => (__webpack_require__(70064)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","initialState","model","suburbId","suburbName","suburbLabel","suburbPostCode","hasResults","recommendedCentres","loading","calculateErrors","calculateSuccess","suburbChartData","suburbMin","suburbMax","nearbySuburbData","showSuburbChart","reducer","state","action","type","payload","value","label","postcode","chartData","suburbAverage","CostOfCareCalculatorContext","undefined","CostOfCareCalculatorProvider","props","dispatch","GetSuburbData","suburb","url","calcBaseUrl","then","response","data","status","amount","feeSpread","rawFeesGrouped","maxIndex","Object","entries","length","minValue","parseFloat","maxValue","averageItemIndex","chartLabels","chartValues","chartColors","forEach","index","key","Key","Math","floor","push","toFixed","toString","averageItemPosition","nearBySuburbResults","GetRecommendedCentres","message","errors","catch","error","postCode","RecommendedCentreHtml","container","document","getElementById","innerHTML","c4kCore","initImageLazyLoading","title","querySelector","viewMoreButton","SearchUrl","Provider","HandleSelectSuburb","children","window","c4k","urls","locationAutocomplete","CocSuburbAutocomplete","loadOptions","option","inputValue","trim","toLowerCase","queryUrl","Promise","resolve","reject","results","map","GetSuggestions","onChange","className","placeholder","InputComponent","average","nationalAverageAmount","src","alt","requestAnimFrame","callback","requestAnimationFrame","throttled","fn","thisArg","updateFn","updateArgs","args","Array","prototype","slice","call","ticking","rest","apply","_toLeftRightCenter","align","_alignStartEnd","start","end","noop","uid","id","isNullOrUndef","isArray","substr","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","dimension","endsWith","each","loopable","reverse","i","len","keys","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","source","target","create","klen","k","isValidKey","indexOf","_merger","options","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","indexOfDotOrLength","idx","resolveObjectKey","obj","pos","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","item","has","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","round","almostEquals","niceRange","pow","fraction","isNumber","n","isNaN","x","y","epsilon","abs","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","e","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","atEdge","t","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","m","d","easeInOutBounce","A","B","C","D","E","F","c","f","hex","h1","h2","eq","hexString","v","r","g","isShort","lim","l","h","p2b","n2b","b2n","n2p","RGB_RE","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","calln","hsl2rgb","hue","hueParse","exec","p1","p2","hwb2rgb","hsv2rgb","map$1","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names$1","nameParse","unpacked","tkeys","j","ok","nk","replace","parseInt","unpack","transparent","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","functionParse","rgbParse","Color","constructor","ret","this","_rgb","_valid","valid","rgbString","hslString","mix","color","weight","me","c1","c2","w2","w1","alpha","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","index_esm","isPatternOrGradient","CanvasGradient","CanvasPattern","getHoverColor","overrides","descriptors","getScope$1","node","split","set","root","scope","values","defaults","_descriptors","animation","backgroundColor","borderColor","datasets","devicePixelRatio","context","chart","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","get","override","route","name","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","enumerable","local","_scriptable","startsWith","_indexable","_fallback","_measureText","gc","longest","string","textWidth","measureText","width","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","splice","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","point","area","margin","left","right","top","bottom","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","text","opts","lines","strokeWidth","strokeColor","line","translation","fillStyle","textAlign","textBaseline","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","RegExp","FONT_STYLE","toLineHeight","matches","match","_readValueToProps","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","inputs","info","cacheable","createContext","parentContext","_lookup","table","cmp","mid","hi","lo","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","_arrayUnique","items","Set","add","from","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","Symbol","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","prefix","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","includes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","isScriptable","Error","join","delete","_resolveScriptable","isIndexable","arr","filter","resolver","_resolveArray","_resolveWithContext","allKeys","configurable","scriptable","indexable","_allKeys","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","points","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","d12","s01","s12","fa","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","delta","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","positions","getPositionedStyle","styles","suffix","result","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","box","native","touches","offsetX","offsetY","shadowRoot","useOffsetPos","getBoundingClientRect","clientX","clientY","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","addEventListener","removeEventListener","readUsedSize","el","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","Map","formatNumber","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","count","_boundSegment","segment","bounds","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","animator","_request","_charts","_running","_lastDate","_notify","anims","date","callbacks","numSteps","duration","initial","currentStep","_refresh","_update","Date","now","remaining","running","draw","_active","_total","tick","pop","_getAnims","charts","complete","progress","listen","event","cb","reduce","acc","cur","_duration","stop","cancel","remove","interpolators","boolean","to","factor","c0","number","Animation","cfg","currentValue","_fn","_easing","easing","_start","delay","_loop","_target","_prop","_from","_to","_promises","active","update","elapsed","remain","wait","promises","res","rej","resolved","method","animationOptions","colors","properties","numbers","resize","show","animations","visible","hide","Animations","config","_properties","configure","animatedProps","getOwnPropertyNames","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","all","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","shift","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$context","_syncList","initialize","linkScales","_stacked","addElements","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","defineProperty","base","object","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","parse","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","hidden","createStack","NEGATIVE_INFINITY","otherMin","otherMax","minDefined","maxDefined","getUserBounds","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","disabled","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","updateElement","updateSharedOptions","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","concat","sort","getAllScaleValues","curr","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","super","bars","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","last","grouped","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","_index_","offset","grid","_value_","beginAtZero","getPixelForDecimal","tooltip","innerRadius","outerRadius","getter","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","_dataset","animationsDisabled","pointCount","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","scaleRangesChanged","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","display","circular","pointLabels","_fullLoop","pointPosition","getPointPositionForValue","DateAdapter","formats","timestamp","unit","diff","startOf","weekday","endOf","members","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","optimizedEvaluateItems","position","handler","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","evaluateAllVisibleItems","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","params","wrap","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","padding","autoPadding","addBox","_layers","z","removeBox","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","fromNativeEvent","addListener","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","isConnected","Element","tooltipPosition","hasValue","final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","majorIndices","major","enabled","getMajorIndices","numMajorIndices","first","newTicks","ceil","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","grace","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","init","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","labelPadding","_computeLabelArea","drawBackground","fillRect","findIndex","drawGrid","drawLine","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","titleX","titleY","titleArgs","tz","gz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","routes","propertyParts","sourceName","sourceScope","parts","routeDefaults","registerDefaults","unregister","registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getElement","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","Chart","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","timeout","clearTimeout","setTimeout","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","invalidatePlugins","clipArc","pixelMargin","angleMargin","parseBorderRadius$1","angleDelta","o","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","inner","lineJoin","fullCircles","drawFullCircleBorders","version","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","path","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","interpolate","_interpolate","_getInterpolationMethod","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","addRectPath","WeakMap","positioners","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","String","createTooltipItem","getTooltipSize","body","footer","boxWidth","boxHeight","bodyFont","titleFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","getTitle","beforeTitle","afterTitle","getBeforeBody","getBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","rtlHelper","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","usePointStyle","drawOptions","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","hasTooltipContent","globalAlpha","textDirection","positionChanged","_positionChanged","_ignoreReplayEvents","handleEvent","plugin_tooltip","_element","afterInit","_args","afterDraw","afterEvent","labelCount","findOrAddLabel","addedLabels","unshift","addIfString","lastIndexOf","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","getTickLimit","stepSize","computeTickLimit","LinearScale","isMajor","tickVal","LogarithmicScale","_zero","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","fitWithPointLabels","_padding","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","updateLimits","setCenterPoint","_pointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","hLimits","vLimits","pathRadiusLine","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","time","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","defaultDatasetIdKey","reforwardRef","ref","setLabels","currentData","nextLabels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","nextDataset","currentDataset","find","cloneData","nextData","ChartComponent","param","redraw","fallbackContent","canvasRef","useRef","chartRef","renderChart","destroyChart","useEffect","nextOptions","role","forwardRef","createTypedChart","registerables","Bar","CountryChartComponent","nationalMin","nationalMax","nationalChartData","xAxis","yAxis","SuburbPriceChartComponent","NearbySuburb","isPopoverOpen","setIsPopoverOpen","maxPrice","Name","detail","OpenPopover","CustomEvent","dispatchEvent","Popover","isOpen","content","childRect","popoverRect","onMouseOver","onMouseLeave","AverageFee","amountWithCurrency","stopPropagation","suburbData","SuburbIdHash","Postcode","SelectSuburb","NearbySuburbsComponent","ResultsComponent","CostOfCareCalculatorApp","FormatChartData","ChildCareCostModel","costData","averageDailyFeeSpread","boundGroup","bound","boundObject","averageIndex","bgKey","nationalAveragePosition","boxShadow","RenderCostOfCareCalculatorComponent","__assign","exports","ArrowContainer","jsx_runtime_1","react_1","useArrowContainer_1","_a","arrowColor","arrowSize","arrowClassName","externalArrowStyle","arrowStyle","externalArrowContainerStyle","_b","useArrowContainer","arrowContainerStyle","mergedContainerStyle","useMemo","mergedArrowStyle","jsxs","jsx","usePopover","PopoverPortal_1","util_1","usePopover_1","useMemoizedArray_1","ArrowContainer_1","PopoverInternal","externalRef","externalPositions","Constants","DEFAULT_POSITIONS","_c","DEFAULT_ALIGN","_d","_e","reposition","_f","parentElement","_g","boundaryElement","_h","containerClassName","contentLocation","_j","boundaryInset","onClickOutside","useMemoizedArray","prevIsOpen","prevPositions","prevContentLocation","prevReposition","childRef","_k","useState","nudgedLeft","nudgedTop","EMPTY_CLIENT_RECT","parentRect","boundaryRect","popoverState","setPopoverState","onPositionPopover","useCallback","_l","positionPopover","popoverRef","scoutRef","useLayoutEffect","shouldUpdate","updatePopover","rectsAreEqual","popoverElement","handleOnClickOutside","handleWindowResize","handleRef","Fragment","cloneElement","PopoverPortal","scoutElement","react_dom_1","appendChild","removeChild","createPortal","arrowWidth","lowerBound","leftUpperBound","topUpperBound","borderTop","borderBottom","borderRight","borderLeft","useElementRef","createContainer","externalArray","prevArrayRef","useElementRef_1","overflow","visibility","positionIndex","scoutRect","inputTop","inputLeft","left_1","top_1","transform","isExhausted","_m","getNewPopoverRect","boundaryViolation","shouldNudge","_o","getNudgedPopoverRect","finalTop","finalLeft","popoverRectForPosition","getBoundingRectNeglectingPositionalTransform","targetPositionHasChanged","popoverStatesAreEqual","arrayUnique","POPOVER_CONTAINER_CLASS_NAME","OBSERVER_THRESHOLDS","_","self","rectA","rectB","stateA","stateB","oldRect","newRect","createElement","offsetTop","offsetParent","scrollTop","scrollLeft","targetMidX","targetMidY","topBoundary","leftBoundary","rightBoundary","bottomBoundary","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","loaded","__webpack_modules__","chunkIds","priority","notFulfilled","fulfilled","every","__esModule","ns","def","definition","globalThis","Function","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""}