{"version":3,"sources":["jsdelivr-header.js","/npm/apexcharts@6.8.0/dist/apexcharts.esm.js"],"names":[],"mappings":"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OAAQ,CAAC,MAAM,CACzB,CACA,EACM,QAAS,CACP,OAAQ,GACR,UAAW,EACnB,EACM,MAAO,CACL,WAAY,CACV,MAAO,CACjB,CACA,EACM,KAAM,CACJ,KAAM,QACN,SAAU,CACR,MAAO,QACP,QAAS,GACT,eAAgB,IAChB,YAAa,GACb,UAAW,EACrB,CACA,CACA,CACE,CACA,SAAU,CACR,MAAO,CACL,WAAY,CACV,QAAS,EACjB,EACM,QAAS,CACP,OAAQ,GACR,UAAW,EACnB,EACM,QAAS,CACP,KAAM,EACN,YAAa,EACb,MAAO,CACL,WAAY,CACtB,CACA,CACA,CACE,CACA,SAAU,CACR,MAAO,CACL,MAAO,CACL,QAAS,GAKT,KAAM,CACJ,QAAS,EACnB,CACA,EACM,KAAM,CACJ,QAAS,CACjB,EACM,WAAY,CACV,MAAO,CACL,OAAQ,CAAC,MAAM,CACzB,CACA,EACM,OAAQ,CACN,OAAQ,CAAC,MAAM,CACvB,EACM,QAAS,CAKP,aAAc,GACd,OAAQ,CACN,KAAM,EAChB,EACQ,EAAG,CACD,KAAM,EAChB,CACA,EACM,OAAQ,CACN,SAAU,MACV,QAAS,CACP,MAAO,QACjB,CACA,EACM,KAAM,CACJ,QAAS,CACP,MAAO,EACjB,CACA,CACA,CACE,CACA,SAAU,CACR,MAAO,CACL,MAAO,CACL,KAAM,CACJ,QAAS,EACnB,CACA,EACM,WAAY,CACV,MAAO,CACL,SAAU,GACV,WAAY,IACZ,OAAQ,CAAC,MAAM,CACzB,CACA,EACM,OAAQ,CACN,KAAM,GACN,MAAO,EACP,OAAQ,CAAC,MAAM,CACvB,EACM,OAAQ,CACN,KAAM,EACd,EACM,KAAM,CACJ,QAAS,EACT,SAAU,CACR,MAAO,CAAC,EAAG,GAAG,CACxB,CACA,EACM,QAAS,CACP,aAAc,GACd,EAAG,CACD,KAAM,EAChB,CACA,EACM,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,CACjB,CACA,EACM,MAAO,CACL,WAAY,CACV,KAAM,EAChB,EACQ,QAAS,CACP,QAAS,EACnB,CACA,CACA,CACE,CACA,MAAO,CACL,MAAO,CACL,MAAO,CACL,QAAS,CACP,KAAM,EAChB,CACA,EACM,WAAY,CACV,QAAS,EACjB,EACM,OAAQ,CACN,KAAM,GACN,MAAO,CACf,EACM,KAAM,CACJ,QAAS,CACjB,EACM,QAAS,CACP,aAAc,GACd,EAAG,CACD,KAAM,EAChB,CACA,EACM,OAAQ,CACN,KAAM,GACN,SAAU,QAClB,EACM,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CAClB,CACA,CACA,CACE,CACA,UAAW,CACT,MAAO,CACL,MAAO,CACL,QAAS,CACP,KAAM,EAChB,CACA,EACM,WAAY,CACV,MAAO,CACL,OAAQ,CAAC,MAAM,CACzB,EACQ,WAAY,CACV,QAAS,EACnB,CACA,EACM,OAAQ,CACN,OAAQ,CAAC,MAAM,CACvB,EACM,KAAM,CACJ,QAAS,CACjB,EAIM,OAAQ,CACN,SAAU,OAClB,EACM,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CAClB,CACA,CACA,CACE,CACA,KAAM,CACJ,MAAO,CACL,MAAO,CACL,QAAS,CACP,KAAM,EAChB,CACA,EACM,YAAa,CACX,IAAK,CACH,MAAO,CACL,OAAQ,CACN,KAAM,EACpB,CACA,CACA,CACA,EACM,WAAY,CAIV,UAAU,EAAK,CACb,OAAO,EAAI,QAAQ,CAAC,EAAI,GAC1B,EACA,MAAO,CACL,OAAQ,CAAC,MAAM,CACzB,EACQ,WAAY,CACV,QAAS,EACnB,EACQ,WAAY,CACV,QAAS,EACnB,CACA,EACM,OAAQ,CACN,OAAQ,CAAC,MAAM,CACvB,EACM,KAAM,CACJ,QAAS,EACT,SAAU,CACR,MAAO,QACP,MAAO,CAAC,EAAG,GAAG,CACxB,CACA,EACM,QAAS,CACP,MAAO,OACP,gBAAiB,EACzB,EACM,OAAQ,CACN,SAAU,OAClB,EACM,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CAClB,CACA,CACA,CACE,CACA,OAAQ,CACN,MAAO,CACL,MAAO,CACL,QAAS,CACP,KAAM,EAChB,CACA,EACM,WAAY,CAIV,UAAU,EAAK,CACb,OAAO,EAAI,QAAQ,CAAC,EAAI,GAC1B,EACA,MAAO,CACL,OAAQ,CAAC,MAAM,CACzB,EACQ,WAAY,CACV,QAAS,EACnB,EACQ,WAAY,CACV,QAAS,EACnB,CACA,EACM,OAAQ,CACN,OAAQ,CAAC,MAAM,CACvB,EACM,KAAM,CACJ,QAAS,EACT,SAAU,CACR,MAAO,QACP,eAAgB,IAChB,MAAO,CAAC,GAAI,GAAG,EACf,YAAa,EACb,UAAW,CACrB,CACA,EACM,QAAS,CACP,MAAO,OACP,gBAAiB,EACzB,EACM,OAAQ,CACN,SAAU,OAClB,EACM,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CAClB,CACA,CACA,CACE,CACA,WAAY,CACV,MAAO,CACL,MAAO,CACL,QAAS,CACP,KAAM,EAChB,CACA,EACM,WAAY,CAIV,UAAU,EAAK,CACb,OAAO,EAAI,QAAQ,CAAC,EAAI,GAC1B,EACA,QAAS,EACjB,EACM,OAAQ,CACN,KAAM,GACN,MAAO,CACf,EACM,KAAM,CACJ,QAAS,EACjB,EACM,QAAS,CACP,MAAO,OACP,gBAAiB,EACzB,EACM,OAAQ,CACN,SAAU,OAClB,EACM,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CAClB,CACA,CACA,CACE,CACA,OAAQ,CACN,YAAK,KAAK,MAAM,CAAC,EAAE,OAAO,QAAU,KAAK,KAAK,MAAM,CAAC,EAAE,OAAO,QAAU,KAAK,KAAK,MAAM,CAAC,EAAE,OAAO,QAAU,EACrG,CACL,WAAY,CACV,QAAS,GACT,MAAO,CACL,SAAU,MACpB,CACA,EACM,OAAQ,CACN,MAAO,CACf,EACM,QAAS,CACP,KAAM,EACN,YAAa,EACb,cAAe,CACvB,EACM,KAAM,CACJ,QAAS,EACjB,EACM,QAAS,CACP,OAAQ,GACR,UAAW,GACX,aAAc,EACtB,EACM,KAAM,CACJ,KAAM,GACN,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CAClB,CACA,EACM,MAAO,CACL,OAAQ,CACN,UAAY,GAAQ,EACpB,MAAO,CACL,OAAQ,CAAC,SAAS,EAClB,SAAU,MACtB,CACA,EACQ,QAAS,CACP,QAAS,EACnB,EACQ,WAAY,CACV,KAAM,EAChB,CACA,CACA,CACE,CACA,WAAY,CACV,MAAO,CACL,MAAO,CACL,WAAY,CACV,iBAAkB,CAChB,QAAS,GACT,MAAO,GACnB,CACA,EACQ,QAAS,CACP,KAAM,EAChB,CACA,EACM,OAAQ,CAQN,QAAS,MACjB,EACM,KAAM,CACJ,SAAU,CACR,MAAO,OACP,eAAgB,GAChB,cAAe,GACf,KAAM,YACN,YAAa,EACb,UAAW,EACX,MAAO,CAAC,GAAI,GAAI,GAAG,CAC7B,CACA,EACM,OAAQ,CACN,KAAM,GACN,SAAU,OAClB,EACM,QAAS,CACP,QAAS,GACT,gBAAiB,EACzB,EACM,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CAClB,CACA,CACA,CACE,CAQA,eAAe,EAAG,EAAa,EAAgB,EAAQ,EAAW,CAChE,MAAM,EAAI,EAAE,WAAW,cAAc,CAAW,EAAE,CAAc,EAC1D,EAAI,EAAE,WAAW,cAAc,CAAW,EAAE,CAAc,EAC1D,EAAI,EAAE,WAAW,cAAc,CAAW,EAAE,CAAc,EAC1D,EAAI,EAAE,WAAW,cAAc,CAAW,EAAE,CAAc,EAC1D,EAAI,EAAE,WAAW,cAAc,CAAW,EAAE,CAAc,EAC1D,EAEJ,EAAE,OAAO,OAAO,CAAW,EAE7B,OAAI,EAAI,MAAQ,EAAI,OAAS,EACpB;YACD,EAAI,KAAO,EAAI,KAAO,WAAa,EAAc,EAAE,aAAa,EAAE,WAAW,OAAO,CAAW,EAAE,CAAc,CAAC;gBAG/G,yDAAyD,EAAE,OAAO,MAAM,IAAI,UAAU,EAAO,CAAC,CAAC,yBAA2B,EAAI,qBAAqB,EAAO,CAAC,CAAC,yBAA2B,EAAI,iBAAmB,EAAI,QAAQ,EAAO,CAAC,CAAC,yBAA2B,EAAI,gBAAkB,IAAM,QAAQ,EAAO,CAAC,CAAC,yBAA2B,EAAI,qBAAqB,EAAO,CAAC,CAAC,yBAA2B,EAAI,qBAElZ,CAUA,kBAAkB,EAAG,EAAa,EAAgB,CAChD,IAAI,EAAI,EAAI,EACZ,MAAM,GAAQ,EAAK,EAAE,WAAW,gBAAgB,CAAW,IAAM,KAAO,OAAS,EAAG,CAAc,EAC5F,GAAQ,EAAK,EAAE,WAAW,gBAAgB,CAAW,IAAM,KAAO,OAAS,EAAG,CAAc,EAC5F,IAAQ,EAAK,EAAE,WAAW,mBAAmB,CAAW,IAAM,KAAO,OAAS,EAAG,CAAc,IAAM,CAAA,EACrG,EAEJ,EAAE,OAAO,OAAO,CAAW,EAAE,MAAQ,WAAa,EAAc,GAElE,MAAO,yDAAyD,EAAE,OAAO,MAAM,IAAI,iDAAiD,CAAK,uCAAuC,CAAI,8CAA8C,CAAI,uDAAuD,EAAI,MAAM,qBACzS,CACF,CACA,MAAM,GAAO,KACP,GAAU,CAAE,OAAU,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,UAAU,EAAG,YAAe,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAAG,KAAQ,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,UAAU,EAAG,UAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAAG,QAAW,CAAE,YAAe,eAAgB,YAAe,eAAgB,YAAe,eAAgB,KAAQ,OAAQ,UAAa,YAAa,cAAiB,iBAAkB,OAAU,UAAW,QAAW,WAAY,IAAO,UAAW,MAAS,aAAc,QAAW,SAAS,CAAE,EACjrB,GAAK,CACT,KAAA,GACA,QAAA,EACF,EACA,MAAM,EAAQ,CACZ,aAAc,CACZ,KAAK,MAAQ,CACX,KAAM,GACN,WAAY,GACZ,kBAAmB,GACnB,WAAY,OACZ,SAAU,GACV,SAAU,GACV,YAAa,GACb,QAAS,GACT,WAAY,OACZ,SAAU,OACV,eAAgB,GAChB,UAAW,GACX,IAAK,OACL,IAAK,OACL,SAAU,GACV,gBAAiB,OACjB,OAAQ,CACN,KAAM,GACN,eAAgB,GAChB,SAAU,EACV,SAAU,IACV,QAAS,EACT,QAAS,EACT,MAAO,OACP,OAAQ,EACR,QAAS,GACT,MAAO,CACL,OAAQ,CAAA,EACR,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,SAAU,EACpB,EACQ,UAAW,MACnB,EACM,WAAY,CACV,KAAM,GACN,MAAO,UACP,MAAO,EACP,QAAS,EACT,QAAS,CACjB,EACM,UAAW,CACT,KAAM,GACN,MAAO,UACP,MAAO,EACP,QAAS,EACT,QAAS,CACjB,EACM,MAAO,CACL,KAAM,OACN,OAAQ,IACR,QAAS,EACT,QAAS,EACT,MAAO,CACL,MAAO,OACP,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,SAAU,EACpB,CACA,EACM,QAAS,CACP,QAAS,GACT,QAAS,CACjB,EACM,WAAY,CACV,KAAM,GACN,SAAU,QACV,OAAQ,CACN,MAAO,UACP,MAAO,EACP,UAAW,CACrB,CACA,CACA,EACI,KAAK,gBAAkB,CACrB,GAAI,OACJ,EAAG,EACH,EAAG,KACH,WAAY,EACZ,YAAa,OACb,WAAY,OACZ,WAAY,OACZ,MAAO,OACP,OAAQ,CACN,KAAM,EACN,UAAW,OACX,YAAa,EACb,YAAa,OACb,MAAO,SACP,QAAS,EACT,QAAS,EAET,SAAU,EAClB,EACM,MAAO,CACL,YAAa,UACb,YAAa,EACb,aAAc,EACd,KAAM,OACN,WAAY,SACZ,QAAS,EACT,QAAS,EACT,WAAY,OACZ,WAAY,OACZ,MAAO,OACP,MAAO,CACL,WAAY,OACZ,MAAO,OACP,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,SAAU,GACV,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CACpB,CACA,CACA,EACM,UAAW,CAET,IAAK,OACL,SAAU,OACV,QAAS,EACT,QAAS,CACjB,EACM,MAAO,CACL,KAAM,OACN,MAAO,GACP,OAAQ,GACR,QAAS,EACT,QAAS,CACjB,EACM,QAAS,CAGP,QAAS,GAGT,KAAM,OAGN,UAAW,OAEX,MAAO,OACP,QAAS,EACT,QAAS,CACjB,CACA,EACI,KAAK,gBAAkB,CACrB,GAAI,OACJ,EAAG,EACH,GAAI,KACJ,gBAAiB,EACjB,UAAW,UACX,YAAa,UACb,YAAa,EACb,QAAS,GACT,QAAS,EACT,QAAS,EACT,MAAO,OACP,WAAY,EACZ,MAAO,CACL,YAAa,UACb,YAAa,EACb,aAAc,EACd,KAAM,OACN,WAAY,MACZ,SAAU,QACV,QAAS,EACT,QAAS,GACT,WAAY,OACZ,WAAY,OACZ,MAAO,OACP,MAAO,CACL,WAAY,OACZ,MAAO,OACP,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,SAAU,GACV,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CACpB,CACA,CACA,CACA,EACI,KAAK,gBAAkB,CACrB,GAAI,OACJ,EAAG,EACH,GAAI,KACJ,gBAAiB,EACjB,UAAW,UACX,YAAa,UACb,YAAa,EACb,QAAS,GACT,QAAS,EACT,QAAS,EACT,MAAO,CACL,YAAa,UACb,YAAa,EACb,aAAc,EACd,KAAM,OACN,WAAY,SACZ,YAAa,WACb,SAAU,MACV,QAAS,EACT,QAAS,EACT,WAAY,OACZ,WAAY,OACZ,MAAO,OACP,MAAO,CACL,WAAY,OACZ,MAAO,OACP,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,SAAU,GACV,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CACpB,CACA,CACA,CACA,EACI,KAAK,KAAO,CACV,EAAG,EACH,EAAG,EACH,KAAM,GACN,WAAY,QACZ,UAAW,OACX,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,SAAU,0BACV,gBAAiB,cACjB,YAAa,UACb,aAAc,EACd,YAAa,EACb,YAAa,EACb,aAAc,EACd,WAAY,EACZ,cAAe,CACrB,CACE,CACA,MAAO,CACL,MAAO,CACL,YAAa,CACX,MAAO,CAAC,KAAK,eAAe,EAC5B,MAAO,CAAC,KAAK,eAAe,EAC5B,OAAQ,CAAC,KAAK,eAAe,EAC7B,MAAO,CAAA,EACP,OAAQ,CAAA,EACR,OAAQ,CAAA,CAChB,EAKM,QAAS,CAAA,EACT,MAAO,CACL,WAAY,CAWV,QAAS,GACT,MAAO,IAMP,OAAQ,gBACR,iBAAkB,CAMhB,MAAO,IACP,QAAS,EACrB,EACU,iBAAkB,CAGhB,QAAS,GACT,MAAO,IAMP,OAAQ,MACpB,EACU,eAAgB,CAUd,QAAS,GACT,MAAO,GACnB,EAIU,qBAAsB,GAStB,sBAAuB,GACjC,EACQ,WAAY,GACZ,QAAS,CAAC,EAAE,EACZ,cAAe,KAIf,aAAc,CACZ,iBAAkB,CAAC,QAAS,QAAS,QAAS,QAAS,UAAU,CAC3E,EAGQ,QAAS,CACP,QAAS,GACT,SAAU,IACV,WAAY,IACZ,SAAU,EACpB,EAOQ,SAAU,MACV,kBAAmB,IACnB,OAAQ,CACN,OAAQ,OACR,KAAM,MACN,YAAa,MACb,WAAY,KACtB,EACQ,WAAY,CACV,QAAS,GACT,gBAAiB,OACjB,IAAK,EACL,KAAM,EACN,KAAM,EACN,MAAO,OACP,QAAS,EACnB,EACQ,OAAQ,CACN,aAAc,OACd,YAAa,OACb,QAAS,OACT,QAAS,OACT,MAAO,OACP,UAAW,OACX,WAAY,OACZ,gBAAiB,OACjB,YAAa,OACb,YAAa,OACb,UAAW,OACX,mBAAoB,OACpB,oBAAqB,OACrB,oBAAqB,OACrB,WAAY,OACZ,gBAAiB,OACjB,OAAQ,OACR,SAAU,OACV,cAAe,OACf,YAAa,OACb,aAAc,OACd,kBAAmB,OACnB,iBAAkB,OAClB,kBAAmB,OACnB,iBAAkB,OAClB,kBAAmB,OACnB,SAAU,OACV,QAAS,OACT,MAAO,MACjB,EACQ,UAAW,UACX,WAAY,+BACZ,OAAQ,OACR,mBAAoB,GACpB,qBAAsB,GACtB,qBAAsB,GACtB,GAAI,OACJ,MAAO,OACP,MAAO,OAMP,QAAS,OACT,QAAS,EACT,QAAS,EACT,iBAAkB,GAClB,UAAW,CACT,QAAS,GACT,KAAM,IAEN,KAAM,CACJ,MAAO,UACP,QAAS,EACrB,EACU,OAAQ,CACN,MAAO,EACP,MAAO,UACP,QAAS,GACT,UAAW,CACvB,EACU,MAAO,CACL,IAAK,OACL,IAAK,MACjB,EACU,MAAO,CACL,IAAK,OACL,IAAK,MACjB,CACA,EACQ,UAAW,CACT,QAAS,EACnB,EACQ,MAAO,CACL,QAAS,GACT,eAAgB,GAChB,OAAQ,OACR,QAAS,MACnB,EAUQ,KAAM,CACJ,QAAS,GACT,KAAM,YACN,WAAY,GAEZ,GAAI,OAEJ,UAAW,OAEX,OAAQ,OAER,KAAM,OAEN,KAAM,OAEN,MAAO,OAEP,WAAY,MAEtB,EAUQ,IAAK,CACH,QAAS,GAGT,QAAS,GAIT,KAAM,GAGN,WAAY,MACtB,EAMQ,QAAS,CACP,QAAS,GAIT,KAAM,OACN,IAAK,IACL,aAAc,GAMd,OAAQ,CACN,GAAI,OACJ,KAAM,OACN,QAAS,OACT,MAAO,MACnB,EACU,KAAM,GAEN,OAAQ,GAER,QAAS,GAKT,OAAQ,CAAE,EAAG,OAAQ,EAAG,OAAQ,QAAS,MAAM,EAC/C,MAAO,MACjB,EAUQ,YAAa,CACX,QAAS,GACT,MAAO,CAAC,WAAY,QAAS,QAAS,SAAS,EAC/C,OAAQ,CACN,SAAU,OACV,MAAO,OACP,MAAO,OACP,QAAS,MACrB,EACU,SAAU,OAQV,KAAM,CACJ,KAAM,GAEN,gBAAiB,EACjB,MAAO,MAEnB,CACA,EACQ,QAAS,GACT,aAAc,GAEd,UAAW,SASX,UAAW,CACT,QAAS,GACT,UAAW,MACrB,EACQ,QAAS,CACP,KAAM,GACN,QAAS,EACT,QAAS,EACT,MAAO,CACL,SAAU,GACV,UAAW,GACX,KAAM,GACN,OAAQ,GACR,QAAS,GACT,IAAK,GACL,MAAO,GAIP,QAAS,GACT,YAAa,CAAA,CACzB,EACU,OAAQ,CACN,IAAK,CACH,SAAU,OACV,gBAAiB,IACjB,eAAgB,WAChB,YAAa,QACb,kBAAmB,OACnB,eAAgB,MAC9B,EACY,IAAK,CACH,SAAU,MACxB,EACY,IAAK,CACH,SAAU,MACxB,EACY,MAAO,OACP,MAAO,MACnB,EACU,aAAc,MAExB,EACQ,KAAM,OACN,MAAO,OACP,KAAM,CACJ,QAAS,GACT,KAAM,IACN,eAAgB,GAChB,oBAAqB,GAIrB,MAAO,GACP,WAAY,CACV,KAAM,CACJ,MAAO,UACP,QAAS,EACvB,EACY,OAAQ,CACN,MAAO,UACP,QAAS,GACT,MAAO,CACrB,CACA,CACA,EAIQ,IAAK,CACH,QAAS,GACT,SAAU,GACpB,EACQ,cAAe,CACb,QAAS,GACT,YAAa,OACb,cAAe,CACb,QAAS,EACrB,EACU,SAAU,CACR,QAAS,GACT,WAAY,CACV,QAAS,GACT,WAAY,EAC1B,CACA,CACA,EACQ,YAAa,CACX,QAAS,GACT,UAAW,OACX,aAAc,IACd,UAAW,GACrB,CACA,EACM,QAAS,CACP,EAAG,OACH,EAAG,MACX,EACM,YAAa,CACX,KAAM,CACJ,aAAc,GACd,OAAQ,CACN,UAAW,EACX,oBAAqB,OACrB,oBAAqB,MACjC,CACA,EACQ,KAAM,CACJ,OAAQ,QAClB,EACQ,IAAK,CACH,WAAY,GACZ,YAAa,MAEb,UAAW,MAEX,YAAa,GACb,aAAc,EACd,wBAAyB,SAEzB,wBAAyB,OAEzB,gBAAiB,GACjB,kBAAmB,GACnB,wBAAyB,GACzB,WAAY,GACZ,eAAgB,OAChB,SAAU,GACV,WAAY,GACZ,OAAQ,CACN,OAAQ,CAAA,EACR,oBAAqB,CAAA,EACrB,qBAAsB,EACtB,oBAAqB,CACjC,EACU,WAAY,CACV,SAAU,MAEV,SAAU,IACV,sBAAuB,GACvB,YAAa,aACb,MAAO,CACL,QAAS,GACT,UAAW,OACX,QAAS,EACT,QAAS,EACT,MAAO,CACL,MAAO,UACP,SAAU,OACV,WAAY,OACZ,WAAY,GAC5B,CACA,CACA,CACA,EACQ,OAAQ,CACN,SAAU,GACV,gBAAiB,OACjB,gBAAiB,MAC3B,EACQ,QAAS,CAWP,OAAQ,CACN,QAAS,GACT,EAAG,EAEH,EAAG,EAEH,YAAa,GAEb,UAAW,GAEvB,CACA,EACQ,YAAa,CACX,OAAQ,CACN,OAAQ,UACR,SAAU,SACtB,EACU,KAAM,CACJ,aAAc,EAC1B,CACA,EACQ,QAAS,CACP,OAAQ,CACN,MAAO,UACP,MAAO,SACnB,EAIU,OAAQ,CACN,KAAM,GACN,MAAO,SAEP,KAAM,IAEN,OAAQ,GAER,UAAW,IAEX,QAAS,GAGT,UAAW,cACX,YAAa,OACb,YAAa,CAGzB,CACA,EACQ,OAAQ,CAGN,eAAgB,EAIhB,UAAW,aAEX,OAAQ,CACN,KAAM,GACN,MAAO,SAEP,KAAM,IAEN,OAAQ,GAER,kBAAmB,GAEnB,UAAW,IAEX,QAAS,GAIT,UAAW,cACX,YAAa,OACb,YAAa,CAIzB,CACA,EACQ,QAAS,CACP,OAAQ,EACR,aAAc,GACd,eAAgB,GAChB,qBAAsB,GACtB,YAAa,GACb,qBAAsB,GACtB,WAAY,CACV,QAAS,GACT,OAAQ,CAAA,EACR,IAAK,OACL,IAAK,OAIL,eAAgB,CACd,QAAS,GAKT,MAAO,MACP,OAAQ,MACR,UAAW,GAIX,MAAO,SAGP,MAAO,GAEP,WAAY,GAEZ,eAAgB,GAChB,WAAY,CACV,SAAU,OACV,WAAY,OACZ,OAAQ,MACxB,EACc,MAAO,CACL,KAAM,EACN,MAAO,MAEvB,EACc,UAAW,MAEzB,CACA,CACA,EACQ,OAAQ,CAKN,MAAO,YAGP,UAAW,MACrB,EACQ,QAAS,CACP,aAAc,GACd,eAAgB,GAChB,YAAa,GACb,qBAAsB,GACtB,qBAAsB,GACtB,aAAc,EACd,WAAY,CACV,OAAQ,OAEpB,EACU,WAAY,CACV,QAAS,GACT,OAAQ,CAAA,EACR,IAAK,OACL,IAAK,MACjB,EACU,YAAa,CACX,KAAM,GACN,QAAS,EACT,QAAS,EACT,YAAa,OACb,YAAa,EACb,aAAc,EACd,MAAO,CACL,WAAY,qBACZ,MAAO,OACP,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,SAAU,GACV,QAAS,CACP,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CACxB,CACA,CACA,CACA,EACQ,KAAM,CAMJ,OAAQ,UAQR,WAAY,QAEZ,MAAO,SAMP,MAAO,CACL,IAAK,OACL,MAAO,GACP,OAAQ,GACR,KAAM,EAClB,EAGU,KAAM,OAON,QAAS,CACP,KAAM,SAClB,EAeU,KAAM,CACJ,QAAS,GACT,MAAO,OACP,SAAU,SAEV,MAAO,GAEP,YAAa,OAEb,IAAK,OAEL,WAAY,MACxB,EAaU,QAAS,CACP,EAAG,QACH,OAAQ,QAKR,YAAa,aACb,WAAY,EACZ,KAAM,OACN,KAAM,OACN,OAAQ,OAER,WAAY,OACZ,YAAa,EACb,KAAM,OACN,KAAM,OACN,OAAQ,OAER,WAAY,OAEZ,UAAW,IACX,UAAW,OACX,eAAgB,OAChB,UAAW,EACvB,EAIU,YAAa,CACX,QAAS,GAGT,UAAW,OAEX,UAAW,OAEX,MAAO,MACnB,EAEU,QAAS,KAET,aAAc,EAYd,OAAQ,CACN,OAAQ,WACR,UAAW,QACX,MAAO,OACnB,EAUU,IAAK,CACH,WAAY,IACZ,SAAU,GACV,iBAAkB,GAClB,KAAM,MAClB,EAEU,UAAW,EAEX,SAAU,IAGV,YAAa,GACb,cAAe,CACb,KAAM,GAIN,SAAU,MACV,OAAQ,GACR,SAAU,OACV,WAAY,OACZ,WAAY,IAEZ,MAAO,OACP,QAAS,EAET,UAAW,MACvB,EACU,QAAS,CAOP,UAAW,MACvB,CACA,EACQ,UAAW,CACT,aAAc,GACd,WAAY,EACZ,SAAU,IACV,QAAS,EACT,QAAS,EAKT,MAAO,MAIP,IAAK,EACL,IAAK,IAKL,MAAO,CAAA,EACP,WAAY,CAGV,YAAa,MAEb,IAAK,EAGL,qBAAsB,EAClC,EAEU,MAAO,CACL,KAAM,GACN,MAAO,CACL,MAAO,GACP,OAAQ,GACR,MAAO,EACP,MAAO,OAGP,UAAW,SACzB,EACY,MAAO,CACL,MAAO,EAEP,OAAQ,EACR,MAAO,EACP,MAAO,OACP,UAAW,SACzB,EACY,OAAQ,CACN,KAAM,GACN,OAAQ,EACR,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,MAAO,OAEP,UAAU,EAAG,CACX,OAAO,OAAO,CAAC,CACjB,CACd,CACA,EAEU,OAAQ,CACN,MAAO,OAGP,OAAQ,MAER,UAAW,EAEX,SAAU,EAKV,QAAS,EAKT,aAAc,GACd,UAAW,CACT,QAAS,GACT,SAAU,IACV,OAAQ,UACtB,CACA,EACU,OAAQ,CACN,OAAQ,EACR,KAAM,MACN,WAAY,cACZ,MAAO,OACP,WAAY,IACZ,YAAa,IACb,aAAc,EACd,aAAc,EACd,aAAc,GACd,SAAU,QAKV,OAAQ,OACR,YAAa,EACb,gBAAiB,OACjB,WAAY,CACV,QAAS,GACT,IAAK,EACL,KAAM,EACN,KAAM,EACN,MAAO,OACP,QAAS,EACvB,CACA,EACU,MAAO,CACL,KAAM,GACN,WAAY,OACZ,SAAU,OACV,WAAY,UACZ,YAAa,MACb,QAAS,EACT,OAAQ,EAER,WAAY,CACV,QAAS,GACT,IAAK,EACL,KAAM,EACN,KAAM,EACN,MAAO,OACP,QAAS,EACvB,CACA,EACU,WAAY,CACV,KAAM,GACN,KAAM,CACJ,KAAM,GACN,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,MAAO,OACP,QAAS,EAIT,UAAU,EAAK,CACb,OAAO,CACT,CACd,EACY,MAAO,CACL,KAAM,GACN,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,MAAO,OACP,QAAS,GAIT,UAAU,EAAK,CACb,OAAO,EAAM,GACf,CACd,EACY,MAAO,CACL,KAAM,GACN,MAAO,QACP,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,MAAO,OAIP,UAAU,EAAG,CACX,OAKE,EAAE,QAAQ,aAAa,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,EAAI,EAAE,WAAW,OAAO,OAAS,GAErF,CACd,CACA,EACU,UAAW,CACT,QAAS,GACT,QAAS,EACT,QAAS,EACT,gBAAiB,GACjB,WAAY,OACZ,WAAY,IACZ,SAAU,OAIV,UAAU,EAAK,CACb,OAAO,CACT,EACA,QAAS,MACrB,CACA,EACQ,IAAK,CACH,YAAa,EACb,QAAS,EACT,QAAS,EACT,WAAY,EACZ,SAAU,IACV,cAAe,GAKf,aAAc,EAId,QAAS,EACT,WAAY,CAEV,OAAQ,EAER,oBAAqB,GAOrB,SAAU,CACR,KAAM,GAEN,QAAS,EACT,QAAS,EACT,SAAU,OAEV,WAAY,OAEZ,WAAY,OAEZ,MAAO,OASP,UAAW,OACX,UAAW,CACT,KAAM,GACN,MAAO,EACP,MAAO,OAEP,OAAQ,GAER,IAAK,CAErB,CACA,CACA,EACU,MAAO,CACL,KAAM,MACN,WAAY,cACZ,OAAQ,CAEN,KAAM,GACN,KAAM,CACJ,KAAM,GACN,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,MAAO,OACP,QAAS,IAIT,UAAU,EAAK,CACb,OAAO,CACT,CAChB,EACc,MAAO,CACL,KAAM,GACN,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,MAAO,OACP,QAAS,GAIT,UAAU,EAAK,CACb,OAAO,CACT,CAChB,EACc,MAAO,CACL,KAAM,GACN,WAAY,GACZ,MAAO,QACP,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,MAAO,OAIP,UAAU,EAAG,CACX,OAAO,EAAE,QAAQ,aAAa,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,CACzD,CAChB,CACA,CACA,CACA,EACQ,UAAW,CACT,MAAO,CACL,YAAa,EACb,YAAa,SACzB,EACU,OAAQ,CACN,YAAa,EACb,gBAAiB,SAC7B,CACA,EACQ,SAAU,CAIR,QAAS,EACT,QAAS,EACT,WAAY,EACZ,SAAU,IAEV,UAAW,MAGX,aAAc,EACd,QAAS,EAIT,KAAM,SAIN,UAAW,YAGX,KAAM,IAIN,YAAa,GACb,WAAY,CACV,KAAM,GAGN,eAAgB,EAChB,MAAO,CACL,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,OAAQ,MACtB,CACA,CACA,EACQ,MAAO,CACL,KAAM,OACN,QAAS,EACT,QAAS,EACT,SAAU,CAER,YAAa,EACb,aAAc,UACd,gBAAiB,UACjB,KAAM,CACJ,OAAQ,MACtB,CACA,CACA,CACA,EACM,OAAQ,OACR,WAAY,CACV,QAAS,GACT,gBAAiB,OAIjB,UAAU,EAAK,CACb,OAAO,IAAQ,KAAO,EAAM,EAC9B,EACA,WAAY,SACZ,YAAa,GACb,QAAS,EACT,QAAS,EACT,MAAO,CACL,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,OAAQ,MAClB,EACQ,WAAY,CACV,QAAS,GACT,UAAW,OACX,gBAAiB,OACjB,aAAc,EACd,QAAS,EACT,QAAS,GACT,YAAa,EACb,YAAa,OACb,WAAY,CACV,QAAS,GACT,IAAK,EACL,KAAM,EACN,KAAM,EACN,MAAO,OACP,QAAS,EACrB,CACA,EACQ,WAAY,CACV,QAAS,GACT,IAAK,EACL,KAAM,EACN,KAAM,EACN,MAAO,OACP,QAAS,EACnB,EAKQ,QAAS,CACP,QAAS,EACnB,EAKQ,QAAS,CACP,QAAS,EACnB,CACA,EACM,KAAM,CACJ,KAAM,QACN,OAAQ,OAER,QAAS,IACT,SAAU,CACR,MAAO,OACP,KAAM,aACN,eAAgB,GAChB,iBAAkB,OAClB,cAAe,GACf,YAAa,EACb,UAAW,EACX,MAAO,CAAC,EAAG,GAAI,GAAG,EAClB,WAAY,CAAA,CACtB,EACQ,MAAO,CACL,IAAK,CAAA,EACL,MAAO,OAEP,OAAQ,MAElB,EACQ,QAAS,CACP,MAAO,UAEP,MAAO,EACP,OAAQ,EACR,YAAa,CACvB,CACA,EACM,mBAAoB,CAClB,MAAO,EACP,YAAa,GACb,YAAa,OACb,UAAW,CACnB,EACM,KAAM,CACJ,KAAM,GACN,YAAa,UACb,gBAAiB,EACjB,SAAU,OACV,MAAO,CACL,MAAO,CACL,KAAM,EAClB,CACA,EACQ,MAAO,CACL,MAAO,CACL,KAAM,EAClB,CACA,EACQ,IAAK,CACH,OAAQ,OAER,QAAS,EACnB,EACQ,OAAQ,CACN,OAAQ,OAER,QAAS,EACnB,EACQ,QAAS,CACP,IAAK,EACL,MAAO,GACP,OAAQ,EACR,KAAM,EAChB,CACA,EACM,OAAQ,CAAA,EACR,UAAW,CAGT,QAAS,GAGT,OAAQ,CAAA,EACR,WAAY,CACV,KAAM,GACN,SAAU,WAEV,UAAW,MACX,UAAW,MACX,QAAS,EACT,QAAS,CAEnB,EAGQ,UAAW,CACT,QAAS,GAIT,cAAe,GAGf,MAAO,GACjB,CAIA,EACM,OAAQ,CACN,KAAM,GACN,oBAAqB,GACrB,kBAAmB,GACnB,kBAAmB,GACnB,SAAU,GACV,SAAU,SAGV,gBAAiB,SAEjB,aAAc,GACd,SAAU,OACV,WAAY,OACZ,WAAY,IACZ,MAAO,OACP,OAAQ,OACR,UAAW,OACX,sBAAuB,OACvB,QAAS,IACT,QAAS,EACT,kBAAmB,CAAA,EACnB,qBAAsB,GACtB,gCAAiC,WACjC,OAAQ,CACN,OAAQ,OACR,gBAAiB,EAC3B,EACQ,QAAS,CACP,KAAM,EACN,WAAY,OACZ,YAAa,EACb,MAAO,OACP,QAAS,EACT,QAAS,EACT,WAAY,OACZ,QAAS,MACnB,EACQ,WAAY,CACV,WAAY,EACZ,SAAU,CACpB,EACQ,YAAa,CACX,iBAAkB,EAC5B,EACQ,YAAa,CACX,oBAAqB,EAC/B,CACA,EACM,QAAS,CACP,SAAU,CAAA,EACV,KAAM,EACN,OAAQ,OACR,aAAc,OACd,YAAa,EACb,cAAe,GACf,gBAAiB,EACjB,YAAa,EACb,MAAO,SACP,QAAS,EACT,QAAS,EACT,mBAAoB,GACpB,QAAS,OACT,WAAY,OACZ,MAAO,CACL,KAAM,OACN,WAAY,CACtB,CACA,EACM,OAAQ,CACN,KAAM,OACN,MAAO,SACP,QAAS,EACT,QAAS,EACT,MAAO,CACL,MAAO,OACP,SAAU,OACV,WAAY,MACtB,CACA,EACM,WAAY,CAAA,EAEZ,OAAQ,OACR,OAAQ,CACN,MAAO,CACL,OAAQ,CACN,KAAM,UACN,MAAO,GACnB,CACA,EACQ,OAAQ,CACN,iCAAkC,GAClC,OAAQ,CACN,KAAM,SACN,MAAO,GACnB,CACA,CACA,EACM,MAAO,CACL,KAAM,OACN,MAAO,OACP,OAAQ,EACR,QAAS,EACT,QAAS,EACT,SAAU,GACV,MAAO,CACL,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,MAAO,MACjB,CACA,EACM,SAAU,CACR,KAAM,OACN,MAAO,OACP,OAAQ,EACR,QAAS,EACT,QAAS,GACT,SAAU,GACV,MAAO,CACL,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,MAAO,MACjB,CACA,EACM,OAAQ,CACN,KAAM,GACN,MAAO,SAEP,QAAS,OAET,MAAO,EACP,OAAQ,OAER,UAAW,EAEX,KAAM,CACJ,KAAM,QACN,OAAQ,OAER,QAAS,IACT,SAAU,CACR,MAAO,OACP,KAAM,aACN,eAAgB,GAChB,iBAAkB,OAClB,cAAe,GACf,YAAa,EACb,UAAW,EACX,MAAO,CAAC,EAAG,GAAI,GAAG,EAClB,WAAY,CAAA,CACxB,CACA,CACA,EACM,QAAS,CACP,QAAS,GACT,gBAAiB,OACjB,OAAQ,GACR,gBAAiB,GACjB,aAAc,GAEd,UAAW,GAEX,aAAc,GACd,MAAO,GACP,OAAQ,OACR,gBAAiB,GACjB,MAAO,QACP,SAAU,GACV,MAAO,CACL,SAAU,OACV,WAAY,OACZ,WAAY,MACtB,EACQ,eAAgB,CACd,oBAAqB,EAC/B,EACQ,EAAG,CAED,KAAM,GACN,OAAQ,SAER,UAAW,MAErB,EACQ,EAAG,CACD,UAAW,OACX,MAAO,CAIL,UAAU,EAAY,CACpB,OAAO,EAAa,EAAa,KAAO,EAC1C,CACZ,CACA,EACQ,EAAG,CACD,UAAW,OACX,MAAO,QACjB,EACQ,OAAQ,CACN,KAAM,GACN,WAAY,MACtB,EACQ,MAAO,CACL,QAAS,MACnB,EACQ,MAAO,CACL,QAAS,GACT,SAAU,WAEV,QAAS,EACT,QAAS,CACnB,CACA,EACM,MAAO,CACL,KAAM,WACN,WAAY,CAAA,EACZ,sBAAuB,GAEvB,QAAS,EACT,QAAS,EACT,oBAAqB,OACrB,OAAQ,CACN,KAAM,GACN,OAAQ,IACR,aAAc,GACd,sBAAuB,GACvB,KAAM,GACN,UAAW,OACX,UAAW,IACX,eAAgB,GAChB,MAAO,CACL,OAAQ,CAAA,EACR,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,SAAU,EACtB,EACU,QAAS,EACT,QAAS,EACT,OAAQ,OACR,UAAW,OAEX,YAAa,GACb,kBAAmB,CAOjB,KAAM,OACN,MAAO,MACP,IAAK,SACL,KAAM,QACN,OAAQ,QACR,OAAQ,UACpB,CACA,EACQ,MAAO,CACL,OAAQ,CAAA,EACR,MAAO,CACL,OAAQ,CAAA,EACR,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,SAAU,EACtB,CACA,EACQ,WAAY,CACV,KAAM,GACN,MAAO,UACP,MAAO,OACP,OAAQ,EACR,QAAS,EACT,QAAS,CACnB,EACQ,UAAW,CACT,KAAM,GACN,MAAO,UACP,OAAQ,EACR,QAAS,EACT,QAAS,CACnB,EACQ,SAAU,OACV,WAAY,OACZ,cAAe,KACf,IAAK,OACL,IAAK,OACL,MAAO,OACP,SAAU,GACV,gBAAiB,OACjB,SAAU,SACV,MAAO,CACL,KAAM,OACN,QAAS,EACT,QAAS,EACT,MAAO,CACL,MAAO,OACP,SAAU,OACV,WAAY,IACZ,WAAY,OACZ,SAAU,EACtB,CACA,EACQ,WAAY,CACV,KAAM,GACN,MAAO,EAEP,SAAU,OACV,QAAS,GACT,OAAQ,CACN,MAAO,UACP,MAAO,EACP,UAAW,CACvB,EACU,KAAM,CACJ,KAAM,QAEN,MAAO,UACP,SAAU,CACR,UAAW,UACX,QAAS,UACT,MAAO,CAAC,EAAG,GAAG,EACd,YAAa,GACb,UAAW,EACzB,CACA,EACU,WAAY,CACV,QAAS,GACT,KAAM,EACN,IAAK,EACL,KAAM,EACN,QAAS,EACrB,CACA,EACQ,QAAS,CACP,QAAS,GACT,QAAS,EACT,UAAW,OACX,MAAO,CACL,SAAU,OACV,WAAY,MACxB,CACA,CACA,EACM,MAAO,KAAK,MACZ,MAAO,CACL,KAAM,GACN,QAAS,WAQT,OAAQ,GAGR,OAAQ,GAGR,KAAM,GAEN,WAAY,CAEV,QAAS,GACT,MAAO,UACP,QAAS,QACT,eAAgB,GAC1B,EACQ,cAAe,CACb,eAAgB,EAE1B,CACA,CACA,CACE,CACF,CACA,MAAM,EAAO,CAIX,YAAY,EAAM,CAChB,KAAK,KAAO,CACd,CAEA,KAAK,CAAE,mBAAA,CAAkB,EAAI,CAC3B,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACxC,IAAI,EAAO,KAAK,KAChB,MAAM,EAAW,IAAI,GACf,EAAW,IAAI,GAAS,CAAI,EAClC,EAAO,KAAK,0BAA0B,CAAI,EAC1C,KAAK,UAAY,EAAK,MAAM,KAC5B,EAAO,KAAK,YAAY,CAAI,EAC5B,EAAO,KAAK,kBAAkB,CAAI,EAClC,IAAI,EAAS,EAAS,KAAI,EACtB,EAAc,CAAA,EAClB,GAAI,GAAQ,OAAO,GAAS,SAAU,CACpC,IAAI,EAAgB,CAAA,EACpB,MAAM,EAAa,CACjB,OACA,OACA,MACA,cACA,UACA,SACA,WACA,YACA,SACA,UACA,UACA,UACA,OACA,WACA,MACA,YACA,QACA,QACA,WACR,EACY,EAAgB,EAAK,MAAM,cAC7B,IAAkB,UAAY,IAAkB,UAClD,EACA,EAAS,CAAa,EAAC,EACd,IAAkB,QAC3B,EAAgB,EAAS,MAAK,EACrB,EAAW,QAAQ,EAAK,MAAM,IAAI,IAAM,GACjD,EACA,EAAS,EAAK,MAAM,IAAI,EAAC,EAEzB,EAAgB,EAAS,KAAI,GAE1B,GAAM,EAAK,EAAK,cAAgB,KAAO,OAAS,EAAG,MAAQ,MAAgB,EAAG,WACjF,EAAgB,EAAS,OAAM,GAE7B,EAAK,MAAM,SAAW,EAAK,MAAM,OAAS,QAC5C,EAAgB,EAAS,YAAW,IAEjC,EAAK,EAAK,MAAM,QAAU,MAAgB,EAAG,UAChD,EAAgB,EAAS,MAAM,CAAa,IAEzC,GAAM,EAAK,EAAK,cAAgB,KAAO,OAAS,EAAG,OAAS,MAAgB,EAAG,eAClF,EAAgB,EAAS,MAAK,GAE5B,EAAK,MAAM,SAAW,EAAK,MAAM,YAAc,SACjD,EAAO,EAAS,WAAW,CAAI,IAE5B,GAAM,EAAK,EAAK,cAAgB,KAAO,OAAS,EAAG,MAAQ,MAAgB,EAAG,aACjF,EAAO,EAAS,SAAS,CAAI,GAE/B,KAAK,kBAAkB,EAAY,QAAO,CAAE,EAC5C,KAAK,kBAAkB,CAAI,EAC3B,EAAK,MAAQ,EAAK,OAAS,EAAY,QAAO,EAAG,OAAS,CAAA,EACrD,IACH,EAAK,MAAM,sBAAwB,IAErC,EAAO,KAAK,0BAA0B,KAAK,UAAW,EAAe,CAAI,IACnE,EAAK,EAAK,MAAM,YAAc,MAAgB,EAAG,UAAc,GAAM,EAAK,EAAY,QAAO,EAAG,QAAU,KAAO,OAAS,EAAG,YAAc,MAAgB,EAAG,WAClK,EAAgB,EAAS,UAAU,CAAa,GAElD,EAAc,EAAQ,OAAO,EAAQ,CAAa,CACpD,CACA,MAAM,EAA0B,EAAQ,OACtC,EACA,EAAY,QAAO,CACzB,EACI,OAAA,EAAS,EAAQ,OAAO,EAAyB,CAAI,EACrD,EAAS,KAAK,sBAAsB,CAAM,EACnC,CACT,CAYA,0BAA0B,EAAM,CAC9B,GAAI,CAAC,GAAQ,CAAC,EAAK,MAAO,OAAO,EACjC,MAAM,EAAY,EAAK,MAAM,KAC7B,OAAI,IAAc,UAAY,IAAc,WAAa,IAAc,SAAW,IAAc,WAGhG,EAAK,MAAM,cAAgB,EACvB,IAAc,UAChB,EAAK,YAAc,EAAK,aAAe,CAAA,EACvC,EAAK,YAAY,KAAO,EAAK,YAAY,MAAQ,CAAA,EAC7C,EAAK,YAAY,KAAK,QAAU,OAClC,EAAK,YAAY,KAAK,OAAS,QAE7B,EAAK,YAAY,KAAK,OAAS,OACjC,EAAK,YAAY,KAAK,MAAQ,UAEhC,EAAK,MAAM,KAAO,QACT,IAAc,UAAY,IAAc,WACjD,EAAK,YAAc,EAAK,aAAe,CAAA,EACvC,EAAK,YAAY,IAAM,EAAK,YAAY,KAAO,CAAA,EAC/C,EAAK,YAAY,IAAI,SAAW,GAChC,EAAK,YAAY,IAAI,WAAa,GAClC,EAAK,MAAM,KAAO,MACd,IAAc,UAChB,EAAK,YAAY,IAAI,UAAY,GAEjC,EAAK,YAAY,IAAI,UAAY,IAE1B,IAAc,UACvB,EAAK,MAAM,KAAO,cAEb,CACT,CAMA,0BAA0B,EAAW,EAAe,EAAM,CACxD,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,EAAW,IAAI,GAAS,CAAI,EAC5B,GAAmB,IAAc,OAAS,IAAc,WAAa,IAAc,aAAe,GAAM,EAAK,EAAK,cAAgB,KAAO,OAAS,EAAG,MAAQ,KAAO,OAAS,EAAG,YAChL,EAAkB,IAAc,OAAS,IAAc,aAAe,IAAc,SAAW,IAAc,SAAW,IAAc,aAAe,IAAc,WAAa,IAAc,QAAU,IAAc,WACtN,EAAkB,EAAK,MAAM,OAAS,YAAc,EAAK,MAAM,OAAS,UACxE,GAAmB,IAAc,WAAa,IAAc,aAAe,GAAM,GAAM,EAAK,EAAK,cAAgB,KAAO,OAAS,EAAG,UAAY,KAAO,OAAS,EAAG,SAAW,KAAO,OAAS,EAAG,SACjM,EAAgB,EAAK,MAAM,cAAgB,EAAK,MAAM,cAAgB,EAAc,OAAS,EAAc,MAAM,cACvH,MAAI,CAAC,GAAmB,CAAC,GAAmB,CAAC,GAAmB,GAAmB,IAAkB,YACnG,EAAO,EAAS,oBAAoB,CAAI,GAEnC,CACT,CAKA,YAAY,EAAM,EAAG,CACnB,MAAM,EAAW,IAAI,IACjB,OAAO,EAAK,MAAU,KAAe,CAAC,EAAK,OAAS,MAAM,QAAQ,EAAK,KAAK,GAAK,EAAK,MAAM,SAAW,KACzG,EAAK,MAAQ,CAAA,GAEf,MAAM,EAAa,EAAY,QAAO,EAClC,EAAK,MAAM,cAAgB,OAAS,EAAW,OAAS,EAAW,MAAM,cAAgB,QAC3F,EAAK,MAAQ,EAAQ,OAAO,EAAK,MAAO,EAAW,KAAK,GAEtD,EAAK,MAAM,cAAgB,MAC7B,EAAK,MAAQ,CAAC,EAAQ,OAAO,EAAS,MAAO,EAAK,KAAK,CAAC,EAExD,EAAK,MAAQ,EAAQ,YAAY,EAAK,MAAO,EAAS,KAAK,EAE7D,IAAI,EAAS,GACb,EAAK,MAAM,QAAS,GAAM,CACpB,EAAE,cACJ,EAAS,GAEb,CAAC,EACD,IAAI,EAAS,EAAK,OAClB,OAAI,GAAK,CAAC,IACR,EAAS,EAAE,OAAO,QAEhB,GAAU,EAAO,SAAW,EAAK,MAAM,QAAU,EAAO,SAC1D,EAAK,MAAQ,EAAO,IAAI,CAAC,EAAG,IAAM,CAIhC,GAHK,EAAE,OACL,EAAO,CAAC,EAAE,KAAO,UAAU,EAAI,CAAC,IAE9B,EAAK,MAAM,CAAC,EACd,OAAA,EAAK,MAAM,CAAC,EAAE,WAAa,EAAO,CAAC,EAAE,KAC9B,EAAK,MAAM,CAAC,EACd,CACL,MAAM,EAAW,EAAQ,OAAO,EAAS,MAAO,EAAK,MAAM,CAAC,CAAC,EAC7D,OAAA,EAAS,KAAO,GACT,CACT,CACF,CAAC,GAEC,GAAU,EAAO,OAAS,GAAK,EAAO,SAAW,EAAK,MAAM,QAC9D,QAAQ,KACN,gFACR,EAEW,CACT,CAKA,kBAAkB,EAAM,CACtB,OAAI,OAAO,EAAK,YAAgB,MAC9B,EAAK,YAAc,CAAA,EACnB,EAAK,YAAY,MAAQ,CAAA,EACzB,EAAK,YAAY,MAAQ,CAAA,EACzB,EAAK,YAAY,OAAS,CAAA,GAE5B,EAAO,KAAK,uBAAuB,CAAI,EACvC,EAAO,KAAK,uBAAuB,CAAI,EACvC,EAAO,KAAK,uBAAuB,CAAI,EAChC,CACT,CAIA,uBAAuB,EAAM,CAC3B,MAAM,EAAW,IAAI,GACrB,OAAA,EAAK,YAAY,MAAQ,EAAQ,YAC/B,OAAO,EAAK,YAAY,MAAU,IAAc,EAAK,YAAY,MAAQ,CAAA,EACzE,EAAS,eACf,EACW,CACT,CAIA,uBAAuB,EAAM,CAC3B,MAAM,EAAW,IAAI,GACrB,OAAA,EAAK,YAAY,MAAQ,EAAQ,YAC/B,OAAO,EAAK,YAAY,MAAU,IAAc,EAAK,YAAY,MAAQ,CAAA,EACzE,EAAS,eACf,EACW,CACT,CAIA,uBAAuB,EAAM,CAC3B,MAAM,EAAW,IAAI,GACrB,OAAA,EAAK,YAAY,OAAS,EAAQ,YAChC,OAAO,EAAK,YAAY,OAAW,IAAc,EAAK,YAAY,OAAS,CAAA,EAC3E,EAAS,eACf,EACW,CACT,CAIA,kBAAkB,EAAM,CAClB,EAAK,OAAS,EAAK,MAAM,OAAS,SAC/B,EAAK,UACR,EAAK,QAAU,CAAA,GAEb,EAAK,QAAQ,QAAU,UACzB,EAAK,QAAQ,MAAQ,QAElB,EAAK,MAAM,YACd,EAAK,MAAM,UAAY,WAEpB,EAAK,MAAM,UACd,EAAK,MAAM,QAAU,YAG3B,CAIA,sBAAsB,EAAM,CAC1B,MAAM,EAAS,EACf,GAAI,EAAO,QAAQ,QAAU,EAAO,QAAQ,UAC1C,MAAM,IAAI,MACR,oHACR,EAEI,GAAI,EAAO,MAAM,OAAS,OAAS,EAAO,YAAY,IAAI,WAAY,CACpE,GAAI,EAAO,MAAM,OAAS,EACxB,MAAM,IAAI,MACR,gHACV,EAEU,EAAO,MAAM,CAAC,EAAE,WAClB,EAAO,MAAM,CAAC,EAAE,SAAW,IAE7B,EAAO,MAAM,QAAQ,QAAU,GAC/B,EAAO,MAAM,CAAC,EAAE,QAAQ,QAAU,GAClC,EAAO,MAAM,KAAK,QAAU,EAC9B,CACA,OAAI,EAAO,MAAM,OAAS,OAAS,EAAO,MAAM,OAAS,aACnD,EAAO,QAAQ,QACb,EAAO,MAAM,WAAW,QAAU,YAAc,EAAO,OAAO,OAAS,IACzE,EAAO,MAAM,WAAW,MAAQ,cAIlC,EAAO,MAAM,OAAS,eAAiB,EAAO,MAAM,OAAS,YAC3D,EAAO,MAAM,CAAC,EAAE,WAClB,QAAQ,KACN,sBAAsB,EAAO,MAAM,IAAI,0BACjD,EACQ,EAAO,MAAM,CAAC,EAAE,SAAW,IAGxB,CACT,CACF,CACA,MAAM,GAAoB,MACpB,GAA6B,CACjC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACrC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,CACvC,EACM,GAA2B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACF,EACA,MAAM,EAAQ,CAIZ,eAAe,EAAI,CACjB,EAAG,OAAS,CAAA,EACZ,EAAG,cAAgB,CAAA,EACnB,EAAG,cAAgB,CAAA,EACnB,EAAG,cAAgB,CAAA,EACnB,EAAG,cAAgB,CAAA,EACnB,EAAG,cAAgB,CAAA,EACnB,EAAG,iBAAmB,CAAA,EACtB,EAAG,eAAiB,CAAA,EACpB,EAAG,YAAc,CAAA,EACjB,EAAG,cAAgB,CAAA,EACnB,EAAG,YAAc,CAAA,EACjB,EAAG,QAAU,CAAA,EACb,EAAG,QAAU,CAAA,EACb,EAAG,YAAc,CAAA,EACjB,EAAG,aAAe,CAAA,EAClB,EAAG,UAAY,CAAA,EACf,EAAG,aAAe,CAAA,EAClB,EAAG,oBAAsB,CAAA,EACzB,EAAG,cAAgB,CAAA,EACnB,EAAG,cAAgB,CAAA,EACnB,EAAG,cAAgB,GACnB,EAAG,eAAiB,KACpB,EAAG,oBAAsB,EACzB,EAAG,cAAgB,EACnB,EAAG,mBAAqB,GACxB,EAAG,cAAgB,GACnB,EAAG,gBAAkB,GACrB,EAAG,gBAAkB,CAAA,EACrB,EAAG,OAAS,CAAA,EACZ,EAAG,eAAiB,GACpB,EAAG,OAAS,CAAA,EACZ,EAAG,UAAY,CAAA,EACf,EAAG,WAAa,CAAA,EAChB,EAAG,WAAa,CAAA,EAChB,EAAG,gBAAkB,GACrB,EAAG,aAAe,CAAA,EAClB,EAAG,eAAiB,CAAA,EACpB,EAAG,gBAAkB,CAAA,EACrB,EAAG,iBAAmB,GACtB,EAAG,WAAa,GAChB,EAAG,sBAAwB,GAC3B,EAAG,uBAAyB,GAC5B,EAAG,UAAY,GACf,EAAG,aAAe,GAClB,EAAG,gBAAkB,GACrB,EAAG,KAAO,CAAC,OAAO,UAClB,EAAG,KAAO,OAAO,UACjB,EAAG,QAAU,CAAA,EACb,EAAG,QAAU,CAAA,EACb,EAAG,KAAO,CAAC,OAAO,UAClB,EAAG,KAAO,OAAO,UACjB,EAAG,YAAc,CAAC,OAAO,UACzB,EAAG,YAAc,OAAO,UACxB,EAAG,QAAU,EACb,EAAG,QAAU,OAAO,UACpB,EAAG,KAAO,OAAO,UACjB,EAAG,KAAO,CAAC,OAAO,UAClB,EAAG,SAAW,OAAO,UACrB,EAAG,WAAa,CAAA,EAChB,EAAG,WAAa,KAChB,EAAG,oBAAsB,CAAA,EACzB,EAAG,OAAS,EACZ,EAAG,OAAS,CAAA,EACZ,EAAG,OAAS,EACZ,EAAG,WAAa,EAChB,EAAG,YAAc,EACjB,EAAG,oBAAsB,EACzB,EAAG,cAAgB,GACnB,EAAG,eAAiB,GACpB,EAAG,cAAgB,CAAA,EACnB,EAAG,aAAe,CAAA,EAClB,EAAG,qBAAuB,EAC1B,EAAG,cAAgB,EACnB,EAAG,cAAgB,GACnB,EAAG,mBAAqB,GACxB,EAAG,WAAa,EAChB,EAAG,UAAY,EACf,EAAG,SAAW,EACd,EAAG,eAAiB,GACpB,EAAG,YAAc,GACjB,EAAG,oBAAsB,GACzB,EAAG,YAAc,KACjB,EAAG,qBAAuB,KAC1B,EAAG,gBAAkB,CAAA,EACrB,EAAG,YAAc,CAAA,EACjB,EAAG,gBAAkB,KACrB,EAAG,eAAiB,KACpB,EAAG,gBAAkB,CAAA,EACrB,EAAG,2BAA6B,CAAA,EAChC,EAAG,eAAiC,IAAI,IACxC,EAAG,SAA2B,IAAI,IAClC,EAAG,eAAiB,CAAA,EACpB,EAAG,gBAAkB,CAAA,EAChB,EAAG,UACN,KAAK,kBAAkB,CAAE,CAE7B,CAiBA,kBAAkB,EAAI,CACpB,MAAM,EAAQ,CAAC,EAAI,EAAK,EAAQ,IAAQ,CACtC,OAAO,eAAe,EAAI,EAAO,CAC/B,KAAM,CACJ,OAAO,EAAG,CAAG,CACf,EACA,IAAI,EAAG,CACL,EAAG,CAAG,EAAI,CACZ,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,CACH,EACM,EAAW,CAAA,EACjB,EAAM,EAAU,SAAU,MAAM,EAChC,UAAW,IAAO,CAChB,cACA,UACA,UACA,gBACA,gBACA,cACA,YACA,eACA,gBACA,eACA,sBACA,gBACA,gBACA,gBACA,gBACA,gBACA,mBACA,iBACA,cACA,iBACA,wBACA,eACA,YACA,aACA,aACA,iBACA,kBACA,yBACA,2BACA,kCACA,qBACA,eACA,gBACA,qBACA,SACA,iBACA,kBACA,QACN,EACM,EAAM,EAAU,CAAG,EAErB,OAAO,eAAe,EAAI,WAAY,CACpC,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EACpB,CAAK,EACD,MAAM,EAAS,CAAA,EACf,UAAW,IAAO,CAChB,OACA,OACA,cACA,cACA,OACA,OACA,UACA,UACA,OACA,OACA,UACA,UACA,WACA,SACA,SACA,SACA,aACA,aACA,sBACA,cACA,sBACA,aACA,sBACA,aACA,kBACA,eACA,YACA,qBACA,qBACA,gBACA,gBACA,iBACA,kBACA,yBACA,wBACA,gBACA,kBACA,kBACN,EACM,EAAM,EAAQ,CAAG,EAEnB,OAAO,eAAe,EAAI,OAAQ,CAChC,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EACpB,CAAK,EACD,MAAM,EAAW,CAAA,EACjB,UAAW,IAAO,CAChB,WACA,YACA,YACA,aACA,aACA,aACA,kBACA,kBACA,kBACA,oBACA,yBACA,mBACA,mBACA,cACA,gBACA,eACA,gBACA,uBACA,gBACA,SACA,SACA,aACA,gBACA,oBACN,EACM,EAAM,EAAU,CAAG,EAErB,OAAO,eAAe,EAAI,SAAU,CAClC,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EACpB,CAAK,EACD,MAAM,EAAU,CAAA,EAChB,UAAW,IAAO,CAChB,WACA,iBACA,kBACA,iBACA,cACA,kBACA,6BACA,kBACA,cACA,uBACA,gBACN,EACM,EAAM,EAAS,CAAG,EAEpB,OAAO,eAAe,EAAI,QAAS,CACjC,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EACpB,CAAK,CACH,CAUA,WAAW,EAAQ,CA2IjB,MA1IgB,CAEd,QAAS,KAET,KAAM,KAGN,OAAQ,CACN,YAAa,CAAA,EACb,QAAS,CAAA,EACT,QAAS,CAAA,EACT,QAAS,CAAA,EACT,UAAW,CAAA,EACX,mBAAoB,CAAA,EACpB,OAAQ,CAAA,EACR,SAAU,CAAA,CAClB,EAEM,OAAQ,CAAA,EACR,KAAM,CAAE,OAAQ,CAAA,CAAE,EAMlB,gBAAiB,KACjB,cAAe,KACf,YAAa,KACb,OAAQ,CAAE,OAAQ,CAAA,CAAE,EACpB,WAAY,CAAE,MAAO,CAAE,OAAQ,CAAA,CAAE,CAAE,EACnC,cAAe,CAAE,KAAM,CAAE,OAAQ,CAAA,CAAE,CAAE,EACrC,QAAS,CACP,OAAQ,CAAA,EACR,KAAM,EAAO,QAAQ,KACrB,YAAa,CACrB,EAGM,kBAAA,GAEA,WAAY,GAEZ,aAAc,EAAO,YAAY,KAAK,aACtC,YAAa,GAGb,cAAe,KAEf,cAAe,CAAA,EACf,UAAW,CAAA,EACX,UAAW,CAAA,EAQX,mBAAoB,GACpB,gBAAiB,CAAA,EACjB,uBAAwB,CAAA,EACxB,yBAA0B,CAAA,EAC1B,gCAAiC,CAAA,EACjC,aAAc,CAAA,EAEd,mBAAoB,CAAA,EAGpB,QAAS,GAET,aAAc,GAEd,YAAa,GAEb,QAAS,GAOT,aAAc,KAEd,MAAO,KAEP,MAAO,EAGP,cAAe,GACf,cAAe,CAAA,EAKf,gBAAiB,KAIjB,gBAAiB,KAEjB,SAAU,EACV,UAAW,EAIX,oBAAqB,KAKrB,cAAe,GAGf,iBAAkB,EAClB,OAAQ,EACR,OAAQ,EACR,gBAAiB,CAAA,EACjB,YAAa,CAAA,EAEb,QAAS,KACT,eAAgB,KAEhB,OAAQ,CAAA,EAER,OAAQ,CACN,cAAe,CAAA,CACvB,EAEM,uBAAwB,GACxB,sBAAuB,GAEvB,eAAgB,CAAA,EAEhB,sBAAuB,CAAA,EAEvB,OAAQ,EAEd,CAME,CAkBA,wBAAwB,EAAS,CAC/B,IAAI,EAAM,CAAA,EACN,EAAO,KACX,OAAO,eAAe,EAAS,gBAAiB,CAC9C,aAAc,GACd,WAAY,GACZ,KAAM,CACJ,OAAI,IAAS,OACX,EAAO,EAAQ,MAAM,CAAG,GAEnB,CACT,EACA,IAAI,EAAO,CACT,EAAM,MAAM,QAAQ,CAAK,EAAI,EAAM,IAChC,GAAM,GAAK,OAAO,GAAM,UAAY,CAAC,MAAM,QAAQ,CAAC,EAAI,EAAe,CAAA,EAAI,CAAC,EAAI,CAC3F,EAAY,EACJ,EAAO,KACP,EAAQ,mBAAqB,CAC/B,CACN,CAAK,EACD,EAAQ,mBAAqB,CAC/B,CAIA,KAAK,EAAQ,CACX,MAAM,EAAU,KAAK,WAAW,CAAM,EACtC,YAAK,eAAe,CAAO,EAC3B,KAAK,wBAAwB,CAAO,EACpC,EAAQ,cAAgB,EAAQ,OAAO,CAAA,EAAI,CAAM,EACjD,EAAQ,cAAgB,EAAO,OAC/B,EAAQ,UAAY,EAAQ,MAE1B,EAAQ,cAAc,KAC5B,EACI,EAAQ,UAAY,EAAQ,MAE1B,EAAQ,cAAc,KAC5B,EACW,CACT,CACF,CACA,MAAM,EAAK,CAIT,YAAY,EAAM,CAChB,KAAK,KAAO,CACd,CAKA,MAAO,CACL,MAAM,EAAS,IAAI,GAAO,KAAK,IAAI,EAAE,KAAK,CAAE,mBAAoB,EAAK,CAAE,EACjE,EAAU,IAAI,GAAO,EAAG,KAAK,CAAM,EACnC,EAAI,CACR,OAAA,EACA,QAAA,EACA,IAAK,CAAA,EAEL,SAAU,CAER,YAAa,EAAO,MAAM,QAAQ,eAAiB,QAAU,EAAO,MAAM,QAAQ,MAAM,MAAQ,EAAO,MAAM,KAAK,QAClH,WAAY,EAAO,MAAM,QAAQ,eAAiB,OAAS,EAAO,MAAM,QAAQ,MAAM,IACtF,iBAAkB,EAAO,MAAM,QAAQ,eAAiB,aAAe,EAAO,MAAM,QAAQ,MAAM,UAGlG,eAAgB,EAAO,MAAM,QAAQ,eAAiB,WAAa,CAAC,CAAC,EAAO,MAAM,QAAQ,MAAM,SAAW,CAAC,EAAE,EAAO,MAAM,SAAW,EAAO,MAAM,QAAQ,SAE3J,OAAQ,GACR,UAAW,OACX,cAAe,OACf,mBAAoB,CAAA,EAEpB,UAAW,GACX,QAAS,KACT,QAAS,KACT,mBAAoB,CAAA,EAEpB,oBAAqB,GACrB,uBAAwB,GAExB,cAAe,GACf,eAAgB,GAEhB,cAAe,EAAY,UAAS,EAAK,iBAAkB,QAAU,UAAU,eAAiB,EAAI,EAC5G,EACM,WAAY,CAEV,gBAAiB,OACjB,iBAAkB,CAAA,EAClB,sBAAuB,OACvB,eAAgB,OAChB,MAAO,OACP,aAAc,OACd,gBAAiB,MACzB,EAGM,WAAY,CACV,cAAe,CAAA,EACf,cAAe,CAAA,EACf,cAAe,CAAA,EACf,cAAe,CAAA,EACf,cAAe,CAAA,EAGf,gBAAiB,CAAA,CACzB,EAGM,UAAW,CACT,iBAAkB,CAAA,EAClB,eAAgB,CAAA,EAChB,YAAa,CAAA,CACrB,EAMM,WAAY,CACV,oBAAqB,CAAA,EACrB,mBAAoB,CAAA,EACpB,gBAAiB,CAAA,EACjB,gBAAiB,CAAA,CACzB,EAEM,UAAW,CACT,OAAQ,CAAA,EACR,eAAgB,CAAA,EAChB,gBAAiB,CAAA,EAEjB,eAAgB,GAChB,OAAQ,CAAA,EACR,aAAc,CAAA,CACtB,EAEM,UAAW,CACT,WAAY,GACZ,mBAAoB,GACpB,UAAW,GACX,YAAa,GACb,WAAY,GACZ,aAAc,GACd,iBAAkB,GAClB,cAAe,EACvB,EAIM,WAAY,CACV,OAAQ,CAAA,EAER,YAAa,CAAA,EACb,QAAS,CAAA,EACT,QAAS,CAAA,EACT,aAAc,CAAA,EACd,YAAa,CAAA,EACb,oBAAqB,CAAA,EACrB,4BAA6B,CAAA,EAC7B,SAAU,CAAA,CAElB,EAKM,OAAQ,CACN,WAAY,EACZ,UAAW,EACX,WAAY,EACZ,WAAY,EACZ,gBAAiB,EACjB,gBAAiB,EACjB,cAAe,GACf,YAAa,EACb,kBAAmB,EACnB,uBAAwB,EACxB,iBAAkB,EAClB,cAAe,CAAA,EACf,aAAc,CAAA,EACd,QAAS,CAAE,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,KAAM,CAAC,CACvD,CACA,EACI,OAAO,eAAe,EAAS,MAAO,CACpC,KAAM,CACJ,OAAO,EAAE,GACX,EACA,IAAI,EAAG,CACL,EAAE,IAAM,CACV,EACA,WAAY,GACZ,aAAc,EACpB,CAAK,EACD,UAAW,IAAO,CAChB,kBACA,mBACA,wBACA,iBACA,QACA,eACA,iBACN,EACM,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,WAAW,CAAG,CAEpB,EACA,IAAI,EAAG,CACL,EAAE,WAAW,CAAG,EAAI,CACtB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,UAAW,IAAO,CAChB,cACA,aACA,mBACA,SACA,YACA,gBACA,qBACA,YACA,UACA,UACA,qBACA,sBACA,yBACA,gBACA,iBACA,eACN,EACM,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,SAAS,CAAG,CAElB,EACA,IAAI,EAAG,CACL,EAAE,SAAS,CAAG,EAAI,CACpB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,UAAW,IAAO,CAChB,aACA,YACA,aACA,aACA,kBACA,kBACA,gBACA,cACA,oBACA,yBACA,mBACA,gBACA,eACA,SACN,EACM,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,OAAO,CAAG,CAEhB,EACA,IAAI,EAAG,CACL,EAAE,OAAO,CAAG,EAAI,CAClB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,UAAW,IAAO,CAChB,SACA,cACA,UACA,UACA,eACA,cACA,sBACA,6BACN,EACM,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,WAAW,CAAG,CAEpB,EACA,IAAI,EAAG,CACL,EAAE,WAAW,CAAG,EAAI,CACtB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,UAAW,IAAO,CAChB,aACA,qBACA,YACA,cACA,aACA,eACA,mBACA,eACN,EACM,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,UAAU,CAAG,CAEnB,EACA,IAAI,EAAG,CACL,EAAE,UAAU,CAAG,EAAI,CACrB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,UAAW,IAAO,CAChB,SACA,iBACA,kBACA,iBACA,SACA,cACN,EACM,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,UAAU,CAAG,CAEnB,EACA,IAAI,EAAG,CACL,EAAE,UAAU,CAAG,EAAI,CACrB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,UAAW,IAAO,CAAC,mBAAoB,iBAAkB,aAAa,EACpE,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,UAAU,CAAG,CAEnB,EACA,IAAI,EAAG,CACL,EAAE,UAAU,CAAG,EAAI,CACrB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,UAAW,IAAO,CAChB,gBACA,gBACA,gBACA,gBACA,eACN,EACM,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,WAAW,CAAG,CAEpB,EACA,IAAI,EAAG,CACL,EAAE,WAAW,CAAG,EAAI,CACtB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,UAAW,IAAO,CAChB,sBACA,qBACA,kBACA,iBACN,EACM,OAAO,eAAe,EAAS,EAAK,CAClC,KAAM,CACJ,OAEE,EAAE,WAAW,CAAG,CAEpB,EACA,IAAI,EAAG,CACL,EAAE,WAAW,CAAG,EAAI,CACtB,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,EAEH,OAGE,CAEJ,CACF,CACA,MAAM,EAAU,CAId,YAAY,EAAG,CACb,KAAK,EAAI,CACX,CAKA,OAAO,iBAAiB,EAAQ,EAAW,CACzC,IAAI,EAAc,GACd,EAAgB,EAChB,EAAa,EACjB,OAAI,IAAc,SAChB,EAAY,QAEV,EAAO,QAAU,OAAO,EAAO,CAAC,EAAE,KAAS,KAC7C,EAAO,QAAS,GAAM,EAChB,EAAE,OAAS,OAAS,EAAE,OAAS,UAAY,EAAE,OAAS,eAAiB,EAAE,OAAS,WAAa,EAAE,OAAS,WAC5G,IAEE,OAAO,EAAE,KAAS,KAAe,EAAE,OAAS,GAC9C,GAEJ,CAAC,EAEC,EAAa,IACf,EAAc,IAET,CACL,cAAA,EACA,YAAA,CACN,CACE,CAQA,uBAAuB,EAAwB,CAAA,EAAI,CACjD,MAAM,EAAI,KAAK,EACT,EAAQ,CAAA,EACd,GAAI,EAAE,WAAW,OAAO,SAAW,EAAG,OAAO,EAC7C,QAAS,EAAI,EAAG,EAAI,EAAE,WAAW,OAAO,EAAE,QAAQ,mBAAmB,EAAE,OAAQ,IAAK,CAClF,IAAI,EAAI,EACR,QAAS,EAAI,EAAG,EAAI,EAAE,WAAW,OAAO,OAAQ,IAC1C,OAAO,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAAM,KAAe,EAAsB,QAAQ,CAAC,IAAM,KAC3F,GAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,GAGjC,EAAM,KAAK,CAAC,CACd,CACA,OAAO,CACT,CAKA,sBAAsB,EAAQ,KAAM,CAClC,GAAI,IAAU,KACZ,OAEE,KAAK,EAAE,OAAO,OAAO,OACnB,CAAC,EAAK,IAAQ,EAAM,EACpB,CACV,EAEW,CACL,MAAM,EAAgB,KAAK,EAAE,WAAW,OAAO,CAAK,EACpD,OAAK,MAAM,QAAQ,CAAa,EAGzB,EAAc,OACnB,CAAC,EAAK,IAAQ,EAAM,EACpB,CACR,EALe,GAAwC,CAMnD,CACF,CAQA,gCAAiC,CAC/B,MAAM,EAAI,KAAK,EACT,EAAQ,CAAA,EACd,OAAA,EAAE,UAAU,aAAa,QAAS,GAAO,CACvC,MAAM,EAAkB,CAAA,EACxB,EAAE,OAAO,OAAO,QAAQ,CAAC,EAAG,IAAO,CAC7B,EAAG,QAAQ,EAAE,WAAW,YAAY,CAAE,CAAC,EAAI,IAC7C,EAAgB,KAAK,CAAE,CAE3B,CAAC,EACD,MAAM,EAAkB,EAAE,WAAW,OAAO,IAAI,CAAC,EAAG,IAAO,EAAgB,QAAQ,CAAE,IAAM,GAAK,EAAK,EAAE,EAAE,OAAQ,GAAM,IAAM,EAAE,EAC/H,EAAM,KAAK,KAAK,uBAAuB,CAAe,CAAC,CACzD,CAAC,EACM,CACT,CACA,wBAAyB,CACvB,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OACnB,IAAI,EAAgB,CAAA,EACpB,MAAM,EAAwB,CAAA,EACxB,EAA0B,CAAA,EAC1B,EAAuB,KAAK,EAAE,WAAW,OAAO,OAAS,EAAI,MAAM,QAGzE,EAAI,MAAM,KAAM,GAAM,MAAM,QAAQ,EAAE,UAAU,CAAC,EACjD,EAAI,OAAO,QAAQ,CAAC,EAAI,IAAM,CAC5B,EAAwB,KAAK,CAAC,EAC9B,EAAsB,KAAK,IAAI,CACjC,CAAC,EACD,EAAI,MAAM,QACR,CAAC,EAAO,IAAO,CACb,EAAc,CAAE,EAAI,CAAA,CACtB,CACN,EACI,MAAM,EAAyB,CAAA,EAC/B,EAAI,MAAM,QAAQ,CAAC,EAAM,IAAO,CAC9B,IAAI,EAAW,GACf,GAAI,EAAK,WAAY,CACnB,IAAI,EAAc,CAAA,EACd,MAAM,QAAQ,EAAK,UAAU,EAC/B,EAAc,EAAK,WAEnB,EAAY,KAAK,EAAK,UAAU,EAElC,EAAY,QAAS,GAAU,CAC7B,EAAI,OAAO,QAAQ,CAAC,EAAG,IAAO,CAC5B,GAEE,EAAE,OAAS,EACX,CACA,IAAI,EAAS,EACT,IAAO,GAAM,EACX,CAAC,GAAwB,EAAwB,QAAQ,CAAE,EAAI,GACjE,EAAc,CAAE,EAAE,KAAK,CAAC,EAAI,CAAE,CAAC,EAE/B,QAAQ,KACN,WACA,EAAE,KAAO,oJAC7B,GAGgB,EAAc,CAAE,EAAE,KAAK,CAAC,EAAI,CAAE,CAAC,EAC/B,EAAS,GAEX,EAAW,GACX,EAAS,EAAwB,QAAQ,CAAM,EAC3C,IAAW,IACb,EAAwB,OAAO,EAAQ,CAAC,CAE5C,CACF,CAAC,CACH,CAAC,CACH,CACK,GACH,EAAuB,KAAK,CAAE,CAElC,CAAC,EACD,EAAgB,EAAc,IAAK,GAAS,CAC1C,MAAM,EAAK,CAAA,EACX,OAAA,EAAK,QAAS,GAAO,CACnB,EAAsB,EAAG,CAAC,CAAC,EAAI,EAAG,CAAC,EACnC,EAAG,KAAK,EAAG,CAAC,CAAC,CACf,CAAC,EACM,CACT,CAAC,EACD,IAAI,EAAsB,EAAI,MAAM,OAAS,EAC7C,QAAS,EAAI,EAAG,EAAI,EAAuB,SACzC,EAAsB,EAAuB,CAAC,EAC9C,EAAc,CAAmB,EAAI,CAAA,EACjC,GAH6C,IAGpB,CAC3B,MAAM,EAAK,EAAwB,CAAC,EACpC,EAAwB,MAAK,EAC7B,EAAc,CAAmB,EAAE,KAAK,CAAE,EAC1C,EAAsB,CAAE,EAAI,CAC9B,CAIF,EAAwB,QAAS,GAAM,CACrC,EAAc,CAAmB,EAAE,KAAK,CAAC,EACzC,EAAsB,CAAC,EAAI,CAC7B,CAAC,EACD,EAAG,eAAiB,EAAc,IAAK,GAAM,CAAC,EAC9C,EAAG,sBAAwB,EAAsB,IAAK,GAAM,CAAC,EAC7D,EAAG,eAAe,QAAQ,CAAC,EAAY,IAAO,CAC5C,EAAW,QAAS,GAAO,CACzB,GAEE,EAAI,OAAO,CAAE,GACb,EAAI,OAAO,CAAE,EAAE,QAAU,OACzB,CACA,MAAM,EAEJ,EAAI,OAAO,CAAE,EAEf,EAAQ,MAAQ,mBAAmB,OAAO,EAAG,SAAQ,CAAE,CACzD,CACF,CAAC,CACH,CAAC,CACH,CAIA,aAAa,EAAQ,KAAM,CACzB,IAAI,EAAI,CAAA,EACR,MAAM,EAEJ,KAAK,EAAE,OAAO,OAEhB,OAAI,IAAU,KACZ,EAAI,EAAO,OAAQ,GAAM,IAAM,IAAI,EAC1B,EAAO,CAAK,GAAK,MAAM,QAAQ,EAAO,CAAK,EAAE,IAAI,EAC1D,EAAI,EAAO,CAAK,EAAE,KAAK,OAAQ,GAAM,IAAM,IAAI,EAE/C,EAAI,EAAO,CAAK,IAAM,MAAQ,EAAO,CAAK,IAAM,OAAS,CAAC,EAAO,CAAK,CAAC,EAAI,CAAA,EAEtE,EAAE,SAAW,CACtB,CAIA,qBAAqB,EAAO,CAC1B,MAAM,EAAgB,KAAK,EAAE,WAAW,OAAO,CAAK,EACpD,OAAK,MAAM,QAAQ,CAAa,EAGzB,EAAc,MACnB,CAAC,EAAK,EAAG,IAAQ,IAAQ,EAAI,CAAC,CACpC,EAJa,EAKX,CAIA,kBAAkB,EAAQ,CACxB,MAAM,EAAI,KAAK,EACf,IAAI,EAAY,EAAO,MAAK,EAC5B,OAAI,EAAE,OAAO,MAAM,wBACjB,EAAY,EAAO,IAAK,GACf,EAAE,OAAO,MAAM,OAAO,UAAU,EAAI,EAAE,QAAQ,KAAO,CAAC,CAC9D,GAEI,CACT,CAEA,kBAAmB,CACjB,MAAM,EAAI,KAAK,EACf,EAAE,QAAQ,oBAAsB,EAAE,WAAW,OAAO,IAAK,GAAM,EAAE,MAAM,EAAE,QACvE,KAAK,IAAI,MACP,KAIA,EAAE,WAAW,OAAO,IAAK,GAAM,EAAE,MAAM,CAC/C,CACA,CACE,CACA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACf,IAAI,EAAO,EACX,OAAA,EAAE,QAAQ,QAAQ,KAAK,QAAS,GAAM,CACpC,EAAO,KAAK,IAAI,EAAM,CAAC,CACzB,CAAC,EACG,EAAE,OAAO,QAAQ,UAAY,EAAE,OAAO,QAAQ,SAAS,QACzD,EAAE,OAAO,QAAQ,SAAS,QAAS,GAAM,CACvC,EAAO,KAAK,IAAI,EAAM,EAAE,IAAI,CAC9B,CAAC,EAEC,EAAO,IACL,EAAE,OAAO,QAAQ,MAAM,KAAO,EAChC,EAAO,EAAE,OAAO,QAAQ,MAAM,KAE9B,GAAQ,EAAE,OAAO,QAAQ,MAAM,YAGnC,EAAE,QAAQ,QAAQ,YAAc,EACzB,CACT,CAOA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACf,EAAE,QAAQ,aAAe,EAAE,WAAW,OAAO,IAAK,GAAQ,CACxD,IAAI,EAAQ,EACZ,GAAI,MAAM,QAAQ,CAAG,EACnB,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC9B,GAAS,EAAI,CAAC,OAGhB,GAAS,EAEX,OAAO,CACT,CAAC,CACH,CAKA,sBAAsB,EAAM,EAAM,CAChC,MAAM,EAAI,KAAK,EAUf,OAT2B,EAAE,WAAW,OAAO,IAAI,CAAC,EAAK,IAAU,CACjE,IAAI,EAAQ,EACZ,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC1B,EAAE,WAAW,QAAQ,CAAK,EAAE,CAAC,EAAI,GAAQ,EAAE,WAAW,QAAQ,CAAK,EAAE,CAAC,EAAI,IAC5E,GAAS,EAAI,CAAC,GAGlB,OAAO,CACT,CAAC,CAEH,CAOA,kBAAmB,CACjB,MAAM,EAAI,KAAK,EACf,EAAE,QAAQ,cAAgB,EAAE,WAAW,OAAO,IAAK,GAAQ,CACzD,MAAM,EAAgB,CAAA,EACtB,GAAI,MAAM,QAAQ,CAAG,EACnB,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,MAAM,EAAQ,EAAE,WAAW,oBAAoB,CAAC,EAChD,IAAI,EAAU,EACV,IACF,EAAU,IAAM,EAAI,CAAC,EAAI,GAE3B,EAAc,KAAK,CAAO,CAC5B,KACK,CACL,MAAM,EAAQ,EAAE,QAAQ,aAAa,OAAO,CAAC,EAAK,IAAQ,EAAM,EAAK,CAAC,EAChE,EAAU,IAAM,EAAM,EAC5B,EAAc,KAAK,CAAO,CAC5B,CACA,OAAO,CACT,CAAC,CACH,CACA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAS,CAAA,EACf,IAAI,EAAiB,EACjB,EAAS,EACT,EAAiB,EACjB,EAAS,EACT,EAAY,CAAA,EACZ,EAAoB,GACpB,EAAY,EAEhB,GADA,EAAG,OAAS,CAAA,EACR,EAAG,gBACL,QAAS,EAAI,EAAG,EAAI,EAAG,QAAQ,OAAQ,IACrC,EAAG,OAAO,KAAK,KAAK,IAAI,EAAG,QAAQ,CAAC,EAAI,EAAG,QAAQ,CAAC,CAAC,CAAC,EACtD,EAAU,KAAK,CAAC,OAGlB,EAAG,OAAO,KAAK,KAAK,IAAI,EAAG,KAAO,EAAG,IAAI,CAAC,EAE5C,EAAG,OAAS,KAAK,IAAI,EAAG,KAAO,EAAG,IAAI,EACtC,EAAG,OAAS,KAAK,IAAI,EAAG,KAAO,EAAG,IAAI,EACtC,QAAS,EAAI,EAAG,EAAI,EAAG,OAAO,OAAQ,IACpC,EAAO,KAAK,EAAG,OAAO,CAAC,EAAI,KAAK,EAAE,OAAO,UAAU,EAUrD,GARA,EAAS,EAAG,OAAS,KAAK,EAAE,OAAO,UACnC,EACA,EAAG,OAAS,KAAK,EAAE,OAAO,UAC1B,EAAiB,EAAG,OAAS,KAAK,EAAE,OAAO,WAC3C,EAAS,EAAG,OAAS,KAAK,EAAE,OAAO,WAAa,GAC3C,IACH,EAAS,GAEP,EAAG,OAAS,OAAO,WAAa,KAAK,IAAI,EAAG,IAAI,IAAM,EAAG,CAC3D,MAAM,EAEJ,EAEF,EAAW,QAAU,EACvB,CACA,GAAI,EAAE,QAAQ,sBAAsB,OAAS,EAAG,CAC9C,MAAM,EAAsB,CAAC,EAAG,IAAM,CACpC,MAAM,EAAQ,EAAE,OAAO,MAAM,EAAE,QAAQ,sBAAsB,CAAC,CAAC,EAC/D,GAAI,CAAC,EAAO,MAAO,GACnB,MAAM,EAAO,EAAI,EAAI,GAAK,EAC1B,OAAA,EAAI,KAAK,IAAI,CAAC,EACV,EAAM,cACR,EAAI,KAAK,WAAW,EAAM,QAAS,CAAC,GAE/B,CAAC,EAAO,EAAI,EAAO,CAAC,CAC7B,EACA,GAAI,EAAG,gBAAiB,CACtB,EAAY,CAAA,EACZ,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,EAAU,KAAK,EAAoB,EAAG,QAAQ,CAAC,EAAG,CAAC,CAAC,CAExD,MACE,EAAY,CAAA,EACZ,EAAU,KAAK,EAAoB,EAAG,KAAM,CAAC,CAAC,EAC1C,EAAG,OAAS,OAAO,WAAa,KAAK,IAAI,EAAG,IAAI,IAAM,IACxD,EAAoB,CAAC,EAAG,KAAO,EAC/B,EAAY,EAAG,KAAO,EAG5B,MACE,EAAY,CAAA,EACZ,EAAU,KAAK,CAAC,EAChB,EAAoB,EACpB,EAAY,EAEd,MAAO,CACL,OAAA,EACA,eAAA,EACA,OAAA,EACA,OAAA,EACA,eAAA,EACA,kBAAA,EACA,UAAA,EACA,UAAA,CACN,CACE,CAIA,aAAa,EAAQ,CACnB,MAAM,EAAI,KAAK,EACf,OAAA,EAAE,QAAQ,UAAY,EAAO,IAAI,CAAC,EAAG,IAAM,CACzC,MAAM,EAAa,EAAE,QAAQ,sBAAsB,CAAC,EACpD,OAAI,EAAE,OAAO,MAAM,CAAU,GAAK,EAAE,OAAO,MAAM,CAAU,EAAE,YACpD,EAAE,IAAK,GACR,IAAM,KAAa,KAChB,KAAK,UAAU,EAAE,OAAO,MAAM,CAAU,EAAE,QAAS,EAAG,CAAC,CAC/D,EAEM,CAEX,CAAC,EACM,EAAE,QAAQ,gBAAkB,EAAS,EAAE,QAAQ,SACxD,CAMA,uBAAuB,EAAK,EAAa,CACvC,GAAI,IAAQ,KAAM,OAEhB,KAEF,MAAM,EAAI,KAAK,EACT,EAAa,EAAE,QAAQ,sBAAsB,CAAW,EAC9D,OAAI,EAAE,OAAO,MAAM,CAAU,GAAK,EAAE,OAAO,MAAM,CAAU,EAAE,YACpD,KAAK,UACV,EAAE,OAAO,MAAM,CAAU,EAAE,QAC3B,EACA,CACR,EAEW,CACT,CAKA,WAAW,EAAM,EAAO,CACtB,OAAO,KAAK,IAAI,CAAK,EAAI,KAAK,IAAI,CAAI,CACxC,CAMA,UAAU,EAAG,EAAG,EAAa,CAC3B,GAAI,GAAK,EACP,MAAO,GAET,MAAM,EAAI,KAAK,EACT,EAAc,EAAE,QAAQ,QAAQ,CAAW,IAAM,EAAI,GAAK,KAAK,WAAW,EAAG,EAAE,QAAQ,QAAQ,CAAW,CAAC,EAE3G,GADc,EAAE,QAAQ,QAAQ,CAAW,IAAM,EAAI,EAAI,KAAK,WAAW,EAAG,EAAE,QAAQ,QAAQ,CAAW,CAAC,GAClE,EAC9C,OAAI,EAAI,EAAU,EAAI,GACG,KAAK,WAAW,EAAG,CAAC,EAAI,GACvB,CAC5B,CAIA,cAAc,EAAQ,CACpB,MAAM,EAAI,KAAK,EACT,EAAK,KAAK,EAAE,QACZ,EAEJ,EAEF,OAAA,EAAI,UAAY,EAAO,MAAK,EAC5B,EAAI,UACJ,EAAG,OAAO,IACR,CAAC,EAAG,IAAM,CACR,MAAM,EAAa,EAAE,QAAQ,sBAAsB,CAAC,EACpD,GAAI,EAAE,OAAO,MAAM,CAAU,GAAK,KAAK,EAAE,OAAO,MAAM,CAAU,EAAE,YAAa,CAC7E,IAAI,EAAO,CAAC,OAAO,UACf,EAAO,OAAO,UACd,EAAQ,EACZ,OAAA,EAAG,UAAU,QACX,CAAC,EAAG,IAAO,CACT,EAAE,QAAS,GAAM,CACX,EAAE,OAAO,MAAM,CAAE,GAAK,EAAE,OAAO,MAAM,CAAE,EAAE,cAC3C,EAAO,KAAK,IAAI,EAAG,CAAI,EACvB,EAAO,KAAK,IAAI,EAAG,CAAI,EAE3B,CAAC,CACH,CACZ,EACU,EAAQ,KAAK,IAAI,EAAG,OAAO,CAAC,EAAG,KAAK,IAAI,EAAO,CAAI,EAAI,EAAG,OAAO,CAAC,CAAC,EACnE,EAAI,UAAU,CAAC,EAAI,EAAQ,KAAK,EAAE,OAAO,WAClC,CACT,CACF,CACN,EACW,EAAI,gBAAkB,EAAO,MAAK,EAAK,EAAI,SACpD,CAOA,OAAO,iBAAiB,EAAgB,EAAU,EAAG,CACnD,IAAI,EAAI,EACR,OAAgC,GAAS,QACvC,EAAW,EAAe,YAAY,EAAU,CAAC,GAEnB,GAAS,cACnC,EAAS,YAAY,QACvB,EAAW,EAAe,uBAAuB,CAAQ,IAEtD,EAAiC,GAAS,cAAgB,MAAgB,EAAG,QAChF,EAAW,EAAe,uBAAuB,CAAQ,IAEtD,EAAiC,GAAS,cAAgB,MAAgB,EAAG,SAChF,EAAW,EAAe,uBAAuB,CAAQ,IAGtD,CACT,CASA,kBAAkB,EAAY,EAAY,EAAM,EAAY,CAC1D,MAAM,EAAI,KAAK,EACT,EAAQ,CAAA,EACd,OAAI,EAAW,OAAO,OAAS,GAC7B,EAAW,QAAS,GAAO,CACzB,MAAM,EAAK,CAAA,EACL,EAAK,CAAA,EACX,EAAW,EAAE,QAAQ,CAAC,EAAG,IAAO,CAG5B,EAAE,OAAO,OAAO,CAAC,EAAE,QAAU,IAE7B,EAAG,KAAK,EAAW,OAAO,CAAE,CAAC,EAC7B,EAAG,KAAK,CAAC,EAEb,CAAC,EACD,EAAG,OAAS,GAAK,EAAM,KAErB,EAAW,KAAK,EAAI,EAAM,CAAE,CACtC,CACM,CAAC,EAEI,CACT,CACF,CACA,MAAM,GAAU,6BAChB,MAAM,EAAM,CAKV,YAAY,EAAG,EAAG,CACZ,OAAO,GAAM,UACf,KAAK,EAAI,EAAE,EACX,KAAK,EAAI,EAAE,IAEX,KAAK,EAAI,GAAK,EACd,KAAK,EAAI,GAAK,EAElB,CAIA,UAAU,EAAQ,CAChB,OAAO,EAAO,MAAM,IAAI,CAC1B,CACA,OAAQ,CACN,OAAO,IAAI,GAAM,KAAK,EAAG,KAAK,CAAC,CACjC,CACF,CACA,MAAM,EAAO,CAUX,YAAY,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC5B,KAAK,EAAI,GAAgB,EACzB,KAAK,EAAI,GAAgB,EACzB,KAAK,EAAI,GAAgB,EACzB,KAAK,EAAI,GAAgB,EACzB,KAAK,EAAI,GAAgB,EACzB,KAAK,EAAI,GAAgB,CAC3B,CAIA,OAAO,EAAK,CACV,MAAM,EAAM,EAAM,KAAK,GAAK,IACtB,EAAM,KAAK,IAAI,CAAG,EAClB,EAAM,KAAK,IAAI,CAAG,EACxB,OAAO,KAAK,SAAS,IAAI,GAAO,EAAK,EAAK,CAAC,EAAK,EAAK,EAAG,CAAC,CAAC,CAC5D,CAKA,MAAM,EAAI,EAAI,CACZ,OAAO,KAAK,SAAS,IAAI,GAAO,EAAI,EAAG,EAAG,GAAkB,EAAI,EAAG,CAAC,CAAC,CACvE,CAIA,SAAS,EAAG,CACV,OAAO,IAAI,GACT,KAAK,EAAI,EAAE,EAAI,KAAK,EAAI,EAAE,EAC1B,KAAK,EAAI,EAAE,EAAI,KAAK,EAAI,EAAE,EAC1B,KAAK,EAAI,EAAE,EAAI,KAAK,EAAI,EAAE,EAC1B,KAAK,EAAI,EAAE,EAAI,KAAK,EAAI,EAAE,EAC1B,KAAK,EAAI,EAAE,EAAI,KAAK,EAAI,EAAE,EAAI,KAAK,EACnC,KAAK,EAAI,EAAE,EAAI,KAAK,EAAI,EAAE,EAAI,KAAK,CACzC,CACE,CAIA,MAAM,EAAO,CACX,OAAO,IAAI,GACT,KAAK,EAAI,EAAM,EAAI,KAAK,EAAI,EAAM,EAAI,KAAK,EAC3C,KAAK,EAAI,EAAM,EAAI,KAAK,EAAI,EAAM,EAAI,KAAK,CACjD,CACE,CACF,CACA,MAAM,EAAI,CAOR,YAAY,EAAG,EAAG,EAAG,EAAG,CACtB,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,MAAQ,EACb,KAAK,OAAS,EACd,KAAK,GAAK,EAAI,EACd,KAAK,GAAK,EAAI,CAChB,CACF,CAeA,SAAS,GAAU,EAAG,CACpB,GAAI,CAAC,GAAK,OAAO,GAAM,SAAU,MAAO,CAAC,CAAC,IAAK,EAAG,CAAC,CAAC,EACpD,MAAM,EAAW,CAAA,EACX,EAAK,+BACL,EAAQ,2CACd,IAAI,EACJ,MAAM,EAAU,CAAA,EACV,EAAY,CAAA,EAClB,MAAQ,EAAQ,EAAG,KAAK,CAAC,KAAO,MAC9B,EAAQ,KAAK,EAAM,CAAC,CAAC,EACrB,EAAU,KAAK,EAAM,KAAK,EAE5B,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,MAAM,EAAQ,EAAU,CAAC,EAAI,EAAQ,CAAC,EAAE,OAClC,EAAM,EAAI,EAAI,EAAU,OAAS,EAAU,EAAI,CAAC,EAAI,EAAE,OACtD,EAAW,EAAE,UAAU,EAAO,CAAG,EACjC,EAAO,CAAA,EACb,IAAI,EAEJ,IADA,EAAM,UAAY,GACV,EAAW,EAAM,KAAK,CAAQ,KAAO,MAC3C,EAAK,KAAK,WAAW,EAAS,CAAC,CAAC,CAAC,EAEnC,MAAM,EAAM,EAAQ,CAAC,EAAE,YAAW,EAClC,GAAI,IAAQ,IACV,EAAS,KAAK,CAAC,GAAG,CAAC,UACV,IAAQ,KAAO,IAAQ,KAAO,IAAQ,IAC/C,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EACpC,EAAS,KAAK,CAAC,EAAK,EAAK,CAAC,EAAG,EAAK,EAAI,CAAC,CAAC,CAAC,UAElC,IAAQ,IACjB,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,EAAS,KAAK,CAAC,EAAK,EAAK,CAAC,CAAC,CAAC,UAErB,IAAQ,IACjB,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,EAAS,KAAK,CAAC,EAAK,EAAK,CAAC,CAAC,CAAC,UAErB,IAAQ,IACjB,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EACpC,EAAS,KAAK,CACZ,EACA,EAAK,CAAC,EACN,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,CACpB,CAAS,UAEM,IAAQ,KAAO,IAAQ,IAChC,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EACpC,EAAS,KAAK,CAAC,EAAK,EAAK,CAAC,EAAG,EAAK,EAAI,CAAC,EAAG,EAAK,EAAI,CAAC,EAAG,EAAK,EAAI,CAAC,CAAC,CAAC,UAE5D,IAAQ,IACjB,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EACpC,EAAS,KAAK,CACZ,EACA,EAAK,CAAC,EACN,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,CACpB,CAAS,CAGP,CACA,OAAI,EAAS,SAAW,GACtB,EAAS,KAAK,CAAC,IAAK,EAAG,CAAC,CAAC,EAEpB,CACT,CACA,SAAS,GAAS,EAAK,CACrB,IAAI,EAAO,IAAU,EAAO,IAAU,EAAO,KAAW,EAAO,KAe/D,OAdA,EAAI,QAAS,GAAQ,CACnB,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,GAAK,EACnC,GAAI,EAAI,GAAK,EAAI,OAAQ,CACvB,MAAM,EAAI,EAAI,CAAC,EACT,EAAI,EAAI,EAAI,CAAC,EACf,OAAO,GAAM,UAAY,OAAO,GAAM,WACpC,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GAEzB,CAEJ,CAAC,EACG,IAAS,IACJ,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAC,EAEnC,CAAE,EAAG,EAAM,EAAG,EAAM,MAAO,EAAO,EAAM,OAAQ,EAAO,CAAI,CACpE,CACA,SAAS,GAAY,EAAK,CACxB,OAAO,EAAI,IAAK,GAAQ,EAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CACjD,CACA,SAAS,GAAS,EAAK,CACrB,OAAQ,EAAI,CAAC,EAAC,CACZ,IAAK,IACL,IAAK,IACH,EAAI,CAAC,EAAI,IACT,EAAI,CAAC,EAAI,KAAK,MAAM,CAAC,EACrB,EAAI,CAAC,EAAI,KAAK,MAAM,CAAC,EACrB,MACF,IAAK,IACH,EAAI,CAAC,EAAI,IACT,EAAI,CAAC,EAAI,KAAK,IAAI,CAAC,EACnB,MACF,IAAK,IACH,EAAI,CAAC,EAAI,IACT,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,KAAK,IAAI,CAAC,EACnB,MACF,IAAK,IACH,EAAI,CAAC,EAAI,IACT,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,KAAK,WAAW,CAAC,EAC1B,EAAI,CAAC,EAAI,KAAK,WAAW,CAAC,EAC1B,MACF,IAAK,IACH,EAAI,CAAC,EAAI,IACT,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,KAAK,WAAW,CAAC,EAC1B,EAAI,CAAC,EAAI,KAAK,WAAW,CAAC,EAC1B,KACN,CACE,OAAO,CACT,CACA,SAAS,GAAoB,EAAK,CAChC,IAAI,EAAM,EAAI,OACd,YAAK,IAAM,CAAC,EAAI,EAAM,CAAC,EAAG,EAAI,EAAM,CAAC,CAAC,EAClC,OAAO,QAAQ,EAAI,CAAC,CAAC,GAAK,KAC5B,KAAK,WAAa,CAChB,EAAI,KAAK,IAAI,CAAC,EAAI,EAAI,EAAM,CAAC,EAC7B,EAAI,KAAK,IAAI,CAAC,EAAI,EAAI,EAAM,CAAC,CACnC,GAES,CACT,CACA,SAAS,GAAS,EAAK,CACrB,IAAI,EACA,EAAS,CAAC,CAAG,EACjB,OAAQ,EAAI,CAAC,EAAC,CACZ,IAAK,IACH,YAAK,IAAM,KAAK,MAAQ,CAAC,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EAChC,EACT,IAAK,IACH,EAAI,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,CAAC,EACvB,EAAI,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,CAAC,EACvB,EAAI,CAAC,EAAI,KAAK,IAAI,CAAC,EACnB,EAAI,CAAC,EAAI,KAAK,IAAI,CAAC,EACnB,MACF,IAAK,IACH,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,EAAI,CAAC,EACd,EAAI,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,EAAI,EAAI,CAAC,EAAI,EAAI,EACvC,EAAI,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,EAAI,EAAI,CAAC,EAAI,EAAI,EACvC,EAAI,CAAC,EAAI,KAAK,IAAI,CAAC,EAAI,EAAI,EAAI,EAAI,CAAC,EAAI,EAAI,EAC5C,EAAI,CAAC,EAAI,KAAK,IAAI,CAAC,EAAI,EAAI,EAAI,EAAI,CAAC,EAAI,EAAI,EAC5C,MACF,IAAK,IACH,EAAS,IAAa,EAAK,KAAK,MAAQ,KAAO,EAAK,CAAA,EAAI,CAAG,EAC3D,EAAM,EAAO,CAAC,EACd,KACN,CACE,OAAA,EAAI,CAAC,EAAI,IACT,KAAK,IAAM,CAAC,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EAC1B,KAAK,WAAa,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,CAAC,EAAG,EAAI,EAAI,CAAC,EAAI,EAAI,CAAC,CAAC,EACpD,CACT,CACA,SAAS,GAAU,EAAK,EAAQ,CAC9B,GAAI,IAAW,GAAO,MAAO,GAC7B,QAAS,EAAI,EAAQ,EAAM,EAAI,OAAQ,EAAI,EAAK,EAAE,EAChD,GAAI,EAAI,CAAC,EAAE,CAAC,GAAK,IAAK,OAAO,EAE/B,MAAO,EACT,CACA,SAAS,GAAY,EAAK,EAAK,CAC7B,IAAI,EAAK,KAAK,IAAI,EAAI,CAAC,CAAC,EAAG,EAAK,KAAK,IAAI,EAAI,CAAC,CAAC,EAAG,EAAgB,EAAI,CAAC,EAAI,IAAK,EAAe,EAAI,CAAC,EAAG,EAAY,EAAI,CAAC,EAAG,EAAI,EAAI,CAAC,EAAG,EAAI,EAAI,CAAC,EAAG,EAAI,IAAI,GAAM,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EAAG,EAAI,IAAI,GAAM,EAAG,CAAC,EAAG,EAAa,EAAQ,EAAK,EAAG,EAAG,EAAS,EAAG,EAAG,EAAI,EAAI,EAAW,EAAS,EAAW,EAAW,EAAG,EAAc,EAAO,EAAU,EAAU,EAAI,EAAG,EAAI,EAAS,CAAA,EAAI,EAAI,EAAI,EAAI,EACxX,GAAI,IAAO,GAAK,IAAO,GAAK,EAAE,IAAM,EAAE,GAAK,EAAE,IAAM,EAAE,EACnD,MAAO,CAAC,CAAC,IAAK,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,CAAC,CAAC,EA+C7C,IA7CA,EAAc,IAAI,IAAO,EAAE,EAAI,EAAE,GAAK,GAAI,EAAE,EAAI,EAAE,GAAK,CAAC,EAAE,UAMxD,IAAI,GAAM,EAAG,OAAO,CAAa,CACrC,EACE,EAAS,EAAY,EAAI,EAAY,GAAK,EAAK,GAAM,EAAY,EAAI,EAAY,GAAK,EAAK,GACvF,EAAS,IACX,EAAS,KAAK,KAAK,CAAM,EACzB,EAAK,EAAS,EACd,EAAK,EAAS,GAEhB,EACA,IAAI,GAAM,EAAG,OAAO,CAAa,EAAE,MAAM,EAAI,EAAI,EAAI,CAAE,EAAE,OAAO,CAAC,CAAa,EAC9E,EAAI,EAAE,UAAU,CAAG,EACnB,EAAI,EAAE,UAAU,CAAG,EACnB,EAAI,CAAC,EAAE,EAAI,EAAE,EAAG,EAAE,EAAI,EAAE,CAAC,EACzB,EAAU,EAAE,CAAC,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,EAClC,EAAI,KAAK,KAAK,CAAO,EACrB,EAAE,CAAC,GAAK,EACR,EAAE,CAAC,GAAK,EACR,EAAI,EAAU,EAAI,KAAK,KAAK,EAAI,EAAU,CAAC,EAAI,EAC3C,IAAiB,IACnB,GAAK,IAEP,EAAI,IAAI,IAAO,EAAE,EAAI,EAAE,GAAK,EAAI,EAAI,CAAC,EAAE,CAAC,GAAI,EAAE,EAAI,EAAE,GAAK,EAAI,EAAI,EAAE,CAAC,CAAC,EACrE,EAAK,IAAI,GAAM,EAAE,EAAI,EAAE,EAAG,EAAE,EAAI,EAAE,CAAC,EACnC,EAAK,IAAI,GAAM,EAAE,EAAI,EAAE,EAAG,EAAE,EAAI,EAAE,CAAC,EACnC,EAAY,KAAK,KAAK,EAAG,EAAI,KAAK,KAAK,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,CAAC,CAAC,EAC7D,EAAG,EAAI,IAAG,GAAa,IAC3B,EAAU,KAAK,KAAK,EAAG,EAAI,KAAK,KAAK,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,CAAC,CAAC,EAC3D,EAAG,EAAI,IAAG,GAAW,IACrB,GAAa,EAAY,IAC3B,GAAW,EAAI,KAAK,IAElB,CAAC,GAAa,EAAY,IAC5B,GAAW,EAAI,KAAK,IAEtB,EAAY,KAAK,KAAK,KAAK,IAAI,EAAY,CAAO,EAAI,EAAI,KAAK,EAAE,EACjE,EAAe,CAAA,EACf,EAAQ,EACR,GAAa,EAAU,GAAa,EACpC,EAAI,EAAI,KAAK,IAAI,EAAY,CAAC,EAAI,EAC7B,EAAI,EAAG,GAAK,EAAW,IAC1B,EAAW,KAAK,IAAI,CAAK,EACzB,EAAW,KAAK,IAAI,CAAK,EACzB,EAAK,IAAI,GAAM,EAAE,EAAI,EAAU,EAAE,EAAI,CAAQ,EAC7C,EAAa,CAAC,EAAI,CAChB,IAAI,GAAM,EAAG,EAAI,EAAI,EAAU,EAAG,EAAI,EAAI,CAAQ,EAClD,EACA,IAAI,GAAM,EAAG,EAAI,EAAI,EAAU,EAAG,EAAI,EAAI,CAAQ,CACxD,EACI,GAAS,EAMX,IAJA,EAAa,CAAC,EAAE,CAAC,EAAI,EAAa,CAAC,EAAE,CAAC,EAAE,MAAK,EAC7C,EAAa,EAAa,OAAS,CAAC,EAAE,CAAC,EAAI,EAAa,EAAa,OAAS,CAAC,EAAE,CAAC,EAAE,MAAK,EACzF,EACA,IAAI,GAAM,EAAG,OAAO,CAAa,EAAE,MAAM,EAAI,CAAE,EAAE,OAAO,CAAC,CAAa,EACjE,EAAI,EAAG,EAAK,EAAa,OAAQ,EAAI,EAAI,IAC5C,EAAa,CAAC,EAAE,CAAC,EAAI,EAAa,CAAC,EAAE,CAAC,EAAE,UAAU,CAAG,EACrD,EAAa,CAAC,EAAE,CAAC,EAAI,EAAa,CAAC,EAAE,CAAC,EAAE,UAAU,CAAG,EACrD,EAAa,CAAC,EAAE,CAAC,EAAI,EAAa,CAAC,EAAE,CAAC,EAAE,UAAU,CAAG,EAEvD,IAAK,EAAI,EAAG,EAAK,EAAa,OAAQ,EAAI,EAAI,IAC5C,EAAK,EAAa,EAAI,CAAC,EAAE,CAAC,EAC1B,EAAK,EAAG,EACR,EAAK,EAAG,EACR,EAAK,EAAa,CAAC,EAAE,CAAC,EACtB,EAAK,EAAG,EACR,EAAK,EAAG,EACR,EAAK,EAAa,CAAC,EAAE,CAAC,EACtB,EAAI,EAAG,EACP,EAAI,EAAG,EACP,EAAO,KAAK,CAAC,IAAK,EAAI,EAAI,EAAI,EAAI,EAAG,CAAC,CAAC,EAEzC,OAAO,CACT,CACA,SAAS,GAAY,EAAU,EAAc,EAAkB,EAAS,EAAa,EAAiB,CAIpG,QAHI,EAAe,EAAS,MAAM,EAAc,GAAoB,MAAM,EACtE,EAAc,EAAQ,MAAM,EAAa,GAAmB,MAAM,EAClE,EAAI,EAAG,EAAW,CAAE,IAAK,CAAC,EAAG,CAAC,EAAG,MAAO,CAAC,EAAG,CAAC,CAAC,EAAI,EAAU,CAAE,IAAK,CAAC,EAAG,CAAC,EAAG,MAAO,CAAC,EAAG,CAAC,CAAC,EAE1F,EAAa,CAAC,EAAI,GAAS,KAAK,EAAU,EAAa,CAAC,CAAC,EACzD,EAAY,CAAC,EAAI,GAAS,KAAK,EAAS,EAAY,CAAC,CAAC,EAClD,EAAa,CAAC,EAAE,CAAC,GAAK,EAAY,CAAC,EAAE,CAAC,GAAK,EAAa,CAAC,EAAE,CAAC,GAAK,KAAO,EAAa,CAAC,EAAE,CAAC,GAAK,MAAQ,EAAa,CAAC,EAAE,CAAC,GAAK,EAAY,CAAC,EAAE,CAAC,GAAK,EAAa,CAAC,EAAE,CAAC,GAAK,EAAY,CAAC,EAAE,CAAC,IACzL,MAAM,UAAU,OAAO,MACrB,EAEA,CAAC,EAAG,CAAC,EAAE,OAEL,GAAS,KAAK,EAAU,EAAa,CAAC,CAAC,CACjD,CACA,EACM,MAAM,UAAU,OAAO,MACrB,EAEA,CAAC,EAAG,CAAC,EAAE,OAEL,GAAS,KAAK,EAAS,EAAY,CAAC,CAAC,CAC/C,CACA,IAEM,EAAa,CAAC,EACd,GAAoB,KAClB,EACA,EAAa,CAAC,CACtB,EACM,EAAY,CAAC,EACb,GAAoB,KAClB,EACA,EAAY,CAAC,CACrB,GAEQ,IAAE,GAAK,EAAa,QAAU,GAAK,EAAY,SAC/C,GAAK,EAAa,QACpB,EAAa,KAAK,CAChB,IACA,EAAS,IAAI,CAAC,EACd,EAAS,IAAI,CAAC,EACd,EAAS,IAAI,CAAC,EACd,EAAS,IAAI,CAAC,EACd,EAAS,IAAI,CAAC,EACd,EAAS,IAAI,CAAC,CACtB,CAAO,EAEC,GAAK,EAAY,QACnB,EAAY,KAAK,CACf,IACA,EAAQ,IAAI,CAAC,EACb,EAAQ,IAAI,CAAC,EACb,EAAQ,IAAI,CAAC,EACb,EAAQ,IAAI,CAAC,EACb,EAAQ,IAAI,CAAC,EACb,EAAQ,IAAI,CAAC,CACrB,CAAO,EAGL,MAAO,CAAE,MAAO,EAAc,KAAM,CAAW,CACjD,CACA,SAAS,GAAiB,EAAO,EAAK,CAQpC,QAPI,EAAW,GAAU,CAAK,EAC1B,EAAU,GAAU,CAAG,EACvB,EAAe,EACf,EAAc,EACd,EAAmB,GACnB,EAAkB,GAClB,EAEE,EAAA,IAAiB,IAAS,IAAgB,KADnC,CAUX,GARA,EAAmB,GACjB,EACA,IAAiB,GAAQ,GAAQ,EAAe,CACtD,EACI,EAAkB,GAChB,EACA,IAAgB,GAAQ,GAAQ,EAAc,CACpD,EACQ,IAAiB,GAAO,CAC1B,MAAM,EAAO,GAEX,EAAO,KACf,EACU,EAAK,QAAU,GAAK,EAAK,OAAS,EACpC,EAAe,EAAS,KAAK,EAAS,CAAC,CAAC,EAAI,EAE5C,EAAe,EAAS,KAAK,CAC3B,IACA,EAAK,EAAI,EAAK,MAAQ,EACtB,EAAK,EAAI,EAAK,OAAS,CACjC,CAAS,EAAI,CAET,CACA,GAAI,IAAgB,GAAO,CACzB,MAAM,EAAO,GAEX,EAAO,IACf,EACU,EAAK,QAAU,GAAK,EAAK,OAAS,EACpC,EAAc,EAAQ,KAAK,EAAQ,CAAC,CAAC,EAAI,EAEzC,EAAc,EAAQ,KAAK,CACzB,IACA,EAAK,EAAI,EAAK,MAAQ,EACtB,EAAK,EAAI,EAAK,OAAS,CACjC,CAAS,EAAI,CAET,CACA,EAAS,GACP,EACA,EACA,EACA,EACA,EACA,CACN,EACI,EAAW,EAAS,MAAM,EAAG,CAAY,EAAE,OACzC,EAAO,MACP,IAAqB,GAAQ,CAAA,EAAK,EAAS,MAAM,CAAgB,CACvE,EACI,EAAU,EAAQ,MAAM,EAAG,CAAW,EAAE,OACtC,EAAO,KACP,IAAoB,GAAQ,CAAA,EAAK,EAAQ,MAAM,CAAe,CACpE,EACI,EAAe,IAAqB,GAAQ,GAAQ,EAAe,EAAO,MAAM,OAChF,EAAc,IAAoB,GAAQ,GAAQ,EAAc,EAAO,KAAK,MAC9E,CACA,MAAO,CAAE,MAAO,EAAU,KAAM,CAAO,CACzC,CACA,SAAS,GAAW,EAAO,EAAK,CAC9B,IAAI,EAAS,GAAiB,EAAO,CAAG,EACpC,EAAW,EAAO,MAClB,EAAU,EAAO,KACrB,OAAO,SAAS,EAAK,CACnB,IAAI,EAAS,EAAS,IAAI,SAAS,EAAM,EAAK,CAC5C,OAAO,EAAQ,CAAG,EAAE,IAAI,SAAS,EAAI,EAAO,CAC1C,OAAI,IAAU,EAAU,EACjB,EAAK,CAAK,GAAK,EAAQ,CAAG,EAAE,CAAK,EAAI,EAAK,CAAK,GAAK,CAC7D,CAAC,CACH,CAAC,EACD,OAAO,GAAY,CAAM,CAC3B,CACF,CACA,IAAI,GAAc,KACd,GAAe,KACnB,SAAS,GAAiB,EAAG,EAAG,CAC9B,MAAM,EAAM,IAAI,MAAM,CAAC,EACvB,GAAI,CAAC,EAAY,UAAS,EAAI,CAC5B,MAAM,EAAM,GAAU,CAAC,EACjB,EAAO,GAAS,CAAG,EACnB,EAAK,EAAK,EAAI,EAAK,MAAQ,EAC3B,EAAK,EAAK,EAAI,EAAK,OAAS,EAClC,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,EAAI,CAAC,EAAI,CAAE,EAAG,EAAI,EAAG,CAAE,EACnD,OAAO,CACT,CACK,KACH,GACA,SAAS,gBAAgB,6BAA8B,KAAK,EAC5D,GAAY,aAAa,QAAS,GAAG,EACrC,GAAY,aAAa,SAAU,GAAG,EACtC,GAAY,aACV,QACA,2EACN,EACI,GACA,SAAS,gBAAgB,6BAA8B,MAAM,EAC7D,GAAY,YAAY,EAAY,EACpC,SAAS,KAAK,YAAY,EAAW,GAEvC,GAAa,aAAa,IAAK,GAAK,MAAM,EAC1C,IAAI,EAAM,EACV,GAAI,CACF,EAAM,GAAa,eAAc,CACnC,MAAY,CACV,EAAM,CACR,CACA,GAAI,CAAC,GAAO,CAAC,SAAS,CAAG,EAAG,CAC1B,MAAM,EAAM,GAAU,CAAC,EACjB,EAAO,GAAS,CAAG,EACnB,EAAK,EAAK,EAAI,EAAK,MAAQ,EAC3B,EAAK,EAAK,EAAI,EAAK,OAAS,EAClC,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,EAAI,CAAC,EAAI,CAAE,EAAG,EAAI,EAAG,CAAE,EACnD,OAAO,CACT,CACA,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,GAAI,CACF,MAAM,EAAI,GAAa,iBAAiB,EAAI,EAAI,CAAG,EACnD,EAAI,CAAC,EAAI,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,CAAC,CAC3B,MAAY,CACV,EAAI,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,CACvB,CAEF,OAAO,CACT,CACA,SAAS,GAAc,EAAO,EAAK,EAAI,GAAI,CACzC,MAAM,EAAU,GAAiB,EAAO,CAAC,EACnC,EAAQ,GAAiB,EAAK,CAAC,EACrC,IAAI,EAAa,EACb,EAAW,IACf,QAAS,EAAM,EAAG,EAAM,EAAG,IAAO,CAChC,IAAI,EAAO,EACX,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,GAAS,EAAI,GAAO,CAAC,EACzB,EAAI,EAAM,CAAC,EACX,EAAK,EAAE,EAAI,EAAE,EACb,EAAK,EAAE,EAAI,EAAE,EAEnB,GADA,GAAQ,EAAK,EAAK,EAAK,EACnB,GAAQ,EAAU,KACxB,CACI,EAAO,IACT,EAAW,EACX,EAAa,EAEjB,CACA,MAAM,EAAU,IAAI,MAAM,CAAC,EAC3B,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,EAAQ,CAAC,EAAI,GAAS,EAAI,GAAc,CAAC,EAE3C,OAAO,SAAS,EAAK,CACnB,IAAI,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,EAAQ,CAAC,EACb,EAAI,EAAM,CAAC,EACX,EAAI,EAAE,GAAK,EAAE,EAAI,EAAE,GAAK,EACxB,EAAI,EAAE,GAAK,EAAE,EAAI,EAAE,GAAK,EAC9B,IAAQ,IAAM,EAAI,IAAM,KAAO,EAAE,QAAQ,CAAC,EAAI,IAAM,EAAE,QAAQ,CAAC,EAAI,GACrE,CACA,OAAO,EAAM,GACf,CACF,CACA,SAAS,GAAU,EAAG,CACpB,MAAO,CAAC,KAAK,IAAI,EAAI,KAAK,EAAE,EAAI,EAAI,EACtC,CACA,IAAI,GAAiB,GACrB,SAAS,GAAiB,EAAI,CAC5B,GAAiB,OAAO,GAAO,WAAa,EAAK,EACnD,CACA,SAAS,GAAW,EAAK,CACvB,GAAI,CAAC,GAAO,OAAO,GAAQ,SAAU,OAAO,KAC5C,GAAI,EAAI,CAAC,IAAM,IAAK,CAClB,IAAI,EAAM,EAAI,MAAM,CAAC,EACjB,EAAI,SAAW,IACjB,EAAM,EAAI,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,CAAC,EAAI,EAAI,CAAC,GAC1D,MAAM,EAAI,SAAS,EAAK,EAAE,EAC1B,MAAO,CAAC,GAAK,GAAK,IAAK,GAAK,EAAI,IAAK,EAAI,IAAK,CAAC,CACjD,CACA,MAAM,EAAI,EAAI,MACZ,kEACJ,EACE,OAAI,EAAU,CAAC,CAAC,EAAE,CAAC,EAAG,CAAC,EAAE,CAAC,EAAG,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,IAAM,OAAS,CAAC,EAAE,CAAC,EAAI,CAAC,EACxD,IACT,CACA,SAAS,GAAiB,EAAM,EAAI,EAAK,CACvC,MAAO,QAAQ,KAAK,MAAM,EAAK,CAAC,GAAK,EAAG,CAAC,EAAI,EAAK,CAAC,GAAK,CAAG,CAAC,IAAI,KAAK,MAAM,EAAK,CAAC,GAAK,EAAG,CAAC,EAAI,EAAK,CAAC,GAAK,CAAG,CAAC,IAAI,KAAK,MAAM,EAAK,CAAC,GAAK,EAAG,CAAC,EAAI,EAAK,CAAC,GAAK,CAAG,CAAC,IAAI,EAAK,CAAC,GAAK,EAAG,CAAC,EAAI,EAAK,CAAC,GAAK,CAAG,GACrM,CACA,MAAM,EAAmB,CAMvB,YAAY,EAAS,EAAU,EAAO,CACpC,KAAK,GAAK,EACV,KAAK,SAAW,GAA8B,IAC9C,KAAK,MAAQ,GAAS,EACtB,KAAK,YAAc,KACnB,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,eAAiB,WACtB,KAAK,SAAW,KAChB,KAAK,UAAY,KACjB,KAAK,QAAU,KACf,KAAK,MAAQ,KACb,KAAK,MAAQ,KACb,KAAK,WAAa,EACpB,CAKA,KAAK,EAAI,CACP,OAAI,OAAO,GAAO,aAAY,KAAK,QAAU,GAC7C,KAAK,UAAS,EACP,IACT,CAIA,KAAK,EAAI,CACP,YAAK,YAAc,EACnB,KAAK,UAAS,EACP,IACT,CAcA,KAAK,EAAG,EAAW,EAAQ,CACzB,YAAK,YAAc,EACf,IAAW,KAAK,eAAiB,GACrC,KAAK,UAAY,GAAU,KAC3B,KAAK,UAAS,EACP,IACT,CAIA,MAAM,EAAI,CACR,YAAK,SAAW,EAChB,KAAK,UAAS,EACP,IACT,CAIA,OAAO,EAAI,CACT,YAAK,UAAY,EACjB,KAAK,UAAS,EACP,IACT,CAKA,QAAQ,EAAU,EAAO,CACvB,MAAM,EAAO,IAAI,GAAmB,KAAK,GAAI,EAAU,CAAK,EAC5D,YAAK,MAAQ,EACb,EAAK,MAAQ,KAAK,OAAS,KACpB,CACT,CACA,WAAY,CACV,MAAM,EAAO,KAAK,OAAS,KACtB,EAAK,aACR,EAAK,WAAa,GAClB,eAAe,IAAM,EAAK,cAAa,CAAE,EAE7C,CACA,eAAgB,CACd,MAAM,EAAQ,CAAA,EACd,IAAI,EAAI,KACR,KAAO,GACL,EAAM,KAAK,CAAC,EACZ,EAAI,EAAE,MAER,IAAI,EAAkB,EACtB,EAAM,QAAS,GAAW,CACxB,GAAmB,EAAO,MAC1B,EAAO,SAAS,CAAe,EAC/B,GAAmB,EAAO,QAC5B,CAAC,CACH,CAIA,SAAS,EAAY,CACnB,MAAM,EAAK,KAAK,GACV,EAAW,KAAK,SACtB,GAAI,GAAY,EAAG,CACjB,MAAM,EAAQ,IAAM,CACd,KAAK,aAAa,EAAG,KAAK,KAAK,WAAW,EAC1C,KAAK,aAAa,EAAG,KAAK,KAAK,WAAa,KAAK,WAAW,EAC5D,KAAK,UAAU,KAAK,SAAS,KAAK,CAAE,CAC1C,EACI,EAAa,EACf,WAAW,EAAO,CAAU,EAE5B,EAAK,EAEP,MACF,CACA,MAAM,EAAM,IAAM,CAChB,MAAM,EAEJ,CAAA,EAEI,EAEJ,CAAA,EAEI,EAEJ,CAAA,EAEF,GAAI,KAAK,YACP,UAAW,KAAO,OAAO,KAAK,KAAK,WAAW,EAAG,CAC/C,MAAM,EAAU,EAAG,KAAK,CAAG,EAC3B,EAAU,CAAG,EAAI,EACjB,MAAM,EAAK,GAAW,CAAO,EACvB,EAAK,GAAW,OAAO,KAAK,YAAY,CAAG,CAAC,CAAC,EAC/C,GAAM,IACR,EAAW,CAAG,EAAI,EAClB,EAAS,CAAG,EAAI,EAEpB,CAEF,IAAI,EAAU,KACd,GAAI,KAAK,YAAa,CACpB,MAAM,EAAW,EAAG,KAAK,GAAG,GAAK,GACjC,GAAI,CACF,EAAU,KAAK,iBAAmB,WAAa,GAAc,EAAU,KAAK,WAAW,EAAI,GAAW,EAAU,KAAK,WAAW,CAClI,MAAY,CACV,EAAU,IACZ,CACF,CACA,MAAM,EAAQ,YAAY,IAAG,EACvB,EAAS,KAAK,SAAW,GACzB,EAAQ,GAAQ,CACpB,MAAM,EAAU,EAAM,EAChB,EAAS,KAAK,IAAI,EAAU,EAAU,CAAC,EACvC,EAAM,EAAO,CAAM,EACzB,GAAI,KAAK,YACP,GAAI,GAAU,EACZ,EAAG,KAAK,KAAK,WAAW,MACnB,CACL,MAAM,EAEJ,CAAA,EAEF,UAAW,KAAO,OAAO,KAAK,KAAK,WAAW,EAC5C,GAAI,EAAW,CAAG,GAAK,EAAS,CAAG,EACjC,EAAQ,CAAG,EAAI,GACb,EAAW,CAAG,EACd,EAAS,CAAG,EACZ,CAClB,MACqB,CACL,MAAM,EAAO,WAAW,EAAU,CAAG,CAAC,EAChC,EAAK,WAAW,KAAK,YAAY,CAAG,CAAC,EACvC,CAAC,MAAM,CAAI,GAAK,CAAC,MAAM,CAAE,IAC3B,EAAQ,CAAG,EAAI,GAAQ,EAAK,GAAQ,EAExC,CAEF,EAAG,KAAK,CAAO,CACjB,CAEE,GAAW,EAAS,GACtB,EAAG,KACD,IAEA,EAAQ,CAAG,CACvB,EAEY,KAAK,WAAW,KAAK,UAAU,CAAG,EAClC,EAAS,EACX,EAAY,sBAAsB,CAAI,GAElC,KAAK,aACP,EAAG,KAAK,IAAK,KAAK,WAAa,KAAK,WAAW,EAE7C,KAAK,UAAU,KAAK,SAAS,KAAK,CAAE,EAE5C,EACA,EAAY,sBAAsB,CAAI,CACxC,EACI,EAAa,EACf,WAAW,EAAK,CAAU,EAE1B,EAAG,CAEP,CACF,CACA,SAAS,GAAwB,EAAc,CAC7C,EAAa,UAAU,QAAU,SAAS,EAAU,EAAO,CACzD,OAAO,IAAI,GAAmB,KAAM,EAAU,CAAK,CACrD,CACF,CACA,SAAS,GAAc,EAAG,CACxB,MAAO,CAAC,KAAK,IAAI,EAAI,KAAK,EAAE,EAAI,EAAI,EACtC,CACA,SAAS,GAAY,EAAI,EAAI,EAAI,EAAI,CACnC,EAAK,KAAK,IAAI,KAAK,IAAI,EAAI,CAAC,EAAG,CAAC,EAChC,EAAK,KAAK,IAAI,KAAK,IAAI,EAAI,CAAC,EAAG,CAAC,EAChC,MAAM,EAAK,EAAI,EACT,EAAK,GAAK,EAAK,GAAM,EACrB,EAAK,EAAI,EAAK,EACd,EAAK,EAAI,EACT,EAAK,GAAK,EAAK,GAAM,EACrB,EAAK,EAAI,EAAK,EACd,EAAW,KAAQ,EAAK,EAAI,GAAM,EAAI,GAAM,EAC5C,EAAW,KAAQ,EAAK,EAAI,GAAM,EAAI,GAAM,EAC5C,EAAU,GAAM,CACpB,IAAI,EAAK,EACL,EAAK,EACL,EAAI,EACR,GAAI,EAAI,EAAI,OAAO,EACnB,GAAI,EAAI,EAAI,OAAO,EACnB,KAAO,EAAK,GAAI,CACd,MAAM,EAAK,EAAQ,CAAC,EACpB,GAAI,KAAK,IAAI,EAAK,CAAC,EAAI,KAAM,OAAO,EAChC,EAAI,EAAI,EAAK,EACZ,EAAK,EACV,GAAK,EAAK,GAAM,CAClB,CACA,OAAO,CACT,EACA,OAAQ,GAAM,GAAK,EAAI,EAAI,GAAK,EAAI,EAAI,EAAQ,EAAO,CAAC,CAAC,CAC3D,CACA,MAAM,GAA2B,IAAI,IAC/B,GAAU,GAAM,EACtB,GAAS,IAAI,SAAU,EAAM,EAC7B,GAAS,IAAI,gBAAiB,EAAa,EAC3C,GAAS,IAAI,aAAe,GAAM,EAAI,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,CAAC,EAC/D,GAAS,IAAI,cAAgB,GAAM,KAAK,IAAI,EAAI,KAAK,GAAK,CAAC,CAAC,EAC5D,GAAS,IAAI,aAAe,GAAM,EAAI,CAAC,EACvC,GAAS,IAAI,cAAgB,GAAM,GAAK,EAAI,IAAM,EAAI,EAAE,EACxD,GAAS,IACP,gBACC,GAAM,EAAI,GAAM,EAAI,EAAI,EAAI,EAAI,KAAK,IAAI,GAAK,EAAI,EAAG,CAAC,EAAI,CAC7D,EACA,GAAS,IAAI,cAAgB,GAAM,EAAI,EAAI,CAAC,EAC5C,GAAS,IAAI,eAAiB,GAAM,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,CAAC,EAC1D,GAAS,IACP,iBACC,GAAM,EAAI,GAAM,EAAI,EAAI,EAAI,EAAI,EAAI,KAAK,IAAI,GAAK,EAAI,EAAG,CAAC,EAAI,CACjE,EACA,GAAS,IAAI,cAAgB,GAGpB,EAAI,QAAK,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,QAAK,KAAK,IAAI,EAAI,EAAG,CAAC,CAC5D,EACD,GAAS,IAAI,gBAAkB,GAAM,CAEnC,MAAM,EAAK,UACX,OAAO,EAAI,GAAM,KAAK,IAAI,EAAI,EAAG,CAAC,IAAM,EAAK,GAAK,EAAI,EAAI,GAAM,GAAK,KAAK,IAAI,EAAI,EAAI,EAAG,CAAC,IAAM,EAAK,IAAM,EAAI,EAAI,GAAK,GAAM,GAAK,CACrI,CAAC,EACD,SAAS,GAAe,EAAO,EAAI,CAC7B,OAAO,GAAU,UAAY,GAAS,OAAO,GAAO,YACtD,GAAS,IAAI,EAAO,CAAE,CAE1B,CACA,SAAS,GAAc,EAAG,CACxB,OAAO,MAAM,QAAQ,CAAC,GAAK,EAAE,SAAW,GAAK,EAAE,MAAO,GAAM,OAAO,GAAM,QAAQ,CACnF,CACA,SAAS,GAAc,EAAO,CAC5B,OAAI,OAAO,GAAU,WAAmB,GAAY,CAAK,EACrD,GAAc,CAAK,EACd,GAAY,EAAM,CAAC,EAAG,EAAM,CAAC,EAAG,EAAM,CAAC,EAAG,EAAM,CAAC,CAAC,EACvD,OAAO,GAAU,UAAY,GAAS,IAAI,CAAK,EAC1C,GAEL,GAAS,IAAI,CAAK,CACxB,EAES,EACT,CACA,SAAS,GAAY,EAAI,CACvB,OAAQ,GAAM,CACZ,MAAM,EAAI,EAAG,CAAC,EACd,OAAO,OAAO,GAAM,UAAY,SAAS,CAAC,EAAI,EAAI,CACpD,CACF,CACA,MAAM,GAAU,6BAChB,SAAS,GAAe,EAAG,CACzB,MAAO,GAAI,KAAK,IAAI,EAAI,EAAG,CAAC,CAC9B,CACA,SAAS,GAAc,EAAG,CAGxB,MAAO,GAAI,QAAK,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,QAAK,KAAK,IAAI,EAAI,EAAG,CAAC,CAC7D,CACA,IAAI,GAAoB,KACxB,SAAS,IAAuB,CAC9B,GAAI,CAAC,EAAY,UAAS,EAAI,MAAO,GACrC,GAAI,CACF,OAAK,KACH,GAAoB,OAAO,WAAW,kCAAkC,GAEnE,CAAC,CAAC,GAAkB,OAC7B,MAAY,CACV,MAAO,EACT,CACF,CACA,SAAS,GAAuB,EAAI,EAAG,EAAG,CAExC,GADI,CAAC,EAAY,UAAS,GACtB,EAAE,QAAQ,aAAe,EAAE,QAAQ,QAAS,MAAO,GACvD,MAAM,EAAU,EAAE,OAAO,MAAM,WAC/B,GAAI,CAAC,GAAW,EAAQ,UAAY,GAAO,MAAO,GAClD,MAAM,EAAY,EAAE,OAAO,MAAM,KAIjC,GAHI,IAAc,QAAU,IAAc,QAAU,IAAc,aAG9D,EAAE,EAAE,OAAO,UAAY,GAAI,MAAO,GACtC,MAAM,GAAa,EAAQ,OAAS,KAAO,EACrC,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,EAAI,EAAE,OAAO,SAAS,CAAC,EAExD,GADS,EAAI,KAAK,KAAK,EAAI,CAAM,GACV,EAEvB,EADO,EAAG,KACG,MACnB,EAAM,QAAU,IAChB,IAAI,EAAc,KAClB,MAAM,EAAQ,GAAQ,CAChB,IAAgB,OAAM,EAAc,GACpC,EAAM,GAAe,EACvB,EAAM,QAAU,GAEhB,EAAY,sBAAsB,CAAI,CAE1C,EACA,OAAA,EAAY,sBAAsB,CAAI,EAC/B,EACT,CACA,SAAS,GAAqB,EAAG,CAC/B,MAAM,EAAO,EAAE,OAAO,MAAM,WACvB,IACD,EAAK,uBAAyB,IAAS,GAAoB,IAC7D,EAAK,QAAU,GACX,EAAK,mBAAkB,EAAK,iBAAiB,QAAU,KAE7D,GAAiB,GAAc,EAAK,MAAM,CAAC,EAC7C,CACA,SAAS,GAAe,EAAM,CAC5B,MAAM,EAAQ,EAAK,MACb,EAAQ,EAAK,OAAS,EACtB,EAAY,OAAO,EAAK,WAAc,SAAW,EAAK,UAAY,GAClE,EAAM,EAAK,KAAO,EAClB,EAAM,EAAK,KAAO,EAClB,EAAa,EAAK,YAAc,EAChC,EAAW,EAAK,UAAY,EAC5B,EAAiB,EAAK,gBAAkB,EAC9C,OAAQ,EAAK,CACX,IAAK,OACH,MAAO,GACT,IAAK,WACH,OAAQ,EAAM,GAAO,EACvB,IAAK,QACH,OAAO,EAAa,EAAY,EAAQ,GAAY,EAAY,GAClE,IAAK,WACH,OAAO,EAAiB,GAAa,EAAQ,GAE/C,QACE,OAAO,EAAQ,CACrB,CACA,CACA,MAAM,EAAW,CAKf,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,CACb,CAOA,YAAY,EAAI,EAAM,EAAI,EAAO,CAC/B,EAAG,KAAK,CAAI,EAAE,QAAQ,CAAK,EAAE,KAAK,CAAE,CACtC,CASA,cAAc,EAAI,EAAO,EAAQ,EAAI,CACnC,EAAG,KAAK,CACN,QAAS,CACf,CAAK,EAAE,QAAQ,CAAK,EAAE,KAAK,CACrB,QAAS,CACf,CAAK,EAAE,MAAM,IAAM,CACb,EAAE,CACJ,CAAC,CACH,CAWA,WAAW,EAAI,CAAE,MAAA,EAAO,MAAA,EAAQ,EAAG,WAAA,CAAU,EAAI,CAC/C,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAY,UAAS,GAAM,CAAC,EAAE,QAAQ,eAAiB,EAAQ,EAAG,CACjE,GAAY,EAAU,EAC1B,MACF,CAEA,MAAM,EADO,EAAG,KACG,MACnB,EAAM,aAAe,WACrB,EAAM,gBAAkB,SACxB,EAAM,UAAY,WAClB,EAAM,QAAU,IAChB,MAAM,EAAU,YAAY,IAAG,EAAK,EAC9B,EAAQ,GAAQ,CACpB,GAAI,EAAE,QAAQ,YAAa,OAC3B,MAAM,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAM,GAAW,CAAK,CAAC,EAC1D,EAAM,UAAY,SAAS,GAAc,CAAC,CAAC,IAC3C,EAAM,QAAU,OAAO,KAAK,IAAI,EAAG,EAAI,CAAC,CAAC,EACrC,EAAI,EACN,EAAY,sBAAsB,CAAI,GAEtC,EAAM,UAAY,GAClB,EAAM,gBAAkB,GACxB,EAAM,aAAe,GACrB,EAAM,QAAU,GACZ,GAAY,EAAU,EAE9B,EACA,EAAY,sBAAsB,CAAI,CACxC,CAUA,YAAY,EAAI,EAAM,EAAI,EAAO,EAAI,EAAQ,EAAG,CAC9C,EAAG,KAAK,CAAI,EAAE,QAAQ,EAAO,CAAK,EAAE,KAAK,CAAE,EAAE,MAAM,IAAM,EAAE,CAAE,CAC/D,CAIA,sBAAsB,EAAQ,CAC5B,KAAM,CACJ,GAAA,EACA,UAAA,EACA,EAAA,EACA,KAAA,EACA,SAAA,EACA,OAAA,EACA,aAAA,EACA,MAAA,EACA,MAAA,EACA,YAAA,CACN,EAAQ,EACE,EAAK,KACL,EAAI,KAAK,EACf,IAAI,EAAc,EACd,EAAE,OAAO,MAAM,WAAW,iBAAiB,UAC7C,EAAc,EAAE,OAAO,MAAM,WAAW,iBAAiB,OAEvD,EAAE,OAAO,MAAM,WAAW,iBAAiB,SAAW,EAAE,QAAQ,aAAe,EAAE,OAAO,MAAM,OAAS,QACzG,EAAc,GAEhB,EAAG,SACD,EACA,EACA,EACA,EAAE,OAAO,MAAM,OAAS,QAAU,CAAC,EAAE,QAAQ,YAAc,SAAW,EACtE,EACA,EACA,EACA,EAAQ,EACR,EACA,CACN,CACE,CAeA,WAAW,EAAI,CACb,MAAM,EAAI,KAAK,EAGf,GAFA,EAAG,KAAK,UAAU,IAAI,2BAA2B,EACjD,EAAE,QAAQ,gBAAgB,KAAK,CAAE,GAAI,EAAG,IAAI,CAAE,EAC1C,CAAC,EAAY,UAAS,GAAM,CAAC,EAAE,QAAQ,cAAe,CACxD,KAAK,mBAAmB,CAAE,EAC1B,MACF,CACK,EAAE,QAAQ,sBACb,EAAE,QAAQ,oBAAsB,GAChC,EAAY,sBAAsB,IAAM,CAClC,EAAE,QAAQ,cACd,EAAE,QAAQ,oBAAsB,GAChC,KAAK,mBAAmB,CAAE,EAC5B,CAAC,EAEL,CACA,qBAAsB,CACpB,KAAK,EAAE,QAAQ,gBAAgB,QAAS,GAAM,CAC5C,GAAI,EAAE,mBAAqB,CAAC,KAAK,EAAE,QAAQ,eAAgB,OAC3D,MAAM,EAAM,EAAE,GACd,EAAI,UAAU,OAAO,2BAA2B,EAChD,EAAI,UAAU,IAAI,iCAAiC,CACrD,CAAC,CACH,CAIA,mBAAmB,EAAI,CACrB,MAAM,EAAI,KAAK,EACX,EAAE,QAAQ,iBACd,EAAE,QAAQ,eAAiB,GAC3B,KAAK,oBAAmB,EACpB,OAAO,EAAE,OAAO,MAAM,OAAO,cAAiB,YAChD,EAAE,OAAO,MAAM,OAAO,aAAa,KAAK,IAAK,CAAE,GAAA,EAAI,EAAA,CAAC,CAAE,EAE1D,CAgBA,YAAY,EAAI,CAAE,UAAA,EAAW,EAAA,EAAG,OAAA,EAAQ,OAAA,EAAQ,MAAA,EAAO,MAAA,EAAO,KAAM,CAAS,EAAI,CAC/E,MAAM,EAAI,KAAK,EACT,EAAK,KACL,EAAW,IAAM,CACjB,GAAU,EAAE,QAAQ,eACtB,EAAG,mBAAmB,CAAE,EAE1B,EAAG,oBAAmB,CACxB,EACA,GAAI,CAAC,EAAY,UAAS,GAAM,CAAC,EAAE,QAAQ,eAAiB,EAAQ,EAAG,CACrE,EAAQ,EACR,MACF,CACA,MAAM,EAAO,EAAG,KACV,EAAgB,IAAM,CAE1B,MAAM,EAAW,GAAa,EAAU,OAAS,SAC3C,EAAc,EAAE,OAAO,UAAY,EACnC,EAAW,GAAa,EAAU,IAAM,EACxC,EAAW,GAAa,EAAU,IAAM,EACxC,GAAgB,GAAa,EAAU,GAAK,EAAE,OAAO,UAAY,GAAK,EACtE,EAAS,eAAe,EAAE,QAAQ,IAAI,IAAI,CAAS,IAAI,GAAgB,CAAC,IAAI,EAAS,IAAM,GAAG,GAC9F,EAAO,EAAY,gBAAgB,GAAS,MAAM,EACxD,EAAK,aAAa,KAAM,CAAM,EAC9B,EAAK,aAAa,YAAa,gBAAgB,EAC/C,IAAI,EACJ,GAAI,EAAU,CACZ,MAAM,EAAS,EACf,EAAK,aAAa,IAAK,OAAO,EAAW,CAAM,CAAC,EAChD,EAAK,aAAa,IAAK,OAAO,EAAW,CAAM,CAAC,EAChD,EAAK,aAAa,QAAS,OAAO,EAAS,CAAC,CAAC,EAC7C,EAAK,aAAa,SAAU,OAAO,EAAS,CAAC,CAAC,EAC9C,EAAW,EAAY,gBAAgB,GAAS,QAAQ,EACxD,EAAS,aAAa,KAAM,OAAO,CAAQ,CAAC,EAC5C,EAAS,aAAa,KAAM,OAAO,CAAQ,CAAC,EAC5C,EAAS,aAAa,IAAK,GAAG,EAC9B,EAAS,aAAa,OAAQ,MAAM,CACtC,MACE,EAAK,aAAa,IAAK,OAAO,EAAI,CAAC,EACnC,EAAK,aAAa,IAAK,OAAO,EAAI,CAAC,EACnC,EAAK,aAAa,QAAS,OAAO,CAAW,CAAC,EAC9C,EAAK,aAAa,SAAU,OAAO,EAAE,OAAO,WAAa,CAAO,CAAC,EACjE,EAAW,EAAY,gBAAgB,GAAS,MAAM,EACtD,EAAS,aAAa,IAAK,OAAO,EAAI,CAAC,EACvC,EAAS,aAAa,IAAK,OAAO,EAAI,CAAC,EACvC,EAAS,aAAa,QAAS,GAAG,EAClC,EAAS,aAAa,SAAU,OAAO,EAAE,OAAO,WAAa,CAAO,CAAC,EACrE,EAAS,aAAa,OAAQ,MAAM,EAEtC,EAAK,YAAY,CAAQ,EACzB,EAAE,IAAI,OAAO,KAAK,YAAY,CAAI,EAClC,EAAK,aAAa,OAAQ,QAAQ,CAAM,GAAG,EAC3C,MAAM,EAAU,YAAY,IAAG,GAAM,GAAS,GACxC,EAAQ,GAAQ,CACpB,GAAI,EAAE,QAAQ,YAAa,OAC3B,MAAM,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAM,GAAW,CAAK,CAAC,EACpD,EAAQ,GAAe,CAAC,EAC1B,EACF,EAAS,aAAa,IAAK,OAAO,EAAQ,CAAY,CAAC,EAEvD,EAAS,aAAa,QAAS,OAAO,EAAQ,CAAW,CAAC,EAExD,EAAI,EACN,EAAY,sBAAsB,CAAI,GAEtC,EAAK,gBAAgB,MAAM,EACvB,EAAK,YAAY,EAAK,WAAW,YAAY,CAAI,EACrD,EAAQ,EAEZ,EACA,EAAY,sBAAsB,CAAI,CACxC,EACM,EAAiB,GAAQ,CAC7B,EAAK,aAAa,mBAAoB,OAAO,CAAG,CAAC,EACjD,EAAK,aAAa,oBAAqB,OAAO,CAAG,CAAC,EAClD,MAAM,EAAU,YAAY,IAAG,GAAM,GAAS,GACxC,EAAQ,GAAQ,CACpB,GAAI,EAAE,QAAQ,YAAa,OAC3B,MAAM,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAM,GAAW,CAAK,CAAC,EAC1D,EAAK,aAAa,oBAAqB,OAAO,GAAO,EAAI,GAAe,CAAC,EAAE,CAAC,EACxE,EAAI,EACN,EAAY,sBAAsB,CAAI,GAEtC,EAAK,gBAAgB,kBAAkB,EACvC,EAAK,gBAAgB,mBAAmB,EACxC,EAAQ,EAEZ,EACA,EAAY,sBAAsB,CAAI,CACxC,EACA,EAAY,sBAAsB,IAAM,CACtC,GAAI,EAAE,QAAQ,YAAa,OAC3B,GAAI,EAAQ,CACV,EAAa,EACb,MACF,CACA,MAAM,EAAe,EAAK,aAAa,kBAAkB,EAEzD,GADsB,CAAC,CAAC,GAAgB,IAAiB,KAAO,IAAiB,GAC9D,CACjB,EAAa,EACb,MACF,CACA,IAAI,EAAM,EACV,GAAI,CACE,OAAO,EAAK,gBAAmB,aACjC,EAAM,EAAK,eAAc,EAE7B,MAAY,CACV,EAAM,CACR,CACA,GAAI,CAAC,EAAK,CACR,EAAQ,EACR,MACF,CACA,EAAc,CAAG,CACnB,CAAC,CACH,CAiBA,SAAS,EAAI,EAAW,EAAG,EAAM,EAAU,EAAQ,EAAO,EAAO,EAAa,EAAc,CAC1F,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACV,IACH,EAAW,EAAG,KAAK,UAAU,GAE1B,IACH,EAAS,EAAG,KAAK,QAAQ,GAE3B,MAAM,EAAgC,KAChC,EAAE,OAAO,MAAM,OAAS,UAC1B,EAAQ,GAEH,OAAO,EAAE,OAAO,UAAU,KAE/B,CAAC,GAAY,EAAS,QAAQ,WAAW,EAAI,IAAM,EAAS,QAAQ,KAAK,EAAI,MAC/E,EAAW,EAA6B,IAEtC,CAAC,EAAO,KAAI,GAAM,EAAO,QAAQ,WAAW,EAAI,IAAM,EAAO,QAAQ,KAAK,EAAI,MAChF,EAAS,EAA6B,EACtC,EAAe,QAEb,IAAiB,CAAC,EAAa,KAAI,GAAM,EAAa,QAAQ,WAAW,EAAI,IAAM,EAAa,QAAQ,KAAK,EAAI,MACnH,EAAe,QAEZ,EAAE,QAAQ,gBACb,EAAQ,GAGV,MAAM,IADmB,GAAM,EAAK,KAAK,MAAQ,KAAO,OAAS,EAAG,kBAAoB,KAAO,OAAS,EAAG,SAAQ,KAAQ,GACxF,WAAa,WAChD,IAAI,EAAY,KAChB,GAAI,EAAE,QAAQ,YAAa,CACzB,MAAM,EAAY,EAAE,OAAO,MAAM,WAAW,iBAAiB,OACzD,GAAa,KACf,EAAY,GAAc,CAAS,EAC1B,IACT,EAAY,GAAc,QAAQ,EAEtC,CACA,MAAM,EAAS,EAAG,KAAK,CAAQ,EAAE,QAAQ,EAAG,CAAK,EAAE,KAAK,CAAQ,EAAE,QAAQ,EAAO,CAAK,EAClF,GACF,EAAO,KAAK,CAAS,EAEvB,EAAO,KACL,GAAgB,EAChB,EACA,EAAe,EAAS,MAC9B,EAAM,MAAM,IAAM,CACZ,GAAI,EAAQ,SAAS,CAAC,EAAG,CACvB,MAAM,EAAY,EAAE,WAAW,OAAO,EAAE,QAAQ,mBAAmB,EAC/D,GAAa,IAAM,EAAU,OAAS,GAAK,EAAE,QAAQ,eACvD,KAAK,mBAAmB,CAAE,CAE9B,MAAW,IAAS,QAAU,EAAE,QAAQ,gBAClC,CAAC,EAAE,QAAQ,aAAe,IAAc,EAAE,WAAW,OAAO,OAAS,GAAK,EAAE,QAAQ,cACtF,KAAK,mBAAmB,CAAE,EAG9B,KAAK,oBAAmB,CAC1B,CAAC,CACH,CACF,CACA,MAAM,GAAoB,CAAE,QAAS,IAAM,OAAQ,GAAI,EACvD,MAAM,EAAQ,CAIZ,YAAY,EAAG,CACb,KAAK,EAAI,CACX,CAMA,iBAAiB,EAAI,EAAG,CACtB,MAAM,EAAI,KAAK,EACX,EAAG,UACL,EAAG,SAAS,EAAI,EAEd,EAAE,OAAO,MAAM,WAAW,SAC5B,KAAK,WAAW,EAAI,EAAE,OAAO,MAAM,WAAY,CAAC,CAEpD,CAOA,YAAY,EAAI,EAAG,EAAY,EAAW,CACxC,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EAIf,GAHI,EAAG,UACL,EAAG,SAAS,EAAI,EAEd,IAAe,OAAQ,CACzB,KAAK,iBAAiB,EAAI,CAAC,EAC3B,MACF,CACA,MAAM,EAAa,EAAE,OAAO,MAAM,WAC5B,EAAW,IAAe,UAAY,GAAkB,QAAU,GAAkB,OACpF,EAAI,KAAK,IACb,EACA,KAAK,IAAI,EAAG,OAAO,GAAc,SAAW,EAAY,CAAQ,CACtE,EACU,EAAO,EAAI,EACX,EAAS,IAAe,UAAY,EAAI,EAC1C,EAAG,aACL,EAAG,WAAY,GAAQ,CACrB,EAAI,YAAY,CACd,KAAM,SACN,OAAQ;cACJ,CAAI,UAAU,CAAM;gBAClB,CAAI,QAAQ,CAAM;kBAChB,CAAI,MAAM,CAAM;;YAGxB,GAAI,gBACJ,OAAQ,YAClB,CAAS,EACG,EAAW,SACb,KAAK,UAAU,EAAK,EAAG,EAAY,YAAY,CAEnD,CAAC,EACI,EAAW,mBACb,GAAM,EAAK,EAAG,SAAQ,IAAO,KAAO,OAAS,EAAG,OAAS,MAAgB,EAAG,aAAa,cAAe,gBAAgB,EAE3H,KAAK,kBAAkB,EAAK,EAAG,SAAQ,IAAO,KAAO,OAAS,EAAG,IAAI,EAEzE,CAQA,UAAU,EAAK,EAAG,EAAO,EAAQ,CAC/B,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,GAAI,CAAE,KAAA,EAAM,IAAA,EAAK,KAAA,EAAM,MAAA,EAAO,QAAA,CAAO,EAAK,EAE1C,GADA,EAAQ,MAAM,QAAQ,CAAK,EAAI,EAAM,CAAC,EAAI,IACpC,EAAK,EAAE,OAAO,MAAM,WAAW,kBAAoB,KAAO,OAAS,EAAG,QAAU,GAChF,EAAE,OAAO,MAAM,WAAW,gBAAgB,QAAQ,CAAC,IAAM,GAC3D,OAAO,EAGX,EAAI,OAAO,CACT,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,OAAQ,QACd,CAAK,EACD,EAAI,aAAa,CACf,GAAI,SACJ,aAAc,EACd,OAAQ,MACd,CAAK,EACD,EAAI,MAAM,CACR,cAAe,EACf,gBAAiB,EACjB,OAAQ,OACd,CAAK,EACD,EAAI,UAAU,CACZ,GAAI,QACJ,IAAK,OACL,SAAU,KACV,OAAQ,QACd,CAAK,EACD,EAAI,MAAM,CAAC,SAAU,CAAM,CAAC,CAC9B,CAMA,WAAW,EAAI,EAAO,EAAI,EAAG,CAC3B,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,EAAI,KAAK,EAOf,OANI,EAAG,UACL,EAAG,SAAS,EAAI,EAEd,EAAQ,SAAQ,GAAM,EAAE,OAAO,MAAM,OAAS,eAG5C,EAAK,EAAE,OAAO,MAAM,WAAW,kBAAoB,KAAO,OAAS,EAAG,QAAU,KAC9E,EAAK,EAAE,OAAO,MAAM,WAAW,kBAAoB,KAAO,OAAS,EAAG,QAAQ,CAAC,KAAO,IAI1F,EAAG,aACL,EAAG,WAAY,GAAQ,CACrB,KAAK,UAAU,EAAK,EAAG,EAAO,eAAe,CAC/C,CAAC,EACI,EAAM,mBACR,GAAM,EAAK,EAAG,SAAQ,IAAO,KAAO,OAAS,EAAG,OAAS,MAAgB,EAAG,aAAa,cAAe,gBAAgB,EAE3H,KAAK,kBAAkB,EAAK,EAAG,SAAQ,IAAO,KAAO,OAAS,EAAG,IAAI,GAEhE,CACT,CAMA,mBAAmB,EAAI,EAAW,EAAgB,CAChD,MAAM,EAAI,KAAK,EACf,GAAI,OAAO,EAAE,SAAS,mBAAmB,CAAS,EAAM,KAClD,EAAE,SAAS,mBAAmB,CAAS,EAAE,QAAQ,CAAc,EAAI,GAAI,CACzE,EAAG,KAAK,aAAa,WAAY,EAAI,EACrC,MAAM,EAAe,EAAE,OAAO,OAAO,OAAO,OACxC,EAAa,OAAS,QACxB,KAAK,YAAY,EAAI,EAAW,EAAa,KAAM,EAAa,KAAK,CAEzE,CAEJ,CAIA,iBAAiB,EAAI,CACnB,GAAI,CAAC,EAAI,QACc,GAAU,CAC/B,UAAW,KAAO,EACZ,OAAO,UAAU,eAAe,KAAK,EAAO,CAAG,GACjD,EAAG,aAAa,EAAK,EAAM,CAAG,CAAC,CAGrC,GACc,CACZ,MAAO,OACP,OAAQ,OACR,EAAG,OACH,EAAG,MACT,CAAK,CACH,CACF,CACA,MAAM,CAAS,CAKb,YAAY,EAAG,EAAM,KAAM,CACzB,KAAK,EAAI,EACT,KAAK,IAAM,CACb,CAgCA,iBAAiB,EAAY,EAAQ,CAC/B,EAAW,QAAQ,KAAK,EAAI,KAAI,EAAa,IACjD,SAAS,EAAkB,EAAa,EAAa,EAAQ,CAC3D,IAAI,EAAQ,EAAY,EAAI,EAAY,EACpC,EAAS,EAAY,EAAI,EAAY,EACrC,EAAW,KAAK,KAAK,EAAQ,EAAQ,EAAS,CAAM,EACxD,OAAO,EACL,EACA,EACA,KAAK,IAAI,EAAG,EAAS,CAAQ,CACrC,CACI,CACA,SAAS,EAAsB,EAAa,EAAa,EAAU,CACjE,MAAO,CACL,EAAG,EAAY,GAAK,EAAY,EAAI,EAAY,GAAK,EACrD,EAAG,EAAY,GAAK,EAAY,EAAI,EAAY,GAAK,CAC7D,CACI,CACA,SAAS,EAAc,EAAK,EAAU,CAChC,EAAI,OAAS,IACf,EAAI,EAAI,OAAS,CAAC,EAAI,EAAS,EAC/B,EAAI,EAAI,OAAS,CAAC,EAAI,EAAS,EAEnC,CACA,SAAS,EAAgB,EAAK,CAC5B,MAAO,CACL,EAAG,WAAW,EAAI,EAAI,OAAS,CAAC,CAAC,EACjC,EAAG,WAAW,EAAI,EAAI,OAAS,CAAC,CAAC,CACzC,CACI,CACA,IAAI,EAAY,EAAW,MAAM,OAAO,EAAE,OAAO,SAAS,EAAO,EAAM,CACrE,IAAI,EAAQ,EAAK,MAAM,iBAAiB,EACxC,OAAI,GACF,EAAM,KAAK,EAAM,CAAC,CAAC,EACnB,EAAM,KAAK,EAAM,CAAC,CAAC,GAEnB,EAAM,KAAK,CAAI,EAEV,CACT,EAAG,CAAA,CAAE,EACD,EAAW,EAAU,OAAO,SAAS,EAAW,EAAM,CACxD,OAAI,WAAW,CAAI,GAAK,GAAQ,EAAU,OACxC,EAAU,EAAU,OAAS,CAAC,EAAE,KAAK,CAAI,EAEzC,EAAU,KAAK,CAAC,CAAI,CAAC,EAEhB,CACT,EAAG,CAAA,CAAE,EACD,EAAiB,CAAA,EACrB,GAAI,EAAS,OAAS,EAAG,CACvB,IAAI,EAAa,EAAgB,EAAS,CAAC,CAAC,EACxC,EAAmB,KACnB,EAAS,EAAS,OAAS,CAAC,EAAE,CAAC,GAAK,KAAO,EAAS,CAAC,EAAE,OAAS,IAClE,EAAmB,CAAC,IAAK,EAAW,EAAG,EAAW,CAAC,EACnD,EAAS,EAAS,OAAS,CAAC,EAAI,GAElC,EAAe,KAAK,EAAS,CAAC,CAAC,EAC/B,QAAS,EAAW,EAAG,EAAW,EAAS,OAAQ,IAAY,CAC7D,IAAI,EAAU,EAAe,EAAe,OAAS,CAAC,EAClD,EAAS,EAAS,CAAQ,EAC1B,EAAU,GAAU,EAAmB,EAAS,CAAC,EAAI,EAAS,EAAW,CAAC,EAC9E,GAAI,GAAW,GAAW,EAAQ,OAAS,GAAK,EAAO,CAAC,GAAK,KAAO,EAAQ,OAAS,GAAK,EAAQ,CAAC,GAAK,IAAK,CAC3G,IAAI,EAAY,EAAgB,CAAO,EACnC,EAAW,EAAgB,CAAM,EACjC,EAAY,EAAgB,CAAO,EACnC,EAAY,EAChB,EAAa,EAAkB,EAAU,EAAW,CAAM,EAC1D,EAAW,EAAkB,EAAU,EAAW,CAAM,EACxD,EAAc,EAAQ,CAAU,EAChC,EAAO,UAAY,EACnB,EAAe,KAAK,CAAM,EAC1B,IAAI,EAAe,EAAsB,EAAY,EAAU,EAAG,EAC9D,EAAa,EAAsB,EAAU,EAAU,EAAG,EAC1D,EAAW,CACb,IACA,EAAa,EACb,EAAa,EACb,EAAW,EACX,EAAW,EACX,EAAS,EACT,EAAS,CACrB,EACU,EAAS,UAAY,EACrB,EAAe,KAAK,CAAQ,CAC9B,MACE,EAAe,KAAK,CAAM,CAE9B,CACA,GAAI,EAAkB,CACpB,IAAI,EAAgB,EAClB,EAAe,EAAe,OAAS,CAAC,CAClD,EACQ,EAAe,KAAK,CAAC,GAAG,CAAC,EACzB,EAAc,EAAe,CAAC,EAAG,CAAa,CAChD,CACF,MACE,EAAiB,EAEnB,OAAO,EAAe,OAAO,SAAS,EAAK,EAAG,CAC5C,OAAO,EAAM,EAAE,KAAK,GAAG,EAAI,GAC7B,EAAG,EAAE,CACP,CAQA,SAAS,EAAI,EAAI,EAAI,EAAI,EAAY,UAAW,EAAY,EAAG,EAAc,KAAM,EAAgB,OAAQ,CAYzG,OAXU,KAAK,EACA,IAAI,MAAM,KAAI,EAAG,KAAK,CACnC,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,OAAQ,EACR,mBAAoB,EACpB,eAAgB,EAChB,iBAAkB,CACxB,CAAK,CAEH,CAKA,SAAS,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAS,EAAG,EAAQ,UAAW,EAAU,EAAG,EAAc,KAAM,EAAc,KAAM,EAAkB,EAAG,CAEhJ,MAAM,EADI,KAAK,EACA,IAAI,MAAM,KAAI,EAC7B,OAAA,EAAK,KAAK,CACR,EAAG,EACH,EAAG,EACH,MAAO,EAAK,EAAI,EAAK,EACrB,OAAQ,EAAK,EAAI,EAAK,EACtB,GAAI,EACJ,GAAI,EACJ,QAAA,EACA,eAAgB,IAAgB,KAAO,EAAc,EACrD,OAAQ,IAAgB,KAAO,EAAc,OAC7C,mBAAoB,CAC1B,CAAK,EACD,EAAK,KAAK,aAAa,OAAQ,CAAK,EAC7B,CACT,CAIA,YAAY,EAAe,EAAS,UAAW,EAAc,EAAG,EAAO,OAAQ,CAO7E,OANU,KAAK,EACG,IAAI,MAAM,QAAQ,CAAa,EAAE,KAAK,CACtD,KAAA,EACA,OAAA,EACA,eAAgB,CACtB,CAAK,CAEH,CAKA,WAAW,EAAQ,EAAQ,KAAM,CAC/B,MAAM,EAAI,KAAK,EACX,EAAS,IAAG,EAAS,GACzB,MAAM,EAAI,EAAE,IAAI,MAAM,OAAO,EAAS,CAAC,EACvC,OAAI,IAAU,MACZ,EAAE,KAAK,CAAK,EAEP,CACT,CAEA,SAAS,CACP,EAAA,EAAI,GACJ,OAAA,EAAS,UACT,YAAA,EAAc,EACd,KAAA,EACA,YAAA,EAAc,EACd,cAAA,EAAgB,EAChB,QAAA,EACA,cAAA,EAAgB,KAChB,gBAAA,EAAkB,CACtB,EAAK,CACD,MAAM,EAAI,KAAK,EACf,OAAI,IAAkB,OACpB,EAAgB,EAAE,OAAO,OAAO,UAE9B,EAAE,QAAQ,WAAW,EAAI,IAAM,EAAE,QAAQ,KAAK,EAAI,MACpD,EAAI,OAAO,EAAE,OAAO,UAAU,IAEtB,EAAE,IAAI,MAAM,KAAK,CAAC,EAAE,KAAK,CACjC,KAAA,EACA,eAAgB,EAChB,OAAA,EACA,iBAAkB,EAClB,iBAAkB,EAClB,eAAgB,EAChB,mBAAoB,EACpB,MAAO,CACb,CAAK,CAEH,CAIA,MAAM,EAAQ,KAAM,CAElB,MAAM,EADI,KAAK,EACH,IAAI,MAAM,MAAK,EAC3B,OAAI,IAAU,MACZ,EAAE,KAAK,CAAK,EAEP,CACT,CAKA,KAAK,EAAG,EAAG,CAET,MADa,CAAC,IAAK,EAAG,CAAC,EAAE,KAAK,GAAG,CAEnC,CAOA,KAAK,EAAG,EAAG,EAAO,KAAM,CACtB,OAAI,IAAS,IAAY,CAAC,KAAM,CAAC,EAAE,KAAK,GAAG,EACvC,IAAS,IAAY,CAAC,KAAM,CAAC,EAAE,KAAK,GAAG,EACpC,CAAC,KAAM,EAAG,CAAC,EAAE,KAAK,GAAG,CAC9B,CASA,MAAM,EAAI,EAAI,EAAI,EAAI,EAAG,EAAG,CAE1B,MADc,CAAC,IAAK,EAAI,EAAI,EAAI,EAAI,EAAG,CAAC,EAAE,KAAK,GAAG,CAEpD,CAOA,eAAe,EAAI,EAAI,EAAG,EAAG,CAE3B,MADc,CAAC,IAAK,EAAI,EAAI,EAAG,CAAC,EAAE,KAAK,GAAG,CAE5C,CAUA,IAAI,EAAI,EAAI,EAAc,EAAc,EAAW,EAAG,EAAG,EAAW,GAAO,CACzE,IAAI,EAAQ,IACZ,OAAI,IAAU,EAAQ,KACV,CACV,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACN,EAAM,KAAK,GAAG,CAEZ,CAkBA,YAAY,CACV,EAAA,EACA,UAAA,EACA,SAAA,EACA,OAAA,EACA,aAAA,EACA,OAAA,EACA,YAAA,EACA,cAAA,EACA,KAAA,EACA,eAAA,EACA,aAAA,EACA,gBAAA,EACA,UAAA,EACA,UAAA,EACA,iBAAA,EAAmB,GACnB,kBAAA,EAAoB,GACpB,WAAA,EAAa,GACb,SAAA,EAAW,KACX,YAAA,EAAc,EAClB,EAAK,CACD,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAO,IAAI,GAAW,KAAK,GAAI,EAAK,KAAK,MAAQ,KAAO,EAAK,MAAM,EACnE,EAAc,KAAK,EAAE,OAAO,MAAM,WAAW,QAC7C,EAAc,GAAe,KAAK,EAAE,OAAO,MAAM,WAAW,iBAAiB,QACnF,GAAI,GAAY,EAAS,WAAW,QAAQ,GAAK,EAAQ,CACvD,MAAM,EAAc,EAAO,MAAM,wBAAwB,EACrD,IACF,EAAW,EAAS,QAAQ,aAAc,EAAY,CAAC,CAAC,EAE5D,CACA,IAAI,EACJ,MAAM,EAAgB,CAAC,EAAE,GAAe,CAAC,EAAE,QAAQ,SAAW,GAAe,EAAE,QAAQ,aAAe,EAAE,QAAQ,eAC1G,EAAmB,OAAO,GAAc,WAAa,EAAU,QAAQ,iBAAiB,EAAI,IAAM,EAAU,QAAQ,iBAAiB,EAAI,IAAM,EAAU,QAAQ,sBAAsB,EAAI,IAAM,EAAU,QAAQ,kBAAkB,EAAI,IACzO,EAAc,CAAC,EAAE,GAAe,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,aAAe,GAChF,GAAkB,EAAK,EAAE,OAAO,MAAM,WAAW,wBAA0B,KAAO,EAAK,EACvF,EAAa,CAAC,EAAE,GAAiB,CAAC,GAAe,EAAiB,GAAK,EAAE,QAAQ,WAAa,GAE9F,EAAmB,CAAC,GADJ,IAAc,eAAiB,IAAc,YACtB,GAAiB,CAAC,GAAe,EAAE,QAAQ,aAClF,EAAgB,GAAc,EAChC,GAAiB,CAAC,GAAe,CAAC,EACpC,EAAI,GAEJ,EAAI,EACC,IACH,EAAE,QAAQ,eAAiB,KAG/B,MAAM,EAAqB,EAAE,OAAO,OAAO,UAC3C,IAAI,EAAkB,EAClB,MAAM,QAAQ,CAAkB,EAClC,EAAkB,EAAmB,CAAS,EAE9C,EAAkB,EAAE,OAAO,OAAO,UAEpC,MAAM,EAAK,KAAK,SAAS,CACvB,EAAA,EACA,OAAA,EACA,YAAA,EACA,KAAA,EACA,YAAa,EACb,QAAS,EACT,cAAA,EACA,gBAAA,CACN,CAAK,EACD,EAAG,KAAK,QAAS,CAAS,EACtB,IACE,IAAc,OAAS,CAAC,EAAE,QAAQ,iBAAmB,EAAE,QAAQ,YACjE,EAAG,KAAK,CACN,YAAa,uBAAuB,EAAE,QAAQ,IAAI,GAC5D,CAAS,EAED,EAAG,KAAK,CACN,YAAa,oBAAoB,EAAE,QAAQ,IAAI,GACzD,CAAS,GAGD,EAAE,OAAO,MAAM,WAAW,SAAW,GACvC,EAAQ,WAAW,EAAI,EAAE,OAAO,MAAM,WAAY,CAAS,EAEzD,IACF,EAAG,KAAK,iBAAiB,aAAc,KAAK,eAAe,KAAK,KAAM,CAAE,CAAC,EACzE,EAAG,KAAK,iBAAiB,aAAc,KAAK,eAAe,KAAK,KAAM,CAAE,CAAC,EACzE,EAAG,KAAK,iBAAiB,YAAa,KAAK,cAAc,KAAK,KAAM,CAAE,CAAC,GAEzE,EAAG,KAAK,CACN,OAAA,EACA,SAAA,CACN,CAAK,EACD,MAAM,EAAqB,CACzB,GAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,EACA,OAAA,EACA,aAAA,EACA,KAAA,EACA,YAAA,EACA,MAAO,EACP,YAAA,CACN,EACI,GAAI,GAAe,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,YAClD,GAAI,EAAa,CACf,MAAM,EAAY,EAAe,EAC3B,EAAS,IAAW,QAAU,IAAgB,EAC9C,EAAc,EAAE,WAAW,OAAO,OAClC,EAAS,EAAE,QAAQ,YAAc,GAAO,IAAc,EAAc,EAC1E,EAAK,YAAY,EAAI,CACnB,UAAA,EACA,EAAA,EACA,OAAA,EACA,OAAA,EACA,MAAO,EACP,MAAO,EACP,KAAM,CAChB,CAAS,CACH,MAAY,GACV,EAAK,sBAAsB,EAAc,EAAe,CAAA,EAAI,CAAkB,EAAG,CAC/E,MAAO,CACjB,CAAS,CAAC,OAGC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,cAAgB,CAAC,GACpD,EAAK,oBAAmB,EAG5B,OAAI,EAAE,QAAQ,aAAe,GAAe,GAAiB,CAAC,GAC5D,EAAK,sBAAsB,EAAc,EAAe,CAAA,EAAI,CAAkB,EAAG,CAC/E,MAAO,CACf,CAAO,CAAC,EAEA,GACF,EAAK,WAAW,CAAE,EAEb,CACT,CAMA,YAAY,EAAO,EAAO,EAAQ,EAAS,UAAW,EAAc,EAAG,CAerE,OAdU,KAAK,EACH,IAAI,MAAM,QAAQ,EAAO,EAAS,GAAQ,CAChD,IAAU,kBACZ,EAAI,KAAK,EAAG,EAAG,EAAQ,CAAC,EAAE,OAAO,CAAE,MAAO,EAAQ,MAAO,EAAc,CAAC,CAAE,EACjE,IAAU,gBACnB,EAAI,KAAK,EAAG,EAAG,EAAG,CAAK,EAAE,OAAO,CAAE,MAAO,EAAQ,MAAO,EAAc,CAAC,CAAE,EAChE,IAAU,eACnB,EAAI,KAAK,EAAG,EAAG,EAAO,CAAM,EAAE,OAAO,CAAE,MAAO,EAAQ,MAAO,CAAW,CAAE,EACjE,IAAU,UACnB,EAAI,KAAK,EAAO,CAAM,EAAE,KAAK,MAAM,EAAE,OAAO,CAAE,MAAO,EAAQ,MAAO,CAAW,CAAE,EACxE,IAAU,WACnB,EAAI,OAAO,CAAK,EAAE,KAAK,MAAM,EAAE,OAAO,CAAE,MAAO,EAAQ,MAAO,CAAW,CAAE,CAE/E,CAAC,CAEH,CAkBA,aAAa,EAAO,EAAO,EAAK,EAAa,EAAW,EAAO,KAAM,EAAQ,KAAM,EAAa,CAAA,EAAI,EAAI,EAAG,EAAoB,GAAO,CACpI,MAAM,EAAI,KAAK,EACf,IAAI,EACA,EAAM,OAAS,GAAK,EAAM,QAAQ,GAAG,IAAM,IAC7C,EAAQ,EAAQ,UAAU,EAAO,CAAW,GAE1C,EAAI,OAAS,GAAK,EAAI,QAAQ,GAAG,IAAM,IACzC,EAAM,EAAQ,UAAU,EAAK,CAAS,GAExC,IAAI,EAAQ,EACR,EAAQ,EACR,EAAQ,EACR,EAAQ,KACR,IAAU,OACZ,EAAQ,OAAO,EAAM,CAAC,EAAM,IAAc,EAAM,CAAC,EAAI,IAAM,EAC3D,EAAQ,OAAO,EAAM,CAAC,EAAM,IAAc,EAAM,CAAC,EAAI,IAAM,EAC3D,EAAQ,OAAO,EAAM,CAAC,EAAM,IAAc,EAAM,CAAC,EAAI,IAAM,EAC3D,EAAQ,OAAO,EAAM,CAAC,EAAM,IAAc,EAAM,CAAC,EAAI,IAAM,MAE7D,MAAM,EAAY,EAAE,OAAO,MAAM,OAAS,SAAW,EAAE,OAAO,MAAM,OAAS,OAAS,EAAE,OAAO,MAAM,OAAS,aAAe,EAAE,OAAO,MAAM,OAAS,SAwBrJ,GAvBI,CAAC,GAAc,EAAW,SAAW,EACvC,EAAI,EAAE,IAAI,MAAM,SACd,EAAS,SAAW,SACnB,GAAQ,CACP,EAAI,KAAK,EAAO,EAAO,CAAW,EAClC,EAAI,KAAK,EAAO,EAAK,CAAS,EAC9B,EAAI,KAAK,EAAO,EAAK,CAAS,EAC1B,IAAU,MACZ,EAAI,KAAK,EAAO,EAAO,CAAW,CAEtC,CACR,EAEM,EAAI,EAAE,IAAI,MAAM,SACd,EAAS,SAAW,SACnB,GAAQ,EACe,MAAM,QAAQ,EAAW,CAAC,CAAC,EAAI,EAAW,CAAC,EAAI,MAAM,QAAQ,EAAW,CAAC,CAAC,EAAI,EAAW,CAAC,GAAK,CAAA,EAAK,GAC5G,QAAS,GAAM,CAC3B,EAAI,KAAK,EAAE,OAAS,IAAK,EAAE,MAAO,EAAE,OAAO,CAC7C,CAAC,CACH,CACR,EAEQ,CAAC,EACC,IAAU,WACR,GACF,EAAE,KAAK,CAAE,cAAe,gBAAgB,CAAE,EAC1C,EAAE,KAAK,EAAG,CAAC,EAAE,GAAG,EAAG,EAAE,OAAO,UAAU,GAEtC,EAAE,KAAK,EAAG,CAAC,EAAE,GAAG,EAAG,CAAC,EAEb,IAAU,WACnB,EAAE,KAAK,EAAG,CAAC,EAAE,GAAG,EAAG,CAAC,EACX,IAAU,aACnB,EAAE,KAAK,EAAG,CAAC,EAAE,GAAG,EAAG,CAAC,EACX,IAAU,aACnB,EAAE,KAAK,EAAG,CAAC,EAAE,GAAG,EAAG,CAAC,MAEjB,CACL,MAAM,EAAO,EAAE,OAAO,UAAY,EAC5B,EAAO,EAAE,OAAO,WAAa,EAC/B,EAAE,OAAO,MAAM,OAAS,SAC1B,EAAE,KAAK,CACL,cAAe,iBACf,GAAI,EACJ,GAAI,EACJ,EAAG,CACb,CAAS,EAED,EAAE,KAAK,CACL,GAAI,GACJ,GAAI,GACJ,EAAG,GACH,GAAI,GACJ,GAAI,EACd,CAAS,CAEL,CACA,OAAO,CACT,CAEA,uBAAuB,CAAE,KAAA,EAAM,SAAA,EAAU,SAAA,EAAU,WAAA,CAAU,EAAI,CAC/D,MAAM,EAAS,KAAK,aAAa,EAAM,EAAU,EAAY,EAAE,EACzD,EAAY,EAAO,MAAQ,EAAK,OAChC,EAAoB,KAAK,MAAM,EAAW,CAAS,EACzD,OAAI,EAAW,EAAO,MACb,EAAK,MAAM,EAAG,EAAoB,CAAC,EAAI,MAEzC,CACT,CAIA,SAAS,CACP,EAAA,EACA,EAAA,EACA,KAAA,EACA,WAAA,EACA,SAAA,EACA,WAAA,EACA,WAAA,EACA,UAAA,EACA,QAAA,EACA,SAAA,EACA,SAAA,EAAW,GACX,YAAA,EAAc,GACd,iBAAA,EAAmB,MACvB,EAAK,CACD,MAAM,EAAI,KAAK,EACX,OAAO,EAAS,MAAa,EAAO,IACxC,IAAI,EAAgB,EACf,IACH,EAAa,UAEX,CAAC,GAAa,CAAC,EAAU,UAC3B,EAAY,EAAE,OAAO,MAAM,WAE7B,EAAa,GAAc,EAAE,OAAO,MAAM,WAC1C,EAAW,GAAY,OACvB,EAAa,GAAc,UAC3B,MAAM,EAAc,CAClB,SAAA,EACA,SAAA,EACA,WAAA,CACN,EACI,IAAI,EACJ,OAAI,MAAM,QAAQ,CAAI,EACpB,EAAS,EAAE,IAAI,MAAM,KAAM,GAAQ,CACjC,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,EAAgB,EAAK,CAAC,EAClB,IACF,EAAgB,KAAK,uBAAuB,EAAe,CACzD,KAAM,EAAK,CAAC,CAC1B,EAAe,CAAW,CAAC,GAEjB,IAAM,EAAI,EAAI,MAAM,CAAa,EAAI,EAAI,MAAM,CAAa,EAAE,QAAO,CAEzE,CAAC,GAEG,IACF,EAAgB,KAAK,uBAAuB,EAAe,CACzD,KAAA,CACV,EAAW,CAAW,CAAC,GAEjB,EAAS,EAAc,EAAE,IAAI,MAAM,MAAM,CAAI,EAI3C,EAAE,IAAI,MAAM,KAAM,GAAQ,EAAI,MAAM,CAAa,CAAC,GAGtD,EAAO,KAAK,CACV,EAAA,EACA,EAAA,EACA,cAAe,EACf,oBAAqB,EACrB,YAAa,EACb,cAAe,EACf,cAAe,EACf,KAAM,EACN,MAAO,mBAAqB,CAClC,CAAK,EACD,EAAO,KAAK,MAAM,WAAa,EAC/B,EAAO,KAAK,MAAM,QAAU,EACrB,CACT,CAOA,cAAc,EAAG,EAAG,EAAM,EAAM,CAS9B,IAAI,EAAI,GACR,OAAQ,EAAI,CACV,IAAK,QACH,EAAO,EAAO,IACd,EAAI,KAAK,EAAI,CAAI,IAAI,EAAI,CAAI,MAAM,EAAI,CAAI,IAAI,EAAI,CAAI,OAAO,EAAI,CAAI,IAAI,EAAI,CAAI,MAAM,EAAI,CAAI,IAAI,EAAI,CAAI,GAC5G,MACF,IAAK,OACH,EAAO,EAAO,KACd,EAAI,KAAK,EAAI,CAAI,IAAI,CAAC,MAAM,EAAI,CAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAI,CAAI,MAAM,CAAC,IAAI,EAAI,CAAI,GAChF,MACF,IAAK,OACL,IAAK,UAAW,CACd,IAAI,EAAS,EACb,EAAO,EAAO,KACV,IAAS,YACX,EAAO,EAAO,IACd,EAAS,GAEX,MAAM,EAAO,KAAK,GAAK,EACvB,QAAS,EAAI,EAAG,GAAK,EAAI,EAAQ,IAAK,CACpC,MAAM,EAAQ,EAAI,EACZ,EAAS,EAAI,IAAM,EAAI,EAAO,EAAO,EACrC,EAAO,EAAI,EAAS,KAAK,IAAI,CAAK,EAClC,EAAO,EAAI,EAAS,KAAK,IAAI,CAAK,EACxC,IAAM,IAAM,EAAI,IAAM,KAAO,EAAO,IAAM,CAC5C,CACA,GAAK,IACL,KACF,CACA,IAAK,WACH,EAAI,KAAK,CAAC,IAAI,EAAI,CAAI;iBACb,EAAI,CAAI,IAAI,EAAI,CAAI;iBACpB,EAAI,CAAI,IAAI,EAAI,CAAI;gBAE7B,MACF,IAAK,SACL,IAAK,OACH,EAAO,EAAO,MACd,EAAI,KAAK,EAAI,CAAI,IAAI,EAAI,CAAI;eACtB,EAAI,CAAI,IAAI,EAAI,CAAI;eACpB,EAAI,CAAI,IAAI,EAAI,CAAI;eACpB,EAAI,CAAI,IAAI,EAAI,CAAI;cAE3B,MACF,IAAK,UACH,EAAO,EAAO,KACd,EAAI,KAAK,CAAC,IAAI,EAAI,CAAI;iBACb,EAAI,CAAI,IAAI,CAAC;iBACb,CAAC,IAAI,EAAI,CAAI;iBACb,EAAI,CAAI,IAAI,CAAC;eAEtB,MACF,IAAK,OACH,EAAO,EAAO,IACd,EAAI,KAAK,EAAI,CAAI,IAAI,CAAC;eACf,EAAI,CAAI,IAAI,CAAC,GACpB,MAEF,QACE,EAAO,EAAO,EACd,EAAI,KAAK,CAAC,KAAK,CAAC;gBACR,EAAO,CAAC;eACT,EAAO,CAAC,IAAI,EAAO,CAAC,UAAU,CAAI;eAClC,EAAO,CAAC,IAAI,EAAO,CAAC,WAAW,CAAI,KAC1C,KACR,CACI,OAAO,CACT,CASA,gBAAgB,EAAG,EAAG,EAAM,EAAM,EAAM,CACtC,MAAM,EAAO,KAAK,SAAS,CACzB,EAAG,KAAK,cAAc,EAAG,EAAG,EAAM,CAAI,EACtC,OAAQ,EAAK,iBACb,gBAAiB,EAAK,qBACtB,YAAa,EAAK,iBAClB,KAAM,EAAK,eACX,YAAa,EAAK,iBAClB,cAAe,EAAK,kBAC1B,CAAK,EACD,OAAA,EAAK,KAAK,CACR,GAAI,EACJ,GAAI,EACJ,MAAO,EAAK,MACZ,MAAO,EAAK,MAAQ,EAAK,MAAQ,EACvC,CAAK,EACM,CACT,CAMA,WAAW,EAAG,EAAG,EAAM,CACrB,EAAI,GAAK,EACT,IAAI,EAAO,EAAK,OAAS,EACzB,OAAK,EAAQ,SAAS,CAAC,IACrB,EAAO,EACP,EAAI,GAEC,KAAK,gBAAgB,EAAG,EAA2B,GAAK,MAAO,EAAM,EAAe,EAAe,CAAA,EAAI,CAAI,EAAG,EAAK,QAAU,QAAU,EAAK,QAAU,QAAU,EAAK,QAAU,QAAU,CAC9L,iBAAkB,EAAK,eACvB,mBAAoB,EAAK,gBAC/B,EAAQ,CAAA,CAAE,CAAC,CACT,CAKA,eAAe,EAAM,EAAG,CACtB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAI,UAAU,EAAK,EAAK,KAAK,aAAa,OAAO,IAAM,KAAO,EAAK,GAAI,EAAE,EACzE,EAAI,UAAU,EAAK,EAAK,KAAK,aAAa,GAAG,IAAM,KAAO,EAAK,GAAI,EAAE,EAC3E,GAAI,QAAM,CAAC,GAAK,MAAM,CAAC,KACnB,OAAO,EAAE,OAAO,MAAM,OAAO,qBAAwB,YACvD,EAAE,OAAO,MAAM,OAAO,oBAAoB,EAAG,KAAK,IAAK,CACrD,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CAAO,EAEH,EAAS,WAAW,EAAG,sBAAuB,CAC5C,EACA,KAAK,IACL,CAAE,YAAa,EAAG,eAAgB,EAAG,EAAA,CAAC,CAC5C,CAAK,EACG,EAAA,EAAE,OAAO,OAAO,OAAO,OAAO,OAAS,QACrC,EAAK,KAAK,aAAa,UAAU,IAAM,SAIzC,EAAE,OAAO,OAAO,MAAM,OAAO,OAAS,QACpC,CAAC,EAAE,SAAS,eAAe,CAC7B,MAAM,EAAc,EAAE,OAAO,OAAO,MAAM,OAC1C,EAAQ,YAAY,EAAM,EAAG,EAAY,KAAM,EAAY,KAAK,CAClE,CAEJ,CAKA,eAAe,EAAM,EAAG,CACtB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAI,UAAU,EAAK,EAAK,KAAK,aAAa,OAAO,IAAM,KAAO,EAAK,GAAI,EAAE,EACzE,EAAI,UAAU,EAAK,EAAK,KAAK,aAAa,GAAG,IAAM,KAAO,EAAK,GAAI,EAAE,EACvE,MAAM,CAAC,GAAK,MAAM,CAAC,IACnB,OAAO,EAAE,OAAO,MAAM,OAAO,qBAAwB,YACvD,EAAE,OAAO,MAAM,OAAO,oBAAoB,EAAG,KAAK,IAAK,CACrD,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CAAO,EAEH,EAAS,WAAW,EAAG,sBAAuB,CAC5C,EACA,KAAK,IACL,CAAE,YAAa,EAAG,eAAgB,EAAG,EAAA,CAAC,CAC5C,CAAK,EACG,EAAA,EAAE,OAAO,OAAO,OAAO,OAAO,OAAS,QACrC,EAAK,KAAK,aAAa,UAAU,IAAM,SAIzC,EAAE,OAAO,OAAO,MAAM,OAAO,OAAS,QACxC,EAAQ,iBAAiB,EAAM,CAAC,EAEpC,CAQA,6BAA6B,EAAS,EAAG,CACvC,MAAM,EAAI,KAAK,EACf,EAAE,SAAS,mBAAqB,CAAA,EAChC,MAAM,EAAU,EAAE,IAAI,MAAM,KAC1B,6DACN,EACU,EAAY,EAAE,IAAI,MAAM,KAC5B,4HACN,EACU,EAAY,GAAQ,CACxB,MAAM,UAAU,QAAQ,KAAK,EAAM,GAAO,CACxC,EAAG,KAAK,aAAa,WAAY,OAAO,EACxC,EAAQ,iBAAiB,EAAI,CAAC,CAChC,CAAC,CACH,EACA,EAAS,CAAO,EAChB,EAAS,CAAS,CACpB,CAQA,sBAAsB,EAAM,EAAS,EAAG,EAAG,CACzC,MAAM,EAAI,KAAK,EACf,GAAI,EAAK,KAAK,aAAa,UAAU,IAAM,OAAQ,CACjD,EAAK,KAAK,aAAa,WAAY,OAAO,EAC1C,MAAM,EAAQ,EAAE,SAAS,mBAAmB,CAAC,EAAE,QAAQ,CAAC,EACxD,OAAI,EAAQ,IACV,EAAE,SAAS,mBAAmB,CAAC,EAAE,OAAO,EAAO,CAAC,EAE3C,OACT,CACA,MAAI,CAAC,EAAE,OAAO,OAAO,OAAO,kCAAoC,EAAE,SAAS,mBAAmB,OAAS,GACrG,KAAK,6BAA6B,EAAS,CAAC,EAE9C,EAAK,KAAK,aAAa,WAAY,MAAM,EACrC,OAAO,EAAE,SAAS,mBAAmB,CAAC,EAAM,MAC9C,EAAE,SAAS,mBAAmB,CAAC,EAAI,CAAA,GAErC,EAAE,SAAS,mBAAmB,CAAC,EAAE,KAAK,CAAC,EAChC,MACT,CAOA,2BAA2B,EAAM,EAAS,EAAG,EAAU,CACrD,MAAM,EAAI,KAAK,EACf,GAAI,IAAa,OAAQ,CACvB,MAAM,EAAe,EAAE,OAAO,OAAO,OAAO,OAC5C,GAAI,IAAiB,OACnB,EAAQ,YAAY,EAAM,EAAG,EAAa,KAAM,EAAa,KAAK,UAE9D,EAAE,OAAO,OAAO,MAAM,SAAW,QAC/B,CAAC,EAAE,SAAS,cAAe,CAC7B,MAAM,EAAc,EAAE,OAAO,OAAO,MAAM,OAC1C,EAAQ,YAAY,EAAM,EAAG,EAAY,KAAM,EAAY,KAAK,CAClE,CAGN,SACM,EAAE,OAAO,OAAO,OAAO,OAAO,OAAS,OACzC,GAAI,EAAE,OAAO,OAAO,MAAM,OAAO,OAAS,QAAU,CAAC,EAAE,SAAS,cAAe,CAC7E,MAAM,EAAc,EAAE,OAAO,OAAO,MAAM,OAC1C,EAAQ,YAAY,EAAM,EAAG,EAAY,KAAM,EAAY,KAAK,CAClE,MACE,EAAQ,iBAAiB,EAAM,CAAC,CAIxC,CAKA,cAAc,EAAM,EAAG,CACrB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAI,UAAU,EAAK,EAAK,KAAK,aAAa,OAAO,IAAM,KAAO,EAAK,GAAI,EAAE,EACzE,EAAI,UAAU,EAAK,EAAK,KAAK,aAAa,GAAG,IAAM,KAAO,EAAK,GAAI,EAAE,EAC3E,GAAI,MAAM,CAAC,GAAK,MAAM,CAAC,EAAG,OAC1B,MAAM,EAAO,EAAE,OAAO,MAAM,KAE5B,GAAI,CADqB,CAAC,EAAE,IAAS,OAAO,EAAK,WAAc,YAAc,EAAK,UAC3D,CACrB,MAAM,EAAW,KAAK,sBAAsB,EAAM,EAAS,EAAG,CAAC,EAC/D,KAAK,2BAA2B,EAAM,EAAS,EAAG,CAAQ,CAC5D,CACI,OAAO,EAAE,OAAO,MAAM,OAAO,oBAAuB,YACtD,EAAE,OAAO,MAAM,OAAO,mBAAmB,EAAG,KAAK,IAAK,CACpD,mBAAoB,EAAE,SAAS,mBAC/B,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CAAO,EAEC,GACF,EAAS,WAAW,EAAG,qBAAsB,CAC3C,EACA,KAAK,IACL,CACE,mBAAoB,EAAE,SAAS,mBAC/B,YAAa,EACb,eAAgB,EAChB,EAAA,CACV,CACA,CAAO,CAEL,CAKA,mBAAmB,EAAI,CACrB,IAAI,EAEF,CAAA,EAEE,GAAM,OAAO,EAAG,SAAY,aAC9B,EAAQ,EAAG,QAAO,GAEpB,MAAM,EAAI,EAAM,EAAI,EAAM,MAAQ,EAC5B,EAAI,EAAM,EAAI,EAAM,OAAS,EACnC,MAAO,CACL,EAAA,EACA,EAAA,CACN,CACE,CAQA,qBAAqB,EAAa,EAAgB,CAChD,IAAI,EAAiB,KACrB,EAAY,KAAK,iBAAiB,YAAc,GAAM,CACpD,MAAM,EAAa,EAAS,oBAC1B,EAAE,OACF,EAAY,KACZ,CACR,EACU,CAAC,GAAc,IAAe,IAC9B,GACJ,EAAe,UACb,KAAK,eAEH,EAAe,SACf,CACV,EAEM,EAAiB,EACb,EAAW,UACb,KAAK,eAAe,EAAW,SAAU,CAAC,EAE9C,CAAC,EACD,EAAY,KAAK,iBAAiB,WAAa,GAAM,CACnD,GAAI,CAAC,EAAgB,QACD,EAAE,cAAgB,EAAS,oBAC7C,EAAE,cACF,EAAY,KACZ,CACR,EAAU,QACgB,IACd,GACJ,EAAe,UACb,KAAK,eAEH,EAAe,SACf,CACZ,EAEQ,EAAiB,KAErB,CAAC,EACD,EAAY,KAAK,iBAAiB,YAAc,GAAM,CACpD,MAAM,EAAa,EAAS,oBAC1B,EAAE,OACF,EAAY,KACZ,CACR,EACU,GAAc,EAAW,UAC3B,KAAK,cAAc,EAAW,SAAU,CAAC,CAE7C,CAAC,CACH,CAUA,OAAO,WAAW,EAAG,EAAO,EAAM,CAChC,MAAM,EAAM,EAAE,QAAQ,OACtB,GAAI,CAAC,GAAO,CAAC,OAAO,UAAU,eAAe,KAAK,EAAK,CAAK,EAAG,OAC/D,MAAM,EAEJ,EAAI,CAAK,EAEX,QAAS,EAAI,EAAG,EAAI,EAAS,OAAQ,IACnC,EAAS,CAAC,EAAE,MAAM,KAAM,CAAI,CAEhC,CAMA,OAAO,oBAAoB,EAAM,EAAU,EAAU,CACnD,KAAO,GAAQ,IAAS,GAAY,IAAS,UAAU,CACrD,GAAI,EAAK,SAAW,EAAK,QAAQ,CAAQ,EAAG,OAAO,EACnD,EAAO,EAAK,UACd,CACA,OAAO,IACT,CAKA,OAAO,SAAS,EAAI,EAAO,CACzB,UAAW,KAAO,EACZ,OAAO,UAAU,eAAe,KAAK,EAAO,CAAG,GACjD,EAAG,aAAa,EAAK,EAAM,CAAG,CAAC,CAGrC,CAQA,aAAa,EAAM,EAAU,EAAY,EAAW,EAAU,GAAM,CAClE,MAAM,EAAI,KAAK,EACT,EAAW,CAAC,EAAM,EAAU,EAAY,EAAW,CAAO,EAAE,KAAK,IAAI,EACrE,EAAQ,EAAE,QAAQ,eACxB,GAAI,GAAS,EAAM,IAAI,CAAQ,EAC7B,OAEE,EAAM,IAAI,CAAQ,EAGtB,MAAM,EAAc,KAAK,SAAS,CAChC,EAAG,KACH,EAAG,KACH,KAAA,EACA,WAAY,QACZ,SAAA,EACA,WAAA,EACA,UAAW,OACX,QAAS,CACf,CAAK,EACG,GACF,EAAY,KAAK,YAAa,CAAS,EAEzC,EAAE,IAAI,MAAM,IAAI,CAAW,EAC3B,IAAI,EAAO,EAAY,KAAI,EAC3B,MAAM,EAAQ,EAAK,EACd,IACH,EAAO,EAAY,KAAK,sBAAqB,GAE/C,EAAY,OAAM,EAClB,MAAM,EAAS,CACb,MAAO,EAAK,MACZ,OAAQ,EAAK,OAMb,aAAc,EAAU,EAAQ,EAAK,OAAS,EAAI,MAAO,CAC/D,EACI,OAAI,GACF,EAAM,IAAI,EAAU,CAAM,EAErB,CACT,CASA,sBAAsB,EAAS,EAAY,EAAO,CAChD,GAAI,OAAO,EAAQ,uBAA0B,aAC7C,EAAQ,YAAc,EAClB,EAAW,OAAS,GAClB,EAAQ,sBAAqB,GAAM,EAAQ,KAAK,CAClD,QAAS,EAAI,EAAW,OAAS,EAAG,EAAI,EAAG,GAAK,EAC9C,GAAI,EAAQ,mBAAmB,EAAG,CAAC,GAAK,EAAQ,IAAK,CACnD,EAAQ,YAAc,EAAW,UAAU,EAAG,CAAC,EAAI,MACnD,MACF,CAEF,EAAQ,YAAc,GACxB,CAEJ,CACF,CACA,MAAM,EAAK,CAIT,YAAY,EAAG,CACb,KAAK,EAAI,EACT,KAAK,KAAO,KACZ,KAAK,YAAc,EACnB,KAAK,WAAa,CAAA,CACpB,CAIA,eAAe,EAAQ,CACrB,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,OACR,EAAO,SAAS,OAAO,EAAE,OAAO,SAAS,EAAG,EAAE,EAC9C,EAAO,SAAS,OAAO,EAAE,OAAO,UAAU,EAAG,EAAE,EAC/C,EAAO,EAAO,EAAO,EAAO,EAC5B,EAAU,EAAO,MACvB,IAAI,EAAW,EACX,EAAY,EACZ,OAAO,EAAO,MAAU,KAAe,OAAO,EAAO,OAAW,IAC9D,EAAI,KAAK,MAAM,QAAU,QAAU,EAAI,KAAK,MAAM,SAAW,QAC/D,EAAW,EAAI,KAAK,MAAM,MAAQ,EAClC,EAAY,EAAI,KAAK,MAAM,SAE3B,EAAW,EAAO,EAClB,EAAY,IAGd,EAAW,EAAO,MAClB,EAAY,EAAO,QAErB,MAAM,EAAY,EAAY,gBAAgB,GAAS,SAAS,EAChE,EAAS,SAAS,EAAW,CAC3B,GAAI,EAAO,UACX,aAAc,EAAO,aAAe,EAAO,aAAe,iBAC1D,MAAO,EAAW,KAClB,OAAQ,EAAY,IAC1B,CAAK,EACD,MAAM,EAAU,EAAY,gBAAgB,GAAS,OAAO,EAC5D,EAAU,YAAY,CAAO,EAC7B,MAAM,EAAS,EAAY,UAAS,EAElC,OAAO,IAGP,GAAO,IAET,EAAQ,eAAe,EAAO,MAAO,OAAQ,CAAO,EACpD,EAAS,SAAS,EAAS,CACzB,EAAG,EACH,EAAG,EACH,oBAAqB,OACrB,MAAO,EAAW,KAClB,OAAQ,EAAY,IAC1B,CAAK,EACD,EAAQ,MAAM,QAAU,EAAO,QAC/B,EAAE,IAAI,OAAO,KAAK,YAAY,CAAS,CACzC,CAIA,eAAe,EAAM,CACnB,MAAM,EAAI,KAAK,EACT,EAAQ,EAAE,OAAO,MAAM,KAC7B,OAAK,IAAU,OAAS,IAAU,aAAe,EAAE,OAAO,YAAY,IAAI,aAAe,IAAU,WAAa,IAAU,UACxH,KAAK,YAAc,EAAK,aAExB,KAAK,YAAc,EAAK,aAAe,EAAE,WAAW,OAAO,OAEtD,KAAK,WACd,CAOA,mBAAmB,EAAW,CAC5B,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACT,GAAc,GAAM,EAAK,EAAE,QAAQ,wBAA0B,KAAO,OAAS,EAAG,CAAS,IAAM,KAAO,EAAK,EACjH,MAAO,CACL,KAAM,EAAQ,SAAS,EAAE,QAAQ,QAAQ,CAAS,CAAC,EAAI,EAAE,QAAQ,QAAQ,CAAS,EAAI,EAAE,QAAQ,KAChG,KAAM,EAAQ,SAAS,EAAE,QAAQ,QAAQ,CAAS,CAAC,EAAI,EAAE,QAAQ,QAAQ,CAAS,EAAI,EAAE,QAAQ,KAChG,SAAU,CAAC,GAAG,EAAK,EAAE,OAAO,MAAM,CAAU,IAAM,MAAgB,EAAG,SAC3E,CACE,CAeA,kBAAkB,EAAW,EAAkB,CAC7C,MAAM,EAAI,KAAK,EACT,CAAE,UAAA,EAAW,oBAAA,EAAqB,oBAAA,CAAmB,EAAK,EAC1D,CAAE,KAAA,EAAM,KAAA,CAAI,EAAK,EACjB,EAAO,EAAO,EACpB,IAAI,EAAS,IAAS,EAAI,EAAY,EAAO,EAAI,KAAO,EAAO,GAAa,EAAO,IAC/E,EAAU,WACZ,EAAS,IAAM,GAEjB,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAQ,GAAG,CAAC,EAC1C,MAAM,EAAc,MAAM,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAI,EAAE,OAAO,KAAK,QAAQ,KAAK,WAAW,EAAI,EAAE,OAAO,KAAK,QAC7G,EAAQ,CACZ,OAAA,EACA,MAAO,EACP,QAAS,CACf,EACU,EAAQ,CACZ,OAAA,EACA,MAAO,EACP,QAAS,CACf,EACI,OAAO,EAAU,SAAW,CAAC,EAAO,CAAK,EAAI,CAAC,EAAO,CAAK,CAC5D,CAIA,SAAS,EAAM,CACb,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACf,KAAK,KAAO,EACZ,MAAM,EAAM,KAAK,EAAE,OACnB,IAAI,EACA,EAAa,EACjB,KAAK,YAAc,KAAK,eAAe,CAAI,EAC3C,MAAM,EAAqB,EAAI,YAAY,KAAK,OAAO,qBAAuB,EAAI,YAAY,KAAK,OAAO,oBAE1G,IAAI,EADe,KAAK,cAAa,EACV,KAAK,WAAW,EACvC,EAAE,WAAW,aAAa,KAAK,WAAW,IAAM,SAClD,EAAY,EAAE,WAAW,aAAa,KAAK,WAAW,GAEpD,OAAO,GAAc,aACvB,EAAY,EAAU,CACpB,YAAa,KAAK,YAClB,eAAgB,EAAK,eACrB,MAAO,EAAK,MACZ,EAAA,CACR,CAAO,GAEH,MAAM,EAAW,EAAK,SAAW,EAAK,SAAW,KAAK,YAAY,KAAK,WAAW,EAClF,IAAI,EAAc,MAAM,QAAQ,EAAI,KAAK,OAAO,EAAI,EAAI,KAAK,QAAQ,KAAK,WAAW,EAAI,EAAI,KAAK,QAClG,MAAM,EAAc,IAAa,YAAc,EAC3C,EAAK,QACP,EAAY,EAAK,OAEnB,MAAM,EAEJ,EAAE,OAAO,OAAO,KAAK,WAAW,GAE7B,GAAM,EAAmC,GAAW,OAAS,KAAO,OAAS,EAAG,EAAK,cAAc,IAAM,MAAgB,EAAG,YAC/H,GAAa,GAAM,EAAmC,GAAW,OAAS,KAAO,OAAS,EAAG,EAAK,cAAc,IAAM,KAAO,OAAS,EAAG,WAEtI,IACH,EAAY,OACZ,QAAQ,KAAK,8BAA8B,GAEzC,EAAK,UAAY,QAAU,EAAK,UAAY,OAAM,EAAc,EAAK,SACzE,IAAI,EAAe,EACf,EAAQ,cAAc,CAAS,EACjC,EAAe,EAAQ,oBAAoB,EAAW,CAAW,EACxD,EAAU,QAAQ,KAAK,IAAM,GAClC,EAAU,QAAQ,GAAG,IAAM,GAC7B,EAAe,EACN,EAAU,OAAS,IAC5B,EAAe,EAAQ,UAAU,EAAW,CAAW,GAGrD,EAAU,QAAQ,MAAM,EAAI,GAC9B,EAAc,EAAQ,mBAAmB,CAAS,EAElD,EAAe,EAAQ,UAAU,EAAQ,QAAQ,CAAS,EAAG,CAAW,EAG5E,MAAM,EAAoB,EAAQ,cAAc,CAAS,EAAI,EAAQ,cAAc,CAAS,EAAI,EAShG,GARI,IAAa,YACf,EAAc,KAAK,kBAAkB,CACnC,WAAY,EAAK,WACjB,YAAA,EACA,UAAW,EACX,aAAA,CACR,CAAO,GAEC,EAAa,CACf,MAAM,EAAa,EAAI,KAAK,SAAS,WAAa,CAAC,GAAG,EAAI,KAAK,SAAS,UAAU,EAAI,CAAA,EACtF,IAAI,EAAO,EAAI,KAAK,SAAS,KACzB,IACF,EAAW,KAAK,WAAW,EAAI,KAAK,kBAClC,KAAK,mBAAmB,KAAK,WAAW,EACxC,EAAI,YAAY,KAAK,MAC/B,EACQ,EAAO,YAET,EAAe,KAAK,mBAAmB,CACrC,KAAA,EACA,WAAY,EAAK,WACjB,UAAW,EACX,YAAA,EACA,WAAA,EACA,EAAG,KAAK,YAIR,kBAAmB,CAC3B,CAAO,CACH,CACA,GAAI,IAAa,QAAS,CACxB,MAAM,EAAS,EAAI,KAAK,MAAM,IACxB,EAAY,EAAK,UAAY,EAAK,UAAY,GAC9C,EAAa,UAAU,EAAE,QAAQ,IAAI,GAAG,EAAK,aAAe,CAAC,GAAG,CAAS,GAC3E,KAAK,WAAW,QAAQ,CAAU,IAAM,KAC1C,KAAK,eAAe,CAClB,QAAS,EACT,MAAO,MAAM,QAAQ,CAAM,EAAI,EAAK,aAAe,EAAO,OAAS,EAAO,EAAK,YAAY,EAAI,EAAO,CAAC,EAAI,EAC3G,MAAO,EAAK,MAAQ,EAAK,MAAQ,OACjC,OAAQ,EAAK,OAAS,EAAK,OAAS,OACpC,aAAc,EAAK,aACnB,UAAW,CACrB,CAAS,EACD,KAAK,WAAW,KAAK,CAAU,GAEjC,EAAW,QAAQ,CAAU,GAC/B,MAAW,EACT,EAAW,EACF,IAAa,UACtB,EAAW,EAEX,EAAW,EAEb,OAAI,EAAK,QACP,EAAW,GAEN,CACT,CAIA,YAAY,EAAa,CACvB,MAAM,EAAI,KAAK,EACf,OAAI,MAAM,QAAQ,EAAE,OAAO,KAAK,IAAI,EAC3B,EAAE,OAAO,KAAK,KAAK,CAAW,EAE9B,EAAE,OAAO,KAAK,IAEzB,CACA,eAAgB,CACd,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,OACR,EAAO,KAAK,KAClB,IAAI,EAAa,CAAA,EACjB,OAAI,EAAE,QAAQ,YAGV,EAAE,OAAO,OAAO,KAAK,WAAW,EAAE,OAAS,OAEvC,MAAM,QAAQ,EAAE,QAAQ,OAAO,MAAM,EACvC,EAAa,EAAE,QAAQ,OAAO,OAE9B,EAAW,KAAK,EAAE,QAAQ,OAAO,MAAM,EAGrC,MAAM,QAAQ,EAAE,QAAQ,KAAK,MAAM,EACrC,EAAa,EAAE,QAAQ,KAAK,OAE5B,EAAW,KAAK,EAAE,QAAQ,KAAK,MAAM,EAIrC,EAAI,MAAM,OAAS,OACjB,MAAM,QAAQ,EAAE,QAAQ,OAAO,MAAM,EACvC,EAAa,EAAE,QAAQ,OAAO,OAE9B,EAAW,KAAK,EAAE,QAAQ,OAAO,MAAM,EAGrC,MAAM,QAAQ,EAAE,QAAQ,KAAK,MAAM,EACrC,EAAa,EAAE,QAAQ,KAAK,OAE5B,EAAW,KAAK,EAAE,QAAQ,KAAK,MAAM,EAIvC,OAAO,EAAK,WAAe,MAC7B,EAAa,CAAA,EACT,MAAM,QAAQ,EAAK,UAAU,EAC/B,EAAa,EAAK,WAAW,MAAK,EAElC,EAAW,KAAK,EAAK,UAAU,GAG5B,CACT,CAEA,kBAAkB,CAAE,WAAA,EAAY,YAAA,EAAa,UAAA,EAAW,aAAA,CAAY,EAAI,CACtE,IAAI,EAAU,KAAK,EAAE,OAAO,KACxB,IACF,EAAU,GAEZ,MAAM,EAAO,KAAK,KACZ,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAqB,MAAM,QAAQ,EAAQ,QAAQ,WAAW,EAAI,EAAQ,QAAQ,YAAY,KAAK,WAAW,EAAI,EAAQ,QAAQ,YAClI,EAAmB,EACzB,OAAI,MAAM,QAAQ,EAAQ,QAAQ,KAAK,EACjC,OAAO,EAAQ,QAAQ,MAAM,EAAK,YAAY,EAAM,IAQtD,EAPW,EAAS,YAClB,EAAQ,QAAQ,MAAM,EAAK,YAAY,EACvC,EAAQ,QAAQ,MAChB,EAAQ,QAAQ,OAChB,EACA,CACV,EAGQ,EAAc,EAGhB,EAAc,EAAS,YACrB,EAAQ,QAAQ,MAChB,EAAQ,QAAQ,MAChB,EAAQ,QAAQ,OAChB,EACA,CACR,EAEW,CACT,CACA,mBAAmB,CACjB,KAAA,EACA,UAAA,EACA,YAAA,EACA,WAAA,EACA,WAAA,EACA,EAAA,EACA,kBAAA,EAAoB,EACxB,EAAK,CACD,IAAI,EAAU,KAAK,EAAE,OAAO,KACxB,IACF,EAAU,EAAe,EAAe,CAAA,EAAI,CAAO,EAAG,CAAU,GAElE,MAAM,EAAO,KAAK,KACZ,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAQ,IAAI,EAClB,EAAO,GAAQ,EAAQ,SAAS,KAChC,IAAI,EAAe,EACf,EACA,EAAc,EAAQ,SAAS,cAAgB,OAAS,EAAc,MAAM,QAAQ,EAAQ,SAAS,WAAW,EAAI,EAAQ,SAAS,YAAY,CAAC,EAAI,EAAQ,SAAS,YACvK,EAAa,QAAQ,MAAM,EAAI,KACjC,EAAc,EAAQ,mBAAmB,CAAY,GAEvD,IAAI,EAAY,EAAQ,SAAS,YAAc,OAAS,EAAc,MAAM,QAAQ,EAAQ,SAAS,SAAS,EAAI,EAAQ,SAAS,UAAU,CAAC,EAAI,EAAQ,SAAS,UACnK,GAAI,EAAQ,SAAS,mBAAqB,QAAU,EAAQ,SAAS,iBAAiB,SAAW,EAC3F,EAAQ,SAAS,QAAU,OAC7B,EAAa,EAAM,WACjB,WAAW,EAAQ,SAAS,cAAc,EAAI,GAC9C,EAAU,QAAQ,KAAK,EAAI,GAAK,EAAQ,QAAQ,CAAS,EAAI,CACvE,EAEQ,EAAa,EAAM,WACjB,WAAW,EAAQ,SAAS,cAAc,EAC1C,EAAU,QAAQ,KAAK,EAAI,GAAK,EAAQ,QAAQ,CAAS,EAAI,CACvE,UAGU,EAAQ,SAAS,iBAAiB,EAAK,YAAY,EAAG,CACxD,MAAM,EAAW,EAAQ,SAAS,iBAAiB,EAAK,YAAY,EACpE,EAAa,EACT,EAAS,QAAQ,MAAM,EAAI,KAC7B,EAAY,EAAQ,mBAAmB,CAAQ,EAEnD,MACE,EAAa,EASjB,GANI,EAAQ,SAAS,eACnB,EAAe,EAAQ,SAAS,cAE9B,EAAQ,SAAS,aACnB,EAAa,EAAQ,SAAS,YAE5B,EAAQ,SAAS,cAAe,CAClC,MAAM,EAAI,EACV,EAAe,EACf,EAAa,CACf,CACA,OAAI,EAAa,QAAQ,KAAK,EAAI,KAChC,EAAe,EAAQ,QAAQ,CAAY,GAEzC,EAAW,QAAQ,KAAK,EAAI,KAC9B,EAAa,EAAQ,QAAQ,CAAU,GAElC,EAAS,aACd,EACA,EACA,EACA,EACA,EACA,EAAK,KACL,EAAQ,SAAS,MACjB,EACA,EACA,CACN,CACE,CACF,CACA,MAAM,GAAkB,CAAC,OAAQ,UAAW,QAAQ,EACpD,SAAS,GAAc,EAAK,EAAU,CACpC,MAAM,EAAI,GAAO,EAAI,SACrB,OAAO,GAAK,EAAE,MAAQ,EAAE,OAAS,MAAQ,EAAI,CAC/C,CACA,SAAS,GAAiB,EAAG,CAC3B,MAAM,EAAS,EAAE,OAAO,QAAU,CAAA,EAC5B,EAAO,EAAE,OAAO,MAAM,KACtB,EAAa,IAAS,WAAa,IAAS,SAC5C,EAAa,EAAE,OAAO,SAAW,EAAE,OAAO,QAAQ,KAClD,EAAY,MAAM,QAAQ,CAAU,EAAI,EAAW,KAAM,GAAM,EAAI,CAAC,GAAK,GAAc,GAAK,EAC5F,EAAW,CAAC,EAAE,EAAE,OAAO,YAAc,EAAE,OAAO,WAAW,SACzD,EAAY,IAAS,UAC3B,IAAI,EAAQ,EACR,EAAS,EACb,OAAA,EAAO,QAAS,GAAM,CACpB,MAAM,EAAI,MAAM,QAAQ,EAAE,IAAI,EAAI,EAAE,KAAK,OAAS,EAC9C,EAAI,IAAQ,EAAS,IACrB,GAAc,GAAa,KAAW,GAAS,GAC/C,IAAU,GAAS,EACzB,CAAC,EAEG,GADY,MACO,EAAQ,KAAK,IAAI,EAAO,CAAM,GAC9C,CACT,CACA,SAAS,GAA4B,EAAG,CACtC,IAAI,EAAI,EACR,MAAM,EAAW,EAAE,OAAO,MAAQ,EAAE,OAAO,KAAK,KAC1C,EAAqB,GAAM,IAAM,WAAa,IAAM,SAAW,IAAM,WAC3E,GAAI,MAAM,QAAQ,CAAQ,EAAI,EAAS,KAAK,CAAiB,EAAI,EAAkB,CAAQ,EACzF,MAAO,GAET,MAAM,GAAc,GAAM,EAAK,EAAE,OAAO,cAAgB,KAAO,OAAS,EAAG,OAAS,KAAO,OAAS,EAAG,OACvG,GAAI,GAAc,EAAW,qBAAuB,EAAW,oBAC7D,MAAO,GAET,MAAM,EAAS,EAAE,OAAO,QAAU,CAAA,EAC5B,EAAc,EAAO,OAAS,EAAO,MAAM,QAAU,EAAO,MAAM,OAAO,KACzE,EAAe,EAAO,QAAU,EAAO,OAAO,QAAU,EAAO,OAAO,OAAO,KAEnF,MADI,GAAA,GAAe,CAAC,GAAgB,SAAS,CAAW,GACpD,GAAgB,CAAC,GAAgB,SAAS,CAAY,EAE5D,CACA,MAAM,EAAQ,CAKZ,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,SAAW,IAAI,GAAQ,KAAK,CAAC,EAClC,KAAK,UAAY,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EAC9C,KAAK,YAAc,KACnB,KAAK,iBAAmB,EAC1B,CAOA,sBAAuB,CACrB,KAAK,YAAc,KACnB,KAAK,iBAAmB,EAC1B,CACA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EAEf,GADA,EAAE,QAAQ,QAAQ,KAAO,MAAM,QAAQ,EAAE,OAAO,QAAQ,IAAI,EAAI,EAAE,OAAO,QAAQ,KAAO,CAAC,EAAE,OAAO,QAAQ,IAAI,EAC1G,EAAE,QAAQ,QAAQ,KAAK,OAAS,GAClC,GAAI,EAAE,QAAQ,QAAQ,KAAK,OAAS,EAAE,WAAW,OAAO,OAAS,EAC/D,QAAS,EAAI,EAAG,GAAK,EAAE,WAAW,OAAO,OAAQ,IAC3C,OAAO,EAAE,QAAQ,QAAQ,KAAK,CAAC,EAAM,KACvC,EAAE,QAAQ,QAAQ,KAAK,KAAK,EAAE,QAAQ,QAAQ,KAAK,CAAC,CAAC,OAK3D,EAAE,QAAQ,QAAQ,KAAO,EAAE,OAAO,OAAO,IACvC,IAEE,EAAE,OAAO,QAAQ,IAE3B,CAEE,CAEA,iBAAiB,CACf,UAAA,EACA,YAAA,EACA,EAAA,EACA,MAAA,EACA,iBAAA,EAAmB,GACnB,eAAA,EAAiB,EACrB,EAAK,CACD,MAAM,EAAI,KAAK,EACT,EAAI,EACJ,EAAI,EACV,IAAI,EAAgB,KACpB,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAO,GAAc,KAAK,IAAK,CAAQ,EACvC,EAAqB,EAAE,OAAO,QAAQ,UAAY,EAAE,OAAO,QAAQ,SAAS,OAClF,GAAI,MAAM,QAAQ,EAAE,CAAC,EACnB,QAAS,EAAI,EAAG,EAAI,EAAE,EAAE,OAAQ,IAAK,CACnC,IAAI,EACA,EAAiB,EACjB,EAAgB,CAAC,EAAQ,SAAS,EAAE,EAAE,CAAC,CAAC,EACxC,EAAE,QAAQ,QAAQ,cAAgB,GAAK,EAAE,QAAQ,eAAiB,EAAE,WAAW,OAAO,CAAC,EAAE,EAAI,CAAC,IAAM,MAAQ,CAAC,IAC/G,EAAgB,IAEd,IAAM,GAAK,IAAM,IAAG,EAAiB,GACrC,IAAM,GAAK,IAAM,IAAG,EAAiB,GACzC,IAAI,EAAgB,oBAKpB,IAJK,EAAE,OAAO,MAAM,OAAS,QAAU,EAAE,OAAO,MAAM,OAAS,SAAW,CAAC,EAAE,QAAQ,aAAe,CAAC,EAAE,OAAO,QAAQ,YACpH,GAAiB,uBAEM,MAAM,QAAQ,EAAE,OAAO,QAAQ,IAAI,EAAI,EAAE,QAAQ,QAAQ,KAAK,CAAW,EAAI,EAAI,EAAE,OAAO,QAAQ,KAAO,IAC1G,GAAoB,EAAoB,CAC1D,EAAK,OAAS,WACZ,OAAO,EAAE,QAAQ,YAAY,CAAW,EAAM,MAChD,EAAE,QAAQ,YAAY,CAAW,EAAI,CAAA,GAEvC,EAAE,QAAQ,YAAY,CAAW,EAAE,CAAc,EAAI,CAAC,EAAE,EAAE,CAAC,EAAG,EAAE,EAAE,CAAC,CAAC,GAEjE,IACH,GAAiB,KAAK,EAAQ,SAAQ,CAAE,IAE1C,MAAM,EAAO,KAAK,gBAAgB,CAChC,SAAU,EACV,YAAA,EACA,eAAA,CACZ,CAAW,EACK,EAEJ,EAAE,OAAO,OAAO,CAAC,EAgBnB,GAdI,EAAI,KAAK,CAAc,IACrB,EAAI,KAAK,CAAc,EAAE,YAC3B,EAAK,eAAiB,EAAI,KAAK,CAAc,EAAE,WAE7C,EAAI,KAAK,CAAc,EAAE,cAC3B,EAAK,iBAAmB,EAAI,KAAK,CAAc,EAAE,cAGjD,OAAO,EAAU,MACnB,EAAK,MAAQ,IAEX,EAAE,EAAE,CAAC,EAAI,CAAC,EAAE,QAAQ,QAAQ,aAAe,EAAE,EAAE,CAAC,EAAI,EAAE,OAAO,UAAY,EAAE,QAAQ,QAAQ,aAAe,EAAE,EAAE,CAAC,EAAI,CAAC,EAAE,QAAQ,QAAQ,aAAe,EAAE,EAAE,CAAC,EAAI,EAAE,OAAO,WAAa,EAAE,QAAQ,QAAQ,eACxM,EAAK,MAAQ,GAEX,CAAC,EAAe,CAElB,IAD+B,EAAE,QAAQ,QAAQ,KAAK,CAAW,EAAI,GAAK,GAAoB,IAChE,CAAC,EAAe,CAC5C,MAAM,EAAe,CAAC,GAAoB,CAAC,EACvC,GAAgB,KAAK,aAAe,KAAK,mBAAqB,EAChE,EAAgB,KAAK,aAErB,EAAgB,EAAK,MAAM,CACzB,MAAO,EAAe,4BAA8B,EACtE,CAAiB,EACD,EAAc,KACZ,YACA,0BAA0B,EAAE,QAAQ,IAAI,GAC1D,EACgB,KAAK,sBAAsB,CAAa,EACpC,IACF,KAAK,YAAc,EACnB,KAAK,iBAAmB,GAG9B,CACA,EAAgB,EAAK,WAAW,EAAE,EAAE,CAAC,EAAG,EAAE,EAAE,CAAC,EAAG,CAAI,EACpD,EAAc,KAAK,MAAO,CAAc,EACxC,EAAc,KAAK,IAAK,CAAc,EACtC,EAAc,KAAK,QAAS,CAAW,EACvC,EAAc,KAAK,aAAa,sBAAuB,EAAK,KAAK,EACjE,GAAuB,EAAe,EAAE,EAAE,CAAC,EAAG,CAAC,EAC/C,KAAK,SAAS,mBACZ,EACA,EACA,CACd,EACgB,GACF,EAAc,IAAI,CAAa,CAEnC,CACF,MACM,OAAO,EAAE,QAAQ,YAAY,CAAW,EAAM,MAChD,EAAE,QAAQ,YAAY,CAAW,EAAI,CAAA,GACvC,EAAE,QAAQ,YAAY,CAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAE5D,CAEF,OAAO,CACT,CAEA,gBAAgB,CACd,SAAA,EACA,YAAA,EACA,eAAA,EAAiB,KACjB,OAAA,EAAS,KACT,KAAA,EAAO,KACP,YAAA,EAAc,IAClB,EAAK,CACD,MAAM,EAAI,KAAK,EACT,EAAS,KAAK,eAAe,CAAW,EAC9C,IAAI,EAAQ,IAAS,KAAO,EAAE,QAAQ,QAAQ,KAAK,CAAW,EAAI,EAClE,MAAM,EAAI,EAAE,OAAO,QACnB,OAAI,IAAmB,MAAQ,EAAE,SAAS,QACxC,EAAE,SAAS,IAAK,GAAW,CACrB,EAAO,cAAgB,GAAe,EAAO,iBAAmB,IAClE,EAAO,iBAAmB,EAAO,YACjC,EAAO,eAAiB,EAAO,UAC/B,EAAQ,EAAO,KACf,EAAO,WAAa,EAAO,MAE/B,CAAC,EAEI,CACL,MAAO,IAAW,KAAO,EAAQ,EACjC,QAAS,IAAW,KAAO,EAAS,EAAE,OACtC,iBAAkB,IAAgB,KAAO,EAAc,MAAM,QAAQ,EAAE,WAAW,EAAI,EAAE,YAAY,CAAW,EAAI,EAAE,YACrH,iBAAkB,EAAO,iBACzB,eAAgB,EAAO,eACvB,MAAO,EAAO,aAAe,MAAM,QAAQ,EAAE,KAAK,EAAI,EAAE,MAAM,CAAW,EAAI,EAAE,OAC/E,MAAO,EACP,mBAAoB,MAAM,QAAQ,EAAE,aAAa,EAAI,EAAE,cAAc,CAAW,EAAI,EAAE,cACtF,qBAAsB,MAAM,QAAQ,EAAE,eAAe,EAAI,EAAE,gBAAgB,CAAW,EAAI,EAAE,gBAC5F,iBAAkB,MAAM,QAAQ,EAAE,WAAW,EAAI,EAAE,YAAY,CAAW,EAAI,EAAE,YAChF,YAAA,CACN,CACE,CAIA,sBAAsB,EAAa,CACjC,MAAM,EAAI,KAAK,EACT,EAAW,qBACjB,KAAK,UAAU,qBAAqB,EAAa,CAAQ,EACzD,EAAY,KAAK,iBAAiB,QAAU,GAAM,CAC5C,EAAE,OAAO,QAAQ,SACA,EAAS,oBAC1B,EAAE,OACF,EAAY,KACZ,CACV,GACwB,EAAE,OAAO,QAAQ,QAAQ,CAAC,CAE9C,CAAC,EACD,EAAY,KAAK,iBAAiB,WAAa,GAAM,CAC/C,EAAE,OAAO,QAAQ,YACA,EAAS,oBAC1B,EAAE,OACF,EAAY,KACZ,CACV,GACwB,EAAE,OAAO,QAAQ,WAAW,CAAC,CAEjD,CAAC,EACD,EAAY,KAAK,iBACf,aACC,GAAM,CACL,MAAM,EAAa,EAAS,oBAC1B,EAAE,OACF,EAAY,KACZ,CACV,EACY,GAAc,EAAW,UAC3B,KAAK,UAAU,cAAc,EAAW,SAAU,CAAC,CAEvD,EACA,CAAE,QAAS,EAAI,CACrB,CACE,CAKA,eAAe,EAAa,CAC1B,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,QAAQ,QAAQ,OAC3B,EAAe,EAAE,OAAO,QAAQ,aAAe,EAAE,OAAO,QAAQ,aAChE,EAAmB,MAAM,QAAQ,CAAY,EAAI,EAAa,CAAW,EAAI,EAC7E,EAAiB,MAAM,QAAQ,CAAM,EAAI,EAAO,CAAW,EAAI,EACrE,MAAO,CACL,iBAAA,EACA,eAAA,CACN,CACE,CACF,CACA,MAAM,EAAQ,CAKZ,YAAY,EAAG,EAAK,CAClB,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,YAAc,KAAK,EAAE,OAAO,MAAM,WAAW,QAClD,KAAK,KAAO,IAAI,GAAW,KAAK,CAAC,EACjC,KAAK,QAAU,IAAI,GAAQ,KAAK,CAAC,EACjC,KAAK,KAAO,IAAI,GAAK,KAAK,CAAC,EAC3B,KAAK,QAAU,IAAI,GAAQ,KAAK,EAAG,KAAK,GAAG,EAC3C,KAAK,SAAW,IAAI,EAAS,KAAK,CAAC,EACnC,KAAK,cAAgB,KACrB,KAAK,oBAAsB,KAC3B,KAAK,WAAa,IACpB,CAMA,KAAK,EAAU,EAAG,EAAM,CACtB,MAAM,EAAI,KAAK,EACT,EAAW,KAAK,SAChB,EAAO,GAAc,KAAK,IAAK,CAAQ,EACvC,EAAY,EAAK,UACjB,EAAY,EAAK,UACjB,EAAS,EAAK,OACd,EAAe,EAAK,SAC1B,IAAI,EAAe,KAAK,cAexB,IAdI,CAAC,GAAgB,KAAK,sBAAwB,KAChD,EAAe,EAAK,MAAM,CACxB,MAAO,+CAA+C,EAAE,OAAO,MAAM,IAAI,EACjF,CAAO,EACD,EAAa,KACX,YACA,0BAA0B,EAAE,QAAQ,IAAI,GAChD,EACM,KAAK,QAAQ,sBAAsB,CAAY,EAC/C,EAAa,IAAI,CAAY,EAC7B,KAAK,cAAgB,EACrB,KAAK,oBAAsB,EAC3B,KAAK,WAAa,KAAK,qBAAqB,EAAW,CAAI,GAEzD,MAAM,QAAQ,EAAU,CAAC,EAC3B,QAAS,EAAI,EAAG,EAAI,EAAU,EAAE,OAAQ,IAAK,CAC3C,IAAI,EAAiB,EAAI,EACrB,EAAa,GACb,IAAM,GAAK,IAAM,IAAG,EAAiB,GACrC,IAAM,GAAK,IAAM,IAAG,EAAiB,GACzC,IAAI,EAAS,EAAE,QAAQ,QAAQ,KAAK,CAAS,EAC7C,GAAI,IAAW,IAAU,CACvB,MAAM,EAAS,EAAE,OAAO,YAAY,OACpC,EAAS,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAc,EACnD,EAAO,WACT,GAAU,GAER,EAAO,iBAAmB,EAAS,EAAO,kBAC5C,EAAS,EAAO,iBAEd,EAAO,iBAAmB,EAAS,EAAO,kBAC5C,EAAS,EAAO,gBAEpB,CACA,MAAM,EAAI,EAAU,EAAE,CAAC,EACjB,EAAI,EAAU,EAAE,CAAC,EAKvB,GAJA,EAAS,GAAU,GACf,IAAM,MAAQ,OAAO,EAAE,WAAW,OAAO,CAAS,EAAE,CAAc,EAAM,OAC1E,EAAa,IAEX,EAAY,CACd,MAAM,EAAQ,KAAK,UACjB,EACA,EACA,EACA,EACA,EACA,CACZ,EACU,EAAa,IAAI,CAAK,EAClB,EAAK,OAAS,WACZ,OAAO,EAAE,QAAQ,YAAY,CAAS,EAAM,MAC9C,EAAE,QAAQ,YAAY,CAAS,EAAI,CAAA,GAErC,EAAE,QAAQ,YAAY,CAAS,EAAE,CAAc,EAAI,CAAC,EAAG,CAAC,EAE5D,CACF,CAEJ,CAQA,qBAAqB,EAAW,EAAM,CACpC,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,MAAO,CACL,UAAA,EACA,KAAA,EACA,SAAU,EAAE,OAAO,MAAM,OAAS,UAAY,EAAE,QAAQ,aAAe,EAAE,OAAO,OAAO,CAAS,GAChG,EAAE,OAAO,OAAO,CAAS,EAAE,OAAS,SAEpC,eAAgB,CAAC,EAAE,OAAO,QAAQ,SAAS,OAE3C,aAAc,KAEd,cAAe,OAEf,WAAY,OACZ,kBAAmB,EAAE,OAAO,MAAM,WAAW,QAC7C,cAAe,KAAK,aAAe,CAAC,EAAE,QAAQ,aAAe,CAAC,EAAE,QAAQ,QACxE,QAAS,EAAK,EAAE,OAAO,YAAY,UAAY,KAAO,OAAS,EAAG,OAElE,KAAM,IACZ,CACE,CASA,UAAU,EAAG,EAAG,EAAQ,EAAW,EAAgB,EAAG,CACpD,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAI,EACJ,EAAO,KAAK,KACZ,EAAU,KAAK,QACf,EAAO,KAAK,KACZ,EAAU,KAAK,QACrB,IAAI,EAAK,KAAK,YACV,CAAC,GAAM,EAAG,YAAc,KAC1B,EAAK,KAAK,WAAa,KAAK,qBAC1B,EACA,GAAc,KAAK,IAAK,KAAK,QAAQ,CAC7C,GAEI,MAAM,EAAO,EAAG,KAChB,IAAI,EACA,EAAG,gBACA,EAAG,eACN,EAAG,aAAe,EAAQ,gBAAgB,CACxC,SAAU,oBACV,YAAa,EACb,eAAA,EACA,OAAQ,EAAG,SAAW,EAAS,IACzC,CAAS,GAEH,EAAe,EAAG,aACd,EAAG,WACL,EAAa,MAAQ,EACrB,EAAa,QAAU,IAGzB,EAAe,EAAQ,gBAAgB,CACrC,SAAU,oBACV,YAAa,EACb,eAAA,EACA,OAAQ,EAAG,SAAW,EAAS,IACvC,CAAO,EAMH,MAAM,EAFJ,EAAE,OAAO,OAAO,CAAC,EAEE,KAAK,CAAc,EACxC,IAAI,EACA,EAAG,aAAe,OACpB,EAAiB,EAAG,YAEpB,EAAiB,EAAK,SAAS,CAC7B,aAAc,EACd,eAAA,EACA,MAAO,EAAa,eACpB,aAAc,oBACd,MAAO,EAAE,WAAW,OAAO,CAAS,EAAE,CAAC,CAC/C,CAAO,EACG,EAAG,gBAAkB,SACvB,EAAG,cAAgB,EAAG,gBAAkB,EAAK,YAAY,CAAS,IAAM,SAAW,OAAO,EAAa,gBAAmB,UAAY,CAAC,CAAC,EAAa,gBAEnJ,EAAG,eAAiB,CAA8B,GAAS,YAC7D,EAAG,WAAa,IAGpB,MAAM,EAAK,EAAK,WAAW,EAAG,EAAG,CAAY,EACb,GAAS,YACvC,EAAiB,EAAS,WAE5B,MAAM,EAAK,EAAG,OACd,GAA2B,GAAG,SAAY,EAAG,aAAe,EAAE,QAAQ,OAAO,OAAQ,CACnF,MAAM,EAAU,KAAK,OAClB,EAAK,EAAE,WAAW,QAAQ,CAAS,IAAM,KAAO,OAAS,EAAG,CAAc,CACnF,EACW,MAAM,CAAO,IAChB,EAAiB,EAAE,QAAQ,OAAO,EAAU,EAAE,QAAQ,OAAO,MAAM,EAEvE,CAIA,GAHA,EAAG,KAAK,CACN,KAAM,CACZ,CAAK,EACG,EAAG,kBAAmB,CACxB,MAAM,EAAa,EAAE,OAAO,MAAM,WAClC,EAAQ,WAAW,EAAI,EAAY,CAAS,CAC9C,CACA,GAAI,EAAG,cAAe,CACpB,GAAI,CAAC,EAAG,KAAM,CACZ,MAAM,EAAU,EAAE,OAAO,MAAM,WACzB,EAAc,EAAE,QAAQ,YAAc,EACtC,EAAU,EAAQ,iBAClB,EAAc,GAAW,EAAQ,UAAY,GACnD,EAAG,KAAO,CACR,SAAU,EAAQ,MAClB,UAAW,EAAc,KAAK,IAAI,GAAI,EAAQ,MAAQ,GAAM,KAAK,IAAI,EAAG,CAAW,CAAC,EAAI,CAClG,CACM,CACA,MAAM,EAAQ,GAAe,CAC3B,MAAO,EAAG,KAAK,UAAY,EAAI,aAAe,OAC9C,MAAO,EACP,UAAW,EAAG,KAAK,SAC3B,CAAO,EACD,EAAK,WAAW,EAAI,CAClB,MAAO,EAAG,KAAK,SACf,MAAA,EACA,WAAY,IAAM,EAAK,mBAAmB,CAAE,CACpD,CAAO,CACH,MACE,EAAE,QAAQ,eAAiB,GAE7B,OAAA,EAAG,KAAK,CACN,IAAK,EACL,EAAG,EACH,MAAO,EACP,sBAAuB,EAAa,KAC1C,CAAK,EACD,EAAQ,mBAAmB,EAAI,EAAW,CAAc,EACjD,CACT,CAIA,mBAAmB,EAAG,CACpB,MAAM,EAAI,KAAK,EACf,OAAA,EAAI,EAAI,SAAS,EAAE,OAAO,WAAW,MAAM,SAAU,EAAE,EAAI,EACpD,CACL,EAAA,CACN,CACE,CACF,CACA,MAAM,GAAyB,CAAC,EAAO,EAAG,EAAa,IAAmB,CACxE,GAAI,OAAO,GAAU,WAAY,OAAO,EACxC,MAAM,EAAW,EAAM,CACrB,OAAQ,EAAE,WAAW,OACrB,YAAA,EACA,eAAA,EACA,EAAA,CACJ,CAAG,EACD,OAAO,OAAO,SAAS,CAAQ,EAAI,EAAW,CAChD,EACA,MAAM,EAAW,CAKf,YAAY,EAAG,EAAM,KAAM,CACzB,KAAK,EAAI,EACT,KAAK,IAAM,CACb,CAYA,qBAAqB,EAAG,EAAG,EAAK,EAAG,EAAgB,EAAqB,EAAU,CAChF,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,IAAI,EAAgB,GACpB,MAAM,EAEJ,EAAS,aAAa,EAAK,CAAQ,EAE/B,EAAQ,EAAU,MAClB,EAAS,EAAU,OACrB,EAAI,IAAG,EAAI,GACX,EAAI,EAAE,OAAO,WAAa,IAAQ,EAAI,EAAE,OAAO,WAAa,EAAS,GACrE,OACJ,EAAE,QAAQ,gBAAgB,CAAC,EAAM,MAC/B,EAAE,QAAQ,gBAAgB,CAAC,EAAI,CAAA,GAEjC,EAAE,QAAQ,gBAAgB,CAAC,EAAE,KAAK,CAChC,EAAA,EACA,EAAA,EACA,MAAA,EACA,OAAA,CACN,CAAK,EACD,MAAM,EAEJ,EAAE,QAAQ,gBAAgB,CAAC,EAAE,OAAS,EAElC,EAAiB,OAAO,EAAE,QAAQ,2BAA2B,CAAC,EAAM,IAAc,EAAE,QAAQ,2BAA2B,CAAC,EAAE,EAAE,QAAQ,2BAA2B,CAAC,EAAE,OAAS,CAAC,EAAI,EACtL,GAAI,OACJ,EAAE,QAAQ,gBAAgB,CAAC,EAAE,CAAG,EAAM,IAAa,CACjD,MAAM,EAEJ,EAAE,QAAQ,gBAAgB,CAAC,EAAE,CAAc,GAI3C,EAAI,EAAkB,EAAI,EAAkB,OAAS,EAAI,EAAkB,EAAI,EAAkB,QAAU,EAAI,EAAS,EAAkB,GAAK,EAAI,EAAQ,EAAkB,KAE7K,EAAgB,GAEpB,CACA,OAAI,IAAmB,GAAK,KAC1B,EAAgB,IAEX,CACL,EAAA,EACA,EAAA,EACA,UAAA,EACA,cAAA,CACN,CACE,CAEA,cAAc,CAAE,KAAA,EAAM,IAAA,EAAK,EAAA,EAAG,EAAA,EAAG,aAAA,EAAc,YAAA,EAAc,CAAC,EAAI,CAChE,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAmB,EAAE,OAAO,WAClC,IAAI,EAAI,EACJ,EAAI,EACJ,EAAiB,EACjB,EAAmB,KAEvB,GADwB,EAAE,QAAQ,uBAAuB,QAAQ,CAAC,IAAM,IACjD,CAAC,EAAiB,SAAW,CAAC,MAAM,QAAQ,EAAI,CAAC,EACtE,OAAO,EAET,EAAmB,EAAS,MAAM,CAChC,MAAO,wBACb,CAAK,EACD,QAAS,EAAI,EAAG,EAAI,EAAI,EAAE,OAAQ,IAKhC,GAJI,IAAM,GAAK,IAAM,IAAG,EAAiB,GACrC,IAAM,GAAK,IAAM,IAAG,EAAiB,GACzC,EAAI,EAAI,EAAE,CAAC,EAAI,GAAuB,EAAiB,QAAS,EAAG,EAAG,CAAc,EACpF,EAAI,EAAI,EAAE,CAAC,EAAI,GAAuB,EAAiB,QAAS,EAAG,EAAG,CAAc,EAAI,EACpF,CAAC,MAAM,CAAC,EAAG,CACb,IAAI,EAAM,EAAE,WAAW,OAAO,CAAC,EAAE,CAAc,EAC3C,IAAS,cACP,EACF,EAAM,EAAE,UAAU,iBAAiB,CAAC,EAAE,CAAc,EAEpD,EAAM,EAAE,UAAU,eAAe,CAAC,EAAE,CAAc,GAGtD,IAAI,EAAO,GACX,MAAM,EAAW,GACR,EAAE,OAAO,WAAW,UAAU,EAAG,CACtC,YAAa,EACb,eAAA,EACA,EAAA,CACZ,CAAW,EAEC,EAAE,OAAO,MAAM,OAAS,UAC1B,EAAM,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAc,EAC5C,EAAO,EAAQ,CAAG,EAClB,EAAI,EAAI,EAAE,CAAC,EAOX,EANgB,IAAI,GAClB,KAAK,EAEL,KAAK,GACjB,EACmD,mBAAmB,CAAC,EAChC,GAEzB,OAAO,EAAQ,MACjB,EAAO,EAAQ,CAAG,GAGtB,IAAI,EAAa,EAAE,OAAO,WAAW,WACjC,EAAE,QAAQ,eACR,IAAmB,EACrB,EAAa,MACJ,IACX,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,OAAS,EAC/B,EAAa,QAEb,EAAa,UAGjB,KAAK,mBAAmB,CACtB,EAAA,EACA,EAAA,EACA,KAAA,EACA,EAAA,EACA,EAAG,EACH,OAAQ,EACR,iBAAkB,GAClB,iBAAkB,EAAE,OAAO,WAC3B,WAAA,CACV,CAAS,CACH,CAEF,OAAO,CACT,CAIA,mBAAmB,EAAM,CACvB,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,GAAI,CACF,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,KAAA,EACA,WAAA,EACA,SAAA,EACA,OAAA,EACA,iBAAA,EACA,MAAA,EACA,oBAAA,EACA,iBAAA,EACA,UAAA,EAGA,YAAA,EAAc,EACd,eAAA,EAAiB,CACvB,EAAQ,EACA,EAAgB,KACpB,GAAI,MAAM,QAAQ,EAAE,OAAO,WAAW,eAAe,GAC/C,EAAE,OAAO,WAAW,gBAAgB,QAAQ,CAAC,EAAI,EACnD,OAAO,EAGX,IAAI,EAAkB,CACpB,EAAA,EACA,EAAA,EACA,cAAe,GACf,UAAW,IACjB,EAoBI,GAnBI,IACF,EAAkB,KAAK,qBACrB,EACA,EACA,EACA,EACA,EACA,EACA,SAEE,EAAiB,MAAM,SACvB,EACV,EAAU,SAAQ,CAClB,GAES,EAAE,SAAS,SACd,EAAI,EAAgB,EACpB,EAAI,EAAgB,GAElB,EAAgB,UAAW,CAC7B,MAAM,EAAS,EAAE,QAAQ,sBAAwB,GAC7C,EAAI,EAAE,EAAS,IACnB,EAAgB,UAAU,OAAS,EAAI,EAAE,OAAO,UAChD,EAAgB,UAAU,MAAQ,EAAS,MACzC,EAAO,GAEX,CACA,IAAI,EAAiB,EAAE,QAAQ,WAAW,MAAM,OAAO,CAAC,IACnD,EAAE,OAAO,MAAM,OAAS,OAAS,EAAE,OAAO,MAAM,OAAS,aAAe,EAAE,OAAO,YAAY,IAAI,aAAe,EAAE,OAAO,WAAW,eACvI,EAAiB,EAAE,QAAQ,WAAW,MAAM,OAAO,CAAC,GAElD,OAAO,GAAmB,aAC5B,EACA,EAAe,CACb,OAAQ,EAAE,WAAW,OACrB,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CAAO,GAEC,IACF,EAAiB,GAEnB,MAAM,EAA0B,EAAE,OAAO,MAAM,OAAS,OAAS,EAAE,OAAO,MAAM,OAAS,WACnF,EAAe,EAA0B,EAAI,GACjD,EAAiB,QACjB,EACA,EACA,CACN,EACU,EAAe,EAA0B,EAAI,GACjD,EAAiB,QACjB,EACA,EACA,CACN,EACI,IAAI,EAAO,EACX,MAAM,EAAO,EAUb,GATI,EAAE,QAAQ,eACR,IAAM,IACR,EAAO,EAAe,GAAK,GAEzB,IAAM,GAAK,IACf,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,OAAS,IAC/B,EAAO,IAGP,EAAgB,cAAe,CAqBjC,GApBI,IAAe,UACb,IAAM,EAAE,OAAO,YACjB,EAAa,OAGjB,EAAgB,EAAS,SAAS,CAChC,EAAG,EAAI,EACP,EAAG,EAAI,EACP,UAAW,EACX,WAAY,GAAc,EAAiB,WAC3C,KAAA,EACA,SAAU,GAAY,EAAiB,MAAM,SAC7C,WAAY,EAAiB,MAAM,WACnC,WAAY,EAAiB,MAAM,YAAc,QACzD,CAAO,EACD,EAAc,KAAK,CACjB,MAAO,GAAa,uBACpB,GAAI,EACJ,GAAI,CACZ,CAAO,EACG,EAAiB,WAAW,QAAS,CACvC,MAAM,EAAa,EAAiB,WACpB,IAAI,GAAQ,KAAK,CAAC,EAC1B,WAAW,EAAe,CAAU,CAC9C,CACA,EAAO,IAAI,CAAa,EACxB,GAAuB,EAAe,EAAG,CAAC,EACtC,OAAO,EAAE,QAAQ,2BAA2B,CAAC,EAAM,MACrD,EAAE,QAAQ,2BAA2B,CAAC,EAAI,CAAA,GAE5C,EAAE,QAAQ,2BAA2B,CAAC,EAAE,KAAK,CAAC,CAChD,CACA,OAAO,CACT,CAKA,yBAAyB,EAAI,EAAQ,CACnC,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,WAAW,WAC3B,EAAW,EAAK,QAChB,EAAW,EAAK,QAAU,EAC1B,EAAQ,EAAO,MACf,EAAS,EAAO,OAEhB,EADW,IAAI,EAAS,KAAK,CAAC,EACZ,SACtB,EAAO,EAAI,EACX,EAAO,EAAI,EAAW,EACtB,EAAQ,EAAW,EACnB,EAAS,EACT,EAAK,aACL,EAAE,OAAO,MAAM,aAAe,eAAiB,CAAC,EAAE,OAAO,MAAM,WAAa,OAAS,EAAE,OAAO,MAAM,WACpG,EAAK,QACL,EAAK,YACL,EAAK,WACX,EACI,OAAI,EAAK,WAAW,SACF,IAAI,GAAQ,KAAK,CAAC,EAC1B,WAAW,EAAQ,EAAK,UAAU,EAErC,CACT,CACA,sBAAuB,CACrB,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,GAAI,EAAE,OAAO,MAAM,OAAS,SAAU,OACtC,MAAM,EAAe,EAAE,IAAI,OAAO,iBAChC,6BACN,EACI,QAAS,EAAI,EAAG,EAAI,EAAa,OAAQ,IAAK,CAC5C,MAAM,EAAK,EAAa,CAAC,EACnB,EAEJ,EAAG,QAAO,EAEZ,IAAI,EAAS,KAIb,GAHI,EAAO,OAAS,EAAO,SACzB,EAAS,KAAK,yBAAyB,EAAI,CAAM,GAE/C,EAAQ,EACT,EAAK,EAAG,aAAe,MAAgB,EAAG,aAAa,EAAO,KAAM,CAAE,EACvE,MAAM,EAAa,EAAE,OAAO,WAAW,WAAW,iBAAmB,EAAG,aAAa,MAAM,EACxE,EAAE,OAAO,MAAM,WAAW,SAAW,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,YAEvF,EAAO,QAAO,EAAG,KAAK,CAAE,KAAM,CAAU,CAAE,EAE1C,EAAO,KAAK,CAAE,KAAM,CAAU,CAAE,EAElC,EAAG,aAAa,OAAQ,EAAE,OAAO,WAAW,WAAW,SAAS,EAChE,MAAM,EAAS,EAAG,aAAa,IAAI,EAC/B,IAAW,MACb,GAAuB,EAAQ,WAAW,CAAM,EAAG,CAAC,CAExD,CACF,CACF,CACA,cAAe,CACb,MAAM,EAAI,KAAK,EACT,EAAoB,EAAE,IAAI,OAAO,iBACrC,wBACN,EACU,EAAW,EAAE,IAAI,OAAO,cAC5B,oCACN,EACI,QAAS,EAAI,EAAG,EAAI,EAAkB,OAAQ,IACxC,GACF,EAAS,aAAa,EAAkB,CAAC,EAAG,EAAS,WAAW,CAGtE,CACF,CACA,MAAM,EAAiB,CAKrB,OAAO,cAAc,EAAG,CAClB,CAAC,GAAK,CAAC,EAAE,UACT,EAAE,QAAQ,kBACZ,EAAE,QAAQ,gBAAkB,CAAA,GAE1B,EAAE,QAAQ,UACZ,EAAE,QAAQ,SAAS,MAAK,EAE1B,EAAE,QAAQ,eAAiB,CAAA,EAC7B,CAKA,OAAO,qBAAqB,EAAG,CACzB,CAAC,GAAK,CAAC,EAAE,UACb,EAAE,QAAQ,eAAiB,CAAA,EAC7B,CAKA,OAAO,oBAAoB,EAAG,CACxB,CAAC,GAAK,CAAC,EAAE,SACT,EAAE,QAAQ,kBACZ,EAAE,QAAQ,gBAAkB,CAAA,EAEhC,CAQA,OAAO,kBAAkB,EAAG,EAAK,EAAS,CACxC,MAAI,CAAC,GAAK,CAAC,EAAE,QAAgB,EAAO,GAC/B,EAAE,QAAQ,kBACb,EAAE,QAAQ,gBAAkB,CAAA,GAEzB,EAAE,QAAQ,gBAAgB,CAAG,IAChC,EAAE,QAAQ,gBAAgB,CAAG,EAAI,EAAO,GAEnC,EAAE,QAAQ,gBAAgB,CAAG,EACtC,CASA,OAAO,mBAAmB,EAAG,EAAK,EAAW,EAAS,IAAK,CACzD,GAAI,CAAC,GAAK,CAAC,EAAE,QAAS,OAAO,EAAS,EACjC,EAAE,QAAQ,iBACb,EAAE,QAAQ,eAAiB,CAAA,GAE7B,MAAM,EAAQ,EAAE,QAAQ,eAAe,CAAG,EACpC,EAAM,KAAK,IAAG,EACpB,GAAI,GAAS,EAAM,YAAc,EAAM,EAAM,WAAa,EACxD,OAAO,EAAM,MAEf,MAAM,EAAQ,EAAS,EACvB,OAAA,EAAE,QAAQ,eAAe,CAAG,EAAI,CAC9B,MAAA,EACA,WAAY,CAClB,EACW,CACT,CAOA,OAAO,gBAAgB,EAAG,EAAK,EAAS,CAClC,CAAC,GAAK,CAAC,EAAE,UACR,EAAE,QAAQ,WACb,EAAE,QAAQ,SAA2B,IAAI,KAE3C,EAAE,QAAQ,SAAS,IAAI,EAAK,CAAO,EACrC,CAOA,OAAO,oBAAoB,EAAG,EAAK,CACjC,MAAI,CAAC,GAAK,CAAC,EAAE,SAAW,CAAC,EAAE,QAAQ,SAAiB,KAC7C,EAAE,QAAQ,SAAS,IAAI,CAAG,GAAK,IACxC,CACF,CACA,MAAM,EAAU,CAId,YAAY,EAAG,CAAE,MAAA,EAAQ,KAAM,UAAA,EAAY,IAAI,EAAK,CAAA,EAAI,CACtD,KAAK,EAAI,EACT,KAAK,MAAQ,EACb,KAAK,UAAY,CACnB,CASA,SAAS,EAAQ,EAAiB,EAAG,EAAG,EAAc,CAAA,EAAI,EAAW,OAAQ,EAAc,GAAM,CAC/F,MAAM,EAAI,KAAK,EACT,EAAW,OAAO,EAAO,CAAC,EAAM,IAAc,GAAK,EAAO,CAAC,EACjE,IAAI,EAAQ,EACZ,MAAM,EAAe,EAAE,WAAW,gBAC5B,EAAkB,EAAE,OAAO,MAAM,OAAO,UACxC,EAAU,IAAI,GAAW,KAAK,CAAC,EAC/B,EAAY,EACd,IACF,EACA,EAAQ,aACN,EACA,EACA,EACA,CACE,EACA,cAAe,IAAI,GAAS,KAAK,CAAC,EAAE,WACpC,EAAA,CACV,CACA,EACU,IAAoB,SACtB,EAAQ,EAAgB,EAAU,EAAO,CAAC,EAAG,CAC3C,EACA,cAAe,IAAI,GAAS,KAAK,CAAC,EAAE,WACpC,EAAA,CACV,CAAS,IAGD,EAAgB,OAAS,GAC3B,EAAI,EAAgB,CAAC,EAAE,SACvB,EAAQ,EAAgB,CAAC,EAAE,OAEvB,EAAE,OAAO,MAAM,OAAS,YAAc,IAAoB,SAC5D,EAAQ,IAGR,OAAO,EAAU,MAAa,EAAQ,IAC1C,EAAQ,MAAM,QAAQ,CAAK,EAAI,EAAQ,EAAM,SAAQ,EACrD,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,IAAI,EAAW,CAAA,EACX,EAAE,OAAO,eAAiB,EAC5B,EAAW,EAAS,aAClB,EACA,SAAS,EAAU,EAAE,EAAE,SAAQ,EAC/B,KACA,UAAU,EAAE,OAAO,MAAM,OAAO,MAAM,QACtC,EACR,EAEM,EAAW,EAAS,aAAa,EAAO,SAAS,EAAU,EAAE,EAAE,SAAQ,CAAE,EAE3E,MAAM,EAA6B,CAAC,EAAE,OAAO,MAAM,OAAO,gBAAkB,KAAK,UACjF,MAAI,CAAC,MAAM,QAAQ,CAAK,IAAM,OAAO,CAAK,IAAM,OAAS,EAAY,QAAQ,CAAK,GAAK,GAAK,KAC1F,EAAQ,IAEH,CACL,EAAA,EACA,KAAM,EACN,SAAA,CACN,CACE,CAMA,4BAA4B,EAAG,EAAO,EAAW,CAC/C,MAAM,EAAI,KAAK,EACf,IAAI,EAAQ,EAAE,OAAO,MAAM,WAE3B,GADI,IAAU,eAAc,EAAQ,KAAK,MAAM,EAAE,OAAO,UAAY,GAAG,GACnE,EAAQ,EAAW,OAAO,EAC9B,MAAM,EAAe,KAAK,MAAM,GAAa,EAAQ,EAAE,EACvD,OAAI,EAAI,IAAiB,IAGvB,EAAM,KAAO,IAER,CACT,CAQA,0BAA0B,EAAG,EAAO,EAAW,EAAa,EAAkB,CAC5E,MAAM,EAAI,KAAK,EAWf,GAVI,IAAM,GACJ,EAAE,QAAQ,yBACZ,EAAM,KAAO,IAGb,IAAM,EAAY,GAChB,EAAE,QAAQ,wBACZ,EAAM,KAAO,IAGb,EAAE,OAAO,MAAM,OAAO,uBAAyB,EAAY,OAAS,EAAG,CACzE,MAAM,EAAO,EAAiB,EAAiB,OAAS,CAAC,EACzD,GAAI,EAAE,OAAO,MAAM,OAAO,MAAQ,EAAE,OAAO,MAAM,OAAS,WACxD,OAAO,EAIP,EAAM,EAAI,EAAK,SAAS,OAAS,EAAE,OAAO,cAIxC,KAAK,IAAI,KAAK,IAAI,EAAE,OAAO,MAAM,OAAO,MAAM,EAAG,CAAC,EAAI,GACpD,MAAQ,EAAK,IAEjB,EAAM,KAAO,GAEjB,CACA,OAAO,CACT,CAKA,uBAAuB,EAAG,EAAQ,CAChC,MAAM,EAAI,KAAK,EACf,OAAI,EAAE,OAAO,MAAM,CAAC,GAAK,EAAE,OAAO,MAAM,CAAC,EAAE,UACzC,EAAO,QAAO,EAET,CACT,CAIA,wBAAwB,EAAO,CAC7B,MAAM,EAAK,KAAK,EAAE,QAClB,MAAO,CAAC,EAAG,eAAe,CAAK,EAAE,KAAM,GAC9B,EAAG,uBAAuB,QAAQ,CAAE,IAAM,EAClD,CACH,CAOA,oBAAoB,EAAO,CACzB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAQ,EAAE,OAAO,MAKvB,OAJiB,EAAE,WAAW,OAAO,OAAS,EAAM,QAGpD,EAAM,KAAM,GAAM,MAAM,QAAQ,EAAE,UAAU,CAAC,EAEpC,EAEA,EAAG,sBAAsB,CAAK,CAEzC,CAIA,cAAc,EAAO,CACnB,MAAM,EAAI,KAAK,EACT,EAAQ,EAAE,OAAO,MAAM,CAAK,EAClC,GAAI,CAAC,EAAM,MAAQ,KAAK,wBAAwB,CAAK,EACnD,MAAO,GAET,GAAI,CAAC,EAAM,kBAAmB,CAC5B,MAAM,EAAgB,EAAE,QAAQ,eAAe,CAAK,EAC9C,EAAY,IAAI,GAAU,KAAK,CAAC,EACtC,OAAO,EAAc,MAAO,GAAO,EAAU,aAAa,CAAE,CAAC,CAC/D,CACA,MAAO,EACT,CAOA,kBAAkB,EAAS,EAAW,CACpC,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,OAAI,MAAM,QAAQ,CAAO,GAAK,EAAE,QAAQ,WAAW,CAAS,KACzD,EAAK,KAAK,QAAU,MAAgB,EAAG,gBACtC,EACA,EAAE,QAAQ,WAAW,CAAS,EAAE,OAAO,OACvC,EACR,GAEW,CACT,CAUA,eAAe,EAAG,EAAY,EAAY,EAAW,EAAW,EAAe,EAAS,CACtF,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,IAAI,EAAK,EAAE,OAAO,WAAa,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,QAMhE,GALI,EAAE,QAAQ,gBACZ,EAAK,EACI,EAAE,OAAO,MAAM,OAAS,YACjC,GAAM,EAAgB,GAEpB,EAAU,MAAQ,EAAa,EAAG,CAChC,EAAE,OAAO,MAAM,CAAS,EAAE,WAAa,KAAM,EAAI,EAAI,EAAU,OACnE,QAAS,EAAI,EAAY,GAAK,EAAG,IAAK,CACpC,MAAM,EAAS,EAAS,SACtB,EAAI,EAAW,QAAU,EAAU,MAAQ,EAAU,QACrD,EAAK,EAAU,QACf,EAAI,EAAW,QAAU,EAAU,QACnC,EAAK,EAAU,QACf,EAAU,KACpB,EACQ,EAAQ,IAAI,CAAM,EAClB,GAAM,CACR,CACF,CACF,CACF,CACA,MAAM,EAAM,CAMV,YAAY,EAAG,EAAK,EAAQ,CAC1B,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,OAAS,EACd,KAAK,UAAY,IAAI,GAAU,EAAG,CAChC,MAAO,EAAI,MACX,UAAW,EAAI,SACrB,CAAK,EACD,KAAK,YAAc,EAAE,UAAU,OAAO,MAAK,EACvC,EAAE,UAAU,gBAAgB,OAAS,GAAK,CAAC,EAAE,QAAQ,kBACvD,KAAK,YAAc,EAAE,UAAU,gBAAgB,MAAK,GAElD,EAAE,OAAO,MAAM,sBACjB,KAAK,YAAc,EAAE,OAAO,MAAM,qBAEpC,KAAK,YAAc,CAAA,EACnB,KAAK,iBAAmB,CAAA,EACpB,EAAE,OAAO,MAAM,WAAa,MAC9B,KAAK,KAAO,EAEZ,KAAK,KAAO,EAAE,OAAO,WAEvB,KAAK,KAAO,KAAK,KAAO,EAAE,OAAO,MAAM,WAAW,QAClD,KAAK,wBAA0B,EAAE,OAAO,MAAM,OAAS,OAAS,EAAE,OAAO,YAAY,IAAI,WACzF,KAAK,cAAgB,EAAE,OAAO,MAAM,OAAO,MAAM,SACjD,KAAK,gBAAkB,EAAE,OAAO,MAAM,OAAO,MAAM,WACnD,KAAK,gBAAkB,EAAE,OAAO,MAAM,OAAO,MAAM,OACnD,KAAK,iBAAmB,EAAE,OAAO,MAAM,WAAW,MAC9C,KAAK,0BACP,KAAK,iBAAmB,EAAE,OAAO,MAAM,CAAC,EAAE,WAAW,MAAM,SAAQ,GAEjE,OAAO,KAAK,gBAAgB,EAAE,QAAQ,GAAG,EAAI,GAC/C,KAAK,iBAAmB,EAAE,OAAO,UAAY,SAAS,KAAK,iBAAkB,EAAE,EAAI,IAEnF,KAAK,iBAAmB,SAAS,KAAK,iBAAkB,EAAE,EAE5D,KAAK,kBAAoB,EAAE,OAAO,MAAM,WAAW,OACnD,KAAK,MAAQ,EAAE,OAAO,MAAM,CAAC,CAC/B,CACA,WAAY,CACV,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAU,EAAS,MAAM,CAC7B,MAAO,mBACP,UAAW,aAAa,EAAE,OAAO,MAAM,OAAO,KAAK,EAAE,OAAO,MAAM,OAAO,GAC/E,CAAK,EACK,EAAe,EAAS,MAAM,CAClC,MAAO,2BACP,UAAW,aAAa,EAAE,OAAO,eAAe,KAAK,EAAE,OAAO,eAAe,GACnF,CAAK,EACD,EAAQ,IAAI,CAAY,EACxB,IAAI,EAAS,CAAA,EACb,QAAS,EAAI,EAAG,EAAI,KAAK,YAAY,OAAQ,IAC3C,EAAO,KAAK,KAAK,YAAY,CAAC,CAAC,EAUjC,GARA,KAAK,uBACH,GACA,EACA,EACA,EACA,EAAE,UAAU,WACZ,CAAC,EAAG,IAAa,CACvB,EACQ,EAAE,UAAU,eAAgB,CAC9B,MAAM,EAAc,EAAE,UAAU,OAChC,EAAS,CAAA,EACT,QAAS,EAAI,EAAG,EAAI,EAAY,OAAQ,IACtC,EAAO,KAAK,EAAY,CAAC,EAAE,KAAK,EAElC,MAAM,EAEJ,CAAA,EAEE,EAAE,OAAO,MAAM,MAAM,QACvB,EAAgB,cAAgB,EAAE,OAAO,MAAM,MAAM,MAAM,SAC3D,EAAgB,gBAAkB,EAAE,OAAO,MAAM,MAAM,MAAM,WAC7D,EAAgB,gBAAkB,EAAE,OAAO,MAAM,MAAM,MAAM,OAC7D,EAAgB,WAAa,EAAE,OAAO,MAAM,MAAM,MAAM,WACxD,EAAgB,SAAW,EAAE,OAAO,MAAM,MAAM,MAAM,UAExD,KAAK,uBACH,GACA,EACA,EACA,EACA,GACA,CAAC,EAAG,IAAa,EAAY,CAAC,EAAE,KAAO,EACvC,CACR,CACI,CACA,GAAI,EAAE,OAAO,MAAM,MAAM,OAAS,OAAQ,CACxC,MAAM,EAAe,EAAS,MAAM,CAClC,MAAO,wBACf,CAAO,EACK,EAAmB,EAAS,SAAS,CACzC,EAAG,EAAE,OAAO,UAAY,EAAI,EAAE,OAAO,MAAM,MAAM,QACjD,EAAG,KAAK,KAAO,WAAW,KAAK,aAAa,GAAK,EAAE,OAAO,MAAM,WAAa,SAAW,EAAE,OAAO,kBAAoB,CAAC,EAAE,OAAO,kBAAoB,IAAM,EAAE,OAAO,MAAM,MAAM,QAC9K,KAAM,EAAE,OAAO,MAAM,MAAM,KAC3B,WAAY,SACZ,SAAU,EAAE,OAAO,MAAM,MAAM,MAAM,SACrC,WAAY,EAAE,OAAO,MAAM,MAAM,MAAM,WACvC,WAAY,EAAE,OAAO,MAAM,MAAM,MAAM,WACvC,UAAW,EAAE,OAAO,MAAM,MAAM,MAAM,MACtC,SAAU,+BAAiC,EAAE,OAAO,MAAM,MAAM,MAAM,QAC9E,CAAO,EACD,EAAa,IAAI,CAAgB,EACjC,EAAQ,IAAI,CAAY,CAC1B,CACA,GAAI,EAAE,OAAO,MAAM,WAAW,KAAM,CAClC,MAAM,EAAO,EAAE,QAAQ,qBACjB,EAAa,EAAS,SAC1B,EAAE,QAAQ,cAAgB,EAAE,OAAO,MAAM,WAAW,QAAU,EAC9D,KAAK,KACL,KAAK,iBAAmB,EACxB,KAAK,KACL,EAAE,OAAO,MAAM,WAAW,MAC1B,EACA,KAAK,iBACb,EACU,KAAK,QAAU,KAAK,OAAO,eAAiB,EAAE,OAAO,KAAK,KAC5D,KAAK,OAAO,cAAc,IAAI,CAAU,EAExC,EAAQ,IAAI,CAAU,CAE1B,CACA,OAAO,CACT,CAUA,uBAAuB,EAAa,EAAU,EAAc,EAAQ,EAAY,EAAY,EAAkB,CAAA,EAAI,CAChH,IAAI,EAAI,EACR,MAAM,EAAc,CAAA,EACd,EAAmB,CAAA,EACnB,EAAI,KAAK,EACT,EAAgB,EAAgB,eAAiB,KAAK,cACtD,EAAkB,EAAgB,iBAAmB,KAAK,gBAC1D,EAAkB,EAAgB,iBAAmB,KAAK,gBAC1D,EAAa,EAAgB,YAAc,EAAE,OAAO,MAAM,OAAO,MAAM,WACvE,EAAW,EAAgB,UAAY,EAAE,OAAO,MAAM,OAAO,MAAM,SACzE,IAAI,EACA,EAAO,EAAE,QAAQ,cACrB,MAAM,EAAY,EAAO,OACzB,IAAI,EAAa,EAAE,OAAO,MAAM,OAAS,WAAa,EAAE,QAAQ,WAAa,EAE7E,GADI,IAAe,GAAK,EAAY,IAAY,EAAa,GACzD,EAAY,CACd,MAAM,EAAM,KAAK,IACf,OAAO,EAAE,OAAO,MAAM,UAAU,GAAK,EACrC,EAAa,EAAI,EAAa,EAAI,CAC1C,EACM,EAAW,EAAE,OAAO,UAAY,KAAK,IAAI,EAAK,EAAY,CAAC,EAC3D,EAAO,EAAO,EAAW,EAAG,CAAQ,EAAI,EAAI,EAAE,OAAO,MAAM,OAAO,OACpE,MACE,EAAW,EAAE,OAAO,UAAY,EAChC,EAAO,EAAO,EAAW,EAAG,CAAQ,EAAI,EAAE,OAAO,MAAM,OAAO,QAEhE,QAAS,EAAI,EAAG,GAAK,EAAY,EAAG,IAAK,CACvC,IAAI,EAAI,EAAO,EAAW,EAAG,CAAQ,EAAI,EAAI,EAAE,OAAO,MAAM,OAAO,QAC/D,IAAM,GAAK,IAAc,GAAK,EAAW,IAAM,GAAQ,IAAe,IACxE,EAAI,EAAE,OAAO,UAAY,GAE3B,IAAI,EAAQ,KAAK,UAAU,SACzB,EACA,EAAE,UAAU,gBACZ,EACA,EACA,EACA,EACA,CACR,EACU,EAAoB,GACpB,EAAE,OAAO,eAAiB,IAC5B,EAAoB,IAElB,EAAE,OAAO,MAAM,MAAM,MAAQ,EAAE,OAAO,MAAM,WAAa,QAC3D,GAAqB,WAAW,EAAE,OAAO,MAAM,MAAM,MAAM,QAAQ,EAAI,GAEpE,IACH,EAAoB,EAAoB,WAAW,CAAa,GAAK,EAAE,OAAO,kBAAoB,EAAE,OAAO,yBAA2B,EAAE,OAAO,cAAgB,GAAK,IAExI,OAAO,EAAE,OAAO,MAAM,WAAe,KAAe,EAAE,OAAO,MAAM,aAAe,cAAgB,EAAE,OAAO,MAAM,OAAS,WAEtJ,EAAQ,KAAK,UAAU,4BAA4B,EAAG,EAAO,CAAS,EAEtE,EAAQ,KAAK,UAAU,0BACrB,EACA,EACA,EACA,EACA,CACV,EAEM,MAAM,EAAkB,IACf,GAAe,EAAE,OAAO,MAAM,sBAAwB,EAAgB,EAAE,QAAQ,KAAO,EAAI,CAAC,EAAI,EAAgB,CAAC,EAMpH,IAFH,GAAM,EAAK,EAAM,WAAa,KAAO,OAAS,EAAG,QAAU,KAAO,EAAK,GAEvC,EAC7B,EAAmB,EAAM,EAAI,EAAY,EAC/C,GAAI,EAAE,OAAO,MAAM,OAAO,MAAQ,CAAC,EAAkB,CACnD,MAAM,EAAS,EAAS,SAAS,CAC/B,EAAG,EAAM,EACT,EAAG,KAAK,KAAO,EAAE,OAAO,MAAM,OAAO,QAAU,GAAqB,EAAE,OAAO,MAAM,WAAa,MAAQ,EAAE,OAAO,YAAc,EAAE,OAAO,MAAM,UAAU,OAAS,EAAI,GACrK,KAAM,EAAM,KACZ,WAAY,SACZ,WAAA,EACA,SAAU,EACV,WAAY,EACZ,UAAW,MAAM,QAAQ,CAAe,EAAI,EAAe,EAAK,EAChE,YAAa,GACb,UAAW,EAAc,0BAA4B,iCAAmC,CAClG,CAAS,EAUD,GATA,EAAa,IAAI,CAAM,EACvB,EAAO,GAAG,QAAU,GAAM,CACxB,GAAI,OAAO,EAAE,OAAO,MAAM,OAAO,iBAAoB,WAAY,CAC/D,MAAM,EAAO,OAAO,OAAO,CAAA,EAAI,EAAG,CAChC,WAAY,CAC1B,CAAa,EACD,EAAE,OAAO,MAAM,OAAO,gBAAgB,EAAG,KAAK,IAAK,CAAI,CACzD,CACF,CAAC,EACG,EAAa,CACf,MAAM,EAAiB,EAAY,gBAAgB,GAAS,OAAO,EACnE,EAAe,YAAc,MAAM,QAAQ,EAAM,IAAI,EAAI,EAAM,KAAK,KAAK,GAAG,EAAI,EAAM,KACtF,EAAO,KAAK,YAAY,CAAc,EAClC,EAAM,OAAS,KACjB,EAAY,KAAK,EAAM,IAAI,EAC3B,EAAiB,KAAK,CAAK,EAE/B,CACF,CACI,EAAI,EAAY,IAClB,EAAO,EAAO,EAAW,EAAI,EAAG,CAAQ,EAE5C,CACF,CAKA,kBAAkB,EAAW,CAC3B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAkB,EAAE,OAAO,MAAM,CAAC,EAAE,SAAW,EAAE,QAAQ,gBAAgB,CAAS,EAAI,EACtF,EAAU,EAAS,MAAM,CAC7B,MAAO,6CACP,IAAK,CACX,CAAK,EACK,EAAe,EAAS,MAAM,CAClC,MAAO,6DACP,UAAW,aAAe,EAAkB,MAClD,CAAK,EACD,EAAQ,IAAI,CAAY,EACxB,MAAM,EAAS,CAAA,EACf,GAAI,EAAE,OAAO,MAAM,CAAS,EAAE,KAC5B,QAAS,EAAI,EAAG,EAAI,KAAK,YAAY,OAAQ,IAC3C,EAAO,KAAK,KAAK,YAAY,CAAC,CAAC,EAGnC,MAAM,EAAY,EAAE,OAAO,WAAa,EAAO,OAC/C,IAAI,EAAO,EAAE,EAAY,KACzB,MAAM,EAAc,EAAE,WAAW,iBAAiB,CAAC,EAC7C,EAAU,EAAE,OAAO,MAAM,CAAC,EAAE,OAClC,GAAI,EAAQ,KACV,QAAS,EAAI,EAAG,GAAK,EAAO,OAAS,EAAG,IAAK,CAC3C,IAAI,EAAQ,OAAO,EAAO,CAAC,EAAM,IAAc,GAAK,EAAO,CAAC,EAC5D,EAAQ,EAAY,EAAO,CACzB,YAAa,EACb,eAAgB,EAChB,EAAA,CACV,CAAS,EACD,MAAM,EAAU,KAAK,UAAU,kBAC7B,EAAQ,MAAM,OACd,CACV,EACc,EAAe,IACZ,MAAM,QAAQ,CAAO,EAAI,EAAQ,CAAC,EAAI,EAE/C,IAAI,EAAS,EACT,MAAM,QAAQ,CAAK,IACrB,EAAS,EAAM,OAAS,EAAI,SAAS,EAAQ,MAAM,SAAU,EAAE,GAEjE,IAAI,EAAU,EAAQ,QAAU,GAC5B,EAAa,MACb,KAAK,MAAM,WACb,EAAa,SAEX,EAAE,OAAO,MAAM,CAAC,EAAE,OAAO,QAAU,QACrC,EAAU,EAAQ,QAClB,EAAa,SACJ,EAAE,OAAO,MAAM,CAAC,EAAE,OAAO,QAAU,UAC5C,EAAU,EAAQ,QAClB,EAAa,UACJ,EAAE,OAAO,MAAM,CAAC,EAAE,OAAO,QAAU,UAC5C,EAAa,OAEf,MAAM,EAAU,EAAS,SAAS,CAChC,EAAG,EACH,EAAG,EAAO,EAAY,EAAQ,QAAU,EACxC,KAAM,EACN,WAAA,EACA,UAAW,EAAY,EACvB,SAAU,EAAQ,MAAM,SACxB,WAAY,EAAQ,MAAM,WAC1B,WAAY,EAAQ,MAAM,WAC1B,YAAa,GACb,SAAU,0BAA4B,EAAQ,MAAM,SACpD,SAAU,EAAQ,QAC5B,CAAS,EACD,EAAa,IAAI,CAAO,EACxB,EAAQ,GAAG,QAAU,GAAM,CACzB,GAAI,OAAO,EAAE,OAAO,MAAM,OAAO,iBAAoB,WAAY,CAC/D,MAAM,EAAO,OAAO,OAAO,CAAA,EAAI,EAAG,CAChC,WAAY,CAC1B,CAAa,EACD,EAAE,OAAO,MAAM,OAAO,gBAAgB,EAAG,KAAK,IAAK,CAAI,CACzD,CACF,CAAC,EACD,MAAM,EAAiB,EAAY,gBAAgB,GAAS,OAAO,EAGnE,GAFA,EAAe,YAAc,MAAM,QAAQ,CAAK,EAAI,EAAM,KAAK,GAAG,EAAI,EACtE,EAAQ,KAAK,YAAY,CAAc,EACnC,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,SAAW,EAAG,CACjD,MAAM,EAAsB,EAAS,mBAAmB,EAAQ,IAAI,EACpE,EAAQ,KAAK,aACX,YACA,UAAU,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,MAAM,MAAM,EAAoB,CAAC,GACxF,CACQ,CACA,EAAO,EAAO,CAChB,CAEF,GAAI,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,OAAS,OAAQ,CAC3C,MAAM,EAAe,EAAS,MAAM,CAClC,MAAO,yDACP,UAAW,aAAe,EAAkB,MACpD,CAAO,EACK,EAAmB,EAAS,SAAS,CACzC,EAAG,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,QAC3B,EAAG,EAAE,OAAO,WAAa,EAAI,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,QACrD,KAAM,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,KAC9B,WAAY,SACZ,UAAW,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,MAAM,MACzC,SAAU,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,MAAM,SACxC,WAAY,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,MAAM,WAC1C,WAAY,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,MAAM,WAC1C,SAAU,+BAAiC,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,MAAM,QACjF,CAAO,EACD,EAAa,IAAI,CAAgB,EACjC,EAAQ,IAAI,CAAY,CAC1B,CACA,IAAI,EAAO,EACP,KAAK,yBAA2B,EAAE,OAAO,MAAM,CAAC,EAAE,WACpD,EAAO,EAAE,OAAO,WAElB,MAAM,EAAa,EAAE,OAAO,MAAM,WAClC,GAAI,EAAW,KAAM,CACnB,MAAM,EAAiB,EAAS,SAC9B,EAAE,QAAQ,cAAgB,EAAW,QAAU,EAC/C,EAAI,EAAW,QACf,EAAE,QAAQ,cAAgB,EAAW,QAAU,EAC/C,EAAE,OAAO,WAAa,EAAW,QACjC,EAAW,MACX,CACR,EACU,KAAK,QAAU,KAAK,OAAO,eAAiB,EAAE,OAAO,KAAK,KAC5D,KAAK,OAAO,cAAc,IAAI,CAAc,EAE5C,EAAQ,IAAI,CAAc,CAE9B,CACA,OAAI,EAAE,OAAO,MAAM,CAAC,EAAE,UAAU,MAC9B,KAAK,UAAU,eACb,EACA,EAAO,OACP,EAAE,OAAO,MAAM,CAAC,EAAE,WAClB,EAAE,OAAO,MAAM,CAAC,EAAE,UAClB,EACA,EACA,CACR,EAEW,CACT,CAMA,eAAe,EAAI,EAAI,EAAiB,CACtC,MAAM,EAAI,KAAK,EACT,EAAK,EACX,GAAI,EAAK,GAAK,EAAK,EAAI,EAAE,OAAO,UAAW,OAC3C,MAAM,EAAK,KAAK,KAAO,EAAE,OAAO,MAAM,UAAU,QAKhD,GAJA,EAAK,EAAK,EAAK,EAAE,OAAO,MAAM,UAAU,OACpC,EAAE,OAAO,MAAM,WAAa,QAC9B,EAAK,EAAK,EAAE,OAAO,MAAM,UAAU,QAEjC,EAAE,OAAO,MAAM,UAAU,KAAM,CAEjC,MAAM,EADW,IAAI,EAAS,KAAK,CAAC,EACd,SACpB,EAAK,EAAE,OAAO,MAAM,UAAU,QAC9B,EAAK,EAAE,OAAO,MAAM,QACpB,EAAK,EAAE,OAAO,MAAM,UAAU,QAC9B,EAAK,EAAE,OAAO,MAAM,QACpB,EAAE,OAAO,MAAM,UAAU,KACjC,EACM,EAAgB,IAAI,CAAI,EACxB,EAAK,KAAK,UAAU,IAAI,uBAAuB,CACjD,CACF,CACA,wBAAyB,CACvB,MAAM,EAAI,KAAK,EACT,EAAsB,CAAA,EACtB,EAAS,KAAK,YAAY,OAChC,IAAI,EAAK,EAAE,QAAQ,cACnB,GAAI,EAAE,UAAU,gBAAgB,OAAS,EACvC,QAAS,EAAI,EAAG,EAAI,EAAQ,IAC1B,EAAK,KAAK,YAAY,CAAC,EAAE,SACzB,EAAoB,KAAK,CAAE,MAExB,CACL,MAAM,EAA0B,EAChC,QAAS,EAAI,EAAG,EAAI,EAAyB,IAAK,CAChD,IAAI,EAAU,EACV,EAAE,UAAU,YAAc,EAAE,OAAO,MAAM,OAAS,QACpD,GAAW,GAEb,EAAK,EAAK,EAAE,OAAO,UAAY,EAC/B,EAAoB,KAAK,CAAE,CAC7B,CACF,CACA,OAAO,CACT,CAEA,uBAAwB,CACtB,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAQ,EAAE,IAAI,OAAO,cAAc,2BAA2B,EAC9D,EAAa,EAAE,IAAI,OAAO,iBAC9B,mEACN,EACU,EAAqB,EAAE,IAAI,OAAO,iBACtC,iCACN,EACU,EAAqB,EAAE,IAAI,OAAO,iBACtC,+CACN,EACI,GAAI,EAAE,OAAO,eAAiB,EAAE,OAAO,MAAM,OAAO,aAClD,QAAS,EAAM,EAAG,EAAM,EAAW,OAAQ,IAAO,CAChD,MAAM,EAAqB,EAAS,mBAAmB,EAAW,CAAG,CAAC,EACtE,EAAmB,EAAI,EAAmB,EAAI,EAC9C,EAAmB,EAAI,EAAmB,EAAI,EAC9C,EAAW,CAAG,EAAE,aACd,YACA,UAAU,EAAE,OAAO,MAAM,OAAO,MAAM,IAAI,EAAmB,CAAC,IAAI,EAAmB,CAAC,GAChG,EACQ,EAAW,CAAG,EAAE,aAAa,cAAe,KAAK,EACxB,GAAM,aAAa,YAAa,mBAAsB,EAC/E,MAAM,EAAQ,EAAW,CAAG,EAAE,WAC1B,EAAE,OAAO,MAAM,OAAO,MACxB,MAAM,UAAU,QAAQ,KAAK,EAAQ,GAAO,CAC1C,EAAS,sBACP,EACA,EAAG,YACH,EAAE,OAAO,mBAAqB,EAAE,OAAO,OAAO,WAAa,SAAW,GAAK,GACzF,CACU,CAAC,CAEL,KACK,CACL,MAAM,EAAQ,EAAE,OAAO,WAAa,EAAE,UAAU,OAAO,OAAS,GAChE,QAAS,EAAM,EAAG,EAAM,EAAW,OAAQ,IAAO,CAChD,MAAM,EAAQ,EAAW,CAAG,EAAE,WAC1B,EAAE,OAAO,MAAM,OAAO,MAAQ,EAAE,OAAO,MAAM,OAAS,YACxD,MAAM,UAAU,QAAQ,KAAK,EAAQ,GAAO,CAC1C,EAAS,sBAAsB,EAAI,EAAG,YAAa,CAAK,CAC1D,CAAC,CAEL,CACF,CACA,GAAI,EAAmB,OAAS,EAAG,CACjC,MAAM,EAEJ,EAAmB,EAAmB,OAAS,CAAC,EAAE,QAAO,EAErD,EAEJ,EAAmB,CAAC,EAAE,QAAO,EAE3B,EAAe,EAAI,OACpB,EAAK,EAAmB,EAAmB,OAAS,CAAC,EAAE,aAAe,MAAgB,EAAG,YACxF,EAAmB,EAAmB,OAAS,CAAC,CAC1D,GAEU,EAAc,EAAI,EAAc,MAAQ,EAAE,OAAO,WAAa,CAAC,EAAE,QAAQ,mBAC1E,EAAK,EAAmB,CAAC,EAAE,aAAe,MAAgB,EAAG,YAAY,EAAmB,CAAC,CAAC,GAEjG,QAAS,EAAM,EAAG,EAAM,EAAmB,OAAQ,IACjD,EAAS,sBACP,EAAmB,CAAG,GACrB,EAAK,EAAmB,CAAG,EAAE,cAAgB,KAAO,EAAK,GAC1D,EAAE,OAAO,MAAM,CAAC,EAAE,OAAO,UAAY,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,KAAO,WAAW,EAAE,OAAO,MAAM,CAAC,EAAE,MAAM,MAAM,QAAQ,EAAI,EAAI,GAAK,EAC5I,CAEI,CACF,CAMF,CACA,MAAM,EAAK,CAKT,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,YAAc,EAAE,UAAU,OAAO,MAAK,EAC3C,KAAK,UAAY,IAAI,GAAU,EAAI,EAAG,CACpC,MAAO,EAAI,MACX,UAAW,EAAI,SACrB,CAAK,EACD,KAAK,WAAa,EAAE,UAAU,YAAY,QAAU,EAAE,QAAQ,gBAC1D,EAAE,UAAU,gBAAgB,OAAS,IACvC,KAAK,YAAc,EAAE,UAAU,gBAAgB,MAAK,EAExD,CAIA,aAAa,EAAS,KAAM,CAC1B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC/B,IACH,EAAS,EAAS,MAAM,CAAE,MAAO,iBAAiB,CAAE,GAEtD,MAAM,EAAiB,EAAS,SAC9B,EAAE,QAAQ,cACV,EACA,EAAE,QAAQ,cACV,EAAE,OAAO,WACT,aACN,EACU,EAAa,EAAS,SAC1B,EAAE,QAAQ,cACV,EAAE,OAAO,WACT,EAAE,OAAO,UACT,EAAE,OAAO,WACT,aACN,EACI,OAAA,EAAO,IAAI,CAAU,EACrB,EAAO,IAAI,CAAc,EAClB,CACT,CACA,UAAW,CAET,GADW,KAAK,EAAE,QACX,WAAY,CACjB,MAAM,EAAS,KAAK,WAAU,EAC9B,YAAK,aAAa,EAAO,EAAE,EACpB,CACT,CACA,OAAO,IACT,CACA,gBAAiB,CACf,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAa,MAAM,QAAQ,EAAE,OAAO,OAAO,KAAK,EAAI,KAAK,IAAI,GAAG,EAAE,OAAO,OAAO,KAAK,EAAI,EAAE,OAAO,OAAO,MACzG,EAAkB,GAAO,CAC7B,MAAM,EAAW,EAAY,gBAAgB,GAAS,UAAU,EAChE,OAAA,EAAS,aAAa,KAAM,CAAE,EACvB,CACT,EACA,EAAE,IAAI,eAAiB,EAAe,eAAe,EAAG,IAAI,EAAE,EAC9D,EAAE,IAAI,kBAAoB,EAAe,kBAAkB,EAAG,IAAI,EAAE,EACpE,EAAE,IAAI,qBAAuB,EAAe,qBAAqB,EAAG,IAAI,EAAE,EAC1E,EAAE,IAAI,eAAiB,EAAe,eAAe,EAAG,IAAI,EAAE,EAC9D,EAAE,IAAI,kBAAoB,EAAe,kBAAkB,EAAG,IAAI,EAAE,EACpE,MAAM,EAAS,CAAC,MAAO,WAAY,cAAe,UAAW,QAAQ,EAAE,SACrE,EAAE,OAAO,MAAM,IACrB,GAAS,EAAE,QAAQ,cAAgB,EAC/B,IAAI,EAAe,EACf,EAAgB,EAChB,GAAU,EAAE,UAAU,YAAc,CAAC,EAAE,QAAQ,kBACjD,EAAe,KAAK,IAAI,EAAE,OAAO,QAAQ,KAAM,EAAG,oBAAoB,EACtE,EAAgB,KAAK,IAAI,EAAE,OAAO,QAAQ,MAAO,EAAG,oBAAoB,GAE1E,EAAE,IAAI,WAAa,EAAS,SAC1B,CAAC,EAAa,EAAI,EAClB,CAAC,EAAa,EAAI,EAClB,EAAE,OAAO,UAAY,EAAa,EAClC,EAAE,OAAO,WAAa,EAAa,EACnC,EACA,MACN,EACI,EAAE,IAAI,cAAgB,EAAS,SAC7B,CAAC,EAAa,EAAI,EAAe,EACjC,CAAC,EAAa,EAAI,EAClB,EAAE,OAAO,UAAY,EAAa,EAAgB,EAAe,EACjE,EAAE,OAAO,WAAa,EAAa,EACnC,EACA,MACN,EACI,MAAM,EAAa,EAAE,QAAQ,QAAQ,YACrC,EAAE,IAAI,iBAAmB,EAAS,SAChC,KAAK,IAAI,CAAC,EAAa,EAAI,EAAe,EAAG,CAAC,CAAU,EACxD,CAAC,EACD,EAAE,OAAO,UAAY,KAAK,IAAI,EAAa,EAAgB,EAAe,EAAG,EAAa,CAAC,EAC3F,EAAE,OAAO,WAAa,EAAa,EACnC,EACA,MACN,EACI,EAAE,IAAI,eAAe,YAAY,EAAE,IAAI,WAAW,IAAI,EACtD,EAAE,IAAI,kBAAkB,YAAY,EAAE,IAAI,cAAc,IAAI,EAC5D,EAAE,IAAI,qBAAqB,YAAY,EAAE,IAAI,iBAAiB,IAAI,EAClE,MAAM,EAAO,EAAE,IAAI,OAAO,KAC1B,EAAK,YAAY,EAAE,IAAI,cAAc,EACrC,EAAK,YAAY,EAAE,IAAI,iBAAiB,EACxC,EAAK,YAAY,EAAE,IAAI,oBAAoB,EAC3C,EAAK,YAAY,EAAE,IAAI,cAAc,EACrC,EAAK,YAAY,EAAE,IAAI,iBAAiB,CAC1C,CAEA,eAAe,CAAE,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,OAAA,EAAQ,OAAA,CAAM,EAAI,CACpD,MAAM,EAAI,KAAK,EAQf,GANM,EAAA,IAAM,GAAK,EAAE,QAAQ,wBACrB,IAAM,EAAS,GAAK,EAAE,QAAQ,uBAAyB,CAAC,EAAE,OAAO,MAAM,OAAO,WAE9E,EAAE,OAAO,MAAM,OAAS,SAGZ,CACZ,EAAE,OAAO,KAAK,MAAM,MAAM,MAC5B,KAAK,cAAc,CAAE,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,OAAA,EAAQ,OAAA,CAAM,CAAE,EAE1D,IAAI,EAAM,EACV,GAAI,EAAE,UAAU,gBAAkB,EAAE,OAAO,MAAM,gBAAkB,UAAW,CAC5E,MAAM,EAAS,EAAE,UAAU,OAC3B,GAAI,EAAQ,CACV,IAAI,EAAO,EACX,QAAS,EAAK,EAAG,EAAO,GAAK,EAAK,EAAO,OAAQ,IAC/C,GAAQ,EAAO,CAAE,EAAE,KAEjB,IAAS,IACX,EAAM,EAAE,OAAO,kBAAoB,GAEvC,CACF,CACc,IAAI,GAAM,KAAK,EAAG,KAAK,GAAG,EAClC,eAAe,EAAI,EAAK,EAAE,IAAI,WAAW,CACjD,CACF,CAEA,cAAc,CAAE,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,OAAA,EAAQ,OAAA,CAAM,EAAI,CACnD,MAAM,EAAI,KAAK,EACT,EAAa,EAAO,KAAK,UAAU,SACvC,iCACN,EACU,EAAO,EAAE,QAAQ,qBACjB,EAAiB,IAAO,GAAK,IAAO,GAAK,IAAO,GAAK,IAAO,GAAK,IAAO,EAAE,OAAO,YAAc,IAAO,EAAE,OAAO,YAAc,EAAE,QAAQ,kBAAoB,IAAM,GAAK,IAAM,EAAS,GAErL,EADW,IAAI,EAAS,KAAK,CAAC,EACd,SACpB,GAAM,EAAa,EAAO,GAC1B,EACA,GAAM,EAAa,EAAO,GAC1B,EACA,EAAE,OAAO,KAAK,YACd,EAAE,OAAO,KAAK,eACpB,EACI,EAAK,KAAK,UAAU,IAAI,qBAAqB,EACzC,GAAkB,EAAE,OAAO,KAAK,KAClC,KAAK,cAAc,IAAI,CAAI,EAE3B,EAAO,IAAI,CAAI,CAEnB,CAEA,kBAAkB,CAAE,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAA,CAAI,EAAI,CAC7C,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAO,EAAE,QAAQ,qBACjB,EAAQ,EAAE,OAAO,KAAK,CAAI,EAAE,OAAO,CAAC,EACpC,EAAO,EAAS,SACpB,GAAM,IAAS,MAAQ,EAAO,GAC9B,EACA,GAAM,IAAS,MAAQ,EAAO,EAAI,GAClC,EACA,EACA,EACA,EAAE,OAAO,KAAK,CAAI,EAAE,OAC1B,EACI,KAAK,IAAI,IAAI,CAAI,EACjB,EAAK,KAAK,YAAa,oBAAoB,EAAE,QAAQ,IAAI,GAAG,EAC5D,EAAK,KAAK,UAAU,IAAI,mBAAmB,CAAI,EAAE,CACnD,CAEA,aAAa,CAAE,OAAA,EAAQ,WAAA,CAAU,EAAI,CACnC,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAgB,CAAC,CAAE,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,CAAE,IAAO,CAChD,QAAS,EAAI,EAAG,EAAI,EAAI,IACtB,EACA,KAAK,YAAY,CAAC,EAAE,SACpB,EACA,KAAK,YAAY,CAAC,EAAE,SACpB,KAAK,eAAe,CAClB,EAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,OAAA,EACA,OAAQ,KAAK,YACvB,CAAS,CAEL,EACM,EAAgB,CAAC,CAAE,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,CAAE,IAAO,CAChD,QAAS,EAAI,EAAG,EAAI,GAAM,EAAE,UAAU,WAAa,EAAI,GAAI,IACrD,IAAM,GAAK,IAAO,GAAK,EAAE,QAAQ,aAAe,IAClD,EAAK,EAAE,OAAO,UAAY,EAC1B,EAAK,GAEP,KAAK,eAAe,CAClB,EAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,OAAA,EACA,OAAQ,KAAK,YACvB,CAAS,EACD,GAAM,EAAE,OAAO,WAAa,EAAE,UAAU,WAAa,EAAK,EAAI,GAC9D,EAAK,CAET,EACA,GAAI,EAAE,OAAO,KAAK,MAAM,MAAM,MAAQ,EAAE,OAAO,MAAM,UAAU,KAAM,CACnE,MAAM,EAAK,EAAE,QAAQ,cACf,EAAK,EACX,IAAI,EACJ,MAAM,EAAK,EAAE,OAAO,WAChB,EAAE,UAAU,gBAAgB,OAC9B,EAAc,CAAE,GAAI,EAAQ,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,CAAE,CAAE,GAExC,EAAE,UAAU,aACd,GAAU,EAAK,EAAE,QAAQ,aAAe,KAAO,OAAS,EAAG,OAAO,QAEpE,EAAc,CAAE,GAAI,EAAQ,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,CAAE,CAAE,EAEhD,CACA,GAAI,EAAE,OAAO,KAAK,MAAM,MAAM,KAAM,CAElC,IAAI,EAAK,EACL,EAAK,EACT,MAAM,EAAK,EAAE,OAAO,UACpB,IAAI,EAAK,EAAa,EAClB,KAAK,aACP,EAAK,EAAE,UAAU,OAAO,QAE1B,QAAS,EAAI,EAAG,EAAI,GAAM,KAAK,WAAa,EAAI,GAAI,IAClD,KAAK,cAAc,CACjB,EAAA,EACA,OAAQ,GAAM,KAAK,WAAa,EAAI,GACpC,KACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,OAAQ,KAAK,YACvB,CAAS,EACD,GAAM,EAAE,OAAO,YAAc,KAAK,WAAa,EAAK,GACpD,EAAK,CAET,CACF,CAEA,qBAAqB,CAAE,OAAA,CAAM,EAAI,CAC/B,MAAM,EAAI,KAAK,EACf,GAAI,EAAE,OAAO,KAAK,MAAM,MAAM,MAAQ,EAAE,OAAO,MAAM,UAAU,KAAM,CACnE,IAAI,EAAK,EAAE,QAAQ,cACnB,MAAM,EAAK,EACX,IAAI,EACJ,MAAM,EAAK,EAAE,OAAO,WACpB,QAAS,EAAI,EAAG,EAAI,EAAS,EAAG,IAC1B,EAAE,OAAO,KAAK,MAAM,MAAM,MAC5B,KAAK,cAAc,CACjB,EAAA,EACA,OAAQ,EAAS,EACjB,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,OAAQ,KAAK,YACzB,CAAW,EAEW,IAAI,GAAM,KAAK,EAAG,KAAK,GAAG,EAClC,eAAe,EAAI,EAAG,EAAE,IAAI,WAAW,EAC7C,GAAM,EAAE,OAAO,UAAY,EAC3B,EAAK,CAET,CACA,GAAI,EAAE,OAAO,KAAK,MAAM,MAAM,KAAM,CAElC,IAAI,EAAK,EACL,EAAK,EACT,MAAM,EAAK,EAAE,OAAO,UACpB,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,WAAa,EAAG,IAC5C,KAAK,cAAc,CACjB,EAAA,EACA,OAAQ,EAAE,QAAQ,WAAa,EAC/B,KACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,OAAQ,KAAK,YACvB,CAAS,EACD,GAAM,EAAE,OAAO,WAAa,EAAE,QAAQ,WACtC,EAAK,CAET,CACF,CACA,YAAa,CACX,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,KAAK,IAAM,EAAS,MAAM,CAAE,MAAO,iBAAiB,CAAE,EACtD,KAAK,aAAe,EAAS,MAAM,CACjC,MAAO,iCACb,CAAK,EACD,KAAK,aAAe,EAAS,MAAM,CACjC,MAAO,+BACb,CAAK,EACD,KAAK,cAAgB,EAAS,MAAM,CAAE,MAAO,yBAAyB,CAAE,EACxE,KAAK,IAAI,IAAI,KAAK,YAAY,EAC9B,KAAK,IAAI,IAAI,KAAK,YAAY,EACzB,EAAE,OAAO,KAAK,OACjB,KAAK,aAAa,KAAI,EACtB,KAAK,aAAa,KAAI,EACtB,KAAK,cAAc,KAAI,GAEzB,IAAI,EAAgB,EACpB,KAAO,EAAgB,EAAG,eAAe,QAAU,EAAG,mBAAmB,SAAS,CAAa,GAC7F,IAEE,IAAkB,EAAG,eAAe,SACtC,EAAgB,GAElB,IAAI,EAAc,EAAG,WAAW,CAAa,EAAE,OAAO,OAAS,EAC3D,EACJ,MAAI,CAAC,EAAG,iBAAmB,KAAK,YAC9B,EAAS,KAAK,YAAY,OACtB,KAAK,aACP,EAAc,EAAE,UAAU,OAAO,OAC7B,EAAE,OAAO,MAAM,YAAc,EAAE,OAAO,MAAM,OAAO,YACrD,EAAS,EAAE,OAAO,MAAM,cAEpB,GAAM,GAAM,EAAK,EAAG,aAAe,KAAO,OAAS,EAAG,CAAa,IAAM,KAAO,OAAS,EAAG,SAAW,KAAO,OAAS,EAAG,QAAU,GAAK,EAAE,OAAO,MAAM,OAAS,aACrK,EAAS,EAAG,WAAW,CAAa,EAAE,OAAO,OAAS,IAG1D,KAAK,aAAa,CAAE,OAAA,EAAQ,WAAY,CAAW,CAAE,IAErD,EAAS,EACT,EAAc,EAAG,YACjB,KAAK,qBAAqB,CAAE,OAAA,EAAQ,WAAY,CAAW,CAAE,GAE/D,KAAK,cAAc,EAAQ,CAAW,EAC/B,CACL,GAAI,KAAK,IACT,cAAe,KAAK,cACpB,eAAgB,EAAE,OAAO,UAAY,CAC3C,CACE,CAKA,cAAc,EAAQ,EAAY,CAChC,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,EAAI,KAAK,EACT,EAAY,CAAC,EAAM,EAAO,EAAI,EAAI,EAAI,IAAO,CACjD,QAAS,EAAI,EAAG,EAAI,EAAG,EAAI,EAAO,IAAK,IACjC,GAAK,EAAE,OAAO,KAAK,CAAI,EAAE,OAAO,SAClC,EAAI,GAEN,KAAK,kBAAkB,CAAE,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAA,CAAI,CAAE,EAClD,GAAM,EAAE,OAAO,WAAa,CAEhC,EAWA,KAVM,EAAK,EAAE,OAAO,KAAK,IAAI,SAAW,KAAO,OAAS,EAAG,QAAU,GACnE,EACE,MACA,EACA,EACA,EACA,EAAE,OAAO,UACT,EAAE,OAAO,WAAa,CAC9B,IAEU,EAAK,EAAE,OAAO,KAAK,OAAO,SAAW,KAAO,OAAS,EAAG,QAAU,EAAG,CACzE,IAAI,EAAK,CAAC,EAAE,QAAQ,iBAAmB,EAAE,OAAO,MAAM,gBAAkB,OAAS,EAAE,OAAO,MAAM,OAAS,YAAc,EAAE,OAAO,MAAM,uBAAyB,EAAS,EAAI,EACxK,EAAE,UAAU,aACd,IAAO,GAAM,EAAK,EAAE,QAAQ,aAAe,KAAO,OAAS,EAAG,OAAO,SAAW,KAAO,EAAK,GAAK,GAEnG,IAAI,EAAK,EAAE,QAAQ,cACnB,MAAM,EAAK,EACX,IAAI,EAAK,EAAE,QAAQ,cAAgB,EAAE,OAAO,UAAY,EACxD,MAAM,EAAK,EAAE,OAAO,WACpB,QAAS,EAAI,EAAG,EAAI,EAAG,EAAI,EAAQ,IAAK,IAClC,GAAK,EAAE,OAAO,KAAK,OAAO,OAAO,SACnC,EAAI,GAEF,EAAE,OAAO,MAAM,OAAS,aAC1B,EACA,KAAK,YAAY,CAAC,EAAE,SACpB,KACG,EAAK,KAAK,YAAY,EAAI,CAAC,IAAM,KAAO,OAAS,EAAG,WAAa,EAAE,OAAO,WAC7E,KAAK,YAAY,CAAC,EAAE,UAEtB,KAAK,kBAAkB,CAAE,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,KAAM,QAAQ,CAAE,EAC5D,GAAM,EAAE,OAAO,UAAY,CAE/B,CACF,CACF,CACA,MAAM,EAAO,CAIX,YAAY,EAAG,CACb,KAAK,EAAI,EACT,KAAK,UAAY,IAAI,GAAU,KAAK,CAAC,CACvC,CAOA,UAAU,EAAM,EAAM,EAAQ,EAAG,CAE/B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACb,IAAI,EACA,EACA,EACA,EACA,EAAG,iBACL,EAAU,EAAE,OAAO,MACnB,EAAW,KAAK,KAAK,EAAG,SAAW,KAAO,GAAI,CAAC,IAE/C,EAAU,EAAE,OAAO,MAAM,CAAK,EAC9B,EAAW,KAAK,KAAK,EAAG,UAAY,KAAO,GAAI,CAAC,GAE7C,EAAQ,SAAS,CAAQ,IAC5B,EAAW,IAEb,EAAS,EAAQ,MAAQ,QAAU,EAAQ,MAAQ,KACnD,EAAS,EAAQ,MAAQ,QAAU,EAAQ,MAAQ,KACnD,IAAI,EAAc,EAAQ,WAAa,QAAU,EAAQ,WAAa,KAClE,EAAgB,EAAQ,aAAe,QAAU,EAAQ,aAAe,KACxE,EAAQ,EAAgB,EAAQ,WAAa,GAAyB,KAAK,IAC7E,KAAK,MAAM,EAAW,CAAC,EACvB,GAAyB,OAAS,CACxC,CAAK,EAeD,GAdI,EAAG,iBAAmB,CAAC,GAAiB,EAAG,oBAAsB,IACnE,EAAQ,EAAG,oBACX,EAAgB,IAEd,IAAU,aACZ,EAAQ,EAAG,WAAa,EAExB,EAAQ,KAAK,IAAI,KAAK,MAAM,CAAK,CAAC,GAEhC,IAAS,OAAO,WAAa,IAAS,GAAK,CAAC,EAAQ,SAAS,CAAI,GAAK,CAAC,EAAQ,SAAS,CAAI,GAAK,IAAS,OAAO,WAAa,IAAS,CAAC,OAAO,aACjJ,EAAO,EAAQ,SAAS,EAAQ,GAAG,EAAI,EAAQ,IAAM,EACrD,EAAO,EAAQ,SAAS,EAAQ,GAAG,EAAI,EAAQ,IAAM,EAAO,EAC5D,EAAG,mBAAqB,IAEtB,EAAO,EAAM,CACf,QAAQ,KACN,gEACR,EACM,MAAM,EAAO,EACb,EAAO,EACP,EAAO,CACT,MAAW,IAAS,IAClB,EAAO,IAAS,EAAI,EAAI,EAAO,EAC/B,EAAO,IAAS,EAAI,EAAI,EAAO,GAEjC,MAAM,EAAS,CAAA,EACX,EAAQ,IACV,EAAQ,GAEV,IAAI,EAAO,EACP,EAAQ,KAAK,IAAI,EAAO,CAAI,EAChC,MAAM,EAAiB,IACnB,CAAC,GAAU,EAAO,GAAK,EAAO,EAAQ,IACxC,EAAO,EACP,EAAS,IAEP,CAAC,GAAU,EAAO,GAAK,CAAC,EAAO,EAAQ,IACzC,EAAO,EACP,EAAS,IAEX,EAAQ,KAAK,IAAI,EAAO,CAAI,EAC5B,IAAI,EAAW,EAAQ,EACnB,EAAW,EACf,MAAM,EAAM,KAAK,MAAM,KAAK,MAAM,CAAQ,CAAC,EACrC,EAAS,KAAK,IAAI,GAAI,CAAG,EAC/B,IAAI,EAAS,KAAK,KAAK,EAAW,CAAM,EAUxC,GATA,EAAS,GAA2B,EAAG,gBAAkB,EAAI,EAAI,CAAC,EAAE,CAAM,EAC1E,EAAW,EAAS,EACpB,EAAW,EACP,EAAG,iBAAmB,EAAQ,UAAY,EAAQ,OAAS,YAC7D,EAAW,EAAQ,SACnB,EAAc,IACL,IACT,EAAW,EAAQ,UAEjB,GACE,EAAQ,eAAgB,CAC1B,MAAM,EAAU,KAAK,MAAM,KAAK,MAAM,CAAQ,CAAC,EAC/C,GAAY,KAAK,IAAI,GAAI,EAAM,CAAO,CACxC,CAEF,GAAI,GAAU,EAAQ,CACpB,IAAI,EAAY,EAAQ,EACxB,GAAI,EACF,GAAI,EACF,GAAI,EAAQ,IAAI,EAAO,CAAQ,GAAK,EAAG,CACrC,MAAM,EAAU,EAAQ,OAAO,EAAU,CAAS,EAC9C,EAAY,EAAU,GACxB,EAAW,EAEX,EAAW,CAEf,MACM,EAAQ,IAAI,EAAU,CAAS,GAAK,EACtC,EAAW,GAEX,EAAY,EACZ,EAAgB,SAIpB,EAAW,UAGT,EACE,EAAQ,IAAI,EAAO,CAAQ,GAAK,EAClC,EAAY,EAEZ,EAAW,UAGT,EAAQ,IAAI,EAAO,CAAQ,GAAK,EAClC,EAAY,MACP,CACL,EAAO,KAAK,KAAK,EAAQ,CAAQ,EACjC,EAAY,EAAQ,EACpB,MAAM,EAAU,EAAQ,OAAO,EAAO,CAAQ,EAC1C,EAAQ,EAAU,IACpB,EAAY,GAEd,EAAW,CACb,CAGJ,EAAO,KAAK,MAAM,EAAQ,CAAQ,CACpC,KAAO,CACL,GAAI,CAAC,GAAU,CAAC,EACd,GAAI,EAAG,iBAAmB,EAAe,CACvC,MAAM,EAAO,EAAW,KAAK,MAAM,EAAO,CAAQ,EAClD,IAAI,EAAO,EAAO,EAAW,EACzB,EAAO,IACT,GAAY,GAEd,EAAO,EACP,EAAO,EACP,EAAO,EAAO,EAAW,EACzB,EAAQ,KAAK,IAAI,EAAO,CAAI,EACxB,EAAO,GAAK,EAAO,KAAK,IAAI,EAAO,CAAI,IACzC,EAAO,EACP,EAAO,EAAW,GAEhB,EAAO,GAAK,CAAC,EAAO,KAAK,IAAI,EAAO,CAAI,IAC1C,EAAO,EACP,EAAO,CAAC,EAAW,EAEvB,MACE,EAAO,EAAW,KAAK,MAAM,EAAO,CAAQ,EAC5C,EAAO,EAAW,KAAK,KAAK,EAAO,CAAQ,UAEpC,EACT,GAAI,EACF,EAAO,EAAO,EAAW,MACpB,CACL,MAAM,EAAW,EACjB,EAAO,EAAW,KAAK,MAAM,EAAO,CAAQ,EACxC,KAAK,IAAI,EAAO,CAAI,EAAI,EAAQ,OAAO,EAAO,CAAQ,EAAI,IAC5D,EAAO,EAAO,EAAW,EACzB,GAAQ,EAAW,KAAK,OAAO,EAAW,GAAQ,CAAQ,EAE9D,SACS,EACT,GAAI,EACF,EAAO,EAAO,EAAW,MACpB,CACL,MAAM,EAAW,EACjB,EAAO,EAAW,KAAK,KAAK,EAAO,CAAQ,EACvC,KAAK,IAAI,EAAO,CAAI,EAAI,EAAQ,OAAO,EAAO,CAAQ,EAAI,IAC5D,EAAO,EAAO,EAAW,EACzB,GAAQ,EAAW,KAAK,MAAM,EAAW,GAAQ,CAAQ,EAE7D,CAEF,EAAQ,KAAK,IAAI,EAAO,CAAI,EAC5B,EAAW,EAAQ,OAAO,EAAO,CAAQ,EACzC,EAAO,KAAK,MAAM,EAAQ,CAAQ,CACpC,CAWA,GAVI,CAAC,GAAiB,EAAE,GAAU,KAChC,EAAO,KAAK,MAAM,EAAQ,QAAgB,EAAW,MAAY,EAC7D,EAAO,IAAM,EAAQ,gBAAgB,CAAI,EAAE,OAAS,GACtD,KAGA,CAAC,GAAiB,EAAQ,gBAAkB,EAAG,gBAAkB,GAAK,EAAO,IAC/E,EAAO,EACP,EAAW,KAAK,MAAM,EAAQ,CAAI,GAEhC,EAAO,IAAa,EAAE,GAAiB,IAAgB,EAAQ,gBAAiB,CAClF,MAAM,EAAK,EAAQ,gBAAgB,CAAI,EACjC,EAAO,EAAG,OAAS,EACzB,IAAI,EAAK,EACT,EAAY,QAAS,EAAW,EAAG,EAAW,EAAM,IAClD,QAAS,EAAS,EAAG,GAAU,EAAO,EAAU,IAAU,CACxD,MAAM,EAAO,KAAK,IAAI,EAAS,EAAU,CAAI,EAC7C,IAAI,EAAI,EACJ,EAAM,EACV,QAAS,EAAO,EAAQ,GAAQ,EAAM,IACpC,GAAO,EAAG,CAAI,EAGhB,GADA,GAAK,EACD,EAAI,EAAU,CAChB,EAAK,EACL,MAAM,CACR,CACF,CAEE,IAAO,EACT,EAAW,EAEX,EAAW,EAAQ,EAErB,EAAO,KAAK,MAAM,EAAQ,CAAQ,CACpC,CACI,EAAG,iBAAmB,EAAG,qBAAuB,GAAK,EAAG,mBAAmB,QAAQ,CAAK,EAAI,IAC9F,EAAG,oBAAsB,GAE3B,IAAI,EAAM,EAAO,EACjB,MAAM,EAAM,EAAW,MACvB,GACE,GAAO,EACP,EAAO,KAAK,EAAQ,YAAY,EAAK,CAAC,CAAC,QAChC,EAAO,EAAM,GACtB,MAAO,CACL,OAAA,EACA,QAAS,EAAO,CAAC,EACjB,QAAS,EAAO,EAAO,OAAS,CAAC,CACvC,CACE,CAEA,YAAY,EAAM,EAAM,EAAQ,GAAI,EAAQ,EAAG,EAAO,OAAQ,CAC5D,MAAM,EAAQ,KAAK,IAAI,EAAO,CAAI,EAClC,IAAI,EAAS,CAAA,EACb,GAAI,IAAS,EACX,OAAA,EAAS,CAAC,CAAI,EACP,CACL,OAAA,EACA,QAAS,EAAO,CAAC,EACjB,QAAS,EAAO,EAAO,OAAS,CAAC,CACzC,EAEI,EAAQ,KAAK,0BAA0B,EAAO,EAAO,CAAK,EAGxD,IAAU,eAEV,EAAQ,KAAK,EAAE,QAAQ,WAAa,GAEtC,MAAM,EAEJ,EAEG,IACH,EAAO,EAAQ,GAEjB,MAAM,EAAgB,EACtB,GAAI,IAAS,GAAK,SAAS,CAAI,EAAG,CAChC,MAAM,EAAY,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,CAAI,CAAC,CAAC,EACjD,EAAY,KAAK,IAAI,EAAe,CAAC,EAAY,CAAa,EAC9D,EAAa,KAAK,IAAI,GAAI,CAAS,EACzC,EAAO,KAAK,OAAO,EAAO,OAAO,SAAW,CAAU,EAAI,CAC5D,CACA,IAAI,EAAY,IAAU,OAAO,UAAY,EAAI,EAC7C,IAAU,OAAO,YACnB,EAAO,GAET,IAAI,EAAI,EACR,KAAO,GAAa,GAClB,EAAO,KAAK,CAAC,EACb,EAAI,EAAQ,gBAAgB,EAAG,CAAI,EACnC,GAAa,EAEf,MAAO,CACL,OAAA,EACA,QAAS,EAAO,CAAC,EACjB,QAAS,EAAO,EAAO,OAAS,CAAC,CACvC,CACE,CAMA,qBAAqB,EAAM,EAAM,EAAM,CACjC,GAAQ,IAAG,EAAO,KAAK,IAAI,EAAM,CAAI,GACrC,GAAQ,IAAG,EAAO,KAAK,IAAI,EAAM,CAAI,GACzC,MAAM,EAAO,CAAA,EACP,EAAS,KAAK,KAAK,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAI,EAAI,CAAC,EACtD,EAAS,KAAK,MAAM,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAI,CAAC,EACzD,QAAS,EAAI,EAAQ,EAAI,EAAQ,IAC/B,EAAK,KAAK,KAAK,IAAI,EAAM,CAAC,CAAC,EAE7B,MAAO,CACL,OAAQ,EACR,QAAS,EAAK,CAAC,EACf,QAAS,EAAK,EAAK,OAAS,CAAC,CACnC,CACE,CAMA,iBAAiB,EAAM,EAAM,EAAM,CAC7B,GAAQ,IAAG,EAAO,KAAK,IAAI,EAAM,CAAI,GACrC,GAAQ,IAAG,EAAO,KAAK,IAAI,EAAM,CAAI,GACzC,MAAM,EAAO,CAAA,EACP,EAAS,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAI,EACvC,EAAS,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAI,EACvC,EAAW,EAAS,EACpB,EAAQ,KAAK,MAAM,CAAQ,EAC3B,EAAiB,EAAW,EAClC,QAAS,EAAI,EAAG,EAAU,EAAQ,EAAI,EAAO,IAAK,GAAW,EAC3D,EAAK,KAAK,KAAK,IAAI,EAAM,CAAO,CAAC,EAEnC,OAAA,EAAK,KAAK,KAAK,IAAI,EAAM,CAAM,CAAC,EACzB,CACL,OAAQ,EACR,QAAS,EACT,QAAS,CACf,CACE,CAMA,0BAA0B,EAAO,EAAO,EAAO,CAC7C,IAAI,EAAW,EACf,GAAI,OAAO,EAAU,KAAe,KAAK,EAAE,OAAO,MAAM,CAAK,EAAE,OAAO,WAAa,KAAK,EAAE,OAAO,MAAM,CAAK,EAAE,aAAe,OAAQ,CACnI,MAAM,EAAe,OACnB,KAAK,EAAE,OAAO,MAAM,CAAK,EAAE,OAAO,UAAU,CAAC,CACrD,EACU,EAAQ,SAAS,CAAY,GAAK,KAAK,EAAE,QAAQ,gBAAkB,IACrE,EAAW,KAAK,KAAK,CAAK,EAE9B,CACA,OAAO,EAAW,EAAQ,EAAW,CACvC,CAMA,kBAAkB,EAAO,EAAM,EAAM,CACnC,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OACb,EAAI,EAAG,gBAAkB,EAAI,MAAQ,EAAI,MAAM,CAAK,EACtD,OAAO,EAAG,WAAW,CAAK,EAAM,MAClC,EAAG,WAAW,CAAK,EAAI,CAAA,GAEzB,MAAM,EAAQ,KAAK,IAAI,EAAO,CAAI,EAC9B,EAAE,aAAe,GAAS,IAC5B,EAAG,gBAAkB,IAEnB,EAAE,aAAe,EAAQ,GAC3B,EAAG,mBAAqB,GACxB,EAAG,WAAW,CAAK,EAAI,EAAE,eAAiB,KAAK,qBAAqB,EAAM,EAAM,EAAE,OAAO,EAAI,KAAK,iBAAiB,EAAM,EAAM,EAAE,OAAO,GAEpI,IAAS,CAAC,OAAO,WAAa,CAAC,EAAQ,SAAS,CAAI,GAAK,IAAS,OAAO,WAAa,CAAC,EAAQ,SAAS,CAAI,EAC9G,EAAG,WAAW,CAAK,EAAI,KAAK,UAC1B,OAAO,UACP,EACA,CACV,GAEQ,EAAG,mBAAqB,GACxB,EAAG,WAAW,CAAK,EAAI,KAAK,UAC1B,EACA,EACA,CACV,EAGE,CAKA,UAAU,EAAM,EAAM,CACpB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACb,GAAI,IAAS,CAAC,OAAO,WAAa,CAAC,EAAQ,SAAS,CAAI,EACtD,EAAG,WAAa,KAAK,YAAY,EAAG,GAAI,EAAE,MACrC,CACL,MAAM,EAAQ,EAAG,YACjB,EAAG,WAAa,KAAK,YACnB,EACA,EACA,EACA,EACA,EAAE,OAAO,MAAM,MAAQ,OAAS,EAAE,OAAO,MAAM,SAAW,MAClE,CACI,CACA,OAAO,EAAG,UACZ,CACA,oBAAqB,CACnB,MAAM,EAAM,KAAK,EAAE,OACb,EAAK,KAAK,EAAE,QAClB,KAAK,UAAU,uBAAsB,EACrC,MAAM,EAAgB,EAAG,eACnB,EAAU,EAAG,QACb,EAAU,EAAG,QACb,EAAwB,CAAA,EACxB,EAAe,CAAC,EAAG,gBAyIzB,GAxIA,EAAG,mBAAqB,GACxB,EAAG,UAAY,CAAA,EACf,EAAc,QAAQ,CAAC,EAAY,IAAO,CACxC,MAAM,EAAa,CAAA,EAWnB,GAVA,EAAW,QAAS,GAAO,CACzB,IAAI,EACJ,MAAM,GAEH,EAAK,EAAI,OAAO,CAAE,IAAM,KAAO,OAAS,EAAG,MAE1C,EAAW,QAAQ,CAAK,EAAI,GAC9B,EAAW,KAAK,CAAK,CAEzB,CAAC,EACG,EAAW,OAAS,EAAG,CACzB,IAAI,EAAO,OAAO,UACd,EAAO,CAAC,OAAO,UACf,EAAU,EACV,EAAW,EACX,EACA,EACJ,GAAI,EAAI,MAAM,QAAS,CACrB,MAAM,EAAY,IAAI,MAAM,EAAG,UAAU,EAAE,KAAK,CAAC,EAC3C,EAAY,CAAA,EACZ,EAAY,CAAA,EACZ,EAAY,CAAA,EAClB,EAAW,QAAQ,IAAM,CACvB,EAAU,KAAK,EAAU,IAAI,IAAM,OAAO,SAAS,CAAC,EACpD,EAAU,KAAK,EAAU,IAAI,IAAM,OAAO,SAAS,CAAC,EACpD,EAAU,KAAK,EAAU,IAAI,IAAM,OAAO,SAAS,CAAC,CACtD,CAAC,EACD,QAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CACtC,CAAC,GACL,EAAI,OAAO,EAAW,CAAC,CAAC,EAAE,OACxB,EACA,EAAI,OAAO,EAAW,CAAC,CAAC,EAAE,MAE5B,MAAM,EAAK,EAAW,CAAC,EAGrB,EAAI,OAAO,CAAE,EAAE,MAEf,EACA,EAAI,OAAO,CAAE,EAAE,MAEf,EAAkB,QAAQ,OAAO,EAAG,SAAQ,CAAE,EAE9B,EAAE,EAAG,uBAAuB,QAAQ,CAAE,EAAI,GAAK,EAAG,gCAAgC,QAAQ,CAAE,EAAI,KAEhH,EAAG,mBAAqB,GACxB,EAAW,QAAQ,CAAC,EAAI,IAAQ,CAC9B,GAEE,EAAI,OAAO,CAAE,EAAE,QAAU,EAEzB,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,CAAE,EAAE,OAAQ,IAAK,CAC5D,MAAM,EAAM,KAAK,EAAE,WAAW,OAAO,CAAE,EAAE,CAAC,EACtC,GAAO,EACT,EAAU,CAAG,EAAE,CAAC,GAAK,EAErB,EAAU,CAAG,EAAE,CAAC,GAAK,EAEvB,EAAU,CAAG,EAAE,CAAC,GAAK,EACrB,EAAU,KAAK,IAAI,EAAS,CAAG,EAC/B,EAAW,KAAK,IAAI,EAAU,CAAG,CACnC,CAEJ,CAAC,IAEC,IAAe,OAAS,IAAe,WACzC,EAAG,UAAU,KAAK,CAAe,CAErC,CACK,IACH,EAAa,EAAI,MAAM,MAErB,IAAe,OAAS,IAAe,SACzC,EAAW,QAAQ,CAAC,EAAI,IAAQ,CAC9B,EAAO,KAAK,IAAI,EAAM,KAAK,IAAI,MAAM,KAAM,EAAU,CAAG,CAAC,CAAC,EAC1D,EAAO,KAAK,IAAI,EAAM,KAAK,IAAI,MAAM,KAAM,EAAU,CAAG,CAAC,CAAC,CAC5D,CAAC,GAED,EAAW,QAAQ,CAAC,EAAI,IAAQ,CAC9B,EAAU,KAAK,IAAI,EAAS,KAAK,IAAI,MAAM,KAAM,EAAU,CAAG,CAAC,CAAC,EAChE,EAAW,KAAK,IACd,EACA,KAAK,IAAI,MAAM,KAAM,EAAU,CAAG,CAAC,CACnD,CACY,CAAC,EACD,EAAO,EACP,EAAO,GAEL,IAAS,OAAO,WAAa,IAAS,OAAO,YAC/C,EAAO,CAAC,OAAO,UAEnB,KACE,SAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAC1C,MAAM,EAAK,EAAW,CAAC,EACvB,EAAO,KAAK,IAAI,EAAM,EAAQ,CAAE,CAAC,EACjC,EAAO,KAAK,IAAI,EAAM,EAAQ,CAAE,CAAC,EACf,EAAE,EAAG,uBAAuB,QAAQ,CAAE,EAAI,GAAK,EAAG,gCAAgC,QAAQ,CAAE,EAAI,KAEhH,EAAG,mBAAqB,GAE5B,CAEE,EAAI,MAAM,CAAE,EAAE,MAAQ,SACpB,OAAO,EAAI,MAAM,CAAE,EAAE,KAAQ,WAC/B,EAAO,EAAI,MAAM,CAAE,EAAE,IAAI,CAAI,EAE7B,EAAO,EAAI,MAAM,CAAE,EAAE,KAGrB,EAAI,MAAM,CAAE,EAAE,MAAQ,SACpB,OAAO,EAAI,MAAM,CAAE,EAAE,KAAQ,WAC/B,EAAO,EAAI,MAAM,CAAE,EAAE,IAAI,CAAI,EAE7B,EAAO,EAAI,MAAM,CAAE,EAAE,KAGzB,EAAG,UAAY,EAAG,UAAU,OAAO,CAAC,EAAG,EAAG,IAAM,EAAE,QAAQ,CAAC,IAAM,CAAC,EAClE,MAAM,EAAO,EAAI,MAAM,CAAE,EACJ,GAAgB,EAAK,YAAc,IAAQ,CAAC,EAAK,aAAe,EAAK,MAAQ,QAAU,EAAK,MAAQ,QAAU,EAAG,mBAAmB,QAAQ,CAAE,EAAI,GAAK,EAAQ,SAAS,CAAI,GAAK,EAAQ,SAAS,CAAI,EAEzN,EAAsB,KAAK,CAAE,GAAA,EAAI,KAAA,EAAM,KAAA,CAAI,CAAE,GAE7C,KAAK,kBAAkB,EAAI,EAAM,CAAI,EACrC,EAAW,QAAS,GAAO,CACzB,EAAQ,CAAE,EAAI,EAAG,WAAW,CAAE,EAAE,QAChC,EAAQ,CAAE,EAAI,EAAG,WAAW,CAAE,EAAE,OAClC,CAAC,EAEL,MACE,KAAK,kBAAkB,EAAI,EAAG,CAAC,OAAO,SAAS,CAEnD,CAAC,EACG,EAAsB,QAAU,EAAG,CACrC,EAAsB,QAAS,GAAM,CACnC,KAAK,kBAAkB,EAAE,GAAI,EAAE,KAAM,EAAE,IAAI,EAC3C,EAAc,EAAE,EAAE,EAAE,QAAS,GAAO,CAClC,EAAQ,CAAE,EAAI,EAAG,WAAW,EAAE,EAAE,EAAE,QAClC,EAAQ,CAAE,EAAI,EAAG,WAAW,EAAE,EAAE,EAAE,OACpC,CAAC,CACH,CAAC,EACD,IAAI,EAAc,EAClB,EAAsB,QAAS,GAAM,CACnC,MAAM,EAAQ,EAAG,WAAW,EAAE,EAAE,EAC1B,EAAQ,EAAM,QAAU,EAAM,QACpC,GAAI,EAAQ,EAAG,CACb,MAAM,EAAI,CAAC,EAAM,QAAU,EACvB,EAAI,IAAa,EAAc,EACrC,CACF,CAAC,EACG,EAAc,IAAG,EAAc,GAC/B,EAAc,IAAG,EAAc,GACnC,MAAM,EAAe,GAAQ,CAC3B,GAAI,GAAO,EAAG,MAAO,GACrB,MAAM,EAAM,KAAK,MAAM,KAAK,MAAM,CAAG,CAAC,EAChC,EAAS,KAAK,IAAI,GAAI,CAAG,EACzB,EAAM,EAAM,EAClB,IAAI,EACJ,OAAI,GAAO,EAAI,KAAM,EAAO,EACnB,GAAO,EAAI,KAAM,EAAO,EACxB,GAAO,IAAM,KAAM,EAAO,IAC1B,GAAO,EAAI,KAAM,EAAO,EAC5B,EAAO,GACL,EAAO,CAChB,EACA,EAAsB,QAAS,GAAM,CACnC,MAAM,EAAQ,EAAG,WAAW,EAAE,EAAE,EAChC,GAAI,CAAC,EAAM,QAAU,EAAM,OAAO,OAAS,EAAG,OAC9C,MAAM,EAAQ,EAAM,QAAU,EAAM,QACpC,GAAI,GAAS,EAAG,OAChB,MAAM,EAAI,CAAC,EAAM,QAAU,EAC3B,GAAI,KAAK,IAAI,EAAI,CAAW,GAAK,KAAM,OACvC,MAAM,EAAY,EAAI,GAAe,EAAc,EAAI,KACjD,EAAgB,CAAC,GAAa,EAAI,GAAe,EAAc,KACrE,GAAI,CAAC,GAAa,CAAC,EAAe,OAClC,MAAM,EAAgB,EAAY,CAAC,EAAc,EAAM,SAAW,EAAI,GAAe,EAAM,QACrF,EAAgB,EAAgB,CAAC,EAAM,SAAW,EAAI,GAAe,EAAc,EAAM,QACzF,EAAW,EAAgB,EACjC,GAAI,GAAY,EAAG,OACnB,MAAM,EAAe,KAAK,IAAI,EAAM,OAAO,OAAQ,CAAC,EAC9C,EAAU,EAAY,EAAW,KAAK,IAAI,EAAe,EAAG,CAAC,CAAC,EACpE,GAAI,GAAW,EAAG,OAClB,IAAI,EACA,EACJ,GAAI,EAAW,CACb,EAAa,KAAK,MAAM,EAAgB,EAAU,IAAI,EAAI,EAC1D,MAAM,EAAc,EAAc,KAAO,GAAc,EAAc,GAAK,EAAc,EAAM,QACxF,EAAY,KAAK,IAAI,EAAa,EAAM,OAAO,EACrD,EAAa,KAAK,KAAK,EAAY,EAAU,IAAI,EAAI,CACvD,KAAO,CACL,EAAa,KAAK,KAAK,EAAgB,EAAU,IAAI,EAAI,EACzD,MAAM,EAAc,EAAc,EAAI,KAAO,CAAC,EAAc,GAAc,EAAI,GAAe,EAAM,QAC7F,EAAY,KAAK,IAAI,EAAa,EAAM,OAAO,EACrD,EAAa,KAAK,MAAM,EAAY,EAAU,IAAI,EAAI,CACxD,CACA,EAAM,OAAS,CAAA,EACf,QAAS,EAAI,EAAY,GAAK,EAAa,EAAU,KAAM,EAAI,EAAQ,gBAAgB,EAAG,CAAO,EAC/F,EAAM,OAAO,KAAK,EAAQ,YAAY,EAAG,CAAC,CAAC,EAE7C,EAAM,QAAU,EAChB,EAAM,QAAU,EAChB,EAAc,EAAE,EAAE,EAAE,QAAS,GAAO,CAClC,EAAQ,CAAE,EAAI,EAAM,QACpB,EAAQ,CAAE,EAAI,EAAM,OACtB,CAAC,CACH,CAAC,CACH,SAAW,EAAsB,SAAW,EAAG,CAC7C,MAAM,EAAI,EAAsB,CAAC,EACjC,KAAK,kBAAkB,EAAE,GAAI,EAAE,KAAM,EAAE,IAAI,EAC3C,EAAc,EAAE,EAAE,EAAE,QAAS,GAAO,CAClC,EAAQ,CAAE,EAAI,EAAG,WAAW,EAAE,EAAE,EAAE,QAClC,EAAQ,CAAE,EAAI,EAAG,WAAW,EAAE,EAAE,EAAE,OACpC,CAAC,CACH,CACF,CACF,CACA,MAAM,EAAM,CAIV,YAAY,EAAG,CACb,KAAK,EAAI,EACT,KAAK,OAAS,IAAI,GAAO,KAAK,CAAC,CACjC,CACA,MAAO,CACL,KAAK,UAAS,EACd,KAAK,UAAS,EACd,KAAK,UAAS,CAChB,CAeA,iBAAiB,EAAS,CACxB,MAAM,EAAY,KAAK,EAAE,OAAO,UAChC,GAAI,CAAC,GAAa,CAAC,GAAW,CAAC,EAAQ,OAAQ,MAAO,GACtD,MAAM,EAAO,KAAK,EAAE,OAAO,MACrB,EAAK,OAAO,EAAK,KAAQ,SAAW,EAAK,IAAM,EAAQ,CAAC,EACxD,EAAK,OAAO,EAAK,KAAQ,SAAW,EAAK,IAAM,EAAQ,EAAQ,OAAS,CAAC,EAC/E,OAAM,EAAK,GACH,EAAK,GAAM,EADI,CAEzB,CAKA,YAAY,EAAqB,EAAU,OAAO,UAAW,EAAW,CAAC,OAAO,UAAW,EAAoB,KAAM,CACnH,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACpC,MAAM,EAAM,KAAK,EAAE,OACb,EAAK,KAAK,EAAE,QAClB,IAAI,EAAO,CAAC,OAAO,UACf,EAAO,OAAO,UACd,IAAsB,OACxB,EAAoB,EAAsB,GAE5C,MAAM,EAAS,KAAK,EAAE,WAAW,OACjC,IAAI,EAAY,EACZ,EAAY,EACZ,EAAI,MAAM,OAAS,eACrB,EAAY,KAAK,EAAE,WAAW,cAC9B,EAAY,KAAK,EAAE,WAAW,eACrB,EAAI,MAAM,OAAS,WAC5B,EAAY,KAAK,EAAE,WAAW,cAC9B,EAAY,KAAK,EAAE,WAAW,eACrB,EAAI,MAAM,OAAS,UAC5B,EAAY,KAAK,EAAE,WAAW,gBAC9B,EAAY,KAAK,EAAE,WAAW,iBACrB,KAAK,EAAE,UAAU,cAC1B,EAAY,KAAK,EAAE,UAAU,iBAC7B,EAAY,KAAK,EAAE,UAAU,gBAE/B,IAAI,EAAiB,GACrB,GAAI,KAAK,EAAE,WAAW,QAAQ,QAAU,EAAmB,CACzD,MAAM,GAEH,EAAK,EAAG,cAAgB,KAAO,OAAS,EAAG,EAAE,OAAO,MAAM,OAEzD,EAAI,MAAM,KAAK,SAAW,EAAI,MAAM,KAAK,gBAA4C,GAAM,SAAsC,GAAM,kBACzI,EAAiB,GAErB,CACA,QAAS,EAAI,EAAqB,EAAI,EAAmB,IAAK,CAC5D,EAAG,WAAa,KAAK,IAAI,EAAG,WAAY,EAAO,CAAC,EAAE,MAAM,EACxD,MAAM,EAEJ,EAAI,OAAO,CAAC,EAAE,KAEZ,KAAK,EAAE,UAAU,eAAe,SAClC,EAAG,WAAa,KAAK,EAAE,UAAU,eAAe,OAC7C,GAAU,OAAO,EAAU,GACtC,EAAU,QAEA,KAAK,EAAE,UAAU,OAAO,QAAU,EAAI,MAAM,OAAS,YAIzD,KAAK,EAAE,WAAW,OAAO,OAAO,CAAC,EAAG,IAAM,EAAI,EAAE,OAAQ,CAAC,IAAM,IAC7D,EAAG,WAAa,KAAK,IAAI,EAAG,WAAY,KAAK,EAAE,UAAU,OAAO,MAAM,GAExE,IAAI,EAAc,EACd,EAAa,EAAO,CAAC,EAAE,OAAS,EACpC,GAAI,EAAgB,CAClB,MAAM,EAAa,KAAK,iBAAiB,KAAK,EAAE,WAAW,QAAQ,CAAC,CAAC,EACrE,GAAI,EAAI,MAAM,IAAK,CACjB,MAAM,EAAa,EAAI,MAAM,IAAM,EACnC,KAAO,EAAc,GAAc,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAW,EAAI,EAAY,IAAe,CAE5G,CACA,GAAI,EAAI,MAAM,IAAK,CACjB,MAAM,EAAa,EAAI,MAAM,IAAM,EACnC,KAAO,EAAa,GAAe,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAU,EAAI,EAAY,IAAc,CAE1G,CACF,CAEA,GADqB,IAAc,GAAU,IAAc,GAAU,EAAI,MAAM,OAAS,WAAa,IAAe,eAAiB,IAAe,WAAa,IAAe,UAAY,IAAe,aAAe,IAAe,YAAc,EAAE,KAAK,EAAE,WAAW,YAAY,CAAC,GAAK,KAAK,EAAE,WAAW,YAAY,CAAC,EAAE,QAC5S,CAChB,MAAM,EAAM,EAAO,CAAC,EACd,EAAO,KAAK,IAAI,EAAY,EAAI,OAAS,CAAC,EAC1C,GAAM,EAAK,KAAK,EAAE,WAAW,iBAAmB,KAAO,OAAS,EAAG,CAAC,EAC1E,GAAI,GAAM,EAAG,MAAQ,GAAO,EAAG,MAAQ,EAAI,QAAU,IAAgB,GAAK,IAAS,EAAI,OAAS,EAC1F,EAAG,KAAO,IAAM,EAAO,EAAG,MAC1B,EAAG,QAAU,IAAS,EAAU,EAAG,SACnC,EAAG,QAAU,GAAK,EAAG,QAAU,IAAM,EAAO,EAAG,SAC/C,EAAG,KAAO,EAAG,gBAAe,EAAG,cAAgB,EAAG,MAClD,EAAG,WAAU,EAAG,cAAgB,QAC/B,CACL,IAAI,EAAO,EAAG,cACV,EAAW,GACf,QAAS,EAAI,EAAa,GAAK,EAAM,IAAK,CACxC,MAAM,EAAM,EAAI,CAAC,EACjB,GAAI,IAAQ,MAAQ,OAAO,GAAQ,UAAY,IAAQ,GAAO,IAAQ,KAAY,IAAQ,MAIxF,GAHI,EAAM,IAAM,EAAO,GACnB,EAAM,IAAS,EAAU,GACzB,EAAO,GAAO,EAAM,IAAG,EAAO,GAC9B,CAAC,OAAO,UAAU,CAAG,EAAG,CAC1B,MAAM,EAAK,EAAM,EAAI,CAAC,EAAM,EAC5B,GAAI,GAAM,MAAQ,EAAK,KAAM,CAC3B,MAAM,EAAM,GAAK,EACX,EAAM,EAAI,QAAQ,GAAG,EACrB,EAAM,IAAQ,GAAK,EAAI,EAAI,OAAS,EAAM,EAC5C,EAAM,IAAM,EAAO,EACzB,KAAO,CACL,MAAM,EAAK,EAAQ,YAAY,CAAG,EAC9B,EAAQ,QAAQ,CAAE,IACpB,EAAO,KAAK,IAAI,EAAM,EAAG,SAAQ,EAAG,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,EAE5D,CACF,OAEA,EAAW,EAEf,CACA,EAAG,cAAgB,EACf,IAAU,EAAG,cAAgB,GACnC,CACA,EAAW,GACP,IAAe,OAAS,IAAe,YACrC,EAAO,GAAK,EAAO,IACrB,EAAO,EACP,EAAW,KAAK,IAAI,EAAU,CAAC,GAE7B,IAAS,OAAO,YAClB,EAAO,EACP,EAAU,KAAK,IAAI,EAAS,CAAC,IAGjC,QACF,CACA,QAAS,EAAI,EAAa,GAAK,GAAc,EAAI,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,OAAQ,IAAK,CACxF,IAAI,EAAM,EAAO,CAAC,EAAE,CAAC,EACrB,GAAI,IAAQ,MAAQ,EAAQ,SAAS,CAAG,EAAG,CASzC,OARI,QAAS,EAAK,EAAU,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAO,MAC5D,EAAO,KAAK,IAAI,EAAM,EAAU,CAAC,EAAE,CAAC,CAAC,EACrC,EAAU,KAAK,IAAI,EAAS,EAAU,CAAC,EAAE,CAAC,CAAC,GAEzC,QAAS,EAAK,EAAU,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAO,MAC5D,EAAU,KAAK,IAAI,EAAS,EAAU,CAAC,EAAE,CAAC,CAAC,EAC3C,EAAW,KAAK,IAAI,EAAU,EAAU,CAAC,EAAE,CAAC,CAAC,GAEvC,EAAU,CAChB,IAAK,cAEG,OAAO,KAAK,EAAE,WAAW,cAAc,CAAC,EAAE,CAAC,EAAM,MACnD,EAAO,KAAK,IAAI,EAAM,KAAK,EAAE,WAAW,cAAc,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAU,KAAK,IACb,EACA,KAAK,EAAE,WAAW,cAAc,CAAC,EAAE,CAAC,CACxD,GAGc,MACF,IAAK,UAEG,OAAO,KAAK,EAAE,WAAW,cAAc,CAAC,EAAE,CAAC,EAAM,MACnD,EAAO,KAAK,IAAI,EAAM,KAAK,EAAE,WAAW,cAAc,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAU,KAAK,IACb,EACA,KAAK,EAAE,WAAW,cAAc,CAAC,EAAE,CAAC,CACxD,GAGc,MACF,IAAK,SAEG,QAAS,EAAK,KAAK,EAAE,WAAW,gBAAgB,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAO,MACpF,EAAO,KAAK,IAAI,EAAM,KAAK,EAAE,WAAW,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAC7D,EAAU,KAAK,IACb,EACA,KAAK,EAAE,WAAW,gBAAgB,CAAC,EAAE,CAAC,CAC1D,GAGc,KACd,CAaU,GAZI,GAAc,IAAe,eAAiB,IAAe,WAAa,IAAe,UAAY,IAAe,aAAe,IAAe,aACpJ,EAAO,KAAK,IAAI,EAAM,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,CAAC,EACpD,EAAU,KAAK,IAAI,EAAS,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,CAAC,GAExD,KAAK,EAAE,WAAW,YAAY,CAAC,GAAK,KAAK,EAAE,WAAW,YAAY,CAAC,EAAE,CAAC,GAAK,MAAM,QAAQ,KAAK,EAAE,WAAW,YAAY,CAAC,EAAE,CAAC,CAAC,GAC9H,KAAK,EAAE,WAAW,YAAY,CAAC,EAAE,CAAC,EAAE,QACjC,GAAM,CACL,EAAO,KAAK,IAAI,EAAM,EAAE,KAAK,EAC7B,EAAU,KAAK,IAAI,EAAS,EAAE,KAAK,CACrC,CACd,EAEc,KAAK,EAAE,OAAO,MAAM,OAAS,WAAa,IAAe,UAAW,CACtE,MAAM,GAAU,GAAM,EAAK,KAAK,EAAE,WAAW,kBAAoB,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,EAC/G,GAAI,EACF,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAK,EAAO,CAAC,EACf,OAAO,GAAO,WAChB,EAAO,KAAK,IAAI,EAAM,CAAE,EACxB,EAAU,KAAK,IAAI,EAAS,CAAE,EAElC,CAEJ,CACA,EAAW,EACX,EAAM,EAAQ,YAAY,CAAG,EACzB,EAAQ,QAAQ,CAAG,IACrB,EAAG,cAAgB,KAAK,IACtB,EAAG,cACH,EAAI,SAAQ,EAAG,MAAM,GAAG,EAAE,CAAC,EAAE,MAC3C,GAEc,IAAS,EAAK,EAAU,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,MAAQ,EAAK,EAAU,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAK,IAC5G,EAAO,EAAU,CAAC,EAAE,CAAC,EAEzB,MACE,EAAG,cAAgB,EAEvB,EACI,IAAe,OAAS,IAAe,YACrC,EAAO,GAAK,EAAO,IACrB,EAAO,EACP,EAAW,KAAK,IAAI,EAAU,CAAC,GAE7B,IAAS,OAAO,YAClB,EAAO,EACP,EAAU,KAAK,IAAI,EAAS,CAAC,GAGnC,CACA,OAAI,EAAI,MAAM,OAAS,YAAc,KAAK,EAAE,UAAU,iBAAiB,QAAU,EAAG,kBAClF,EAAO,GAEL,EAAI,MAAM,OAAS,QACjB,EAAO,GAAK,EAAO,IACrB,EAAO,GAEL,IAAS,OAAO,YAClB,EAAO,IAGJ,CACL,KAAA,EACA,KAAA,EACA,QAAA,EACA,SAAA,CACN,CACE,CACA,WAAY,CACV,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OACnB,EAAG,KAAO,CAAC,OAAO,UAClB,EAAG,KAAO,OAAO,UACjB,IAAI,EAAqB,OAAO,UAC5B,EACJ,GAAI,EAAG,gBAAiB,CACtB,EAAqB,OAAO,UAC5B,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,OAAQ,IACnD,EAAW,KAAK,YAAY,CAAC,EAC7B,EAAG,QAAQ,CAAC,EAAI,EAAS,QACzB,EAAG,QAAQ,CAAC,EAAI,EAAS,SACzB,EAAqB,KAAK,IAAI,EAAoB,EAAS,OAAO,CAEtE,CACA,OAAA,EAAW,KAAK,YACd,EACA,EACA,OACA,KAAK,EAAE,WAAW,OAAO,MAC/B,EACQ,EAAI,MAAM,OAAS,OACrB,EAAG,KAAO,EAAS,KACnB,EAAG,KAAO,EAAS,OAEnB,EAAG,KAAO,EAAS,QACnB,EAAG,KAAO,EAAS,UAErB,EAAqB,EAAS,QAC1B,EAAI,MAAM,SACZ,KAAK,kBAAiB,EAEpB,EAAI,MAAM,OAAS,QAAU,EAAI,MAAM,OAAS,QAAU,EAAI,MAAM,OAAS,WAAa,EAAI,MAAM,OAAS,eAAiB,EAAI,MAAM,OAAS,WAAa,EAAI,MAAM,OAAS,UAAY,EAAI,MAAM,OAAS,YAAc,CAAC,EAAG,gBAChO,EAAG,OAAS,OAAO,WAAa,IAAuB,CAAC,OAAO,WAAa,IAAuB,EAAG,OACxG,EAAG,KAAO,GAGZ,EAAG,KAAO,EAAG,OAAS,OAAO,UAAY,KAAK,IAAI,EAAS,KAAM,EAAG,IAAI,EAAI,EAAS,KAEvF,EAAI,MAAM,QAAQ,CAAC,EAAM,IAAU,CAC7B,EAAK,MAAQ,SACX,OAAO,EAAK,KAAQ,SACtB,EAAG,QAAQ,CAAK,EAAI,EAAK,IAChB,OAAO,EAAK,KAAQ,aAC7B,EAAG,QAAQ,CAAK,EAAI,EAAK,IACvB,EAAG,gBAAkB,EAAG,QAAQ,CAAK,EAAI,EAAG,IACxD,GAEQ,EAAG,KAAO,EAAG,QAAQ,CAAK,GAExB,EAAK,MAAQ,SACX,OAAO,EAAK,KAAQ,SACtB,EAAG,QAAQ,CAAK,EAAI,EAAK,IAChB,OAAO,EAAK,KAAQ,aAC7B,EAAG,QAAQ,CAAK,EAAI,EAAK,IACvB,EAAG,gBAAkB,EAAG,QAAQ,CAAK,IAAM,OAAO,UAAY,EAAI,EAAG,QAAQ,CAAK,EAAI,EAAG,IACrG,GAEQ,EAAG,KAAO,EAAG,QAAQ,CAAK,EAE9B,CAAC,EACG,EAAG,iBACU,CAAC,MAAO,KAAK,EACrB,QAAS,GAAM,CAChB,EAAI,MAAM,CAAC,IAAM,QAAU,OAAO,EAAI,MAAM,CAAC,GAAM,WACrD,IAAM,MAAQ,EAAG,KAAO,EAAI,MAAM,CAAC,EAAI,EAAG,KAAO,EAAI,MAAM,CAAC,EAEhE,CAAC,EAEC,EAAG,iBACL,KAAK,OAAO,mBAAkB,EAC9B,EAAG,KAAO,IAEV,KAAK,OAAO,kBAAkB,EAAG,EAAG,KAAM,EAAG,IAAI,EACjD,EAAG,KAAO,EAAG,WAAW,CAAC,EAAE,QAC3B,EAAG,KAAO,EAAG,WAAW,CAAC,EAAE,QAC3B,EAAG,QAAQ,CAAC,EAAI,EAAG,KACnB,EAAG,QAAQ,CAAC,EAAI,EAAG,MAErB,EAAG,UAAY,CAAA,EACf,EAAG,WAAa,CAAA,EAChB,EAAG,WAAa,CAAA,EAChB,EAAI,OAAO,QAAS,GAAM,CACxB,MAAM,EAEJ,EAGF,OADa,EAAG,MAAQ,EAAI,MAAM,KACtB,CACV,IAAK,MACL,IAAK,SACH,EAAG,UAAU,KAAK,EAAG,KAAK,EAC1B,MACF,IAAK,OACH,EAAG,WAAW,KAAK,EAAG,KAAK,EAC3B,MACF,IAAK,OACH,EAAG,WAAW,KAAK,EAAG,KAAK,EAC3B,KACV,CACI,CAAC,EACD,EAAG,UAAY,EAAG,UAAU,OAAO,CAAC,EAAG,EAAG,IAAM,EAAE,QAAQ,CAAC,IAAM,CAAC,EAClE,EAAG,WAAa,EAAG,WAAW,OAAO,CAAC,EAAG,EAAG,IAAM,EAAE,QAAQ,CAAC,IAAM,CAAC,EACpE,EAAG,WAAa,EAAG,WAAW,OAAO,CAAC,EAAG,EAAG,IAAM,EAAE,QAAQ,CAAC,IAAM,CAAC,EAC7D,CACL,KAAM,EAAG,KACT,KAAM,EAAG,KACT,QAAS,EAAG,QACZ,QAAS,EAAG,QACZ,WAAY,EAAG,UACrB,CACE,CACA,WAAY,CACV,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OACb,EAAa,EAAI,MAAM,OAAS,WAAa,EAAI,MAAM,OAAS,YAAc,EAAI,MAAM,OAAS,YAAc,CAAC,KAAK,EAAE,UAAU,kBAAoB,KAAK,EAAE,UAAU,kBAAoB,KAAK,EAAE,UAAU,WAC3M,EAAqB,IAAM,CAC/B,IAAI,EACJ,IAAI,EAAO,EAAG,KACV,EAAO,EAAG,KACd,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,OAAQ,IAAK,CACxD,MAAM,EAEJ,KAAK,EAAE,UAAU,OAAO,CAAC,EAE3B,GAAI,CAAC,EAAM,SACX,MAAM,GAAM,EAAK,KAAK,EAAE,WAAW,iBAAmB,KAAO,OAAS,EAAG,CAAC,EAC1E,GAAI,GAAM,EAAG,UAAY,EAAG,OAAS,GAAQ,EAAG,MAAQ,EAAK,OAAQ,CAC/D,EAAG,KAAO,IAAM,EAAO,EAAG,MAC1B,EAAG,KAAO,IAAM,EAAO,EAAG,MAC9B,QACF,CACA,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAI,EAAK,CAAC,EACZ,IAAM,MAAQ,OAAO,GAAM,UAAY,IAAM,IAC3C,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GAEzB,CACF,CACA,EAAG,KAAO,EACV,EAAG,YAAc,EACjB,EAAG,KAAO,EACV,EAAG,YAAc,CACnB,EAcA,GAbI,KAAK,EAAE,UAAU,YACnB,EAAkB,EAEhB,KAAK,EAAE,UAAU,kBACf,EAAI,MAAM,WAAW,SAAW,IAClC,EAAG,KACH,KAAK,EAAE,UAAU,OAAO,KAAK,EAAE,UAAU,OAAO,OAAS,CAAC,EAC1D,EAAG,YACH,KAAK,EAAE,UAAU,OAAO,KAAK,EAAE,UAAU,OAAO,OAAS,CAAC,EAC1D,EAAG,KAAO,EACV,EAAG,YAAc,GAGjB,KAAK,EAAE,UAAU,YAAc,KAAK,EAAE,UAAU,kBAAoB,KAAK,EAAE,UAAU,mBAAoB,CAC3G,IAAI,EAAQ,GACZ,GAAI,EAAI,MAAM,aAAe,OAC3B,EAAQ,KAAK,MAAM,EAAG,SAAW,GAAG,EAChC,EAAI,MAAM,OAAS,WAAa,EAAG,WAAa,KAClD,EAAQ,EAAG,WAAa,GAEtB,EAAQ,EAAG,YAAc,EAAG,aAAe,IAC7C,EAAQ,EAAG,WAAa,WAEjB,EAAI,MAAM,aAAe,cAIlC,GAHI,KAAK,EAAE,WAAW,OAAO,OAAS,IACpC,EAAQ,KAAK,EAAE,WAAW,OAAO,EAAG,mBAAmB,EAAE,OAAS,GAEhE,KAAK,EAAE,UAAU,WAAY,CAC/B,MAAM,EAAO,KAAK,MAAM,EAAG,KAAO,EAAG,IAAI,EACrC,EAAO,KACT,EAAQ,EAEZ,OAEA,EAAQ,EAAI,MAAM,WAYpB,GAVA,EAAG,YAAc,EACb,EAAI,MAAM,MAAQ,QAAU,OAAO,EAAI,MAAM,KAAQ,WACvD,EAAG,KAAO,EAAI,MAAM,KAElB,EAAI,MAAM,MAAQ,QAAU,OAAO,EAAI,MAAM,KAAQ,WACvD,EAAG,KAAO,EAAI,MAAM,KAElB,EAAI,MAAM,QAAU,SACtB,EAAG,KAAO,EAAG,KAAO,EAAI,MAAM,OAE5B,EAAG,OAAS,OAAO,WAAa,EAAG,OAAS,CAAC,OAAO,UACtD,GAAI,EAAI,MAAM,uBAAyB,CAAC,KAAK,EAAE,UAAU,mBAAoB,CAC3E,MAAM,EAAW,CAAA,EACjB,QAAS,EAAI,EAAG,KAAO,EAAG,EAAI,EAAG,KAAM,IACrC,EAAS,KAAK,EAAI,CAAC,EAErB,EAAG,WAAa,CACd,OAAQ,EACR,QAAS,EAAS,CAAC,EACnB,QAAS,EAAS,EAAS,OAAS,CAAC,CACjD,CACQ,MACE,EAAG,WAAa,KAAK,OAAO,UAAU,EAAG,KAAM,EAAG,IAAI,OAGxD,EAAG,WAAa,KAAK,OAAO,YAC1B,EACA,EACA,EACA,EACA,EAAI,MAAM,QACpB,EACY,KAAK,EAAE,UAAU,kBAAoB,KAAK,EAAE,UAAU,OAAO,OAAS,IACxE,EAAG,WAAa,KAAK,OAAO,YAC1B,EACA,KAAK,EAAE,UAAU,OAAO,OACxB,EAAQ,EACR,EACA,EAAI,MAAM,QACtB,EACU,KAAK,EAAE,WAAW,QAClB,KAAK,EAAE,UAAU,OAAO,MAAK,GAG7B,IACF,KAAK,EAAE,UAAU,OACjB,EAAG,WAAW,OAAO,MAAK,EAE9B,CACA,OAAI,EAAG,iBAAmB,KAAK,EAAE,UAAU,OAAO,SAChD,EAAG,YAAc,KAAK,EAAE,UAAU,OAAO,QAE3C,KAAK,uBAAsB,EAC3B,KAAK,aAAY,EACV,CACL,KAAM,EAAG,KACT,KAAM,EAAG,IACf,CACE,CACA,WAAY,CACV,MAAM,EAAK,KAAK,EAAE,QAClB,GAAK,KAAK,EAAE,UAAU,WACtB,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,OAAQ,IACnD,GAAI,OAAO,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAM,IAC1C,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,OAAQ,IACnD,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,IAAM,MAAQ,EAAQ,SAAS,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,CAAC,IAC9F,EAAG,KAAO,KAAK,IAAI,EAAG,KAAM,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAG,KAAO,KAAK,IAAI,EAAG,KAAM,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,CAAC,GAKrE,CACA,wBAAyB,CACvB,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OACnB,GAAI,EAAG,OAAS,EAAG,KAAM,CACvB,MAAM,EAAc,IAAI,GAAS,KAAK,CAAC,EACvC,GAAI,EAAI,MAAM,OAAS,WAAY,CACjC,MAAM,EAAU,EAAY,QAAQ,EAAG,IAAI,EACvC,EAAI,MAAM,OAAO,YACnB,EAAQ,WAAW,EAAQ,WAAU,EAAK,CAAC,EAE3C,EAAQ,QAAQ,EAAQ,QAAO,EAAK,CAAC,EAEvC,EAAG,KAAO,IAAI,KAAK,CAAO,EAAE,QAAO,EACnC,MAAM,EAAU,EAAY,QAAQ,EAAG,IAAI,EACvC,EAAI,MAAM,OAAO,YACnB,EAAQ,WAAW,EAAQ,WAAU,EAAK,CAAC,EAE3C,EAAQ,QAAQ,EAAQ,QAAO,EAAK,CAAC,EAEvC,EAAG,KAAO,IAAI,KAAK,CAAO,EAAE,QAAO,CACrC,MAAW,EAAI,MAAM,OAAS,WAAa,EAAI,MAAM,OAAS,YAAc,CAAC,KAAK,EAAE,UAAU,oBAC5F,EAAG,KAAO,EAAG,KAAO,EACpB,EAAG,YAAc,EAAG,KACpB,EAAG,KAAO,EAAG,KAAO,EACpB,EAAG,YAAc,EAAG,KAExB,CACF,CACA,cAAe,CACb,MAAM,EAAK,KAAK,EAAE,QACd,KAAK,EAAE,UAAU,YACnB,KAAK,EAAE,WAAW,QAAQ,QAAQ,CAAC,EAAI,IAAO,CAC5C,IAAI,EACJ,GAAI,EAAG,OAAQ,CACT,EAAG,SAAW,GAChB,EAAG,KACD,KAAK,EAAE,WAAW,QAAQ,EAAG,mBAAmB,EAAE,KAAK,EAAE,WAAW,QAAQ,EAAG,mBAAmB,EAAE,OAAS,CAAC,CAC5H,EAEU,MAAM,GAAM,EAAK,KAAK,EAAE,WAAW,iBAAmB,KAAO,OAAS,EAAG,CAAE,EAC3E,GAAI,GAAM,EAAG,UAAY,EAAG,SAAW,EAAG,OAAS,GAAM,EAAG,MAAQ,EAAG,OAAQ,CACzE,EAAG,SAAW,EAAG,WAAU,EAAG,SAAW,EAAG,WAC5C,EAAG,aAAe,GAAK,EAAG,WAAa,OAAO,aAChD,EAAG,SAAW,IAEhB,MACF,CACA,IAAI,EAAY,GACZ,EAAU,EAAG,SACjB,QAAS,EAAI,EAAG,EAAI,EAAG,OAAQ,IAAK,CAClC,MAAM,EAAI,EAAG,CAAC,EAAI,EAAG,EAAI,CAAC,EAC1B,GAAI,EAAI,EACF,EAAI,IAAS,EAAU,WAClB,EAAI,EAAG,CAChB,EAAY,GACZ,KACF,CACF,CACA,GAAI,EAAW,CACb,EAAG,SAAW,GACV,EAAG,aAAe,GAAK,EAAG,WAAa,OAAO,aAChD,EAAG,SAAW,IAEhB,MACF,CACA,MAAM,EAAU,EAAG,MAAK,EACxB,EAAQ,KAAK,CAAC,EAAG,IAAM,EAAI,CAAC,EAC5B,EAAQ,QAAQ,CAAC,EAAG,IAAM,CACxB,GAAI,EAAI,EAAG,CACT,MAAM,EAAQ,EAAI,EAAQ,EAAI,CAAC,EAC3B,EAAQ,IACV,EAAG,SAAW,KAAK,IAAI,EAAO,EAAG,QAAQ,EAE7C,CACF,CAAC,GACG,EAAG,aAAe,GAAK,EAAG,WAAa,OAAO,aAChD,EAAG,SAAW,GAElB,CACF,CAAC,CAEL,CACA,mBAAoB,CAClB,MAAM,EAAK,KAAK,EAAE,QAClB,GAAI,CAAC,KAAK,EAAE,WAAW,OAAO,OAAQ,OACtC,IAAI,EAAe,KAAK,EAAE,UAAU,aAC/B,EAAa,SAChB,EAAe,CAAC,KAAK,EAAE,WAAW,YAAY,IAAK,GAAU,CAAK,CAAC,GAErE,MAAM,EAAc,CAAA,EACd,EAAc,CAAA,EACpB,EAAa,QAAS,GAAU,CAC9B,EAAY,CAAK,EAAI,CAAA,EACrB,EAAY,CAAK,EAAI,CAAA,EACU,KAAK,EAAE,OAAO,OAAO,IAClD,CAAC,EAAO,IAAO,EAAM,QAAQ,KAAK,EAAE,WAAW,YAAY,CAAE,CAAC,EAAI,GAAK,EAAK,IACpF,EAAQ,OAAQ,GAAM,IAAM,IAAI,EACH,QAAS,GAAM,CACpC,IAAI,EAAI,EAAI,EAAI,EAChB,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,EAAG,mBAAmB,EAAE,OAAQ,IACvE,OAAO,EAAY,CAAK,EAAE,CAAC,EAAM,MACnC,EAAY,CAAK,EAAE,CAAC,EAAI,EACxB,EAAY,CAAK,EAAE,CAAC,EAAI,IAEN,KAAK,EAAE,OAAO,MAAM,SAAW,CAAC,EAAG,aAAe,KAAK,EAAE,OAAO,MAAM,SAAW,EAAG,cAAgB,CAAC,KAAK,EAAE,OAAO,MAAM,gBAC3I,GAAM,EAAK,KAAK,EAAE,OAAO,SAAW,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,QAAU,SAC3F,GAAM,EAAK,KAAK,EAAE,OAAO,SAAW,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,QAAU,YAEvF,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,IAAM,MAAQ,EAAQ,SAAS,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,CAAC,IAC5F,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAAI,EAAI,EAAY,CAAK,EAAE,CAAC,GAAK,WAAW,OAAO,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAI,KAAO,EAAY,CAAK,EAAE,CAAC,GAAK,WACjJ,OAAO,KAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,CAAC,CACrD,EAIM,CAAC,CACH,CAAC,EACD,OAAO,QAAQ,CAAW,EAAE,QAAQ,CAAC,CAAC,CAAG,IAAM,CAC7C,EAAY,CAAG,EAAE,QACf,CAAC,EAAG,IAAS,CACX,EAAG,KAAO,KAAK,IAAI,EAAG,KAAM,EAAY,CAAG,EAAE,CAAI,CAAC,EAClD,EAAG,KAAO,KAAK,IAAI,EAAG,KAAM,EAAY,CAAG,EAAE,CAAI,CAAC,CACpD,CACR,CACI,CAAC,CACH,CACF,CACA,SAAS,IAAmB,CAC1B,MAAO,CAGL,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,SAAU,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAChE,UAAW,CAAC,UAAW,UAAW,UAAW,UAAW,SAAS,EAEjE,gBAAiB,CACf,UACA,UACA,UACA,UACA,UACA,UACA,SACN,EACI,cAAe,CACb,UACA,UACA,UACA,UACA,UACA,UACA,SACN,EACI,cAAe,CACb,UACA,UACA,UACA,UACA,UACA,UACA,SACN,EACI,aAAc,CACZ,UACA,UACA,UACA,UACA,UACA,UACA,SACN,CACA,CACA,CACA,MAAM,EAAM,CAKV,YAAY,EAAG,CAAE,MAAA,EAAQ,KAAM,UAAA,EAAY,IAAI,EAAK,CAAA,EAAI,EAAQ,CAC9D,KAAK,EAAI,EACT,KAAK,OAAS,EACd,KAAK,cAAgB,EAAE,OAAO,MAAM,OAAO,MAAM,SACjD,KAAK,eAAiB,EAAE,OAAO,MAAM,OAAO,MAAM,WAClD,KAAK,gBAAkB,EAAE,OAAO,MAAM,OAAO,MAAM,OACnD,KAAK,wBAA0B,EAAE,OAAO,MAAM,OAAS,OAAS,EAAE,OAAO,YAAY,IAAI,WACzF,KAAK,UAAY,EAAE,OAAO,MAAM,WAAa,SAAW,EAAE,OAAO,WAAa,EAC9E,KAAK,YAAc,CAAA,EACnB,KAAK,UAAY,IAAI,GAAU,EAAG,CAAE,MAAA,EAAO,UAAA,CAAS,CAAE,CACxD,CAIA,UAAU,EAAW,CACnB,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAa,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,MAC9C,CACJ,SAAU,EACV,WAAY,EACZ,WAAY,CAClB,EAAQ,EACE,EAAU,EAAS,MAAM,CAC7B,MAAO,mBACP,IAAK,EACL,UAAW,aAAa,EAAE,QAAQ,gBAAgB,CAAS,CAAC,MAClE,CAAK,EACD,GAAI,KAAK,UAAU,cAAc,CAAS,EAAG,OAAO,EACpD,MAAM,EAAe,EAAS,MAAM,CAAE,MAAO,0BAA0B,CAAE,EACzE,EAAQ,IAAI,CAAY,EACxB,MAAM,EAAa,EAAE,QAAQ,WAAW,CAAS,EAAE,OAAO,OAAS,EAC7D,EAAgB,EAAE,OAAO,WAAa,EACtC,EAAc,EAAE,WAAW,iBAAiB,CAAS,EACrD,EAAS,KAAK,UAAU,uBAC5B,EACA,EAAE,QAAQ,WAAW,CAAS,EAAE,OAAO,MAAK,CAClD,EACI,IAAI,EAAY,EAChB,GAAI,EAAE,OAAO,MAAM,OAAS,WAAa,CAAC,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,UAAW,CACpF,MAAM,EAAK,SAAS,EAAe,EAAE,GAAK,GACpC,EAAY,KAAK,IAAI,EAAG,KAAK,MAAM,EAAE,OAAO,YAAc,EAAK,IAAI,CAAC,EACpE,EAAQ,EAAa,EACvB,EAAQ,IAAW,EAAY,KAAK,KAAK,EAAQ,CAAS,EAChE,CACA,GAAI,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,KAAM,CACzC,IAAI,EAAK,EAAE,OAAO,WAAa,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,QAC5D,EAAE,QAAQ,gBAAiB,EAAK,EAC3B,EAAE,OAAO,MAAM,OAAS,YAAW,GAAM,EAAgB,GAClE,GAAM,SAAS,EAAe,EAAE,EAAI,EACpC,IAAI,EAAa,KACjB,QAAS,EAAI,EAAY,GAAK,EAAG,IAAK,CAEpC,MAAM,EADU,EAAY,GAAK,EAAI,IAAc,EAC7B,GAAK,EAAY,EAAO,CAAC,EAAG,EAAG,CAAC,EACtD,IAAI,EAAO,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,QACxC,EAAE,OAAO,MAAM,CAAS,EAAE,UAAY,EAAE,OAAO,MAAM,SAAW,IAClE,GAAQ,IACV,MAAM,EAAa,KAAK,cACtB,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,MACjC,EAAE,OAAO,MAAM,CAAS,EAAE,QACpC,EACc,EAAU,KAAK,UAAU,kBAC7B,EAAW,OACX,CACV,EACc,EAAY,MAAM,QAAQ,CAAO,EAAI,EAAQ,CAAC,EAAI,EAClD,EAAkB,MAAM,KAC5B,EAAE,IAAI,OAAO,iBACX,0BAA0B,CAAS,kCAC/C,CACA,EAAU,IAAK,GAAW,EAAO,WAAW,EAC9B,EAAQ,EAAS,SAAS,CAC9B,EAAG,EACH,EAAG,EACH,KAAM,EAAgB,SAAS,CAAG,GAAK,CAAC,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,eAAiB,GAAK,EAC/F,WAAA,EACA,SAAU,EACV,WAAY,EACZ,WAAY,EACZ,SAAU,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,SAC3C,UAAA,EACA,YAAa,GACb,SAAU,0BAA0B,EAAW,QAAQ,EACjE,CAAS,EACD,EAAa,IAAI,CAAK,EACtB,KAAK,WAAW,EAAO,CAAG,EACtB,IAAe,OACjB,EAAa,GAEX,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,SAAW,GAC9C,KAAK,YACH,EACA,EACA,EACA,EAAE,OAAO,MAAM,CAAS,EAAE,OAAO,MAC7C,EAEQ,GAAM,CACR,CACF,CACA,YAAK,cAAc,EAAU,EAAS,CAAS,EAC/C,KAAK,cAAc,EAAU,EAAS,EAAW,EAAY,CAAa,EACnE,CACT,CAKA,cAAc,EAAO,EAAU,CAC7B,OAAI,IAAU,OAAe,QACzB,IAAU,SAAiB,SAC3B,IAAU,QAAgB,MACvB,EAAW,QAAU,KAC9B,CAKA,WAAW,EAAO,EAAK,CACrB,MAAM,EAAiB,EAAY,gBAAgB,GAAS,OAAO,EACnE,EAAe,YAAc,MAAM,QAAQ,CAAG,EAAI,EAAI,KAAK,GAAG,EAAI,EAClE,EAAM,KAAK,YAAY,CAAc,CACvC,CAOA,YAAY,EAAU,EAAO,EAAY,EAAQ,CAC/C,MAAM,EAAmB,EAAS,mBAAmB,EAAW,IAAI,EAC9D,EAAc,EAAS,mBAAmB,EAAM,IAAI,EAC1D,EAAM,KAAK,aACT,YACA,UAAU,CAAM,IAAI,EAAiB,CAAC,IAAI,EAAY,CAAC,GAC7D,CACE,CAMA,cAAc,EAAU,EAAS,EAAW,CAC1C,MAAM,EAAI,KAAK,EACf,GAAI,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,OAAS,OAAQ,CACnD,MAAM,EAAe,EAAS,MAAM,CAAE,MAAO,wBAAwB,CAAE,EACjE,EAAI,EAAE,OAAO,MAAM,CAAS,EAAE,SAAW,EAAE,QAAQ,gBAAgB,CAAS,EAAI,EAChF,EAAmB,EAAS,SAAS,CACzC,EAAA,EACA,EAAG,EAAE,OAAO,WAAa,EAAI,EAAE,OAAO,WAAa,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,QACnF,KAAM,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,KACtC,WAAY,MACZ,UAAW,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,MAAM,MACjD,SAAU,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,MAAM,SAChD,WAAY,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,MAAM,WAClD,WAAY,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,MAAM,WAClD,SAAU,+BAA+B,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,MAAM,QAAQ,EAC/F,CAAO,EACD,EAAa,IAAI,CAAgB,EACjC,EAAQ,IAAI,CAAY,CAC1B,CACF,CAQA,cAAc,EAAU,EAAS,EAAW,EAAY,EAAe,CACrE,MAAM,EAAI,KAAK,EACT,EAAa,EAAE,OAAO,MAAM,CAAS,EAAE,WAC7C,IAAI,EAAI,GAAK,EAAW,QAExB,GADI,EAAE,OAAO,MAAM,CAAS,EAAE,WAAU,EAAI,IAAM,EAAW,SACzD,EAAW,KAAM,CACnB,MAAM,EAAiB,EAAS,SAC9B,EACA,EAAE,OAAO,WAAa,EAAW,QAAU,EAC3C,EACA,EAAE,OAAO,WAAa,EAAE,OAAO,WAAa,EAAW,QAAU,EACjE,EAAW,MACX,EACA,EAAW,KACnB,EACM,EAAQ,IAAI,CAAc,CAC5B,CACI,EAAE,OAAO,MAAM,CAAS,EAAE,UAAU,MACtC,KAAK,UAAU,eACb,EACA,EACA,EACA,EAAE,OAAO,MAAM,CAAS,EAAE,UAC1B,EACA,EACA,CACR,CAEE,CAIA,kBAAkB,EAAW,CAC3B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAU,EAAS,MAAM,CAC7B,MAAO,4CACb,CAAK,EACK,EAAe,EAAS,MAAM,CAClC,MAAO,2BACP,UAAW,aAAa,EAAE,OAAO,eAAe,KAAK,EAAE,OAAO,eAAe,GACnF,CAAK,EACD,EAAQ,IAAI,CAAY,EACxB,IAAI,EAAa,EAAE,QAAQ,WAAW,CAAS,EAAE,OAAO,OAAS,EACjE,MAAM,EAAgB,EAAE,OAAO,UAAY,EAAa,GACxD,IAAI,EAAI,EAAgB,EAAE,OAAO,MAAM,OAAO,QAC9C,MAAM,EAAc,EAAE,WAAW,gBACjC,IAAI,EAAS,KAAK,UAAU,uBAC1B,EACA,EAAE,QAAQ,WAAW,CAAS,EAAE,OAAO,MAAK,CAClD,EACI,MAAM,EAAkB,EAAE,UAAU,gBAMpC,GALI,EAAgB,OAAS,IAC3B,KAAK,YAAc,EAAgB,MAAK,EACxC,EAAS,EAAgB,MAAK,EAC9B,EAAa,EAAO,QAElB,EAAE,OAAO,MAAM,OAAO,KACxB,QAAS,EAAI,EAAgB,OAAS,EAAI,EAAY,EAAgB,OAAS,EAAI,EAAgB,OAAS,GAAK,EAAG,EAAgB,OAAS,IAAM,IAAK,CACtJ,IAAI,EAAqC,IAAY,EAAO,CAAC,EAAG,EAAG,CAAC,EAChE,EAAI,EAAE,OAAO,UAAY,EAAE,QAAQ,eAAiB,EAAI,EAAgB,EAAE,OAAO,MAAM,OAAO,SAClG,GAAI,EAAgB,OAAQ,CAC1B,MAAM,EAAQ,KAAK,UAAU,SAC3B,EACA,EACA,EACA,EACA,KAAK,YACL,KAAK,aACjB,EACU,EAAI,EAAM,EACV,EAAM,EAAM,KACZ,KAAK,YAAY,KAAK,EAAM,IAAI,EAC5B,IAAM,GAAK,EAAE,QAAQ,yBAAwB,EAAM,IACnD,IAAM,EAAO,OAAS,GAAK,EAAE,QAAQ,wBACvC,EAAM,GACV,CACA,MAAM,EAAS,EAAS,SAAS,CAC/B,EAAA,EACA,EAAG,KAAK,UAAY,EAAE,OAAO,MAAM,OAAO,QAAU,IAAM,EAAE,OAAO,MAAM,WAAa,MAAQ,EAAE,OAAO,YAAc,EAAE,OAAO,MAAM,UAAU,OAAS,EAAI,GAC3J,KAAM,EACN,WAAY,SACZ,UAAW,MAAM,QAAQ,KAAK,eAAe,EAAI,KAAK,gBAAgB,CAAS,EAAI,KAAK,gBACxF,SAAU,KAAK,cACf,WAAY,KAAK,eACjB,WAAY,EAAE,OAAO,MAAM,OAAO,MAAM,WACxC,YAAa,GACb,SAAU,0BAA0B,EAAE,OAAO,MAAM,OAAO,MAAM,QAAQ,EAClF,CAAS,EACD,EAAa,IAAI,CAAM,EACvB,KAAK,WAAW,EAAQ,CAAG,EAC3B,GAAK,CACP,CAEF,YAAK,uBAAuB,CAAO,EACnC,KAAK,oBAAoB,CAAO,EACzB,CACT,CAIA,oBAAoB,EAAQ,CAC1B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAa,EAAE,OAAO,MAAM,WAClC,GAAI,EAAW,KAAM,CACnB,IAAI,EAAiB,EACjB,EAAE,OAAO,MAAM,OAAS,OAAS,EAAE,UAAU,aAC/C,GAAkB,IACpB,MAAM,EAAa,EAAS,SAC1B,EAAE,QAAQ,cAAgB,EAAiB,EAAW,QACtD,KAAK,UACL,EAAE,OAAO,UACT,KAAK,UACL,EAAW,MACX,EACA,EAAW,MACnB,EACU,KAAK,QAAU,KAAK,OAAO,eAAiB,EAAE,OAAO,KAAK,KAC5D,KAAK,OAAO,cAAc,IAAI,CAAU,EAExC,EAAO,IAAI,CAAU,CAEzB,CACF,CAIA,uBAAuB,EAAQ,CAC7B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,GAAI,EAAE,OAAO,MAAM,MAAM,OAAS,OAAQ,CACxC,MAAM,EAAe,EAAS,MAAM,CAClC,MAAO,wDACf,CAAO,EACK,EAAmB,EAAS,SAAS,CACzC,EAAG,EAAE,OAAO,UAAY,EAAI,EAAE,OAAO,MAAM,MAAM,QACjD,EAAG,KAAK,UAAY,WAAW,KAAK,aAAa,EAAI,WAAW,EAAE,OAAO,MAAM,MAAM,MAAM,QAAQ,EAAI,EAAE,OAAO,MAAM,MAAM,QAAU,GACtI,KAAM,EAAE,OAAO,MAAM,MAAM,KAC3B,WAAY,SACZ,SAAU,EAAE,OAAO,MAAM,MAAM,MAAM,SACrC,WAAY,EAAE,OAAO,MAAM,MAAM,MAAM,WACvC,WAAY,EAAE,OAAO,MAAM,MAAM,MAAM,WACvC,UAAW,EAAE,OAAO,MAAM,MAAM,MAAM,MACtC,SAAU,+BAA+B,EAAE,OAAO,MAAM,MAAM,MAAM,QAAQ,EACpF,CAAO,EACD,EAAa,IAAI,CAAgB,EACjC,EAAO,IAAI,CAAY,CACzB,CACF,CAKA,iBAAiB,EAAW,EAAe,CACzC,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAoB,EAAE,IAAI,OAAO,cACrC,0BAA0B,CAAS,8BACzC,EACU,EAAmB,EAAoB,EAAkB,sBAAqB,EAAK,CAAE,MAAO,EAAG,OAAQ,CAAC,EACxG,EAAa,EAAE,IAAI,OAAO,cAC9B,0BAA0B,CAAS,iCACzC,EACU,EAAkB,EAAa,EAAW,sBAAqB,EAAK,CAAE,MAAO,EAAG,OAAQ,CAAC,EAC/F,GAAI,EAAY,CACd,MAAM,EAAI,KAAK,sBACb,EACA,EACA,EACA,CACR,EACM,EAAW,aAAa,IAAK,OAAO,EAAE,MAAQ,EAAgB,GAAK,EAAE,CAAC,EACtE,MAAM,EAAsB,EAAS,mBAAmB,CAAU,EAClE,EAAW,aACT,YACA,UAAU,EAAgB,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,OAAS,GAAK,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,MAAM,IAAI,EAAoB,CAAC,IAAI,EAAoB,CAAC,GACxK,CACI,CACF,CAOA,sBAAsB,EAAW,EAAkB,EAAiB,EAAe,CACjF,MAAM,EAAI,KAAK,EACf,IAAI,EAAI,EACJ,EAAO,GACX,OAAI,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,OAAS,QAAU,EAAY,EAC1D,CAAE,KAAM,EAAG,KAAM,CAAC,GAEvB,EACF,EAAI,EAAiB,MAAQ,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,QAAU,EAAgB,MAAQ,EAAI,EAAO,GAE1G,EAAI,EAAiB,MAAQ,GAAK,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,QAAU,EAAO,EAAI,EAAgB,MAAQ,EAC3G,EAAE,QAAQ,kBACZ,EAAO,GACP,EAAI,EAAiB,MAAQ,GAAK,EAAE,OAAO,MAAM,CAAS,EAAE,MAAM,QAAU,IAGzE,CAAE,KAAM,EAAG,KAAA,CAAI,EACxB,CAKA,kBAAkB,EAAkB,EAAc,CAChD,MAAM,EAAI,KAAK,EACf,IAAI,EAAQ,EACR,EAAS,EACT,EAAc,GACd,EAAe,EACf,EAAE,OAAO,MAAM,OAAS,IAAG,KAAK,WAAa,IACjD,EAAE,OAAO,MAAM,QAAQ,CAAC,EAAM,IAAU,CACtC,MAAM,EAAoB,EAAE,QAAQ,mBAAmB,SAAS,CAAK,GAAK,CAAC,EAAK,MAAQ,EAAK,UAAY,EAAiB,CAAK,EAAE,QAAU,EACrI,EAAY,EAAiB,CAAK,EAAE,MAAQ,EAAa,CAAK,EAAE,MACjE,EAAK,SAKJ,EAAE,QAAQ,iBACZ,EAAS,EAAE,OAAO,UAAY,EAAE,OAAO,WAAa,EACpD,EAAE,QAAQ,gBAAgB,CAAK,EAAI,EAAS,EAAK,OAAO,UAExD,EAAS,EAAE,OAAO,UAAY,EAAE,OAAO,WAAa,EAC/C,IAAmB,GAAgB,EAAY,IACpD,EAAE,QAAQ,gBAAgB,CAAK,EAAI,EAAS,EAAK,OAAO,QAAU,KAVpE,EAAQ,EAAE,OAAO,WAAa,EACzB,IAAmB,GAAe,EAAY,IACnD,EAAE,QAAQ,gBAAgB,CAAK,EAAI,EAAQ,EAAK,OAAO,QAW3D,CAAC,CACH,CACA,wBAAyB,CACvB,MAAM,EAAI,KAAK,EACD,MAAM,KAClB,EAAE,IAAI,OAAO,uBAAuB,kBAAkB,CAC5D,EACU,QAAQ,CAAC,EAAG,IAAU,CAC1B,MAAM,EAAO,EAAE,OAAO,MAAM,CAAK,EACjC,GAAI,GAAQ,CAAC,EAAK,UAAY,EAAK,OAAO,QAAU,OAAQ,CAC1D,MAAM,EAAa,EAAE,IAAI,OAAO,cAC9B,0BAA0B,CAAK,8BACzC,EACc,EAAa,MAAM,KACvB,EAAE,IAAI,OAAO,iBACX,0BAA0B,CAAK,4BAC3C,CACA,EACc,EAEJ,EAAW,sBAAqB,EAElC,EAAW,QAAS,GAAU,CAC5B,EAAM,aAAa,cAAe,EAAK,OAAO,KAAK,CACrD,CAAC,EACG,EAAK,OAAO,QAAU,QAAU,CAAC,EAAK,SACxC,EAAW,aACT,YACA,cAAc,EAAK,KAAK,MACpC,EACmB,EAAK,OAAO,QAAU,SAC/B,EAAW,aACT,YACA,aAAa,EAAK,MAAQ,GAAM,EAAK,SAAgB,EAAL,GAAO,MACnE,EACmB,EAAK,OAAO,QAAU,SAAW,EAAK,UAC/C,EAAW,aACT,YACA,aAAa,EAAK,KAAK,MACnC,CAEM,CACF,CAAC,CACH,CACF,CACA,MAAM,EAAO,CAKX,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,CACnD,CAKA,iBAAiB,EAAO,EAAS,CAC/B,MAAM,EAAI,KAAK,EACX,OAAO,UAAU,eAAe,KAAK,EAAE,QAAQ,OAAQ,CAAK,EAC9D,EAAE,QAAQ,OAAO,CAAK,EAAE,KAAK,CAAO,EAEpC,EAAE,QAAQ,OAAO,CAAK,EAAI,CAAC,CAAO,CAEtC,CAKA,oBAAoB,EAAO,EAAS,CAClC,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,OAAO,UAAU,eAAe,KAAK,EAAE,QAAQ,OAAQ,CAAK,EAC/D,OAEF,MAAM,EAEJ,EAAE,QAAQ,OAAO,CAAK,EAAE,QAAQ,CAAO,EAErC,IAAU,IACZ,EAAE,QAAQ,OAAO,CAAK,EAAE,OACtB,EACA,CACR,CAEE,CAKA,UAAU,EAAO,EAAM,CACrB,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,OAAO,UAAU,eAAe,KAAK,EAAE,QAAQ,OAAQ,CAAK,EAC/D,QAEE,CAAC,GAAQ,CAAC,EAAK,UACjB,EAAO,CAAA,GAET,MAAM,EAEJ,EAAE,QAAQ,OAAO,CAAK,EAElB,EAAI,EAAI,OACd,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,EAAI,CAAC,EAAE,MAAM,KAAM,CAAI,CAE3B,CACA,oBAAqB,CACnB,MAAM,EAAI,KAAK,EACT,EAAK,KAAK,IACV,EAAgB,EAAE,IAAI,OAAO,cAAc,EAAE,QAAQ,UAAU,EACrE,KAAK,IAAI,UAAU,QAAS,GAAU,CACH,GAAc,iBAC7C,EACC,GAAM,CACL,MAAM,EAAsB,EAAE,OAAO,aAAa,GAAG,IAAM,MAAQ,EAAE,SAAS,sBAAwB,GAAK,EAAE,SAAS,oBAAsB,EAAE,OAAO,aAAa,GAAG,EAC/J,EAAyB,EAAE,OAAO,aAAa,GAAG,IAAM,MAAQ,EAAE,SAAS,yBAA2B,GAAK,EAAE,SAAS,uBAAyB,EAAE,OAAO,aAAa,GAAG,EACxK,EAAO,OAAO,OAAO,CAAA,EAAI,EAAG,CAChC,YAAa,EAAE,QAAQ,WAAa,EAAsB,EAC1D,eAAgB,CAC5B,CAAW,EACG,EAAE,OAAS,UACT,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,SAAS,UAC5E,EAAG,IAAI,oBACT,EAAG,IAAI,mBAAmB,UAAU,CAAC,EAEnC,OAAO,EAAE,OAAO,MAAM,OAAO,SAAY,YAC3C,EAAE,OAAO,MAAM,OAAO,QAAQ,EAAG,EAAI,CAAI,EAE3C,EAAG,IAAI,OAAO,UAAU,UAAW,CAAC,EAAG,EAAI,CAAI,CAAC,GAEzC,EAAE,OAAS,QAChB,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,SAAS,UAC5E,OAAO,EAAE,OAAO,MAAM,OAAO,OAAU,YACzC,EAAE,OAAO,MAAM,OAAO,MAAM,EAAG,EAAI,CAAI,EAEzC,EAAG,IAAI,OAAO,UAAU,QAAS,CAAC,EAAG,EAAI,CAAI,CAAC,GAEvC,EAAE,OAAS,aAAe,EAAE,OAAS,YAC1C,OAAO,EAAE,OAAO,MAAM,OAAO,WAAc,YAC7C,EAAE,OAAO,MAAM,OAAO,UAAU,EAAG,EAAI,CAAI,EAEpC,EAAE,OAAS,cAAgB,EAAE,OAAS,aAC3C,OAAO,EAAE,OAAO,MAAM,OAAO,YAAe,YAC9C,EAAE,OAAO,MAAM,OAAO,WAAW,EAAG,EAAI,CAAI,GAErC,EAAE,OAAS,WAAa,EAAE,QAAU,GAAK,EAAE,OAAS,cACzD,OAAO,EAAE,OAAO,MAAM,OAAO,OAAU,YACzC,EAAE,OAAO,MAAM,OAAO,MAAM,EAAG,EAAI,CAAI,EAEzC,EAAG,IAAI,OAAO,UAAU,QAAS,CAAC,EAAG,EAAI,CAAI,CAAC,EAElD,EACA,CAAE,QAAS,GAAO,QAAS,EAAI,CACvC,CACI,CAAC,EACD,KAAK,IAAI,UAAU,QAAS,GAAU,CACpC,EAAE,IAAI,OAAO,iBAAiB,EAAO,KAAK,cAAe,CACvD,QAAS,EACjB,CAAO,CACH,CAAC,EACD,KAAK,IAAI,KAAK,kBAAiB,CACjC,CAIA,cAAc,EAAG,CACf,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,OAAO,UACxB,GAAI,EAAE,OAAS,QAAS,CACtB,MAAM,EAAS,EAAE,IAAI,OAAO,cAAc,kBAAkB,EACxD,GAAU,EAAO,UAAU,SAAS,sBAAsB,GAAK,IAAW,wBAC5E,EAAO,UAAU,OAAO,sBAAsB,CAElD,CACA,EAAE,SAAS,QAAU,EAAE,OAAS,YAAc,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,QACvE,EAAE,SAAS,QAAU,EAAE,OAAS,YAAc,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,OACzE,CACF,CACA,MAAM,EAAa,CAIjB,YAAY,EAAG,CACb,KAAK,EAAI,CACX,CAIA,uBAAuB,EAAY,CACjC,IAAI,EAAU,KAAK,EAAE,OAAO,MAAM,QAClC,MAAM,EAAa,EAAY,QAAO,EAClC,EAAW,OAAS,EAAW,MAAM,SAAW,EAAW,MAAM,QAAQ,OAAS,IACpF,EAAU,KAAK,EAAE,OAAO,MAAM,QAAQ,OAAO,EAAW,MAAM,OAAO,GAEvE,MAAM,EAAiB,EAAQ,OAC5B,GAAM,EAAE,OAAS,CACxB,EAAM,CAAC,EACH,GAAI,EAAgB,CAClB,MAAM,EAAM,EAAQ,OAAO,GAAI,CAAc,EAC7C,KAAK,EAAE,QAAQ,OAAS,EAAI,OAC9B,KACE,OAAM,IAAI,MACR,yFACR,CAEE,CACF,CACA,MAAM,EAAK,CAKT,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,CACb,CAKA,SAAS,EAAM,EAAQ,CACrB,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OACb,EAAQ,IAAI,GAAM,KAAK,EAAG,KAAK,IAAK,CAAM,EAC1C,EAAQ,IAAI,GAAM,KAAK,EAAG,CAAE,MAAO,KAAK,IAAI,MAAO,UAAW,KAAK,IAAI,SAAS,EAAI,CAAM,EAChG,GAAI,EAAG,YAAc,IAAS,QAAS,CACrC,IAAI,EAAS,EACT,EAAG,iBACL,EAAU,EAAM,kBAAkB,CAAC,EACnC,EAAU,EAAM,kBAAkB,CAAC,EACnC,KAAK,EAAE,IAAI,YAAY,IAAI,CAAO,EAClC,KAAK,EAAE,IAAI,YAAY,IAAI,CAAO,IAElC,EAAU,EAAM,UAAS,EACzB,KAAK,EAAE,IAAI,YAAY,IAAI,CAAO,EAClC,EAAI,MAAM,IAAI,CAAC,EAAM,IAAU,CAC7B,GAAI,EAAG,mBAAmB,QAAQ,CAAK,IAAM,KAC3C,EAAU,EAAM,UAAU,CAAK,EAC/B,KAAK,EAAE,IAAI,MAAM,IAAI,CAAO,EACxB,KAAK,EAAE,OAAO,KAAK,WAAa,QAAQ,CAC1C,MAAM,EAAQ,KAAK,EAAE,IAAI,MAAM,SAAQ,EAAG,CAAC,EACvC,IACF,EAAM,OAAM,EACZ,KAAK,EAAE,IAAI,MAAM,IAAI,CAAK,EAE9B,CAEJ,CAAC,EAEL,CACF,CACF,CACA,MAAM,EAAW,CAIf,YAAY,EAAG,CACb,KAAK,EAAI,CACX,CACA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACf,EAAE,IAAI,YAAY,KAAK,iBAAiB,kCAAkC,EAAE,QAAS,GAAO,EAAG,OAAM,CAAE,EACvG,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAoB,EAAE,OAAO,MAAM,WAAW,KAAK,SACnD,EAAkB,EAAE,OAAO,MAAM,WAAW,WAC5C,EAAW,EAAE,OAAO,MAAM,WAAW,KAAK,KAC1C,EAAe,EAAkB,UACjC,EAAa,EAAkB,QAC/B,EAAc,EAAkB,YAChC,EAAY,EAAkB,UAC9B,EAAQ,EAAkB,MAC1B,EAAS,OACT,EAAa,EAAgB,QAC7B,EAAa,EAAgB,KAC7B,EAAY,EAAgB,IAC5B,EAAa,EAAgB,KAC7B,EAAc,EAAgB,MAC9B,EAAgB,EAAgB,QACtC,IAAI,EAAkB,EAAE,OAAO,MAAM,WAAW,KAAK,MACrD,GAAI,EAAE,OAAO,MAAM,WAAW,KAAM,CAC9B,IAAa,aACf,EAAkB,EAAS,aACzB,WACA,EACA,EACA,EACA,EACA,KACA,EACA,CAAA,CACV,GAEM,IAAI,EAAc,EAAE,OAAO,MAAM,WAAW,QAAU,EAAI,EAAS,SAAS,EAAG,EAAG,EAAG,CAAC,EAAI,EAAS,SAAQ,EACvG,EAAa,EAAE,OAAO,YACtB,CAAC,EAAQ,SAAS,CAAU,GAAK,EAAa,KAChD,EAAa,GAEf,IAAI,EAAkB,EAAE,OAAO,MAAM,WAAW,OAC5C,CAAC,EAAQ,SAAS,CAAe,GAAK,OAAO,CAAe,EAAI,KAClE,EAAkB,GAEpB,EAAY,KAAK,CACf,MAAO,yBACP,EAAG,EACH,EAAG,EACH,GAAI,EACJ,MAAO,EACP,OAAQ,EACR,KAAM,EACN,OAAQ,EACR,eAAgB,EAAE,OAAO,MAAM,WAAW,QAC1C,OAAQ,EAAE,OAAO,MAAM,WAAW,OAAO,MACzC,eAAgB,EAAE,OAAO,MAAM,WAAW,OAAO,MACjD,mBAAoB,EAAE,OAAO,MAAM,WAAW,OAAO,SAC7D,CAAO,EACG,IACF,EAAc,EAAQ,WAAW,EAAa,CAC5C,KAAM,EACN,IAAK,EACL,KAAM,EACN,MAAO,EACP,QAAS,CACnB,CAAS,GAEH,EAAE,IAAI,YAAY,IAAI,CAAW,CACnC,CACF,CACA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACf,EAAE,IAAI,YAAY,KAAK,iBACrB,2EACN,EAAM,QAAS,GAAO,EAAG,OAAM,CAAE,EAC7B,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAEJ,EAAE,OAAO,MAAM,CAAC,EAAE,WAEd,EAAO,EAAE,QAAQ,qBACvB,GAEE,EAAE,OAAO,MAAM,CAAC,EAAE,WAAW,KAC7B,CACA,MAAM,EAAc,EAAS,SAC3B,CAAC,EACD,EACA,EAAE,OAAO,UAAY,EACrB,EACA,EAAU,OAAO,MACjB,EAAU,OAAO,UACjB,EAAU,OAAO,KACzB,EACM,EAAY,KAAK,CACf,MAAO,wBACf,CAAO,EACD,EAAE,IAAI,YAAY,IAAI,CAAW,CACnC,CACA,MAAM,EAAoB,EAAS,SACjC,CAAC,EACD,EACA,EAAE,OAAO,UAAY,EACrB,EACA,EAAU,OAAO,MACjB,EACA,CACN,EACI,EAAkB,KAAK,CACrB,MAAO,+BACb,CAAK,EACD,EAAE,IAAI,YAAY,IAAI,CAAiB,CACzC,CACF,CACA,SAAS,GAAmB,EAAM,EAAU,CAC1C,GAAI,CAAC,EAAQ,SAAS,CAAI,GAAK,CAAC,EAAQ,SAAS,CAAQ,EACvD,OAAO,IAAa,OAAS,EAAW,EAE1C,MAAM,EAAM,EAAe,CAAA,EAAI,CAAI,EACnC,UAAW,KAAO,OAAO,KAAK,CAAQ,EAAG,CACvC,MAAM,EAAI,EAAS,CAAG,EAClB,IAAM,SACN,EAAQ,SAAS,CAAC,GAAK,EAAQ,SAAS,EAAK,CAAG,CAAC,EACnD,EAAI,CAAG,EAAI,GAAmB,EAAK,CAAG,EAAG,CAAC,EAE1C,EAAI,CAAG,EAAI,EAEf,CACA,OAAO,CACT,CACA,MAAM,EAAW,CAIf,YAAY,EAAG,CACb,KAAK,EAAI,EACT,KAAK,kBAAoB,IAC3B,CAMA,sBAAsB,EAAM,CAC1B,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,OACd,GAAI,EAAI,WAAW,SAAW,EAAG,OACjC,MAAM,EAAM,EAAI,WAAW,MAAK,EAChC,EAAI,KACF,CAAC,EAAG,IAAM,EAAE,WAAa,EAAE,WAAa,EAAI,EAAE,WAAa,EAAE,WAAa,GAAK,CACrF,EAAM,QAAO,EACT,MAAM,EAAS,IAAI,GAAO,CAAA,CAAE,EACtB,EAA2B,CAAC,EAAa,CAAA,IAAO,CACpD,IAAI,EACJ,MAAM,EAAoB,EAAI,CAAC,EAAE,WAC3B,EAAQ,EAAY,UAAS,EAAK,OAAO,WAAa,EAAI,OAAO,WAAa,OAAO,MAAQ,EACnG,GAAI,EAAQ,GACV,GAAI,KAAK,oBAAsB,KAAM,CACnC,GAAI,CAAC,EAAE,QAAQ,cAAe,OAC9B,MAAM,EAAgB,EAAQ,MAAM,EAAE,QAAQ,aAAa,EAC3D,EAAc,OAAS,EAAQ,MAAM,EAAE,OAAO,MAAM,EACpD,MAAM,EAAW,GAAU,iBAAiB,EAAQ,EAAe,CAAC,EACpE,EAAa,EAAQ,OAAO,EAAU,CAAU,EAChD,KAAK,0BAA0B,CAAU,EACzC,KAAK,kBAAoB,IAC3B,MAEA,SAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC9B,GAAI,EAAQ,EAAI,CAAC,EAAE,WAAY,CAC7B,MAAM,GAAsB,EAAK,EAAI,CAAC,EAAE,UAAY,MAAgB,EAAG,MAAS,EAAQ,MAAM,EAAI,CAAC,EAAE,QAAQ,KAAK,EAAI,KAGtH,GAFA,EAAa,GAAU,iBAAiB,EAAQ,EAAI,CAAC,EAAE,QAAS,CAAC,EACjE,EAAa,EAAQ,OAAO,EAAE,OAAQ,CAAU,EAC5C,MAAM,QAAQ,EAAE,OAAO,KAAK,GAAK,EAAmB,CACtD,MAAM,EAAY,MAAM,QAAQ,CAAiB,EAAI,EAAoB,CAAC,CAAiB,EAC3F,EAAa,EAAc,EAAe,CAAA,EAAI,CAAU,EAAG,CACzD,MAAO,EAAE,OAAO,MAAM,IACpB,CAAC,EAAU,IAAQ,GAAmB,EAAU,EAAU,CAAG,CAAC,CAChF,CACA,CAAe,CACH,CACA,KAAK,0BAA0B,CAAU,EACzC,KAAK,kBAAoB,EAAI,CAAC,EAAE,UAClC,CAGN,EACA,GAAI,EAAM,CACR,IAAI,EAAW,GAAU,iBAAiB,EAAQ,EAAM,CAAC,EACzD,EAAW,EAAQ,OAAO,EAAE,OAAQ,CAAQ,EAC5C,EAAW,EAAQ,OAAO,EAAU,CAAI,EACxC,EAAyB,CAAQ,CACnC,MACE,EAAyB,CAAA,CAAE,CAE/B,CAIA,0BAA0B,EAAY,CACpC,MAAM,EAAY,IAAI,GAAO,CAAU,EAAE,KAAK,CAAE,mBAAoB,EAAI,CAAE,EAC1E,KAAK,EAAE,OACP,CACF,CACF,CACA,SAAS,GAAmB,EAAG,CAC7B,IAAI,EAAI,EAAI,EACZ,MAAM,EAAK,EAAE,QACb,GAAI,CAAC,EAAG,YAAc,CAAC,EAAE,YAAc,CAAC,MAAM,QAAQ,EAAE,WAAW,MAAM,GAAK,EAAE,WAAW,OAAO,SAAW,EAAG,CAC9G,EAAG,gBAAkB,KACrB,MACF,CACA,MAAM,EAAU,CAAA,GACX,GAAM,EAAK,EAAE,MAAQ,KAAO,OAAS,EAAG,SAAW,MAAgB,EAAG,kBACzE,EAAE,IAAI,OAAO,iBAAiB,oBAAoB,EAAE,QAAS,GAAS,CACpE,IAAI,EAAK,EAAK,EAAK,EAAI,EACvB,MAAM,EAAK,UAAU,EAAM,EAAK,aAAa,OAAO,IAAM,KAAO,EAAM,GAAI,EAAE,EACvE,EAAI,UACP,GAAO,EAAM,EAAK,aAAa,GAAG,IAAM,KAAO,EAAM,EAAK,aAAa,KAAK,IAAM,KAAO,EAAM,GAChG,EACR,EACY,EAAI,YACP,GAAM,EAAK,EAAK,aAAa,GAAG,IAAM,KAAO,EAAK,EAAK,aAAa,qBAAqB,IAAM,KAAO,EAAK,EACpH,EACU,SAAS,CAAE,GAAK,SAAS,CAAC,GAAK,SAAS,CAAC,KAC1C,EAAQ,CAAE,EAAI,EAAQ,CAAE,GAAK,CAAA,GAAI,CAAC,EAAI,EAE3C,CAAC,EAEH,EAAG,gBAAkB,CACnB,SAAU,EAAE,WAAW,SAAW,CAAA,GAAI,MAAK,EAC3C,QAAS,EAAE,WAAW,OAAO,MAAK,EAClC,SAAU,EAAG,eAAiB,CAAA,GAAI,MAAK,EACvC,SAAU,EAAG,eAAiB,CAAA,GAAI,MAAK,EACvC,QAAA,EACA,QAAS,EAAG,QAAU,CAAA,GAAI,MAAK,EAC/B,WAAY,CAAC,GAAG,EAAK,EAAE,YAAc,MAAgB,EAAG,WAC5D,CACA,CACA,SAAS,GAAmB,EAAG,EAAW,EAAY,EAAY,CAChE,IAAI,EACJ,MAAM,EAAK,EAAE,QACP,EAAQ,EAAG,gBACjB,GAAI,CAAC,GAAS,CAAC,EAAG,aAAe,GAAG,EAAK,EAAE,YAAc,MAAgB,EAAG,YAAa,OAAO,KAChG,MAAM,EAAO,EAAM,QAAQ,CAAS,EAC9B,EAAO,EAAM,QAAQ,CAAS,EAC9B,EAAO,EAAE,WAAW,QAAQ,CAAS,EACrC,EAAO,EAAE,WAAW,OAAO,CAAS,EAE1C,GADI,CAAC,GAAQ,CAAC,GAAQ,CAAC,GAAQ,CAAC,GAC5B,EAAK,OAAS,GAAK,EAAK,OAAS,EAAG,OAAO,KAC/C,IAAI,EAAI,GACR,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,GAAI,EAAK,CAAC,IAAM,EAAK,CAAC,EAAG,CACvB,EAAI,EACJ,KACF,CAEF,GAAI,IAAM,GAAI,OAAO,KACrB,MAAM,EAAU,KAAK,IAAI,EAAK,OAAS,EAAG,EAAK,MAAM,EACrD,GAAI,EAAU,EAAG,OAAO,KACxB,MAAM,EAAW,EAAK,OAAS,EAC/B,GAAI,IAAM,GAAK,IAAa,EAAG,OAAO,KACtC,QAAS,EAAI,EAAG,EAAI,EAAS,IAAK,CAChC,GAAI,EAAK,EAAI,CAAC,IAAM,EAAK,CAAC,EAAG,OAAO,KACpC,MAAM,EAAK,EAAK,EAAI,CAAC,EACf,EAAK,EAAK,CAAC,EACjB,GAAI,IAAO,GAAM,EAAE,GAAM,MAAQ,GAAM,MAAO,OAAO,IACvD,CACA,MAAM,EAAQ,EAAM,QAAQ,CAAS,EAC/B,EAAQ,EAAM,QAAQ,CAAS,EACrC,GAAI,CAAC,GAAS,CAAC,EAAO,OAAO,KAC7B,IAAI,EAAI,GACJ,EAAI,GACR,QAAS,EAAI,EAAG,EAAI,EAAS,IACvB,EAAM,EAAI,CAAC,GAAK,MAAQ,EAAM,EAAI,CAAC,GAAK,MAAQ,EAAW,CAAC,GAAK,MAAQ,EAAW,CAAC,GAAK,OAG1F,IAAM,KAAI,EAAI,GAClB,EAAI,GAEN,GAAI,IAAM,IAAM,GAAK,EAAG,OAAO,KAC/B,MAAM,EAEJ,EAAW,CAAC,EAER,EAEJ,EAAW,CAAC,EAER,EAEJ,EAAM,EAAI,CAAC,EAEP,EAEJ,EAAM,EAAI,CAAC,EAEb,GAAI,KAAK,IAAI,EAAM,CAAG,EAAI,KAAM,OAAO,KACvC,MAAM,GAAM,EAAM,IAAQ,EAAM,GAC1B,EAAK,EAAM,EAAK,EAGtB,GAFI,CAAC,SAAS,CAAE,GAAK,CAAC,SAAS,CAAE,GAC7B,KAAK,IAAI,EAAK,CAAC,EAAI,KACnB,KAAK,IAAI,CAAE,EAAI,GAAK,OAAO,KAC/B,IAAI,EAAM,EACN,EAAM,EACV,QAAS,EAAI,EAAG,GAAK,EAAG,IAAK,CAC3B,MAAM,EAAK,EAAW,CAAC,EACnB,GAAM,MAAQ,EAAM,EAAI,CAAC,GAAK,OAC9B,EACJ,EAAW,CAAG,IAAG,EAAM,GACnB,EACJ,EAAW,CAAG,IAAG,EAAM,GACzB,CACA,IAAI,EAAK,EACL,EAAK,EACT,MAAM,EAEJ,EAAW,CAAG,EAEV,EAEJ,EAAW,CAAG,EAYhB,GAVI,KAAK,IAAI,EAAO,CAAI,EAAI,MAC1B,GACC,EAAM,EAAI,CAAG,EACd,EAAM,EAAI,CAAG,IAAM,EAAO,GAC1B,EACA,EAAM,EAAI,CAAG,EAAI,EAAK,GAEtB,EACA,EAAM,EAAI,CAAG,EAAI,EAEf,CAAC,SAAS,CAAE,GAAK,CAAC,SAAS,CAAE,GAAK,EAAK,IAAO,EAAK,EAAG,OAAO,KACjE,MAAM,EAAI,KAAK,OAAO,EAAI,GAAK,CAAC,EAChC,GAAI,IAAM,GAAK,IAAM,GAAK,EAAW,CAAC,GAAK,MAAQ,EAAM,EAAI,CAAC,GAAK,KAAM,CACvE,MAAM,EAAQ,EACd,EAAW,CAAC,EAAI,EAChB,GAAI,KAAK,IAAI,EACb,EAAM,EAAI,CAAC,CAAC,EAAI,IACd,OAAO,KAET,GAAI,EAAW,CAAC,GAAK,MAAQ,EAAM,EAAI,CAAC,GAAK,KAAM,CACjD,MAAM,EAAQ,EACd,EAAW,CAAC,EAAI,EAChB,GAAI,KAAK,IAAI,EACb,EAAM,EAAI,CAAC,CAAC,EAAI,IACd,OAAO,IAEX,CACF,CACA,MAAO,CAAE,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,CAAE,CACzB,CACA,MAAM,GAAS,2CACf,SAAS,GAAuB,EAAG,EAAG,CACpC,KAAM,CAAE,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,CAAE,EAAK,EACrB,EAAM,CAAA,EACN,EAAK,sDACX,IAAI,EACJ,MAAQ,EAAQ,EAAG,KAAK,CAAC,KAAO,MAAM,CACpC,MAAM,EAAM,EAAM,CAAC,EAAE,YAAW,EAC1B,GAAQ,EAAM,CAAC,EAAE,MAAM,EAAM,GAAK,CAAA,GAAI,IAAI,UAAU,EAC1D,GAAI,IAAQ,IAAK,CACf,EAAI,KAAK,GAAG,EACZ,QACF,CACA,GAAI,IAAQ,IAAK,CACf,UAAW,KAAK,EAAM,EAAI,KAAK,KAAK,EAAK,EAAI,CAAE,EAAE,EACjD,QACF,CACA,GAAI,IAAQ,IAAK,CACf,UAAW,KAAK,EAAM,EAAI,KAAK,KAAK,EAAK,EAAI,CAAE,EAAE,EACjD,QACF,CACA,GAAI,IAAQ,IAAK,CACf,QAAS,EAAI,EAAG,EAAI,EAAI,EAAK,OAAQ,GAAK,EACxC,EAAI,KACF,KAAK,EAAK,CAAC,CAAC,IAAI,EAAK,EAAI,CAAC,CAAC,IAAI,EAAK,EAAI,CAAC,CAAC,IAAI,EAAK,EAAI,CAAC,CAAC,IAAI,EAAK,EAAI,CAAC,CAAC,IAAI,EAAK,EAAK,EAAI,CAAC,EAAI,CAAE,IAAI,EAAK,EAAK,EAAI,CAAC,EAAI,CAAE,EACpI,EAEM,QACF,CACA,MAAM,EAAS,CAAA,EACf,QAAS,EAAI,EAAG,EAAI,EAAI,EAAK,OAAQ,GAAK,EACxC,EAAO,KAAK,GAAG,EAAK,EAAK,CAAC,EAAI,CAAE,IAAI,EAAK,EAAK,EAAI,CAAC,EAAI,CAAE,EAAE,EAEzD,EAAO,QAAQ,EAAI,KAAK,GAAG,CAAG,IAAI,EAAO,KAAK,GAAG,CAAC,EAAE,CAC1D,CACA,OAAO,EAAI,KAAK,GAAG,CACrB,CACA,SAAS,GAAoB,EAAW,EAAG,CACzC,MAAM,EAAM,EAAE,OAAO,MAAM,UAC3B,GAAI,CAAC,GAAO,CAAC,EAAI,QAAS,OAC1B,MAAM,EAAY,EAAI,UAChB,EAAQ,EAAE,OAAO,MAAM,MACvB,EAAO,GACP,GAAK,KAAa,KAClB,MAAM,QAAQ,CAAC,EAAU,OAAO,EAAE,CAAC,GAAM,SAAW,EAAE,CAAC,EAAI,KAC3D,OAAO,GAAM,UAAiB,OAAO,EAAE,GAAM,SAAW,EAAE,EACvD,KAET,EAAU,QAAS,GAAM,CACvB,IAAI,EACJ,MAAM,EAA4B,GAAE,KACpC,GAAI,CAAC,MAAM,QAAQ,CAAI,GAAK,EAAK,OAAS,EAAG,OAC7C,GAAI,OAAO,GAAc,UAAY,EAAY,EAAG,CAC9C,EAAK,OAAS,IAAW,EAAE,KAAO,EAAK,MAAM,EAAK,OAAS,CAAS,GACxE,MACF,CACA,GAAI,CAAC,EAAO,OACZ,MAAM,EAAQ,EAAI,EAAK,EAAK,OAAS,CAAC,CAAC,EACjC,EAAS,EAAI,EAAK,CAAC,CAAC,EAC1B,GAAI,GAAS,MAAQ,GAAU,MAAQ,GAAS,EAAQ,OACxD,MAAM,GAAc,EAAQ,IAAW,EAAK,OAAS,GAC/C,EAAS,EAAQ,EAAQ,EAAI,EACnC,IAAI,EAAM,EACV,KAAO,EAAM,EAAK,UAAY,EAAK,EAAI,EAAK,CAAG,CAAC,IAAM,KAAO,EAAK,GAAU,GAAQ,IAChF,EAAM,IAAG,EAAE,KAAO,EAAK,MAAM,CAAG,EACtC,CAAC,CACH,CACA,SAAS,GAAkB,EAAM,EAAM,CACrC,MAAM,EAAU,IAAI,IAAI,EAAK,KAAK,EAC5B,EAAU,CAAA,EAChB,IAAI,EAAK,EACT,QAAS,EAAK,EAAG,EAAK,EAAK,MAAM,OAAQ,IAAM,CAC7C,MAAM,EAAK,EAAK,MAAM,CAAE,EACxB,GAAI,IAAO,GAAI,CACb,KAAO,EAAK,GACN,EAAQ,IAAI,CAAE,GAAG,EAAQ,KAAK,CAAE,KAAM,EAAI,KAAM,EAAE,CAAE,EACxD,IAEF,EAAQ,KAAK,CAAE,KAAM,EAAI,KAAM,CAAE,CAAE,EACnC,EAAK,EAAK,CACZ,MACE,EAAQ,KAAK,CAAE,KAAM,GAAI,KAAM,CAAE,CAAE,CAEvC,CACA,KAAO,EAAK,GACN,EAAQ,IAAI,CAAE,GAAG,EAAQ,KAAK,CAAE,KAAM,EAAI,KAAM,EAAE,CAAE,EACxD,IAEF,OAAO,CACT,CACA,SAAS,GAAkB,EAAG,EAAiB,EAAQ,CACrD,GAAI,CAAC,GAAK,OAAO,GAAM,SAAU,OAAO,KACxC,MAAM,EAAO,GAAU,CAAC,EACxB,GAAI,CAAC,EAAK,QAAU,EAAK,CAAC,EAAE,CAAC,IAAM,IAAK,OAAO,KAC/C,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,GAAI,EAAK,CAAC,EAAE,CAAC,IAAM,IAAK,OAAO,KAEjC,IAAI,EAAO,EACP,EAAU,KACd,GAAI,GAMF,GALI,EAAK,OAAS,IAClB,EAAU,EAAK,MAAM,EAAE,EACvB,EAAO,EAAK,MAAM,EAAG,EAAE,EACnB,EAAQ,CAAC,EAAE,CAAC,IAAM,MAClB,EAAQ,CAAC,EAAE,CAAC,IAAM,KAClB,EAAQ,CAAC,EAAE,CAAC,IAAM,KAAO,EAAQ,CAAC,EAAE,CAAC,IAAM,IAAK,OAAO,aAClD,EAAK,EAAK,OAAS,CAAC,EAAE,CAAC,IAAM,IACtC,OAAO,KAET,GAAI,EAAK,SAAW,GAAmB,EAAK,OAAS,EAAG,OAAO,KAC/D,MAAM,EAAU,EAAK,CAAC,EAAE,CAAC,EACzB,GAAI,IAAY,KAAO,IAAY,IAAK,OAAO,KAC/C,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,GAAI,EAAK,CAAC,EAAE,CAAC,IAAM,EAAS,OAAO,KAErC,MAAM,EAAU,EAAK,IAClB,GAAM,EAAE,CAAC,IAAM,IAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAG,OAAO,EAAE,CAAC,CAAC,CAAC,EAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CACpF,EACE,UAAW,KAAK,EACd,GAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAK,CAAC,SAAS,EAAE,CAAC,CAAC,EAAG,OAAO,KAEjD,MAAO,CAAE,KAAA,EAAM,QAAA,EAAS,QAAA,EAAS,QAAA,CAAO,CAC1C,CACA,SAAS,GAAO,EAAG,EAAG,EAAG,CACvB,MAAO,CAAC,EAAE,CAAC,GAAK,EAAE,CAAC,EAAI,EAAE,CAAC,GAAK,EAAG,EAAE,CAAC,GAAK,EAAE,CAAC,EAAI,EAAE,CAAC,GAAK,CAAC,CAC5D,CACA,SAAS,GAAW,EAAG,EAAK,EAAG,CAC7B,MAAM,EAAK,EACL,EAAK,CAAC,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EACpB,EAAK,CAAC,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EACpB,EAAK,CAAC,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EACpB,EAAM,GAAO,EAAI,EAAI,CAAC,EACtB,EAAM,GAAO,EAAI,EAAI,CAAC,EACtB,EAAM,GAAO,EAAI,EAAI,CAAC,EACtB,EAAO,GAAO,EAAK,EAAK,CAAC,EACzB,EAAO,GAAO,EAAK,EAAK,CAAC,EACzB,EAAM,GAAO,EAAM,EAAM,CAAC,EAChC,MAAO,CACL,MAAO,CAAC,IAAK,EAAI,CAAC,EAAG,EAAI,CAAC,EAAG,EAAK,CAAC,EAAG,EAAK,CAAC,EAAG,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EAC7D,OAAQ,CAAC,IAAK,EAAK,CAAC,EAAG,EAAK,CAAC,EAAG,EAAI,CAAC,EAAG,EAAI,CAAC,EAAG,EAAG,CAAC,EAAG,EAAG,CAAC,CAAC,EAC5D,IAAA,CACJ,CACA,CACA,SAAS,GAAU,EAAG,EAAK,EAAG,CAC5B,MAAM,EAAI,CAAC,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EACnB,EAAM,GAAO,EAAG,EAAG,CAAC,EAC1B,MAAO,CACL,MAAO,CAAC,IAAK,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EAC3B,OAAQ,CAAC,IAAK,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,EACxB,IAAA,CACJ,CACA,CACA,SAAS,GAAW,EAAU,EAAQ,CACpC,KAAM,CAAE,KAAA,EAAM,QAAA,EAAS,QAAA,EAAS,QAAA,CAAO,EAAK,EACtC,EAAI,EAAQ,OACZ,EAAI,EAAO,OACX,EAAS,GAAM,IAAY,IAAM,CAAC,IAAK,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,EAAI,CAAC,IAAK,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,EAC7F,EAAM,CAAC,CAAC,IAAK,EAAQ,CAAC,EAAE,CAAC,EAAG,EAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAChD,IAAI,EAAW,EACf,KAAO,EAAW,GAAK,EAAO,CAAQ,IAAM,GAAG,IAC/C,QAAS,EAAI,EAAG,GAAK,EAAU,IAAK,EAAI,KAAK,EAAM,EAAQ,CAAC,CAAC,CAAC,EAC9D,IAAI,EAAQ,EAAW,EACvB,QAAS,EAAI,EAAG,EAAI,EAAI,EAAG,IAAK,CAC9B,IAAI,EAAW,EACf,KAAO,EAAQ,EAAW,GAAK,EAAO,EAAQ,CAAQ,IAAM,IAAI,IAChE,MAAM,EAAM,EAAK,EAAI,CAAC,EACtB,GAAI,CAAC,EACH,EAAI,KAAK,EAAI,MAAK,CAAE,MACf,CACL,MAAM,EAAa,EAAW,EAC9B,IAAI,EAAQ,EAAQ,CAAC,EACjB,EAAO,EACX,QAAS,EAAI,EAAG,EAAI,EAAU,IAAK,CACjC,MAAM,EAAI,GAAK,EAAa,GACtB,EAAK,IAAY,IAAM,GAAW,EAAO,EAAM,CAAC,EAAI,GAAU,EAAO,EAAM,CAAC,EAClF,EAAI,KAAK,EAAG,KAAK,EACjB,EAAQ,EAAG,IACX,EAAO,EAAG,MACZ,CACA,EAAI,KAAK,CAAI,CACf,CACA,GAAS,EAAW,CACtB,CACA,KAAO,EAAQ,GACb,EAAI,KAAK,EAAM,EAAQ,EAAI,CAAC,CAAC,CAAC,EAC9B,IAEF,OAAI,GAAS,EAAQ,QAAS,GAAM,EAAI,KAAK,EAAE,MAAK,CAAE,CAAC,EAChD,CACT,CACA,SAAS,GAAkB,EAAO,EAAK,EAAS,EAAM,EAAM,EAAQ,CAClE,MAAM,EAAe,GAAkB,EAAO,EAAM,CAAM,EAC1D,GAAI,CAAC,EAAc,OAAO,KAC1B,MAAM,EAAa,GAAkB,EAAK,EAAM,CAAM,EAGtD,GAFI,CAAC,GACD,EAAa,UAAY,EAAW,UACnC,EAAa,SAAW,EAAW,WAAa,CAAC,EAAa,SAAW,CAAC,EAAW,SAAW,EAAa,QAAQ,CAAC,EAAE,CAAC,IAAM,EAAW,QAAQ,CAAC,EAAE,CAAC,GACzJ,OAAO,KAET,MAAM,EAAU,EAAQ,IAAK,GAAM,EAAE,IAAI,EACnC,EAAQ,EAAQ,IAAK,GAAM,EAAE,IAAI,EACvC,MAAO,CACL,KAAM,GAAY,GAAW,EAAc,CAAO,CAAC,EACnD,SAAU,GAAY,GAAW,EAAY,CAAK,CAAC,CACvD,CACA,CACA,SAAS,GAAwB,EAAG,CAClC,IAAI,EACJ,MAAM,EAAO,EAAE,OAAO,MAAM,WAE5B,GADI,CAAC,GAAQ,EAAK,UAAY,IAC1B,CAAC,EAAK,kBAAoB,EAAK,iBAAiB,UAAY,GAC9D,MAAO,GAET,MAAM,GAAkB,EAAK,EAAK,wBAA0B,KAAO,EAAK,EACxE,OAAI,EAAiB,GAAK,EAAE,QAAQ,WAAa,EAAuB,GACjE,CAAC,EAAE,EAAY,UAAS,GAAM,EAAE,QAAQ,aAAe,EAAE,QAAQ,cAC1E,CACA,SAAS,GAAS,EAAG,EAAW,EAAG,CACjC,IAAI,EAAI,EAAI,EAAI,EAChB,IAAK,EAAK,EAAE,YAAc,MAAgB,EAAG,WAAY,CACvD,MAAM,GAAM,GAAM,EAAK,EAAE,aAAe,KAAO,OAAS,EAAG,UAAY,KAAO,OAAS,EAAG,CAAS,EACnG,GAAI,GAAM,EAAG,QAAU,EAAG,CAAC,GAAK,KAAM,MAAO,KAAO,EAAG,CAAC,CAC1D,CACA,MAAM,GAAO,EAAK,EAAE,QAAQ,SAAW,KAAO,OAAS,EAAG,CAAC,EAC3D,OAAI,GAAO,MAAQ,OAAO,CAAG,IAAM,GAC1B,MAAQ,MAAM,QAAQ,CAAG,EAAI,EAAI,KAAK,GAAG,EAAI,OAAO,CAAG,GAEzD,KAAO,CAChB,CACA,SAAS,GAAc,EAAO,EAAW,EAAG,CAC1C,IAAI,EAAI,EACR,GAAI,EAAM,WAAY,CACpB,MAAM,GAAM,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,CAAS,EAC/D,GAAI,GAAM,EAAG,QAAU,EAAG,CAAC,GAAK,KAAM,MAAO,KAAO,EAAG,CAAC,CAC1D,CACA,MAAM,GAAO,EAAK,EAAM,SAAW,KAAO,OAAS,EAAG,CAAC,EACvD,OAAI,GAAO,MAAQ,OAAO,CAAG,IAAM,GAC1B,MAAQ,MAAM,QAAQ,CAAG,EAAI,EAAI,KAAK,GAAG,EAAI,OAAO,CAAG,GAEzD,KAAO,CAChB,CACA,SAAS,GAAS,EAAS,EAAS,CAClC,MAAM,EAA2B,IAAI,IACrC,EAAQ,QAAQ,CAAC,EAAG,IAAM,CACnB,EAAS,IAAI,CAAC,GAAG,EAAS,IAAI,EAAG,CAAC,CACzC,CAAC,EACD,MAAM,EAAQ,IAAI,MAAM,EAAQ,MAAM,EAChC,EAA0B,IAAI,IACpC,IAAI,EAAO,GACP,EAAU,GACV,EAAW,EAAQ,SAAW,EAAQ,OAC1C,EAAQ,QAAQ,CAAC,EAAG,IAAM,CACxB,MAAM,EAAK,EAAS,IAAI,CAAC,GAAK,CAAC,EAAQ,IAAI,EAAS,IAAI,CAAC,CAAC,EAAI,EAAS,IAAI,CAAC,EAAI,GAChF,EAAM,CAAC,EAAI,EACP,IAAO,KACT,EAAQ,IAAI,CAAE,EACV,EAAK,IAAM,EAAU,IACzB,EAAO,GAEL,IAAO,IAAG,EAAW,GAC3B,CAAC,EACD,MAAM,EAAQ,CAAA,EACd,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAC7B,EAAQ,IAAI,CAAC,GAAG,EAAM,KAAK,CAAC,EAEnC,MAAO,CAAE,MAAA,EAAO,MAAA,EAAO,QAAA,EAAS,QAAS,CAAC,CAAQ,CACpD,CACA,SAAS,GAAa,EAAM,CAC1B,MAAM,EAAuB,IAAI,IACjC,OAAO,EAAK,IAAK,GAAM,CACrB,MAAM,EAAQ,EAAK,IAAI,CAAC,GAAK,EAC7B,OAAA,EAAK,IAAI,EAAG,EAAQ,CAAC,EACd,IAAU,EAAI,EAAI,GAAG,CAAC,IAAI,CAAK,EACxC,CAAC,CACH,CACA,SAAS,GAAW,EAAG,EAAW,EAAkB,GAAO,EAAe,GAAO,CAC/E,IAAI,EAAI,EACR,GAAI,CAAC,GAAwB,CAAC,EAAG,OAAO,KACxC,MAAM,EAAQ,EAAE,QAAQ,gBACxB,GAAI,CAAC,EAAO,OAAO,KACnB,MAAM,GAAQ,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,CAAS,EAC3D,GAAQ,EAAK,EAAE,WAAW,SAAW,KAAO,OAAS,EAAG,CAAS,EAEvE,GADI,CAAC,MAAM,QAAQ,CAAI,GAAK,CAAC,MAAM,QAAQ,CAAI,GAC3C,CAAC,EAAK,QAAU,CAAC,EAAK,OAAQ,OAAO,KACzC,MAAM,EAAU,GACd,EAAK,IAAI,CAAC,EAAG,IAAM,GAAc,EAAO,EAAW,CAAC,CAAC,CACzD,EACQ,EAAU,GAAa,EAAK,IAAI,CAAC,EAAG,IAAM,GAAS,EAAG,EAAW,CAAC,CAAC,CAAC,EACpE,EAAO,GAAS,EAAS,CAAO,EAEtC,MADI,CAAC,EAAK,SAAW,CAAC,GAClB,CAAC,EAAK,SAAW,CAAC,EAAwB,KACvC,CAAE,KAAA,EAAM,QAAA,EAAS,QAAA,CAAO,CACjC,CACA,SAAS,GAAY,EAAG,CACtB,IAAI,EAAI,EACR,MAAM,EAAO,EAAE,OAAO,MAAM,WAC5B,OAAO,IAAe,GAAM,EAAK,EAAK,mBAAqB,KAAO,OAAS,EAAG,SAAW,KAAO,EAAK,EAAK,MAAM,CAClH,CACA,SAAS,GAAS,EAAG,EAAU,EAAM,EAAS,EAAQ,CACpD,MAAM,EAAU,YAAY,IAAG,EACzB,EAAQ,GAAQ,CACpB,GAAI,EAAE,QAAQ,YAAa,OAC3B,MAAM,EAAM,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAM,GAAW,CAAQ,CAAC,EAC/D,EAAQ,EAAK,CAAG,EAAG,CAAG,EAClB,EAAM,EACR,EAAY,sBAAsB,CAAI,EAC7B,GACT,EAAM,CAEV,EACA,EAAY,sBAAsB,CAAI,CACxC,CACA,SAAS,GAAmB,EAAG,CAAE,aAAA,EAAc,UAAA,EAAW,MAAA,CAAK,EAAI,CACjE,IAAI,EAAI,EAAI,EAAI,EAChB,GAAI,CAAkC,GAAa,KAAO,MAAO,GACjE,MAAM,EAAK,GAAW,EAAG,EAAW,EAAI,EACxC,GAAI,CAAC,EAAI,MAAO,GAChB,MAAM,EAAQ,EAAE,QAAQ,gBACxB,GAAI,CAAC,EAAO,MAAO,GACnB,MAAM,GAAS,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,CAAS,EAC5D,GAAS,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,CAAS,EAClE,GAAI,CAAC,GAAS,CAAC,EAAO,MAAO,GAC7B,MAAM,EAAU,EAAa,KAAK,iBAAiB,oBAAoB,EACvE,GAAI,CAAC,EAAQ,OAAQ,MAAO,GAC5B,MAAM,IAAU,EAAK,EAAE,QAAQ,gBAAkB,KAAO,OAAS,EAAG,CAAS,IAAM,CAAA,EAC7E,IAAU,EAAK,EAAE,QAAQ,gBAAkB,KAAO,OAAS,EAAG,CAAS,IAAM,CAAA,EAC7E,EAAO,GAAY,CAAC,EACpB,EAAW,KAAK,IAAI,EAAG,GAAS,CAAC,EACvC,OAAA,EAAa,KAAK,UAAU,OAAO,2BAA2B,EAC9D,EAAQ,QAAS,GAAS,CACxB,IAAI,EAAK,EAAK,EAAK,EAAK,EAAI,EAAI,EAAI,EAAI,EACxC,MAAM,EAAI,UACP,GAAO,EAAM,EAAK,aAAa,GAAG,IAAM,KAAO,EAAM,EAAK,aAAa,KAAK,IAAM,KAAO,EAAM,GAChG,EACN,EACI,GAAI,CAAC,SAAS,CAAC,GAAK,EAAI,GAAK,GAAK,EAAG,KAAK,MAAM,OAAQ,OACxD,MAAM,EAAO,EAAG,KAAK,MAAM,CAAC,EACtB,EAAK,EAAM,CAAC,GAAK,MAAQ,EAAM,CAAC,GAAK,KAAO,CAAC,EAAM,CAAC,EAAG,EAAM,CAAC,CAAC,EAAI,KACzE,GAAI,IAAS,IAAM,CAAC,EAAI,CACtB,MAAM,EAEJ,EAAK,MAEP,EAAM,QAAU,IAChB,GACE,EACA,EACA,EACC,GAAU,CACT,EAAM,QAAU,OAAO,CAAK,CAC9B,EACA,IAAM,CACJ,EAAM,QAAU,EAClB,CACR,EACM,MACF,CACA,MAAM,IAAO,EAAM,EAAM,CAAI,IAAM,KAAO,EAAM,KAAO,EAAG,CAAC,EACrD,IAAO,EAAM,EAAM,CAAI,IAAM,KAAO,EAAM,KAAO,EAAG,CAAC,EAC3D,GAAI,CAAC,SAAS,CAAE,GAAK,CAAC,SAAS,CAAE,EAAG,OACpC,MAAM,GAAS,GAAM,GAAM,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,CAAS,IAAM,KAAO,OAAS,EAAG,CAAI,IAAM,KAAO,EAAK,IACvH,EAAM,YACT,GAAM,EAAK,EAAK,aAAa,GAAG,IAAM,KAAO,EAAK,EAAK,aAAa,qBAAqB,IAAM,KAAO,EAAK,EAClH,EACU,EAAS,SAAS,CAAK,GAAK,SAAS,CAAG,GAAK,EAAM,GAAK,KAAK,IAAI,EAAQ,CAAG,EAAI,IAEtF,GAAI,EADU,KAAK,IAAI,CAAE,GAAK,IAAO,KAAK,IAAI,CAAE,GAAK,KACvC,CAAC,EAAQ,OACvB,MAAM,EAAS,GAAU,CACvB,MAAM,EAAO,GAAM,EAAI,GACjB,EAAO,GAAM,EAAI,GACvB,GAAI,EAAQ,CACV,MAAM,GAAK,GAAS,EAAM,GAAS,GAAS,EAC5C,EAAK,aACH,YACA,aAAa,EAAO,EAAG,CAAC,GAAK,EAAI,EAAE,KAAK,EAAO,EAAG,CAAC,GAAK,EAAI,EAAE,WAAW,CAAC,GACpF,CACM,MACE,EAAK,aAAa,YAAa,aAAa,CAAI,KAAK,CAAI,GAAG,CAEhE,EACA,EAAM,CAAC,EACP,GAAS,EAAG,EAAU,EAAM,EAAO,IAAM,CACvC,EAAK,gBAAgB,WAAW,CAClC,CAAC,CACH,CAAC,EACM,EACT,CACA,SAAS,GAAqB,EAAG,CAAE,KAAA,EAAM,UAAA,EAAW,aAAA,EAAc,aAAA,EAAc,UAAA,EAAW,UAAA,CAAS,EAAI,CACtG,IAAI,EAAI,EACR,MAAM,EAAK,GAAW,EAAG,CAAS,EAClC,GAAI,CAAC,EAAI,OAAO,KAChB,KAAM,CAAE,KAAA,EAAM,QAAA,EAAS,QAAA,CAAO,EAAK,EAC7B,EAAQ,EAAE,QAAQ,gBACxB,GAAI,CAAC,EAAO,OAAO,KACnB,MAAM,GAAQ,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,CAAS,EAC3D,GAAQ,EAAK,EAAE,WAAW,SAAW,KAAO,OAAS,EAAG,CAAS,EAEvE,GADI,EAAK,OAAS,GAAK,EAAK,OAAS,GACjC,EAAK,KAAM,GAAM,IAAM,IAAI,GAAK,EAAK,KAAM,GAAM,IAAM,IAAI,EAAG,OAAO,KACzE,MAAM,EAAU,GAAkB,EAAM,EAAQ,MAAM,EAChD,EAAM,CAAA,EAqBZ,OApBI,MAAM,QAAQ,CAAS,GAAK,EAAU,SAAW,GAAK,IACxD,EAAI,KAAO,GACT,EACA,EAAU,CAAC,EACX,EACA,EAAQ,OACR,EAAQ,OACR,EACN,GAEM,IAAS,QAAU,MAAM,QAAQ,CAAS,GAAK,EAAU,SAAW,GAAK,IAC3E,EAAI,KAAO,GACT,EACA,EAAU,CAAC,EACX,EACA,EAAQ,OACR,EAAQ,OACR,EACN,GAEM,CAAC,EAAI,MAAQ,CAAC,EAAI,KAAa,KAC5B,CACT,CACA,SAAS,GAAU,EAAG,CACpB,MAAM,EAAI,4CAA4C,KAAK,GAAK,EAAE,EAClE,GAAI,CAAC,EAAG,OAAO,KACf,MAAM,EAAI,WAAW,EAAE,CAAC,CAAC,EACnB,EAAI,WAAW,EAAE,CAAC,CAAC,EACzB,OAAO,SAAS,CAAC,GAAK,SAAS,CAAC,EAAI,CAAE,EAAA,EAAG,EAAA,CAAC,EAAK,IACjD,CACA,SAAS,GAAoB,CAC3B,EAAA,EACA,SAAA,EACA,OAAA,EACA,QAAA,EACA,aAAA,EACA,MAAA,CACF,EAAG,CACD,IAAI,EAEJ,GADI,CAAC,GAAwB,CAAC,GAC1B,CAAC,GAAU,CAAC,MAAM,QAAQ,EAAO,KAAK,GAAK,CAA8B,GAAS,KAAO,OAC7F,MAAM,EAAY,IAAI,IAAI,CAAO,EAC3B,EAAQ,EAAO,MAAM,OACxB,GAAM,GAAK,EAAE,GAAK,EAAE,KAAO,MAAQ,CAAC,EAAU,IAAI,EAAE,GAAG,CAC5D,EACE,GAAI,CAAC,EAAM,OAAQ,OACnB,MAAM,EAAW,IAAI,EAAS,CAAC,EACzB,GAAgB,EAAK,EAAE,QAAQ,SAAW,KAAO,OAAS,EAAG,SAAS,OAAO,EAAO,SAAS,EAAG,EAAE,CAAC,EACzG,EAAM,QAAS,GAAM,CACnB,IAAI,EAAO,EAAE,MAAQ,GAAgB,UACjC,OAAO,CAAI,EAAE,QAAQ,MAAM,IAAM,IAAG,EAAO,GAAgB,WAC/D,MAAM,EAAQ,EAAS,SAAS,CAC9B,EAAG,EAAE,EACL,OAAQ,OACR,YAAa,EACb,KAAA,EACA,YAAa,EACb,QAAS,sBACf,CAAK,EACK,EAAO,EAAM,KACnB,EAAK,aAAa,iBAAkB,MAAM,EAC1C,EAAM,KACJ,YACA,uBAAuB,EAAE,QAAQ,IAAI,GAC3C,EACI,EAAS,KAAK,aAAa,EAAM,EAAS,KAAK,UAAU,EACzD,MAAM,EAAQ,GAAU,EAAE,CAAC,EAC3B,IAAI,EAAS,EAAe,cAAgB,gBAC5C,GAAI,CACF,MAAM,EAAK,EAAK,QAAO,EACnB,GAAS,IACP,EACF,EAAS,KAAK,IAAI,EAAM,EAAI,EAAG,CAAC,GAAK,KAAK,IAAI,EAAM,GAAK,EAAG,EAAI,EAAG,MAAM,EAAI,cAAgB,eAE7F,EAAS,KAAK,IAAI,EAAM,GAAK,EAAG,EAAI,EAAG,OAAO,GAAK,KAAK,IAAI,EAAM,EAAI,EAAG,CAAC,EAAI,gBAAkB,aAGtG,MAAY,CACZ,CACA,MAAM,EAAQ,EAAK,MACnB,EAAM,aAAe,WACrB,EAAM,gBAAkB,EACxB,MAAM,EAAW,KAAK,IAAI,EAAG,GAAS,CAAC,EACjC,EAAU,YAAY,IAAG,EACzB,EAAQ,GAAQ,CACpB,GAAI,EAAE,QAAQ,aAAe,CAAC,EAAK,WAAY,OAC/C,MAAM,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAM,GAAW,CAAQ,CAAC,EACvD,EAAQ,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAC7B,EAAQ,EAAI,EAClB,EAAM,UAAY,EAAe,UAAU,CAAK,IAAM,UAAU,CAAK,IACrE,EAAM,QAAU,OAAO,EAAI,CAAK,EAC5B,EAAI,EACN,EAAY,sBAAsB,CAAI,EAEtC,EAAK,WAAW,YAAY,CAAI,CAEpC,EACA,EAAY,sBAAsB,CAAI,CACxC,CAAC,CACH,CACA,SAAS,GAAW,EAAM,EAAK,EAAS,CACtC,MAAO,CAAC,GAAG,EAAK,iBAAiB,CAAG,CAAC,EAAE,IAAK,GAAO,CACjD,IAAI,EAAI,EAAI,EACZ,MAAO,CAIL,KAAM,EAAG,aAAe,GACxB,SAAU,GAAM,GAAM,EAAK,EAAG,cAAc,OAAO,IAAM,KAAO,OAAS,EAAG,cAAgB,KAAO,EAAK,EAAG,cAAgB,KAAO,EAAK,GACvI,IAAK,WAAW,EAAG,aAAa,CAAO,GAAK,EAAE,EAC9C,UAAW,EAAG,aAAa,WAAW,CAC5C,CACE,CAAC,CACH,CACA,SAAS,GAAU,EAAM,EAAK,EAAS,CACrC,MAAO,CAAC,GAAG,EAAK,iBAAiB,CAAG,CAAC,EAAE,IACpC,GAAO,WAAW,EAAG,aAAa,CAAO,GAAK,EAAE,CACrD,CACA,CACA,MAAM,GAAW,+BACX,GAAe,oEAAoE,EAAQ,GAC3F,GAAe,iCAAiC,EAAQ,GACxD,GAAa,sCAAsC,EAAQ,GAC3D,GAAa,wCAAwC,EAAQ,GACnE,SAAS,GAAc,EAAG,CACxB,IAAI,EAAI,EACR,MAAM,EAAK,EAAE,QAEb,GADI,GAAG,EAAK,EAAE,YAAc,MAAgB,EAAG,aAAe,EAAG,kBAC5D,EAAK,EAAE,OAAO,QAAU,MAAgB,EAAG,SAAU,OAAO,KACjE,MAAM,EAAM,EAAG,KACT,EAAM,EAAG,KACT,EAAQ,EAAE,OAAO,UACvB,MAAI,CAAC,SAAS,CAAG,GAAK,CAAC,SAAS,CAAG,GAAK,EAAE,EAAM,IAAQ,EAAE,EAAQ,GACzD,KAEF,CAAE,IAAA,EAAK,IAAA,EAAK,MAAA,CAAK,CAC1B,CACA,SAAS,GAAgB,EAAG,EAAQ,CAClC,IAAI,EACJ,MAAM,EAAK,EAAE,QAGb,GAFI,EAAG,iBACH,CAAC,MAAM,QAAQ,EAAE,OAAO,KAAK,GAAK,EAAE,OAAO,MAAM,SAAW,IAC3D,EAAK,EAAE,OAAO,MAAM,CAAC,IAAM,MAAgB,EAAG,YAAa,OAAO,KACvE,MAAM,EAAM,EAAG,KACT,EAAM,EAAG,KACf,GAAI,CAAC,SAAS,CAAG,GAAK,CAAC,SAAS,CAAG,GAAK,EAAE,EAAM,GAAM,OAAO,KAC7D,MAAM,EAAK,EAAO,IAAK,GAAM,EAAE,GAAG,EAAE,OAAQ,GAAM,SAAS,CAAC,CAAC,EAC7D,OAAI,EAAG,OAAS,EAAU,KACnB,CAAE,IAAA,EAAK,IAAA,EAAK,IAAK,KAAK,IAAI,GAAG,CAAE,EAAG,IAAK,KAAK,IAAI,GAAG,CAAE,CAAC,CAC/D,CACA,SAAS,GAAY,EAAG,EAAG,CACzB,GAAI,CAAC,GAAK,CAAC,EAAG,OAAO,KACrB,MAAM,EAAK,EAAE,IAAM,EAAE,IACf,EAAK,EAAE,IAAM,EAAE,IACrB,MAAI,EAAE,EAAK,IAAM,EAAE,EAAK,IAAM,EAAE,EAAE,MAAQ,IAAM,EAAE,EAAE,MAAQ,GAAW,KAChE,CACL,MAAQ,IAAO,EAAE,IAAM,EAAI,EAAE,MAAQ,EAAK,EAAE,KAAO,EAAK,EAAE,MAC1D,MAAQ,IAAO,EAAE,IAAM,EAAI,EAAE,MAAQ,EAAK,EAAE,KAAO,EAAK,EAAE,KAC9D,CACA,CACA,SAAS,GAAY,EAAG,EAAG,CACzB,GAAI,CAAC,GAAK,CAAC,EAAG,OAAO,KACrB,MAAM,EAAS,EAAE,IAAM,EAAE,IACnB,EAAS,EAAE,IAAM,EAAE,IACnB,EAAS,EAAE,IAAM,EAAE,IACnB,EAAS,EAAE,IAAM,EAAE,IACzB,GAAI,CAAC,GAAU,CAAC,GAAU,EAAE,EAAS,IAAM,EAAE,EAAS,GAAI,OAAO,KACjE,MAAM,EAAU,GAAM,EAAE,KAAO,EAAI,EAAE,KAAO,EAAS,EAC/C,EAAU,GAAM,EAAE,KAAO,EAAI,EAAE,KAAO,EAAS,EACrD,MAAO,CACL,MAAQ,GAAM,EAAE,KAAO,EAAO,CAAC,EAAI,EAAE,KAAO,EAAS,EACrD,MAAQ,GAAM,EAAE,KAAO,EAAO,CAAC,EAAI,EAAE,KAAO,EAAS,CACzD,CACA,CACA,SAAS,GAAkB,EAAG,CAC5B,MAAM,EAAK,EAAE,QAEb,GADA,EAAG,gBAAkB,KACjB,CAAC,EAAG,YAAc,CAAC,EAAY,UAAS,EAAI,OAChD,MAAM,EAAO,EAAE,IAAI,OACnB,GAAK,EAAQ,cAAc,CAAI,EAC/B,GAAI,CACF,MAAM,EAAU,GAAW,EAAM,GAAc,GAAG,EAClD,EAAG,gBAAkB,CACnB,QAAS,GAAW,EAAM,GAAc,GAAG,EAC3C,QAAA,EACA,MAAO,GAAU,EAAM,GAAY,IAAI,EACvC,MAAO,GAAU,EAAM,GAAY,IAAI,EAKvC,OAAQ,GAAc,CAAC,EACvB,SAAU,GAAgB,EAAG,CAAO,CAC1C,CACE,MAAY,CACV,EAAG,gBAAkB,IACvB,CACF,CACA,SAAS,GAAS,EAAG,EAAM,EAAU,EAAM,CACzC,MAAM,EAEJ,EAAK,MAEP,EAAM,QAAU,IAChB,GACE,EACA,EACA,EACC,GAAU,CACT,EAAM,QAAU,OAAO,CAAK,CAC9B,EACA,IAAM,CACJ,EAAM,QAAU,EAClB,CACJ,CACA,CACA,SAAS,GAAS,EAAG,EAAM,EAAO,EAAM,EAAI,EAAU,EAAM,CAC1D,EAAM,QAAS,GAAM,EAAK,aAAa,EAAG,OAAO,CAAI,CAAC,CAAC,EACvD,GACE,EACA,EACA,EACC,GAAU,CACT,MAAM,EAAI,OAAO,GAAQ,EAAK,GAAQ,CAAK,EAC3C,EAAM,QAAS,GAAM,EAAK,aAAa,EAAG,CAAC,CAAC,CAC9C,EACA,IAAM,CACJ,EAAM,QAAS,GAAM,EAAK,aAAa,EAAG,OAAO,CAAE,CAAC,CAAC,CACvD,CACJ,CACA,CACA,SAAS,GAAW,EAAG,CAAE,SAAA,EAAU,QAAA,EAAS,MAAA,EAAO,KAAA,EAAM,GAAA,EAAI,SAAA,EAAU,KAAA,CAAI,EAAI,CAC7E,MAAM,EAAS,EAAS,WACxB,GAAI,CAAC,EAAQ,OACb,MAAM,EAEJ,EAAS,UAAU,EAAI,EAKzB,GAHA,EAAM,UAAU,IAAI,uBAAuB,EAC3C,EAAM,aAAa,iBAAkB,MAAM,EAC3C,EAAM,gBAAgB,IAAI,EACtB,IAAY,OAAQ,CACtB,MAAM,EAAQ,EAAM,cAAc,OAAO,EACrC,EAAO,EAAM,YAAc,EAC1B,EAAM,YAAc,EACzB,MAAM,EAAQ,EAAM,cAAc,OAAO,EACrC,IAAO,EAAM,YAAc,EACjC,CACA,EAAM,QAAS,GAAM,EAAM,aAAa,EAAG,OAAO,CAAI,CAAC,CAAC,EACxD,MAAM,EAEJ,EAAM,MAER,EAAM,QAAU,IAChB,EAAO,YAAY,CAAK,EACxB,GACE,EACA,EACA,EACC,GAAU,CACT,MAAM,EAAI,OAAO,GAAQ,EAAK,GAAQ,CAAK,EAC3C,EAAM,QAAS,GAAM,EAAM,aAAa,EAAG,CAAC,CAAC,EAC7C,EAAM,QAAU,OAAO,EAAI,CAAK,CAClC,EACA,IAAM,CACA,EAAM,YAAY,EAAM,WAAW,YAAY,CAAK,CAC1D,CACJ,CACA,CACA,MAAM,GAAa,GACnB,SAAS,GAAe,EAAG,CACzB,UAAA,EACA,UAAA,EACA,QAAA,EACA,SAAA,EACA,SAAA,EACA,UAAA,EACA,SAAA,EACA,KAAA,EACA,QAAA,CACF,EAAG,CACD,MAAM,EAA4B,IAAI,IACtC,EAAU,QAAQ,CAAC,EAAG,IAAM,CACrB,EAAU,IAAI,EAAE,IAAI,GAAG,EAAU,IAAI,EAAE,KAAM,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CAAE,EAAA,CAAC,CAAE,CAAC,CAC/F,CAAC,EACD,MAAM,EAA6B,IAAI,IACjC,EAAkB,EAAS,SAAW,EAAU,OAChD,EAAkB,EAAS,SAAW,EAAU,OAChD,EAAS,EAAU,IAAK,GAAM,EAAE,GAAG,EAAE,OACzC,EAAU,IAAK,GAAM,WAAW,EAAE,aAAa,CAAO,GAAK,EAAE,CAAC,CAClE,EAAI,OAAQ,GAAM,SAAS,CAAC,CAAC,EACrB,EAAS,KAAK,IAAI,GAAG,CAAM,EAC3B,EAAS,KAAK,IAAI,GAAG,CAAM,EAC3B,EAAS,KAAK,IAAI,IAAK,EAAS,GAAU,GAAI,EAC9C,EAAS,GAAM,KAAK,IAAI,EAAS,EAAQ,KAAK,IAAI,EAAS,EAAQ,CAAC,CAAC,EACrE,EAAkB,CAAC,EAAM,IAAQ,CACrC,GAAI,CAAC,EAAM,OACX,MAAM,EAAS,WAAW,EAAK,aAAa,EAAU,CAAC,CAAC,GAAK,EAAE,EACzD,EAAW,EAAS,EAAI,CAAC,EAC3B,SAAS,CAAM,GAAK,SAAS,CAAQ,GACvC,GAAS,EAAG,EAAM,EAAW,EAAU,EAAQ,EAAU,CAAI,CAEjE,EA+CA,GA9CA,EAAU,QAAQ,CAAC,EAAO,IAAM,CAC9B,MAAM,EAAK,WAAW,EAAM,aAAa,CAAO,GAAK,EAAE,EACjD,EAAM,EAAU,IAAI,EAAM,aAAe,EAAE,EAC3C,EAAO,EAAkB,EAAS,CAAC,EAAI,KACzC,GAAK,EAAW,IAAI,EAAI,CAAC,EAC7B,MAAM,EAAiB,EAAM,aAAa,WAAW,EACrD,GAAI,CAAC,GAAO,CAAC,SAAS,EAAI,GAAG,EAAG,CAC9B,GAAI,CAAC,EAAK,CACR,GAAI,GAAW,SAAS,CAAE,GAAK,CAAC,EAAgB,CAC9C,MAAM,EAAO,SAAS,EAAQ,MAAM,CAAE,CAAC,EAAI,EAAM,EAAQ,MAAM,CAAE,CAAC,EAAI,IAClE,SAAS,CAAI,GAAK,KAAK,IAAI,EAAO,CAAE,EAAI,KAC1C,GAAS,EAAG,EAAO,CAAC,CAAO,EAAG,EAAM,EAAI,EAAU,CAAI,EAClD,GAAM,GAAS,EAAG,EAAM,EAAW,EAAM,EAAI,EAAU,CAAI,EAEnE,CACA,GAAS,EAAG,EAAO,EAAU,CAAI,EAC7B,GAAM,GAAS,EAAG,EAAM,EAAU,CAAI,CAC5C,CACA,MACF,CACA,GAAI,GAAC,SAAS,CAAE,GAAK,KAAK,IAAI,EAAI,IAAM,CAAE,EAAI,IAC9C,IAAI,GAAkB,EAAI,UAAW,CACnC,MAAM,EAAQ,EAAI,IAAM,EACxB,GAAI,SAAS,CAAK,EAAG,CACnB,MAAM,EAAO,GAAkB,GAC/B,GACE,EACA,EACA,EACC,GAAU,CACT,MAAM,EAAI,GAAS,EAAI,GACjB,EAAI,IAAY,IAAM,aAAa,CAAC,MAAQ,eAAe,CAAC,IAClE,EAAM,aAAa,YAAa,GAAG,CAAC,IAAI,CAAI,GAAG,KAAI,CAAE,CACvD,EACA,IAAM,CACA,EAAM,EAAM,aAAa,YAAa,CAAI,EACzC,EAAM,gBAAgB,WAAW,CACxC,CACV,CACM,CACA,EAAgB,EAAM,CAAG,EACzB,MACF,CACA,GAAS,EAAG,EAAO,CAAC,CAAO,EAAG,EAAI,IAAK,EAAI,EAAU,CAAI,EACzD,EAAgB,EAAM,CAAG,EAC3B,CAAC,EACG,CAAC,GAAW,CAAC,EAAU,OAAQ,OACnC,IAAI,EAAS,EACb,EAAU,QAAQ,CAAC,EAAK,IAAM,CAG5B,GAFI,EAAW,IAAI,CAAC,GAChB,CAAC,SAAS,EAAI,GAAG,GAAK,EAAI,WAC1B,GAAU,GAAY,OAC1B,MAAM,EAAQ,EAAQ,MAAM,EAAI,GAAG,EAC/B,CAAC,SAAS,CAAK,GAAK,KAAK,IAAI,EAAQ,EAAI,GAAG,EAAI,KACpD,IACA,GAAW,EAAG,CACZ,SAAU,EAAU,CAAC,EACrB,QAAS,EAAI,QACb,MAAO,CAAC,CAAO,EACf,KAAM,EAAI,IACV,GAAI,EAAM,CAAK,EACf,SAAA,EACA,KAAA,CACN,CAAK,EACG,GAAmB,EAAS,QAAU,SAAS,EAAS,CAAC,CAAC,GAC5D,GAAW,EAAG,CACZ,SAAU,EAAS,CAAC,EACpB,MAAO,EACP,KAAM,EAAS,CAAC,EAChB,GAAI,EAAM,EAAQ,MAAM,EAAS,CAAC,CAAC,CAAC,EACpC,SAAA,EACA,KAAA,CACR,CAAO,EAEL,CAAC,CACH,CACA,SAAS,GAAoB,EAAG,CAC9B,MAAM,EAAK,EAAE,QACP,EAAS,EAAG,gBAOlB,GANA,EAAG,gBAAkB,KACjB,CAAC,GAAU,CAAC,EAAG,YAAc,CAAC,EAAY,UAAS,GACnD,CAAC,GAAwB,CAAC,GAI1B,EAHe,EAAE,WAAW,QAAU,CAAA,GAAI,KAC5C,CAAC,EAAG,IAAM,GAAW,EAAG,EAAG,GAAM,EAAI,IAAM,IAC/C,EACkB,OAChB,MAAM,EAAO,EAAE,IAAI,OACnB,GAAI,CAAC,EAAQ,cAAc,CAAI,EAAG,OAClC,MAAM,EAAW,KAAK,IAAI,EAAG,EAAE,OAAO,MAAM,WAAW,iBAAiB,OAAS,CAAC,EAC5E,EAAO,GAAY,CAAC,EAC1B,GAAI,CACF,MAAM,EAAa,CAAC,GAAG,EAAK,iBAAiB,EAAY,CAAC,EACpD,EAAQ,GAAY,EAAO,OAAQ,GAAc,CAAC,CAAC,EACnD,EAAQ,GACZ,EAAO,SACP,GACE,EACA,EAAW,IAAK,IAAQ,CACtB,IAAK,WAAW,EAAG,aAAa,GAAG,GAAK,EAAE,CACpD,EAAU,CACV,CACA,EACI,GAAe,EAAG,CAChB,UAAW,CAAC,GAAG,EAAK,iBAAiB,EAAY,CAAC,EAClD,UAAW,EAAO,QAClB,QAAS,IACT,SAAU,CAAC,GAAG,EAAK,iBAAiB,EAAU,CAAC,EAC/C,SAAU,EAAO,MACjB,UAAW,CAAC,KAAM,IAAI,EACtB,SAAA,EACA,KAAA,EACA,QAAS,CACf,CAAK,EACD,GAAe,EAAG,CAChB,UAAW,EACX,UAAW,EAAO,QAClB,QAAS,IACT,SAAU,CAAC,GAAG,EAAK,iBAAiB,EAAU,CAAC,EAC/C,SAAU,EAAO,MACjB,UAAW,CAAC,KAAM,IAAI,EACtB,SAAA,EACA,KAAA,EACA,QAAS,CACf,CAAK,CACH,MAAY,CACZ,CACF,CACA,MAAM,GAAe,wCACf,GAAc,wBACpB,SAAS,GAAuB,EAAG,CACjC,IAAI,EAAI,EACR,MAAM,EAAK,EAAE,OAAO,WACpB,MAAO,CAAC,GAAI,EAA2B,GAAG,UAAY,MAAgB,EAAG,UAAc,EAA2B,GAAG,UAAY,MAAgB,EAAG,QACtJ,CACA,SAAS,GAAW,EAAG,CACrB,GAAI,CAAC,SAAS,CAAC,EAAG,MAAO,GACzB,MAAM,EAAI,OAAO,KAAK,IAAI,CAAC,CAAC,EACtB,EAAI,EAAE,QAAQ,GAAG,EACvB,GAAI,IAAM,GAAI,CACZ,MAAM,EAAW,EAAE,MAAM,EAAG,CAAC,EACvB,EAAM,SAAS,EAAE,MAAM,EAAI,CAAC,EAAG,EAAE,EACjC,EAAO,EAAS,QAAQ,GAAG,EAC3B,EAAc,IAAS,GAAK,EAAI,EAAS,OAAS,EAAO,EAC/D,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,EAAc,CAAG,CAAC,CACnD,CACA,MAAM,EAAM,EAAE,QAAQ,GAAG,EACzB,OAAO,IAAQ,GAAK,EAAI,KAAK,IAAI,EAAG,EAAE,OAAS,EAAM,CAAC,CACxD,CACA,SAAS,GAAW,EAAQ,EAAG,CAC7B,MAAM,EAAQ,EAAO,cAAc,OAAO,EACtC,EAAO,EAAM,YAAc,EAC1B,EAAO,YAAc,CAC5B,CACA,SAAS,GAAkB,EAAG,CAC5B,MAAM,EAAK,EAAE,QAGb,GAFA,EAAG,eAAiB,KAChB,CAAC,EAAG,YAAc,CAAC,EAAY,UAAS,GACxC,CAAC,GAAuB,CAAC,EAAG,OAChC,MAAM,EAAO,EAAE,IAAI,OACnB,GAAK,EAAQ,cAAc,CAAI,EAC/B,GAAI,CACF,MAAM,EAAsB,IAAI,IAChC,EAAK,iBAAiB,EAAY,EAAE,QAAS,GAAU,CACrD,MAAM,EAAM,EAAM,aAAa,YAAY,EAC3C,GAAI,CAAC,EAAK,OACV,MAAM,EAAS,EAAM,cAAc,EAAW,EACzC,GACL,EAAI,IAAI,EAAK,CACX,GAAI,WAAW,EAAO,aAAa,IAAI,GAAK,EAAE,EAC9C,GAAI,WAAW,EAAO,aAAa,IAAI,GAAK,EAAE,EAC9C,IAAK,WAAW,EAAM,aAAa,YAAY,GAAK,EAAE,CAC9D,CAAO,CACH,CAAC,EACD,EAAG,eAAiB,EAAI,KAAO,EAAM,IACvC,MAAY,CACV,EAAG,eAAiB,IACtB,CACF,CACA,SAAS,GAAO,EAAG,EAAM,EAAU,EAAM,CACvC,MAAM,EAEJ,EAAK,MAEP,EAAM,QAAU,IAChB,GACE,EACA,EACA,EACC,GAAU,CACT,EAAM,QAAU,OAAO,CAAK,CAC9B,EACA,IAAM,CACJ,EAAM,QAAU,EAClB,CACJ,CACA,CACA,SAAS,GAAyB,EAAG,CACnC,IAAI,EAAI,EACR,MAAM,EAAK,EAAE,QACP,EAAO,EAAG,eAIhB,GAHA,EAAG,eAAiB,KAChB,CAAC,GAAQ,CAAC,EAAG,YAAc,CAAC,EAAY,UAAS,GACjD,CAAC,GAAuB,CAAC,GACzB,CAAC,GAAwB,CAAC,EAAG,OACjC,MAAM,EAAO,EAAE,IAAI,OACnB,GAAI,CAAC,EAAQ,cAAc,CAAI,EAAG,OAClC,MAAM,EAAK,EAAE,OAAO,WACd,EAAO,CAAC,GAAG,EAAK,EAAG,UAAY,MAAgB,EAAG,SAClD,EAAU,CAAC,GAAG,EAAK,EAAG,UAAY,MAAgB,EAAG,SACrD,EAAY,EAAG,UACf,EAAW,KAAK,IAAI,EAAG,EAAE,OAAO,MAAM,WAAW,iBAAiB,OAAS,CAAC,EAC5E,EAAO,GAAY,CAAC,EAC1B,GAAI,CACF,EAAK,iBAAiB,EAAY,EAAE,QAAS,GAAU,CACrD,MAAM,EAAM,EAAM,aAAa,YAAY,EAC3C,GAAI,CAAC,EAAK,OACV,MAAM,EAAS,EAAM,cAAc,EAAW,EAC9C,GAAI,CAAC,EAAQ,OACb,MAAM,EAAM,EAAK,IAAI,CAAG,EACxB,GAAI,EACF,GAAI,GAAO,SAAS,EAAI,EAAE,GAAK,SAAS,EAAI,EAAE,EAAG,CAC/C,MAAM,EAAQ,WAAW,EAAO,aAAa,IAAI,GAAK,EAAE,EAClD,EAAQ,WAAW,EAAO,aAAa,IAAI,GAAK,EAAE,EAClD,EAAK,EAAI,GAAK,EACd,EAAK,EAAI,GAAK,EACpB,GAAI,SAAS,CAAE,GAAK,SAAS,CAAE,GAAK,KAAK,IAAI,CAAE,EAAI,KAAK,IAAI,CAAE,EAAI,GAAK,CACrE,MAAM,EAAO,EAAM,aAAa,WAAW,GAAK,GAChD,GACE,EACA,EACA,EACC,GAAU,CACT,MAAM,EAAI,EAAI,EACd,EAAM,aACJ,YACA,aAAa,EAAK,CAAC,IAAI,EAAK,CAAC,KAAK,CAAI,GAAG,KAAI,CAC/D,CACc,EACA,IAAM,CACJ,EAAM,aAAa,YAAa,CAAI,CACtC,CACd,CACU,CACF,MAAY,GACV,GAAO,EAAG,EAAO,EAAU,CAAI,EAGnC,GAAI,GAAW,GAAO,SAAS,EAAI,GAAG,EAAG,CACvC,MAAM,EAAS,WAAW,EAAM,aAAa,YAAY,GAAK,EAAE,EAChE,GAAI,SAAS,CAAM,GAAK,KAAK,IAAI,EAAS,EAAI,GAAG,EAAI,KAAM,CACzD,MAAM,EAAO,EAAI,IACX,EAAM,KAAK,IAAI,GAAW,CAAI,EAAG,GAAW,CAAM,CAAC,EACnD,EAAY,SAAS,EAAK,EAAE,EAC5B,EAAI,SAAS,EAAM,aAAa,UAAU,GAAK,GAAI,EAAE,EACrD,EAAU,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CACnD,YAAa,EACb,eAAgB,SAAS,CAAC,EAAI,EAAI,EAClC,EAAA,CACZ,CAAW,EACK,EAAU,GAAM,CACpB,MAAM,EAAU,OAAO,EAAE,QAAQ,CAAG,CAAC,EACrC,IAAI,EAAM,EACV,GAAI,OAAO,GAAc,WACvB,GAAI,CACF,EAAM,EAAU,EAAS,CAAO,CAClC,MAAY,CACV,EAAM,CACR,CAEF,OAAO,OAAO,CAAG,CACnB,EACA,GACE,EACA,EACA,EACC,GAAU,CACT,GAAW,EAAQ,EAAO,GAAQ,EAAS,GAAQ,CAAK,CAAC,CAC3D,EACA,IAAM,CACJ,GAAW,EAAQ,EAAO,CAAM,CAAC,CACnC,CACZ,CACQ,CACF,CACF,CAAC,CACH,MAAY,CACZ,CACF,CACA,MAAM,EAAO,CAKX,YAAY,EAAG,CACb,iBAAA,EAAmB,OACnB,wBAAA,EAA0B,OAC1B,aAAA,EAAe,MACnB,EAAM,CAAA,EAAI,CACN,KAAK,EAAI,EACT,KAAK,kBAAoB,GAAoB,KAC7C,KAAK,yBAA2B,GAA2B,KAC3D,KAAK,cAAgB,GAAgB,KACrC,KAAK,oBAAsB,2BAC7B,CACA,kBAAmB,CACjB,MAAM,EAAI,KAAK,EACX,EAAE,QAAQ,kBACZ,OAAO,EAAE,QAAQ,gBAAgB,aACjC,OAAO,EAAE,QAAQ,gBAAgB,mBAErC,CACA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACT,EAAW,eACjB,OAAK,EAAE,QAAQ,gBAAgB,CAAQ,IACrC,EAAE,QAAQ,gBAAgB,CAAQ,EAClC,EAAE,IAAI,OAAO,uBAAuB,mBAAmB,GAElD,EAAE,QAAQ,gBAAgB,CAAQ,CAC3C,CAIA,gBAAgB,EAAY,CAC1B,OAAO,KAAK,EAAE,IAAI,OAAO,cACvB,oDAAoD,EAAQ,aAC1D,CACR,CAAO,IACP,CACE,CAIA,eAAe,EAAY,CACzB,IAAI,EAEJ,MAAM,EADgB,KAAK,gBAAgB,CAAU,EAK/C,EAAY,UAAU,EAAK,EAAG,aAAa,gBAAgB,IAAM,KAAO,EAAK,IAAK,EAAE,EAE1F,MAAO,CAAE,SADQ,EAAG,UAAU,SAAS,6BAA6B,EACjD,UAAA,CAAS,CAC9B,CAKA,0BAA0B,EAAU,EAAO,CACzC,GAAO,0BAA0B,KAAK,EAAG,EAAU,CAAK,CAC1D,CAMA,OAAO,0BAA0B,EAAG,EAAU,EAAO,CACnD,SAAS,EAA4B,EAAQ,CAC3C,QAAS,EAAK,EAAG,EAAK,EAAO,OAAQ,IAC/B,EAAO,CAAE,EAAE,QAAU,GACvB,EAAS,KAAK,UAAU,IAAI,6BAA6B,CAG/D,CACA,EAA4B,EAAE,QAAQ,eAAe,EACrD,EAA4B,EAAE,QAAQ,wBAAwB,CAChE,CAIA,aAAa,EAAY,CACvB,IAAI,EACJ,MAAM,EAAiB,KAAK,eAAe,CAAU,EACrD,OAAC,EAAK,KAAK,oBAAsB,MAAgB,EAAG,KAAK,KAAM,EAAe,UAAW,EAAe,QAAQ,EACzG,EAAe,QACxB,CAIA,WAAW,EAAY,CACrB,IAAI,EACJ,MAAM,EAAiB,KAAK,eAAe,CAAU,EACjD,EAAe,YAChB,EAAK,KAAK,oBAAsB,MAAgB,EAAG,KAAK,KAAM,EAAe,UAAW,EAAI,EAEjG,CAIA,WAAW,EAAY,CACrB,IAAI,EACJ,MAAM,EAAiB,KAAK,eAAe,CAAU,EAChD,EAAe,WACjB,EAAK,KAAK,oBAAsB,MAAgB,EAAG,KAAK,KAAM,EAAe,UAAW,EAAK,CAElG,CAUA,mBAAoB,CAClB,MAAM,EAAI,KAAK,EACf,KAAK,iBAAgB,EACrB,EAAE,QAAQ,cAAgB,CAAA,EAC1B,EAAE,QAAQ,gBAAkB,CAAA,EAC5B,EAAE,QAAQ,yBAA2B,CAAA,EACrC,EAAE,QAAQ,uBAAyB,CAAA,EACnC,EAAE,QAAQ,gCAAkC,CAAA,CAC9C,CACA,YAAY,EAAoB,GAAM,EAAkB,GAAM,EAAuB,GAAM,CACzF,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACf,KAAK,iBAAgB,EACrB,IAAI,EAAS,EAAQ,MAAM,EAAE,QAAQ,aAAa,EAClD,EAAE,QAAQ,cAAgB,CAAA,EACtB,GACF,EAAE,QAAQ,gBAAkB,CAAA,EAC5B,EAAE,QAAQ,yBAA2B,CAAA,EACrC,EAAE,QAAQ,uBAAyB,CAAA,EACnC,EAAE,QAAQ,gCAAkC,CAAA,GAE5C,EAAS,KAAK,qBAAqB,CAAM,EAE3C,EAAE,OAAO,OAAS,EACd,IACE,IACF,EAAE,SAAS,OAAS,IACnB,EAAK,KAAK,2BAA6B,MAAgB,EAAG,KAAK,IAAI,IAErE,EAAK,KAAK,gBAAkB,MAAgB,EAAG,KAC9C,KACA,EACA,EAAE,OAAO,MAAM,WAAW,iBAAiB,OACnD,EAEE,CAIA,qBAAqB,EAAQ,CAC3B,MAAM,EAAI,KAAK,EACf,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAC7B,EAAE,QAAQ,uBAAuB,QAAQ,CAAC,EAAI,KAC5C,EAAO,CAAC,GAAK,OAAO,EAAO,CAAC,GAAM,SACpC,EAAO,CAAC,EAAE,KAAO,CAAA,EAEjB,EAAO,CAAC,EAAI,GAIlB,OAAO,CACT,CAOA,oBAAqB,CACnB,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,OAAO,QAAU,CAAA,EAC5B,EAAS,EAAE,OAAO,QAAU,CAAA,EAClC,OAAO,EAAO,IAAI,CAAC,EAAG,IAChB,GAAK,OAAO,GAAM,UAAY,EAAE,MAAQ,KAAa,OAAO,EAAE,IAAI,EAC/D,EAAO,CAAC,GAAK,KAAO,OAAO,EAAO,CAAC,CAAC,EAAI,UAAU,EAAI,CAAC,EAC/D,CACH,CAWA,0BAA2B,CACzB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAW,KAAK,mBAAkB,EAClC,EAAa,GAAY,CAC7B,MAAM,EAAc,CAAA,EACd,EAAc,CAAA,EACpB,OAAA,EAAQ,QAAS,GAAQ,CACvB,MAAM,EAAI,GAAO,EAAI,MAAQ,KAAO,EAAS,QAAQ,EAAI,IAAI,EAAI,EAAI,MACrE,GAAI,GAAK,MAAQ,EAAI,GAAK,GAAK,EAAE,OAAO,OAAO,OAAQ,OACvD,MAAM,EAEJ,EAAE,OAAO,OAAO,CAAC,EAEnB,EAAI,MAAQ,EACZ,EAAI,KAAO,EAAG,WAAa,GAAK,EAAE,KAAO,EAAE,KAAK,MAAK,EAAK,CAAA,EAAK,EAC/D,EAAY,KAAK,CAAG,EACpB,EAAY,KAAK,CAAC,CACpB,CAAC,EACM,CAAE,QAAS,EAAa,QAAS,CAAW,CACrD,EACM,EAAO,EAAU,EAAG,eAAe,EACzC,EAAG,gBAAkB,EAAK,QAC1B,EAAG,uBAAyB,EAAK,QACjC,MAAM,EAAM,EAAU,EAAG,wBAAwB,EACjD,EAAG,yBAA2B,EAAI,QAClC,EAAG,gCAAkC,EAAI,QACzC,EAAG,mBAAqB,EAAG,gBAAgB,OAAS,EAAG,yBAAyB,SAAW,EAAE,OAAO,OAAO,OAC3G,KAAK,qBAAqB,EAAE,OAAO,MAAM,CAC3C,CAYA,cAAc,EAAK,CACjB,MAAM,EAAI,KAAK,EAAE,QAAQ,eACrB,GAAK,EAAE,OAAS,UAAY,OAAO,EAAE,SAAY,YACnD,EAAE,QAAQ,CAAG,CAEjB,CAIA,gBAAgB,EAAY,CAC1B,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAgB,KAAK,gBAAgB,CAAU,EAC/C,EAAY,UACf,EAAsC,GAAc,aAAa,gBAAgB,IAAM,KAAO,EAAK,GACpG,EACN,EACU,EAAW,qBACjB,IAAI,EAAe,EAAE,QAAQ,gBAAgB,CAAQ,EAChD,IACH,EAAe,EAAE,IAAI,OAAO,iBAC1B,+DACR,EACM,EAAE,QAAQ,gBAAgB,CAAQ,EAAI,GAExC,IAAI,EAAW,KACX,EAAc,KACd,EAAU,KACd,GAAI,EAAE,QAAQ,YAAc,EAAE,OAAO,MAAM,OAAS,YAClD,GAAI,EAAE,QAAQ,WAAY,CACxB,EAAW,EAAE,IAAI,OAAO,cACtB,wCAAwC,CAAS,IAC3D,EACQ,EAAc,EAAE,IAAI,OAAO,cACzB,4CAA4C,CAAS,IAC/D,EACQ,MAAM,EAAa,EAAE,QAAQ,sBAAsB,CAAS,EAC5D,EAAU,EAAE,IAAI,OAAO,cACrB,0BAA0B,CAAU,IAC9C,CACM,MACE,EAAW,EAAE,IAAI,OAAO,cACtB,2BAA2B,EAAY,CAAC,IAClD,OAGM,EAAW,EAAE,IAAI,OAAO,cACtB,2BAA2B,EAAY,CAAC,SAChD,EAEI,QAAS,EAAK,EAAG,EAAK,EAAa,OAAQ,IAGvC,EAAa,CAAE,EAEX,UAAU,IAAI,KAAK,mBAAmB,EAE9C,GAAI,EAAU,CACZ,GAAI,CAAC,EAAE,QAAQ,WAAY,CACzB,MAAM,EAEJ,EAAS,WAEiB,GAAS,UAAU,OAAO,KAAK,mBAAmB,CAChF,CACA,EAAS,UAAU,OAAO,KAAK,mBAAmB,EAC9C,IAAgB,MAClB,EAAY,UAAU,OAAO,KAAK,mBAAmB,EAEnD,IAAY,MACd,EAAQ,UAAU,OAAO,KAAK,mBAAmB,CAErD,KACE,SAAS,EAAK,EAAG,EAAK,EAAa,OAAQ,IAGvC,EAAa,CAAE,EAEX,UAAU,OAAO,KAAK,mBAAmB,EAGnD,KAAK,cACH,GAAY,CAAC,OAAO,MAAM,CAAS,EAAI,CAAE,OAAQ,EAAW,QAAS,EAAG,EAAK,IACnF,CACE,CAKA,oBAAoB,EAAG,EAAe,CACpC,MAAM,EAAI,KAAK,EACV,IAAe,EAAgB,EAAE,QACtC,MAAM,EAAe,EAAE,IAAI,OAAO,iBAChC,+DACN,EACI,GAAI,EAAE,OAAS,YAAa,CAC1B,MAAM,EAAY,SAAS,EAAc,aAAa,KAAK,EAAG,EAAE,EAAI,EACpE,KAAK,gBAAgB,EAAE,WAAW,YAAY,CAAS,CAAC,CAC1D,SAAW,EAAE,OAAS,WAAY,CAChC,QAAS,EAAK,EAAG,EAAK,EAAa,OAAQ,IACzC,EAAa,CAAE,EAAE,UAAU,OAAO,KAAK,mBAAmB,EAE5D,KAAK,cAAc,IAAI,CACzB,CACF,CAWA,uBAAuB,EAAY,EAAQ,CACzC,MAAM,EAAI,KAAK,EACT,EAAqB,EAAE,IAAI,OAAO,uBACtC,yBACN,EACU,EAAqB,GAAO,CAChC,QAAS,EAAI,EAAG,EAAI,EAAmB,OAAQ,IAAK,CAClD,MAAM,EAEJ,EAAmB,CAAC,EAAE,UAEpB,OAAO,EAAU,CAAE,GAAM,YAC3B,EAAU,CAAE,EAAE,KAAK,mBAAmB,CAE1C,CACF,EACA,GAAI,IAAW,QAAS,CACtB,EAAkB,QAAQ,EAC1B,MACF,CACA,MAAM,EAAS,EAAE,OAAO,YAAY,QAAQ,WAAW,OACjD,EAAQ,GAAU,EAAO,CAAU,EACzC,GAAK,EACL,CAAA,EAAkB,KAAK,EACvB,QAAS,EAAI,EAAG,EAAI,EAAmB,OAAQ,IAAK,CAClD,MAAM,EAAM,OAAO,EAAmB,CAAC,EAAE,aAAa,KAAK,CAAC,EACxD,GAAO,EAAM,MAAQ,GAAO,EAAM,IACpC,EAAmB,CAAC,EAAE,UAAU,OAAO,KAAK,mBAAmB,CAEnE,EACF,CAIA,2BAA2B,EAAQ,MAAO,EAAa,CAAA,EAAI,CACzD,MAAM,EAAI,KAAK,EACf,IAAI,EAAc,EAClB,GAAI,EAAE,OAAO,OAAO,OAAS,EAAG,CAC9B,MAAM,EAAoB,EAAE,OAAO,OAAO,IAAI,CAAC,EAAG,IAAU,CAC1D,MAAM,EAAiB,IACjB,EAAE,QAAQ,YACL,EAAW,SAAW,GAAK,EAAW,QAAU,EAAW,QAEhE,EAAE,OAAO,OAAO,CAAK,EAAE,IACrC,EAAgB,GAEC,GAOT,OAHE,EAAE,MACF,EAAE,KAAK,OAAS,GAAK,EAAE,QAAQ,uBAAuB,QAAQ,CAAK,IAAM,IAEzD,EAAc,EAAK,EAAQ,EAC/C,CAAC,EACD,QAAS,EAAI,IAAU,MAAQ,EAAI,EAAkB,OAAS,EAAG,IAAU,MAAQ,EAAI,EAAkB,OAAS,GAAK,EAAG,IAAU,MAAQ,IAAM,IAChJ,GAAI,EAAkB,CAAC,IAAM,GAAI,CAC/B,EAAc,EAAkB,CAAC,EACjC,KACF,CAEJ,CACA,OAAO,CACT,CACA,qBAAsB,CAEpB,OADU,KAAK,EACT,QAAQ,YACL,KAAK,EAAE,OAAO,OAAO,IAAI,CAAC,EAAG,IAC3B,EAAE,OAAS,OAAS,EAAE,OAAS,SAAW,EAAI,EACtD,EAAE,OAAQ,GACF,IAAM,EACd,EAEI,KAAK,EAAE,OAAO,OAAO,IAAI,CAAC,EAAG,IAC3B,CACR,CACH,CACA,kBAAmB,CACjB,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EAIf,GAHA,GAAmB,CAAC,EACpB,GAAkB,CAAC,EACnB,GAAkB,CAAC,EACf,CAAC,EAAE,QAAQ,WAAY,CACzB,EAAE,QAAQ,cAAgB,EAAE,WAAW,OACvC,MACF,CACA,GAAI,CAAC,EAAQ,cAAc,EAAE,IAAI,MAAM,EAAG,CACxC,EAAE,QAAQ,cAAgB,CAAA,EAC1B,MACF,CACA,EAAE,QAAQ,cAAgB,CAAA,EAC1B,SAAS,EAAU,EAAW,EAAG,EAAM,CACrC,MAAM,EAAQ,EAAU,CAAC,EAAE,WACrB,EAAO,CACX,KAAA,EACA,MAEE,CAAA,EAEF,UAAW,EAAU,CAAC,EAAE,aAAa,gBAAgB,CAC7D,EACM,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,GAAI,EAAM,CAAC,EAAE,aAAa,QAAQ,EAAG,CACnC,MAAM,EAAI,EAAM,CAAC,EAAE,aAAa,QAAQ,EACxC,EAAK,MAAM,KAAK,CACd,EAAA,EACA,IAAK,EAAM,CAAC,EAAE,aAAa,cAAc,EACzC,KAAM,EAAM,CAAC,EAAE,aAAa,MAAM,CAC9C,CAAW,CACH,CAEF,EAAE,QAAQ,cAAc,KAAK,CAAI,CACnC,CACA,MAAM,EAAY,GACT,EAAE,IAAI,OAAO,iBAClB,eAAe,CAAS,4BAChC,EAEuB,CACjB,OACA,OACA,MACA,WACA,YACA,cACA,OACN,EACe,QAAS,GAAS,CAC3B,MAAM,EAAQ,EAAS,CAAI,EAC3B,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,EAAU,EAAO,EAAG,CAAI,CAE5B,CAAC,EACD,MAAM,EAAiB,EAAE,IAAI,OAAO,iBAClC,eAAe,EAAE,OAAO,MAAM,IAAI,qBACxC,EACI,GAAI,EAAe,OAAS,EAC1B,QAAS,EAAI,EAAG,EAAI,EAAe,OAAQ,IAAK,CAC9C,MAAM,EAAY,EAAE,IAAI,OAAO,iBAC7B,eAAe,EAAE,OAAO,MAAM,IAAI,yCAAyC,CAAC,SACtF,EACc,EAAO,CAAA,EACb,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IAAK,CACzC,MAAM,EAAW,GAGb,EAAU,CAAC,EAAE,aAAa,CAAC,EAGzB,EAAO,CACX,EAAG,YAAY,EAAK,EAAQ,GAAG,IAAM,KAAO,EAAK,GAAG,EACpD,EAAG,YAAY,EAAK,EAAQ,GAAG,IAAM,KAAO,EAAK,GAAG,EACpD,MAAO,YAAY,EAAK,EAAQ,OAAO,IAAM,KAAO,EAAK,GAAG,EAC5D,OAAQ,YAAY,EAAK,EAAQ,QAAQ,IAAM,KAAO,EAAK,GAAG,CAC1E,EACU,EAAK,KAAK,CACR,KAAA,EACA,MAAO,EAAU,CAAC,EAAE,aAAa,OAAO,CACpD,CAAW,CACH,CACA,EAAE,QAAQ,cAAc,KAAK,CAAI,CACnC,CAEJ,CACA,oBAAqB,CACnB,MAAM,EAAI,KAAK,EACf,EAAE,QAAQ,cAAgB,CAAA,EAC1B,EAAE,QAAQ,mBAAqB,EACjC,CACA,cAAe,CACb,MAAM,EAAI,KAAK,EACT,EAAK,KACL,EAAa,EAAE,OAAO,OACtB,EAAW,IAAI,EAAS,EAAG,CAAC,EAClC,IAAI,EAAI,EAAE,QAAQ,SAAW,EACzB,EAAI,EAAE,QAAQ,UAAY,EAC1B,EAAa,SAiBjB,GAhBA,EAAE,QAAQ,OAAS,GACnB,EAAE,QAAQ,eAAiB,GACvB,EAAW,QAAU,QACvB,EAAI,GACJ,EAAa,SACJ,EAAW,QAAU,UAC9B,EAAI,EAAE,QAAQ,SAAW,GACzB,EAAa,OAEX,EAAW,gBAAkB,MAC/B,EAAI,GACK,EAAW,gBAAkB,WACtC,EAAI,EAAE,QAAQ,UAAY,IAE5B,EAAI,EAAI,EAAW,QACnB,EAAI,EAAI,SAAS,EAAW,MAAM,SAAU,EAAE,EAAI,EAAI,EAAW,QAC7D,EAAW,OAAS,QAAU,EAAW,OAAS,GAAI,CACxD,MAAM,EAAY,EAAS,SAAS,CAClC,EAAA,EACA,EAAA,EACA,KAAM,EAAW,KACjB,WAAA,EACA,SAAU,EAAW,MAAM,SAC3B,WAAY,EAAW,MAAM,WAC7B,UAAW,EAAW,MAAM,MAC5B,QAAS,EACT,SAAU,wBAClB,CAAO,EACD,EAAE,IAAI,MAAM,IAAI,CAAS,CAC3B,CACF,CAMA,0BAA0B,EAAQ,CAChC,MAAM,EAAI,KAAK,EACf,QAAS,EAAK,EAAG,EAAK,EAAO,OAAQ,IACnC,GAAI,EAAO,CAAE,EAAE,SAAW,EACxB,QAAS,EAAI,EAAG,EAAI,EAAO,EAAE,QAAQ,mBAAmB,EAAE,OAAQ,IAChE,EAAO,CAAE,EAAE,KAAK,CAAC,EAIvB,OAAO,CACT,CACA,oBAAqB,CACnB,IAAI,EAAW,GACf,MAAM,EAAI,KAAK,EACT,EAAe,KAAK,gBAAe,EACzC,QAAS,EAAI,EAAG,EAAI,EAAa,OAAS,EAAG,IAC3C,GAAI,EAAa,CAAC,EAAE,CAAC,IAAM,EAAa,EAAI,CAAC,EAAE,CAAC,EAAG,CACjD,EAAW,GACX,KACF,CAEF,OAAA,EAAE,QAAQ,mBAAqB,EACxB,CACT,CACA,iBAAkB,CAKhB,OAJU,KAAK,EACW,WAAW,QAAQ,IAC1C,GAAQ,EAAI,OAAS,EAAI,EAAM,CAAA,CACtC,CAEE,CACF,CACA,MAAM,GAAY,CAChB,OAAQ,eACR,KAAM,aACN,KAAM,aACN,QAAS,eACX,EACM,GAAoB,GAC1B,SAAS,GAAW,EAAG,CACrB,GAAI,CAAC,EAAY,UAAS,EAAI,MAAO,CAAA,EACrC,MAAM,EAAK,EAAE,MAAQ,EAAE,IAAI,QAAU,EAAE,IAAI,SAAW,KACtD,GAAI,CAAC,EAAI,MAAO,CAAA,EAChB,MAAM,EAAK,EAAY,iBAAiB,CAAE,EAC1C,GAAI,CAAC,GAAM,OACX,EAAG,kBAAqB,WACtB,MAAO,CAAA,EAET,MAAM,EAAQ,GAAU,CACtB,MAAM,EAEJ,EAAG,iBAAiB,CAAK,EAE3B,OAAO,EAAI,OAAO,CAAC,EAAE,KAAI,EAAK,EAChC,EACM,EAAM,CAAA,EACZ,UAAW,KAAO,GAAW,CAC3B,MAAM,EAAI,EAER,GAAU,CAAG,CACnB,EACQ,IAAG,EAAI,CAAG,EAAI,EACpB,CACA,MAAM,EAAS,CAAA,EACf,QAAS,EAAI,EAAG,GAAK,GAAmB,IAAK,CAC3C,MAAM,EAAI,EAAK,gBAAgB,CAAC,EAAE,EAClC,GAAI,CAAC,EAAG,MACR,EAAO,KAAK,CAAC,CACf,CACA,OAAI,EAAO,SAAQ,EAAI,OAAS,GACzB,CACT,CACA,MAAM,GAAY,wBAElB,WAAW,EAAS,IAClB,WAAW,EAAS,EAAI,CAAA,GAE1B,SAAS,IAAY,CACnB,OAEE,WAAW,EAAS,CAExB,CACA,SAAS,GAAc,EAAO,EAAK,CACjC,GAAI,CAAC,GAAS,OAAO,GAAU,SAAU,CACvC,QAAQ,KAAK,sDAAsD,EACnE,MACF,CACA,GAAI,GAAO,OAAS,OAAO,GAAQ,UAAY,MAAM,QAAQ,CAAG,GAAI,CAClE,QAAQ,KACN,8BAA8B,CAAK,iFACzC,EACI,MACF,CACA,GAAS,EAAG,CAAK,EAAI,GAAO,CAAA,CAC9B,CACA,SAAS,GAAS,EAAO,CACvB,OAAK,GACE,GAAS,EAAG,CAAK,GAAK,IAC/B,CACA,SAAS,GAAgB,EAAO,CACzB,GACL,OAAO,GAAS,EAAG,CAAK,CAC1B,CACA,MAAM,GAA0B,UAC1B,GAAyB,UACzB,GAAoB,UAC1B,MAAM,EAAM,CAIV,YAAY,EAAG,CACb,KAAK,EAAI,EACT,KAAK,OAAS,CAAA,EACd,KAAK,UAAY,GACjB,KAAK,qBAAuB,KAAK,wBAAuB,EACxD,KAAK,iBAAmB,KAAK,oBAAmB,EAChD,KAAK,QAAU,CAAA,EACf,KAAK,YAAc,IACrB,CACA,yBAA0B,CACxB,KAAM,CAAE,MAAA,EAAO,YAAA,CAAW,EAAK,KAAK,EAAE,OACtC,OAAO,EAAM,OAAS,WAAa,EAAY,SAAW,EAAY,QAAQ,aAAe,EAAM,OAAS,WAAa,EAAY,SAAW,EAAY,QAAQ,WACtK,CACA,qBAAsB,CACpB,KAAM,CAAE,MAAA,EAAO,YAAA,CAAW,EAAK,KAAK,EAAE,OACtC,OAAO,EAAY,KAAO,EAAY,IAAI,cAAgB,EAAM,OAAS,OAAS,EAAM,OAAS,WACnG,CACA,MAAO,CACL,KAAK,iBAAgB,CACvB,CACA,kBAAmB,CACjB,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAQ,IAAI,EAClB,KAAK,YAAc,GAAS,EAAE,OAAO,MAAM,IAAI,EAC/C,KAAK,qBAAoB,EACzB,EAAE,IAAI,OAAO,UAAU,IACrB,oBAAoB,EAAE,OAAO,MAAM,MAAQ,OAAO,EACxD,EACI,KAAK,mBAAkB,EACvB,KAAK,QAAU,KAAK,eAAc,EAClC,KAAK,iBAAiB,KAAK,OAAO,EAClC,MAAM,GAAkB,EAAK,EAAE,OAAO,MAAM,gBAAkB,KAAO,OAAS,EAAG,eACjF,GAAI,EAAgB,CAClB,EAAE,QAAQ,OAAS,KAAK,oBAAoB,CAAc,EAC1D,KAAK,kBAAkB,EAAE,WAAW,aAAc,EAAE,QAAQ,MAAM,EAClE,MAAM,EAAiB,EAAE,QAAQ,OAAO,MAAK,EAC7C,KAAK,gBAAgB,EAAE,QAAQ,MAAM,EACrC,KAAK,gBAAgB,CAAC,OAAQ,QAAQ,EAAG,CAAc,EACvD,KAAK,sBAAsB,CAAc,EACzC,KAAK,yBAAwB,EAC7B,KAAK,mBAAmB,CAAc,EAClC,IAAmB,gBACrB,EAAE,IAAI,OAAO,UAAU,IAAI,0BAA0B,EAEvD,MACF,CACA,MAAM,EAAe,CAAC,GAAG,EAAE,OAAO,QAAU,EAAE,OAAO,KAAK,QAAU,CAAA,CAAE,EACtE,EAAE,QAAQ,OAAS,KAAK,UAAU,CAAY,EAC9C,KAAK,kBAAkB,EAAE,WAAW,aAAc,EAAE,QAAQ,MAAM,EAC9D,EAAE,OAAO,MAAM,WAAW,UAC5B,EAAE,QAAQ,OAAS,KAAK,oBACtB,EAAE,OAAO,MAAM,WACf,EAAE,WAAW,OACb,CACR,GAEI,MAAM,EAAgB,EAAE,QAAQ,OAAO,MAAK,EAC5C,KAAK,gBAAgB,EAAE,QAAQ,MAAM,EACrC,KAAK,gBAAgB,CAAC,OAAQ,QAAQ,EAAG,CAAa,EACtD,KAAK,sBAAsB,CAAa,EACxC,KAAK,yBAAwB,EAC7B,KAAK,mBAAmB,CAAa,CACvC,CAOA,oBAAqB,CACnB,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KACxB,IAAS,QACP,EAAE,OAAO,MAAM,YAAc,KAC/B,EAAE,OAAO,MAAM,UAAY,IAEzB,EAAE,OAAO,MAAM,UAAY,aAC7B,EAAE,OAAO,MAAM,QAAU,YAEvB,EAAE,OAAO,SAAW,EAAE,OAAO,QAAQ,QAAU,UACjD,EAAE,OAAO,QAAQ,MAAQ,SAElB,IAAS,UACd,EAAE,OAAO,MAAM,YAAc,KAC/B,EAAE,OAAO,MAAM,UAAY,IAEzB,EAAE,OAAO,MAAM,UAAY,aAC7B,EAAE,OAAO,MAAM,QAAU,YAG/B,CAMA,sBAAuB,CACrB,MAAM,EAAQ,KAAK,YACnB,GAAI,CAAC,EAAO,OACZ,MAAM,EAAQ,KAAK,EAAE,OAAO,MACxB,EAAM,MAAQ,CAAC,EAAM,OACvB,EAAM,KAAO,EAAM,MAEjB,EAAM,eAAiB,EAAM,cAAc,gBAAkB,EAAE,EAAM,eAAiB,EAAM,cAAc,kBAC5G,EAAM,cAAgB,EAAM,eAAiB,CAAA,EAC7C,EAAM,cAAc,eAAiB,EAAM,cAAc,gBAEvD,EAAM,YAAc,EAAM,WAAW,SAAW,CAAC,EAAM,WAAW,UACpE,EAAM,WAAa,EAAe,EAAe,CAAA,EAAI,EAAM,UAAU,EAAG,EAAM,UAAU,EAE5F,CAOA,gBAAiB,CACf,MAAM,EAAQ,KAAK,aAAe,KAAK,YAAY,QAAU,CAAA,EACvD,EAAM,KAAK,iBAAgB,EAAK,GAAW,KAAK,CAAC,EAAI,CAAA,EAC3D,OAAO,EAAe,EAAe,CAAA,EAAI,CAAK,EAAG,CAAG,CACtD,CAQA,kBAAmB,CACjB,OAAO,KAAK,EAAE,OAAO,MAAM,SAAW,EACxC,CAMA,iBAAiB,EAAQ,CACvB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAI,KAAK,EAIf,GAHI,EAAO,OAAS,EAAE,OAAO,MAAM,YAAc,IAA2B,EAAE,OAAO,MAAM,YAAc,MACvG,EAAE,OAAO,MAAM,UAAY,EAAO,MAEhC,EAAO,KAAM,CACX,EAAE,OAAO,KAAK,cAAgB,KAChC,EAAE,OAAO,KAAK,YAAc,EAAO,MAErC,MAAM,EAAa,GAAS,CACrB,IACD,EAAK,YAAc,EAAK,WAAW,QAAU,KAC/C,EAAK,WAAW,MAAQ,EAAO,MAE7B,EAAK,WAAa,EAAK,UAAU,QAAU,KAC7C,EAAK,UAAU,MAAQ,EAAO,MAElC,EACA,EAAU,EAAE,OAAO,KAAK,EACpB,MAAM,QAAQ,EAAE,OAAO,KAAK,EAC9B,EAAE,OAAO,MAAM,QAAQ,CAAS,EAEhC,EAAU,EAAE,OAAO,KAAK,CAE5B,CACA,GAAI,EAAO,SAAW,CAAC,EAAE,OAAO,MAAM,WAAY,CAChD,EAAE,OAAO,MAAM,WAAa,EAAO,QACnC,MAAM,EAAY,EAAE,IAAI,OAAS,EAAE,IAAI,MAAM,KACzC,GAAa,EAAU,QACzB,EAAU,MAAM,WAAa,EAAO,QAExC,CACF,CAIA,UAAU,EAAc,CACtB,MAAM,EAAI,KAAK,EACf,MAAI,CAAC,GAAgB,EAAa,SAAW,EACpC,KAAK,WAAU,EAEpB,MAAM,QAAQ,CAAY,GAAK,EAAa,OAAS,GAAK,OAAO,EAAa,CAAC,GAAM,YACvF,KAAK,UAAY,GACV,EAAE,OAAO,OAAO,IAAI,CAAC,EAAG,IAAM,CACnC,MAAM,EAAI,EAAa,CAAC,GAAK,EAAa,CAAC,EAC3C,OAAO,OAAO,GAAM,WAAa,EAAE,CACjC,MAAO,EAAE,QAAQ,WAAa,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,GAAK,EAAI,EAAE,WAAW,OAAO,CAAC,EACpF,YAAa,EACb,eAAgB,EAChB,EAAG,KAAK,CAClB,CAAS,EAAI,CACP,CAAC,GAEI,CACT,CAKA,kBAAkB,EAAc,EAAe,CAC7C,EAAa,QAAQ,CAAC,EAAG,IAAM,CACzB,IACF,EAAc,CAAC,EAAI,EAEvB,CAAC,CACH,CAMA,oBAAoB,EAAY,EAAQ,EAAO,CAC7C,KAAM,CAAE,MAAA,EAAO,eAAA,EAAgB,QAAA,CAAO,EAAK,EACrC,EAAS,KAAK,kBAAoB,KAAK,qBAAuB,EAAO,CAAC,EAAE,OAAS,EAAO,OAAS,EAAO,OACxG,EAAO,GAAK,EAAS,GAC3B,IAAI,EAAU,EACd,OAAO,MAAM,KAAK,CAAE,OAAQ,CAAM,EAAI,IAAM,CAC1C,MAAM,EAAW,IAAY,OAAS,EAAM,WAAW,EAAU,GAAI,CAAK,EAAI,EAAM,WAAW,EAAS,CAAK,EAC7G,OAAA,GAAW,EACJ,CACT,CAAC,CACH,CAKA,gBAAgB,EAAY,EAAe,CACzC,MAAM,EAAI,KAAK,EACf,EAAW,QAAS,GAAM,CACxB,EAAE,QAAQ,CAAC,EAAE,OAAS,EAAE,OAAO,CAAC,EAAE,SAAW,OAAS,KAAK,UAAY,EAAE,OAAO,OAAS,EAAgB,EAAE,OAAO,CAAC,EAAE,OAAO,MAAK,EACjI,KAAK,gBAEH,EAAE,QAAQ,CAAC,EAAE,MACrB,CACI,CAAC,CACH,CAIA,sBAAsB,EAAe,CACnC,MAAM,EAAI,KAAK,EACf,EAAE,QAAQ,WAAW,MAAM,OAAS,EAAE,OAAO,WAAW,MAAM,SAAW,OAAS,EAAgB,EAAE,OAAO,WAAW,MAAM,OAAO,MAAK,EACxI,KAAK,gBAAgB,EAAE,QAAQ,WAAW,MAAM,OAAQ,EAAE,CAC5D,CACA,0BAA2B,CACzB,MAAM,EAAI,KAAK,EACf,EAAE,QAAQ,cAAc,KAAK,OAAS,EAAE,OAAO,YAAY,MAAM,SAAS,KAAK,SAAW,OAAS,CAAC,EAAE,OAAO,MAAM,OAAS,OAAS,UAAY,MAAM,EAAI,EAAE,OAAO,YAAY,MAAM,SAAS,KAAK,OAAO,MAAK,EAChN,KAAK,gBAAgB,EAAE,QAAQ,cAAc,KAAK,OAAQ,EAAE,CAC9D,CAIA,mBAAmB,EAAe,CAChC,MAAM,EAAI,KAAK,EACf,EAAE,QAAQ,QAAQ,OAAS,EAAE,OAAO,QAAQ,SAAW,OAAS,EAAgB,EAAE,OAAO,QAAQ,OAAO,MAAK,EAC7G,KAAK,gBAAgB,EAAE,QAAQ,QAAQ,MAAM,CAC/C,CAMA,gBAAgB,EAAa,EAAQ,EAAc,KAAM,CACvD,MAAM,EAAI,KAAK,EACf,IAAI,EAAM,GAAU,EAAE,WAAW,OAAO,OAOxC,GANI,IAAgB,OAClB,EAAc,KAAK,kBAAoB,KAAK,sBAAwB,EAAE,OAAO,MAAM,OAAS,WAAa,EAAE,OAAO,YAAY,SAAW,EAAE,OAAO,YAAY,QAAQ,WAAW,SAE/K,GAAe,EAAE,WAAW,OAAO,SACrC,EAAM,EAAE,WAAW,OAAO,EAAE,QAAQ,mBAAmB,EAAE,OAAS,EAAE,WAAW,OAAO,QAEpF,EAAY,OAAS,EAAK,CAC5B,MAAM,EAAO,EAAM,EAAY,OAC/B,QAAS,EAAI,EAAG,EAAI,EAAM,IACxB,EAAY,KAAK,EAAY,CAAC,CAAC,CAEnC,CACF,CAIA,oBAAoB,EAAM,CACxB,MAAM,EAAW,GAAgB,EAOjC,OANY,CACV,aAAc,EAAS,gBACvB,WAAY,EAAS,cACrB,WAAY,EAAS,cACrB,aAAc,EAAS,YAC7B,EAIW,CAAI,GAAK,EAAS,UAAU,MAAK,CAE1C,CAIA,mBAAmB,EAAU,CAC3B,EAAS,MAAQ,EAAS,OAAS,CAAA,EACnC,EAAS,QAAU,EAAS,SAAW,CAAA,EACvC,MAAM,EAAO,EAAS,MAAM,KACtB,EAAU,IAAS,OAAS,WAAa,IAAS,QAAU,WAAa,EAAS,MAAM,SAAW,WACnG,EAAY,IAAS,OAAS,UAAY,IAAS,QAAU,UAAY,EAAS,MAAM,WAAa,UAC3G,OAAA,EAAS,QAAQ,MAAQ,GAAQ,QACjC,EAAS,MAAM,UAAY,EAC3B,EAAS,MAAM,QAAU,EAClB,CACT,CACA,YAAa,CACX,MAAM,EAAU,KAAK,EAAE,OAAO,MAAM,QAC9B,EAAW,GAAgB,EAC3B,EAEJ,EAAS,CAAO,GAAK,EAAS,SAE1B,EAAS,KAAK,SAAW,CAAA,EAC/B,GAAI,MAAM,QAAQ,EAAO,MAAM,GAAK,EAAO,OAAO,OAChD,OAAO,EAAO,OAAO,MAAK,EAE5B,GAAI,EAAO,OACT,MAAO,CAAC,EAAO,OAAQ,GAAG,CAAO,EAEnC,MAAM,EAAQ,KAAK,YACnB,OAAI,GAAS,MAAM,QAAQ,EAAM,OAAO,GAAK,EAAM,QAAQ,OAClD,EAAM,QAAQ,MAAK,EAErB,CACT,CACF,CACA,MAAM,EAAc,CAIlB,YAAY,EAAG,CACb,KAAK,EAAI,CACX,CACA,MAAO,CACL,KAAK,kBAAkB,OAAO,EAC9B,KAAK,kBAAkB,UAAU,CACnC,CAIA,kBAAkB,EAAM,CACtB,MAAM,EAAI,KAAK,EACT,EAAW,IAAS,QAAU,EAAE,OAAO,MAAQ,EAAE,OAAO,SAC9D,IAAI,EAAI,EAAE,QAAQ,SAAW,EACzB,EAAI,EAAS,QACb,EAAa,SAUjB,GATI,EAAS,QAAU,QACrB,EAAI,GACJ,EAAa,SACJ,EAAS,QAAU,UAC5B,EAAI,EAAE,QAAQ,SAAW,GACzB,EAAa,OAEf,EAAI,EAAI,EAAS,QACjB,EAAI,EAAI,SAAS,EAAS,MAAM,SAAU,EAAE,EAAI,EAAS,OAAS,EAC9D,EAAS,OAAS,OAAQ,CAE5B,MAAM,EADW,IAAI,EAAS,KAAK,CAAC,EACT,SAAS,CAClC,EAAA,EACA,EAAA,EACA,KAAM,EAAS,KACf,WAAA,EACA,SAAU,EAAS,MAAM,SACzB,WAAY,EAAS,MAAM,WAC3B,WAAY,EAAS,MAAM,WAC3B,UAAW,EAAS,MAAM,MAC1B,QAAS,CACjB,CAAO,EACD,EAAU,KAAK,aAAa,QAAS,cAAc,CAAI,OAAO,EAC9D,EAAE,IAAI,MAAM,IAAI,CAAS,CAC3B,CACF,CACF,CACA,IAAI,GAAY,KAAc,CAI5B,YAAY,EAAM,CAChB,KAAK,EAAI,EAAK,EACd,KAAK,KAAO,CACd,CAOA,uBAAuB,EAAM,CAC3B,MAAM,EAAI,KAAK,EACf,IAAI,EAAQ,EACR,EAAS,EACb,MAAM,EAAW,IAAS,QAAU,EAAE,OAAO,MAAM,SAAW,EAAE,OAAO,SAAS,SAC1E,EAAK,EAAE,IAAI,OAAO,cAAc,eAAe,CAAI,OAAO,EAChE,GAAI,IAAO,MAAQ,CAAC,EAAU,CAC5B,MAAM,EAAQ,EAAG,sBAAqB,EACtC,EAAQ,EAAM,MACd,EAAS,EAAE,QAAQ,WAAa,EAAM,OAAS,EAAI,EAAM,MAC3D,CACA,MAAO,CACL,MAAA,EACA,OAAA,CACN,CACE,CACA,gBAAiB,CACf,MAAM,EAAI,KAAK,EACT,EAAe,EAAE,IAAI,aACvB,CAAC,EAAE,OAAO,OAAO,SAAW,EAAE,OAAO,OAAO,WAAa,OAAS,EAAE,OAAO,OAAO,WAAa,WAC7F,IACF,EAAa,MAAM,UAAY,EAAE,QAAQ,UAAY,EAAI,MAE7D,MAAM,EAEJ,OAAO,OAAO,CAAA,EAAI,EAAQ,sBAAsB,CAAY,CAAC,EAE/D,OAAI,IAAiB,MAAQ,CAAC,EAAE,OAAO,OAAO,UAAY,EAAE,OAAO,OAAO,KACxE,KAAK,KAAK,OAAS,CACjB,EAAG,EAAO,EACV,EAAG,EAAO,EACV,OAAQ,EAAO,OACf,MAAO,EAAO,SAAW,EAAI,EAAI,EAAO,KAChD,EAEM,KAAK,KAAK,OAAS,CACjB,EAAG,EACH,EAAG,EACH,OAAQ,EACR,MAAO,CACf,GAEQ,EAAE,OAAO,OAAO,WAAa,QAAU,EAAE,OAAO,OAAO,WAAa,UAClE,KAAK,KAAK,OAAO,MAAQ,IAAM,EAAE,QAAQ,WAC3C,KAAK,KAAK,OAAO,MAAQ,EAAE,QAAQ,SAAW,KAG3C,KAAK,KAAK,MACnB,CAMA,mBAAoB,CAClB,MAAM,EAAI,KAAK,EACT,EAAY,CAAA,EAClB,EAAE,OAAO,OAAO,QACd,CAAC,EAAO,IAAgB,CACtB,EAAM,KAAK,QACT,CAAC,EAAO,IAAmB,CAQzB,MAAM,GAPW,GACR,EAAE,OAAO,WAAW,UAAU,EAAG,CACtC,YAAA,EACA,eAAA,EACA,EAAA,CAChB,CAAe,GAGD,EAAE,WAAW,OAAO,CAAW,EAAE,CAAc,CAC7D,EACY,EAAU,KAAK,CAAS,CAC1B,CACV,CACM,CACN,EACI,MAAM,EAAM,EAAQ,wBAAwB,CAAS,EAC/C,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAkB,EAAE,OAAO,WAAW,MACtC,EAAY,EAAS,aACzB,EACA,SAAS,EAAgB,QAAQ,EAAE,SAAQ,EAC3C,EAAgB,UACtB,EACI,MAAO,CACL,MAAO,EAAU,MAAQ,KACzB,OAAQ,EAAU,MACxB,CACE,CAKA,6BAA6B,EAAK,EAAK,CACrC,MAAM,EAAI,KAAK,EACf,IAAI,EAAS,EACb,GAAI,EAAE,UAAU,aAAc,CAC5B,MAAM,EAAU,EAAI,IAAK,GAChB,MAAM,QAAQ,CAAE,EAAI,EAAG,OAAS,CACxC,EACK,EAAY,KAAK,IAAI,GAAG,CAAO,EAC/B,EAAc,EAAQ,QAAQ,CAAS,EAC7C,EAAS,EAAI,CAAW,CAC1B,CACA,OAAO,CACT,CAgBA,yBAA0B,CACxB,MAAM,EAAI,KAAK,EACT,EAAiB,MAAM,QAAQ,EAAE,OAAO,OAAO,KAAK,EAAI,KAAK,IAAI,GAAG,EAAE,OAAO,OAAO,KAAK,EAAI,EAAE,OAAO,OAAO,MAC7G,EAAO,EAAiB,EAC9B,GAAI,CAAC,EAAE,OAAO,OAAO,MAAQ,EAAE,EAAO,GACpC,MAAO,CAAE,IAAK,EAAG,OAAQ,CAAC,EAE5B,MAAM,EAAS,EAAE,QAAQ,KAAO,EAAE,QAAQ,KACpC,EAAW,KAAK,oBAAmB,EACzC,GAAI,CAAC,KAAK,wBAAuB,GAAM,EAAE,EAAS,IAAM,CAAC,EACvD,MAAO,CAAE,IAAK,EAAM,OAAQ,CAAI,EAElC,MAAM,EAAa,KAAK,IAAI,EAAE,QAAQ,UAAY,EAAgB,CAAC,EAC7D,EAAY,GAAc,EAAE,QAAQ,KAAO,EAAS,KAAO,EAC3D,EAAY,GAAc,EAAS,IAAM,EAAE,QAAQ,MAAQ,EACjE,MAAO,CACL,IAAK,KAAK,IAAI,KAAK,IAAI,EAAO,EAAW,CAAC,EAAG,CAAI,EACjD,OAAQ,KAAK,IAAI,KAAK,IAAI,EAAO,EAAW,CAAC,EAAG,CAAI,CAC1D,CACE,CAQA,yBAA0B,CACxB,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAE,QAAQ,YAAc,EAAE,OAAO,MAAM,QAAS,MAAO,GAC5D,MAAM,EAAe,CAAC,OAAQ,OAAQ,SAAS,EAC/C,OAEE,EAAE,OAAO,OAAO,MACb,GAAM,EAAa,SAAS,EAAE,MAAQ,EAAE,OAAO,MAAM,IAAI,CAClE,CAEE,CAKA,qBAAsB,CACpB,IAAI,EAAM,IACN,EAAM,KACV,YAAK,EAAE,WAAW,OAAO,QAAS,GAAS,CACpC,MAAM,QAAQ,CAAI,GACvB,EAAK,QAAS,GAAQ,CACf,OAAO,SAAS,CAAG,IACpB,EAAM,IAAK,EAAM,GACjB,EAAM,IAAK,EAAM,GACvB,CAAC,CACH,CAAC,EACM,IAAQ,IAAW,KAAO,CAAE,IAAA,EAAK,IAAA,CAAG,CAC7C,CACF,EACA,MAAM,EAAS,CAIb,YAAY,EAAM,CAChB,KAAK,EAAI,EAAK,EACd,KAAK,KAAO,CACd,CAMA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACf,IAAI,EAAc,EAAE,UAAU,OAAO,MAAK,EACtC,EAAE,OAAO,MAAM,uBAAyB,EAAY,SAAW,IACjE,EAAc,EAAE,UAAU,gBAE5B,IAAI,EACJ,GAAI,EAAE,UAAU,gBAAgB,OAAS,EAAG,CAC1C,MAAM,EAAS,KAAK,8BAA6B,EACjD,EAAO,CACL,MAAO,EAAO,MACd,OAAQ,EAAO,MACvB,EACM,EAAE,OAAO,cAAgB,EAC3B,KAAO,CACL,KAAK,KAAK,uBAAyB,EAAE,OAAO,OAAO,WAAa,QAAU,EAAE,OAAO,OAAO,WAAa,UAAY,CAAC,EAAE,OAAO,OAAO,SAAW,KAAK,KAAK,OAAO,MAAQ,EACxK,MAAM,EAAe,EAAE,WAAW,gBAClC,IAAI,EAAM,EAAQ,wBAAwB,CAAW,EACjD,EAAS,KAAK,KAAK,WAAW,6BAChC,EACA,CACR,EACU,EAAE,QAAQ,kBACZ,EAAM,EAAE,QAAQ,WAAW,CAAC,EAAE,OAAO,OACnC,CAAC,EAAG,IAAM,EAAE,OAAS,EAAE,OAAS,EAAI,EACpC,CACV,EACQ,EAAS,GAEX,MAAM,EAAU,IAAI,GAAW,KAAK,CAAC,EAC/B,EAAY,EAClB,EAAM,EAAQ,aAEZ,EACA,EACA,EACA,CACE,EAAG,OACH,cAAe,IAAI,GAAS,KAAK,CAAC,EAAE,WACpC,EAAA,CACV,CACA,EACM,EAAS,EAAQ,aAEf,EACA,EACA,EACA,CACE,EAAG,OACH,cAAe,IAAI,GAAS,KAAK,CAAC,EAAE,WACpC,EAAA,CACV,CACA,GACU,EAAE,OAAO,MAAM,uBAAyB,OAAO,EAAQ,KAAe,OAAO,CAAG,EAAE,KAAI,IAAO,MAC/F,EAAM,IACN,EAAS,GAEX,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,IAAI,EAAa,EAAS,aACxB,EACA,EAAE,OAAO,MAAM,OAAO,MAAM,QACpC,EACU,EAAgB,EAWpB,GAVI,IAAQ,IACV,EAAgB,EAAS,aACvB,EACA,EAAE,OAAO,MAAM,OAAO,MAAM,QACtC,GAEM,EAAO,CACL,MAAO,EAAW,OAAS,EAAc,MAAQ,EAAW,MAAQ,EAAc,MAClF,OAAQ,EAAW,QAAU,EAAc,OAAS,EAAW,OAAS,EAAc,MAC9F,EACU,EAAK,MAAQ,EAAY,OAAS,EAAE,QAAQ,SAAW,KAAK,KAAK,sBAAwB,KAAK,KAAK,WAAa,KAAK,KAAK,QAAQ,KAAO,KAAK,KAAK,QAAQ,OAAS,EAAE,OAAO,MAAM,OAAO,SAAW,GAAK,EAAE,OAAO,MAAM,OAAO,cAClO,GAAI,CAAC,EAAE,QAAQ,gBAAiB,CAC9B,EAAE,OAAO,cAAgB,GACzB,MAAM,EAAuB,GACpB,EAAS,aACd,EACA,EAAE,OAAO,MAAM,OAAO,MAAM,SAC5B,EAAE,OAAO,MAAM,OAAO,MAAM,WAC5B,UAAU,EAAE,OAAO,MAAM,OAAO,MAAM,QACtC,EACd,EAEU,EAAa,EAAoB,CAAG,EAChC,IAAQ,IACV,EAAgB,EAAoB,CAAM,GAE5C,EAAK,QAAU,EAAW,OAAS,EAAc,OAAS,EAAW,OAAS,EAAc,QAAU,IACtG,EAAK,MAAQ,EAAW,MAAQ,EAAc,MAAQ,EAAW,MAAQ,EAAc,KACzF,OAEA,EAAE,OAAO,cAAgB,EAE7B,CACA,OAAK,EAAE,OAAO,MAAM,OAAO,OACzB,EAAO,CACL,MAAO,EACP,OAAQ,CAChB,GAEW,CACL,MAAO,EAAK,MACZ,OAAQ,EAAK,MACnB,CACE,CAMA,2BAA4B,CAC1B,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAE,UAAU,eACf,MAAO,CAAE,MAAO,EAAG,OAAQ,CAAC,EAE9B,MAAM,IAAa,EAAK,EAAE,OAAO,MAAM,MAAM,QAAU,KAAO,OAAS,EAAG,WAAa,EAAE,OAAO,MAAM,OAAO,MAAM,SAC7G,EAAc,EAAE,UAAU,OAAO,IACpC,GAAM,EAAE,KACf,EACI,IAAI,EACJ,MAAM,EAAM,EAAQ,wBAAwB,CAAW,EACjD,EAAS,KAAK,KAAK,WAAW,6BAClC,EACA,CACN,EACU,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAa,EAAS,aAAa,EAAK,CAAQ,EACtD,IAAI,EAAgB,EACpB,OAAI,IAAQ,IACV,EAAgB,EAAS,aAAa,EAAQ,CAAQ,GAExD,EAAO,CACL,MAAO,EAAW,OAAS,EAAc,MAAQ,EAAW,MAAQ,EAAc,MAClF,OAAQ,EAAW,QAAU,EAAc,OAAS,EAAW,OAAS,EAAc,MAC5F,EACS,EAAE,OAAO,MAAM,OAAO,OACzB,EAAO,CACL,MAAO,EACP,OAAQ,CAChB,GAEW,CACL,MAAO,EAAK,MACZ,OAAQ,EAAK,MACnB,CACE,CAMA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACf,IAAI,EAAQ,EACR,EAAS,EACb,GAAI,EAAE,OAAO,MAAM,MAAM,OAAS,OAAQ,CAExC,MAAM,EADW,IAAI,EAAS,KAAK,CAAC,EACd,aACpB,EAAE,OAAO,MAAM,MAAM,KACrB,EAAE,OAAO,MAAM,MAAM,MAAM,QACnC,EACM,EAAQ,EAAK,MACb,EAAS,EAAK,MAChB,CACA,MAAO,CACL,MAAA,EACA,OAAA,CACN,CACE,CACA,+BAAgC,CAC9B,MAAM,EAAI,KAAK,EACf,KAAK,KAAK,gBAAkB,EAAE,UAAU,gBAAgB,MAAK,EAC7D,MAAM,EAAS,KAAK,KAAK,gBAAgB,IACtC,GAAU,EAAM,KACvB,EACU,EAAM,EAAO,OAAO,CAAC,EAAG,IACxB,OAAO,EAAM,KACf,QAAQ,MACN,uFACV,EACe,GAEA,EAAE,OAAS,EAAE,OAAS,EAAI,EAElC,CAAC,EAEE,EADW,IAAI,EAAS,KAAK,CAAC,EACd,aACpB,EACA,EAAE,OAAO,MAAM,OAAO,MAAM,QAClC,EAEI,OAD0B,EAAK,MAAQ,KAAO,EAAO,OAC7B,EAAE,OAAO,WAAa,EAAE,OAAO,MAAM,OAAO,SAAW,IAC7E,EAAE,QAAQ,mBAAqB,IAE1B,CACT,CAMA,yBAAyB,EAAkB,CACzC,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAM,EAAE,OACR,EAAQ,EAAI,MAAM,KAClB,EAAU,EAAiB,MACjC,EAAG,sBAAwB,GAC3B,EAAG,uBAAyB,GAC5B,MAAM,EAAgB,EAAE,OAAO,MAAM,CAAC,EAAE,UAAY,EAAE,QAAQ,gBACxD,EAAe,GAAM,EAAG,uBAAuB,QAAQ,CAAC,IAAM,GAC9D,EAAY,GAAS,CACzB,GAAI,KAAK,KAAK,iBAAmB,KAAK,KAAK,gBAAgB,OAAQ,CACjE,MAAM,EAAqB,KAAK,KAAK,gBAAgB,CAAC,EAEhD,EADqB,KAAK,KAAK,gBAAgB,KAAK,KAAK,gBAAgB,OAAS,CAAC,EAC5C,SAAW,EAAU,KAAO,KAAK,KAAK,gBAC7E,EAAqB,EAAmB,SAAW,EAAU,KAAO,KAAK,KAAK,eAC9E,EAAmB,EAAE,OAAO,OAAO,WAAa,SAAW,KAAK,KAAK,OAAO,MAAQ,EAAI,KAAK,KAAK,OAAO,MAAQ,EACnH,EAAoB,EAAG,SAAW,EAAE,OAAO,WAAa,IAC1D,EAAG,sBAAwB,IAEzB,EAAqB,GAAG,CAAC,EAAK,MAAQ,EAAK,YAAc,EAAI,MAAM,OAAS,OAAS,EAAI,MAAM,OAAS,eAAiB,EAAI,MAAM,OAAS,YAAc,EAAI,MAAM,OAAS,WAAa,EAAI,MAAM,OAAS,UAAY,EAAU,KAAO,MAC5O,EAAG,uBAAyB,GAEhC,MAAW,IAAU,WACf,KAAK,KAAK,QAAQ,MAAQ,GAAW,CAAC,EAAE,OAAO,gBACjD,EAAG,sBAAwB,IAEpB,IAAU,YACf,KAAK,KAAK,QAAQ,MAAQ,EAAU,EAAI,KAAK,KAAK,iBAAmB,CAAC,EAAE,OAAO,eAAiB,CAAC,EAAE,OAAO,MAAM,OAAO,OACzH,KAAK,KAAK,UAAY,EAAU,EAAI,EAG1C,EACM,EAAU,CAAC,EAAM,IAAM,CACvB,EAAI,MAAM,OAAS,GAAK,EAAY,CAAC,GACzC,EAAS,CAAI,CACf,EACA,EAAI,MAAM,QAAQ,CAAC,EAAM,IAAM,CACzB,GACE,KAAK,KAAK,QAAQ,KAAO,IAC3B,KAAK,KAAK,SAAW,EAAU,EAAI,GAErC,KAAK,KAAK,UAAY,EAAU,EAAI,GAEpC,EAAQ,EAAM,CAAC,CAEnB,CAAC,CACH,CACF,CACA,MAAM,EAAS,CAIb,YAAY,EAAM,CAChB,KAAK,EAAI,EAAK,EACd,KAAK,KAAO,CACd,CAMA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACT,EAAQ,EACR,EAAS,EACT,EAAM,CAAA,EACZ,IAAI,EAAW,GACf,MAAM,EAAY,IAAI,GAAU,KAAK,EAAG,CAAE,MAAO,KAAK,KAAK,MAAO,UAAW,KAAK,KAAK,SAAS,CAAE,EAClG,OAAA,EAAE,OAAO,MAAM,IAAI,CAAC,EAAM,IAAU,CAClC,MAAM,EAAgB,CACpB,YAAa,EACb,eAAgB,GAChB,EAAA,CACR,EACY,EAAK,EAAE,QAAQ,WAAW,CAAK,EACrC,IAAI,EAAgB,EAGpB,GAFI,CAAC,EAAU,cAAc,CAAK,GAAK,EAAK,OAAO,MAAQ,EAAK,OAAO,WAAa,SAClF,EAAgB,EAAK,OAAO,UAC1B,CAAC,EAAU,cAAc,CAAK,GAAK,EAAK,OAAO,MAAQ,EAAG,OAAO,OAAQ,CAC3E,MAAM,EAAc,EAAE,WAAW,iBAAiB,CAAK,EACjD,EAAO,EAAG,UAAY,OAAO,UAAY,EAAI,EAAG,QACtD,IAAI,EAAM,EAAG,OAAO,OAAO,CAAC,EAAK,IAAS,CACxC,IAAI,EAAI,EACR,QAAS,EAAK,OAAO,EAAY,EAAK,CAAa,CAAC,IAAM,KAAO,OAAS,EAAG,UAAY,EAAK,OAAO,EAAY,EAAM,CAAa,CAAC,IAAM,KAAO,OAAS,EAAG,QAAU,EAAM,CAChL,EAAG,CAAI,EACP,EAAM,EAAY,EAAK,CAAa,EACpC,IAAI,EAAS,EAQb,IAPI,OAAO,EAAQ,KAAe,EAAI,SAAW,KAC/C,EAAM,EAAG,SAEP,OAAO,CAAG,EAAE,SAAW,IACzB,EAAM,EAAM,KACZ,EAAS,GAEP,EAAE,QAAQ,gBAAiB,CAC7B,EAAW,EACX,MAAM,EAAiB,EAAE,UAAU,OAAO,MAAK,EAC/C,EAAM,EAAQ,wBAAwB,CAAc,EACpD,EAAM,EAAY,EAAK,CAAE,YAAa,EAAO,eAAgB,GAAI,EAAA,CAAC,CAAE,EACpE,EAAS,KAAK,KAAK,WAAW,6BAC5B,EACA,CACZ,CACQ,CACA,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAY,UAAU,OAAO,EAAK,OAAO,OAAQ,OAAO,EACxD,EAAO,EAAS,aACpB,EACA,EAAK,OAAO,MAAM,SAClB,EAAK,OAAO,MAAM,WAClB,EACA,EACV,EACQ,IAAI,EAAe,EACf,IAAQ,IACV,EAAe,EAAS,aACtB,EACA,EAAK,OAAO,MAAM,SAClB,EAAK,OAAO,MAAM,WAClB,EACA,EACZ,GAEQ,EAAI,KAAK,CACP,OAAQ,EAAgB,EAAa,OAAS,EAAgB,EAAK,MAAQ,EAAgB,EAAa,MAAQ,EAAK,MAAQ,EAAa,MAAQ,EAAK,OAAS,EAChK,OAAQ,EAAa,OAAS,EAAK,OAAS,EAAa,OAAS,EAAK,MACjF,CAAS,CACH,MACE,EAAI,KAAK,CACP,MAAA,EACA,OAAA,CACV,CAAS,CAEL,CAAC,EACM,CACT,CAMA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACT,EAAM,CAAA,EACZ,OAAA,EAAE,OAAO,MAAM,IAAK,GAAS,CAC3B,GAAI,EAAK,MAAQ,EAAK,MAAM,OAAS,OAAQ,CAC3C,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAY,UAAU,OAAO,EAAK,MAAM,OAAQ,OAAO,EACvD,EAAO,EAAS,aACpB,EAAK,MAAM,KACX,EAAK,MAAM,MAAM,SACjB,EAAK,MAAM,MAAM,WACjB,EACA,EACV,EACQ,EAAI,KAAK,CACP,MAAO,EAAK,MACZ,OAAQ,EAAK,MACvB,CAAS,CACH,MACE,EAAI,KAAK,CACP,MAAO,EACP,OAAQ,CAClB,CAAS,CAEL,CAAC,EACM,CACT,CACA,oBAAqB,CACnB,MAAM,EAAI,KAAK,EACf,IAAI,EAAa,EACb,EAAiB,EACjB,EAAkB,EACtB,MAAM,EAAU,EAAE,QAAQ,WAAW,OAAS,EAAI,GAAK,EACjD,EAAY,IAAI,GAAU,KAAK,EAAG,CAAE,MAAO,KAAK,KAAK,MAAO,UAAW,KAAK,KAAK,SAAS,CAAE,EAC5F,EAAgB,SAAS,EAAO,CACpC,OAAO,EAAE,QAAQ,mBAAmB,QAAQ,CAAK,EAAI,EACvD,EACM,EAAmB,CAAC,EAAO,IAAU,CACzC,MAAM,EAAW,EAAE,OAAO,MAAM,CAAK,EAAE,SACvC,IAAI,EAAQ,EACR,EAAM,MAAQ,GAAK,CAAC,GACtB,EAAQ,EAAM,MAAQ,EAClB,EAAc,CAAK,IACrB,EAAQ,EAAQ,EAAM,MAAQ,IAGhC,EAAQ,GAAY,EAAU,cAAc,CAAK,EAAI,EAAI,EAE3D,EAAE,OAAO,MAAM,CAAK,EAAE,SAAW,EAAkB,EAAkB,EAAQ,EAAiB,EAAiB,EAC/G,EAAa,EAAa,CAC5B,EACA,OAAA,EAAE,OAAO,cAAc,IAAI,CAAC,EAAa,IAAU,CACjD,EAAiB,EAAa,CAAK,CACrC,CAAC,EACD,EAAE,OAAO,aAAa,IAAI,CAAC,EAAa,IAAU,CAChD,EAAiB,EAAa,CAAK,CACrC,CAAC,EACG,EAAE,QAAQ,iBAAmB,CAAC,EAAE,OAAO,MAAM,CAAC,EAAE,WAClD,EAAa,EAAE,OAAO,cAAc,CAAC,EAAE,MAAQ,EAAE,OAAO,aAAa,CAAC,EAAE,MAAQ,IAElF,KAAK,KAAK,eAAiB,EAC3B,KAAK,KAAK,gBAAkB,EACrB,CACT,CACF,CACA,MAAM,EAAQ,CAIZ,YAAY,EAAM,CAChB,KAAK,EAAI,EAAK,EACd,KAAK,KAAO,CACd,CAIA,+BAA+B,EAAW,CACxC,KAAM,CAAE,EAAA,CAAC,EAAK,KACR,CAAE,OAAQ,EAAK,QAAS,CAAE,EAAK,EACrC,GAAI,EAAG,QAAU,EAAG,gBAAgB,OAAS,EAAG,yBAAyB,SAAW,EAAI,OAAO,OAC7F,MAAO,GAET,MAAM,EAAU,GAAU,CAAC,MAAO,WAAY,cAAe,UAAW,QAAQ,EAAE,SAAS,CAAK,EAC1F,EAAO,EAAI,MAAM,KACvB,IAAI,EAAW,EACX,EAAY,EAAO,CAAI,EAAI,EAAI,OAAO,OAAS,EAC/C,EAAG,cAAgB,IACrB,EAAY,EAAG,eAEjB,EAAG,gBAAgB,QAAS,GAAM,CAC5B,EAAO,EAAE,IAAI,IACf,GAAa,EAEjB,CAAC,EACG,EAAI,MAAM,UACZ,EAAY,GAEd,MAAM,EAAc,EAAO,CAAI,GAAK,EAAG,cAAgB,EACvD,IAAI,EAAS,KAAK,IAAI,EAAG,YAAc,EAAG,WAAW,EACrD,GAAI,GAAe,EAAE,UAAU,YAAc,CAAC,EAAG,iBAAmB,EAAY,GAAK,IAAW,EAAG,CAC7F,GAAU,IACZ,EAAS,EAAG,YAEd,MAAM,EAAS,EAAS,EACxB,IAAI,EAAY,EAAG,UAAY,EAAG,SAAW,EAAS,EAAI,EAAG,SAAW,EAAS,EAC7E,EAAY,EAAY,IAC1B,GAAa,GAEf,EAAW,EAAY,SAAS,EAAI,YAAY,IAAI,YAAa,EAAE,EAAI,IACnE,EAAW,IACb,EAAW,GAEb,EAAG,qBAAuB,CAC5B,CACA,OAAO,CACT,CACA,yBAA0B,CACxB,KAAM,CAAE,EAAA,CAAC,EAAK,KACR,CAAE,QAAS,CAAE,EAAK,EACxB,IAAI,EAAmB,KAAK,KAAK,aAAe,CAAC,EAAG,WAAa,EAAI,GAC/C,CAAC,QAAS,UAAU,EAC5B,QAAS,GAAM,CACvB,EAAE,OAAO,CAAC,EAAE,OAAS,OACvB,GAAoB,EAAE,OAAO,CAAC,EAAE,OAEhC,GAAoB,KAAK,KAAK,aAAe,CAAC,EAAG,WAAa,EAAI,CAEtE,CAAC,EACG,EAAE,OAAO,OAAO,MAAQ,EAAE,OAAO,OAAO,WAAa,UAAY,CAAC,EAAE,OAAO,OAAO,UAAY,CAAC,EAAG,aACpG,GAAoB,IAEtB,MAAM,EAAc,KAAK,KAAK,WAAW,uBAAuB,OAAO,EACjE,EAAiB,KAAK,KAAK,WAAW,uBAAuB,UAAU,EAC7E,EAAE,OAAO,YAAc,EAAY,OAAS,EAAe,OAAS,EACpE,EAAE,OAAO,YAAc,EAAY,OAAS,EAAe,OAAS,CACtE,CAKA,wBAAwB,EAAc,EAAkB,CACtD,KAAM,CAAE,EAAA,CAAC,EAAK,KACR,EAAY,IAAI,GAAU,KAAK,EAAG,CAAE,MAAO,KAAK,KAAK,MAAO,UAAW,KAAK,KAAK,SAAS,CAAE,EAClG,EAAE,OAAO,MAAM,QAAQ,CAAC,EAAM,IAAU,CAClC,EAAE,QAAQ,mBAAmB,QAAQ,CAAK,IAAM,IAAM,CAAC,EAAK,UAAY,CAAC,EAAU,cAAc,CAAK,IACpG,EAAK,WACP,EAAE,OAAO,YAAc,EAAiB,CAAK,EAAE,MAAQ,EAAa,CAAK,EAAE,MAAQ,SAAS,EAAK,OAAO,MAAM,SAAU,EAAE,EAAI,IAAM,IAElI,EAAE,OAAO,WAAa,IACxB,EAAE,OAAO,WAAa,GAG5B,CAAC,CACH,CACF,CACA,MAAM,EAAW,CAKf,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,MAAQ,EAAI,MACjB,KAAK,UAAY,EAAI,UACrB,KAAK,OACL,CAAA,EACA,KAAK,WAAa,EAClB,KAAK,eAAiB,EACtB,KAAK,gBAAkB,EACvB,KAAK,YAAc,EACnB,KAAK,YAAc,KAAK,EAAE,OAAO,MAAM,UAAU,QACjD,KAAK,WAAa,IAAI,GAAU,IAAI,EACpC,KAAK,SAAW,IAAI,GAAS,IAAI,EACjC,KAAK,SAAW,IAAI,GAAS,IAAI,EACjC,KAAK,QAAU,IAAI,GAAQ,IAAI,EAC/B,KAAK,sBAAwB,EAC7B,KAAK,QAAU,EAAe,CAAA,EAAI,KAAK,EAAE,OAAO,KAAK,OAAO,EAC5D,KAAK,UAAY,EACjB,KAAK,SAAW,EAChB,KAAK,iBAAmB,CAAE,MAAO,EAAG,OAAQ,CAAC,EAC7C,KAAK,WAAa,EAClB,KAAK,gBAAkB,CAAA,CACzB,CAIA,YAAa,CACX,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QAGb,GAFA,KAAK,OAAS,KAAK,WAAW,eAAc,EAC5C,KAAK,iBAAmB,CAAE,MAAO,EAAG,OAAQ,CAAC,EACzC,KAAK,YAAa,CAChB,KAAK,EAAE,QAAQ,QAAQ,YAAc,GACvC,OAAO,QAAQ,KAAK,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAG,CAAC,IAAM,CAC/C,KAAK,QAAQ,CAAC,EAAI,KAAK,IACrB,EACA,KAAK,EAAE,QAAQ,QAAQ,YAAc,GACjD,CACQ,CAAC,EAEH,MAAM,EAAc,KAAK,WAAW,wBAAuB,EAC3D,KAAK,QAAQ,IAAM,KAAK,IAAI,EAAY,IAAK,KAAK,QAAQ,GAAG,EAC7D,KAAK,QAAQ,OAAS,KAAK,IAAI,EAAY,OAAQ,KAAK,QAAQ,MAAM,CACxE,CACI,EAAG,WACL,KAAK,2BAA0B,EAE/B,KAAK,8BAA6B,EAEpC,KAAK,QAAQ,wBAAuB,EACpC,EAAE,OAAO,WAAa,EAAE,OAAO,WAAa,KAAK,QAAQ,IAAM,KAAK,QAAQ,OAC5E,EAAE,OAAO,UAAY,EAAE,OAAO,UAAY,KAAK,QAAQ,KAAO,KAAK,QAAQ,MAAQ,KAAK,UAAY,KAAK,SACzG,MAAM,EAAW,KAAK,QAAQ,+BAC5B,EAAE,OAAO,SACf,EACI,OAAA,EAAE,OAAO,UAAY,EAAE,OAAO,UAAY,EAAW,EACrD,EAAE,OAAO,WAAa,EAAE,OAAO,WAAa,KAAK,QAAQ,KAAO,KAAK,UAAY,EAAW,EAAI,EAAW,GAC3G,EAAE,OAAO,WAAa,EAAE,OAAO,WAAa,KAAK,QAAQ,IAClD,CAEL,OAAQ,CACN,WAAY,EAAE,OAAO,WACrB,UAAW,EAAE,OAAO,UACpB,WAAY,EAAE,OAAO,WACrB,WAAY,EAAE,OAAO,WACrB,gBAAiB,EAAE,OAAO,gBAC1B,gBAAiB,EAAE,OAAO,gBAC1B,cAAe,EAAE,OAAO,cACxB,YAAa,EAAE,OAAO,YACtB,kBAAmB,EAAE,OAAO,kBAC5B,uBAAwB,EAAE,OAAO,uBACjC,iBAAkB,EAAE,OAAO,iBAC3B,cAAe,EAAE,OAAO,cACxB,aAAc,EAAE,OAAO,aACvB,QAAS,EAAe,CAAA,EAAI,KAAK,OAAO,CAChD,CACA,CACE,CACA,4BAA6B,CAC3B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAmB,KAAK,SAAS,qBAAoB,EACrD,EAAe,KAAK,SAAS,oBAAmB,EAClD,EAAG,eACL,KAAK,iBAAmB,KAAK,WAAW,kBAAiB,GAE3D,EAAE,OAAO,cAAgB,CAAA,EACzB,EAAE,OAAO,aAAe,CAAA,EACxB,EAAE,OAAO,MAAM,IAAI,CAAC,EAAM,IAAU,CAClC,EAAE,OAAO,cAAc,KAAK,CAC1B,MAAO,EAAiB,CAAK,EAAE,MAC/B,MAAA,CACR,CAAO,EACD,EAAE,OAAO,aAAa,KAEpB,CACE,MAAO,EAAa,CAAK,EAAE,MAC3B,MAAA,CACV,CACA,CACI,CAAC,EACD,KAAK,WAAa,KAAK,SAAS,mBAAkB,EAClD,MAAM,EAAmB,KAAK,SAAS,qBAAoB,EACrD,EAAwB,KAAK,SAAS,0BAAyB,EAC/D,EAAe,KAAK,SAAS,oBAAmB,EACtD,KAAK,+BACH,EACA,EACA,CACN,EACI,EAAE,OAAO,gBAAkB,EAAE,OAAO,cAAgB,KAAK,YAAc,EAAI,GAC3E,EAAE,OAAO,gBAAkB,EAAE,OAAO,eAAiB,EAAE,UAAU,YAAc,EAAE,OAAO,MAAM,OAAO,QAAU,IAAM,CAAC,KAAK,WAAa,EAAI,EACxI,EAAE,QAAQ,kBACZ,EAAE,OAAO,cAAgB,GACzB,EAAE,OAAO,gBAAkB,IAAM,SAAS,EAAE,OAAO,MAAM,OAAO,MAAM,SAAU,EAAE,EAAI,MAExF,EAAE,OAAO,gBAAkB,EAAE,OAAO,gBAAkB,EAAE,OAAO,MAAM,OAAO,QAC5E,EAAE,OAAO,gBAAkB,EAAE,OAAO,gBAAkB,EAAE,OAAO,MAAM,OAAO,QAC5E,IAAI,EAAa,KAAK,WAClB,EAAc,KAAK,YACvB,EAAE,OAAO,kBAAoB,KAAK,YAAc,EAAa,OAC7D,EAAE,OAAO,uBAAyB,EAAE,OAAO,kBAAoB,EAAiB,OAChF,EAAE,OAAO,iBAAmB,KAAK,WACjC,EAAE,OAAO,YAAc,KAAK,YAC5B,IAAI,EAAa,IACb,EAAE,OAAO,MAAM,OAAS,SAAW,KAAK,eAC1C,EAAa,EACb,EAAc,GAEZ,KAAK,cACP,KAAK,OAAS,CACZ,OAAQ,EACR,MAAO,CACf,IAEQ,KAAK,aAAe,EAAE,OAAO,MAAM,OAAS,aAC9C,EAAa,EACb,EAAc,EACd,EAAa,GAEX,CAAC,KAAK,aAAe,EAAE,OAAO,MAAM,OAAS,WAC/C,KAAK,SAAS,yBAAyB,CAAgB,EAEzD,MAAM,EAAkB,IAAM,CAC5B,EAAE,OAAO,WAAa,EAAa,KAAK,iBAAiB,MACzD,EAAE,OAAO,WAAa,EAAG,UAAY,KAAK,OAAO,OAAS,GAAe,CAAC,KAAK,aAAe,EAAE,OAAO,MAAM,OAAS,UAAY,EAAE,OAAO,cAAgB,GAAK,GAAK,GACrK,EAAE,OAAO,UAAY,EAAG,SAAW,EAAa,KAAK,iBAAiB,MAAQ,CAChF,EAGA,OAFI,EAAE,OAAO,MAAM,WAAa,QAC9B,EAAa,EAAE,OAAO,YAAc,EAAE,OAAO,MAAM,UAAU,OAAS,GAChE,EAAE,OAAO,OAAO,SAAQ,CAC9B,IAAK,SACH,EAAE,OAAO,WAAa,EACtB,EAAe,EACf,MACF,IAAK,MACH,EAAE,OAAO,WAAa,KAAK,OAAO,OAAS,EAC3C,EAAe,EACf,MACF,IAAK,OACH,EAAE,OAAO,WAAa,EACtB,EAAE,OAAO,WAAa,KAAK,OAAO,MAAQ,EAAa,KAAK,iBAAiB,MAC7E,EAAE,OAAO,WAAa,EAAG,UAAY,EAAc,GACnD,EAAE,OAAO,UAAY,EAAG,SAAW,KAAK,OAAO,MAAQ,EAAa,KAAK,iBAAiB,MAAQ,EAClG,MACF,IAAK,QACH,EAAE,OAAO,WAAa,EACtB,EAAE,OAAO,WAAa,EAAa,KAAK,iBAAiB,MACzD,EAAE,OAAO,WAAa,EAAG,UAAY,EAAc,GACnD,EAAE,OAAO,UAAY,EAAG,SAAW,KAAK,OAAO,MAAQ,EAAa,KAAK,iBAAiB,MAAQ,EAAI,EACtG,MACF,QACE,MAAM,IAAI,MAAM,+BAA+B,CACvD,CACI,KAAK,QAAQ,wBAAwB,EAAc,CAAgB,EAClD,IAAI,GAAM,KAAK,EAAG,CACjC,MAAO,KAAK,MACZ,UAAW,KAAK,SACtB,CAAK,EACQ,kBAAkB,EAAkB,CAAY,CAC3D,CACA,+BAAgC,CAC9B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAM,EAAE,OACd,IAAI,EAAO,EAIX,GAHI,EAAE,OAAO,OAAO,MAAQ,CAAC,EAAE,OAAO,OAAO,WAC3C,EAAO,IAEL,EAAI,MAAM,OAAS,OAAQ,CAC7B,MAAM,EAAgB,EAAI,OAAO,MAAQ,CAAC,EAAI,OAAO,SAC/C,EAAM,EAAI,OAAO,SACvB,IAAI,EAAM,EACN,EAAO,EACP,IACE,IAAQ,UAAY,IAAQ,MAC9B,EAAM,KAAK,OAAO,OAElB,EAAO,KAAK,OAAO,MAAQ,GAG/B,EAAE,OAAO,UAAY,EAAG,SAAW,EACnC,EAAE,OAAO,WAAa,EAAG,UAAY,EACrC,EAAE,OAAO,WAAa,IAAQ,OAAS,EAAO,EAC9C,EAAE,OAAO,WAAa,IAAQ,MAAQ,EAAM,EAC5C,MACF,CACA,MAAM,EAAO,EAAI,MAAM,OAAS,WAAa,WAAa,EAAI,MAAM,OAAS,OAAS,EAAI,MAAM,OAAS,aAAe,EAAI,MAAM,OAAS,QAAU,MAAQ,YACvJ,EAAO,EAAI,YAAY,CAAI,EAAE,QAC7B,EAAO,EAAI,YAAY,CAAI,EAAE,QACnC,GAAI,CAAC,EAAI,OAAO,MAAQ,EAAI,OAAO,SAAU,CAC3C,EAAE,OAAO,WAAa,EAAG,UACzB,MAAM,EAAW,EAAE,IAAI,OAAO,sBAAqB,EAAG,MACtD,EAAE,OAAO,UAAY,KAAK,IAAI,EAAU,EAAE,OAAO,UAAU,EAC3D,EAAE,OAAO,WAAa,EACtB,EAAE,OAAO,WAAa,GAAQ,EAAG,SAAW,EAAE,OAAO,WAAa,EAClE,MACF,CACA,OAAQ,EAAI,OAAO,SAAQ,CACzB,IAAK,SACH,EAAE,OAAO,WAAa,EAAG,UAAY,KAAK,OAAO,OACjD,EAAE,OAAO,UAAY,EAAG,SACxB,EAAE,OAAO,WAAa,EAAO,GAC7B,EAAE,OAAO,WAAa,GAAQ,EAAG,SAAW,EAAE,OAAO,WAAa,EAClE,MACF,IAAK,MACH,EAAE,OAAO,WAAa,EAAG,UAAY,KAAK,OAAO,OACjD,EAAE,OAAO,UAAY,EAAG,SACxB,EAAE,OAAO,WAAa,KAAK,OAAO,OAAS,EAAO,GAClD,EAAE,OAAO,WAAa,GAAQ,EAAG,SAAW,EAAE,OAAO,WAAa,EAClE,MACF,IAAK,OACH,EAAE,OAAO,UAAY,EAAG,SAAW,KAAK,OAAO,MAAQ,EACvD,EAAE,OAAO,WAAa,EAAI,MAAM,SAAW,OAAS,EAAG,UAAY,EAAE,OAAO,UAC5E,EAAE,OAAO,WAAa,EACtB,EAAE,OAAO,WAAa,EAAO,KAAK,OAAO,MAAQ,EACjD,MACF,IAAK,QACH,EAAE,OAAO,UAAY,EAAG,SAAW,KAAK,OAAO,MAAQ,EAAO,EAC9D,EAAE,OAAO,WAAa,EAAI,MAAM,SAAW,OAAS,EAAG,UAAY,EAAE,OAAO,UAC5E,EAAE,OAAO,WAAa,EACtB,EAAE,OAAO,WAAa,EAAO,GAC7B,MACF,QACE,MAAM,IAAI,MAAM,+BAA+B,CACvD,CACE,CAMA,+BAA+B,EAAkB,EAAc,EAAuB,CACpF,MAAM,EAAI,KAAK,EACT,EAAW,EAAE,UAAU,eAAiB,EAAI,EAC5C,EAAkB,EAAsB,OAAS,EAAiB,OAAS,EAAa,OACxF,EAA0B,EAAE,UAAU,aAAe,IAAM,GAC3D,EAAqB,EAAE,OAAO,cAAgB,GAAK,GAEnD,EAD2B,EAAE,OAAO,eAAiB,EAAE,OAAO,OAAO,WAAa,SACpC,GAAK,EACzD,KAAK,YAAc,EAAkB,EAA0B,EAAW,EAAqB,EAC/F,KAAK,WAAa,EAAiB,MAC/B,KAAK,YAAc,EAAa,OAAS,EAAE,OAAO,MAAM,OAAO,YACjE,KAAK,YAAc,EAAE,OAAO,MAAM,OAAO,WAEvC,EAAE,OAAO,MAAM,OAAO,WAAa,KAAK,YAAc,EAAE,OAAO,MAAM,OAAO,YAC9E,KAAK,YAAc,EAAE,OAAO,MAAM,OAAO,WAEvC,EAAE,OAAO,MAAM,WACjB,KAAK,YAAc,GAErB,IAAI,EAAgB,EAChB,EAAgB,EACpB,EAAE,OAAO,MAAM,QAAS,GAAM,CAC5B,GAAiB,EAAE,OAAO,SAC1B,GAAiB,EAAE,OAAO,QAC5B,CAAC,EACG,KAAK,WAAa,IACpB,KAAK,WAAa,GAEhB,KAAK,WAAa,IACpB,KAAK,WAAa,EAEtB,CACF,CACA,MAAM,GAAS,IACT,GAAS,GAAK,GACd,GAAO,GAAK,GACZ,GAAM,GAAK,GACX,GAAO,EAAI,GACX,GAAe,GAAK,GACpB,GAAc,IAAM,GACpB,GAAgB,IAAM,KAAU,IAChC,GAAc,CAClB,CAAE,KAAM,SAAU,KAAM,EAAG,SAAU,EAAM,EAC3C,CAAE,KAAM,SAAU,KAAM,EAAG,SAAU,EAAI,EAAM,EAC/C,CAAE,KAAM,SAAU,KAAM,GAAI,SAAU,GAAK,EAAM,EACjD,CAAE,KAAM,SAAU,KAAM,GAAI,SAAU,GAAK,EAAM,EACjD,CAAE,KAAM,SAAU,KAAM,EAAG,SAAU,EAAM,EAC3C,CAAE,KAAM,SAAU,KAAM,EAAG,SAAU,EAAI,EAAM,EAC/C,CAAE,KAAM,SAAU,KAAM,GAAI,SAAU,GAAK,EAAM,EACjD,CAAE,KAAM,SAAU,KAAM,GAAI,SAAU,GAAK,EAAM,EACjD,CAAE,KAAM,OAAQ,KAAM,EAAG,SAAU,EAAI,EACvC,CAAE,KAAM,OAAQ,KAAM,EAAG,SAAU,EAAI,EAAI,EAC3C,CAAE,KAAM,OAAQ,KAAM,EAAG,SAAU,EAAI,EAAI,EAC3C,CAAE,KAAM,OAAQ,KAAM,GAAI,SAAU,GAAK,EAAI,EAC7C,CAAE,KAAM,MAAO,KAAM,EAAG,SAAU,EAAG,EACrC,CAAE,KAAM,MAAO,KAAM,EAAG,SAAU,EAAI,EAAG,EACzC,CAAE,KAAM,OAAQ,KAAM,EAAG,SAAU,EAAI,EACvC,CAAE,KAAM,OAAQ,KAAM,EAAG,SAAU,EAAI,EAAI,EAC3C,CAAE,KAAM,QAAS,KAAM,EAAG,SAAU,EAAY,EAChD,CAAE,KAAM,QAAS,KAAM,EAAG,SAAU,EAAI,EAAY,EACpD,CAAE,KAAM,QAAS,KAAM,EAAG,SAAU,EAAI,EAAY,EACpD,CAAE,KAAM,OAAQ,KAAM,EAAG,SAAU,EAAW,EAC9C,CAAE,KAAM,OAAQ,KAAM,EAAG,SAAU,EAAI,EAAW,EAClD,CAAE,KAAM,OAAQ,KAAM,EAAG,SAAU,EAAI,EAAW,EAClD,CAAE,KAAM,OAAQ,KAAM,GAAI,SAAU,GAAK,EAAW,EACpD,CAAE,KAAM,OAAQ,KAAM,GAAI,SAAU,GAAK,EAAW,EACpD,CAAE,KAAM,OAAQ,KAAM,GAAI,SAAU,GAAK,EAAW,EACpD,CAAE,KAAM,OAAQ,KAAM,IAAK,SAAU,IAAM,EAAW,CACxD,EACM,GAAqB,GAC3B,MAAM,EAAU,CAKd,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,aAAe,KACpB,KAAK,eAAiB,CAAA,EACtB,KAAK,IAAM,EAAE,OAAO,MAAM,OAAO,WACnC,CAWA,wBAAwB,EAAM,EAAM,CAClC,MAAM,EAAI,KAAK,EACf,GAAI,EAAE,QAAQ,mBACZ,OAAA,EAAE,UAAU,OAAS,CAAA,EACrB,EAAE,UAAU,gBAAkB,CAAA,EAC9B,KAAK,eAAiB,CAAA,EACf,CAAA,EAET,MAAM,EAAO,EAAO,EACd,EAAW,EAAO,GACxB,EAAE,SAAS,cAAgB,GAC3B,EAAE,SAAS,eAAiB,GACxB,EAAW,GACb,EAAE,SAAS,cAAgB,GAClB,EAAW,MACpB,EAAE,SAAS,eAAiB,IAE9B,MAAM,EAAc,OAAO,SAAS,EAAE,OAAO,MAAM,UAAU,EAE3D,EAAE,OAAO,MAAM,WACb,GACJ,KAAK,aAAe,GAAa,EAAM,CAAW,EAClD,MAAM,EAAQ,KAAK,kBAAkB,EAAM,EAAM,KAAK,YAAY,EAClE,YAAK,eAAiB,EACf,CACT,CAWA,kBAAkB,EAAM,EAAM,EAAU,CACtC,MAAM,EAAI,KAAK,EACT,EAAK,IAAI,GAAS,CAAC,EACnB,EAAQ,KAAK,IACb,EAAY,EAAE,OAAO,UACrB,EAAO,EAAO,EACd,EAAQ,CAAA,EACd,IAAI,EAAI,EAAG,eACT,EAEA,EAAS,KACT,EAAS,KACT,CACN,EACQ,EAAO,EACX,MAAM,EAAW,IACjB,KAAO,GAAK,GAAQ,EAAO,GAAU,CACnC,MAAM,EAAI,EAAG,cAAc,EAAG,CAAK,EAC7B,EAAW,EAAO,GAAK,EAAI,GAAQ,EAAO,EAAY,EAC5D,EAAM,KAAK,CACT,UAAW,EACX,SAAA,EACA,KAAM,EAAS,KACf,KAAM,EAAE,KACR,MAAO,EAAE,MAAQ,EACjB,IAAK,EAAE,KACP,KAAM,EAAE,KACR,OAAQ,EAAE,OACV,OAAQ,EAAE,OACV,MAAO,CACf,CAAO,EACD,EAAI,EAAG,YACL,EAEA,EAAS,KACT,EAAS,KACT,CACR,EACM,GACF,CACA,OAAO,CACT,CASA,8BAA8B,EAAU,CACtC,MAAM,EAAI,KAAK,EACT,EAAY,KAAK,YAAY,CAAQ,EACrC,EAAW,KAAK,oBAAoB,CAAS,EACnD,EAAE,UAAU,gBAAkB,EAAS,MAAK,EAE5C,MAAM,EADa,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EACnB,WAAU,EACzC,KAAK,IAAI,mBAAmB,EAAY,MAAM,CAChD,CAaA,YAAY,EAAU,CACpB,MAAM,EAAI,KAAK,EACT,EAAK,IAAI,GAAS,CAAC,EACnB,EAAa,EAAE,OAAO,MAAM,OAAO,OACnC,EAAQ,EAAE,OAAO,MAAM,OAAO,kBAC9B,EAAQ,KAAK,IACb,EAAM,CAAC,EAAG,EAAM,IAAM,OAAO,CAAC,EAAE,SAAS,EAAK,GAAG,EACjD,EAAkB,GAA0B,KAAK,iBAAiB,EAAU,CAAK,EACvF,OAAO,EAAS,IAAK,GAAS,CAC5B,MAAM,EAAO,EAAG,QAAQ,EAAK,SAAS,EAChC,EAAQ,EAAG,WAAW,EAAM,CAAe,EAEjD,MAAO,CACL,WAFS,GAAG,EAAK,IAAI,IAAI,EAAI,EAAK,KAAK,CAAC,IAAI,EAAI,EAAK,GAAG,CAAC,IAAI,EAAI,EAAK,IAAI,CAAC,IAAI,EAAI,EAAK,MAAM,CAAC,IAAI,EAAI,EAAK,MAAM,CAAC,OAAO,EAAQ,IAAM,EAAE,GAG1I,SAAU,EAAK,SACf,MAAA,EACA,KAAM,EAAK,KACX,KAAM,EAAK,KACX,MAAO,EAAK,KACpB,CACI,CAAC,CACH,CAWA,iBAAiB,EAAU,EAAO,CAChC,GAAI,EAAS,SAAW,EAAG,OAAO,EAAM,KAAO,SAC/C,MAAM,EAAO,KAAK,cAAgB,KAAK,aAAa,MAAQ,EAAS,CAAC,EAAE,KAClE,EAAO,EAAM,IAAS,OAAS,MAAQ,CAAI,GAAK,EAAM,KAAO,SAC7D,EAAQ,EAAS,CAAC,EAClB,EAAO,EAAS,EAAS,OAAS,CAAC,EACnC,EAAa,EAAM,OAAS,EAAK,KAEjC,EADc,GAAc,EAAM,QAAU,EAAK,OACtB,EAAM,MAAQ,EAAK,IAC9C,EAAe,KAAK,KAAK,CAAI,EAC7B,EAAgB,IAAI,KAAK,CAAI,EAC7B,EAAc,KAAK,KAAK,CAAI,EAKlC,OAJI,IAAS,SAAW,IAAS,QAI7B,IAAS,MACP,GAAc,CAAC,EAAqB,EAAO,QACxC,GAEL,IAAS,QAAU,IAAS,UAAY,IAAS,WAC/C,GAAa,CAAC,GAAe,CAAC,GACjB,EAAa,cAAgB,UAC5B,IAAM,EAInB,CACT,CAUA,oBAAoB,EAAK,CACvB,GAAI,EAAI,SAAW,EAAG,MAAO,CAAA,EAC7B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,CAAC,EAC/B,IAAI,EAAuB,GACvB,EACA,EAAI,CAAC,EAAE,OAAS,EAAI,MAAO,GAAO,EAAG,MAAM,SAAW,EAAI,CAAC,EAAE,MAAM,MAAM,IAC3E,EAAuB,GACvB,EAAqB,EAAS,aAC5B,EAAI,CAAC,EAAE,MACP,EAAE,OAAO,MAAM,OAAO,MAAM,QACpC,EAAQ,OAEJ,IAAI,EAAiB,EAmBrB,OAlBiB,EAAI,IAAI,CAAC,EAAM,IAAU,CAExC,GADI,IAAU,GACV,CAAC,EAAE,OAAO,MAAM,OAAO,sBAAuB,OAAO,EACzD,MAAM,EAAiB,EAErB,EACE,EAAS,aACX,EAAI,CAAc,EAAE,MACpB,EAAE,OAAO,MAAM,OAAO,MAAM,QACpC,EAAQ,MACI,EAAU,EAAI,CAAc,EAAE,SAEpC,OADY,EAAK,SACP,EAAU,EAAiB,IACnC,EAAiB,EACV,GAEF,IACT,CAAC,EAAE,OAAQ,GAAM,IAAM,IAAI,CAE7B,CACF,CACA,SAAS,GAAa,EAAM,EAAa,CAIvC,IAHI,CAAC,OAAO,SAAS,CAAW,GAAK,GAAe,KAClD,EAAc,IAEZ,GAAQ,EAAG,OAAO,GAAY,CAAC,EACnC,MAAM,EAAW,EAAO,EACxB,IAAI,EAAO,GAAY,CAAC,EACpB,EAAW,IACf,UAAW,KAAY,GAAa,CAClC,MAAM,EAAO,KAAK,IAAI,KAAK,IAAI,EAAS,SAAW,CAAQ,CAAC,EACxD,EAAO,IACT,EAAW,EACX,EAAO,EAEX,CACA,OAAO,CACT,CACA,MAAM,GAAiB,0BACjB,GAAa,8BAEnB,WAAW,EAAc,IACvB,WAAW,EAAc,EAAI,CAAA,GAG/B,WAAW,EAAU,IACnB,WAAW,EAAU,EAAoB,IAAI,KAE/C,SAAS,IAAgB,CACvB,OAEE,WAAW,EAAc,CAE7B,CACA,SAAS,IAAiB,CACxB,OAEE,WAAW,EAAU,CAEzB,CACA,SAAS,GAAW,EAAO,CACzB,GAAc,EAAG,IAAI,CAAK,CAC5B,CACA,SAAS,GAAS,EAAO,CACvB,OAAO,GAAc,EAAG,IAAI,CAAK,CACnC,CACA,SAAS,GAAc,EAAM,CAC3B,MAAO,CAAC,CAAC,GAAa,EAAG,CAAI,CAC/B,CACA,SAAS,GAAW,EAAO,CACzB,OAAO,GAAa,EAAG,CAAK,EAC5B,GAAc,EAAG,OAAO,CAAK,CAC/B,CACA,SAAS,GAAS,EAAS,CACzB,OAAO,OAAO,GAAa,EAAI,CAAO,CACxC,CACA,SAAS,GAAc,EAAM,CAC3B,MAAM,EAAM,GAAa,EAAG,CAAI,EAChC,GAAI,CAAC,EACH,MAAM,IAAI,MACR,2BAA2B,CAAI,wFACrC,EAEE,OAAO,CACT,CACA,MAAM,EAAK,CAMT,YAAY,EAAI,EAAG,EAAK,CACtB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,GAAK,CACZ,CACA,eAAgB,CACd,KAAM,CAAE,QAAS,EAAI,OAAQ,CAAG,EAAK,KAAK,EACpC,EAAK,EAAI,MAAM,KACf,EAAmB,CACvB,OACA,OACA,MACA,WACA,YACA,cACA,UACA,SACA,UACA,QACN,EACU,EAAqB,CACzB,GAAG,EACH,QACA,UACA,SACN,EACU,EAAe,CAAC,EAAmB,SAAS,CAAE,GAAK,CAAC,CAAC,MAAO,QAAS,YAAa,WAAW,EAAE,SAAS,CAAE,GAAK,GAAS,CAAE,EAChI,EAAG,WAAa,EAAmB,SAAS,CAAE,GAAK,EACnD,EAAG,SAAW,EAAiB,SAAS,CAAE,GAAK,EAC/C,EAAG,gBAAkB,CAAC,MAAO,WAAY,UAAW,QAAQ,EAAE,SAAS,CAAE,GAAK,EAAI,YAAY,IAAI,WAClG,EAAG,WAAa,cAAc,EAAG,OAAO,GACxC,KAAK,EAAE,IAAI,OAAS,KAAK,GACzB,KAAK,EAAE,IAAI,OAAS,EAAY,gBAC9B,+BACA,KACN,EACI,EAAS,SAAS,KAAK,EAAE,IAAI,OAAQ,CACnC,GAAI,EAAG,WAAW,UAAU,CAAC,EAC7B,MAAO,qBAAqB,EAAG,WAAW,UAAU,CAAC,CAAC,EAC5D,CAAK,EACD,KAAK,GAAG,YAAY,KAAK,EAAE,IAAI,MAAM,EACrC,MAAM,EAEJ,WAAW,IA2Bb,GAzBA,KAAK,EAAE,IAAI,MAAQ,EAAI,EAAG,MAAM,KAAK,EAAE,IAAI,MAAM,EACjD,KAAK,EAAE,IAAI,MAAM,KAAK,CACpB,MAAO,iBACP,aAAc,eACd,UAAW,aAAa,EAAI,MAAM,OAAO,KAAK,EAAI,MAAM,OAAO,GACrE,CAAK,EACD,KAAK,EAAE,IAAI,MAAM,KAAK,MAAM,WAAa,EAAI,MAAM,OAAS,QAAU,CAAC,EAAI,MAAM,WAAa,UAAY,EAAI,MAAM,OAAS,SAAW,CAAC,EAAI,MAAM,WAAa,OAAS,EAAI,MAAM,WACnL,KAAK,iBAAgB,EACrB,KAAK,EAAE,IAAI,gBAAkB,EAAY,gBACvC,GACA,eACN,EACI,EAAS,SAAS,KAAK,EAAE,IAAI,gBAAiB,CAC5C,EAAG,EACH,EAAG,EACH,MAAO,EAAG,SACV,OAAQ,EAAG,SACjB,CAAK,EACD,KAAK,EAAE,IAAI,aAAe,EAAY,gBACpC,+BACA,KACN,EACI,KAAK,EAAE,IAAI,aAAa,UAAU,IAAI,mBAAmB,EACzD,KAAK,EAAE,IAAI,OAAO,YAAY,KAAK,EAAE,IAAI,YAAY,EACrD,KAAK,EAAE,IAAI,MAAM,KAAK,YAAY,KAAK,EAAE,IAAI,eAAe,EACxD,EAAI,MAAM,cAAc,SAAW,EAAI,MAAM,cAAc,cAAc,QAAS,CACpF,MAAM,EAAW,EAAY,cAAc,KAAK,EAChD,EAAS,UAAY,uBACrB,EAAS,aAAa,OAAQ,QAAQ,EACtC,EAAS,aAAa,YAAa,QAAQ,EAC3C,EAAS,aAAa,cAAe,MAAM,EAC3C,KAAK,EAAE,IAAI,OAAO,YAAY,CAAQ,CACxC,CACA,GAAI,EAAI,MAAM,cAAc,QAAS,CACnC,MAAM,EAAY,KAAK,wBAAuB,EACxC,EAAU,EAAI,MAAM,cAAc,SAAS,SAAW,EAAI,MAAM,cAAc,SAAS,WAAW,QAAU,cAAgB,MAKlI,GAJA,KAAK,EAAE,IAAI,MAAM,KAAK,CACpB,KAAM,EACN,aAAc,CACtB,CAAO,EACG,EAAI,MAAM,cAAc,YAAa,CACvC,MAAM,EAAS,EAAY,gBAAgB,GAAS,MAAM,EAC1D,EAAO,YAAc,EAAI,MAAM,cAAc,YAC7C,KAAK,EAAE,IAAI,MAAM,KAAK,aACpB,EACA,KAAK,EAAE,IAAI,gBAAgB,WACrC,CACM,CACF,CACA,KAAK,EAAE,IAAI,YAAc,KAAK,EAAE,IAAI,MAAM,MAAK,EAAG,KAAK,CACrD,MAAO,uCACb,CAAK,EACD,KAAK,EAAE,IAAI,OAAS,KAAK,EAAE,IAAI,MAAM,KAAI,EACzC,KAAK,EAAE,IAAI,MAAM,IAAI,KAAK,EAAE,IAAI,WAAW,EAC3C,KAAK,EAAE,IAAI,YAAY,IAAI,KAAK,EAAE,IAAI,MAAM,CAC9C,CAWA,sBAAsB,EAAK,CACzB,KAAM,CAAE,EAAA,CAAC,EAAK,KACR,CAAE,OAAQ,EAAK,QAAS,CAAE,EAAK,EAC/B,EAAc,CAClB,KAAM,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EACzB,KAAM,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EACzB,QAAS,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EAC5B,OAAQ,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EAC3B,IAAK,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EACxB,YAAa,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EAChC,QAAS,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EAC5B,OAAQ,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EAC3B,SAAU,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EAC7B,UAAW,CAAE,OAAQ,CAAA,EAAI,eAAgB,CAAA,EAAI,EAAG,CAAA,CAAE,CACxD,EACU,EAAgB,CAAA,EAChB,EAAY,EAAI,MAAM,MAAQ,OACpC,IAAI,EAAe,KACf,EAAa,EACjB,YAAK,EAAE,WAAW,OAAO,QAAQ,CAAC,EAAO,IAAO,CAC9C,IAAI,EAAI,EACR,MAAM,IAAe,EAAK,EAAI,CAAE,IAAM,KAAO,OAAS,EAAG,QAAU,SAAW,QAAU,EAAK,EAAI,CAAE,IAAM,KAAO,OAAS,EAAG,QAAU,IAAc,SAAW,MAAQ,GACjK,EAEJ,EAEE,EAAI,CAAU,GACZ,IAAe,aACjB,EAAI,CAAU,EAAE,OAAO,KAAK,KAAK,EAAE,UAAU,iBAAiB,CAAE,CAAC,EACjE,EAAI,CAAU,EAAE,eAAe,KAC7B,KAAK,EAAE,UAAU,eAAe,CAAE,CAC9C,GAEU,EAAI,CAAU,EAAE,OAAO,KAAK,CAAK,EAEnC,EAAI,CAAU,EAAE,EAAE,KAAK,CAAE,EACrB,IAAe,QAAO,EAAE,QAAQ,aAAe,EAAY,MACtD,CACT,UACA,UACA,MACA,QACA,YACA,YACA,QACA,OACA,UACR,EAAQ,SAAS,CAAU,EACnB,EAAe,EACN,GAAS,CAAU,GACvB,EAAc,CAAU,IAC3B,EAAc,CAAU,EAAI,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,GAEjD,EAAc,CAAU,EAAE,OAAO,KAAK,CAAK,EAC3C,EAAc,CAAU,EAAE,EAAE,KAAK,CAAE,GAEnC,QAAQ,KACN,mDAAmD,CAAU,IACvE,EAEU,IAAc,GAAc,IAAe,WAAW,GAC5D,CAAC,EACG,EAAa,IACX,GACF,QAAQ,KACN,wBAAwB,CAAY,kDAC9C,EAEU,EAAY,IAAI,OAAO,OAAS,GAAK,EAAI,YAAY,IAAI,aAC3D,GAAc,EAAY,IAAI,OAAO,OACrC,EAAY,IAAM,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EACrC,EAAE,QAAQ,aAAe,CAAE,OAAQ,CAAA,EAAI,EAAG,CAAA,CAAE,EAC5C,QAAQ,KACN,wGACV,IAGI,EAAG,cAAgB,EAAG,YAAc,EAAa,GAC1C,CAAE,YAAA,EAAa,cAAA,CAAa,CACrC,CAKA,cAAc,EAAK,EAAU,CAC3B,KAAM,CAAE,EAAA,EAAG,IAAA,CAAG,EAAK,KACb,EAAa,EAAI,UAAY,EAAI,SAAS,OAAS,SACrD,GAAY,EAAI,SAAS,YAAW,EACxC,KAAM,CAAE,YAAA,EAAa,cAAA,CAAa,EAAK,KAAK,sBAAsB,CAAG,EAC/D,EAAY,KAAK,4BAA4B,EAAa,CAAQ,EAClE,EAAU,KAAK,wBACnB,EACA,EACA,EACA,CACN,EACI,GAAI,EAAY,CACd,MAAM,EAEJ,EAAI,SAEN,GAAI,GAAM,EAAG,oBAAqB,CAChC,EAAG,oBAAsB,GACzB,MAAM,EAAW,KAAK,EAAE,IAAI,YAAY,KAAK,cAC3C,gCACV,EACQ,GAAI,GAAY,EAAG,mBAAqB,EAAG,kBAAiB,EAC1D,OAAA,EAAG,eAAc,GACF,MAAM,QAAQ,CAAO,EAAI,EAAU,CAAC,CAAO,GACnD,QAAS,GAAM,CAChB,GAAK,EAAE,MAAM,EAAS,YAAY,EAAE,IAAI,CAC9C,CAAC,EACM,CAAA,CAEX,CACA,MAAM,EAAO,EAAI,SAAS,QAAO,EACjC,GAAI,EAAM,CACR,MAAM,EAAO,IAAI,EAAS,CAAC,EAAE,MAAM,CACjC,MAAO,+BACjB,CAAS,EACD,OAAA,EAAK,IAAI,CAAI,GACE,MAAM,QAAQ,CAAO,EAAI,EAAU,CAAC,CAAO,GACnD,QAAS,GAAM,CAChB,GAAG,EAAK,IAAI,CAAC,CACnB,CAAC,EACM,CACT,CACF,CACA,OAAO,CACT,CAYA,4BAA4B,EAAa,EAAU,CACjD,KAAM,CAAE,EAAA,EAAG,IAAA,CAAG,EAAK,KACb,CAAE,OAAQ,EAAK,QAAS,CAAE,EAAK,EAI/B,EAHY,EAAY,KAAK,OAAO,OAAS,GAAK,EAAY,KAAK,OAAO,OAAS,GAAK,EAAY,QAAQ,OAAO,OAAS,GAAK,EAAY,OAAO,OAAO,OAAS,GAAK,EAAY,UAAU,OAAO,OAAS,GAAK,CAAC,EAAG,aAAe,CAAC,OAAQ,OAAQ,UAAW,SAAU,WAAW,EAAE,SAC9R,EAAI,MAAM,IAChB,EAC6B,IAAK,GAAc,MAAM,GAAG,EAAI,EAAG,EAAK,CAAQ,EAAI,KAEvE,EADmB,EAAY,YAAY,OAAO,OAAS,GAAK,EAAY,QAAQ,OAAO,OAAS,GAAK,CAAC,EAAG,aAAe,CAAC,cAAe,SAAS,EAAE,SAAS,EAAI,MAAM,IAAI,EAC1I,IAAK,GAAc,aAAa,GAAG,EAAI,EAAG,EAAK,CAAQ,EAAI,KAE/F,EADc,EAAY,OAAO,OAAO,OAAS,GAAK,CAAC,EAAG,aAAe,EAAI,MAAM,OAAS,SACrE,IAAK,GAAc,QAAQ,GAAG,EAAI,EAAG,EAAK,CAAQ,EAAI,KAC7E,EAAW,CAAC,EAAG,aAAe,CAAC,MAAO,QAAS,WAAW,EAAE,SAAS,EAAI,MAAM,IAAI,EACzF,EAAI,IAAM,EAAW,IAAK,GAAc,KAAK,GAAG,EAAI,EAAG,CAAG,EAAI,KAC9D,MAAM,EAAgB,EAAY,SAAS,OAAO,OAAS,GAAK,CAAC,EAAG,aAAe,EAAI,MAAM,OAAS,WACtG,OAAA,EAAI,SAAW,EAAgB,IAAK,GAAc,UAAU,GAAG,EAAI,EAAG,EAAK,CAAQ,EAAI,KAChF,CAAE,KAAA,EAAM,eAAA,EAAgB,OAAA,CAAM,CACvC,CAaA,wBAAwB,EAAa,EAAe,EAAW,EAAU,CACvE,KAAM,CAAE,EAAA,EAAG,IAAA,CAAG,EAAK,KACb,CAAE,OAAQ,EAAK,QAAS,CAAE,EAAK,EAC/B,CAAE,KAAA,EAAM,eAAA,EAAgB,OAAA,CAAM,EAAK,EACzC,IAAI,EAAU,CAAA,EACd,GAAI,EAAG,YAAa,CAClB,MAAM,EAAY,IAAI,GAAU,KAAK,CAAC,EAWtC,GAVI,EAAY,KAAK,OAAO,OAAS,GACnC,EAAQ,KACN,GAAG,EAAU,kBACX,EAAY,KACZ,EAAG,WACH,OACA,CACZ,CACA,EAEU,EAAY,IAAI,OAAO,OAAS,EAClC,GAAI,EAAI,MAAM,QAAS,CACrB,MAAM,EAAa,IAAK,GAAc,YAAY,GAChD,EAAI,EACJ,EACA,CACZ,EACU,EAAQ,KACN,EAAW,KAAK,EAAY,IAAI,OAAQ,EAAY,IAAI,CAAC,CACrE,CACQ,MACE,EAAI,IAAM,IAAK,GAAc,KAAK,GAAG,EAAI,EAAG,EAAK,CAAQ,EACzD,EAAQ,KAAK,EAAI,IAAI,KAAK,EAAY,IAAI,OAAQ,EAAY,IAAI,CAAC,CAAC,EAsDxE,GAnDI,EAAY,UAAU,OAAO,OAAS,GACxC,EAAQ,KACN,EAAK,KACH,EAAY,UAAU,OACtB,YACA,EAAY,UAAU,EACtB,EAAY,UAAU,cAClC,CACA,EAEU,EAAY,KAAK,OAAO,OAAS,GACnC,EAAQ,KACN,GAAG,EAAU,kBACX,EAAY,KACZ,EAAG,WACH,OACA,CACZ,CACA,EAEU,EAAY,YAAY,OAAO,OAAS,GAC1C,EAAQ,KACN,EAAe,KACb,EAAY,YAAY,OACxB,cACA,EAAY,YAAY,CACpC,CACA,EAEU,EAAY,QAAQ,OAAO,OAAS,GACtC,EAAQ,KACN,EAAe,KACb,EAAY,QAAQ,OACpB,UACA,EAAY,QAAQ,CAChC,CACA,EAEU,EAAY,OAAO,OAAO,OAAS,GACrC,EAAQ,KACN,EAAO,KAAK,EAAY,OAAO,OAAQ,SAAU,EAAY,OAAO,CAAC,CAC/E,EAEU,EAAY,SAAS,OAAO,OAAS,GACvC,EAAQ,KACN,EAAI,SAAS,KACX,EAAY,SAAS,OACrB,EAAY,SAAS,CACjC,CACA,EAEU,EAAY,QAAQ,OAAO,OAAS,EAAG,CACzC,MAAM,EAAc,IAAK,GAAc,MAAM,GAC3C,EAAI,EACJ,EACA,EACA,EACV,EACQ,EAAQ,KACN,EAAY,KACV,EAAY,QAAQ,OACpB,UACA,EAAY,QAAQ,CAChC,CACA,CACM,CACA,GAAI,EAAY,OAAO,OAAO,OAAS,EAAG,CACxC,MAAM,EAAa,IAAK,GAAc,MAAM,GAC1C,EAAI,EACJ,EACA,EACA,EACV,EACQ,EAAQ,KACN,EAAW,KACT,EAAY,OAAO,OACnB,SACA,EAAY,OAAO,CAC/B,CACA,CACM,CACA,OAAO,KAAK,CAAa,EAAE,QAAS,GAAU,CAC5C,MAAM,EAAS,EAAc,CAAK,EAClC,GAAI,EAAO,OAAO,OAAS,EAAG,CAC5B,MAAM,EAAK,IAAK,GAAc,CAAK,GAAG,EAAI,EAAG,EAAK,CAAQ,EAC1D,EAAQ,KAAK,EAAG,KAAK,EAAO,OAAQ,EAAO,EAAO,CAAC,CAAC,CACtD,CACF,CAAC,CACH,KAAO,CACL,MAAM,EAAO,EAAI,MAAM,KACvB,OAAQ,EAAI,CACV,IAAK,OACH,EAAU,EAAK,KAAK,KAAK,EAAE,WAAW,OAAQ,MAAM,EACpD,MACF,IAAK,OACH,EAAU,EAAK,KAAK,KAAK,EAAE,WAAW,OAAQ,MAAM,EACpD,MACF,IAAK,MACC,EAAI,MAAM,QAMZ,EALmB,IAAK,GAAc,YAAY,GAChD,EAAI,EACJ,EACA,CACd,EACiC,KAAK,KAAK,EAAE,WAAW,MAAM,GAElD,EAAI,IAAM,IAAK,GAAc,KAAK,GAAG,EAAI,EAAG,EAAK,CAAQ,EACzD,EAAU,EAAI,IAAI,KAAK,KAAK,EAAE,WAAW,MAAM,GAEjD,MACF,IAAK,cACH,EAAU,EAAe,KAAK,KAAK,EAAE,WAAW,OAAQ,aAAa,EACrE,MACF,IAAK,UACH,EAAU,EAAe,KAAK,KAAK,EAAE,WAAW,OAAQ,CAAI,EAC5D,MACF,IAAK,SACH,EAAU,EAAO,KAAK,KAAK,EAAE,WAAW,OAAQ,QAAQ,EACxD,MACF,IAAK,WACH,EAAU,EAAI,SAAS,KAAK,KAAK,EAAE,WAAW,MAAM,EACpD,MACF,IAAK,YACH,EAAU,EAAK,KACb,KAAK,EAAE,UAAU,iBACjB,YACA,OACA,KAAK,EAAE,UAAU,cAC7B,EACU,MACF,IAAK,UAAW,CAEd,EADgB,IAAK,GAAc,SAAS,GAAG,EAAI,EAAG,EAAK,CAAQ,EACjD,KAAK,KAAK,EAAE,WAAW,MAAM,EAC/C,KACF,CACA,IAAK,UAAW,CAEd,EADgB,IAAK,GAAc,SAAS,GAAG,EAAI,EAAG,CAAG,EACvC,KAAK,KAAK,EAAE,WAAW,MAAM,EAC/C,KACF,CACA,IAAK,OAAQ,CAEX,EADa,IAAK,GAAc,MAAM,GAAG,EAAI,EAAG,CAAG,EACpC,KAAK,KAAK,EAAE,WAAW,MAAM,EAC5C,KACF,CACA,IAAK,WAAY,CAEf,EADiB,IAAK,GAAc,UAAU,GAAG,EAAI,EAAG,CAAG,EACxC,KAAK,KAAK,EAAE,WAAW,MAAM,EAChD,KACF,CACA,IAAK,MACL,IAAK,QACL,IAAK,YACH,EAAU,EAAI,IAAI,KAAK,KAAK,EAAE,WAAW,MAAM,EAC/C,MACF,IAAK,YAAa,CAEhB,EADkB,IAAK,GAAc,WAAW,GAAG,EAAI,EAAG,CAAG,EACzC,KAAK,KAAK,EAAE,WAAW,MAAM,EACjD,KACF,CACA,IAAK,QAAS,CAEZ,EADc,IAAK,GAAc,OAAO,GAAG,EAAI,EAAG,CAAG,EACrC,KAAK,KAAK,EAAE,WAAW,MAAM,EAC7C,KACF,CACA,QACM,GAAS,CAAI,EAEf,EADW,IAAK,GAAc,CAAI,GAAG,EAAI,EAAG,EAAK,CAAQ,EAC5C,KAAK,KAAK,EAAE,WAAW,OAAQ,CAAI,EAEhD,EAAU,EAAK,KAAK,KAAK,EAAE,WAAW,MAAM,CAExD,CACI,CACA,OAAO,CACT,CASA,sBAAsB,EAAO,CAC3B,OAAO,OAAO,CAAK,EAAE,MAAM,SAAS,EAAE,IAAG,CAC3C,CACA,kBAAmB,CACjB,IAAI,EACJ,KAAM,CAAE,QAAS,EAAI,OAAQ,CAAG,EAAK,KAAK,EAC1C,EAAI,MAAM,MAAQ,EAAI,MAAM,OAAS,OACrC,EAAI,MAAM,OAAS,EAAI,MAAM,QAAU,OACvC,MAAM,EAAW,EAAI,MAAM,MACrB,EAAY,EAAI,MAAM,OAC5B,EAAG,SAAW,IACd,EAAG,UAAY,IACf,IAAI,EAAQ,EAAQ,cAAc,KAAK,EAAE,EACzC,MAAM,EAAY,KAAK,sBAAsB,CAAQ,EACjD,IAAc,IACZ,EAAQ,SAAS,EAAM,CAAC,CAAC,IACvB,EAAM,CAAC,EAAE,QAAU,IACrB,EAAQ,EAAQ,cAAc,KAAK,GAAG,UAAU,GAElD,EAAG,SAAW,EAAM,CAAC,EAAI,SAAS,EAAU,EAAE,EAAI,MAE3C,IAAc,MAAQ,IAAc,MAC7C,EAAG,SAAW,SAAS,EAAU,EAAE,GAErC,MAAM,EAAa,KAAK,sBAAsB,CAAS,EACvD,GAAI,IAAc,QAAU,IAAc,GACxC,GAAI,IAAe,IAAK,CACtB,MAAM,EAAc,EAAQ,cAAc,KAAK,GAAG,UAAU,EAC5D,EAAG,UAAY,EAAY,CAAC,EAAI,SAAS,EAAW,EAAE,EAAI,GAC5D,MACE,EAAG,UAAY,SAAS,EAAW,EAAE,OAGvC,EAAG,UAAY,EAAG,WAAa,EAAG,SAAW,KAAO,EAAG,SAAW,IAQpE,GANA,EAAG,SAAW,KAAK,IAAI,EAAG,SAAU,CAAC,EACrC,EAAG,UAAY,KAAK,IAAI,EAAG,UAAW,CAAC,EACvC,EAAS,SAAS,KAAK,EAAE,IAAI,MAAM,KAAM,CACvC,MAAO,EAAG,SACV,OAAQ,EAAG,SACjB,CAAK,EACG,IAAe,KAAO,EAAY,UAAS,EAAI,CACjD,MAAM,EAAmB,EAAG,aAAe,EAAI,KAAK,MAAQ,EAAI,WAAW,SAAW,EAAI,MAAM,OAAO,MAAQ,EAAI,MAAM,WAAW,MAAQ,EAAI,MAAM,UAAU,MAAQ,EAAI,MAAM,KAC/K,GAAM,EAAE,OAAS,EAAE,OAAO,MAAQ,EAAE,WAAW,MAAQ,EAAE,UAAU,KAC5E,GACY,EAAU,EAAI,MAAM,UAAU,SAAW,CAAC,EAAmB,EAAI,EAAI,MAAM,mBAC3E,EAAY,KAAK,EAAE,IAAI,MAAM,MAC9B,EAAK,EAAU,aAAe,MAAgB,EAAG,aACpD,EAAU,WAAW,WAAW,MAAM,UAAY,GAAG,EAAG,UAAY,CAAO,KAE/E,CACA,KAAK,EAAE,IAAI,OAAO,MAAM,MAAQ,GAAG,EAAG,QAAQ,KAC9C,KAAK,EAAE,IAAI,OAAO,MAAM,OAAS,GAAG,EAAG,SAAS,KAChD,EAAG,oBAAsB,KAAK,mBAAkB,CAClD,CAYA,oBAAqB,CACnB,KAAM,CAAE,OAAQ,CAAG,EAAK,KAAK,EACvB,GAAY,EAAI,MAAM,OAAS,QAAQ,SAAQ,EAAG,KAAI,EACtD,GAAa,EAAI,MAAM,QAAU,QAAQ,SAAQ,EAAG,KAAI,EAC9D,IAAI,EAAI,EACJ,EAAI,EACR,GAAI,EAAS,SAAS,GAAG,EAAG,CAC1B,IAAI,EAAQ,EAAQ,cAAc,KAAK,EAAE,EACpC,EAAM,CAAC,IAAG,EAAQ,EAAQ,cAAc,KAAK,GAAG,UAAU,GAC/D,EAAI,EAAM,CAAC,GAAK,CAClB,CACI,EAAU,SAAS,GAAG,IACxB,EAAI,EAAQ,cAAc,KAAK,GAAG,UAAU,EAAE,CAAC,GAAK,GAEtD,MAAM,EAAM,CAAE,EAAG,KAAK,MAAM,CAAC,EAAG,EAAG,KAAK,MAAM,CAAC,CAAC,EAChD,OAAI,EAAI,YAAc,EAAI,WAAW,QAAU,EAAY,UAAS,IAClE,EAAI,GAAK,OAAO,YAEX,CACT,CACA,oBAAqB,CACnB,KAAM,CAAE,QAAS,CAAE,EAAK,KAAK,EACvB,CAAE,WAAY,EAAI,WAAY,CAAE,EAAK,EAC3C,EAAS,SAAS,KAAK,EAAE,IAAI,YAAY,KAAM,CAC7C,UAAW,aAAa,CAAE,KAAK,CAAE,GACvC,CAAK,CACH,CACA,qBAAsB,CACpB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACpC,KAAM,CAAE,EAAA,CAAC,EAAK,KACR,EAAY,EAAE,OAAO,MAAM,OAAS,OAAO,EAAE,OAAO,MAAM,MAAM,EAAI,GACpE,EAAqB,IAAc,IAAM,IAAc,OACvD,EAAkB,EAAU,SAAS,GAAG,EAC9C,IAAI,EAAe,EACf,EAAO,EAAE,OAAO,MAAM,UAAU,QAAU,EAAI,GAClD,GAAQ,EAAE,OAAO,QAAQ,OACrB,CAAC,MAAO,QAAQ,EAAE,SAAS,EAAE,OAAO,OAAO,QAAQ,GAAK,EAAE,OAAO,OAAO,MAAQ,CAAC,EAAE,OAAO,OAAO,WACnG,IAAiB,GAAM,EAAK,KAAK,IAAI,SAAW,KAAO,OAAS,EAAG,cAAc,oBAAmB,EAAG,OAAS,KAAO,EAAK,GAAK,GAEnI,MAAM,EAAK,EAAE,IAAI,OAAO,cACtB,8DACN,EACU,EAAuB,EAAE,QAAQ,yBAA2B,EAClE,IAAI,EAAuB,EAAuB,EAAI,EAAE,QAAQ,WAAa,EAAI,EAAuB,EAAI,EAAE,QAAQ,WAAa,KACnI,MAAM,EAAY,EAAE,OAAO,MAAM,OAAS,WAAa,WAAa,EAAE,OAAO,MAAM,OAAS,OAAS,EAAE,OAAO,MAAM,OAAS,SAAW,EAAE,OAAO,MAAM,OAAS,YAAc,MAAQ,YAChL,EAAkB,KAAK,IAC3B,EAAE,OAAO,YAAY,CAAS,EAAE,SAAW,EAAE,OAAO,YAAY,CAAS,EAAE,UACjF,EACI,GAAI,GAAM,CAAC,EAAE,OAAO,MAAM,UAAU,SAAW,EAAkB,IAAK,CACpE,MAAM,EAAU,EAAQ,sBAAsB,KAAK,EAAE,IAAI,MAAM,IAAI,EACnE,IAAI,EAAmB,IACnB,EAAsB,KAC1B,MAAM,EAAc,GAAS,CAC3B,IAAI,EAAK,EAAK,EAAK,EACnB,IAAK,EAAM,EAAK,YAAc,MAAgB,EAAI,SAAS,6BAA6B,EACtF,OAEF,MAAM,GAAO,GAAO,EAAM,EAAK,UAAY,KAAO,OAAS,EAAI,cAAgB,KAAO,OAAS,EAAI,KAAK,CAAG,EAC3G,GAAI,IAAQ,QAAU,IAAQ,QAAS,OACvC,MAAM,EAAW,MAAM,MAAM,EAAM,EAAK,WAAa,KAAO,EAAM,CAAA,CAAE,EACpE,GAAI,EAAS,OAAS,EAAG,CACvB,EAAS,QAAS,GAAM,EAEtB,CACZ,CAAW,EACD,MACF,CACA,MAAM,EAAI,EAAQ,sBAAsB,CAAI,EAE5C,GADe,EAAE,OAAS,EAAE,IACf,EAAG,CACd,MAAM,EAAM,EAAE,IAAM,EAAQ,IACtB,EAAS,EAAE,OAAS,EAAQ,IAC9B,EAAM,IAAkB,EAAmB,GAC3C,EAAS,IAAqB,EAAsB,EAC1D,CACF,EACA,MAAM,MAAM,EAAK,EAAG,WAAa,KAAO,EAAK,CAAA,CAAE,EAAE,QAC9C,GAAM,EAEL,CACV,CACA,EACW,OAAO,SAAS,CAAgB,IAAG,EAAmB,GACtD,OAAO,SAAS,CAAmB,IAEtC,EADe,EAAQ,sBAAsB,CAAE,EAClB,OAAS,EAAQ,KAEhD,MAAM,EAAU,KAAK,IAAI,EAAM,EAAE,QAAQ,WAAa,EAAG,EACnD,EAAgB,KAAK,IAAI,EAAU,EAAkB,CAAC,EACxD,IAAkB,IACpB,EAAE,OAAO,aAAe,EAAK,EAAE,OAAO,aAAe,KAAO,EAAK,GAAK,EACtE,EAAS,SAAS,KAAK,EAAE,IAAI,YAAY,KAAM,CAC7C,UAAW,cAAc,EAAK,EAAE,OAAO,aAAe,KAAO,EAAK,CAAC,KAAK,EAAE,OAAO,UAAU,GACrG,CAAS,EACD,GAAuB,GAEzB,EAAuB,EAAsB,EAAI,EAAsB,EAAE,QAAQ,WAAa,KAC9F,MAAM,EAAgB,KAAK,IAAI,EAAS,CAAgB,EAClD,EAAY,KAAK,KACrB,EAAuB,EAAe,CAC9C,EACY,GAAgB,EAAK,EAAE,OAAO,MAAM,UAAY,KAAO,EAAK,EAC5D,EAAe,EAAY,KAAK,IAAI,EAAc,CAAC,EACzD,GAAI,CAAC,EAAiB,CASpB,GARI,KAAK,EAAE,IAAI,iBACb,KAAK,EAAE,IAAI,gBAAgB,aACzB,SACA,OAAO,CAAY,CAC/B,EAEQ,KAAK,EAAE,IAAI,OAAO,MAAM,OAAS,GAAG,CAAY,KAChD,EAAS,SAAS,KAAK,EAAE,IAAI,MAAM,KAAM,CAAE,OAAQ,CAAS,CAAE,EAC1D,EAAY,UAAS,EAAI,CAC3B,MAAM,GAAe,EAAK,KAAK,EAAE,IAAI,MAAM,KAAK,aAAe,KAAO,OAAS,EAAG,WAC9E,IACF,EAAY,MAAM,UAAY,GAAG,CAAY,KAEjD,CACA,EAAE,QAAQ,UAAY,EAClB,EAAE,OAAO,OAAO,WAAa,UAAY,EAAE,OAAO,OAAO,MAAQ,CAAC,EAAE,OAAO,OAAO,YACnF,EAAK,KAAK,IAAI,SAAW,MAAgB,EAAG,gBAAgB,GAAI,CAAC,EAEtE,CACA,MACF,CACA,MAAM,EAAY,KAAK,KACrB,EAAuB,KAAK,EAAE,OAAO,WAAa,EAAe,CACvE,EACI,GAAI,CAAA,IACA,KAAK,EAAE,IAAI,iBACb,KAAK,EAAE,IAAI,gBAAgB,aAAa,SAAU,OAAO,CAAS,CAAC,EAErE,KAAK,EAAE,IAAI,OAAO,MAAM,OAAS,GAAG,CAAS,KAC7C,EAAS,SAAS,KAAK,EAAE,IAAI,MAAM,KAAM,CAAE,OAAQ,CAAS,CAAE,EAC1D,EAAY,UAAS,GAAI,CAC3B,MAAM,GAAe,EAAK,KAAK,EAAE,IAAI,MAAM,KAAK,aAAe,KAAO,OAAS,EAAG,WAC9E,IACF,EAAY,MAAM,UAAY,GAAG,CAAS,KAE9C,CACF,CACA,kBAAmB,CACjB,IAAI,GAAM,KAAK,CAAC,EAAE,KAAI,CACxB,CACA,cAAe,CACb,MAAM,EAAgB,IAAM,KAAK,EAAE,OAAO,OAAO,IAAI,IAAM,CAAA,CAAE,EACvD,EAAY,IAAI,GAChB,CAAE,QAAS,CAAE,EAAK,KAAK,EACvB,EAAe,CACnB,cAAe,KAAK,EAAE,UAAU,cAChC,eAAgB,EAAG,cACzB,EACI,EAAU,eAAe,CAAE,EAC3B,EAAG,cAAgB,EAAa,EAChC,EAAG,cAAgB,EAAa,EAC5B,EAAa,gBACf,KAAK,EAAE,UAAU,cAAgB,EAAa,cAC9C,EAAG,eAAiB,EAAa,eAErC,CACA,aAAc,CACZ,OAAI,MAAM,QAAQ,KAAK,EAAE,OAAO,KAAK,GAAK,KAAK,EAAE,OAAO,MAAM,OAAS,GACrE,KAAK,EAAE,QAAQ,gBAAkB,GAC1B,IAEF,EACT,CACA,YAAa,CACX,KAAM,CAAE,EAAA,CAAC,EAAK,KACd,IAAI,EAAW,KACf,GAAI,EAAE,QAAQ,WAAY,CAOxB,GANI,EAAE,OAAO,MAAM,WAAW,WAAa,QACzC,IAAI,GAAW,KAAK,CAAC,EAAE,gBAAe,EAEpC,EAAE,OAAO,MAAM,CAAC,EAAE,WAAW,WAAa,QAC5C,IAAI,GAAW,KAAK,CAAC,EAAE,gBAAe,EAEpC,EAAE,OAAO,MAAM,OAAS,YAAc,EAAE,OAAO,MAAM,OAAO,YAAc,OAAQ,CACpF,KAAK,IAAI,UAAY,IAAI,GAAU,KAAK,EAAG,KAAK,GAAG,EACnD,IAAI,EAAqB,CAAA,EACrB,SAAS,EAAE,QAAQ,IAAI,GAAK,SAAS,EAAE,QAAQ,IAAI,GAAK,CAAC,EAAE,QAAQ,gBACrE,EAAqB,KAAK,IAAI,UAAU,wBACtC,EAAE,QAAQ,KACV,EAAE,QAAQ,IACtB,EACmB,EAAE,QAAQ,kBACnB,EAAqB,KAAK,IAAI,UAAU,wBACtC,EAAE,QAAQ,KACV,EAAE,QAAQ,IACtB,GAEQ,KAAK,IAAI,UAAU,8BAA8B,CAAkB,CACrE,CAEA,EADkB,IAAI,GAAU,KAAK,CAAC,EACjB,oBAAmB,CAC1C,CACA,OAAO,CACT,CAIA,kBAAkB,EAAa,CAC7B,KAAK,IAAI,EAAE,SAAS,UAAY,OAChC,KAAK,IAAI,cAAc,eACrB,CACE,MAAO,CACL,UAAW,CACT,MAAO,CACL,IAAK,EAAY,EAAE,QAAQ,KAC3B,IAAK,EAAY,EAAE,QAAQ,IACzC,CACA,CACA,CACA,EACM,GACA,EACN,CACE,CACA,mBAAoB,CAClB,KAAM,CAAE,IAAA,EAAK,EAAA,CAAC,EAAK,KACnB,GAAK,EAAE,OAAO,MAAM,MAAM,SACtB,OAAO,EAAE,OAAO,MAAM,OAAO,WAAc,WAAY,CACzD,MAAM,EAAU,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,OAAO,EAAI,EAAE,OAAO,MAAM,MAAM,QAAU,CAAC,EAAE,OAAO,MAAM,MAAM,MAAM,EACzH,EAAQ,QAAS,GAAW,CAC1B,MAAM,EAEJ,EAAI,YAAY,aACd,CACZ,EAEQ,GAAI,CAAC,EAAa,CAChB,QAAQ,KACN,6BAA6B,CAAM,yGAC/C,EACU,MACF,CACA,EAAY,EAAE,QAAQ,YAAc,KAAK,IACrC,OAAO,EAAY,EAAE,OAAO,MAAM,OAAO,QAAW,aACtD,EAAY,EAAE,OAAO,MAAM,OAAO,OAAS,IAAM,KAAK,kBAAkB,CAAW,GAEjF,OAAO,EAAY,EAAE,OAAO,MAAM,OAAO,UAAa,aACxD,EAAY,EAAE,OAAO,MAAM,OAAO,SAAW,IAK3C,KAAK,kBAAkB,CAAW,EAGxC,CAAC,EACD,EAAE,OAAO,MAAM,OAAO,UAAY,CAAC,EAAO,IAAM,CAC9C,EAAQ,QAAS,GAAW,CAC1B,MAAM,EAEJ,EAAI,YAAY,aACd,CACd,EAEe,GACL,EAAY,IAAI,cAAc,eAC5B,CACE,MAAO,CACL,IAAK,EAAE,MAAM,IACb,IAAK,EAAE,MAAM,GAC7B,CACA,EACY,GACA,GACA,GACA,EACZ,CACQ,CAAC,CACH,CACF,CACF,CACA,yBAA0B,CACxB,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,OACd,GAAI,EAAI,MAAM,eAAiB,EAAI,MAAM,cAAc,YACrD,OAAO,EAAI,MAAM,cAAc,YAEjC,MAAM,EAAY,EAAI,MAAM,KACtB,EAAQ,CAAA,EACd,GAAI,EAAI,MAAM,KACZ,EAAM,KAAK,GAAG,EAAI,MAAM,IAAI,KAAK,CAAS,QAAQ,EAC9C,EAAI,SAAS,MAAM,EAAM,KAAK,EAAI,SAAS,IAAI,MAC9C,CACL,MAAM,EACA,MAAM,QAAQ,EAAE,WAAW,WAAW,GAAK,EAAE,WAAW,YAAY,OAC/D,EAAE,WAAW,YAAY,OAAO,OAAO,EAE5C,MAAM,QAAQ,EAAI,MAAM,EACnB,EAAI,OAAO,IAAK,GAAM,OAAO,GAAM,UAAY,IAAM,KAAO,EAAE,KAAO,IAAI,EAAE,OAAO,OAAO,EAE3F,CAAA,EAEH,EAAc,EAAE,WAAW,OAAO,SAAW,EAAI,OAAS,EAAI,OAAO,OAAS,GAChF,EAAY,OACd,EAAM,KACJ,GAAG,CAAS,eAAe,CAAW,iBAAiB,EAAY,KAAK,IAAI,CAAC,EACvF,EAEQ,EAAM,KAAK,GAAG,CAAS,eAAe,CAAW,cAAc,CAEnE,CACA,OAAO,EAAM,KAAK,IAAI,CACxB,CACF,CACA,MAAM,EAAK,CAIT,YAAY,EAAG,CAAE,aAAA,EAAe,IAAM,CACtC,EAAG,YAAA,EAAc,IAAM,CACvB,CAAC,EAAK,CAAA,EAAI,CACR,KAAK,EAAI,EACT,KAAK,aAAe,EACpB,KAAK,YAAc,EACnB,KAAK,WAAa,CAAA,EAClB,KAAK,aAAe,CAAA,EACpB,KAAK,YAAc,CAAA,EACnB,KAAK,YAAc,CAAA,EACnB,KAAK,UAAY,IAAI,GAAU,KAAK,CAAC,EACrC,KAAK,kBAAoB,CAC3B,CAEA,mBAAoB,CAClB,MAAM,EAAS,KAAK,EAAE,OAAO,OACvB,EAAK,IAAI,GAAO,KAAK,CAAC,EAC5B,KAAK,kBAAoB,EAAG,2BAA0B,EACtD,MAAM,EAEJ,EAAO,KAAK,iBAAiB,EAE/B,OAAI,GAAc,EAAW,MAAQ,EAAW,KAAK,OAAS,GAAK,EAAW,KAAK,CAAC,IAAM,MAAQ,OAAO,EAAW,KAAK,CAAC,EAAM,IACvH,EAAW,KAAK,CAAC,EAEnB,IACT,CACA,eAAgB,CACd,OAAO,KAAK,WAAU,GAAM,KAAK,gBAAe,CAClD,CAEA,YAAa,CACX,IAAI,EACJ,MAAM,EAAiB,KAAK,kBAAiB,EAC7C,GAAI,CAAC,GAAkB,OAAO,EAAe,EAAM,IAAa,MAAO,GACvE,MAAM,GAEH,EAAK,KAAK,EAAE,OAAO,OAAO,KAAK,iBAAiB,IAAM,KAAO,OAAS,EAAG,KAE5E,GAAI,EAAM,CACR,MAAM,EAAQ,GAAO,GAAM,OAAO,EAAG,EAAM,IAC3C,QAAS,EAAI,EAAG,EAAI,KAAK,IAAI,EAAG,EAAK,MAAM,EAAG,IAC5C,GAAI,EAAK,EAAK,CAAC,CAAC,IAAM,GAAM,CAC1B,QAAQ,KACN,+DAA+D,CAAC,EAC5E,EACU,KACF,CAEJ,CACA,MAAO,EACT,CAEA,iBAAkB,CAChB,MAAM,EAAiB,KAAK,kBAAiB,EAC7C,OAAO,GAAkB,MAAM,QAAQ,CAAc,CACvD,CAaA,kBAAkB,EAAM,EAAG,CACzB,IAAI,EAAI,EACR,MAAM,EAAI,EAAK,OACf,GAAI,IAAM,EAAG,MAAO,GACpB,MAAM,EAAK,IAAI,MAAM,CAAC,EAChB,EAAK,IAAI,MAAM,CAAC,EACtB,IAAI,EAAO,CAAC,OAAO,UACf,EAAU,OAAO,UACjB,EAAU,IACV,EAAW,GACX,EAAO,EACP,EAAW,GACX,EAAO,IACP,EAAO,KACP,EAAU,GACV,EAAW,IACX,EAAQ,IACZ,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAQ,EAAK,CAAC,EACpB,GAAI,CAAC,MAAM,QAAQ,CAAK,GAAK,EAAM,OAAS,EAAG,MAAO,GACtD,MAAM,EAAI,EAAM,CAAC,EACX,EAAI,EAAM,CAAC,EACjB,GAAI,EACF,GAAI,OAAO,GAAM,SAAU,CACrB,IAAM,IACJ,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,IAEvB,MAAM,EAAI,EAAI,EACV,EAAI,EACF,EAAI,IAAU,EAAW,GACpB,EAAI,IACb,EAAU,IAEZ,EAAQ,CACV,MACE,EAAW,GAGf,GAAI,OAAO,GAAM,SACf,GAAI,IAAM,GAAK,IAAM,KAAY,IAAM,MAIrC,GAHI,EAAI,IAAM,EAAO,GACjB,EAAI,IAAS,EAAU,GACvB,EAAI,GAAK,EAAI,IAAS,EAAU,GAChC,CAAC,OAAO,UAAU,CAAC,EAAG,CACxB,MAAM,EAAK,EAAI,EAAI,CAAC,EAAI,EACxB,GAAI,GAAM,MAAQ,EAAK,KAAM,CAC3B,MAAM,EAAM,GAAK,EACX,EAAM,EAAI,QAAQ,GAAG,EACrB,EAAM,IAAQ,GAAK,EAAI,EAAI,OAAS,EAAM,EAC5C,EAAM,IAAM,EAAO,EACzB,KAAO,CACL,MAAM,EAAK,EAAQ,YAAY,CAAC,EAC5B,EAAQ,QAAQ,CAAE,IACpB,EAAO,KAAK,IAAI,EAAM,EAAG,SAAQ,EAAG,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,EAE5D,CACF,OAEA,EAAW,WAEJ,IAAM,KACf,EAAW,OAEX,OAAO,GAET,EAAG,CAAC,EAAI,EACR,EAAG,CAAC,EAAI,CACV,CACA,KAAK,WAAa,EAClB,KAAK,YAAc,EACnB,KAAK,EAAE,UAAU,mBAAqB,GACtC,MAAM,GAAW,GAAM,EAAK,KAAK,EAAE,YAAY,iBAAmB,KAAO,EAAK,EAAG,eAAiB,CAAA,EAClG,OAAA,EAAQ,CAAC,EAAI,CACX,IAAK,EACL,IAAK,EACL,KAAA,EACA,QAAA,EACA,QAAA,EACA,SAAA,EACA,KAAA,EACA,KAAM,EACN,SAAA,EACA,KAAA,EACA,KAAA,EACA,QAAA,EACA,SAAA,CACN,EACW,EACT,CAKA,oBAAoB,EAAK,EAAG,CAC1B,MAAM,EAAM,KAAK,EAAE,OACb,EAAO,EAAI,CAAC,EAAE,KACd,EAAY,EAAI,MAAM,OAAS,WACrC,EAAI,OAAO,CAAC,EAAE,OAAS,UACvB,GAAI,GAAC,GAAa,EAAI,MAAM,OAAS,YAAc,KAAK,kBAAkB,EAAM,CAAC,GAGjF,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAQ,EAAK,CAAC,EACd,EAAI,EAAM,CAAC,EACX,EAAI,EAAM,CAAC,EACX,EAAI,EAAM,CAAC,EAWjB,GAVI,OAAO,EAAM,MACX,MAAM,QAAQ,CAAC,GAAK,EAAE,SAAW,GAAK,CAAC,EACzC,KAAK,WAAW,KAAK,EAAQ,YAAY,EAAE,CAAC,CAAC,CAAC,EACrC,EAAM,QAAU,EACzB,KAAK,WAAW,KAAK,EAAQ,YAAY,EAAM,CAAC,CAAC,CAAC,EAElD,KAAK,WAAW,KAAK,EAAQ,YAAY,CAAC,CAAC,EAE7C,KAAK,EAAE,UAAU,mBAAqB,IAEpC,EAAI,MAAM,OAAS,WAAY,CACjC,MAAM,EAAK,IAAI,KAAK,CAAC,EAAE,QAAO,EAC9B,KAAK,YAAY,KAAK,CAAE,CAC1B,MACE,KAAK,YAAY,KAAK,CAAC,EAErB,OAAO,EAAM,MACf,KAAK,aAAa,KAAK,CAAC,EACxB,KAAK,EAAE,UAAU,UAAY,GAEjC,CACF,CAKA,eAAe,EAAK,EAAG,CACrB,MAAM,EAAM,KAAK,EAAE,OACb,EAAK,KAAK,EAAE,QACZ,EAAK,IAAI,GAAS,KAAK,CAAC,EACxB,EAAO,EAAI,CAAC,EAAE,KACpB,IAAI,EAAU,EACV,EAAG,uBAAuB,QAAQ,CAAC,EAAI,KACzC,EAAU,KAAK,mBAEjB,MAAM,EAAa,EAAI,CAAO,EAAE,KAChC,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAQ,EAAK,CAAC,EACpB,GAAI,OAAO,EAAM,EAAM,IAAa,CAClC,MAAM,EAAM,MAAM,QAAQ,EAAM,CAAC,EAAI,EAAQ,YAAY,EAAM,EAAE,EAAM,EAAE,OAAS,CAAC,CAAC,EAAI,EAAQ,YAAY,EAAM,CAAC,EACnH,KAAK,WAAW,KAAK,CAAG,CAC1B,CACI,OAAO,KAAK,YAAY,CAAC,EAAM,MACjC,KAAK,YAAY,CAAC,EAAI,CAAA,GAEpB,OAAO,EAAM,MAAU,KAAe,MAAM,QAAQ,EAAM,KAAK,EACjE,KAAK,YAAY,CAAC,EAAE,KAAK,EAAM,KAAK,EAEpC,KAAK,YAAY,CAAC,EAAE,KAAK,IAAI,EAE3B,OAAO,EAAM,EAAM,MACrB,KAAK,aAAa,KAAK,EAAM,CAAC,EAC9B,KAAK,EAAE,UAAU,UAAY,GAEjC,CACA,QAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAE1C,MAAM,EADQ,EAAW,CAAC,EACV,EACV,EAAY,OAAO,GAAM,SACzB,EAAS,MAAM,QAAQ,CAAC,EACxB,EAAU,CAAC,GAAU,CAAC,CAAC,EAAG,YAAY,CAAC,EAC7C,GAAI,GAAa,EACf,GAAI,GAAa,EAAI,MAAM,sBAAuB,CAChD,MAAM,EAAgB,EAAG,iBAAmB,KAAK,EAAE,UAAU,YACzD,EAAI,MAAM,OAAS,YAAc,CAAC,EACpC,KAAK,YAAY,KAAK,EAAG,UAAU,CAAC,CAAC,GAErC,KAAK,mBAAqB,GAC1B,KAAK,YAAY,KAAK,CAAC,EACnB,CAAC,MAAM,CAAC,GAAK,KAAK,EAAE,OAAO,MAAM,OAAS,YAAc,OAAO,GAAM,WACvE,KAAK,EAAE,UAAU,WAAa,IAGpC,MACM,EAAI,MAAM,OAAS,WACrB,KAAK,YAAY,KAAK,EAAG,UAAU,EAAE,SAAQ,CAAE,CAAC,GAEhD,KAAK,EAAE,UAAU,mBAAqB,GACtC,KAAK,EAAE,UAAU,WAAa,GAC9B,KAAK,YAAY,KAAK,WAAW,CAAC,CAAC,QAG9B,GACT,KAAK,mBAAqB,GAC1B,KAAK,YAAY,KAAK,CAAC,IAEvB,KAAK,EAAE,UAAU,WAAa,GAC9B,KAAK,EAAE,UAAU,mBAAqB,GACtC,KAAK,YAAY,KAAK,CAAC,EAE3B,CACF,CAKA,gBAAgB,EAAK,EAAG,CACtB,IAAI,EAAQ,CAAE,MAAO,CAAA,EAAI,IAAK,CAAA,EAAI,aAAc,CAAA,CAAE,EAClD,OAAI,KAAK,gBAAe,EACtB,EAAQ,KAAK,sBAAsB,QAAS,EAAK,CAAC,EACzC,KAAK,WAAU,IACxB,EAAQ,KAAK,sBAAsB,KAAM,EAAK,CAAC,GAEjD,KAAK,EAAE,UAAU,iBAAiB,CAAC,EAAI,EAAM,QAAU,OAAS,CAAA,EAAK,EAAM,MAC3E,KAAK,EAAE,UAAU,eAAe,CAAC,EAAI,EAAM,MAAQ,OAAS,CAAA,EAAK,EAAM,IACvE,KAAK,EAAE,UAAU,YAAY,CAAC,EAAI,EAAM,aACxC,KAAK,EAAE,UAAU,YAAY,QAAS,GAAO,CACtC,GACL,EAAG,QAAS,GAAS,CACnB,MAAM,EAEJ,EAAK,EAED,EAEJ,EAAO,OAET,GAAI,EAAA,GAAO,GACX,QAAS,EAAO,EAAG,EAAO,EAAK,IAAQ,CACrC,MAAM,EAEJ,EAAO,CAAI,EAEP,EAAW,EAAI,GACf,EAAW,EAAI,GACrB,QAAS,EAAM,EAAO,EAAG,EAAM,EAAK,IAAO,CACzC,MAAM,EAEJ,EAAO,CAAG,EAEN,EAAW,EAAO,GAClB,EAAW,EAAO,GACxB,GAAI,GAAY,GAAY,GAAY,EAAU,CAChD,MAAM,EAEJ,EAEF,EAAQ,SAAS,IAAI,EAAI,SAAS,EAClC,EAAQ,SAAS,IAAI,EAAO,SAAS,CACvC,CACF,CACF,CACF,CAAC,CACH,CAAC,EACM,CACT,CAUA,sBAAsB,EAAK,EAAG,EAAS,CACrC,MAAM,EAAO,EAAI,CAAC,EAAE,MAAQ,CAAA,EACtB,EAAQ,CAAA,EACR,EAAM,CAAA,EACZ,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAQ,EAAK,CAAC,EACpB,IAAI,EACA,EACJ,GAAI,OAAO,GAAY,WAAY,CACjC,IAAI,EAAM,EAAQ,EAAO,CAAC,EACrB,MAAM,QAAQ,CAAG,IAAG,EAAM,CAAC,CAAG,GACnC,MAAM,EAAO,EAAI,IAAK,GAAM,EAAQ,YAAY,CAAC,CAAC,EAAE,OAAQ,GAAM,IAAM,MAAQ,CAAC,MAAM,CAAC,CAAC,EACzF,EAAK,EAAK,OAAS,KAAK,IAAI,GAAG,CAAI,EAAI,KACvC,EAAK,EAAK,OAAS,KAAK,IAAI,GAAG,CAAI,EAAI,IACzC,KAAO,CACL,MAAM,EAAI,GAAS,KAAO,KAAO,EAAM,EACnC,MAAM,QAAQ,CAAC,GACjB,EAAK,EAAQ,YAAY,EAAE,CAAC,CAAC,EAC7B,EAAK,EAAQ,YAAY,EAAE,EAAE,OAAS,CAAC,CAAC,GAExC,EAAK,EAAK,EAAQ,YAAY,CAAC,CAEnC,CACA,EAAM,KAAK,CAAE,EACb,EAAI,KAAK,CAAE,CACb,CACA,KAAK,EAAE,UAAU,iBAAiB,CAAC,EAAI,EACvC,KAAK,EAAE,UAAU,eAAe,CAAC,EAAI,CACvC,CAKA,yBAAyB,EAAK,EAAG,CAC/B,IAAI,EAAO,CAAE,EAAG,CAAA,EAAI,EAAG,CAAA,EAAI,EAAG,CAAA,EAAI,EAAG,CAAA,EAAI,EAAG,CAAA,CAAE,EAC9C,OAAI,KAAK,gBAAe,EACtB,EAAO,KAAK,+BAA+B,QAAS,EAAK,CAAC,EACjD,KAAK,WAAU,IACxB,EAAO,KAAK,+BAA+B,KAAM,EAAK,CAAC,GAEzD,KAAK,EAAE,WAAW,cAAc,CAAC,EAAI,EAAK,EAC1C,KAAK,EAAE,WAAW,cAAc,CAAC,EAAI,EAAK,EAC1C,KAAK,EAAE,WAAW,cAAc,CAAC,EAAI,EAAK,EAC1C,KAAK,EAAE,WAAW,cAAc,CAAC,EAAI,EAAK,EAC1C,KAAK,EAAE,WAAW,cAAc,CAAC,EAAI,EAAK,EAC1C,KAAK,EAAE,WAAW,gBAAgB,CAAC,EAAI,EAAK,QAAU,CAAA,EAC/C,CACT,CAiBA,iBAAiB,EAAK,EAAG,CACvB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACxB,MAAM,EAAI,KAAK,EACT,EAAO,EAAI,CAAC,EAAE,KACd,EAAa,CAAA,EACb,EAAY,CAAA,EACZ,EAAS,CAAA,EACT,EAAS,CAAA,EACT,EAAe,CAAA,EACrB,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAI,EAAK,CAAC,EACV,GAAQ,GAAM,GAAM,EAA0B,GAAE,IAAM,KAAO,OAAS,EAAG,UAAY,KAAO,EAA0B,IAAE,CAAC,IAAM,KAAO,EAAK,CAAA,EAC3I,GAAO,GAAM,GAAM,EAA0B,GAAE,IAAM,KAAO,OAAS,EAAG,SAAW,KAAO,EAA0B,IAAE,CAAC,IAAM,KAAO,EAAK,CAAA,EACzI,EAAS,CAAA,EACT,EAAU,CAAA,EAChB,IAAI,EAAY,EACZ,EAAY,KACZ,EAAS,IACT,EAAS,KACb,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAI,EAAQ,YAAY,EAAK,CAAC,EAAE,CAAC,CAAC,EAClC,EAAK,EAAQ,YAAY,EAAK,CAAC,EAAE,CAAC,CAAC,EACrC,IAAM,MAAQ,IAAO,OACzB,EAAO,KAAK,CAAC,EACb,EAAQ,KAAK,CAAE,EACX,EAAK,IACP,EAAY,EACZ,EAAY,GAEV,EAAI,IAAQ,EAAS,GACrB,EAAI,IAAQ,EAAS,GAC3B,CACA,MAAM,EAAW,CAAA,EACjB,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,MAAM,EAAI,EAAQ,YAAY,EAAI,CAAC,CAAC,EAChC,IAAM,OACV,EAAS,KAAK,CAAC,EACX,EAAI,IAAQ,EAAS,GACrB,EAAI,IAAQ,EAAS,GAC3B,CACA,EAAW,KAAK,CAAE,OAAA,EAAQ,QAAA,EAAS,UAAA,CAAS,CAAE,EAC9C,EAAU,KAAK,CAAQ,EACvB,EAAO,KAAK,IAAW,IAAW,EAAI,CAAM,EAC5C,EAAO,KAAK,IAAW,KAAY,EAAI,CAAM,EAC7C,EAAa,KACX,IAAc,KAAO,EAAY,EAAS,OAAS,EAAS,KAAK,MAAM,EAAS,OAAS,CAAC,CAAC,EAAI,CACvG,CACI,CACA,EAAE,WAAW,oBAAoB,CAAC,EAAI,EACtC,EAAE,WAAW,mBAAmB,CAAC,EAAI,EACrC,EAAE,WAAW,gBAAgB,CAAC,EAAI,EAClC,EAAE,WAAW,gBAAgB,CAAC,EAAI,EAClC,KAAK,WAAa,CACpB,CAMA,sBAAsB,EAAQ,EAAK,EAAG,CACpC,MAAM,EAAa,CAAA,EACb,EAAW,CAAA,EACX,EAAgC,IAAI,IACpC,EAAa,CAAA,EAYnB,GAXA,EAAI,CAAC,EAAE,KAAK,QAAS,GAAS,CAC5B,GAAI,CAAC,EAAc,IAAI,EAAK,CAAC,EAAG,CAC9B,MAAM,EAAS,CACb,EAAG,EAAK,EACR,SAA0B,IAAI,IAC9B,EAAG,CAAA,CACb,EACQ,EAAc,IAAI,EAAK,EAAG,CAAM,EAChC,EAAW,KAAK,CAAM,CACxB,CACF,CAAC,EACG,IAAW,QACb,QAAS,EAAI,EAAG,EAAI,EAAI,CAAC,EAAE,KAAK,OAAQ,IAClC,MAAM,QAAQ,EAAI,CAAC,EAAE,KAAK,CAAC,CAAC,GAC9B,EAAW,KAAK,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACpC,EAAS,KAAK,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAElC,EAAW,KAAK,EAAI,CAAC,EAAE,KAAK,CAAC,CAAC,EAC9B,EAAS,KAAK,EAAI,CAAC,EAAE,KAAK,CAAC,CAAC,WAGvB,IAAW,KACpB,QAAS,EAAI,EAAG,EAAI,EAAI,CAAC,EAAE,KAAK,OAAQ,IAAK,CAC3C,MAAM,EAAgB,MAAM,QAAQ,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAC9C,EAAK,EAAQ,SAAQ,EACrB,EAAI,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EACnB,EAAI,CACR,GAAI,EAAgB,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAI,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EACzD,GAAI,EAAgB,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAI,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EACzD,UAAW,CACrB,EACc,EAAK,KAAK,EAAE,QACb,EAAG,kBAAiB,EAAG,gBAAkB,CAAA,GACzC,EAAG,gBAAgB,CAAC,IAAG,EAAG,gBAAgB,CAAC,EAAI,CAAA,GACpD,EAAG,gBAAgB,CAAC,EAAE,CAAC,EAAI,EAC3B,MAAM,EAAS,EAAc,IAAI,CAAC,EAC9B,GACF,EAAO,EAAE,KAAK,CAAC,EAEjB,EAAW,KAAK,EAAE,EAAE,EACpB,EAAS,KAAK,EAAE,EAAE,CACpB,CAEF,MAAO,CACL,MAAO,EACP,IAAK,EACL,aAAc,CACpB,CACE,CAMA,+BAA+B,EAAQ,EAAK,EAAG,CAC7C,MAAM,EAAI,KAAK,EACT,EAAY,EAAE,OAAO,MAAM,OAAS,WAC1C,EAAE,OAAO,OAAO,CAAC,EAAE,OAAS,UACtB,EAAO,CAAA,EACP,EAAO,CAAA,EACP,EAAO,CAAA,EACP,EAAO,CAAA,EACP,EAAO,CAAA,EACP,EAAY,CAAA,EACZ,EAAO,EAAI,CAAC,EAAE,KACpB,IAAI,EACJ,GAAI,IAAW,QAAS,CACtB,MAAM,EAAQ,EAAK,CAAC,EACL,GAAa,GAAS,EAAM,SAAW,GAAK,CAAC,GAAa,GAAS,EAAM,SAAW,EAEjG,EAAW,GAAM,EAAE,MAAM,CAAC,EAE1B,EAAW,GAAM,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAI,EAAE,CAAC,EAAI,CAAA,CAElD,MACE,EAAW,GAAM,MAAM,QAAQ,EAAE,CAAC,EAAI,EAAE,EAAI,CAAA,EAE9C,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAO,EAAQ,EAAK,CAAC,CAAC,EACxB,GAAQ,EAAK,QAAU,IACzB,EAAK,KAAK,EAAK,CAAC,CAAC,EACjB,EAAK,KAAK,EAAK,CAAC,CAAC,EACb,GACF,EAAK,KAAK,EAAK,CAAC,CAAC,EACjB,EAAK,KAAK,EAAK,CAAC,CAAC,EACjB,EAAK,KAAK,EAAK,CAAC,CAAC,IAEjB,EAAK,KAAK,EAAK,CAAC,CAAC,EACjB,EAAK,KAAK,EAAK,CAAC,CAAC,IAGrB,MAAM,EAAM,EAAK,CAAC,GAClB,EAAK,CAAC,EAAE,OACR,EAAU,KAAK,MAAM,QAAQ,CAAG,EAAI,EAAM,CAAA,CAAE,CAC9C,CACA,MAAO,CACL,EAAG,EACH,EAAG,EACH,EAAG,EACH,EACA,EACA,OAAQ,CACd,CACE,CAIA,oBAAoB,EAAK,CACvB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACxB,MAAM,EAAM,KAAK,EAAE,OACb,EAAK,KAAK,EAAE,QACZ,EAAK,IAAI,GAAS,KAAK,CAAC,EAC9B,KAAK,EAAE,WAAW,eAAiB,CAAA,EACnC,MAAM,EAAU,EAAI,OAAO,OAAS,EAAI,EAAI,OAAO,MAAK,EAAK,EAAI,MAAM,WAAW,MAAK,EACvF,KAAK,EAAE,UAAU,WAAa,EAAI,MAAM,OAAS,YAAc,EAAG,gBAClE,KAAK,EAAE,UAAU,eAAiB,EAAI,MAAM,OAAS,YAAc,EAAI,MAAM,MAAM,OAAO,OAAS,EAC/F,KAAK,EAAE,UAAU,iBACnB,KAAK,EAAE,UAAU,OAAS,EAAI,MAAM,MAAM,QAE5C,EAAI,QAAQ,CAAC,EAAG,IAAM,CAChB,EAAE,OAAS,OACb,KAAK,EAAE,WAAW,YAAY,KAAK,EAAE,IAAI,EAEzC,KAAK,EAAE,WAAW,YAAY,KAC5B,UAAY,SAAS,OAAO,EAAI,CAAC,EAAG,EAAE,CAChD,CAEI,CAAC,EACD,KAAK,UAAU,uBAAsB,EACrC,MAAM,EAAU,CAAA,EACV,EAAS,CACb,GAAG,IAAI,IAAI,EAAI,OAAO,IAAK,GAAM,EAAE,KAAK,CAAC,CAC/C,EACI,EAAI,OAAO,QAAQ,CAAC,EAAG,IAAM,CAC3B,MAAM,EAAQ,EAAO,QAAQ,EAAE,KAAK,EAC/B,EAAQ,CAAK,IAAG,EAAQ,CAAK,EAAI,CAAA,GACtC,EAAQ,CAAK,EAAE,KAAK,KAAK,EAAE,WAAW,YAAY,CAAC,CAAC,CACtD,CAAC,EACD,KAAK,EAAE,UAAU,aAAe,EAChC,MAAM,EAAc,IAAM,CACxB,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAClC,GAAI,OAAO,EAAQ,CAAC,GAAM,SAExB,GADe,EAAG,YAAY,EAAQ,CAAC,CAAC,EAEtC,KAAK,YAAY,KAAK,EAAG,UAAU,EAAQ,CAAC,CAAC,CAAC,MAE9C,OAAM,IAAI,MACR,+EACd,OAGU,KAAK,YAAY,KAAK,EAAQ,CAAC,CAAC,CAGtC,EACA,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,KAAK,WAAa,CAAA,EAClB,KAAK,YAAc,CAAA,EACnB,KAAK,aAAe,CAAA,EAChB,OAAO,EAAI,CAAC,EAAE,KAAS,MACzB,QAAQ,MACN,+EACV,EACQ,EAAI,CAAC,EAAI,EAAc,EAAe,CAAA,EAAI,EAAI,CAAC,CAAC,EAAG,CAAE,KAAM,CAAA,CAAE,CAAE,GAEjE,MAAM,EAAK,EAAI,MAAM,YACf,GAAY,GAAM,EAAK,EAAG,uBAAyB,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,KACtG,GAA2B,GAAG,SAAY,KAAK,cAAa,GAAM,MAAM,QAAQ,CAAQ,GAAK,EAAS,SAAW,EAAK,EAAG,YAAc,KAAO,EAAK,KAAM,CACvJ,MAAM,GAAgB,EAAK,EAAG,eAAiB,KAAO,EAAK,IACrD,EAAO,EAAI,MAAM,IACjB,EAAO,EAAI,MAAM,IACjB,EAAW,GAAQ,MAAQ,GAAQ,KAAO,EAAW,GAAK,cAAc,EAAU,EAAM,CAAI,EAClG,IAAI,EAAU,EACd,GAAI,EAAS,OAAS,EAAc,CAClC,MAAM,EAAW,MAAM,QAAQ,EAAS,CAAC,CAAC,GAAkD,EAAK,EAAS,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAtF,EAAK,EAAS,CAAC,IAAM,KAAO,OAAS,EAAG,EACnF,MAAM,QAAQ,CAAO,EACnB,EAAQ,SAAW,EACrB,EAAU,GAAK,cAAc,EAAU,CAAY,EAC1C,EAAQ,SAAW,IAC5B,EAAU,GAAK,eAAe,EAAU,CAAY,GAGtD,EAAU,GAAK,eAAe,EAAU,CAAY,CAExD,CACA,EAAI,CAAC,EAAI,EAAc,EAAe,CAAA,EAAI,EAAI,CAAC,CAAC,EAAG,CAAE,KAAM,CAAO,CAAE,CACtE,EACI,EAAI,MAAM,OAAS,YAAc,EAAI,MAAM,OAAS,aAAe,EAAI,CAAC,EAAE,OAAS,YAAc,EAAI,CAAC,EAAE,OAAS,eACnH,KAAK,EAAE,UAAU,YAAc,GAC/B,KAAK,gBAAgB,EAAK,CAAC,GAE7B,MAAM,EAAa,EAAI,CAAC,EAAE,MAAQ,EAAI,MAAM,KAC5C,GAAI,GAAS,CAAU,EAAG,CACxB,MAAM,EAEJ,GAAc,CAAU,EAEpB,EAAU,GAAO,EAAI,SACvB,GAAO,EAAI,WAAa,WAAa,OAAO,GAAY,cAC1D,KAAK,EAAE,UAAU,YAAc,GAC/B,KAAK,sBAAsB,EAAK,EAAG,CAAO,EAE9C,CACA,GAAI,KAAK,cAAa,EAChB,KAAK,gBAAe,EACtB,KAAK,oBAAoB,EAAK,CAAC,EACtB,KAAK,WAAU,GACxB,KAAK,eAAe,EAAK,CAAC,GAExB,EAAI,MAAM,OAAS,eAAiB,EAAI,CAAC,EAAE,OAAS,eAAiB,EAAI,MAAM,OAAS,WAAa,EAAI,CAAC,EAAE,OAAS,YACvH,KAAK,yBAAyB,EAAK,CAAC,GAElC,EAAI,MAAM,OAAS,UAAY,EAAI,CAAC,EAAE,OAAS,WACjD,KAAK,iBAAiB,EAAK,CAAC,EAE9B,KAAK,EAAE,WAAW,OAAO,KAAK,KAAK,UAAU,EAC7C,KAAK,EAAE,UAAU,OAAO,KAAK,KAAK,WAAW,EAC7C,KAAK,EAAE,WAAW,QAAQ,KAAK,KAAK,WAAW,EAC/C,KAAK,EAAE,WAAW,YAAc,KAAK,YACjC,IAAM,KAAK,mBAAqB,CAAC,KAAK,qBACxC,KAAK,EAAE,UAAU,WAAa,QAE3B,CACD,EAAI,MAAM,OAAS,YACrB,KAAK,EAAE,UAAU,WAAa,GAC9B,EAAW,EACX,KAAK,EAAE,WAAW,QAAQ,KAAK,KAAK,WAAW,GACtC,EAAI,MAAM,OAAS,YAC5B,KAAK,EAAE,UAAU,WAAa,GAC1B,EAAQ,OAAS,IACnB,KAAK,YAAc,EACnB,KAAK,EAAE,WAAW,QAAQ,KAAK,KAAK,WAAW,IAGnD,KAAK,EAAE,UAAU,OAAO,KAAK,KAAK,WAAW,EAC7C,MAAM,EAAc,EAAI,CAAC,EAAE,KAAK,IAC7B,GAAM,EAAQ,YAAY,CAAC,CACtC,EACQ,KAAK,EAAE,WAAW,OAAO,KAAK,CAAW,CAC3C,CACA,KAAK,EAAE,WAAW,QAAQ,KAAK,KAAK,YAAY,EAC5C,EAAI,CAAC,EAAE,QAAU,OACnB,KAAK,EAAE,WAAW,aAAa,KAAK,EAAI,CAAC,EAAE,KAAK,EAEhD,KAAK,EAAE,WAAW,aAAa,KAE7B,MACV,CAEI,CACA,OAAO,KAAK,CACd,CAIA,uBAAuB,EAAK,CAC1B,MAAM,EAAM,KAAK,EAAE,OACnB,KAAK,EAAE,WAAW,SAAW,CAAA,EAC7B,MAAM,EAAe,MAAM,QAAQ,CAAG,GAAK,EAAI,MAAO,GAAM,OAAO,GAAM,QAAQ,GAAK,EAAI,OAAO,OAAS,EACpG,EAAe,MAAM,QAAQ,CAAG,GAAK,EAAI,KAC5C,GAAM,GAAK,OAAO,GAAM,UAAY,EAAE,MAAQ,GAAK,OAAO,GAAM,UAAY,EAAE,OACrF,EACI,GAAI,EAAI,MAAM,OAAS,QAAU,GAAgB,CAAC,EAChD,OAAO,KAAK,gBAAgB,CAAG,EAOjC,GALI,GAAgB,GAClB,QAAQ,KACN,gKACR,EAEQ,EAAc,CAChB,KAAK,EAAE,WAAW,OAClB,EAAI,MAAK,EACT,KAAK,EAAE,WAAW,YAAc,EAAI,OAAO,MAAK,EAChD,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,OAAQ,IAC/C,KAAK,EAAE,WAAW,YAAY,CAAC,IAAM,QACvC,KAAK,EAAE,WAAW,YAAY,KAAK,WAAa,EAAI,EAAE,EAG1D,OAAO,KAAK,CACd,CACA,GAAI,MAAM,QAAQ,CAAG,GAAK,EAAI,MAAO,GAAM,OAAO,GAAM,QAAQ,EAAG,CACjE,KAAK,EAAE,WAAW,OAClB,EAAI,MAAK,EACT,KAAK,EAAE,WAAW,YAAc,CAAA,EAChC,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,OAAQ,IACnD,KAAK,EAAE,WAAW,YAAY,KAAK,EAAI,OAAO,CAAC,GAAK,UAAU,EAAI,CAAC,EAAE,EAEvE,OAAO,KAAK,CACd,CACA,MAAM,EAAgB,KAAK,yBAAyB,CAAG,EACvD,KAAK,EAAE,WAAW,OAAS,EAAc,OACzC,KAAK,EAAE,WAAW,YAAc,EAAc,OAC1C,EAAI,MAAM,OAAS,cACrB,KAAK,EAAE,WAAW,OAAS,KAAK,EAAE,WAAW,OAAO,IAAK,GAAQ,CAC/D,MAAM,EAAS,EAAQ,YAAY,CAAG,EACtC,OAAI,EAAS,KACX,QAAQ,KACN,+BAA+B,CAAM,kDACjD,EAEe,CACT,CAAC,GAEH,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,OAAQ,IAC/C,KAAK,EAAE,WAAW,YAAY,CAAC,IAAM,QACvC,KAAK,EAAE,WAAW,YAAY,KAAK,WAAa,EAAI,EAAE,EAG1D,OAAO,KAAK,CACd,CAUA,gBAAgB,EAAK,CACnB,MAAM,EAAM,KAAK,EAAE,OACb,EAAS,CAAA,EACT,EAAc,CAAA,EACd,EAAW,CAAA,EACjB,OAAA,EAAI,QAAQ,CAAC,EAAG,IAAM,CACpB,IAAI,EACJ,MAAM,EAAO,GAAK,MAAM,QAAQ,EAAE,IAAI,EAAI,EAAE,KAAO,CAAA,EACnD,EAAO,KAAK,EAAK,MAAM,EACvB,MAAM,EAAQ,GAAK,EAAE,OAAS,QAAU,EAAE,OAAS,KAAO,EAAE,KAAO,OACnE,EAAY,MAAM,EAAK,GAAwB,EAAI,OAAO,CAAC,IAAM,KAAO,EAAK,UAAU,EAAI,CAAC,EAAE,EAC9F,EAAS,KAAK,EAAK,MAAK,CAAE,CAC5B,CAAC,EACD,KAAK,EAAE,WAAW,OAClB,EACA,KAAK,EAAE,WAAW,YAAc,EAChC,KAAK,EAAE,WAAW,SAAW,EACtB,KAAK,CACd,CAIA,mBAAoB,CAClB,MAAM,EAAI,KAAK,EACf,EAAE,UAAU,cAAgB,GAC5B,EAAE,QAAQ,eAAiB,KACvB,EAAE,OAAO,QACX,EAAE,OAAO,OAAO,QAAS,GAAU,CAG/B,EAAM,cAEN,OACA,EAAM,YAEV,CAAC,CAEL,CAIA,yBAAyB,EAAK,CAC5B,MAAM,EAAS,CAAA,EACT,EAAS,CAAA,EACf,GAAI,CAAC,MAAM,QAAQ,CAAG,EACpB,eAAQ,KAAK,4CAA4C,EAClD,CAAE,OAAQ,CAAA,EAAI,OAAQ,CAAA,CAAE,EAEjC,GAAI,EAAI,SAAW,EACjB,eAAQ,KAAK,gCAAgC,EACtC,CAAE,OAAQ,CAAA,EAAI,OAAQ,CAAA,CAAE,EAEjC,MAAM,EAAY,EAAI,CAAC,EACvB,GAAI,OAAO,GAAc,UAAY,IAAc,MAAQ,EAAU,KACnE,KAAK,gCAAgC,EAAK,EAAQ,CAAM,MAExD,gBAAQ,KACN,4GACR,EACa,CAAE,OAAQ,CAAA,EAAI,OAAQ,CAAA,CAAE,EAEjC,MAAO,CAAE,OAAA,EAAQ,OAAA,CAAM,CACzB,CAOA,gCAAgC,EAAa,EAAQ,EAAQ,CAC3D,EAAY,QAAQ,CAAC,EAAO,IAAe,CACzC,GAAI,CAAC,EAAM,MAAQ,CAAC,MAAM,QAAQ,EAAM,IAAI,EAAG,CAC7C,QAAQ,KAAK,sBAAsB,CAAU,0BAA0B,EACvE,MACF,CACA,EAAM,KAAK,QAAS,GAAc,CAC5B,OAAO,GAAc,UAAY,IAAc,KAC7C,EAAU,IAAM,QAAU,EAAU,IAAM,QAC5C,EAAO,KAAK,OAAO,EAAU,CAAC,CAAC,EAC/B,EAAO,KAAK,EAAQ,YAAY,EAAU,CAAC,CAAC,GAE5C,QAAQ,KACN,+EACA,CACd,EAGU,QAAQ,KACN,+CACA,OAAO,CACnB,CAEM,CAAC,CACH,CAAC,CACH,CAOA,yBAAyB,EAAK,CAC5B,MAAM,EAAM,KAAK,EAAE,OACnB,GAAI,EAAI,MAAM,WAAW,OAAS,EAChC,KAAK,EAAE,UAAU,OAAS,EAAI,MAAM,mBAC3B,EAAI,OAAO,OAAS,EAC7B,KAAK,EAAE,UAAU,OAAS,EAAI,OAAO,MAAK,UACjC,KAAK,mBAAoB,CAIlC,GAHA,KAAK,EAAE,UAAU,OAEjB,KAAK,EAAE,UAAU,OAAO,CAAC,EACrB,KAAK,EAAE,UAAU,YAAY,OAAQ,CACvC,KAAK,EAAE,UAAU,YAAY,IAAK,GAAQ,CACxC,EAAI,QAAS,GAAO,CACd,KAAK,EAAE,UAAU,OAAO,QAAQ,EAAG,CAAC,EAAI,GAAK,EAAG,GAClD,KAAK,EAAE,UAAU,OAAO,KAAK,EAAG,CAAC,CAErC,CAAC,CACH,CAAC,EACD,MAAM,EAAU,KAAK,EAAE,UAAU,OACjC,GAAI,EAAQ,OAAS,IAAM,OAAO,EAAQ,CAAC,GAAM,UAAY,OAAO,EAAQ,CAAC,GAAM,UACjF,KAAK,EAAE,UAAU,OAAS,CAAC,GAAG,IAAI,IAAI,CAAO,CAAC,MACzC,CACL,MAAM,EAAwB,IAAI,IAClC,UAAW,KAAU,EAAS,CAC5B,MAAM,EAAO,KAAK,UAAU,CAAM,EAC7B,EAAM,IAAI,CAAI,GAAG,EAAM,IAAI,EAAM,CAAM,CAC9C,CACA,KAAK,EAAE,UAAU,OAAS,MAAM,KAAK,EAAM,OAAM,CAAE,CACrD,CACF,CACI,EAAI,MAAM,wBACK,IAAI,GAAS,CAAG,EACxB,yBAAyB,EAAK,KAAK,EAAE,WAAW,QAAQ,CAAC,CAAC,EACnE,KAAK,wBAAwB,CAAG,EAEpC,MACE,KAAK,wBAAwB,CAAG,CAEpC,CAIA,wBAAwB,EAAK,CAC3B,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OACnB,IAAI,EAAW,CAAA,EACf,GAAI,EAAG,WAAY,CACjB,GAAI,KAAK,EAAE,WAAW,OAAO,OAAS,EACpC,GAAI,KAAK,WAAU,EAAI,CACrB,MAAM,EAAqB,EAAI,OAAO,IACnC,GAAU,CACT,MAAM,EAAuB,IAAI,IACjC,UAAW,KAAS,EAAM,KACnB,EAAK,IAAI,EAAM,CAAC,GAAG,EAAK,IAAI,EAAM,EAAG,CAAK,EAEjD,OAAO,MAAM,KAAK,EAAK,OAAM,CAAE,CACjC,CACZ,EACgB,EAAM,EAAmB,OAC7B,CAAC,EAAG,EAAG,EAAG,IAAM,EAAE,CAAC,EAAE,OAAS,EAAE,OAAS,EAAI,EAC7C,CACZ,EACU,QAAS,EAAI,EAAG,EAAI,EAAmB,CAAG,EAAE,OAAQ,IAClD,EAAS,KAAK,EAAI,CAAC,CAEvB,KACE,SAAS,EAAI,EAAG,EAAI,KAAK,EAAE,WAAW,OAAO,EAAG,mBAAmB,EAAE,OAAQ,IAC3E,EAAS,KAAK,EAAI,CAAC,EAIzB,KAAK,EAAE,WAAW,QAAU,CAAA,EAC5B,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC9B,KAAK,EAAE,WAAW,QAAQ,KAAK,CAAQ,EAEpC,KAAK,EAAE,QAAQ,kBAClB,KAAK,EAAE,UAAU,WAAa,GAElC,CACA,GAAI,EAAS,SAAW,EAAG,CACzB,EAAW,EAAG,WAAa,CAAA,EAKzB,KAAK,EAAE,WAAW,OAAO,IAAI,CAAC,EAAK,IAC1B,EAAO,CACf,EAEH,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC9B,KAAK,EAAE,WAAW,QAAQ,KAAK,CAAQ,CAE3C,CACA,KAAK,EAAE,UAAU,OAEjB,EACI,EAAI,MAAM,wBACZ,KAAK,EAAE,UAAU,eAAiB,EAAS,IAAK,GACvC,EAAI,MAAM,OAAO,UAAU,CAAC,CACpC,GAEH,KAAK,EAAE,UAAU,iBAAmB,EACtC,CAIA,qBAAqB,EAAQ,CAC3B,MAAM,EAAM,KAAK,EAAE,OACb,EAAK,KAAK,EAAE,QACZ,EAAgB,EAAI,QAC1B,GAAI,KAAK,EAAE,UAAU,cACnB,OAAO,EAET,MAAM,EAAmB,CAAC,EAAE,IAAkB,EAAc,GAAK,EAAc,GAAK,EAAc,IAC5F,EAAmB,EAAO,KAC7B,GAAM,EAAE,UAAY,EAAE,QAAQ,GAAK,EAAE,QAAQ,GAAK,EAAE,QAAQ,EACnE,EACI,GAAI,CAAC,GAAoB,CAAC,EACxB,OAAO,EAET,MAAM,EAAkB,EAAO,IAAI,CAAC,EAAO,IAAU,CACnD,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,GAAI,CAAC,EAAM,MAAQ,CAAC,MAAM,QAAQ,EAAM,IAAI,GAAK,EAAM,KAAK,SAAW,EACrE,OAAO,EAET,MAAM,EAAmB,CACvB,IAAK,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,IAAwC,GAAc,EACrG,IAAK,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,IAAwC,GAAc,EACrG,IAAK,EAAK,EAAM,UAAY,KAAO,OAAS,EAAG,IAAwC,GAAc,CAC7G,EACM,GAAI,CAAC,EAAiB,GAAK,CAAC,EAAiB,EAC3C,OAAO,EAET,MAAM,EAAiB,EAAM,KAAK,CAAC,EACnC,GAAI,OAAO,GAAmB,UAAY,IAAmB,OAAS,OAAO,UAAU,eAAe,KAAK,EAAgB,GAAG,GAAK,OAAO,UAAU,eAAe,KAAK,EAAgB,GAAG,IAAM,MAAM,QAAQ,CAAc,EAC3N,OAAO,EAET,GAAI,CAAC,EAAiB,GAAK,CAAC,EAAiB,GAAK,MAAM,QAAQ,EAAiB,CAAC,GAAK,EAAiB,EAAE,SAAW,EAAG,CACtH,MAAM,EAAU,CAAA,EACX,EAAiB,GAAG,EAAQ,KAAK,GAAG,GACrC,CAAC,EAAiB,GAAK,MAAM,QAAQ,EAAiB,CAAC,GAAK,EAAiB,EAAE,SAAW,IAC5F,EAAQ,KAAK,GAAG,EAElB,MAAM,GAAc,EAAK,EAAM,OAAS,KAAO,EAAK,UAAU,CAAK,IACnE,eAAQ,KACN,eAAe,KAAK,EAAE,QAAQ,OAAO,OAAO,CAAU,gDAAgD,EAAQ,KAC5G,MACZ,CAAW,yBACD,CAAE,SAAU,EAAK,EAAM,UAAY,KAAO,EAAK,CAAa,CACtE,EACe,CACT,CACA,MAAM,EAAkB,EAAM,KAAK,IACjC,CAAC,EAAM,IAAc,CACnB,GAAI,OAAO,GAAS,UAAY,IAAS,KACvC,eAAQ,KACN,sBAAsB,CAAK,gBAAgB,CAAS,qCAClE,EACmB,EAET,MAAM,EAAI,KAAK,eAAe,EAAM,EAAiB,CAAC,EACtD,IAAI,EACA,EACJ,GAAI,MAAM,QAAQ,EAAiB,CAAC,EAAG,CACrC,MAAM,EAAU,EAAiB,EAAE,IAChC,GAAc,KAAK,eAAe,EAAM,CAAS,CAChE,EACgB,KAAK,EAAE,OAAO,MAAM,OAAS,UAC3B,EAAQ,OAAS,GACnB,QAAQ,KACN,sBAAsB,CAAK,iFAAiF,KAAK,UAAU,EAAiB,CAAC,CAAC,EAChK,EAEc,EAAI,EAAQ,CAAC,GAEb,EAAI,CAER,MACE,EAAI,KAAK,eAAe,EAAM,EAAiB,CAAC,EAE9C,EAAiB,IACnB,EAAI,KAAK,eAAe,EAAM,EAAiB,CAAC,GAE9C,IAAM,QACR,QAAQ,KACN,sBAAsB,CAAK,gBAAgB,CAAS,mBAAmB,EAAiB,CAAC,GACvG,EAEc,IAAM,QACR,QAAQ,KACN,sBAAsB,CAAK,gBAAgB,CAAS,mBAAmB,EAAiB,CAAC,GACvG,EAEU,MAAM,EAAS,CAAE,EAAA,EAAG,EAAG,EAAG,MAAM,EAChC,GAAI,KAAK,EAAE,OAAO,MAAM,OAAS,UAAY,MAAM,QAAQ,EAAiB,CAAC,GAAK,EAAiB,EAAE,SAAW,EAAG,CACjH,MAAM,EAAS,KAAK,eAAe,EAAM,EAAiB,EAAE,CAAC,CAAC,EAC1D,IAAW,SACb,EAAO,EAAI,EAEf,CACA,OAAI,IAAM,SACR,EAAO,EAAI,GAEN,CACT,CACR,EACM,OAAO,EAAc,EAAe,CAAA,EAAI,CAAK,EAAG,CAC9C,KAAM,EACN,aAAc,EACtB,CAAO,CACH,CAAC,EACD,YAAK,EAAE,UAAU,cAAgB,GAC5B,EAAG,iBACN,EAAG,eAAiB,EAAQ,MAAM,CAAM,GAEnC,CACT,CAOA,eAAe,EAAK,EAAM,CACxB,GAAI,CAAC,GAAO,OAAO,GAAQ,UAAY,CAAC,EACtC,OAEF,GAAI,EAAK,QAAQ,GAAG,IAAM,GACxB,OAEE,EAAI,CAAI,EAGZ,MAAM,EAAO,EAAK,MAAM,GAAG,EAC3B,IAAI,EAAU,EACd,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,GAAI,GAAY,MAA8B,OAAO,GAAY,SAC/D,OAEF,EACA,EAAQ,EAAK,CAAC,CAAC,CACjB,CACA,OAAO,CACT,CAcA,wBAAwB,EAAK,CAC3B,IAAI,EAAI,EACR,MAAM,EAAM,KAAK,EAAE,OACb,EAAY,EAAI,MAAM,OAAS,WAAa,EAAI,MAAM,OAAS,SAC/D,GAAM,GAAM,EAAK,EAAI,cAAgB,KAAO,OAAS,EAAG,UAAY,KAAO,OAAS,EAAG,OAC7F,GAAI,CAAC,GAAa,CAAC,GAAM,CAAC,EAAG,SAAW,CAAC,MAAM,QAAQ,CAAG,EAAG,OAAO,EAMpE,GAAI,CALc,EAAI,KACnB,GAAM,MAAM,QAA6B,GAAE,IAAI,GAAK,EAAE,KAAK,KACzD,GAAM,GAAK,CAAC,MAAM,QAAQ,CAAC,GAAK,MAAM,QAAQ,EAAE,CAAC,CAC1D,CACA,EAEM,OAAI,EAAI,MAAM,OAAS,aACjB,MAAM,QAAQ,EAAI,MAAM,UAAU,GAAK,EAAI,MAAM,WAAW,OAC9D,KAAK,eAAe,EAAI,MAAM,WAAW,MAAK,CAAE,EACvC,MAAM,QAAQ,EAAI,MAAM,kBAAkB,GAAK,EAAI,MAAM,mBAAmB,QACrF,KAAK,eAAe,EAAI,MAAM,kBAAkB,GAG7C,EAET,MAAM,EAAa,CAAA,EACb,EAA4B,IAAI,IACtC,EAAI,QAAS,GAAM,CACZ,MAAM,QAA6B,GAAE,IAAI,GAC9C,EAAE,KAAK,QAAS,GAAM,CACpB,GAAI,GAAK,MAAM,QAAQ,EAAE,CAAC,EAAG,CAC3B,MAAM,EAAM,OAAO,EAAE,CAAC,EACjB,EAAU,IAAI,CAAG,IACpB,EAAU,IAAI,EAAK,EAAW,MAAM,EACpC,EAAW,KAAK,EAAE,CAAC,EAEvB,CACF,CAAC,CACH,CAAC,EACD,MAAM,EAAY,EAAG,WAAa,IAC5B,EAAW,EAAI,IAAK,GAAM,CAC9B,GAAI,CAAC,MAAM,QAA6B,GAAE,IAAI,EAAG,OAAO,EACxD,MAAM,EAAM,CAAA,EACZ,OAAA,EAAE,KAAK,QAAS,GAAM,CACpB,GAAI,GAAK,MAAM,QAAQ,EAAE,CAAC,EAAG,CAC3B,MAAM,EAAK,EAAU,IAAI,OAAO,EAAE,CAAC,CAAC,EAC9B,EAAK,EAAE,EACP,EAAS,EAAG,OAAS,EAAY,KAAK,KAAK,EAAG,OAAS,CAAS,EAAI,EAC1E,QAAS,EAAI,EAAG,EAAI,EAAG,OAAQ,GAAK,EAAQ,CAC1C,MAAM,EAAK,EAAQ,YAAY,EAAG,CAAC,CAAC,EAChC,IAAO,MACX,EAAI,KAAK,CAAE,EAAG,EAAI,EAAG,CAAE,CAAE,CAC3B,CACF,SAAW,GAAK,OAAO,GAAM,UAAY,CAAC,MAAM,QAAQ,CAAC,EAAG,CAC1D,MAAM,EAAM,OAAO,EAAE,CAAC,EACtB,EAAI,KAAK,CAAE,EAAG,EAAU,IAAI,CAAG,EAAI,EAAU,IAAI,CAAG,EAAI,EAAE,EAAG,EAAG,EAAE,CAAC,CAAE,CACvE,MACE,EAAI,KAAK,CAAC,CAEd,CAAC,EACM,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CAAE,KAAM,CAAG,CAAE,CAC3D,CAAC,EACD,YAAK,eAAe,CAAU,EACvB,CACT,CAgBA,eAAe,EAAY,CACzB,IAAI,EACJ,MAAM,EAAK,KAAK,EAAE,OAAO,MACnB,EAAI,EAAW,OACrB,GAAI,CAAC,EAAG,OACR,MAAM,EAEJ,EAAG,aAAe,EAAG,cAAgB,CAAA,EAIvC,GAFA,EAAG,mBAAqB,EAAW,MAAK,EACxC,EAAG,KAAO,WACJ,EAAK,KAAK,EAAE,WAAa,MAAgB,EAAG,QAAW,OAAO,EAAG,KAAQ,UAAY,OAAO,EAAG,KAAQ,UAAY,SAAS,EAAG,GAAG,GAAK,SAAS,EAAG,GAAG,EAAG,CAC7J,MAAM,EAAa,GAAM,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,EAAG,CAAC,CAAC,EACvD,IAAI,EAAQ,EAAU,KAAK,MAAM,EAAG,IAAM,GAAI,CAAC,EAC3C,EAAO,EAAU,KAAK,MAAM,EAAG,IAAM,GAAI,CAAC,EAC1C,EAAO,IACT,EAAQ,EAAO,EAAU,KAAK,OAAO,EAAG,IAAM,EAAG,KAAO,CAAC,CAAC,GAE5D,EAAG,IAAM,EAAQ,EACjB,EAAG,IAAM,EAAO,EAChB,EAAG,WAAa,EAAO,EAAQ,EAC/B,EAAM,IAAM,GACZ,EAAM,IAAM,GACZ,EAAM,KAAO,EACf,MACM,EAAG,KAAO,MAAQ,EAAM,OAC1B,EAAG,IAAM,GACT,EAAM,IAAM,KAEV,EAAG,KAAO,MAAQ,EAAM,OAC1B,EAAG,IAAM,EACT,EAAM,IAAM,KAEV,EAAG,YAAc,MAAQ,EAAG,aAAe,cAAgB,EAAM,QACnE,EAAG,WAAa,EAAI,EACpB,EAAM,KAAO,IAGjB,EAAG,OAAS,EAAG,QAAU,CAAA,EACzB,MAAM,EAEJ,EAAG,OAAO,UAEZ,GAAI,OAAO,GAAa,YAAc,EAAS,aAAc,CAC3D,MAAM,GAEF,GAAQ,CACR,MAAM,EAAI,KAAK,MAAM,CAAG,EACxB,OAAO,KAAK,IAAI,EAAM,CAAC,EAAI,MAAQ,EAAW,CAAC,IAAM,OAAS,EAAW,CAAC,EAAI,EAChF,GAEF,EAAI,aAAe,GACnB,EAAG,OAAO,UAAY,CACxB,CACF,CAKA,UAAU,EAAK,CACb,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5B,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,OACR,EAAK,EAAE,QAGb,GAFA,EAAM,KAAK,qBAAqB,CAAG,EACnC,EAAM,KAAK,wBAAwB,CAAG,GAChC,EAAK,EAAI,MAAM,cAAgB,MAAgB,EAAG,SAAY,EAAG,YAAc,CAAC,EAAG,qBAAsB,CAC7G,EAAG,qBAAuB,EAAI,IAAK,IAAO,CACxC,KAAM,MAAM,QAA6B,GAAE,IAAI,EAAI,EAAE,KAAK,MAAK,EAA0B,GAAE,IACnG,EAAQ,EACF,IAAI,EAAU,IACV,EAAU,KACd,UAAW,KAAK,EAAK,CACnB,MAAM,EAAyB,GAAE,KACjC,GAAI,CAAC,MAAM,QAAQ,CAAC,GAAK,EAAE,SAAW,EAAG,SACzC,MAAM,EAAO,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,EAC1B,EAAS,GAAQ,EAAK,EAAE,CAAC,IAAM,KAAO,OAAS,EAAG,GAAK,EAAK,EAAE,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,EACzF,EAAQ,GAAQ,EAAK,EAAE,EAAE,OAAS,CAAC,IAAM,KAAO,OAAS,EAAG,GAAK,EAAK,EAAE,EAAE,OAAS,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,EAChH,OAAO,GAAW,WAAU,EAAU,KAAK,IAAI,EAAS,CAAM,GAC9D,OAAO,GAAU,WAAU,EAAU,KAAK,IAAI,EAAS,CAAK,EAClE,CACI,IAAY,MACd,EAAG,mBAAqB,EACxB,EAAG,mBAAqB,EAE5B,CAKA,GAJI,EAAG,wBAA0B,EAAK,EAAI,MAAM,cAAgB,MAAgB,EAAG,WACjF,EAAM,EAAI,IAAK,GAAM,EAAe,CAAA,EAAI,CAAC,CAAC,GAE5C,EAAI,OAAS,EACT,EAAG,wBAA0B,EAAK,EAAI,MAAM,cAAgB,MAAgB,EAAG,SAAU,CAC3F,MAAM,EAAQ,EAAG,qBACjB,EAAG,cAAgB,EAAI,IAAI,CAAC,EAAG,IAAM,CACnC,IAAI,EAAK,EAAK,EACd,OAAO,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CAC1C,MAAO,GAAO,GAAO,EAAM,EAAM,CAAC,IAAM,KAAO,OAAS,EAAI,OAAS,KAAO,OAAS,EAAI,MAAK,IAAO,KAAO,EAAM,EAAE,IAC9H,CAAS,CACH,CAAC,CACH,MACE,EAAG,cAAgB,EAYrB,GAVA,KAAK,8BAA6B,EAClC,KAAK,mBAAqB,GAC1B,KAAK,aAAY,EACjB,KAAK,YAAW,EACZ,EAAG,YACL,KAAK,oBAAoB,CAAG,EAC5B,KAAK,UAAU,iBAAgB,GAE/B,KAAK,uBAAuB,CAAG,EAE7B,EAAI,MAAM,QAAS,CACrB,MAAM,EAAS,IAAI,GAAO,KAAK,CAAC,EAChC,KAAK,EAAE,WAAW,OAAS,EAAO,0BAChC,KAAK,EAAE,WAAW,MAC1B,CACI,CACA,KAAK,UAAU,gBAAe,EAC1B,EAAG,YACL,GAAK,kBACH,KAAK,EAAE,WACP,sBACA,IAAM,KAAK,UAAU,uBAAsB,CACnD,EACM,GAAK,kBACH,KAAK,EAAE,WACP,8BACA,IAAM,KAAK,UAAU,+BAA8B,CAC3D,EACM,GAAK,kBAAkB,EAAI,gBAAiB,KAC1C,KAAK,UAAU,iBAAgB,EACxB,EAAG,cACX,GAED,KAAK,UAAU,iBAAgB,EAE7B,CAAC,KAAK,EAAE,UAAU,qBAAuB,CAAC,KAAK,EAAE,UAAU,YAAc,EAAI,MAAM,OAAS,WAAa,EAAI,OAAO,SAAW,GAAK,EAAI,MAAM,WAAW,SAAW,IACtK,KAAK,yBAAyB,CAAG,EAEnC,MAAM,EAAY,KAAK,UAAU,kBAAkB,KAAK,EAAE,UAAU,MAAM,EAC1E,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IACpC,GAAI,MAAM,QAAQ,EAAU,CAAC,CAAC,EAAG,CAC/B,KAAK,EAAE,UAAU,aAAe,GAChC,KACF,CAEF,MAAO,CAQL,WAAY,CACV,OAAQ,KAAK,EAAE,WAAW,OAC1B,YAAa,KAAK,EAAE,WAAW,YAC/B,QAAS,KAAK,EAAE,WAAW,QAC3B,QAAS,KAAK,EAAE,WAAW,QAC3B,aAAc,KAAK,EAAE,WAAW,aAChC,YAAa,KAAK,EAAE,WAAW,YAC/B,SAAU,KAAK,EAAE,WAAW,SAC5B,iBAAkB,KAAK,EAAE,UAAU,gBAC3C,EAEM,UAAW,CACT,iBAAkB,KAAK,EAAE,UAAU,iBACnC,eAAgB,KAAK,EAAE,UAAU,eACjC,YAAa,KAAK,EAAE,UAAU,WACtC,EAEM,WAAY,CACV,cAAe,KAAK,EAAE,WAAW,cACjC,cAAe,KAAK,EAAE,WAAW,cACjC,cAAe,KAAK,EAAE,WAAW,cACjC,cAAe,KAAK,EAAE,WAAW,cACjC,cAAe,KAAK,EAAE,WAAW,cACjC,gBAAiB,KAAK,EAAE,WAAW,eAC3C,EAEM,UAAW,CACT,OAAQ,KAAK,EAAE,UAAU,OACzB,eAAgB,KAAK,EAAE,UAAU,cACzC,EAEM,UAAW,CACT,WAAY,KAAK,EAAE,UAAU,WAC7B,mBAAoB,KAAK,EAAE,UAAU,mBACrC,UAAW,KAAK,EAAE,UAAU,UAC5B,YAAa,KAAK,EAAE,UAAU,YAC9B,WAAY,KAAK,EAAE,UAAU,WAC7B,aAAc,KAAK,EAAE,UAAU,aAC/B,cAAe,KAAK,EAAE,UAAU,cAChC,eAAgB,KAAK,EAAE,UAAU,eACjC,OAAQ,KAAK,EAAE,UAAU,OACzB,aAAc,KAAK,EAAE,UAAU,YACvC,CACA,CACE,CAsBA,OAAO,kBAAkB,EAAK,EAAK,EAAS,CAC1C,IAAI,EAAM,GACN,EACJ,OAAO,eAAe,EAAK,EAAK,CAC9B,aAAc,GACd,WAAY,GACZ,KAAM,CACJ,OAAK,IACH,EAAM,GACN,EAAQ,EAAO,GAEV,CACT,EACA,IAAI,EAAG,CACL,EAAM,GACN,EAAQ,CACV,CACN,CAAK,CACH,CAMA,OAAO,cAAc,EAAM,EAAM,EAAM,CACrC,MAAM,EAAM,EAAK,OACjB,GAAI,IAAQ,EAAG,OAAO,EAEtB,MAAM,EADO,CAAC,MAAM,QAAQ,EAAK,CAAC,CAAC,EACd,GAAM,EAAE,EAAK,GAAM,EAAE,CAAC,EAC3C,IAAI,EAAK,EACT,GAAI,GAAQ,KAAM,CAChB,IAAI,EAAI,EACJ,EAAI,EAAM,EACd,KAAO,GAAK,GAAG,CACb,MAAM,EAAI,EAAI,GAAK,EACf,EAAK,EAAK,CAAC,CAAC,EAAI,EAAM,EAAI,EAAI,EAC7B,EAAI,EAAI,CACf,CACA,EAAK,KAAK,IAAI,EAAG,EAAI,CAAC,CACxB,CACA,IAAI,EAAK,EACT,GAAI,GAAQ,KAAM,CAChB,IAAI,EAAI,EACJ,EAAI,EAAM,EACd,KAAO,GAAK,GAAG,CACb,MAAM,EAAI,EAAI,GAAK,EACf,EAAK,EAAK,CAAC,CAAC,EAAI,EAAM,EAAI,EAAI,EAC7B,EAAI,EAAI,CACf,CACA,EAAK,KAAK,IAAI,EAAK,EAAI,CAAC,CAC1B,CACA,OAAO,IAAO,GAAK,IAAO,EAAM,EAAK,MAAK,EAAK,EAAK,MAAM,EAAI,CAAE,CAClE,CAWA,OAAO,eAAe,EAAM,EAAc,CACxC,MAAM,EAAM,EAAK,OACjB,GAAI,GAAgB,GAAO,EAAe,EAAG,OAAO,EACpD,MAAM,EAAO,CAAC,MAAM,QAAQ,EAAK,CAAC,CAAC,EAC7B,EAAO,EAAQ,GAAM,EAAE,EAAK,GAAM,EAAE,CAAC,EACrC,EAAO,EAAQ,GAAM,EAAE,EAAK,GAAM,EAAE,CAAC,EACrC,EAAU,CAAA,EAChB,EAAQ,KAAK,EAAK,CAAC,CAAC,EACpB,MAAM,GAAc,EAAM,IAAM,EAAe,GAC/C,IAAI,EAAI,EACR,QAAS,EAAI,EAAG,EAAI,EAAe,EAAG,IAAK,CACzC,MAAM,EAAgB,KAAK,OAAO,EAAI,GAAK,CAAU,EAAI,EACnD,EAAc,KAAK,IAAI,KAAK,OAAO,EAAI,GAAK,CAAU,EAAI,EAAG,CAAG,EACtE,IAAI,EAAO,EACP,EAAO,EACX,MAAM,EAAc,EAAc,EAClC,QAAS,EAAI,EAAe,EAAI,EAAa,IAC3C,GAAQ,EAAK,EAAK,CAAC,CAAC,EACpB,GAAQ,EAAK,EAAK,CAAC,CAAC,EAEtB,GAAQ,EACR,GAAQ,EACR,MAAM,EAAa,KAAK,MAAM,EAAI,CAAU,EAAI,EAC1C,EAAW,KAAK,IAAI,KAAK,OAAO,EAAI,GAAK,CAAU,EAAI,EAAG,CAAG,EAC7D,EAAU,EAAK,EAAK,CAAC,CAAC,EACtB,EAAU,EAAK,EAAK,CAAC,CAAC,EAC5B,IAAI,EAAU,GACV,EAAa,EACjB,QAAS,EAAI,EAAY,EAAI,EAAU,IAAK,CAC1C,MAAM,EAAO,KAAK,KACf,EAAU,IAAS,EAAK,EAAK,CAAC,CAAC,EAAI,IAAY,EAAU,EAAK,EAAK,CAAC,CAAC,IAAM,EAAO,EAC7F,EAAY,GACA,EAAO,IACT,EAAU,EACV,EAAa,EAEjB,CACA,EAAQ,KAAK,EAAK,CAAU,CAAC,EAC7B,EAAI,CACN,CACA,OAAA,EAAQ,KAAK,EAAK,EAAM,CAAC,CAAC,EACnB,CACT,CAgBA,OAAO,cAAc,EAAM,EAAc,CACvC,MAAM,EAAM,EAAK,OACjB,GAAI,GAAgB,GAAO,EAAe,EAAG,OAAO,EACpD,MAAM,EAAO,CAAC,MAAM,QAAQ,EAAK,CAAC,CAAC,EAC7B,EAAO,EAAQ,GAAM,EAAE,EAAK,GAAM,EAAE,CAAC,EACrC,EAAO,EAAQ,GAAM,EAAE,EAAK,GAAM,EAAE,CAAC,EACrC,EAAO,EAAO,CAAC,EAAG,KAAO,CAAE,EAAA,EAAG,EAAA,CAAC,GAAM,CAAC,EAAG,IAAM,CAAC,EAAG,CAAC,EACpD,EAAM,CAAA,EACN,EAAa,EAAM,EACzB,QAAS,EAAI,EAAG,EAAI,EAAc,IAAK,CACrC,MAAM,EAAQ,KAAK,MAAM,EAAI,CAAU,EACjC,EAAM,IAAM,EAAe,EAAI,EAAM,KAAK,OAAO,EAAI,GAAK,CAAU,EAC1E,GAAI,GAAO,EAAO,SAClB,MAAM,EAAS,EAAK,EAAK,CAAK,CAAC,EACzB,EAAO,EAAO,CAAC,EACrB,IAAI,EAAO,EAAO,CAAC,EACf,EAAM,EAAO,CAAC,EACd,EAAQ,EAAO,CAAC,EACpB,QAAS,EAAI,EAAQ,EAAG,EAAI,EAAK,IAAK,CACpC,MAAM,EAAI,EAAK,EAAK,CAAC,CAAC,EAClB,EAAE,CAAC,EAAI,IAAM,EAAO,EAAE,CAAC,GACvB,EAAE,CAAC,EAAI,IAAK,EAAM,EAAE,CAAC,GACzB,EAAQ,EAAE,CAAC,CACb,CACA,EAAI,KAAK,EAAK,EAAK,EAAK,CAAK,CAAC,EAAG,CAAC,EAAM,EAAM,EAAK,CAAK,CAAC,CAAC,CAC5D,CACA,OAAO,CACT,CAiBA,OAAO,eAAe,EAAM,EAAc,CACxC,MAAM,EAAM,EAAK,OACjB,GAAI,GAAgB,GAAO,EAAe,EAAG,OAAO,EACpD,MAAM,EAAO,CAAC,MAAM,QAAQ,EAAK,CAAC,CAAC,EAC7B,EAAO,EAAQ,GAAM,EAAE,EAAK,GAAM,EAAE,CAAC,EACrC,EAAO,EAAQ,GAAM,EAAE,EAAK,GAAM,EAAE,CAAC,EACrC,EAAO,EAAO,CAAC,EAAG,KAAO,CAAE,EAAA,EAAG,EAAA,CAAC,GAAM,CAAC,EAAG,IAAM,CAAC,EAAG,CAAC,EACpD,EAAM,CAAA,EACN,EAAa,EAAM,EACzB,QAAS,EAAI,EAAG,EAAI,EAAc,IAAK,CACrC,MAAM,EAAQ,KAAK,MAAM,EAAI,CAAU,EACjC,EAAM,IAAM,EAAe,EAAI,EAAM,KAAK,OAAO,EAAI,GAAK,CAAU,EAC1E,GAAI,GAAO,EAAO,SAClB,IAAI,EAAM,IACN,EAAO,KACX,QAAS,EAAI,EAAO,EAAI,EAAK,IAAK,CAChC,MAAM,EAAI,EAAK,EAAK,CAAC,CAAC,EACtB,GAAI,GAAK,KACT,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,EAAE,CAAC,EACT,GAAK,MAAQ,CAAC,SAAS,CAAC,IACxB,EAAI,IAAK,EAAM,GACf,EAAI,IAAM,EAAO,GACvB,CACF,CACA,EAAI,KACF,EAAK,EAAK,EAAK,CAAK,CAAC,EAAG,IAAQ,IAAW,CAAC,KAAM,IAAI,EAAI,CAAC,EAAK,CAAI,CAAC,CAC7E,CACI,CACA,OAAO,CACT,CACA,+BAAgC,CAC9B,MAAM,EAAI,KAAK,EACT,EAAe,CAAA,EACrB,EAAE,QAAQ,eAAe,QAAQ,CAAC,EAAU,IAAO,CACjD,IAAI,EAAiB,EACrB,EAAS,QAAS,GAAgB,CAC5B,EAAE,QAAQ,uBAAuB,QAAQ,CAAW,IAAM,IAC5D,GAEJ,CAAC,EACG,EAAiB,GAAK,GAAkB,EAAS,QACnD,EAAa,KAAK,CAAE,CAExB,CAAC,EACD,EAAE,QAAQ,mBAAqB,EAAa,IAAK,GAAM,CAAC,CAC1D,CACF,CACA,MAAM,EAAc,CAKlB,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,CACb,CASA,eAAe,EAAU,EAAS,GAAO,EAAU,GAAM,EAAqB,GAAM,EAAyB,GAAO,CAClH,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,IAAI,EAAS,CAAC,KAAK,GAAG,EAClB,IACF,EAAS,KAAK,IAAI,gBAAe,GAE/B,KAAK,EAAE,QAAQ,eACjB,EAAS,CAAC,KAAK,GAAG,EAClB,KAAK,EAAE,QAAQ,aAAe,IAEhC,EAAO,QAAQ,CAAC,EAAI,IAAe,CACjC,IAAI,EAAI,EACR,MAAM,EAAI,EAAG,EASb,GARA,EAAE,QAAQ,cAAgB,EACrB,IACH,EAAE,QAAQ,QAAU,GACpB,EAAE,QAAQ,YAAc,GACpB,GAAW,EAAE,OAAO,MAAM,WAAW,SACvC,EAAG,OAAO,iBAAgB,GAG1B,GAAW,GAAY,OAAO,GAAa,SAAU,CACvD,MAAM,GAAW,EAAiC,GAAS,QAAU,KAAO,OAAS,EAAG,KAClF,EAAW,EAAE,OAAO,MAAM,eAAiB,EAAE,OAAO,MAAM,KAC5D,GAAW,IAAY,KACxB,EAAK,EAAG,kBAAoB,MAAgB,EAAG,qBAAqB,CACnE,SAAA,EACA,OAAQ,EACR,UAAW,EAAS,QAAU,EAAE,OAAO,MACrD,CAAa,EAEL,CACA,GAAI,GAAY,OAAO,GAAa,SAAU,CAC5C,EAAG,OAAS,IAAI,GAAO,CAAQ,EAC/B,MAAM,EAAe,EAAS,OAAS,EAAS,MAAM,KAChD,EAAiB,IAAiB,UAAY,IAAiB,WAAa,IAAiB,QAC7F,EAAW,CAAC,CAAC,EAAE,OAAO,MAAM,cAClC,GAAI,GAAgB,CAAC,GAAkB,EAAU,CAC/C,EAAS,MAAQ,EAAS,OAAS,CAAA,EACnC,EAAS,MAAM,cAAgB,EAC/B,MAAM,EAAO,EAAE,OAAO,MAAM,eACxB,IAAS,UAAY,IAAS,aAChC,EAAS,YAAc,EAAS,aAAe,CAAA,EAC/C,EAAS,YAAY,IAAM,EAAS,YAAY,KAAO,CAAA,EACnD,EAAS,YAAY,IAAI,WAAa,SACxC,EAAS,YAAY,IAAI,SAAW,IAElC,EAAS,YAAY,IAAI,YAAc,SACzC,EAAS,YAAY,IAAI,UAAY,IAG3C,CACA,EAAG,OAAO,0BAA0B,CAAQ,EAC5C,EAAW,GAAU,iBAAiB,EAAG,OAAQ,EAAU,CAAC,EACxD,EAAG,EAAE,QAAQ,UAAY,KAAK,EAAE,QAAQ,UAC1C,OAAO,EAAS,OAChB,OAAO,EAAS,OAElB,EAAE,OAAS,EAAQ,OAAO,EAAE,OAAQ,CAAQ,EACxC,IACF,EAAE,QAAQ,UAAY,EAAS,MAAQ,EAAQ,MAAM,EAAS,KAAK,EAAI,CAAA,EACvE,EAAE,QAAQ,UAAY,EAAS,MAAQ,EAAQ,MAAM,EAAS,KAAK,EAAI,CAAA,EACvE,EAAE,QAAQ,cAAgB,EAAQ,OAAO,CAAA,EAAI,EAAE,MAAM,EACrD,EAAE,QAAQ,cAAgB,EAAE,OAAO,QAEjC,EAAS,SAAW,EAAE,QAAQ,uBAAuB,OAAS,GAAK,EAAE,QAAQ,gCAAgC,OAAS,IACxH,EAAG,OAAO,yBAAwB,CAEtC,CACA,OAAO,EAAG,OAAO,CAAQ,EAAE,KAAK,IAAM,CAChC,IAAe,EAAO,OAAS,GACjC,EAAQ,CAAE,CAEd,CAAC,EAAE,MAAM,CAAM,CACjB,CAAC,CACH,CAAC,CACH,CAOA,cAAc,EAAW,EAAS,EAAyB,GAAO,CAChE,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,MAAM,EAAI,KAAK,EACf,EAAE,QAAQ,cAAgB,EAC1B,EAAE,QAAQ,YAAc,GACxB,MAAM,EAAmB,KAAK,UAAU,CACtC,GAAI,EAAE,QAAQ,YAAc,CAAA,GAAI,IAAK,GAAM,EAAI,EAAE,OAAS,IAAI,EAC9D,KAAM,EAAE,QAAQ,KAChB,KAAM,EAAE,QAAQ,IACxB,CAAO,EACD,GAAiB,oBAAoB,CAAC,EAClC,GAAW,EAAE,OAAO,MAAM,WAAW,SACvC,KAAK,IAAI,OAAO,iBAAgB,EAElC,MAAM,EAAkB,EAAE,OAAO,OAAO,OAClC,EAAkB,EAAE,OAAO,OAAO,IACrC,GAAM,CACL,IAAI,EAAI,EACR,OAAQ,GAAM,EAA0B,GAAE,OAAS,KAAO,OAAS,EAAG,SAAW,KAAO,EAAK,CAC/F,CACR,EACM,EAAE,QAAQ,qBAAuB,KACjC,KAAK,IAAI,KAAK,kBAAiB,EAC/B,MAAM,EAAc,KAAK,IAAI,KAAK,UAAU,CAAS,EAYrD,OAXA,KAAK,IAAI,uBAAuB,EAAY,UAAU,EACtD,KAAK,IAAI,sBAAsB,EAAY,SAAS,EACpD,KAAK,IAAI,uBAAuB,EAAY,UAAU,EACtD,KAAK,IAAI,sBAAsB,EAAY,SAAS,EACpD,KAAK,IAAI,sBAAsB,EAAY,SAAS,EAChD,IACE,EAAE,QAAQ,gBACZ,EAAE,QAAQ,cAAc,OAAS,EAAE,OAAO,QAE5C,EAAE,QAAQ,cAAgB,EAAE,OAAO,QAEjC,KAAK,gBAAgB,EAAW,EAAiB,EAAiB,CAAC,EAC9D,KAAK,IAAI,WAAW,EAAS,CAAgB,EAAE,KAAK,IAAM,CAC/D,EAAQ,KAAK,GAAG,CAClB,CAAC,EAAE,MAAM,CAAM,GAEb,KAAK,IAAI,cAAc,KAAK,IAAI,aAAa,OAC1C,KAAK,IAAI,OAAM,EAAG,KAAK,IAAM,CAClC,EAAQ,KAAK,GAAG,CAClB,CAAC,EAAE,MAAM,CAAM,EACjB,CAAC,CACH,CAsBA,gBAAgB,EAAW,EAAiB,EAAiB,EAAG,CAgB9D,MAfI,GAAC,EAAE,IAAI,aACP,CAAC,EAAE,QAAQ,YACX,EAAU,SAAW,GACrB,EAAU,KACZ,CAAC,EAAG,IAAM,CACR,IAAI,EAAI,EACR,QAAS,GAAM,EAA0B,GAAE,OAAS,KAAO,OAAS,EAAG,SAAW,KAAO,EAAK,KAAO,EAAgB,CAAC,CACxH,CACN,GAGQ,EAAE,QAAQ,gBAAgB,OAAS,GACnC,EAAE,QAAQ,yBAAyB,OAAS,GAC5C,EAAE,QAAQ,aAAa,OAAS,GAChC,EAAE,QAAQ,aACV,EAAE,SAAS,OAEjB,CAKA,cAAc,EAAG,EAAG,CAClB,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,OAAO,OAAO,CAAC,EAC7B,OAAO,EAAc,EACnB,CAAA,EAEA,EAAE,OAAO,OAAO,CAAC,CACvB,EAAO,CACD,KAAM,EAAE,KAAO,EAAE,KAEQ,GAAI,KAE7B,MAAO,EAAE,MAAQ,EAAE,MAEM,GAAI,MAE7B,KAAM,EAAE,KAAO,EAAE,KAEQ,GAAI,KAE7B,MAAO,EAAE,MAAQ,EAAE,MAEM,GAAI,MAE7B,OAAQ,OAAO,EAAE,OAAW,IAAc,EAAE,OAEnB,GAAI,OAE7B,KAAM,EAAE,KAAO,EAAE,KAEQ,GAAI,KAE7B,OAAQ,OAAO,EAAE,OAAW,IAAc,EAAE,OAAS,CAC3D,CAAK,CACH,CAKA,yBAAyB,EAAa,EAAgB,CACpD,MAAM,EAAI,KAAK,EACf,IAAI,EAAS,KACb,MAAM,EAAS,wCAAwC,CAAW,KAalE,GAZI,EAAE,QAAQ,WACZ,EAAS,EAAE,IAAI,MAAM,QACnB,GAAG,CAAM,YAAY,CAAc,OAAO,CAAM,cAAc,CAAc,OAAO,CAAM,YAAY,CAAc,IAC3H,EAEU,OAAO,EAAmB,MAC5B,EAAS,EAAE,IAAI,MAAM,QAAQ,GAAG,CAAM,YAAY,CAAW,IAAI,GAC7D,EAAE,OAAO,MAAM,OAAS,OAAS,EAAE,OAAO,MAAM,OAAS,aAAe,EAAE,OAAO,MAAM,OAAS,UAClG,KAAK,IAAI,IAAI,WAAW,CAAW,GAIrC,EACe,IAAI,EAAS,KAAK,CAAC,EAC3B,cACP,EAEA,IACR,MAEM,gBAAQ,KAAK,6CAA6C,EACnD,KAET,OAAO,EAAO,KAAO,EAAO,KAAO,IACrC,CAIA,iBAAiB,EAAU,CACzB,MAAM,EAAI,KAAK,EAEf,MADe,CAAC,MAAO,KAAK,EACrB,QAAS,GAAM,CAChB,OAAO,EAAS,MAAM,CAAC,EAAM,MAC/B,EAAE,OAAO,MAAM,CAAC,EAAI,EAAS,MAAM,CAAC,EACpC,EAAE,QAAQ,UAAU,CAAC,EAAI,EAAS,MAAM,CAAC,EAE7C,CAAC,EACG,EAAS,MAAM,YAAc,EAAS,MAAM,WAAW,SACzD,EAAE,OAAO,MAAM,WAAa,EAAS,MAAM,YAEzC,EAAE,OAAO,MAAM,wBAEjB,EADiB,IAAI,GAAS,CAAQ,EAClB,yBAAyB,EAAU,KAAK,GAAG,GAE1D,CACT,CAIA,iBAAiB,EAAU,CACzB,OAAI,EAAS,OAAS,EAAS,MAAM,SAAW,EAAS,MAAM,YAAc,SACvE,MAAM,QAAQ,EAAS,KAAK,EAC9B,EAAS,MAAM,QACb,CAAC,EAAM,IAAU,CACf,EAAS,MAAM,CAAK,EAAE,IAAM,EAC5B,EAAS,MAAM,CAAK,EAAE,IAAM,GAC9B,CACV,GAEQ,EAAS,MAAM,IAAM,EACrB,EAAS,MAAM,IAAM,MAGlB,CACT,CAQA,wBAAwB,EAAM,CAC5B,MAAM,EAAI,KAAK,EACf,IAAI,EAAQ,EAAE,QAAQ,UAClB,EAAQ,EAAE,QAAQ,UAClB,GAAQ,EAAK,QACf,EAAQ,EAAK,OAEX,GAAQ,EAAK,QACf,EAAQ,EAAK,OAEf,MAAM,EAEJ,EAEF,EAAE,OAAO,MAAM,IAAM,EAAO,IAC5B,EAAE,OAAO,MAAM,IAAM,EAAO,IAC5B,MAAM,EAAgB,GAAU,CAC9B,GAAI,OAAO,EAAM,CAAK,EAAM,IAAa,CACvC,MAAM,EAEJ,EAAM,CAAK,EAEb,EAAE,OAAO,MAAM,CAAK,EAAE,IAAM,EAAG,IAC/B,EAAE,OAAO,MAAM,CAAK,EAAE,IAAM,EAAG,GACjC,CACF,EACA,EAAE,OAAO,MAAM,IAAI,CAAC,EAAM,IAAU,CAC9B,EAAE,SAAS,QAGT,OAAO,EAAM,CAAK,EAAM,IAF5B,EAAa,CAAK,EAKZ,OAAO,KAAK,IAAI,KAAK,MAAM,CAAK,EAAM,MACxC,EAAK,IAAM,KAAK,IAAI,KAAK,MAAM,CAAK,EAAE,IACtC,EAAK,IAAM,KAAK,IAAI,KAAK,MAAM,CAAK,EAAE,IAI9C,CAAC,CACH,CACF,CACA,MAAM,EAAO,CAIX,YAAY,EAAgB,CAC1B,KAAK,EAAI,EAAe,EACxB,KAAK,MAAQ,CACf,CAOA,iBAAiB,CAAE,UAAA,EAAW,OAAA,EAAQ,QAAA,EAAS,QAAA,CAAO,EAAI,CACxD,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAc,EAAO,sBAAqB,EAC1C,EAAa,EAAY,MACzB,EAAc,EAAY,OAChC,IAAI,EAAW,GAAc,EAAE,QAAQ,WAAa,GACpD,MAAM,EAAW,EAAc,EAAE,QAAQ,WACnC,EAAU,KAAK,QAAO,GACvB,EAAE,QAAQ,aAAe,IAAY,CAAC,EAAE,OAAO,MAAM,wBACxD,EAAW,EAAa,EAAE,QAAQ,YAEpC,MAAM,EAAS,EAAU,EAAY,KAAO,EAAE,QAAQ,qBAChD,EAAS,EAAU,EAAY,IACnB,EAAS,GAAK,EAAS,GAAK,EAAS,GAAc,EAAS,GAE5E,EAAU,UAAU,OAAO,eAAe,EAC1C,EAAU,UAAU,OAAO,cAAc,GAErC,EAAE,SAAS,aACb,EAAU,UAAU,OAAO,cAAc,EACzC,EAAU,UAAU,IAAI,eAAe,GAC9B,EAAE,SAAS,aACpB,EAAU,UAAU,OAAO,eAAe,EAC1C,EAAU,UAAU,IAAI,cAAc,GAG1C,IAAI,EAAI,KAAK,MAAM,EAAS,CAAQ,EACpC,MAAM,EAAQ,KAAK,MAAM,EAAS,CAAQ,EACtC,GAAW,CAAC,EAAE,OAAO,MAAM,wBAC7B,EAAI,KAAK,KAAK,EAAS,CAAQ,EAC/B,EAAI,EAAI,GAEV,IAAI,EAAiB,KACjB,EAAU,KACV,EAAgB,EAAE,QAAQ,cAAc,IACzC,GACQ,EAAW,OACf,GAAM,EAAQ,SAAS,CAAC,CACnC,CAEA,EACI,MAAM,EAAgB,EAAE,QAAQ,cAAc,IAC3C,GACQ,EAAW,OACf,GAAM,EAAQ,SAAS,CAAC,CACnC,CAEA,EACI,GAAI,EAAE,UAAU,WAAY,CAC1B,MAAM,EAAc,KAAK,MAAM,UAAS,EACxC,GAAI,CAAC,EAAa,MAAO,CAAE,OAAA,EAAQ,OAAA,CAAM,EACzC,MAAM,EAA0B,EAAY,sBAAqB,EAC3D,EAAoB,GAAU,EAAwB,MAAQ,GAC9D,EAAoB,GAAU,EAAwB,OAAS,GACrE,EAAU,KAAK,oBACb,EACA,EACA,EACA,CACR,EACM,EAAiB,EAAQ,MACzB,GAAK,EAAK,EAAQ,IAAM,KAAO,EAAK,EAChC,IAAmB,MAAQ,EAAE,QAAQ,gBACvC,EAAgB,EAAE,QAAQ,cAAc,CAAc,EACtD,EAAU,KAAK,eAAe,EAAmB,CAAa,EAC9D,GAAK,EAAK,EAAQ,IAAM,KAAO,EAAK,EAExC,CACA,OAAA,EAAE,SAAS,oBAAsB,IAAmB,KAAO,GAAK,GAC5D,CAAC,GAAK,EAAI,KAAG,EAAI,GACjB,EAAE,QAAQ,gBACZ,EAAE,SAAS,uBAAyB,EAEpC,EAAE,SAAS,uBAAyB,EAE/B,CACL,eAAA,EACA,EAAG,EAAE,QAAQ,gBAAkB,EAAQ,EACvC,OAAA,EACA,OAAA,CACN,CACE,CAIA,qBAAqB,EAAS,CAC5B,MAAM,EAAI,KAAK,EACf,IAAI,EAAc,EAClB,MAAM,EAAyB,EAAQ,IACrC,CAAC,EAAM,IACE,EAAK,OAAS,EAAI,EAAQ,EAEzC,EACI,QAAS,EAAI,EAAG,EAAI,EAAuB,OAAQ,IACjD,GAAI,EAAuB,CAAC,IAAM,IAAM,EAAE,QAAQ,uBAAuB,QAAQ,CAAC,IAAM,IAAM,EAAE,QAAQ,gCAAgC,QAAQ,CAAC,IAAM,GAAI,CACzJ,EAAc,EAAuB,CAAC,EACtC,KACF,CAEF,OAAO,CACT,CAOA,oBAAoB,EAAQ,EAAQ,EAAS,EAAS,CACpD,MAAM,EAAI,KAAK,EACT,EAAkB,GACf,EAAE,QAAQ,uBAAuB,QAAQ,CAAW,IAAM,IAAM,EAAE,QAAQ,gCAAgC,QAAQ,CAAW,IAAM,GAEtI,EAAY,EAAE,OAAO,MAAM,KAC3B,EAAa,CAAC,EAAE,QAAQ,cAAgB,IAAc,QAAU,IAAc,QACpF,IAAI,EAAc,IACd,EAAqB,KACrB,EAAoB,KACxB,GAAI,EAAE,QAAQ,mBAAoB,CAChC,IAAI,EAAc,IAClB,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,GAAI,CAAC,EAAe,CAAC,EAAG,SACxB,MAAM,EAAO,EAAQ,CAAC,EAChB,EAAO,EAAQ,CAAC,EAChB,EAAM,KAAK,IAAI,EAAK,OAAQ,EAAK,MAAM,EAC7C,QAAS,EAAI,EAAG,EAAI,EAAK,IAAK,CAC5B,MAAM,EAAQ,KAAK,IAAI,EAAS,EAAK,CAAC,CAAC,EACnC,EAAQ,IACV,EAAc,EACd,EAAoB,EAExB,CACF,CACA,GAAI,IAAsB,KACxB,GAAI,EAAY,CACd,IAAI,EAAc,IAClB,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,GAAI,CAAC,EAAe,CAAC,EAAG,SACxB,MAAM,EAAO,EAAQ,CAAC,EAChB,EAAO,EAAQ,CAAC,EAChB,EAAM,KAAK,IAAI,EAAK,OAAQ,EAAK,MAAM,EAC7C,GAAI,EAAM,EAAG,CACX,MAAM,EAAO,EAAK,CAAiB,EACnC,GAAI,OAAO,GAAS,SAAU,SAC9B,MAAM,EAAI,KAAK,IAAI,EAAS,CAAI,EAC5B,EAAI,IACN,EAAc,EACd,EAAqB,GAEvB,QACF,CACA,QAAS,EAAI,EAAG,EAAI,EAAM,EAAG,IAAK,CAChC,MAAM,EAAM,KAAK,mBACf,EACA,EACA,EAAK,CAAC,EACN,EAAK,CAAC,EACN,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,CAC1B,EACkB,EAAI,KAAO,IACb,EAAc,EAAI,KAClB,EAAqB,EAEzB,CACF,CACF,KAAO,CACL,IAAI,EAAQ,IACZ,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,GAAI,CAAC,EAAe,CAAC,EAAG,SACxB,MAAM,EAAO,EAAQ,CAAC,EAAE,CAAiB,EACzC,GAAI,OAAO,GAAS,SAAU,SAC9B,MAAM,EAAQ,KAAK,IAAI,EAAS,CAAI,EAChC,EAAQ,IACV,EAAQ,EACR,EAAqB,EAEzB,CACF,CAEF,MAAO,CACL,MAAO,EACP,EAAG,CACX,CACI,CACA,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,GAAI,CAAC,EAAe,CAAC,EACnB,SAEF,MAAM,EAAO,EAAQ,CAAC,EAChB,EAAO,EAAQ,CAAC,EAChB,EAAM,KAAK,IAAI,EAAK,OAAQ,EAAK,MAAM,EAC7C,GAAI,GAAc,GAAO,EAAG,CAC1B,QAAS,EAAI,EAAG,EAAI,EAAM,EAAG,IAAK,CAChC,MAAM,EAAM,KAAK,mBACf,EACA,EACA,EAAK,CAAC,EACN,EAAK,CAAC,EACN,EAAK,EAAI,CAAC,EACV,EAAK,EAAI,CAAC,CACtB,EACc,EAAI,KAAO,IACb,EAAc,EAAI,KAClB,EAAqB,EACrB,EAAoB,EAAI,EAAI,GAAM,EAAI,EAAI,EAE9C,CACA,QACF,CACA,QAAS,EAAI,EAAG,EAAI,EAAK,IAAK,CAC5B,MAAM,EAAO,EAAK,CAAC,EACb,EAAQ,EAAS,EACjB,EAAO,EAAK,CAAC,EACb,EAAQ,EAAS,EACjB,EAAO,KAAK,KAAK,EAAQ,EAAQ,EAAQ,CAAK,EAChD,EAAO,IACT,EAAc,EACd,EAAqB,EACrB,EAAoB,EAExB,CACF,CACA,MAAO,CACL,MAAO,EACP,EAAG,CACT,CACE,CAcA,mBAAmB,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,CACzC,MAAM,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAQ,EAAK,EAAK,EAAK,EAC7B,IAAI,EAAI,IAAU,EAAI,IAAM,EAAK,GAAM,GAAM,EAAK,GAAM,GAAM,EAC1D,EAAI,EAAG,EAAI,EACN,EAAI,IAAG,EAAI,GACpB,MAAM,EAAK,EAAK,EAAI,EACd,EAAK,EAAK,EAAI,EACd,EAAK,EAAK,EACV,EAAK,EAAK,EAChB,MAAO,CAAE,KAAM,KAAK,KAAK,EAAK,EAAK,EAAK,CAAE,EAAG,EAAA,CAAC,CAChD,CAKA,eAAe,EAAK,EAAK,CACvB,MAAM,EAAO,EAAI,CAAC,EAClB,IAAI,EAAY,KACZ,EAAO,KAAK,IAAI,EAAM,CAAI,EAC9B,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,MAAM,EAAU,KAAK,IAAI,EAAM,EAAI,CAAC,CAAC,EACjC,EAAU,IACZ,EAAO,EACP,EAAY,EAEhB,CACA,MAAO,CACL,EAAG,CACT,CACE,CASA,WAAW,EAAG,CACZ,MAAM,EAAI,KAAK,EACT,EAAwB,CAAA,EACxB,EAAU,EAAE,WAAW,QAAQ,OAClC,GAAM,OAAO,EAAE,CAAC,EAAM,GAC7B,EACI,GAAI,EAAQ,OAAS,EACnB,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAS,EAAG,IAClC,OAAO,EAAQ,CAAC,EAAE,CAAC,EAAM,KAAe,OAAO,EAAQ,EAAI,CAAC,EAAE,CAAC,EAAM,KACnE,EAAQ,CAAC,EAAE,CAAC,IAAM,EAAQ,EAAI,CAAC,EAAE,CAAC,GACpC,EAAsB,KAAK,SAAS,EAK5C,OAAI,EAAsB,SAAW,CAIvC,CACA,wBAAyB,CACvB,IAAI,EAAI,EAAI,EAAI,EAChB,IAAI,EAAU,GACd,MAAM,IAEF,GAAM,EAAK,KAAK,EAAE,QAAQ,qBAAuB,KAAO,EAAK,KAAK,EAAE,QAAQ,gBAAkB,KAAO,OAAS,EAAG,OAKjH,CAAC,EAAG,IAAM,CACR,IAAI,EACJ,MAAO,GAAG,EAAM,KAAK,EAAE,QAAQ,yBAA2B,MAAgB,EAAI,SAAS,CAAC,EAC1F,CACR,IAAY,CAAA,EAER,QAAS,EAAI,EAAG,EAAI,EAAc,OAAS,EAAG,IAAK,CACjD,GAAI,GAAG,EAAK,EAAc,CAAC,IAAM,MAAgB,EAAG,OAAS,GAAG,EAAK,EAAc,EAAI,CAAC,IAAM,MAAgB,EAAG,MAAO,MAAO,GAC/H,GAAI,EAAc,CAAC,EAAE,KAAK,SAAW,EAAc,EAAI,CAAC,EAAE,KAAK,OAAQ,CACrE,EAAU,GACV,KACF,CACF,CACA,OAAO,CACT,CAIA,cAAc,EAAS,CAGrB,MAFa,CAAC,GAAG,CAAO,EACC,OAAO,CAAC,EAAK,IAAQ,EAAM,EAAI,QAAO,EAAG,OAAQ,CAAC,CAE7E,CAIA,aAAa,EAAgB,CAC3B,OAAI,OAAO,GAAkB,SACpB,KAAK,EAAE,IAAI,OAAO,iBACvB,wCAAwC,CAAc,wCAC9D,EAEW,KAAK,EAAE,IAAI,OAAO,iBACvB,qCACN,CACE,CACA,cAAc,EAAkB,GAAO,CACrC,IAAI,EAEF,CACE,GAAG,KAAK,EAAE,IAAI,OAAO,iBAAiB,iCAAiC,CAC/E,EAEQ,IACF,EAAe,EAAa,OAAQ,GAAM,CACxC,MAAM,EAAY,OAAO,EAAE,aAAa,gBAAgB,CAAC,EACzD,OAAO,KAAK,EAAE,QAAQ,uBAAuB,QAAQ,CAAS,IAAM,EACtE,CAAC,GAEH,EAAa,KAAK,CAAC,EAAG,IAAM,CAC1B,IAAI,EAAS,OAAO,EAAE,aAAa,gBAAgB,CAAC,EAChD,EAAS,OAAO,EAAE,aAAa,gBAAgB,CAAC,EACpD,OAAO,EAAS,EAAS,EAAI,EAAS,EAAS,GAAK,CACtD,CAAC,EACD,MAAM,EAAU,CAAA,EAChB,OAAA,EAAa,QAAS,GAAM,CAC1B,EAAQ,KAAK,EAAE,cAAc,oBAAoB,CAAC,CACpD,CAAC,EACM,CACT,CAIA,WAAW,EAAgB,CAEzB,OADgB,KAAK,aAAa,CAAc,EACjC,OAAS,CAC1B,CAKA,iBAAiB,EAAO,EAAM,CAC5B,MAAM,EAAK,OAAO,EAAM,aAAa,IAAI,CAAC,EACpC,EAAK,OAAO,EAAM,aAAa,IAAI,CAAC,EACpC,EAAQ,EAAM,aAAa,OAAO,EACxC,OAAO,IAAI,EAAS,KAAK,CAAC,EAAE,cAAc,EAAI,EAAI,EAAO,CAAI,CAC/D,CACA,WAAY,CACV,OAAO,KAAK,EAAE,IAAI,OAAO,iBACvB,6IACN,CACE,CACA,SAAU,CAER,OADa,KAAK,UAAS,EACf,OAAS,CACvB,CAIA,mBAAmB,EAAO,CACxB,MAAM,EAAI,KAAK,EACf,IAAI,EAAY,EAAE,OAAO,QAAQ,MAAM,KACvC,OAAI,IAAc,SAChB,EAAY,EAAE,QAAQ,QAAQ,KAAK,CAAK,EAAI,EAAE,OAAO,QAAQ,MAAM,YAE9D,CACT,CAIA,6BAA6B,EAAO,CAClC,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACf,EAAM,uBAAuB,SAAW,IAC1C,EAAM,uBAAyB,EAAE,IAAI,OAAO,iBAC1C,kCACR,GAEI,MAAM,EAAyB,EAAM,uBACrC,QAAS,EAAI,EAAG,EAAI,EAAuB,OAAQ,IAC7C,IAAU,UACZ,EAAuB,CAAC,EAAE,UAAU,IAAI,mBAAmB,EAC3D,EAAuB,CAAC,EAAE,MAAM,QAAU,EAAE,OAAO,QAAQ,MAAM,UAEjE,EAAuB,CAAC,EAAE,UAAU,OAAO,mBAAmB,EAC9D,EAAuB,CAAC,EAAE,MAAM,QAAU,OAGhD,CACF,CACA,MAAM,EAAO,CAIX,YAAY,EAAgB,CAC1B,KAAK,EAAI,EAAe,EACxB,KAAK,MAAQ,EACb,KAAK,YAAc,IAAI,GAAO,CAAc,CAC9C,CAEA,gBAAgB,CAAE,OAAA,EAAS,GAAM,QAAA,EAAS,EAAA,EAAI,EAAG,EAAA,EAAI,KAAM,GAAA,EAAI,GAAA,EAAI,EAAA,CAAC,EAAI,CACtE,MAAM,EAAI,KAAK,EACX,EAAE,OAAO,QAAQ,SAAW,OAC9B,KAAK,oBAAoB,CAAE,EAAA,EAAG,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,EAAA,CAAC,CAAE,EAE5C,KAAK,2BAA2B,EAAQ,CAAC,EAE3C,MAAM,EAAS,KAAK,iBAAiB,CACnC,EAAA,EACA,EAAA,CACN,CAAK,EACD,KAAK,YAAY,CACf,EAAA,EACA,EAAA,EACA,OAAA,EACA,QAAA,EACA,OAAA,EACA,EAAA,CACN,CAAK,EACD,MAAM,EAAY,KAAK,MAAM,aAAY,EACrC,IACF,KAAK,MAAM,YAAY,QAAU,EAAU,sBAAqB,EAAG,MACnE,KAAK,MAAM,YAAY,SAAW,EAAU,sBAAqB,EAAG,OAExE,CAEA,YAAY,CAAE,EAAA,EAAG,EAAA,EAAG,OAAA,EAAQ,QAAA,EAAS,OAAA,EAAQ,EAAA,CAAC,EAAI,CAChD,MAAM,EAAI,KAAK,EACT,CAAE,KAAA,EAAM,KAAA,EAAM,WAAA,CAAU,EAAK,EAC7B,EAAY,EAAE,WAAW,OAAO,OAChC,EAAa,IAAM,MAAQ,EAAE,OAAO,YAAY,IAAI,YAAc,EAAE,QAAQ,OAAO,CAAC,EAAI,EAAE,QAAQ,OAAO,CAAC,EAChH,QAAS,EAAI,EAAG,EAAI,EAAW,IAAK,CAClC,MAAM,EAAS,EAAE,OAAO,QAAQ,aAAe,EAAY,EAAI,EAAI,EAC7D,EAAM,KAAK,iBAAiB,CAChC,EAAA,EACA,EAAA,EACA,EAAA,EACA,OAAA,EACA,OAAA,EACA,EAAA,EACA,WAAA,CACR,CAAO,EACD,KAAK,YAAY,CACf,EAAA,EACA,EAAG,EACH,EAAA,EACA,QAAA,EACA,OAAQ,CACN,IAAK,EAAI,IACT,SAAU,EAAI,SACd,KAAA,EACA,WAAA,EACA,KAAA,CACV,EACQ,WAAY,EAAI,WAChB,OAAA,EACA,OAAQ,EAAI,MACpB,CAAO,CACH,CACF,CAOA,iBAAiB,CAAE,EAAA,EAAG,EAAA,EAAG,OAAA,EAAQ,OAAA,EAAQ,EAAA,EAAG,WAAA,CAAU,EAAI,CACxD,MAAM,EAAI,KAAK,EACf,IAAI,EAAI,KAAK,cAAc,CAAC,EACxB,EAAS,EACT,EACA,EAEF,CAAA,EAEE,EAAa,EAAE,OAAO,MAAM,OAAS,UAAY,EAAE,kBACrD,OAEE,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,CACnC,EACM,CACE,OAAQ,EAAE,WAAW,OACrB,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CACA,EAAQ,KAAK,cAAc,CACrB,GAAI,EAAE,kBACN,MAAO,EACP,YAAa,EACb,EAAA,CACN,CAAK,EACD,OAAI,EAAE,QAAQ,aACR,GACF,EAAI,KAAK,cAAc,CAAM,EAC7B,EAAa,KAAK,cAAc,CAC9B,GAAI,EAAE,kBACN,MAAO,EACP,YAAa,EACb,EAAA,CACV,CAAS,EACD,EAAS,EAAE,QAAQ,OAAO,CAAM,EAChC,EAAM,KAAK,aAAa,EAAG,EAAQ,CAAC,EACpC,EAAW,KAAK,eAAe,EAAG,EAAQ,CAAC,IAE3C,EAAS,KAAK,oBAAoB,EAAG,CAAM,EAC3C,EAAM,KAAK,aAAa,EAAG,EAAG,CAAC,EAC/B,EAAW,KAAK,eAAe,EAAG,EAAG,CAAC,IAGtC,IAAM,OACR,EAAM,EAAE,aAAa,EAAE,WAAW,OAAO,CAAC,EAAG,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CAChF,YAAa,EACb,eAAgB,CACxB,CAAO,CAAC,GAEG,CAAE,WAAA,EAAY,IAAA,EAAK,SAAA,EAAU,OAAA,CAAM,CAC5C,CAQA,aAAa,EAAG,EAAO,EAAG,CACxB,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACf,OAAI,EAAE,UAAU,YACP,EAAE,cAAc,GAAM,EAAK,EAAE,UAAU,mBAAqB,KAAO,OAAS,EAAG,CAAK,IAAM,KAAO,OAAS,EAAG,CAAC,EAAG,CACtH,OAAQ,EAAE,UAAU,iBACpB,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CAAO,EAAI,MAAQ,EAAE,cAAc,GAAM,EAAK,EAAE,UAAU,iBAAmB,KAAO,OAAS,EAAG,CAAK,IAAM,KAAO,OAAS,EAAG,CAAC,EAAG,CAC1H,OAAQ,EAAE,UAAU,eACpB,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CAAO,EAEI,EAAE,aAAa,EAAE,WAAW,OAAO,CAAK,EAAE,CAAC,EAAG,CACnD,OAAQ,EAAE,WAAW,OACrB,YAAa,EACb,eAAgB,EAChB,EAAA,CACN,CAAK,CACH,CAQA,eAAe,EAAG,EAAO,EAAG,CAC1B,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,GAAS,EAAK,EAAE,WAAW,YAAY,CAAK,IAAM,KAAO,OAAS,EAAG,CAAC,EAC5E,OAAK,MAAM,QAAQ,CAAK,EACjB,EAAM,IAAK,IAAU,CAC1B,MAAO,EACP,IAAK,EAAE,aAAa,EAAK,MAAO,CAC9B,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CAAO,CACP,EAAM,EARgC,CAAA,CASpC,CAQA,oBAAoB,EAAG,EAAU,CAC/B,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACT,GAAc,EAA0B,GAAE,SAAW,KAAO,OAAS,EAAG,aAAa,MAAM,EACjG,GAAI,CAAC,EAAY,OAAO,EACxB,GAAI,EAAW,QAAQ,KAAK,IAAM,GAAI,OAAO,EAC7C,GAAI,EAAW,QAAQ,SAAS,IAAM,GAAI,OAAO,EACjD,MAAM,EAAY,EAAE,IAAI,OAAO,cAC7B,EAAW,OAAO,CAAC,EAAE,MAAM,EAAG,EAAE,CACtC,EACI,OAAQ,GAAM,EAAkC,GAAU,WAAW,CAAC,IAAM,KAAO,OAAS,EAAG,aAAa,QAAQ,IAAM,KAAO,EAAK,CACxI,CAIA,cAAc,EAAG,CACf,MAAM,EAAI,KAAK,EACf,IAAI,EAAe,EAAE,WAAW,iBAAiB,CAAC,EAC9C,EACJ,OAAI,EAAE,WAAW,QAAU,OACrB,MAAM,QAAQ,EAAE,WAAW,KAAK,GAClC,EACA,EAAE,WAAW,MAAM,CAAC,GACpB,EAAE,WAAW,MAAM,CAAC,EAAE,UACtB,EACA,EAAE,WAAW,MAAM,CAAC,GACpB,EAAE,WAAW,MAAM,CAAC,EAAE,OACtB,EAAE,WAAW,MAAM,CAAC,EAAE,MAAM,YAE5B,EACA,EAAE,WAAW,MAAM,UACf,OACJ,EAAE,WAAW,MAAM,MAAM,WAAc,aACrC,EACA,EAAE,WAAW,MAAM,MAAM,YAI7B,EAAoB,EAAE,OAAO,QAAQ,EAAE,MAAM,UAE3C,OAAO,GAAiB,aACtB,EAAE,WAAW,iBAAiB,CAAC,EACjC,EAAe,EAAE,WAAW,iBAAiB,CAAC,EAE9C,EAAe,SAAS,EAAO,CAC7B,OAAO,CACT,GAGA,OAAO,GAAsB,aAC/B,EAAoB,SAAS,EAAO,CAClC,OAAO,EAAQ,EAAQ,KAAO,EAChC,GAEK,CACL,aAAA,EACA,kBAAA,CACN,CACE,CAEA,cAAc,CAAE,GAAA,EAAI,MAAA,EAAO,YAAA,EAAa,EAAA,CAAC,EAAI,CAC3C,MAAM,EAAI,KAAK,EACf,OAAO,EAAG,OAAO,EAAE,WAAW,YAAY,CAAK,CAAC,EAAG,CACjD,OAAQ,EAAE,WAAW,OACrB,YAAA,EACA,eAAgB,EAChB,EAAA,CACN,CAAK,CACH,CAEA,YAAY,CAAE,EAAG,EAAA,EAAG,QAAA,EAAS,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAQ,OAAA,CAAM,EAAI,CACjE,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACb,CAAE,IAAA,EAAK,SAAA,EAAU,KAAA,EAAM,WAAA,EAAY,KAAA,CAAI,EAAK,EAClD,GAAI,CAAC,GAAW,CAAC,EAAQ,CAAC,EAAG,OAC7B,IAAI,EAAkB,KACtB,EAAkB,EAAQ,CAAC,EAAE,SACzB,EAAE,OAAO,QAAQ,kBACnB,EAAQ,CAAC,EAAE,MAAM,gBAAkB,EACnC,EAAgB,CAAC,EAAE,MAAM,QAAU,QAEjC,EAAM,mBACJ,EAAM,eAAiB,OACzB,EAAM,aAAe,EAAE,IAAI,OAAO,cAChC,2BACV,GAEU,EAAM,eACR,EAAM,aAAa,UAAY,IAG/B,EAAM,uBACJ,EAAM,mBACR,EAAM,iBAAiB,UAAY,IAAe,GAAK,EAAa,GAGxE,MAAM,EAAW,EAAQ,CAAC,EAAE,cAC1B,kCACN,EACQ,IACF,EAAS,UAAY,GAA0B,IAEjD,MAAM,EAAS,EAAQ,CAAC,EAAE,cAAc,kCAAkC,EACtE,IACF,EAAO,UAAY,OAAO,EAAQ,IAAc,EAAM,IAEpD,EAAgB,CAAC,GAAK,EAAgB,CAAC,EAAE,UAAU,SAAS,2BAA2B,IACrF,EAAE,OAAO,QAAQ,OAAO,YAAc,MAAM,QAAQ,EAAE,OAAO,QAAQ,OAAO,UAAU,IACxF,EAAS,EAAE,OAAO,QAAQ,OAAO,WAAW,CAAC,GAE3C,EAAE,OAAO,QAAQ,gBACnB,EAAgB,CAAC,EAAE,MAAM,gBAAkB,EAE3C,EAAgB,CAAC,EAAE,MAAM,MAAQ,GAGhC,EAAE,OAAO,QAAQ,OAAO,OAC3B,EAAgB,CAAC,EAAE,MAAM,QAAU,QAErC,MAAM,EAAW,EAAQ,CAAC,EAAE,cAC1B,sCACN,EACU,EAAS,EAAQ,CAAC,EAAE,cACxB,sCACN,EACI,GAAI,EAAS,QAAU,EAAE,WAAW,YAAY,CAAC,EAAG,CAClD,MAAM,EAAkB,IAAM,CAC5B,IAAI,EAAU,QACV,EAAQ,QACZ,EAAS,QAAS,GAAS,CACzB,GAAW,gGAAgG,EAAK,MAAM,WAAW,uDAAuD,EAAK,MAAM,IAAI,SACvM,GAAS,QAAQ,EAAK,GAAG,QAC3B,CAAC,EACD,EAAS,UAAY,EAAU,SAC/B,EAAO,UAAY,EAAQ,QAC7B,EACI,EACE,EAAE,WAAW,YAAY,CAAC,EAAE,CAAC,GAAK,MAAM,QAAQ,EAAE,WAAW,YAAY,CAAC,EAAE,CAAC,CAAC,EAChF,EAAe,GAEf,EAAS,UAAY,GACrB,EAAO,UAAY,IAGrB,EAAe,CAEnB,MACE,EAAS,UAAY,GACrB,EAAO,UAAY,GAErB,GAAI,IAAS,KAAM,CACjB,MAAM,EAAW,EAAQ,CAAC,EAAE,cAC1B,kCACR,EACM,EAAS,UAAY,EAAE,OAAO,QAAQ,EAAE,MACxC,MAAM,EAAS,EAAQ,CAAC,EAAE,cACxB,kCACR,EACM,EAAO,UAAY,OAAO,EAAS,IAAc,EAAO,EAC1D,CACA,GAAI,GAAU,EAAgB,CAAC,EAAG,CAChC,GAAI,EAAE,OAAO,QAAQ,gBAAiB,CACpC,MAAM,EAAe,EAAQ,CAAC,EAAE,cAC9B,4BACV,EACc,EAAa,EAAQ,CAAC,EAAE,cAAc,0BAA0B,EAClE,WAAW,CAAG,GAAK,GACrB,EAAa,MAAM,QAAU,OAC7B,EAAW,MAAM,QAAU,SAE3B,EAAa,MAAM,QAAU,QAC7B,EAAW,MAAM,QAAU,QAE/B,CACI,OAAO,EAAQ,KAAe,IAAQ,MAAQ,EAAE,QAAQ,gCAAgC,QAAQ,CAAC,EAAI,IAAM,EAAE,QAAQ,uBAAuB,QAAQ,CAAC,EAAI,IAAM,MAAM,QAAQ,EAAM,QAAQ,eAAe,GAAK,EAAM,QAAQ,gBAAgB,QAAQ,CAAC,IAAM,GAC9P,EAAgB,CAAC,EAAE,WAAW,MAAM,QAAU,OAE9C,EAAgB,CAAC,EAAE,WAAW,MAAM,QAAU,EAAE,OAAO,QAAQ,MAAM,OAEzE,MACM,MAAM,QAAQ,EAAM,QAAQ,eAAe,GAAK,EAAM,QAAQ,gBAAgB,QAAQ,CAAC,IAAM,KAC/F,EAAgB,CAAC,EAAE,WAAW,MAAM,QAAU,OAGpD,CAKA,2BAA2B,EAAQ,EAAG,CACpC,MAAM,EAAI,KAAK,EACf,GAAI,EACF,KAAK,YAAY,6BAA6B,QAAQ,MACjD,CACL,KAAK,YAAY,6BAA6B,SAAS,EACvD,MAAM,EAA0B,EAAE,IAAI,OAAO,cAC3C,oCAAoC,CAAC,EAC7C,EACM,GAAI,EAAyB,CAC3B,MAAM,EAEJ,EAEF,EAAS,UAAU,IAAI,mBAAmB,EAC1C,EAAS,MAAM,QAAU,EAAE,OAAO,QAAQ,MAAM,OAClD,CACF,CACF,CAEA,iBAAiB,CAAE,EAAA,EAAG,EAAA,CAAC,EAAI,CACzB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAChC,MAAM,EAAI,KAAK,EACT,EAAkB,EAAE,WAAW,QAAQ,IAC1C,GAAQ,EAAI,OAAS,EAAI,EAAM,CAAA,CACtC,EACI,IAAI,EAAO,GACP,EAAa,GACb,EAAO,KACP,EAAM,KACV,MAAM,EAAsB,CAC1B,OAAQ,EAAE,WAAW,OACrB,YAAa,EACb,eAAgB,EAChB,EAAA,CACN,EACU,EAAa,EAAE,WAAW,aAChC,GAAI,IAAM,KACR,EAAM,EAAE,WAAW,OAAO,CAAC,UAEvB,EAAE,UAAU,YAAc,EAAE,OAAO,MAAM,OAAS,WAEpD,GADA,EAAO,EAAgB,CAAC,EAAE,CAAC,EACvB,EAAgB,CAAC,EAAE,SAAW,EAAG,CACnC,MAAM,EAAyB,KAAK,YAAY,qBAAqB,CAAe,EACpF,EAAO,EAAgB,CAAsB,EAAE,CAAC,CAClD,OAEmB,IAAI,GAAK,KAAK,CAAC,EACnB,WAAU,EACvB,EAAO,OACP,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,EAAM,IAE7B,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,EACzB,GAEJ,EAAO,OAAO,EAAE,UAAU,OAAO,CAAC,EAAM,IAAc,EAAE,UAAU,OAAO,CAAC,EAAI,GAIpF,MAAM,EAAa,EACnB,OAAI,EAAE,UAAU,YAAc,EAAE,OAAO,MAAM,OAAS,WAEpD,EADgB,IAAI,GAAW,KAAK,CAAC,EACtB,aAEb,EAAE,WAAW,eACb,EACA,EACA,CACE,EAAG,OACH,cAAe,IAAI,GAAS,KAAK,CAAC,EAAE,WACpC,EAAG,KAAK,CAClB,CACA,EAEU,EAAE,QAAQ,gBACZ,EAAO,EAAE,WAAW,iBAAiB,CAAC,EAAE,EAAY,CAAmB,EAEvE,GAAQ,GAAM,GAAM,EAAK,EAAE,YAAY,kBAAoB,KAAO,OAAS,EAAG,KAAK,EAAI,EAAY,CAAmB,IAAM,KAAO,EAAK,EAGxI,EAAE,OAAO,QAAQ,EAAE,YAAc,SACnC,GAAQ,GAAM,GAAM,EAAK,EAAE,YAAY,iBAAmB,KAAO,OAAS,EAAG,KAAK,EAAI,EAAY,CAAmB,IAAM,KAAO,EAAK,GAErI,EAAE,WAAW,QAAQ,OAAS,GAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,OAAS,IACtE,EAAqC,IAAW,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,EAAG,CAAC,GAE3E,OAAO,EAAE,OAAO,MAAM,QAAQ,WAAc,WAC9C,GAAc,GAAM,EAAK,EAAE,YAAY,wBAA0B,KAAO,OAAS,EAAG,KAClF,EACA,EACA,CACR,EAEM,EAAa,EAER,CACL,IAAK,MAAM,QAAQ,CAAG,EAAI,EAAI,KAAK,GAAG,EAAI,EAC1C,KAAM,MAAM,QAAQ,CAAI,EAAI,EAAK,KAAK,GAAG,EAAI,EAC7C,WAAY,MAAM,QAAQ,CAAU,EAAI,EAAW,KAAK,GAAG,EAAI,EAC/D,KAAA,CACN,CACE,CAEA,oBAAoB,CAAE,EAAA,EAAG,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,EAAA,CAAC,EAAI,CACvC,MAAM,EAAY,KAAK,MAAM,aAAY,EACzC,IAAI,EAAK,EAAE,OAAO,QAAQ,OAI1B,GAHI,MAAM,QAAQ,CAAE,IAClB,EAAK,EAAG,CAAC,GAEP,OAAO,GAAO,WAAY,OAC9B,MAAM,EAAgB,EAAG,CACvB,OAAQ,EAAE,WAAW,OACrB,YAAa,EACb,eAAgB,EAChB,GAAA,EACA,GAAA,EACA,EAAA,CACN,CAAK,EACD,GAAI,EAAW,CACb,MAAM,EAAU,EAAU,cAAc,2BAA2B,EAC/D,OAAO,GAAkB,UAAY,OAAO,GAAkB,SAChE,EAAU,UAAY,OAAO,CAAa,EACjC,GAAiB,OAAS,aAAyB,SAAW,OAAO,EAAc,UAAa,YACzG,EAAU,UAAY,GACtB,EAAU,YAAY,EAAc,UAAU,EAAI,CAAC,GAEjD,GAAS,EAAU,YAAY,CAAO,CAC5C,CACF,CACF,CACA,MAAM,GAAqB,EAC3B,MAAM,EAAS,CAIb,YAAY,EAAgB,CAC1B,KAAK,MAAQ,EACb,KAAK,EAAI,EAAe,CAC1B,CAQA,gBAAgB,EAAI,EAAI,KAAM,CAC5B,MAAM,EAAQ,KAAK,MACb,EAAI,KAAK,EACT,EAAc,EAAM,iBAAgB,EAC1C,IAAI,EAAI,EAAK,EAAM,iBAAmB,EACtC,MAAM,EAAa,EAAE,UAAU,OAAO,MAAK,EAAG,OAiB9C,GAhBI,IAAM,OACR,EAAI,EAAE,OAAO,UAAY,EAAa,GAEpC,IAAgB,MAAQ,CAAC,EAAE,QAAQ,kBACrC,EAAY,aAAa,IAAK,OAAO,CAAC,CAAC,EACvC,EAAY,aAAa,KAAM,OAAO,CAAC,CAAC,EACxC,EAAY,aAAa,KAAM,OAAO,CAAC,CAAC,EACxC,EAAY,aAAa,KAAM,OAAO,EAAE,OAAO,UAAU,CAAC,EAC1D,EAAY,UAAU,IAAI,mBAAmB,GAE3C,EAAI,IACN,EAAI,GAEF,EAAI,EAAE,OAAO,YACf,EAAI,EAAE,OAAO,WAEX,EAAM,sBAAuB,CAC/B,IAAI,EAAK,GACL,EAAE,OAAO,MAAM,WAAW,QAAU,aAAe,EAAE,OAAO,MAAM,WAAW,QAAU,cACzF,EAAK,EAAI,EAAM,iBAAmB,GAEpC,KAAK,iBAAiB,CAAE,CAC1B,CACF,CAOA,gBAAgB,EAAI,CAClB,MAAM,EAAQ,KAAK,MACf,EAAM,cAAgB,MACxB,EAAS,SAAS,EAAM,YAAa,CACnC,GAAI,EACJ,GAAI,CACZ,CAAO,EAEC,EAAM,oBAAsB,MAC9B,EAAS,SAAS,EAAM,kBAAmB,CACzC,GAAI,EACJ,GAAI,CACZ,CAAO,CAEL,CAMA,iBAAiB,EAAI,CACnB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACnB,GAAI,EAAM,eAAiB,MAAQ,EAAM,mBAAqB,EAAG,CAC/D,EAAM,aAAa,UAAU,IAAI,mBAAmB,EACpD,MAAM,EAAK,EAAM,UAAY,EAAE,OAAO,MAAM,QAAQ,QAAU,EAAE,OAAO,WAAa,EAAI,EAAE,OAAO,MAAM,QAEjG,EADc,EAAM,aAAa,sBAAqB,EACvB,MAErC,GADA,EAAK,EAAK,EAAmB,EACzB,CAAC,MAAM,CAAE,EAAG,CACd,EAAK,EAAK,EAAE,OAAO,WAEnB,MAAM,EADW,IAAI,EAAS,KAAK,CAAC,EACV,cACvB,GAAM,EAAK,EAAM,mBAAqB,KAAO,OAAS,EAAG,YAAc,KAAO,EAAK,GACpF,EAAE,OAAO,MAAM,OAAO,MAAM,QACtC,EACY,EAAM,mBACR,EAAM,iBAAiB,MAAM,SAAW,EAAS,MAAQ,MAE3D,EAAM,aAAa,MAAM,KAAO,EAAK,KACrC,EAAM,aAAa,MAAM,IAAM,EAAK,IACtC,CACF,CACF,CAIA,iBAAiB,EAAO,CACtB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACf,EAAM,aAAe,OACvB,EAAM,WACN,CACE,GAAG,EAAE,IAAI,OAAO,iBAAiB,0BAA0B,CACnE,GAEI,MAAM,EAA0B,UAC7B,GAAM,EAAK,EAAM,oBAAsB,KAAO,OAAS,EAAG,aAAa,IAAI,IAAM,KAAO,EAAK,IAC9F,EACN,EACI,IAAI,EAAK,EAAE,OAAO,WAAa,EAC/B,GAAI,EAAM,WAAY,CACpB,MAAM,EAAc,EAAM,WAAW,CAAK,EAAE,sBAAqB,EAC3D,EAAgB,EAAY,OAClC,IAAI,EACJ,MAAM,EAEJ,EAAE,IAAI,OAAO,cACX,0BAA0B,CAAK,8BACzC,EAEY,EAAa,EAAE,IAAI,OAAO,sBAAqB,EACrD,GAAI,EAAa,CACf,MAAM,EAAK,EAAY,sBAAqB,EACxC,EAAG,MAAQ,IAEb,EAD6B,EAAG,KAAO,EAAG,MAAQ,EAAI,EAAW,KACrC,EAAY,MAAQ,EAEpD,CACI,GAAM,OAER,EAAK,EAAE,OAAO,MAAM,CAAK,EAAE,SAAW,EAAE,QAAQ,gBAAgB,CAAK,EAAI,EAAM,EAAE,QAAQ,gBAAgB,CAAK,EAAI,EAAY,MAAQ,GAExI,EAAK,EAAK,EAAgB,EACtB,EAAE,QAAQ,mBAAmB,QAAQ,CAAK,IAAM,IAAM,EAAK,GAAK,EAAK,EAAE,OAAO,YAChF,EAAM,WAAW,CAAK,EAAE,UAAU,IAAI,mBAAmB,EACzD,EAAM,WAAW,CAAK,EAAE,MAAM,IAAM,EAAK,KACzC,EAAM,WAAW,CAAK,EAAE,MAAM,KAAO,EAAK,EAAE,OAAO,MAAM,CAAK,EAAE,QAAQ,QAAU,MAElF,EAAM,WAAW,CAAK,EAAE,UAAU,OAAO,mBAAmB,CAEhE,CACF,CAQA,YAAY,EAAI,EAAI,EAAa,KAAM,CAErC,MAAM,EADQ,KAAK,MACK,aAAY,EACpC,GAAI,CAAC,EAAW,OAChB,MAAM,EAAM,KAAK,uBAAuB,EAAI,EAAI,CAAU,EACtD,IAAQ,MACZ,KAAK,qBAAqB,EAAW,CAAG,CAC1C,CAWA,uBAAuB,EAAI,EAAI,EAAa,KAAM,CAChD,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5B,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACb,EAAc,EAAM,YACpB,EAAe,CAAC,CAAC,EAAE,OAAO,QAAQ,MAClC,EAAY,IAAe,KAAO,WAAW,OAAO,CAAU,CAAC,EAAI,EACnE,EAAM,EAAY,UAAY,EAC9B,EAAM,EAAY,SAAW,EAC7B,EAAQ,WAAW,OAAO,CAAE,CAAC,EAC7B,EAAQ,WAAW,OAAO,CAAE,CAAC,EACnC,GAAI,MAAM,CAAK,GAAK,MAAM,CAAK,EAAG,OAAO,KACzC,IAAI,EAAI,EAAQ,EAAY,EAC5B,MAAM,EAAS,EAAQ,EAAE,OAAO,WAChC,IAAI,EAAI,EAAe,EAAS,EAAM,EAAI,EAAY,EAAI,EAAQ,EAAY,EAC1E,EAAY,QAWhB,GAVI,EAAI,EAAE,OAAO,UAAY,IAC3B,EAAI,EAAI,EAAM,EAAY,GAC1B,EAAY,QAEV,EAAI,EAAE,OAAO,UAAY,EAAM,KACjC,EAAI,EAAE,OAAO,UAAY,GAEvB,EAAI,MACN,EAAI,KAEF,EAAE,OAAO,QAAQ,aAAc,CACjC,MAAM,EAAS,EAAM,UAAS,EAC9B,GAAI,CAAC,EAAQ,OAAO,KACpB,MAAM,EAAc,EAAO,sBAAqB,EAChD,EAAI,EAAM,EAAE,QAAU,EAAY,KAC9B,EAAI,EAAE,OAAO,UAAY,GAC3B,EAAI,EAAI,EACR,EAAY,QAEZ,EAAY,QAEd,EAAI,EAAM,EAAE,QAAU,EAAE,OAAO,WAAa,EAAY,IACpD,EAAI,EAAE,OAAO,WAAa,IAC5B,EAAI,EAAI,EAEZ,SACM,CAAC,EAAE,QAAQ,gBACb,GAAI,EAAc,CAChB,MAAM,EAAU,EAAE,OAAO,WACnB,EAAa,EAAE,OAAO,WAAa,EAAE,OAAO,WAC9C,EAAI,EAAM,IACZ,EAAI,EAAa,GAEf,EAAI,IACN,EAAI,EAER,MACM,EAAM,EAAI,EAAI,EAAE,OAAO,aACzB,EAAI,EAAE,OAAO,WAAa,EAAM,EAAE,OAAO,YAKjD,GAAI,MAAM,CAAC,EAAG,OAAO,KACrB,EAAI,EAAI,EAAE,OAAO,WACjB,MAAM,GAAQ,GAAM,EAAK,EAAE,SAAW,KAAO,OAAS,EAAG,QAAU,KAAO,OAAS,EAAG,cACtF,GAA6B,GAAK,WAAc,GAAM,EAA6B,GAAK,WAAa,KAAO,OAAS,EAAG,aAAe,MAAgB,EAAG,YAAc,GAAM,GAAM,EAAK,EAAE,MAAQ,KAAO,OAAS,EAAG,SAAW,KAAO,OAAS,EAAG,gBAAkB,MAAgB,EAAG,KAAK,EAAI,8BAA8B,GAAI,CAClU,MAAM,EAAY,EAAe,EAAS,EACpC,GAAU,GAAa,GAAK,GAC5B,EAAa,EACb,EAAgB,EAAI,EACtB,CAAC,MAAM,CAAS,GAAK,EAAM,GAAK,EAAa,EAAY,GAAU,EAAgB,EAAY,IACjG,EAAI,EAAY,EAAM,EAClB,EAAI,IACN,EAAI,EAAY,GAGtB,CACA,IAAI,EAAS,KACb,GAAI,GAAgB,EAAM,EAAG,CAC3B,MAAM,EAAS,EAAS,EAClB,EAAY,GACZ,EAAY,EAAM,GACxB,EAAS,KAAK,IAAI,EAAW,KAAK,IAAI,EAAW,CAAM,CAAC,CAC1D,CACA,MAAO,CAAE,EAAA,EAAG,EAAA,EAAG,UAAA,EAAW,OAAA,CAAM,CAClC,CAeA,qBAAqB,EAAW,EAAK,CACnC,GAAI,CAAC,EAAW,OAChB,MAAM,EAAa,EAAU,QAAQ,aAAe,OAChD,IACF,EAAU,MAAM,mBAAqB,QAEvC,EAAU,MAAM,KAAO,EAAI,EAAI,KAC/B,EAAU,MAAM,IAAM,EAAI,EAAI,KAC1B,EAAI,YACN,EAAU,QAAQ,UAAY,EAAI,WAEhC,EAAI,QAAU,MAChB,EAAU,MAAM,YAAY,mBAAoB,EAAI,OAAS,IAAI,EAE/D,EAAI,QAAU,MAChB,EAAU,MAAM,YAAY,mBAAoB,EAAI,OAAS,IAAI,EAE/D,IACG,EAAU,YACf,EAAU,QAAQ,WAAa,OAC/B,sBAAsB,IAAM,CAC1B,EAAU,MAAM,mBAAqB,EACvC,CAAC,EAEL,CAKA,YAAY,EAAG,EAAG,CAChB,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACnB,GAAI,EAAE,QAAQ,QAAQ,KAAK,CAAC,EAAI,EAAG,CACjC,MAAM,EAAY,EAAE,IAAI,OAAO,iBAC7B,yCAAyC,CAAC,uBAClD,EACM,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IAChC,UAAU,EAAK,EAAU,CAAC,EAAE,aAAa,KAAK,IAAM,KAAO,EAAK,IAAK,EAAE,IAAM,IAC/E,EAAM,OAAO,gBAAe,EAC5B,EAAM,OAAO,oBAAoB,EAAG,EAAU,CAAC,CAAC,EAGtD,MACE,EAAM,OAAO,gBAAe,EAC5B,KAAK,wBAAwB,EAAG,CAAC,CAErC,CAOA,wBAAwB,EAAG,EAAgB,CACzC,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACnB,IAAI,EAAK,EACL,EAAK,EACT,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAY,EAAE,QAAQ,YACtB,EAAY,EAAM,YAAY,mBAAmB,CAAc,EAC/D,EAEJ,EAAE,OAAO,OAAO,CAAc,EAAE,KAElC,GAAI,IAAY,IAAY,UAAY,IAAY,eAAiB,IAAY,WAAa,IAAY,UACxG,OAEF,GAAM,GAAM,EAAK,EAAU,CAAc,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,EAC7F,IAAO,GAAM,EAAK,EAAU,CAAc,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,EACpG,MAAM,EAAQ,EAAE,IAAI,OAAO,cACzB,wCAAwC,CAAc,oCAC5D,EACI,GAAI,GAAS,EAAK,EAAE,OAAO,YAAc,EAAK,EAAG,CAC/C,MAAM,GAAS,EAAK,EAAM,aAAa,OAAO,IAAM,KAAO,EAAK,SAC1D,EAAO,EAAS,cAAc,EAAI,EAAI,EAAO,EAAY,GAAG,EAClE,EAAM,aAAa,IAAK,CAAI,CAC9B,CACA,KAAK,gBAAgB,CAAE,EAClB,EAAM,cACT,KAAK,YAAY,EAAI,EAAI,CAAS,CAEtC,CAMA,yBAAyB,EAAG,CAC1B,IAAI,EAAI,EACR,MAAM,EAAQ,KAAK,MACb,EAAI,EAAM,EAChB,IAAI,EAAK,EACL,EAAK,EACL,EAAe,EACnB,MAAM,EAAY,EAAE,QAAQ,YACtB,EAAS,IAAI,GAAO,KAAK,CAAC,EAC1B,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,EAAe,EAAO,2BAA2B,MAAO,CACtD,OACA,OACA,UACA,QACN,CAAK,EACD,MAAM,EAAY,EAAM,YAAY,mBAAmB,CAAY,EAKnE,IAJK,EAAK,EAAU,CAAY,IAAM,MAAgB,EAAG,CAAC,IACxD,EAAK,EAAU,CAAY,EAAE,CAAC,EAAE,CAAC,EACjC,EAAK,EAAU,CAAY,EAAE,CAAC,EAAE,CAAC,GAE/B,MAAM,CAAE,EACV,OAEF,MAAM,EAAS,EAAM,YAAY,cAAa,EAC9C,GAAI,EAAO,OACT,QAAS,EAAI,EAAG,EAAI,EAAE,WAAW,OAAO,OAAQ,IAAK,CACnD,MAAM,EAAW,EAAU,CAAC,EAM5B,GALI,EAAE,QAAQ,aACR,OAAO,EAAa,KACtB,EAAO,OAAO,EAAG,EAAG,IAAI,EAGxB,EAAO,CAAC,GAAK,GAAY,EAAS,OAAQ,CAC5C,IAAI,EAAM,EAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EACvB,EACJ,EAAO,CAAC,EAAE,aAAa,KAAM,CAAE,EAC/B,MAAM,GAAS,EAAK,EAAO,CAAC,EAAE,aAAa,OAAO,IAAM,KAAO,EAAK,SACpE,GAAI,EAAE,OAAO,MAAM,OAAS,aAAe,CAAC,EAAE,QAAQ,YAAa,CACjE,MAAM,EAAkB,EAAI,EAAE,WAAW,OAAO,CAAC,EAAE,OACnD,EAAO,EAAU,CAAC,EAAE,CAAe,EAAE,CAAC,EACtC,MAAM,EAAU,KAAK,IAAI,EAAM,CAAI,EAAI,EACvC,EAAM,EAAM,CACd,CACA,GAAI,IAAQ,MAAQ,CAAC,MAAM,CAAG,GAAK,EAAM,EAAE,OAAO,WAAa,GAAa,EAAM,EAAY,EAAG,CAC/F,MAAM,EAAO,EAAS,cAAc,EAAI,EAAK,EAAO,CAAS,EAC7D,EAAO,CAAC,EAAE,aAAa,IAAK,CAAI,CAClC,MACE,EAAO,CAAC,EAAE,aAAa,IAAK,EAAE,CAElC,CACF,CAEF,KAAK,gBAAgB,CAAE,EAClB,EAAM,cACT,KAAK,YAAY,EAAI,GAAM,EAAE,OAAO,WAAY,CAAS,CAE7D,CAKA,0BAA0B,EAAG,EAAgB,CAC3C,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACnB,IAAI,EAAS,EAAE,QAAQ,aAErB,EAAE,QAAQ,aAAa,OACrB,EAAE,WAAW,OAAO,OACpB,EAAE,OAAO,MAAM,UACjB,EAAS,EAAE,QAAQ,UAAU,QAE/B,IAAI,EAAI,GAAU,GAAK,EAAS,IAAM,EAAI,KAAK,MAAM,EAAS,CAAC,EAAI,KAAK,MAAM,EAAS,CAAC,EAAI,EACxF,EAAE,QAAQ,kBAEZ,EADe,IAAI,GAAO,KAAK,CAAC,EACrB,2BAA2B,MAAM,EAAI,GAElD,IAAI,EAAO,EAAE,IAAI,OAAO,cACtB,kDAAkD,CAAC,cAAc,CAAC,8DAA8D,CAAC,cAAc,CAAC,0DAA0D,CAAC,cAAc,CAAC,yDAAyD,CAAC,cAAc,CAAC,2DAA2D,CAAC,cAAc,CAAC,IACpX,EACQ,CAAC,GAAQ,OAAO,GAAmB,WACrC,EAAO,EAAE,IAAI,OAAO,cAClB,+DAA+D,CAAc,cAAc,CAAC;8EACtB,CAAc,cAAc,CAAC;0EACjC,CAAc,cAAc,CAAC;yEAC9B,CAAc,cAAc,CAAC;2EAC3B,CAAc,cAAc,CAAC,IACxG,GAEI,IAAI,EAAK,KACT,MAAM,EAEJ,EAAE,QAAQ,gBAEZ,GAAI,CAAC,GAAQ,IACX,EAAK,OAAO,GAAmB,YAAc,EAAK,EAAI,CAAc,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAChG,CAAC,IACH,UAAW,KAAO,EAChB,IAAK,EAAK,EAAI,CAAG,IAAM,MAAgB,EAAG,CAAC,EAAG,CAC5C,EAAK,EAAI,CAAG,EAAE,CAAC,EACf,KACF,EAIN,IAAI,EAAM,EAAO,YAAY,EAAK,EAAK,aAAa,IAAI,IAAM,KAAO,EAAK,GAAG,EAAI,EAAK,EAAG,GAAK,EAC1F,EAAM,EAAO,YAAY,EAAK,EAAK,aAAa,IAAI,IAAM,KAAO,EAAK,GAAG,EAAI,EAAK,EAAG,GAAK,EAC9F,MAAM,EAAK,EAAO,YAAY,EAAK,EAAK,aAAa,UAAU,IAAM,KAAO,EAAK,GAAG,EAAI,EAAK,EAAG,SAAW,EACrG,EAAS,EAAM,UAAS,EAC9B,GAAI,CAAC,EAAQ,OACb,MAAM,EAAc,EAAO,sBAAqB,EAC1C,EAAgB,IAAS,EAAK,UAAU,SAAS,6BAA6B,GAAK,EAAK,UAAU,SAAS,yBAAyB,GAC1I,GAAI,EAAE,UAAU,WAAY,CAC1B,GAAI,GAAQ,CAAC,EAAe,CAC1B,MAAM,EAAS,KAAK,0BAA0B,EAAG,CAAW,EACxD,GAAU,KACZ,EAAM,EAEN,EAAM,GAAO,EAAS,IAAM,EAAI,EAAK,EAAI,EAE7C,CACI,GACJ,IACE,EAAM,EAAM,EAAK,EAErB,KACM,CAAC,EAAE,QAAQ,iBAAmB,CAAC,IACjC,EAAM,EAAM,oBAAoB,EAAI,CAAC,EAAI,EAAM,uBAAyB,EACpE,MAAM,CAAG,IACX,EAAM,EAAM,oBAAoB,CAAC,EAAI,EAAM,uBAAyB,IAkB1E,GAdK,EAAE,QAAQ,gBASb,EAAM,EAAM,EAAM,YAAY,SAR1B,EAAE,OAAO,QAAQ,aACnB,EAAM,EAAM,EAAE,QAAU,EAAY,IAAM,EAAM,YAAY,SAAW,EAEnE,EAAM,EAAM,YAAY,SAAW,GAAK,EAAE,OAAO,aACnD,EAAM,EAAE,OAAO,YAMhB,EAAE,QAAQ,iBACb,KAAK,gBAAgB,CAAG,EAEtB,CAAC,EAAM,aAAc,CACvB,GAAI,EAAE,QAAQ,iBAAmB,CAAC,EAAE,OAAO,QAAQ,cAClC,KAAK,6BAA6B,CAAC,EACtC,OAEd,KAAK,YAAY,EAAK,GAAO,EAAE,OAAO,UAAU,CAClD,CACF,CAaA,0BAA0B,EAAG,EAAU,CACrC,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,IAAI,OAAO,iBACxB,kCAAkC,CAAC,0CAA0C,CAAC,IACpF,EACI,GAAI,CAAC,EAAK,OAAQ,OAAO,KACzB,IAAI,EAAY,IACZ,EAAa,KACjB,UAAW,KAAO,EAAM,CACtB,MAAM,EAEJ,EAAI,WAEN,IAAK,GAAM,EAA+B,GAAO,YAAc,KAAO,OAAS,EAAG,WAAa,MAAgB,EAAG,KAAK,EAAI,6BAA6B,EAAG,SAC3J,MAAM,EAEJ,EAAI,sBAAqB,EAEvB,EAAE,QAAU,GAAK,EAAE,SAAW,IAC9B,EAAE,KAAO,IAAW,EAAY,EAAE,MAClC,EAAE,MAAQ,IAAY,EAAa,EAAE,OAC3C,CACA,OAAK,SAAS,CAAS,GACf,EAAY,GAAc,EAAI,EAAS,MAAQ,EAAE,QAAQ,sBAAwB,GADxD,IAEnC,CAQA,6BAA6B,EAAG,CAC9B,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACb,EAAY,EAAM,aAAY,EACpC,GAAI,CAAC,EAAW,MAAO,GACvB,MAAM,EAAS,EAAM,UAAS,EAC9B,GAAI,CAAC,EAAQ,MAAO,GACpB,MAAM,EAAW,EAAO,sBAAqB,EACvC,EAAO,EAAE,IAAI,OAAO,iBACxB,kCAAkC,CAAC,0CAA0C,CAAC,yCAAyC,CAAC,IAC9H,EACI,GAAI,CAAC,EAAK,OAAQ,MAAO,GACzB,IAAI,EAAY,IACZ,EAAa,KACb,EAAW,IACX,EAAc,KAClB,UAAW,KAAO,EAAM,CACtB,MAAM,EAEJ,EAAI,WAEN,IAAK,GAAM,EAA+B,GAAO,YAAc,KAAO,OAAS,EAAG,WAAa,MAAgB,EAAG,KAAK,EAAI,6BAA6B,EAAG,SAC3J,MAAM,EAEJ,EAAI,sBAAqB,EAEvB,EAAE,QAAU,GAAK,EAAE,SAAW,IAC9B,EAAE,KAAO,IAAW,EAAY,EAAE,MAClC,EAAE,MAAQ,IAAY,EAAa,EAAE,OACrC,EAAE,IAAM,IAAU,EAAW,EAAE,KAC/B,EAAE,OAAS,IAAa,EAAc,EAAE,QAC9C,CACA,GAAI,CAAC,SAAS,CAAS,EAAG,MAAO,GACjC,MAAM,EAAM,EAAM,YAAY,SAAW,EACnC,EAAM,EAAM,YAAY,UAAY,EACpC,GAAc,EAAY,GAAc,EAAI,EAAS,KAAO,EAAE,OAAO,WACrE,EAAe,EAAW,EAAS,IAAM,EAAE,OAAO,WAClD,EAAkB,EAAc,EAAS,IAAM,EAAE,OAAO,WACxD,EAAU,EAAE,OAAO,WACnB,EAAa,EAAE,OAAO,WAAa,EAAE,OAAO,WAC5C,EAAW,EAAE,OAAO,WACpB,EAAY,EAAE,OAAO,WAAa,EAAE,OAAO,UACjD,IAAI,EAAY,MACZ,EAAS,EAAe,EAAM,GAClC,GAAI,EAAS,EAAS,CACpB,MAAM,EAAW,EAAkB,GAC/B,EAAW,GAAO,IACpB,EAAY,SACZ,EAAS,EAEb,CACA,IAAI,EAAS,EAAa,EAAM,EAC5B,EAAS,IAAU,EAAS,GAC5B,EAAS,EAAM,IAAW,EAAS,EAAY,GACnD,MAAM,EAAS,KAAK,IAAI,GAAI,KAAK,IAAI,EAAM,GAAI,EAAa,CAAM,CAAC,EACnE,YAAK,qBAAqB,EAAW,CACnC,EAAG,EACH,EAAG,EACH,UAAA,EACA,OAAQ,KACR,OAAA,CACN,CAAK,EACM,EACT,CACF,CACA,SAAS,GAAgB,EAAO,CAC9B,MAAM,EAAO,GAAS,kFAAkF,CAAI,SAC5G,OAAQ,EAAK,CACX,IAAK,SACL,IAAK,OACH,OAAO,EAAI,uEAAuE,EACpF,IAAK,OACH,OAAO,EAAI,sEAAsE,EACnF,IAAK,UACH,OAAO,EAAI,iEAAiE,EAC9E,IAAK,WACH,OAAO,EAAI,6DAA6D,EAC1E,IAAK,QACH,OAAO,EACL,mGACR,EACI,IAAK,OACH,OAAO,EACL,iGACR,EACI,IAAK,OACH,OAAO,EACL,4HACR,EACI,IAAK,UACH,OAAO,EACL,qFACR,EAEI,QACE,OAAO,EAAI,mDAAmD,CACpE,CACA,CACA,MAAM,EAAO,CAIX,YAAY,EAAgB,CAC1B,KAAK,EAAI,EAAe,EACxB,KAAK,MAAQ,EACb,KAAK,IAAM,EAAe,IAC1B,KAAK,gBAAkB,IAAI,GAAS,CAAc,CACpD,CACA,mBAAoB,CAClB,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAS,IAAI,GAAQ,KAAK,EAAG,KAAK,GAAG,EACrC,EAEJ,CACE,GAAG,EAAE,IAAI,OAAO,iBAAiB,oBAAoB,CAC7D,EAEQ,EAAE,OAAO,MAAM,SACjB,EAAU,KAAK,CAAC,EAAG,IACV,WAAW,EAAE,aAAa,gBAAgB,CAAC,EAAI,WAAW,EAAE,aAAa,gBAAgB,CAAC,CAClG,EAEH,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IAAK,CACzC,MAAM,EAAa,EAAU,CAAC,EAAE,cAC9B,iCACR,EACM,GAAI,IAAe,KAAM,CACvB,IAAI,EAAe,uBAAuB,KAAK,OAAM,EAAK,GAAG,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC,IACjF,EAAE,OAAO,MAAM,OAAS,QAAU,EAAE,OAAO,MAAM,OAAS,SAAW,CAAC,EAAE,QAAQ,aAAe,CAAC,EAAE,OAAO,QAAQ,YACpH,GAAgB,sBAElB,MAAM,EAAiB,EAAO,gBAAgB,CAC5C,SAAU,EACV,YAAa,OAAO,EAAW,aAAa,gBAAgB,CAAC,CAEvE,CAAS,EACK,EAAQ,EAAS,WAAW,EAAG,EAAG,CAAc,EACtD,EAAM,KAAK,aAAa,sBAAuB,CAAC,EAChD,MAAM,EAAY,EAAY,gBAAgB,GAAS,GAAG,EAC1D,EAAU,UAAU,IAAI,2BAA2B,EACnD,EAAU,YAAY,EAAM,IAAI,EAChC,EAAW,YAAY,CAAS,CAClC,CACF,CACF,CAOA,oBAAoB,EAAK,EAAO,EAAI,KAAM,EAAI,KAAM,CAClD,MAAM,EAAI,KAAK,EACX,EAAE,OAAO,MAAM,OAAS,UAC1B,KAAK,aAAa,EAAK,CAAK,EAE9B,IAAI,EAAK,EAAM,aAAa,IAAI,EAC5B,EAAK,EAAM,aAAa,IAAI,EAMhC,GALI,IAAM,MAAQ,IAAM,OACtB,EAAK,EACL,EAAK,GAEP,KAAK,gBAAgB,gBAAgB,CAAE,EACnC,CAAC,KAAK,aAAc,CACtB,GAAI,EAAE,OAAO,MAAM,OAAS,QAAS,CACnC,MAAM,EAAS,KAAK,MAAM,UAAS,EACnC,GAAI,CAAC,EAAQ,OACb,MAAM,EAAc,EAAO,sBAAqB,EAChD,EAAK,KAAK,MAAM,EAAE,QAAU,EAAY,IAC1C,CACA,KAAK,gBAAgB,YAAY,EAAI,EAAI,EAAE,OAAO,QAAQ,MAAM,IAAI,CACtE,CACF,CAIA,cAAc,EAAG,CACf,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAK,KACL,EAAQ,KAAK,MACb,EAAM,EACN,EAAS,EAAE,IAAI,OAAO,iBAC1B,yEACN,EACI,IAAI,EAAU,EAAE,OAAO,QAAQ,MAAM,KACrC,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAM,EAAO,CAAC,EAAE,aAAa,KAAK,EAClC,EAAQ,EAAO,CAAC,EAAE,aAAa,OAAO,EAO5C,GANI,IAAY,SACd,EAAU,EAAE,QAAQ,QAAQ,KAE1B,CACV,EAAY,EAAE,OAAO,QAAQ,MAAM,YAEzB,IAAQ,SAAS,GAAoB,IAAK,EAAE,EAAG,CACjD,EAAG,aAAa,EAAK,EAAO,CAAC,CAAC,EAC9B,MAAM,GAAM,EAAK,EAAO,CAAC,EAAE,aAAa,IAAI,IAAM,KAAO,EAAK,IACxD,GAAM,EAAK,EAAO,CAAC,EAAE,aAAa,IAAI,IAAM,KAAO,EAAK,IAC9D,EAAG,gBAAgB,gBAAgB,WAAW,CAAE,CAAC,EAC5C,EAAM,cACT,EAAG,gBAAgB,YACjB,WAAW,CAAE,EACb,WAAW,CAAE,EACb,CACZ,CAEM,MACE,EAAG,aAAa,EAAO,CAAC,CAAC,CAE7B,CACF,CAKA,aAAa,EAAK,EAAO,CACvB,MAAM,EAAI,KAAK,EACf,IAAI,EAAU,EAAE,OAAO,QAAQ,MAAM,KACrC,MAAM,EAAU,IAAQ,EAAI,EAAM,WAAW,WAAa,EAAM,WAAW,UAC3E,GAAI,EAAQ,aAAa,qBAAqB,IAAM,IAAK,CACvD,MAAM,EAAQ,SAAS,EAAQ,aAAa,OAAO,EAAG,EAAE,EACpD,IAAY,SACd,EAAU,EAAE,QAAQ,QAAQ,KAAK,CAAK,EAAI,EAAE,OAAO,QAAQ,MAAM,YAE/D,EAAU,IACZ,EAAU,GAEZ,MAAM,EAAO,KAAK,MAAM,YAAY,iBAAiB,EAAO,CAAO,EACnE,EAAM,aAAa,IAAK,CAAI,CAC9B,CACF,CAIA,aAAa,EAAO,CAClB,MAAM,EAAO,WAAW,EAAM,aAAa,qBAAqB,CAAC,EAC3D,EAAO,KAAK,MAAM,YAAY,iBAAiB,EAAO,CAAI,EAChE,EAAM,aAAa,IAAK,CAAI,CAC9B,CACA,iBAAkB,CAChB,IAAI,EAEJ,MAAM,EADI,KAAK,EACE,IAAI,OAAO,iBAC1B,yEACN,EACI,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAO,YACV,EAAK,EAAO,CAAC,EAAE,aAAa,qBAAqB,IAAM,KAAO,EAAK,GAC5E,EACM,GAAI,EAAQ,SAAS,CAAI,GAAK,EAAO,EAAG,CACtC,MAAM,EAAO,KAAK,MAAM,YAAY,iBAAiB,EAAO,CAAC,EAAG,CAAI,EACpE,EAAO,CAAC,EAAE,aAAa,IAAK,CAAI,CAClC,MACE,EAAO,CAAC,EAAE,aAAa,IAAK,MAAM,CAEtC,CACF,CACF,CACA,MAAM,EAAU,CAId,YAAY,EAAgB,CAC1B,KAAK,EAAI,EAAe,EACxB,MAAM,EAAI,KAAK,EACf,KAAK,MAAQ,EACb,KAAK,0BAA4B,CAAC,EAAE,QAAQ,iBAAmB,EAAE,OAAO,MAAM,OAAS,YAAc,EAAE,OAAO,YAAY,IAAI,iBAChI,CAMA,QAAQ,EAAG,EAAM,CACf,IAAI,EACJ,OAAO,YAEJ,EAAK,EAAE,OAAO,aAAa,CAAI,IAAM,KAAO,EAAK,EACxD,CACE,CAGA,sBAAsB,CAAE,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,EAAA,EAAG,KAAA,CAAI,EAAI,CAC5C,IAAI,EAAI,EACR,MAAM,EAAQ,KAAK,MACb,EAAI,KAAK,EACT,EAAW,EAAE,QAAQ,eACrB,EAAc,IAAS,WAAa,GAAY,EAAS,OAAS,UAAY,OAAO,EAAS,SAAY,WAChH,IAAI,EAAG,EAAG,EAAI,EAAI,EAAO,EACzB,GAAI,EAAa,CACf,MAAM,EAAc,EAAI,OAAO,sBAAqB,EAC9C,EAAU,EAAE,OAAS,YAAc,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,QAC5D,EAAU,EAAE,OAAS,YAAc,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,QAC5D,EAAM,EAAS,QACnB,EAAU,EAAY,KACtB,EAAU,EAAY,GAC9B,EACM,GAAI,CAAC,EACH,MAAO,CAAE,EAAA,EAAG,EAAA,EAAG,MAAO,EAAI,EAE5B,EAAI,EAAI,YACR,EAAI,EAAI,eACR,EAAK,EAAI,EACT,EAAK,EAAI,EACT,EAAQ,EAAI,MACZ,EAAS,EAAI,MACf,SAAW,EAAE,OAAO,UAAU,SAAS,cAAc,CAAI,OAAO,EAC9D,EAAI,KAAK,QAAQ,EAAG,GAAG,EACvB,EAAI,KAAK,QAAQ,EAAG,GAAG,EACvB,EAAK,KAAK,QAAQ,EAAG,IAAI,EACzB,EAAK,KAAK,QAAQ,EAAG,IAAI,EACzB,EAAQ,KAAK,QAAQ,EAAG,OAAO,EAC/B,EAAS,KAAK,QAAQ,EAAG,QAAQ,MAEjC,OAAO,CAAE,EAAA,EAAG,EAAA,CAAC,EAEf,EAAM,cAAc,gBAAgB,CAClC,QAAS,EAAI,QACb,EAAA,EACA,EAAA,EACA,OAAQ,GACR,EAAA,CACN,CAAK,EACD,EAAE,SAAS,oBAAsB,EACjC,EAAE,SAAS,uBAAyB,EACpC,EAAM,gBAAgB,gBAAgB,EAAK,EAAQ,CAAC,EACpD,MAAM,EAAY,EAAM,aAAY,EACpC,GAAI,IAAS,WAAa,EAAE,OAAO,QAAQ,OAAS,CAAC,EAAE,OAAO,QAAQ,cAAgB,EAAW,CAC/F,MAAM,EAAa,EAAI,OAAO,sBAAqB,EAC7C,EAAa,EAAE,IAAI,OAAO,sBAAqB,EAC/C,EAAsB,EAAW,KAAO,EAAW,KACzD,IAAI,EAAQ,EAAO,EAAS,EAC5B,GAAI,EACF,EAAS,EACT,EAAQ,EACR,EAAU,EAAK,EACf,EAAW,EAAK,MACX,CACL,MAAM,EAAI,EAAE,OAAO,sBAAqB,EACxC,EAAS,EAAE,KAAO,EAAW,KAC7B,EAAQ,EAAE,IAAM,EAAW,IAC3B,EAAU,EAAE,MAAQ,EAAW,KAC/B,EAAW,EAAE,OAAS,EAAW,GACnC,CACA,MAAM,EAAM,EAAM,YAAY,SAAW,EACnC,EAAM,EAAM,YAAY,UAAY,EACpC,GAAuB,EAAS,GAAW,EAAI,EAC/C,EAAkB,EAAQ,EAAE,OAAO,WACnC,EAAqB,EAAW,EAAE,OAAO,WACzC,EAAU,EAAE,OAAO,WACnB,EAAa,EAAE,OAAO,WAAa,EAAE,OAAO,WAC5C,EAAW,EACX,EAAY,EAAsB,EAAE,OAAO,UACjD,IAAI,EAAY,MACZ,EAAS,EAAkB,EAAM,GACrC,GAAI,EAAS,EAAS,CACpB,MAAM,EAAW,EAAqB,GAClC,EAAW,GAAO,GACpB,EAAY,SACZ,EAAS,GAET,EAAS,CAEb,CACA,IAAI,EAAS,EAAsB,EAAM,EACrC,EAAS,IAAU,EAAS,GAC5B,EAAS,EAAM,IAAW,EAAS,EAAY,GACnD,MAAM,EAAS,KAAK,IAAI,GAAI,KAAK,IAAI,EAAM,GAAI,EAAsB,CAAM,CAAC,EAC5E,OAAA,EAAM,gBAAgB,qBAAqB,EAAW,CACpD,EAAG,EACH,EAAG,EACH,UAAA,EACA,OAAQ,KACR,OAAA,CACR,CAAO,EACM,CAAE,EAAG,EAAQ,EAAG,EAAQ,WAAY,EAAI,CACjD,CAMA,GALA,EAAI,EAAK,EAAM,YAAY,QAAU,EAAI,EACzC,EAAI,EAAK,EAAM,YAAY,SAAW,EAAI,EAAS,EAC/C,EAAI,EAAE,OAAO,UAAY,IAC3B,EAAI,EAAK,EAAM,YAAY,QAAU,EAAI,GAEvC,EAAM,EAAE,OAAO,QAAQ,aAAc,CACvC,MAAM,EAAc,EAAE,IAAI,OAAO,sBAAqB,EACtD,IAAM,EAAK,EAAE,SAAS,UAAY,KAAO,EAAK,GAAK,EAAY,MAAQ,EAAI,EAAE,OAAO,UAAY,EAAI,EAAM,YAAY,QAAU,GAChI,IAAM,EAAK,EAAE,SAAS,UAAY,KAAO,EAAK,GAAK,EAAY,KAAO,EAAI,EAAE,OAAO,WAAa,EAAI,EAAM,YAAY,SAAW,EACnI,CACA,MAAO,CACL,EAAA,EACA,EAAA,CACN,CACE,CAMA,oBAAoB,CAAE,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,EAAA,CAAC,EAAI,CACpC,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACnB,IAAI,EACA,EACJ,GAAI,EAAE,OAAO,UAAU,SAAS,mBAAmB,EAAG,CACpD,MAAM,EAAK,SAAS,EAAI,MAAM,aAAa,IAAI,EAAG,EAAE,EAC9C,EAAK,SAAS,EAAI,MAAM,aAAa,IAAI,EAAG,EAAE,EAC9C,EAAM,WAAW,EAAI,MAAM,aAAa,KAAK,CAAC,EAMpD,GALA,EAAI,SAAS,EAAI,MAAM,aAAa,KAAK,EAAG,EAAE,EAC9C,EAAI,SACF,EAAI,MAAM,WAAW,WAAW,WAAW,aAAa,KAAK,EAC7D,EACR,EAAU,EACA,EAAM,UAAW,CACnB,MAAM,EAAK,EAAQ,aAAa,EAAI,MAAO,mBAAmB,EAC1D,IACF,EAAI,SAAS,EAAG,aAAa,gBAAgB,EAAG,EAAE,EAEtD,CACA,EAAM,cAAc,gBAAgB,CAClC,QAAS,EAAI,QACb,EAAA,EACA,EAAA,EACA,OAAQ,EAAM,gBAAkB,GAAQ,EAAE,OAAO,QAAQ,OACzD,EAAA,CACR,CAAO,EACG,EAAE,OAAS,WACb,EAAM,YAAY,EAAG,EAAG,CAAC,EAE3B,EAAE,SAAS,oBAAsB,EACjC,EAAE,SAAS,uBAAyB,EACpC,MAAM,EAAe,CAAC,CAAC,EAAE,OAAO,QAAQ,MAUxC,GATA,EAAI,EACA,EACF,EAAI,GAEJ,EAAI,EAAK,EAAE,OAAO,WAAa,EAAM,YAAY,SAAW,IACxD,EAAM,IACR,EAAI,IAGJ,EAAM,EAAE,OAAO,QAAQ,aAAc,CACvC,MAAM,EAAS,EAAM,UAAS,EAC9B,GAAI,CAAC,EAAQ,MAAO,CAAE,EAAA,EAAG,EAAA,CAAC,EAC1B,MAAM,EAAc,EAAO,sBAAqB,EAChD,EAAI,EAAM,EAAE,QAAU,EAAE,OAAO,WAAa,EAAY,GAC1D,CACA,EAAM,OAAO,oBAAoB,EAAG,EAAI,MAAO,EAAG,CAAC,CACrD,CACA,MAAO,CACL,EAAA,EACA,EAAA,CACN,CACE,CAKA,iBAAiB,CAAE,EAAA,EAAG,IAAA,CAAG,EAAI,CAC3B,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACb,EAAY,EAAM,aAAY,EACpC,IAAI,EAAK,EACL,EAAI,EACJ,EAAI,EACJ,EAAI,EACJ,EACJ,MAAM,EAAQ,KAAK,gBAAgB,CACjC,EAAA,EACA,IAAA,CACN,CAAK,EACD,GAAI,EAAM,IAAM,MAAQ,EAAM,YAAc,GAAK,EAAM,WAAa,EAClE,OAEF,EAAI,EAAM,EACV,MAAM,EAAI,EAAM,EAqBhB,GApBA,EAAE,SAAS,oBAAsB,EACjC,EAAE,SAAS,uBAAyB,IAAM,KAAO,EAAI,EAAE,SAAS,uBAC5D,EAAE,QAAQ,iBAAmB,EAAM,YAAY,QAAO,GAAM,CAAC,EAAE,OAAO,QAAQ,QAChF,EAAI,EAAM,EACV,EAAI,EAAM,EACV,EAAc,MAAM,QAAQ,EAAE,OAAO,OAAO,KAAK,EAAI,EAAE,OAAO,OAAO,MAAM,CAAC,EAAI,EAAE,OAAO,OAAO,MAChG,EAAK,GAED,CAAC,EAAE,QAAQ,aAAe,CAAC,EAAE,OAAO,QAAQ,SAC9C,EAAK,EAAK,GAGV,MAAM,CAAC,IACT,EAAI,EAAE,QAAQ,UAAY,EAAM,YAAY,UAE1C,EAAI,EAAM,YAAY,QAAU,EAAE,OAAO,UAC3C,EAAI,EAAI,EAAM,YAAY,QACjB,EAAI,IACb,EAAI,GAEF,EAAA,EAAM,EAAE,OAAO,QAAQ,cAErB,CADW,EAAM,UAAS,KAG5B,EAAM,UAAY,OACpB,EAAM,QAAU,EAAE,IAAI,OAAO,cAC3B,yDACR,GAES,EAAE,OAAO,QAAQ,SAChB,EAAE,QAAQ,cAAgB,EAC5B,EAAM,gBAAgB,gBAAgB,EAAK,EAAc,CAAC,EAE1D,EAAM,gBAAgB,gBAAgB,CAAE,GAGxC,CAAC,EAAM,eAAiB,CAAC,EAAE,OAAO,QAAQ,QAAU,EAAE,QAAQ,iBAAmB,EAAM,YAAY,QAAO,KAC5G,EAAI,EAAI,EAAE,OAAO,WAAa,EAAM,YAAY,SAAW,EACvD,IAAW,CACb,MAAM,EAAM,EAAM,YAAY,SAAW,EACnC,EAAM,EAAM,YAAY,UAAY,EACpC,EAAe,CAAC,CAAC,EAAE,OAAO,QAAQ,MAClC,CAAE,iBAAA,EAAkB,iBAAA,EAAkB,cAAA,CAAa,EAAK,EACxD,GAAc,EAAK,EAAM,UAAS,IAAO,KAAO,OAAS,EAAG,sBAAqB,EACjF,EAAa,EAAE,IAAI,OAAO,sBAAqB,EAC/C,EAAsB,EAAa,EAAW,KAAO,EAAW,KAAO,EAAE,OAAO,WACtF,IAAI,EACA,EAAS,KACT,EAAS,KACT,EAAS,EAAI,EACb,EAAS,EACb,GAAI,GAAgB,EAAE,QAAQ,iBAAmB,GAAiB,KAAM,CACtE,MAAM,EAAU,EAAE,OAAO,WACnB,EAAa,EAAE,OAAO,WAAa,EAAE,OAAO,WAC5C,EAAW,EACX,EAAY,EAAsB,EAAE,OAAO,UAC3C,GAAsB,EAAc,KAAO,EAAc,OAAS,EAAI,EACtE,EAAiB,EAAc,IAAM,EAAE,OAAO,WAC9C,EAAoB,EAAc,OAAS,EAAE,OAAO,WAC1D,IAAI,EAAc,EAAiB,EAAM,GAEzC,GADA,EAAY,MACR,EAAc,EAAS,CACzB,MAAM,EAAW,EAAoB,GACjC,EAAW,GAAO,IACpB,EAAY,SACZ,EAAc,EAElB,CACA,EAAS,EACT,EAAS,EAAqB,EAAM,EAChC,EAAS,IAAU,EAAS,GAC5B,EAAS,EAAM,IAAW,EAAS,EAAY,GACnD,EAAS,KAAK,IACZ,GACA,KAAK,IAAI,EAAM,GAAI,EAAqB,CAAM,CAC1D,CACQ,SAAW,GAAgB,GAAoB,MAAQ,GAAoB,KAAM,CAC/E,MAAM,EAAqB,EAAmB,EACxC,EAAsB,EAAsB,EAAE,OAAO,UAAY,EACjE,IAAoB,EAAsC,GAAc,OAAS,KAAO,EAAK,GAAoB,EACjH,IAAqB,EAAsC,GAAc,QAAU,KAAO,EAAK,GAAoB,EAQzH,GAPI,EAAqB,GACvB,EAAY,QACZ,EAAS,EAAmB,KAE5B,EAAY,OACZ,EAAS,EAAkB,EAAM,IAE/B,EAAe,CAEjB,GAD4B,EAAc,IAAM,EAAc,QAAU,EAAI,EAAE,OAAO,WACvD,EAAM,EACpC,MAAM,EAAU,EAAE,OAAO,WACnB,EAAa,EAAE,OAAO,WAAa,EAAE,OAAO,WAC9C,EAAS,IAAS,EAAS,GAC3B,EAAS,EAAM,IAAY,EAAS,EAAa,EACvD,CACA,GAAI,EAAM,GAAK,EAAe,CAC5B,MAAM,GAAsB,EAAc,IAAM,EAAc,QAAU,EAAI,EAAE,OAAO,WACrF,EAAS,KAAK,IACZ,GACA,KAAK,IAAI,EAAM,GAAI,EAAqB,CAAM,CAC5D,CACU,CACF,CACA,EAAM,gBAAgB,qBAAqB,EAAW,CACpD,EAAG,EACH,EAAG,EACH,UAAA,EACA,OAAA,EACA,OAAA,CACV,CAAS,CACH,CAEJ,CAEA,gBAAgB,CAAE,EAAA,EAAG,IAAA,CAAG,EAAI,CAC1B,MAAM,EAAI,KAAK,EACf,IAAI,EAAI,KACR,MAAM,EAAQ,KAAK,MACnB,IAAI,EAAI,EACJ,EAAI,EACJ,EAAI,EACJ,EAAW,EACX,EAAY,EACZ,EAAQ,KACR,EAAQ,KACR,EAAmB,KACnB,EAAmB,KACnB,EAAgB,KACpB,MAAM,EAAK,EAAE,OAAO,UACpB,GAAI,EAAG,SAAS,qBAAqB,GAAK,EAAG,SAAS,6BAA6B,GAAK,EAAG,SAAS,yBAAyB,GAAK,EAAG,SAAS,0BAA0B,EAAG,CACzK,MAAM,EAAM,EAAE,OACR,EAAU,EAAI,sBAAqB,EACnC,EAAc,EAAI,OAAO,sBAAqB,EAC9C,EAAK,EAAQ,OACnB,EAAY,EAAQ,OACpB,MAAM,EAAK,EAAQ,MACb,EAAK,SAAS,EAAI,aAAa,IAAI,EAAG,EAAE,EACxC,EAAK,SAAS,EAAI,aAAa,IAAI,EAAG,EAAE,EAC9C,EAAQ,EACR,EAAQ,EACR,EAAW,WAAW,EAAI,aAAa,UAAU,CAAC,EAClD,MAAM,EAAiB,EAAQ,KAAO,EAAY,KAC5C,EAAgB,EAAQ,IAAM,EAAY,IAC1C,EAAoB,EAAiB,EAAK,EAC1C,EAAoB,EAAgB,EAAK,EAC/C,EAAmB,EACnB,EAAmB,EAAE,QAAQ,gBAAkB,EAAoB,EACnE,EAAgB,CACd,KAAM,EACN,IAAK,EACL,MAAO,EAAiB,EACxB,OAAQ,EAAgB,CAChC,EACM,MAAM,EAAU,EAAE,OAAS,YAAc,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,QAClE,EAAI,SAAS,EAAI,aAAa,GAAG,EAAG,EAAE,EACtC,EAAI,SAAS,EAAI,WAAW,aAAa,KAAK,EAAG,EAAE,EAAI,EACvD,MAAM,EAAK,EAAI,aAAa,eAAe,EACrC,EAAK,EAAI,aAAa,eAAe,EACvC,EAAE,QAAQ,cACZ,EAAI,SAAS,EAAI,WAAW,aAAa,gBAAgB,EAAG,EAAE,GAEhE,MAAM,EAAqB,IACrB,EAAE,UAAU,WACd,EAAK,EAAK,EAAK,EAEX,KAAK,0BACP,EAAK,EAAK,EAAK,EAEf,EAAK,EAAK,EAAM,uBAAyB,EAAK,EAG3C,GAEH,EAAiB,IACd,EAAK,EAAM,wBAA0B,EAAK,EAAI,EAAM,YAAY,SAAW,EAEpF,EAAM,cAAc,gBAAgB,CAClC,QAAS,EAAI,QACb,EAAA,EACA,EAAA,EACA,GAAI,EAAK,SAAS,EAAI,EAAE,EAAI,KAC5B,GAAI,EAAK,SAAS,EAAI,EAAE,EAAI,KAC5B,OAAQ,EAAM,gBAAkB,GAAQ,EAAE,OAAO,QAAQ,OACzD,EAAA,CACR,CAAO,EACG,EAAE,OAAO,QAAQ,aACf,EAAE,QAAQ,iBACZ,EAAI,EAAU,EAAY,KAAO,GACjC,EAAI,EAAc,IAElB,EAAI,EAAkB,CAAC,EACvB,EAAI,EAAE,QAAU,EAAY,IAAM,EAAM,YAAY,SAAW,EAAI,IAGjE,EAAE,QAAQ,iBACZ,EAAI,EACA,EAAM,UAAY,EAAI,EAAM,SAAS,oBACvC,EAAI,EAAK,EAAM,YAAY,SAE7B,EAAI,EAAc,IAElB,EAAI,EAAkB,CAAC,EACvB,EAAI,EAGV,CACA,MAAO,CACL,EAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,EACA,EAAA,EACA,EAAA,EAEA,MAAA,EACA,MAAA,EAIA,iBAAA,EACA,iBAAA,EAGA,cAAA,CACN,CACE,CACF,CACA,MAAM,EAAY,CAIhB,YAAY,EAAgB,CAC1B,KAAK,EAAI,EAAe,EACxB,KAAK,MAAQ,CACf,CAKA,kBAAmB,CACjB,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACb,EAAW,EAAE,OAAO,MAAM,WAAa,SAC7C,EAAM,UAAY,EAAW,EAAE,OAAO,WAAa,EAAI,CAAC,EAAE,OAAO,YAAc,EAAE,OAAO,MAAM,UAAU,OAAS,EACjH,MAAM,EAAkB,EAAW,yDAA2D,sDACxF,EAAW,EAAE,IAAI,OACnB,EAAM,uBACa,EAAE,IAAI,OAAO,cAChC,0BACR,IAC2B,OACnB,EAAM,aAAe,EAAY,gBAC/B,+BACA,KACV,EACQ,EAAM,aAAa,aACjB,QACA,EAAkB,qBAAuB,EAAE,OAAO,QAAQ,KACpE,EACQ,EAAS,YAAY,EAAM,YAAY,EACvC,EAAM,iBAAmB,EAAY,gBACnC,+BACA,KACV,EACQ,EAAM,iBAAiB,UAAU,IAAI,8BAA8B,EACnE,EAAM,iBAAiB,MAAM,WAAa,EAAE,OAAO,MAAM,QAAQ,MAAM,YAAc,EAAE,OAAO,MAAM,WACpG,EAAM,iBAAiB,MAAM,SAAW,EAAE,OAAO,MAAM,QAAQ,MAAM,SACrE,EAAM,aAAa,YAAY,EAAM,gBAAgB,EAG3D,CAKA,kBAAmB,CACjB,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACnB,QAAS,EAAI,EAAG,EAAI,EAAE,OAAO,MAAM,OAAQ,IAAK,CAC9C,MAAM,EAAU,EAAE,OAAO,MAAM,CAAC,EAAE,UAAY,EAAE,OAAO,MAAM,CAAC,EAAE,WAAW,SAC3E,EAAM,UAAY,EAAU,EAAE,OAAO,UAAY,EAAI,EACrD,MAAM,EAAkB,EAAU,mDAAmD,CAAC,iCAAmC,mDAAmD,CAAC,gCACvK,EAAW,EAAE,IAAI,OACF,EAAE,IAAI,OAAO,cAChC,oDAAoD,CAAC,EAC7D,IAC2B,OACnB,EAAM,aAAe,EAAY,gBAC/B,+BACA,KACV,EACQ,EAAM,aAAa,aACjB,QACA,EAAkB,qBAAuB,EAAE,OAAO,QAAQ,KACpE,EACQ,EAAS,YAAY,EAAM,YAAY,EACnC,IAAM,IAAG,EAAM,iBAAmB,CAAA,GACtC,EAAM,iBAAiB,CAAC,EAAI,EAAY,gBAAgB,+BAAgC,KAAK,EAC7F,EAAM,iBAAiB,CAAC,EAAE,UAAU,IAClC,8BACV,EACQ,EAAM,aAAa,YAEjB,EAAM,iBAAiB,CAAC,CAClC,EAEI,CACF,CAIA,oBAAqB,CACnB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACb,EAAc,EAAM,iBAAgB,EAE1C,GADA,EAAM,iBAAmB,SAAS,EAAE,OAAO,MAAM,WAAW,MAAO,EAAE,EAChE,EAAE,QAAQ,YAaR,CACL,MAAM,EAAM,EAAE,IAAI,OAAO,cAAc,sBAAsB,EAC7D,GAAI,IAAQ,MAAQ,EAAE,OAAO,MAAM,WAAW,QAAU,WAAY,CAClE,MAAM,EAAW,YAAY,EAAK,EAAI,aAAa,UAAU,IAAM,KAAO,EAAK,GAAG,EAClF,EAAM,iBAAmB,CAC3B,SACM,EAAE,OAAO,MAAM,WAAW,QAAU,YAAa,CACnD,MAAM,EAAQ,EAAE,UAAU,OAAO,OACjC,EAAM,iBAAmB,EAAE,OAAO,UAAY,CAChD,CAEJ,SAvBM,EAAE,OAAO,MAAM,WAAW,QAAU,YAAa,CACnD,MAAM,EAAQ,EAAE,UAAU,OAAO,OACjC,EAAM,iBAAmB,EAAE,OAAO,UAAY,CAChD,SAAW,EAAE,OAAO,MAAM,WAAW,QAAU,WAAY,CACzD,MAAM,EAAM,EAAE,IAAI,OAAO,cAAc,sBAAsB,EAC7D,GAAI,IAAQ,KAAM,CAChB,MAAM,EAAW,YAAY,EAAK,EAAI,aAAa,UAAU,IAAM,KAAO,EAAK,GAAG,EAClF,EAAM,iBAAmB,CAC3B,MACE,EAAM,iBAAmB,CAE7B,CAaE,EAAE,QAAQ,kBACZ,EAAM,iBAAmB,GAEvB,IAAgB,MAAQ,EAAM,iBAAmB,GACnD,EAAY,aAAa,QAAS,OAAO,EAAM,gBAAgB,CAAC,CAEpE,CACA,kBAAmB,CACjB,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,MACnB,EAAM,YAAc,EAAE,IAAI,OAAO,cAAc,yBAAyB,EACxE,EAAM,kBAAoB,EAAE,IAAI,OAAO,cACrC,gCACN,CACE,CAMA,qBAAqB,EAAO,EAAS,EAAU,CAC7C,MAAM,EAAQ,KAAK,MACb,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAiB,EAAG,eAAe,CAAK,EAC9C,GAAI,EAAM,cAAc,CAAK,GAAK,EAAe,OAAS,EAAG,CAC3D,MAAM,EAAc,EAAE,WAAW,iBAAiB,CAAK,EACjD,EAAS,EAAM,UAAS,EAC9B,GAAI,CAAC,EAAQ,OACb,MAAM,EAAc,EAAO,sBAAqB,EAC1C,EAAc,EAAe,CAAC,EACpC,IAAI,EAAoB,EACpB,EAAS,OAAO,OAAS,IAC3B,EAAoB,GAEtB,MAAM,GAAU,EAAU,EAAY,KAAO,EAAS,OAAO,CAAiB,EACxE,EAAS,EAAG,QAAQ,CAAW,EAAI,EAAG,QAAQ,CAAW,EAC/D,IAAI,EAAM,EAAG,QAAQ,CAAW,GAAK,EAAS,GAC1C,EAAE,OAAO,MAAM,CAAK,EAAE,WACxB,EAAM,EAAG,QAAQ,CAAW,GAAK,EAAS,IAE5C,EAAM,gBAAgB,gBAAgB,EAAU,EAAY,GAAG,EAC/D,EAAM,iBAAiB,CAAK,EAAE,UAAY,EAAY,CAAG,EACzD,EAAM,gBAAgB,iBAAiB,CAAK,CAC9C,CACF,CACF,CACA,MAAM,EAAQ,CAKZ,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,QAAU,EAAE,OAAO,QACxB,KAAK,YAAc,IAAI,GAAO,IAAI,EAClC,KAAK,cAAgB,IAAI,GAAO,IAAI,EACpC,KAAK,gBAAkB,IAAI,GAAS,IAAI,EACxC,KAAK,OAAS,IAAI,GAAO,IAAI,EAC7B,KAAK,UAAY,IAAI,GAAU,IAAI,EACnC,KAAK,YAAc,IAAI,GAAY,IAAI,EACvC,KAAK,gBAAkB,KAAK,QAAQ,UACpC,KAAK,iBAAmB,KAAK,QAAQ,EAAE,KACvC,KAAK,aAAe,KAAK,QAAQ,MAAM,QACvC,KAAK,aAAe,KACpB,KAAK,iBAAmB,KACxB,KAAK,aAAe,KACpB,KAAK,iBAAmB,KACxB,KAAK,WAAa,KAClB,KAAK,UAAY,EACjB,KAAK,UAAY,EACjB,KAAK,iBAAmB,EACxB,KAAK,YAAc,KACnB,KAAK,kBAAoB,KACzB,KAAK,QAAU,KACf,KAAK,EAAI,KACT,KAAK,YAAc,CAAC,EAAE,QAAQ,iBAAmB,KAAK,QAAQ,OAC9D,KAAK,cAAgB,KAAK,IAAG,EAC7B,KAAK,yBAA2B,GAChC,KAAK,SAAW,KAChB,KAAK,sBAAwB,GAC7B,KAAK,cAAgB,CAAA,EACrB,KAAK,uBAAyB,CAAA,EAC9B,KAAK,oBAAsB,KAC3B,KAAK,wBAA0B,EAC/B,KAAK,uBAAyB,EAC9B,KAAK,aAAe,KACpB,KAAK,aAAe,KACpB,KAAK,QAAU,KACf,KAAK,YAAc,KACnB,KAAK,mBAAqB,OAC1B,KAAK,QAAU,EACf,KAAK,QAAU,EACf,KAAK,gBAAkB,EACvB,KAAK,YAAc,CAAE,EAAG,EAAG,EAAG,EAAG,QAAS,EAAG,SAAU,CAAC,CAC1D,CACA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACT,EAAY,KAAK,aAAY,EAC9B,IACL,KAAK,qBAAoB,EACrB,OAAO,eAAmB,KAAe,CAAC,EAAE,QAAQ,iBACtD,EAAE,QAAQ,eAAiB,IAAI,eAAe,IAAM,CAC7C,KAAK,2BACR,KAAK,yBAA2B,GAChC,sBAAsB,IAAM,CAC1B,KAAK,qBAAoB,EACzB,KAAK,yBAA2B,EAClC,CAAC,EAEL,CAAC,EACD,EAAE,QAAQ,eAAe,QAAQ,CAAS,GAE9C,CACA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACT,EAAY,KAAK,aAAY,EACnC,GAAI,CAAC,EAAW,OAChB,MAAM,EAAO,EAAU,sBAAqB,EAC5C,EAAE,QAAQ,eAAe,QACzB,CACE,MAAO,EAAK,MACZ,OAAQ,EAAK,OACb,WAAY,KAAK,IAAG,CAC1B,CACE,CACA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACf,GAAI,EAAE,QAAQ,eAAe,QAAS,CACpC,MAAM,EAEJ,EAAE,QAAQ,eAAe,QAG3B,GADY,KAAK,IAAG,EAAK,EAAO,WACtB,IACR,MAAO,CACL,QAAS,EAAO,MAChB,SAAU,EAAO,MAC3B,CAEI,CACA,KAAK,qBAAoB,EACzB,MAAM,EAEJ,EAAE,QAAQ,eAAe,QAE3B,OAAO,EAAQ,CACb,QAAS,EAAM,MACf,SAAU,EAAM,MACtB,EAAQ,CAAE,QAAS,EAAG,SAAU,CAAC,CAC/B,CAKA,aAAa,EAAK,CAEhB,OADK,IAAK,EAAM,MACX,EAAI,EAAE,IAAI,OAGb,EAAI,EAAE,IAAI,OAAO,cACf,yDACR,EALkC,IAOhC,CACA,kBAAmB,CACjB,OAAO,KAAK,EAAE,IAAI,OAAO,cAAc,yBAAyB,CAClE,CACA,WAAY,CACV,OAAO,KAAK,EAAE,IAAI,OAAO,cAAc,kBAAkB,CAC3D,CAIA,YAAY,EAAU,CACpB,MAAM,EAAI,KAAK,EACf,KAAK,SAAW,EAChB,KAAK,sBAAwB,EAAE,OAAO,MAAM,QAAQ,SAAW,EAAE,QAAQ,WACzE,KAAK,cAAgB,EAAE,OAAO,MAAM,IAAK,GAChC,GAAA,EAAE,MAAQ,EAAE,QAAQ,SAAW,EAAE,QAAQ,WACjD,EACD,KAAK,uBAAyB,CAAA,EACzB,EAAE,QAAQ,aACb,KAAK,iBAAmB,IAE1B,MAAM,EAAkB,KAAK,aAAY,EACF,GAAgB,YACrD,EAAgB,WAAW,YAAY,CAAe,EAExD,KAAK,aAAe,KACpB,MAAM,EAAY,EAAY,gBAC5B,+BACA,KACN,EACI,EAAU,UAAU,IAAI,oBAAoB,EACxC,EAAE,OAAO,QAAQ,UACnB,EAAU,UAAU,IAAI,EAAE,OAAO,QAAQ,QAAQ,EAEnD,EAAU,UAAU,IAAI,oBAAoB,KAAK,QAAQ,OAAS,OAAO,EAAE,EACvE,KAAK,QAAQ,iBACf,EAAU,UAAU,IAAI,gCAAgC,EAEtD,KAAK,QAAQ,OAAS,KAAK,QAAQ,MAAM,YAC3C,EAAU,MAAM,YACd,cACA,KAAK,QAAQ,MAAM,UAC3B,EAEI,MAAM,EAAgB,KAAK,QAAQ,QAAU,EAAE,OAAO,OAAO,OAAS,GAAK,CAAC,EAAE,QAAQ,iBAAmB,EAAE,OAAO,MAAM,OAAS,UAEjI,GADwB,KAAK,QAAQ,OAAS,CAAC,KAAK,QAAQ,cAAgB,CAAC,KAAK,QAAQ,MAAM,SAAW,CAAC,GAAiB,CAAC,KAAK,QAAQ,iBAAmB,EAAE,QAAQ,WACnJ,CACnB,MAAM,EAAU,EAAY,gBAC1B,+BACA,KACR,EACM,EAAQ,UAAU,IAAI,0BAA0B,EAChD,EAAU,YAAY,CAAO,CAC/B,CAQA,GAPI,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,cAAc,UACrF,EAAU,aAAa,OAAQ,SAAS,EACxC,EAAU,aAAa,YAAa,QAAQ,EAC5C,EAAU,aAAa,cAAe,MAAM,EAC5C,EAAU,aAAa,cAAe,MAAM,GAE9C,EAAE,IAAI,OAAO,YAAY,CAAS,EAC9B,EAAE,QAAQ,WAAY,CACxB,KAAK,YAAY,iBAAgB,EACjC,KAAK,YAAY,iBAAgB,EACjC,KAAK,YAAY,mBAAkB,EACnC,KAAK,YAAY,iBAAgB,EACjC,MAAM,EAAQ,IAAI,GAAM,KAAK,EAAG,KAAK,IAAK,MAAM,EAChD,KAAK,oBAAsB,EAAM,uBAAsB,CACzD,CAOA,IANK,EAAE,QAAQ,aAAe,KAAK,QAAQ,WAAa,EAAE,OAAO,MAAM,OAAS,aAAe,CAAC,KAAK,QAAQ,SAC3G,KAAK,gBAAkB,KAErB,EAAE,OAAO,QAAQ,OAAS,GAAK,EAAE,QAAQ,QAAQ,cAAgB,IACnE,KAAK,OAAO,kBAAiB,EAE3B,EAAE,QAAQ,gBAAgB,SAAW,EAAE,WAAW,OAAO,OAAQ,OACrE,KAAK,wBAA0B,EAAE,OAAO,WAAa,EAAE,QAAQ,WAC/D,KAAK,uBAAyB,EAAE,OAAO,UAAY,EAAE,QAAQ,WACzD,KAAK,mBACP,KAAK,aAAe,EAAY,gBAC9B,+BACA,KACR,EACM,KAAK,aAAa,UAAU,IAAI,0BAA0B,EAC1D,KAAK,aAAa,MAAM,WAAa,KAAK,QAAQ,MAAM,YAAc,EAAE,OAAO,MAAM,WACrF,KAAK,aAAa,MAAM,SAAW,KAAK,QAAQ,MAAM,SACtD,EAAU,YAAY,KAAK,YAAY,GAEzC,IAAI,EAAa,EAAE,WAAW,OAAO,QAChC,EAAE,QAAQ,UAAY,EAAE,QAAQ,cAAgB,KAAK,QAAQ,SAC3D,KAAK,gBAGR,EAAa,EAFb,EAAa,EAAE,WAAW,OAAO,QAKrC,KAAK,aAAe,EAAE,IAAI,OAAO,iBAAiB,yBAAyB,EAC3E,KAAK,QAAU,KAAK,iBAAiB,CAAU,EAC/C,KAAK,aAAY,EACjB,KAAK,oBAAmB,CAC1B,CAIA,iBAAiB,EAAY,CAC3B,MAAM,EAAI,KAAK,EACT,EAAU,CAAA,EACV,EAAY,KAAK,aAAY,EACnC,GAAI,CAAC,EAAW,OAAO,EACvB,QAAS,EAAI,EAAG,EAAI,EAAY,IAAK,CACnC,MAAM,EAAO,EAAY,gBACvB,+BACA,KACR,EACM,EAAK,UAAU,IACb,kCACA,mCAAmC,CAAC,EAC5C,EACM,EAAK,MAAM,MAAQ,OACjB,EAAE,OAAO,QAAQ,aAAe,EAAa,EAAI,EAAI,CAC7D,EACM,MAAM,EAAQ,EAAY,gBACxB,+BACA,MACR,EACM,EAAM,UAAU,IAAI,2BAA2B,EAC3C,EAAE,OAAO,QAAQ,gBACnB,EAAM,MAAM,gBAAkB,EAAE,QAAQ,OAAO,CAAC,EAEhD,EAAM,MAAM,MAAQ,EAAE,QAAQ,OAAO,CAAC,EAExC,MAAM,EAAS,EAAE,OAAO,QAAQ,MAChC,IAAI,EAAQ,EACR,MAAM,QAAQ,CAAM,IACtB,EAAQ,EAAO,CAAC,GAElB,EAAM,aAAa,QAAS,CAAK,EACjC,EAAM,UAAY,GAAgB,CAAK,EACvC,EAAK,YAAY,CAAK,EACtB,MAAM,EAAM,EAAY,gBACtB,+BACA,KACR,EACM,EAAI,UAAU,IAAI,yBAAyB,EAC3C,EAAI,MAAM,WAAa,KAAK,QAAQ,MAAM,YAAc,EAAE,OAAO,MAAM,WACvE,EAAI,MAAM,SAAW,KAAK,QAAQ,MAAM,SACxC,CAAC,IAAK,QAAS,GAAG,EAAE,QAAS,GAAM,CACjC,MAAM,EAAW,EAAY,gBAC3B,+BACA,KACV,EACQ,EAAS,UAAU,IAAI,sBAAsB,CAAC,QAAQ,EACtD,MAAM,EAAW,EAAY,gBAC3B,+BACA,MACV,EACQ,EAAS,UAAU,IAAI,2BAA2B,CAAC,QAAQ,EAC3D,EAAS,YAAY,CAAQ,EAC7B,MAAM,EAAW,EAAY,gBAC3B,+BACA,MACV,EACQ,EAAS,UAAU,IAAI,2BAA2B,CAAC,QAAQ,EAC3D,EAAS,YAAY,CAAQ,EAC7B,EAAI,YAAY,CAAQ,CAC1B,CAAC,EACD,EAAK,YAAY,CAAG,EACpB,EAAU,YAAY,CAAI,EAC1B,EAAQ,KAAK,CAAI,CACnB,CACA,OAAO,CACT,CACA,cAAe,CACb,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KACtB,EAAY,KAAK,aAAY,EACnC,GAAI,CAAC,EAAW,OAChB,MAAM,EAAe,IAAS,OAAS,IAAS,eAAiB,IAAS,WAAa,IAAS,UAAY,IAAS,WAC/G,EAAmB,IAAS,QAAU,IAAS,QAAU,IAAS,WAAa,IAAS,UAAY,IAAS,QAC7G,EAAY,EAAE,IAAI,MAAM,KACxB,EAAS,KAAK,UAAS,EACzB,IACF,KAAK,YAAc,EAAO,sBAAqB,GAEjD,MAAM,EAAW,CAAA,EACX,EAAW,CAAA,EACX,EAAoB,CACxB,UAAA,EACA,OAAA,EACA,UAAA,EACA,SAAA,EACA,SAAA,EACA,QAAS,KAAK,OACpB,EACI,IAAI,EACJ,GAAI,EAAE,QAAQ,aACR,EACF,EAAS,EAAE,IAAI,OAAO,iBACpB,oEACV,EACiB,EACT,EAAS,EAAE,IAAI,OAAO,iBACpB,iOACV,GACiB,IAAS,WAAa,IAAS,aACxC,EAAS,EAAE,IAAI,OAAO,iBACpB,gFACV,GAEU,GAAU,EAAO,QACnB,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,EAAS,KAAK,EAAO,CAAC,EAAE,aAAa,IAAI,CAAC,EAC1C,EAAS,KAAK,EAAO,CAAC,EAAE,aAAa,IAAI,CAAC,EAKhD,GAD8B,EAAE,QAAQ,UAAY,CAAC,KAAK,iBAAmB,EAAE,QAAQ,aAAe,CAAC,KAAK,iBAAmB,GAAa,KAAK,YAAY,QAAO,GAAM,KAAK,QAAQ,OAErL,KAAK,uBAAuB,CAAC,CAAS,EAAG,CAAiB,UACjD,GAAa,CAAC,EAAE,QAAQ,aAAe,GAAoB,KAAK,gBACzE,KAAK,4BAA4B,CAAiB,UACzC,IAAS,WAAa,EAAE,QAAQ,gBAAkB,EAAE,QAAQ,eAAe,OAAS,SAC7F,KAAK,uBAAuB,CAAC,CAAS,EAAG,CAAiB,UACjD,CAAC,EAAE,QAAQ,YAAc,IAAS,WAAa,IAAS,UAAW,CAC5E,MAAM,EAAY,EAAE,IAAI,OAAO,iBAAiB,oBAAoB,EACpE,KAAK,uBAAuB,EAAW,CAAiB,CAC1D,CACA,GAAI,KAAK,gBAAiB,CACxB,MAAM,EAAiB,EAAE,IAAI,OAAO,iBAClC,wFACR,EACU,EAAe,OAAS,GAC1B,KAAK,uBAAuB,EAAgB,CAAiB,EAE3D,KAAK,YAAY,QAAO,GAAM,CAAC,KAAK,QAAQ,QAC9C,KAAK,4BAA4B,CAAiB,CAEtD,CACF,CACA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACT,EAAY,KAAK,aAAY,EACnC,GAAI,CAAC,EAAW,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,QAAS,EAAG,SAAU,CAAC,EAC5D,MAAM,EAAc,EAAU,sBAAqB,EAC7C,EAAU,EAAY,MAAQ,GAC9B,EAAW,EAAY,OAAS,GACtC,IAAI,EAAI,KAAK,QAAQ,MAAM,QACvB,EAAI,KAAK,QAAQ,MAAM,QAC3B,MAAM,EAAQ,KAAK,QAAQ,MAAM,SAAS,YAAW,EACrD,OAAI,EAAM,QAAQ,OAAO,EAAI,KAC3B,EAAI,EAAI,EAAE,QAAQ,SAAW,EAAU,IAErC,EAAM,QAAQ,QAAQ,EAAI,KAC5B,EAAI,EAAI,EAAE,QAAQ,UAAY,EAAW,IAE3C,KAAK,gBAAgB,qBAAqB,EAAW,CAAE,EAAA,EAAG,EAAA,CAAC,CAAE,EACtD,CACL,EAAA,EACA,EAAA,EACA,QAAA,EACA,SAAA,CACN,CACE,CAIA,4BAA4B,EAAmB,CAE7C,MAAM,EADI,KAAK,EACE,IAAI,OAAO,iBAC1B,wJACN,EACI,KAAK,uBAAuB,EAAQ,CAAiB,CACvD,CAKA,uBAAuB,EAAO,EAAM,CAClC,MAAM,EAAO,KACb,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,MAAM,EAAe,CACnB,MAAO,EAAM,CAAC,EACd,UAAW,EAAK,UAChB,SAAU,EAAK,SACf,SAAU,EAAK,SACf,OAAQ,EAAK,OACb,UAAW,EAAK,UAChB,QAAS,EAAK,OACtB,EACqB,CACb,YACA,UACA,YACA,WACA,UACR,EACa,IAAK,GACH,EAAM,CAAC,EAAE,iBACd,EACA,EAAK,cAAc,KAAK,EAAM,CAAY,EAC1C,CAAE,QAAS,GAAO,QAAS,EAAI,CACzC,CACO,CACH,CACF,CAOA,cAAc,EAAK,EAAG,CAEpB,MAAM,EAAsB,KAAK,IAAG,EAAK,KAAK,cAC1C,GAAuB,GACzB,KAAK,YAAY,EAAK,CAAC,GAEvB,aAAa,KAAK,kBAAkB,EACpC,KAAK,mBAAqB,WAAW,IAAM,CACzC,KAAK,YAAY,EAAK,CAAC,CACzB,EAAG,GAAc,CAAmB,EAExC,CAOA,YAAY,EAAK,EAAG,CAClB,GAAI,KAAK,EAAE,QAAQ,YAAa,OAChC,KAAK,cAAgB,KAAK,IAAG,EAC7B,IAAI,EAAc,CAAA,EAClB,MAAM,EAAI,KAAK,EACT,EAAc,GAAU,CAC5B,IAAI,EAAI,EAAI,EACZ,MAAM,GAAQ,GAAM,GAAM,EAA8B,GAAM,IAAM,KAAO,OAAS,EAAG,SAAW,KAAO,OAAS,EAAG,QAAU,KAAO,OAAS,EAAG,KAClJ,MAAO,CAAC,EAAE,GAAQ,OAAO,EAAK,WAAc,WAC9C,EACI,EAAE,OAAO,MAAM,OAAS,CAAC,EAAW,KAAK,GAAG,IAC9C,EAAc,KAAK,IAAI,gBAAe,EAAG,OAAQ,GAAO,CAAC,EAAW,CAAE,CAAC,GAErE,EAAA,EAAE,QAAQ,aAAe,EAAE,QAAQ,OAAS,MAAa,EAAE,QAAQ,OAAS,KAAY,EAAE,QAAQ,aAAe,MAGjH,EAAY,OACd,EAAY,QAAS,GAAO,CAC1B,MAAM,EAAY,KAAK,aAAa,CAAE,EAChC,EAAU,CACd,MAAO,EAAI,MACX,UAAA,EACA,SAAU,EAAI,SACd,SAAU,EAAI,SACd,OAAQ,EAAI,OACZ,UAAW,EAAI,UACf,QAAS,EAAG,EAAE,QAAQ,QAAQ,OACxC,EACY,EAAG,EAAE,QAAQ,OAAS,KAAK,EAAE,QAAQ,MAAQ,EAAG,EAAE,QAAQ,OAAS,KAAK,EAAE,QAAQ,MACpF,EAAG,EAAE,QAAQ,QAAQ,qBAAqB,CACxC,SAAU,EACV,MAAO,EAAG,EAAE,QAAQ,QACpB,IAAK,EACL,CACZ,CAAW,CAEL,CAAC,EAED,KAAK,qBAAqB,CACxB,SAAU,KAAK,IACf,MAAO,KAAK,EAAE,QAAQ,QACtB,IAAA,EACA,CACR,CAAO,EAEL,CAEA,qBAAqB,CAAE,SAAA,EAAU,MAAA,EAAO,IAAA,EAAK,EAAA,CAAC,EAAI,CAChD,MAAM,EAAI,EAAS,EAEnB,GAAI,CADc,KAAK,aAAa,CAAQ,EAC5B,OAChB,MAAM,EAAa,EAAM,oBAAmB,EAC5C,EAAM,YAAc,CAClB,EAAG,EACH,EAAG,EACH,QAAS,EAAW,QACpB,SAAU,EAAW,QAC3B,EACI,EAAM,EAAI,EACN,EAAM,YAAY,QAAO,GAAM,CAAC,EAAE,QAAQ,aAAe,CAAC,EAAM,aAC9D,KAAK,QAAQ,eAAe,qBACf,IAAI,GAAO,EAAS,CAAC,EAC7B,oBAAoB,EAAG,EAAE,OAAO,UAAU,EAGjD,EAAE,QAAQ,WACZ,EAAM,mBAAmB,CACvB,EAAA,EACA,IAAA,EACA,YAAa,EAAM,WAC3B,CAAO,EAED,EAAM,sBAAsB,CAC1B,EAAA,EACA,IAAA,EACA,YAAa,EAAM,WAC3B,CAAO,EAEC,EAAM,cACR,EAAM,qBAAoB,CAE9B,CAGA,mBAAmB,CAAE,EAAA,EAAG,IAAA,CAAG,EAAI,CAC7B,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,IAAI,EAAG,EACP,MAAM,EAAc,EAAI,OAAO,sBAAqB,EAC9C,EAAU,EAAE,OAAS,YAAc,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,QAC5D,EAAU,EAAE,OAAS,YAAc,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,QAKlE,GAJA,KAAK,QAAU,EACf,KAAK,QAAU,EACf,EAAE,SAAS,oBAAsB,GACjC,EAAE,SAAS,uBAAyB,GAChC,EAAU,EAAY,KAAO,EAAU,EAAY,IAAM,EAAY,OAAQ,CAC/E,KAAK,eAAe,CAAG,EACvB,MACF,CACA,GAAI,EAAE,IAAI,OAAO,cACf,kDACN,EAAO,CACD,KAAK,eAAe,CAAG,EACvB,MACF,CACA,GAAI,MAAM,QAAQ,KAAK,QAAQ,eAAe,GAAK,CAAC,EAAE,OAAO,QAAQ,OAAQ,CAC3E,MAAM,EAAQ,SAAS,EAAI,MAAM,aAAa,OAAO,EAAG,EAAE,EAC1D,GAAI,KAAK,QAAQ,gBAAgB,QAAQ,CAAK,EAAI,EAAG,CACnD,KAAK,eAAe,CAAG,EACvB,MACF,CACF,CACA,MAAM,EAAY,KAAK,aAAY,EACnC,GAAI,CAAC,EAAW,OAChB,MAAM,EAAc,KAAK,iBAAgB,EACzC,IAAI,EAAe,CAAA,EACf,EAAE,OAAO,MAAM,QACjB,EAAe,KAAK,IAAI,gBAAe,GAEzC,MAAM,EAAkB,EAAE,QAAQ,UAAY,EAAE,OAAO,MAAM,OAAS,OAAS,CAAC,EAAE,QAAQ,iBAAmB,KAAK,YAAY,QAAO,GAAM,KAAK,QAAQ,QAAU,EAAE,QAAQ,aAAe,KAAK,YAAY,QAAO,EACnN,GAAI,EAAE,OAAS,aAAe,EAAE,OAAS,aAAe,EAAE,OAAS,UAAW,CAC5E,GAAI,EAAE,QAAQ,gBAAgB,OAAS,EAAE,QAAQ,yBAAyB,SAAW,EAAE,WAAW,OAAO,OACvG,OAEE,IAAgB,MAClB,EAAY,UAAU,IAAI,mBAAmB,EAE/C,MAAM,GAAmB,EAAK,KAAK,gBAAkB,KAAO,OAAS,EAAG,OACrE,GACQ,IAAM,EAEvB,EACY,EAEJ,KAAK,YAKP,GAHI,IAAQ,MAA4C,GAAgB,QACtE,EAAI,UAAU,IAAI,mBAAmB,EAEnC,GAAmB,CAAC,KAAK,iBAAmB,EAAa,OAAS,EACpE,KAAK,oBAAoB,EAAG,EAAS,EAAS,CAAG,UAE7C,EAAE,OAAO,MAAM,OAAS,WAAa,EAAE,OAAO,MAAM,OAAS,UAAW,CAC1E,MAAM,EAAW,KAAK,UAAU,sBAAsB,CACpD,EAAA,EACA,IAAA,EACA,EAAA,EACA,EAAA,EACA,KAAM,EAAE,OAAO,MAAM,IACjC,CAAW,EACD,GAAI,EAAS,MAAO,CAClB,KAAK,eAAe,CAAG,EACvB,MACF,CACA,EAAI,EAAS,EACb,EAAI,EAAS,EACR,EAAS,aACZ,EAAU,MAAM,KAAO,EAAI,KAC3B,EAAU,MAAM,IAAM,EAAI,KAE9B,MACM,KAAK,YAAY,QAAO,GAC1B,KAAK,UAAU,iBAAiB,CAC9B,EAAA,EACA,IAAA,CACd,CAAa,EAEC,KAAK,YAAY,WAAW,CAAC,GAC/B,KAAK,UAAU,oBAAoB,CACjC,EAAA,EACA,IAAA,EACA,EAAA,EACA,EAAA,CACd,CAAa,EAIP,GAAI,KAAK,eAAiB,KAAK,cAAc,OAC3C,QAAS,EAAK,EAAG,EAAK,EAAE,OAAO,MAAM,OAAQ,IAC3C,KAAK,YAAY,qBACf,EACA,EAEA,KAAK,QACjB,EAGM,EAAE,IAAI,OAAO,UAAU,IAAI,2BAA2B,EACtD,EAAI,UAAU,UAAU,IAAI,mBAAmB,EAC3C,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,cAAc,SACrF,EAAI,UAAU,gBAAgB,aAAa,CAE/C,MAAW,EAAE,OAAS,YAAc,EAAE,OAAS,aAC7C,KAAK,eAAe,CAAG,CAE3B,CAGA,sBAAsB,CAAE,EAAA,EAAG,IAAA,EAAK,YAAA,CAAW,EAAI,CAC7C,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACT,EAAM,EAAI,MAAM,aAAa,KAAK,EAClC,EAAY,KAAK,aAAY,EACnC,GAAI,CAAC,EAAW,OAChB,MAAM,EAAc,EAAE,IAAI,OAAO,sBAAqB,EACtD,GAAI,EAAE,OAAS,aAAe,EAAE,OAAS,YAAa,CAMpD,GALA,EAAE,IAAI,OAAO,UAAU,IAAI,2BAA2B,EACtD,EAAU,UAAU,IAAI,mBAAmB,EACvC,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,cAAc,SACrF,EAAU,gBAAgB,aAAa,EAErC,EAAE,OAAO,MAAM,OAAS,OAAQ,CAClC,MAAM,EAAU,EAAE,QAAU,OAAO,EAAE,OAAO,SAAY,WAAa,EAAE,OAAO,QAAQ,uBAAuB,EAAI,KACjH,GAAI,CAAC,EAAS,OACd,KAAK,kBAAkB,CAAO,CAChC,MACE,KAAK,cAAc,gBAAgB,CACjC,QAAS,EAAI,QACb,EAAG,SAAS,EAAK,EAAE,EAAI,EACvB,OAAQ,EAClB,CAAS,EAEH,IAAI,EAAG,EACP,MAAM,EAAU,EAAI,MAAM,cAAc,iBAAiB,GAAK,EAAI,MAClE,GAAI,EAAE,OAAO,QAAQ,WAAa,EAAQ,aAAa,SAAS,GAAK,EAAQ,aAAa,SAAS,EAAG,CACpG,MAAM,EAAW,EAAE,IAAI,MAAM,KAAK,sBAAqB,EACvD,EAAI,EAAS,KAAO,EAAY,KAAO,WAAW,EAAQ,aAAa,SAAS,CAAC,EAAI,EAAY,QAAU,EAC3G,EAAI,EAAS,IAAM,EAAY,IAAM,WAAW,EAAQ,aAAa,SAAS,CAAC,EAAI,EAAY,SAAW,EAC5G,MACE,IAAM,EAAK,EAAE,SAAS,UAAY,KAAO,EAAK,GAAK,EAAY,KAAO,EAAY,QAAU,EAC5F,IAAM,EAAK,EAAE,SAAS,UAAY,KAAO,EAAK,GAAK,EAAY,IAAM,EAAY,SAAW,GAI9F,GAFA,EAAU,MAAM,KAAO,EAAI,KAC3B,EAAU,MAAM,IAAM,EAAI,KACtB,EAAE,OAAO,OAAO,sBAAuB,CACzC,MAAM,EAAkB,EAAE,OAAO,OAAO,sBAClC,EAAI,EAAM,EACV,GAEH,EAAK,KAAK,eAAiB,KAAO,OAAS,EAAG,CAAC,EAElD,GAAI,CAAC,EAAU,OACf,MAAM,EAAa,EAAS,aAAa,mBAAmB,EACtD,EAAO,EAAgB,EAAY,CACvC,YAAa,EACb,eAAgB,EAChB,EAAA,CACV,CAAS,EACD,EAAS,UAAY,CACvB,CACF,MAAW,EAAE,OAAS,YAAc,EAAE,OAAS,cAC7C,EAAU,UAAU,OAAO,mBAAmB,EAC9C,EAAE,IAAI,OAAO,UAAU,OAAO,2BAA2B,EACrD,EAAE,OAAO,OAAO,yBACjB,EAAK,KAAK,eAAiB,MAAgB,EAAG,QAAS,GAAM,CAC5D,MAAM,EAAc,EAAE,aAAa,mBAAmB,EACtD,EAAE,UAAY,mBACZ,GAAoC,EAChD,CACQ,CAAC,GAGP,CASA,kBAAkB,EAAO,CACvB,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,EAAI,KAAK,EACT,EAAY,KAAK,aAAY,EACnC,GAAI,CAAC,EAAW,OAChB,MAAM,EAAI,SAAS,EAAM,aAAa,GAAG,GAAK,IAAK,EAAE,EAC/C,EAAI,SAAS,EAAM,aAAa,GAAG,GAAK,IAAK,EAAE,EACrD,GAAI,OAAO,EAAE,OAAO,QAAQ,QAAW,WAAY,CACjD,KAAK,cAAc,oBAAoB,CAAE,EAAA,EAAG,EAAA,EAAG,GAAI,KAAM,GAAI,KAAM,EAAA,CAAC,CAAE,EACtE,MACF,CACA,MAAM,EAAa,EAAE,WAAW,YAAY,CAAC,GAAK,UAAU,EAAI,CAAC,GAC3D,EAAQ,KAAK,MAAM,OAAO,EAAE,WAAW,OAAO,CAAC,CAAC,GAAK,CAAC,EACtD,EAAQ,EAAM,WACd,EAAQ,GAAS,EAAM,iBAAmB,EAAM,iBAAiB,uBAAuB,EAAE,OAAS,EACnG,EAAW,EAAE,OAAO,YAAY,MAAQ,CAAA,EACxC,EAAY,EAAS,UAAY,EAAI,EAAS,UAAY,EAC1D,EAAU,EAAE,WAAW,UAAY,EAAE,WAAW,SAAS,CAAC,EAC1D,EAAQ,EAAU,EAAQ,CAAC,EAAI,OAC/B,EAAW,GAAS,OAAO,GAAU,SAAW,EAAQ,KACxD,EAAQ,GAAY,EAAS,WAAa,EAAE,QAAQ,QAAU,EAAE,QAAQ,OAAO,CAAC,GAAK,UAC3F,IAAI,EACJ,MAAM,EAAM,EAAS,SAAW,EAAS,QAAQ,UACjD,GAAI,OAAO,GAAQ,WACjB,EAAO,EAAI,CACT,WAAA,EACA,YAAa,EACb,eAAgB,EAChB,MAAA,EACA,MAAA,EACA,UAAA,EACA,MAAA,EACA,MAAA,EACA,EAAA,CACR,CAAO,UAC4B,GAAU,KAAM,CAC7C,MAAM,EAAQ,IAAY,GAAM,GAAM,EAAK,EAAS,OAAS,KAAO,EAAK,EAAS,QAAU,KAAO,EAAK,EAAS,IAAM,KAAO,EAAY,KACpI,EAAO,GAAY,GAAM,EAAK,EAAS,QAAU,KAAO,EAAK,EAAS,IAAM,KAAO,EAAK,KAAO,EACrG,EAAO,GAAS,MAAQ,GAAQ,KAAO,GAAG,CAAK,KAAK,CAAI,GAAK,GAAS,KAAO,OAAO,CAAK,EAAI,GAAQ,KAAO,OAAO,CAAI,EAAI,KAAK,EAAI,GAAG,eAAc,CAAE,OAAO,EAAM,eAAc,CAAE,EACtL,MACE,EAAO,KAAK,EAAI,GAAG,eAAc,CAAE,OAAO,EAAM,eAAc,CAAE,GAC5D,IAAc,IAChB,GAAQ,aAAa,EAAU,eAAc,CAAE,YAGnD,MAAM,EAAa,EAAE,OAAO,MAAM,YAAc,UAC1C,EAAW,EAAE,OAAO,QAAQ,OAAS,EAAE,OAAO,QAAQ,MAAM,UAAY,OACxE,EAAU,EAAU,cAAc,2BAA2B,EACnE,EAAU,UAAY,6DAA6D,CAAU,gBAAgB,CAAQ,MAAM,CAAU,gKAAgK,CAAK,sEAAsE,CAAU,gBAAgB,CAAQ,4FAA4F,CAAI,4BAC9e,GAAS,EAAU,YAAY,CAAO,EAC1C,MAAM,EAAO,EAAU,sBAAqB,EAC5C,KAAK,YAAY,QAAU,EAAK,MAChC,KAAK,YAAY,SAAW,EAAK,MACnC,CAOA,oBAAoB,EAAG,EAAS,EAAS,EAAK,CAC5C,MAAM,EAAI,KAAK,EACT,EAAO,KAAK,YAAY,iBAAiB,CAC7C,QAAS,KACT,UAAW,EAAI,UACf,OAAQ,EAAI,OACZ,QAAA,EACA,QAAA,CACN,CAAK,EACK,EAAI,EAAK,EACf,IAAI,EAAiB,EAAK,eACtB,IAAmB,MAAQ,EAAE,QAAQ,uBAAuB,SAAS,GAA0C,EAAE,IACnH,EAAiB,MACnB,MAAM,EAAS,EAAI,OAAO,sBAAqB,EAC/C,GAAI,EAAK,OAAS,GAAK,EAAK,OAAS,EAAO,MAAO,CACjD,KAAK,eAAe,CAAG,EACvB,MACF,CACA,GAAI,IAAmB,KACrB,KAAK,2BAA2B,EAAG,GAA0C,GAAI,EAAK,GAAgB,CAAC,UAEnG,KAAK,YAAY,WAAW,GAAgB,CAAC,GAAK,EAAE,QAAQ,gBAAiB,CAC/E,MAAM,EAAqB,EAAE,WAAW,OAAO,UAK7C,CAAC,EAAG,IAAM,CAAC,EAAE,QAAQ,uBAAuB,SAAS,CAAC,CAChE,EACQ,KAAK,OAAO,EAAG,KAAM,EAAoB,GAAgB,EAAG,EAAI,OAAO,CACzE,CAEJ,CAOA,2BAA2B,EAAG,EAAgB,EAAK,EAAG,CACpD,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,KAAK,QAAQ,QACG,EAAE,WAAW,OAAO,CAAc,EAAE,CAAC,IAAM,KAC9C,CACd,KAAK,eAAe,CAAG,EACvB,MACF,CAEF,GAAI,OAAO,EAAE,WAAW,OAAO,CAAc,EAAE,CAAC,EAAM,IAChD,KAAK,QAAQ,QAAU,KAAK,YAAY,WAAW,CAAC,GAAK,KAAK,YAAY,uBAAsB,EAClG,KAAK,OAAO,EAAG,KAAM,EAAgB,EAAG,EAAI,OAAO,EAEnD,KAAK,OAAO,EAAG,KAAM,EAAgB,EAAG,EAAI,QAAS,EAAK,UAGxD,KAAK,YAAY,WAAW,CAAC,EAAG,CAClC,MAAM,EAAqB,EAAE,WAAW,OAAO,UAK7C,CAAC,EAAG,IAAM,CAAC,EAAE,QAAQ,uBAAuB,SAAS,CAAC,CAChE,EACQ,KAAK,OAAO,EAAG,KAAM,EAAoB,EAAG,EAAI,OAAO,CACzD,CAEJ,CACA,uBAAwB,CACtB,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EACxC,EAAW,EAAE,IAAI,MAAM,KAAK,sBAAsB,EACxD,QAAS,EAAI,EAAG,EAAI,EAAS,OAAQ,IACnC,EAAS,eAEP,EAAS,CAAC,EAEV,MACR,CAEE,CAIA,eAAe,EAAK,CAClB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAc,KAAK,iBAAgB,EACzC,EAAE,IAAI,OAAO,UAAU,OAAO,2BAA2B,EACzD,EAAI,UAAU,UAAU,OAAO,mBAAmB,EAClD,OAAO,EAAI,UAAU,QAAQ,WACzB,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,cAAc,SACrF,EAAI,UAAU,aAAa,cAAe,MAAM,EAElD,KAAK,sBAAqB,EACtB,EAAE,OAAO,MAAM,OAAS,UAC1B,KAAK,OAAO,gBAAe,EAEzB,IAAgB,MAClB,EAAY,UAAU,OAAO,mBAAmB,EAElD,MAAM,EAEJ,KAAK,YAQP,GANI,IAAS,MACX,EAAK,UAAU,OAAO,mBAAmB,EAEvC,KAAK,yBACN,EAAK,KAAK,eAAiB,MAAgB,EAAG,UAAU,OAAO,mBAAmB,GAEjF,KAAK,eAAiB,KAAK,cAAc,OAAQ,CAC/C,KAAK,aAAe,OACtB,KAAK,WACL,CACE,GAAG,EAAE,IAAI,OAAO,iBAAiB,0BAA0B,CACrE,GAEM,QAAS,EAAI,EAAG,EAAI,KAAK,WAAW,OAAQ,IAC1C,KAAK,WAAW,CAAC,EAAE,UAAU,OAAO,mBAAmB,CAE3D,CACI,EAAE,OAAO,OAAO,yBACjB,EAAK,KAAK,eAAiB,MAAgB,EAAG,QAAS,GAAM,CAC5D,MAAM,EAAc,EAAE,aAAa,mBAAmB,EACtD,EAAE,UAAY,mBACZ,GAAoC,EAC9C,CACM,CAAC,EAEL,CAMA,YAAY,EAAG,EAAa,EAAgB,CAC1C,MAAM,EAAI,KAAK,EACX,OAAO,EAAE,OAAO,MAAM,OAAO,aAAgB,YAC/C,EAAE,OAAO,MAAM,OAAO,YAAY,EAAG,KAAK,IAAK,CAC7C,YAAA,EACA,eAAA,EACA,EAAA,CACR,CAAO,EAEH,KAAK,IAAI,OAAO,UAAU,cAAe,CACvC,EACA,KAAK,IACL,CAAE,YAAA,EAAa,eAAA,EAAgB,EAAA,CAAC,CACtC,CAAK,CACH,CAMA,kBAAmB,CACjB,MAAM,EAAI,KAAK,EACf,OAAI,GAAS,EAAE,OAAO,MAAM,IAAI,EAAU,IAC3B,EAAE,OAAO,QAAU,CAAA,GACpB,KACX,GAAM,GAAK,EAAE,MAAQ,GAAS,EAAE,IAAI,CAC3C,CACE,CASA,OAAO,EAAG,EAAS,EAAgB,EAAG,EAAS,EAAS,KAAM,CAC5D,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACpF,MAAM,EAAI,KAAK,EACT,EAAQ,EACV,EAAE,OAAS,WACb,KAAK,YAAY,EAAG,EAAgB,CAAC,EAEnC,IAAW,OAAM,EAAS,KAAK,QAAQ,QAC3C,MAAM,EAAa,KAAK,YAAY,WAAW,CAAc,EACvD,IAAe,GAAM,EAAK,KAAK,MAAQ,KAAO,OAAS,EAAG,WAAa,KAAO,OAAS,EAAG,QAAU,SACpG,EAAe,GAAc,CAAC,KAAK,YAAY,QAAO,EACtD,EAAY,CAAC,GAAc,CAAC,GAAc,CAAC,KAAK,YAAY,QAAO,GAAM,KAAK,iBAAgB,EAC9F,EAAgB,GAAgB,EAChC,EAAO,KAAK,YAAY,UAAS,EACjC,EAAe,IAAM,CACrB,EAAE,QAAQ,QAAQ,YAAc,GAAK,CAAC,EACxC,EAAM,OAAO,cAAc,CAAC,EAE5B,EAAM,gBAAgB,yBAAyB,CAAC,CAEpD,EACA,GAAI,EAAE,OAAO,OAAO,sBAAuB,CACzC,MAAM,EAAkB,EAAE,OAAO,OAAO,sBAClC,EAEJ,MAAM,MAAM,EAAK,KAAK,eAAiB,KAAO,EAAK,CAAA,CAAE,EAEvD,EAAI,QAAS,GAAM,CACjB,MAAM,EAAa,EAAE,aAAa,mBAAmB,EACrD,EAAE,UAAY,mBAAmB,GAAkC,EAAE,CACvE,CAAC,EACD,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,MAAM,EAAI,EAAI,CAAC,EACT,EAAU,UAAU,EAAK,EAAE,aAAa,GAAG,IAAM,KAAO,EAAK,GAAI,EAAE,EACnE,GAAa,oBAChB,EAAK,EAAE,aAAa,mBAAmB,IAAM,KAAO,EAAK,EACpE,EACc,EAAO,EAAgB,GAAY,CACvC,YAAa,EAAS,EAAU,EAChC,eAAgB,EAChB,EAAA,CACV,CAAS,EACD,GAAK,EAMH,EAAE,UAAY,EAAE,QAAQ,uBAAuB,QAAQ,CAAO,EAAI,EAAI,EAAO,WAL7E,EAAE,UAAY,IAAY,EAAiB,EAAO,GAC9C,IAAmB,EACrB,KAKN,CACF,CACA,MAAM,EAEJ,EAAE,UAEE,EAA0B,EAAe,EAAe,CAC5D,QAAA,EACA,EAAG,EACH,EAAA,CACN,IAAS,GAAM,GAAM,GAAM,EAAK,EAAW,cAAgB,KAAO,OAAS,EAAG,CAAc,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,EAAE,CAAC,IAAM,KAAO,OAAS,EAAG,MAAQ,QAAU,CACvL,IAAK,GAAM,GAAM,GAAM,EAAK,EAAW,cAAgB,KAAO,OAAS,EAAG,CAAc,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,EAAE,CAAC,IAAM,KAAO,OAAS,EAAG,EAC7K,CAAK,IAAK,GAAM,GAAM,GAAM,EAAK,EAAW,cAAgB,KAAO,OAAS,EAAG,CAAc,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,EAAE,CAAC,IAAM,KAAO,OAAS,EAAG,MAAQ,QAAU,CACxL,IAAK,GAAM,GAAM,GAAM,EAAK,EAAW,cAAgB,KAAO,OAAS,EAAG,CAAc,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,EAAE,CAAC,IAAM,KAAO,OAAS,EAAG,EAC7K,CAAK,EACD,GAAI,GAIF,GAHA,EAAM,cAAc,gBAAgB,EAAc,EAAe,CAAA,EAAI,CAAuB,EAAG,CAC7F,OAAQ,KAAK,gBAAkB,GAAQ,KAAK,QAAQ,MAC5D,CAAO,CAAC,EACE,GAAc,EAChB,EAAY,UACH,KAAK,YAAY,QAAO,IAC7B,GACF,EAAM,gBAAgB,0BAA0B,EAAG,CAAc,EAEnE,KAAK,gBAAkB,KAAK,YAAY,cAEtC,CAAC,GAAG,CAAI,CAClB,EACY,KAAK,gBAAkB,GAAG,CAC5B,MAAM,EAAW,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EACxC,EAAQ,EAAE,IAAI,MAAM,KAAK,2BAA2B,CAAC,IAAI,EAC/D,KAAK,sBAAqB,EACX,EAAM,YAAY,cAAc,EAAI,EACxC,QAAU,CAAC,KAAK,iBACzB,EAAY,EAEd,EAAM,gBAAgB,0BAA0B,EAAG,CAAc,EACjE,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,EAAS,eAEP,EAAM,CAAC,EAEP,MACd,CAEQ,OAGF,EAAM,cAAc,gBAAgB,EAAe,CACjD,OAAQ,EAChB,EAAS,CAAuB,CAAC,EACvB,KAAK,YAAY,QAAO,GAC1B,EAAM,gBAAgB,0BAA0B,EAAG,CAAc,EAE/D,EACF,EAAM,gBAAgB,YAAY,EAAgB,CAAC,EAC1C,GACT,EAAM,gBAAgB,wBAAwB,EAAG,CAAc,CAGrE,CACF,CACA,MAAM,EAAY,CAKhB,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,KAAO,KACd,CAEA,aAAc,CACd,CACA,SAAU,CACR,OAAO,IACT,CACA,OAAQ,CACR,CAIA,MAAM,EAAO,CACX,OAAO,KAAK,IAAI,SAAS,MAAM,CAAK,CACtC,CAEA,SAAS,EAAM,CACb,OAAO,KAAK,IAAI,SAAS,SAAS,CAAI,CACxC,CAEA,YAAY,EAAM,CAChB,OAAO,KAAK,IAAI,SAAS,SAAS,GAAG,CAAI,CAC3C,CAEA,YAAY,EAAM,CAChB,OAAO,KAAK,IAAI,SAAS,SAAS,GAAG,CAAI,CAC3C,CAKA,WAAW,EAAG,EAAO,CACnB,OAAO,KAAK,IAAI,SAAS,WAAW,EAAG,CAAK,CAC9C,CAEA,SAAS,EAAM,CACb,OAAO,KAAK,IAAI,SAAS,SAAS,CAAI,CACxC,CASA,YAAY,EAAM,CAChB,OAAO,KAAK,IAAI,SAAS,YAAY,CAAI,CAC3C,CAMA,WAAW,EAAG,EAAG,EAAO,CAAA,EAAI,CAC1B,OAAO,KAAK,IAAI,SAAS,WAAW,EAAG,EAAG,CAAI,CAChD,CAGA,SAAS,EAAU,CACjB,MAAO,EACT,CAEA,SAAU,CACR,OAAO,IACT,CACA,SAAU,CACV,CAEA,UAAW,CACT,OAAO,IACT,CACA,SAAU,CACV,CACF,CACA,MAAM,GAAwB,2BAC9B,SAAS,IAAsB,CAC7B,MAAM,EAEJ,WAEF,OAAK,EAAE,EAAqB,IAAG,EAAE,EAAqB,EAAoB,IAAI,KACvE,EAAE,EAAqB,CAChC,CACA,MAAM,EAAmB,CAEvB,WAAW,mBAAoB,CAC7B,OAAO,GAAmB,CAC5B,CAKA,OAAO,iBAAiB,EAAM,EAAS,CACrC,GAAmB,EAAG,IAAI,EAAM,CAAO,CACzC,CAMA,OAAO,mBAAmB,EAAM,CAC9B,GAAmB,EAAG,OAAO,CAAI,CACnC,CAKA,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,IAAM,IAAI,GAAY,EAAG,CAAG,EACjC,KAAK,OAAS,KAAK,IACnB,KAAK,YAAc,MACnB,KAAK,WAAa,CAAA,CACpB,CAKA,cAAe,CACb,MAAM,EAAM,KAAK,EAAE,OAAO,MACpB,EAAO,EAAI,UAAY,MAG7B,GAFI,CAAC,EAAY,UAAS,GACtB,IAAS,OACT,GAA4B,KAAK,CAAC,EAAG,MAAO,MAChD,GAAI,IAAS,SAAU,MAAO,SAC9B,MAAM,EAAQ,GAAiB,KAAK,CAAC,EAC/B,EAAY,EAAI,mBAAqB,IAC3C,OAAO,GAAS,EAAY,SAAW,KACzC,CAOA,SAAU,CACR,MAAM,EAAO,KAAK,EAAE,OAAO,MAAM,UAAY,MACvC,EAAU,KAAK,aAAY,EACjC,GAAI,IAAY,MAAO,CACrB,MAAM,EAAU,GAAmB,EAAG,IAAI,CAAO,EACjD,GAAI,EACF,OAAK,KAAK,WAAW,CAAO,IAC1B,KAAK,WAAW,CAAO,EAAI,EAAQ,KAAK,EAAG,KAAK,GAAG,GAErD,KAAK,OAAS,KAAK,WAAW,CAAO,EACrC,KAAK,YAAc,EACnB,KAAK,IAAI,SAAW,KAAK,OACzB,KAAK,EAAE,QAAQ,eAAiB,KAAK,OAC9B,KAAK,YAEV,IAAS,GACX,QAAQ,KACN,0BAA0B,CAAO,sFAAsF,CAAO,0BACxI,CAEI,MAAW,IAAS,UAAY,GAA4B,KAAK,CAAC,GAChE,QAAQ,KACN,mMACR,EAEI,YAAK,OAAS,KAAK,IACnB,KAAK,YAAc,MACnB,KAAK,IAAI,SAAW,KAAK,OACzB,KAAK,EAAE,QAAQ,eAAiB,KAAK,OAC9B,KAAK,WACd,CAEA,eAAgB,CACd,OAAO,KAAK,WACd,CAEA,UAAW,CACT,UAAW,KAAQ,KAAK,WAAY,CAClC,MAAM,EAAI,KAAK,WAAW,CAAI,EAC1B,GAAK,OAAO,EAAE,SAAY,YAAY,EAAE,QAAO,CACrD,CACA,KAAK,WAAa,CAAA,EAClB,KAAK,OAAS,KAAK,IACnB,KAAK,YAAc,KACrB,CACF,CACA,MAAM,EAAW,CAIf,YAAY,EAAM,CAChB,KAAK,KAAO,EACR,IACF,EAAK,SAAW,MAElB,KAAK,WAAa,CAAA,EAClB,KAAK,QAAU,IACjB,CAMA,KAAK,EAAG,EAAG,CACT,GAAI,OAAO,GAAM,UAAY,IAAM,OACjC,OAAO,KAAK,KAAK,aAAa,CAAC,EAEjC,MAAM,EAAQ,OAAO,GAAM,SAAW,CAAE,CAAC,CAAC,EAAG,CAAC,EAAK,EACnD,UAAW,KAAO,EAAO,CACvB,IAAI,EAAM,EAAM,CAAG,EACf,IAAQ,KACV,KAAK,KAAK,gBAAgB,CAAG,EACpB,IAAQ,SACb,OAAO,GAAQ,UAAY,MAAM,CAAG,IAAG,EAAM,GACjD,KAAK,KAAK,aAAa,EAAK,CAAG,EAEnC,CACA,GAAI,KAAK,KAAK,WAAa,QAAU,EAAM,GAAK,KAAM,CACpD,MAAM,EAAS,KAAK,KAAK,iBAAiB,qBAAqB,EAC/D,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,EAAO,CAAC,EAAE,aAAa,IAAK,EAAM,CAAC,CAEvC,CACA,OAAO,IACT,CAIA,IAAI,EAAQ,CACV,UAAW,KAAK,EACd,KAAK,KAAK,MAAM,CAAC,EAAI,EAAO,CAAC,EAE/B,OAAO,IACT,CAIA,KAAK,EAAG,CACN,OAAI,OAAO,GAAM,SACR,KAAK,KAAK,CAAC,EAEb,KAAK,KAAK,OAAQ,CAAC,CAC5B,CAIA,OAAO,EAAG,CACR,OAAI,OAAO,GAAM,UACX,EAAE,QAAU,QAAQ,KAAK,KAAK,SAAU,EAAE,KAAK,EAC/C,EAAE,QAAU,QAAQ,KAAK,KAAK,eAAgB,EAAE,KAAK,EACrD,EAAE,YAAc,QAAQ,KAAK,KAAK,mBAAoB,EAAE,SAAS,EACjE,EAAE,UAAY,QAAQ,KAAK,KAAK,iBAAkB,EAAE,OAAO,EAC3D,EAAE,UAAY,QAAQ,KAAK,KAAK,iBAAkB,EAAE,OAAO,EACxD,MAEF,KAAK,KAAK,SAAU,CAAC,CAC9B,CAKA,KAAK,EAAG,EAAG,CACT,OAAO,KAAK,KAAK,CAAE,MAAO,EAAG,OAAQ,CAAC,CAAE,CAC1C,CAKA,KAAK,EAAG,EAAG,CACT,OAAO,KAAK,KAAK,CAAE,EAAA,EAAG,EAAA,CAAC,CAAE,CAC3B,CAKA,OAAO,EAAI,EAAI,CACb,GAAI,KAAK,KAAK,WAAa,IAAK,CAC9B,MAAM,EAAM,KAAK,KAAI,EACf,EAAK,GAAM,EAAI,EAAI,EAAI,MAAQ,GAC/B,EAAK,GAAM,EAAI,EAAI,EAAI,OAAS,GACtC,OAAO,KAAK,KAAK,YAAa,aAAa,CAAE,KAAK,CAAE,GAAG,CACzD,CACA,OAAO,KAAK,KAAK,CAAE,GAAA,EAAI,GAAA,CAAE,CAAE,CAC7B,CAKA,IAAI,EAAO,CACT,OAAI,GAAS,EAAM,eAAuB,MAC1C,KAAK,KAAK,YAAY,EAAM,MAAQ,CAAK,EAClC,KACT,CAIA,MAAM,EAAQ,CAEZ,OADU,EAAO,MAAQ,GACvB,YAAY,KAAK,IAAI,EAChB,IACT,CACA,QAAS,CACP,OAAI,KAAK,KAAK,YACZ,KAAK,KAAK,WAAW,YAAY,KAAK,IAAI,EAErC,IACT,CACA,OAAQ,CACN,KAAO,KAAK,KAAK,YACf,KAAK,KAAK,YAAY,KAAK,KAAK,UAAU,EAE5C,OAAO,IACT,CAKA,KAAK,EAAU,CACb,OAAO,MAAM,KAAK,KAAK,KAAK,iBAAiB,CAAQ,CAAC,EAAE,IACrD,GAAM,EAAE,UAAY,IAAI,GAAW,CAAC,CAC3C,CACE,CAIA,QAAQ,EAAU,CAChB,MAAM,EAAI,KAAK,KAAK,cAAc,CAAQ,EAC1C,OAAO,EAAI,EAAE,UAAY,IAAI,GAAW,CAAC,EAAI,IAC/C,CAMA,GAAG,EAAO,EAAS,CACjB,MAAM,EAGJ,EAAM,MACJ,GACR,EAAQ,CAAC,EAEL,YAAK,WAAW,KAAK,CAAE,MAAA,EAAO,UAAA,EAAW,QAAA,CAAO,CAAE,EAClD,KAAK,KAAK,iBAAiB,EAAW,CAAO,EACtC,IACT,CAKA,IAAI,EAAO,EAAS,CAClB,GAAI,CAAC,GAAS,CAAC,EACb,KAAK,WAAW,QAAS,GAAM,CAC7B,KAAK,KAAK,oBAAoB,EAAE,UAAW,EAAE,OAAO,CACtD,CAAC,EACD,KAAK,WAAa,CAAA,UACT,GAAS,CAAC,EAAS,CAC5B,MAAM,EAGJ,EAAM,MAAM,GAAG,EAAE,CAAC,EAEpB,KAAK,WAAa,KAAK,WAAW,OAAQ,GACpC,EAAE,YAAc,GAClB,KAAK,KAAK,oBAAoB,EAAE,UAAW,EAAE,OAAO,EAC7C,IAEF,EACR,CACH,KAAO,CACL,MAAM,EAGJ,EAAM,MAAM,GAAG,EAAE,CAAC,EAEpB,KAAK,WAAa,KAAK,WAAW,OAAQ,GACpC,EAAE,YAAc,GAAa,EAAE,UAAY,GAC7C,KAAK,KAAK,oBAAoB,EAAE,UAAW,EAAE,OAAO,EAC7C,IAEF,EACR,CACH,CACA,OAAO,IACT,CAMA,KAAK,EAAI,EAAM,CAEb,OADiB,MAAM,KAAK,KAAK,KAAK,QAAQ,EACrC,QAAS,GAAU,CAC1B,MAAM,EAAO,EAAM,UAAY,IAAI,GAAW,CAAK,EACnD,EAAG,KAAK,CAAI,EACR,GAAM,EAAK,KAAK,EAAI,CAAI,CAC9B,CAAC,EACM,IACT,CAKA,YAAY,EAAK,CACf,OAAI,IAAQ,IACV,KAAK,KAAK,gBAAgB,OAAO,EAEjC,KAAK,KAAK,UAAU,OAAO,CAAG,EAEzB,IACT,CAEA,UAAW,CACT,OAAO,MAAM,KAAK,KAAK,KAAK,UAAU,EAAE,OAAQ,GAAM,EAAE,WAAa,CAAC,EAAE,IAAK,GAAM,EAAE,UAAY,IAAI,GAAW,CAAC,CAAC,CACpH,CAEA,MAAO,CACL,YAAK,KAAK,MAAM,QAAU,OACnB,IACT,CACA,MAAO,CACL,YAAK,KAAK,MAAM,QAAU,GACnB,IACT,CAEA,MAAO,CACL,GAAI,OAAO,KAAK,KAAK,SAAY,WAC/B,GAAI,CACF,OAAO,KAAK,KAAK,QAAO,CAC1B,MAAY,CACZ,CAEF,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAC,CAC1C,CAKA,MAAM,EAAM,CACV,MAAM,EAAQ,EAAY,gBACxB,6BACA,OACN,EACI,OAAA,EAAM,YAAc,EACpB,KAAK,KAAK,YAAY,CAAK,EACpB,IAAI,GAAW,CAAK,CAC7B,CAKA,KAAK,EAAG,CACN,OAAI,OAAO,GAAM,UACf,KAAK,KAAK,IAAK,CAAC,EAEX,IACT,CAEA,SAAU,CACR,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CAKA,YAAa,CACX,MAAM,IAAI,MAAM,0BAA0B,CAC5C,CACF,CACA,IAAI,GAAkB,EACtB,MAAM,WAAoB,EAAW,CAMnC,YAAY,EAAW,EAAM,EAAS,CACpC,MAAM,EAAM,IAAS,SAAW,iBAAmB,iBAC7C,EAAO,EAAY,gBAAgB,GAAS,CAAG,EACrD,MAAM,CAAI,EACV,KAAK,IAAM,iBAAkB,EAAE,GAC/B,KAAK,KAAK,KAAM,KAAK,GAAG,EACpB,OAAO,GAAY,YACrB,EAAQ,IAAI,GAAY,IAAI,CAAC,EAE/B,IAAI,EAAO,EAAU,KAAK,cAAc,MAAM,EACzC,IACH,EAAO,EAAY,gBAAgB,GAAS,MAAM,EAClD,EAAU,KAAK,YAAY,CAAI,GAEjC,EAAK,YAAY,KAAK,IAAI,CAC5B,CAMA,KAAK,EAAQ,EAAO,EAAS,CAC3B,MAAM,EAAI,EAAY,gBAAgB,GAAS,MAAM,EACrD,OAAA,EAAE,aAAa,SAAU,CAAM,EAC/B,EAAE,aAAa,aAAc,CAAK,EAC9B,IAAY,QAAQ,EAAE,aAAa,eAAgB,OAAO,CAAO,CAAC,EACtE,KAAK,KAAK,YAAY,CAAC,EAChB,IACT,CAKA,KAAK,EAAG,EAAG,CACT,OAAO,KAAK,KAAK,CAAE,GAAI,EAAG,GAAI,CAAC,CAAE,CACnC,CAKA,GAAG,EAAG,EAAG,CACP,OAAO,KAAK,KAAK,CAAE,GAAI,EAAG,GAAI,CAAC,CAAE,CACnC,CACA,KAAM,CACJ,MAAO,QAAU,KAAK,IAAM,GAC9B,CACA,UAAW,CACT,OAAO,KAAK,IAAG,CACjB,CACA,SAAU,CACR,OAAO,KAAK,IAAG,CACjB,CACA,MAAO,CACL,OAAO,KAAK,IAAG,CACjB,CACF,CACA,MAAM,EAAY,CAIhB,YAAY,EAAU,CACpB,KAAK,SAAW,CAClB,CAMA,KAAK,EAAQ,EAAO,EAAS,CAC3B,YAAK,SAAS,KAAK,EAAQ,EAAO,CAAO,EAClC,IACT,CACF,CACA,IAAI,GAAiB,EACrB,MAAM,WAAmB,EAAW,CAOlC,YAAY,EAAW,EAAG,EAAG,EAAS,CACpC,MAAM,EAAO,EAAY,gBAAgB,GAAS,SAAS,EAS3D,GARA,MAAM,CAAI,EACV,KAAK,IAAM,gBAAiB,EAAE,GAC9B,KAAK,KAAK,CACR,GAAI,KAAK,IACT,MAAO,EACP,OAAQ,EACR,aAAc,gBACpB,CAAK,EACG,OAAO,GAAY,WAAY,CACjC,MAAM,EAAmB,IAAI,GAAa,KAAK,IAAI,EACnD,EAAQ,CAAgB,CAC1B,CACA,IAAI,EAAO,EAAU,KAAK,cAAc,MAAM,EACzC,IACH,EAAO,EAAY,gBAAgB,GAAS,MAAM,EAClD,EAAU,KAAK,YAAY,CAAI,GAEjC,EAAK,YAAY,KAAK,IAAI,CAC5B,CACA,KAAM,CACJ,MAAO,QAAU,KAAK,IAAM,GAC9B,CACA,UAAW,CACT,OAAO,KAAK,IAAG,CACjB,CACA,SAAU,CACR,OAAO,KAAK,IAAG,CACjB,CACA,MAAO,CACL,OAAO,KAAK,IAAG,CACjB,CACF,CACA,MAAM,WAAqB,EAAW,CAOpC,KAAK,EAAI,EAAI,EAAI,EAAI,CACnB,MAAM,EAAK,KAAK,MAAM,MAAM,EAC5B,OAAI,IAAO,QACT,EAAG,KAAK,CAAE,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,CAAE,CAAE,EAErB,CACT,CAKA,KAAK,EAAG,EAAG,CACT,MAAM,EAAK,KAAK,MAAM,MAAM,EAC5B,OAAI,IAAM,QACR,EAAG,KAAK,CAAE,MAAO,EAAG,OAAQ,CAAC,CAAE,EAE1B,CACT,CAIA,OAAO,EAAG,CACR,MAAM,EAAK,KAAK,MAAM,QAAQ,EAC9B,OAAI,IAAM,QACR,EAAG,KAAK,CAAE,EAAG,EAAI,EAAG,GAAI,EAAI,EAAG,GAAI,EAAI,CAAC,CAAE,EAErC,CACT,CAIA,KAAK,EAAG,CACN,MAAM,EAAK,KAAK,MAAM,MAAM,EAC5B,OAAI,GAAG,EAAG,KAAK,IAAK,CAAC,EACd,CACT,CAIA,QAAQ,EAAK,CACX,MAAM,EAAK,KAAK,MAAM,SAAS,EAC/B,OAAI,GAAK,EAAG,KAAK,SAAU,CAAG,EACvB,CACT,CACA,OAAQ,CACN,OAAO,KAAK,eAAe,GAAG,CAChC,CACA,MAAO,CACL,OAAO,KAAK,eAAe,MAAM,CACnC,CAIA,MAAM,EAAa,CACjB,MAAM,EAAO,EAAY,gBAAgB,GAAS,MAAM,EACxD,EAAK,YAAc,EACnB,MAAM,EAAK,IAAI,GAAW,CAAI,EAC9B,YAAK,KAAK,YAAY,CAAI,EACnB,CACT,CAIA,KAAK,EAAS,CACZ,MAAM,EAAO,EAAY,gBAAgB,GAAS,MAAM,EAClD,EAAK,IAAI,GAAW,CAAI,EAC9B,YAAK,KAAK,YAAY,CAAI,EACtB,OAAO,GAAY,YACrB,EAAQ,IAAI,GAAa,CAAI,CAAC,EAEzB,CACT,CAKA,MAAM,EAAK,EAAU,CACnB,MAAM,EAAO,EAAY,gBAAgB,GAAS,OAAO,EACzD,EAAK,eAAe,+BAAgC,OAAQ,CAAG,EAC/D,MAAM,EAAK,IAAI,GAAW,CAAI,EAE9B,GADA,KAAK,KAAK,YAAY,CAAI,EACtB,OAAO,GAAa,YAAc,EAAY,UAAS,EAAI,CAC7D,MAAM,EAAM,IAAI,MAChB,EAAI,OAAS,UAAW,CACtB,EAAG,KAAK,EAAI,MAAO,EAAI,MAAM,EAC7B,EAAS,KAAK,EAAI,CAAE,MAAO,EAAI,MAAO,OAAQ,EAAI,MAAM,CAAE,CAC5D,EACA,EAAI,IAAM,CACZ,CACA,OAAO,CACT,CAKA,SAAS,EAAM,EAAS,CACtB,OAAO,IAAI,GAAY,KAAM,EAAM,CAAO,CAC5C,CAMA,QAAQ,EAAG,EAAG,EAAS,CACrB,OAAO,IAAI,GAAW,KAAM,EAAG,EAAG,CAAO,CAC3C,CAIA,MAAM,EAAK,CACT,MAAM,EAAO,EAAY,gBAAgB,GAAS,CAAG,EACrD,YAAK,KAAK,YAAY,CAAI,EACnB,IAAI,GAAW,CAAI,CAC5B,CAIA,eAAe,EAAK,CAClB,MAAM,EAAO,EAAY,gBAAgB,GAAS,CAAG,EACrD,YAAK,KAAK,YAAY,CAAI,EACnB,IAAI,GAAa,CAAI,CAC9B,CACF,CACA,MAAM,EAAa,CAIjB,YAAY,EAAU,CACpB,KAAK,SAAW,CAClB,CAIA,MAAM,EAAM,CACV,MAAM,EAAQ,EAAY,gBAAgB,GAAS,OAAO,EAC1D,OAAA,EAAM,YAAc,EACpB,KAAK,SAAS,YAAY,CAAK,EACxB,IAAI,GAAa,EAAO,KAAK,QAAQ,CAC9C,CACF,CACA,MAAM,EAAa,CAKjB,YAAY,EAAM,EAAU,CAC1B,KAAK,KAAO,EACZ,KAAK,SAAW,CAClB,CACA,SAAU,CACR,YAAK,KAAK,aAAa,KAAM,OAAO,EACpC,KAAK,KAAK,QAAQ,QAAU,IACrB,IACT,CACF,CACA,IAAI,GAAgB,EACpB,MAAM,WAAkB,EAAW,CACjC,aAAc,CACZ,MAAM,EAAO,EAAY,gBAAgB,GAAS,QAAQ,EAC1D,MAAM,CAAI,EACV,KAAK,IAAM,eAAgB,EAAE,GAC7B,KAAK,KAAK,KAAM,KAAK,GAAG,CAC1B,CACF,CACA,MAAM,EAAc,CAIlB,YAAY,EAAQ,CAClB,KAAK,OAAS,CAChB,CAIA,YAAY,EAAO,CACjB,OAAO,KAAK,WAAW,gBAAiB,CAAK,CAC/C,CAIA,OAAO,EAAO,CACZ,OAAO,KAAK,WAAW,WAAY,CAAK,CAC1C,CAIA,aAAa,EAAO,CAClB,OAAO,KAAK,WAAW,iBAAkB,CAAK,CAChD,CAIA,MAAM,EAAO,CACX,OAAO,KAAK,WAAW,UAAW,CAAK,CACzC,CAIA,UAAU,EAAO,CACf,OAAO,KAAK,WAAW,cAAe,CAAK,CAC7C,CAIA,MAAM,EAAS,CACb,MAAM,EAAI,EAAY,gBAAgB,GAAS,SAAS,EACxD,OAAA,EAAQ,QAAS,GAAQ,CACvB,MAAM,EAAK,EAAY,gBAAgB,GAAS,aAAa,EAC7D,EAAG,aAAa,KAAM,CAAG,EACzB,EAAE,YAAY,CAAE,CAClB,CAAC,EACD,KAAK,OAAO,KAAK,YAAY,CAAC,EACvB,IAAI,GAAW,CAAC,CACzB,CAKA,WAAW,EAAK,EAAO,CACrB,MAAM,EAAK,EAAY,gBAAgB,GAAS,CAAG,EACnD,UAAW,KAAO,EAChB,EAAG,aAAa,EAAK,EAAM,CAAG,CAAC,EAEjC,YAAK,OAAO,KAAK,YAAY,CAAE,EACxB,IAAI,GAAW,CAAE,CAC1B,CACF,CACA,SAAS,GAAqB,EAAc,CAC1C,EAAa,UAAU,WAAa,SAAS,EAAI,CAC/C,MAAM,EAAS,IAAI,GACnB,KAAK,QAAU,EACf,IAAI,EAAU,KAAK,KACnB,KAAO,GAAW,EAAQ,WAAa,OACrC,EAAU,EAAQ,WAEpB,GAAI,EAAS,CACX,IAAI,EAAO,EAAQ,cAAc,MAAM,EAClC,IACH,EAAO,EAAY,gBAAgB,GAAS,MAAM,EAClD,EAAQ,aAAa,EAAM,EAAQ,UAAU,GAE/C,EAAK,YAAY,EAAO,IAAI,CAC9B,CACA,OAAA,EAAG,IAAI,GAAc,CAAM,CAAC,EAC5B,KAAK,KAAK,SAAU,QAAU,EAAO,IAAM,GAAG,EACvC,IACT,EACA,EAAa,UAAU,SAAW,SAAS,EAAK,CAC9C,OAAI,KAAK,UACP,KAAK,KAAK,gBAAgB,QAAQ,EAC9B,GAAO,KAAK,QAAQ,MAAQ,KAAK,QAAQ,KAAK,YAChD,KAAK,QAAQ,KAAK,WAAW,YAAY,KAAK,QAAQ,IAAI,EAE5D,KAAK,QAAU,MAEV,IACT,EACA,EAAa,UAAU,SAAW,UAAW,CAC3C,OAAO,KAAK,OACd,CACF,CACA,SAAS,GAAiB,EAAc,CACtC,EAAa,UAAU,UAAY,SAAS,EAAM,CAChD,GAAI,IAAS,GACX,OAAI,KAAK,eACP,KAAK,aAAY,EACjB,KAAK,aAAe,MAEf,KAET,MAAM,EAAK,KACL,EAAc,GAAQ,CAAA,EACtB,EAAiB,GAAM,CAC3B,GAAI,EAAE,QAAU,EAAE,SAAW,EAAG,OAChC,EAAE,gBAAe,EAEjB,MAAM,EADU,EAAE,OAAS,aACN,EAAE,QAAQ,CAAC,EAAI,EAC9B,EAAQ,EAAG,KACX,EAAa,WAAW,EAAM,aAAa,GAAG,CAAC,GAAK,EACpD,EAAa,WAAW,EAAM,aAAa,GAAG,CAAC,GAAK,EACpD,EAAe,EAAG,QAClB,EAAe,EAAG,QAClB,EAAU,EAAM,gBACtB,IAAI,EAAM,KACN,IACF,EAAM,EAAQ,aAAY,GAE5B,MAAM,EAAU,GAAO,CACrB,MAAM,EAAM,EAAG,OAAS,YAAc,EAAG,QAAQ,CAAC,EAAI,EACtD,IAAI,EAAK,EAAI,QAAU,EACnB,EAAK,EAAI,QAAU,EACnB,IACF,EAAK,EAAK,EAAI,EACd,EAAK,EAAK,EAAI,GAEhB,IAAI,EAAO,EAAa,EACpB,EAAO,EAAa,EACxB,MAAM,EAAI,WAAW,EAAM,aAAa,OAAO,CAAC,GAAK,EAC/C,EAAI,WAAW,EAAM,aAAa,QAAQ,CAAC,GAAK,EAClD,EAAY,OAAS,QAAU,EAAO,EAAY,OACpD,EAAO,EAAY,MACjB,EAAY,OAAS,QAAU,EAAO,EAAY,OACpD,EAAO,EAAY,MACjB,EAAY,OAAS,QAAU,EAAO,EAAI,EAAY,OACxD,EAAO,EAAY,KAAO,GACxB,EAAY,OAAS,QAAU,EAAO,EAAI,EAAY,OACxD,EAAO,EAAY,KAAO,GAC5B,MAAM,EAAM,CACV,EAAG,EACH,EAAG,EACH,EAAA,EACA,EAAA,EACA,GAAI,EAAO,EACX,GAAI,EAAO,CACrB,EACc,EAAQ,IAAI,YAAY,WAAY,CACxC,OAAQ,CACN,QAAS,CAKP,KAAM,SAAS,EAAG,EAAG,CACnB,EAAM,aAAa,IAAK,CAAC,EACzB,EAAM,aAAa,IAAK,CAAC,CAC3B,CACd,EACY,IAAA,CACZ,CACA,CAAS,EACD,EAAM,cAAc,CAAK,CAC3B,EACM,EAAO,IAAM,CACb,EAAY,UAAS,IACvB,SAAS,oBAAoB,YAAa,CAAM,EAChD,SAAS,oBAAoB,YAAa,CAAM,EAChD,SAAS,oBAAoB,UAAW,CAAI,EAC5C,SAAS,oBAAoB,WAAY,CAAI,GAE/C,EAAG,YAAc,IACnB,EACI,EAAY,UAAS,IACvB,SAAS,iBAAiB,YAAa,CAAM,EAC7C,SAAS,iBAAiB,YAAa,CAAM,EAC7C,SAAS,iBAAiB,UAAW,CAAI,EACzC,SAAS,iBAAiB,WAAY,CAAI,EAC1C,EAAG,YAAc,CAAE,OAAA,EAAQ,KAAA,CAAI,EAEnC,EACA,OAAA,EAAG,KAAK,iBAAiB,YAAa,CAAa,EACnD,EAAG,KAAK,iBAAiB,aAAc,CAAa,EACpD,EAAG,aAAe,IAAM,CACtB,EAAG,KAAK,oBAAoB,YAAa,CAAa,EACtD,EAAG,KAAK,oBAAoB,aAAc,CAAa,EACnD,EAAG,aAAe,EAAY,UAAS,IACzC,SAAS,oBAAoB,YAAa,EAAG,YAAY,MAAM,EAC/D,SAAS,oBAAoB,YAAa,EAAG,YAAY,MAAM,EAC/D,SAAS,oBAAoB,UAAW,EAAG,YAAY,IAAI,EAC3D,SAAS,oBAAoB,WAAY,EAAG,YAAY,IAAI,EAC5D,EAAG,YAAc,KAErB,EACO,CACT,CACF,CACA,SAAS,GAAkB,EAAc,CACvC,EAAa,UAAU,OAAS,SAAS,EAAM,CAC7C,GAAI,IAAS,GACX,OAAI,KAAK,iBACP,KAAK,eAAc,EACnB,KAAK,eAAiB,MAEjB,KAET,MAAM,EAAK,KACL,CAAE,aAAA,EAAc,aAAA,CAAY,EAAK,EACjC,EAAc,SAAS,gBAAgB,GAAS,GAAG,EACzD,EAAY,aAAa,QAAS,mBAAmB,EACrD,MAAM,EAAS,EAAG,KAAK,WACnB,GACF,EAAO,YAAY,CAAW,EAEhC,MAAM,EAAU,CAAA,EACV,EAAc,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAI,EAC/D,EAAY,QAAQ,CAAC,EAAO,IAAU,CACpC,MAAM,EAAW,IAAI,GAAa,SAAS,gBAAgB,GAAS,GAAG,CAAC,EACxE,EAAY,YAAY,EAAS,IAAI,EACrC,MAAM,EAAS,EAAa,EAAU,CAAC,EAAG,CAAC,EAAG,EAAO,CAAA,EAAI,CAAK,EAC9D,EAAQ,CAAK,EAAI,CAAE,MAAO,EAAU,OAAA,CAAM,CAC5C,CAAC,EACD,MAAM,EAAkB,IAAM,CAC5B,MAAM,EAAI,WAAW,EAAG,KAAK,GAAG,CAAC,GAAK,EAChC,EAAI,WAAW,EAAG,KAAK,GAAG,CAAC,GAAK,EAChC,EAAI,WAAW,EAAG,KAAK,OAAO,CAAC,GAAK,EACpC,EAAI,WAAW,EAAG,KAAK,QAAQ,CAAC,GAAK,EACrC,EAAc,EAAG,KAAK,aAAa,WAAW,EAChD,EACF,EAAY,aAAa,YAAa,CAAW,EAEjD,EAAY,gBAAgB,WAAW,EAEzC,MAAM,EAAY,CAChB,EAAG,CAAC,EAAI,EAAI,EAAG,CAAC,EAChB,EAAG,CAAC,EAAI,EAAI,EAAG,EAAI,CAAC,EACpB,EAAG,CAAC,EAAG,EAAI,EAAI,CAAC,EAChB,EAAG,CAAC,EAAI,EAAG,EAAI,EAAI,CAAC,EACpB,GAAI,CAAC,EAAG,CAAC,EACT,GAAI,CAAC,EAAI,EAAG,CAAC,EACb,GAAI,CAAC,EAAG,EAAI,CAAC,EACb,GAAI,CAAC,EAAI,EAAG,EAAI,CAAC,CACzB,EACM,EAAY,QAAS,GAAU,CACzB,EAAQ,CAAK,GAAK,EAAU,CAAK,GACnC,EAAa,EAAQ,CAAK,EAAE,MAAO,EAAU,CAAK,CAAC,CAEvD,CAAC,CACH,EACA,OAAA,EAAe,EACf,EAAG,eAAiB,EACpB,EAAG,kBAAoB,EACvB,EAAG,uBAAyB,EAC5B,EAAG,eAAiB,IAAM,CACpB,EAAY,YACd,EAAY,WAAW,YAAY,CAAW,EAEhD,EAAG,eAAiB,KACpB,EAAG,kBAAoB,KACvB,EAAG,uBAAyB,IAC9B,EACO,CACT,EACA,EAAa,UAAU,OAAS,SAAS,EAAQ,CAC/C,GAAI,IAAW,GACb,OAAI,KAAK,iBACP,KAAK,eAAc,EACnB,KAAK,eAAiB,MAEjB,KAET,MAAM,EAAK,KACL,EAAU,EAAG,kBACnB,GAAI,CAAC,EAAS,OAAO,EACrB,MAAM,EAAa,CAAA,EACb,EAAuB,GAAU,CACrC,MAAM,EAAa,EAAQ,CAAK,EAChC,GAAI,CAAC,GAAc,CAAC,EAAW,OAAS,CAAC,EAAW,MAAM,KAAM,OAChE,MAAM,EAAa,EAAW,MAAM,KAC9B,EAAiB,GAAM,CAC3B,GAAI,EAAE,QAAU,EAAE,SAAW,EAAG,OAChC,EAAE,gBAAe,EAGjB,MAAM,GAFU,EAAE,OAAS,aACN,EAAE,QAAQ,CAAC,EAAI,GACZ,QAClB,EAAU,EAAG,KAAK,gBACxB,IAAI,EAAM,KACN,IACF,EAAM,EAAQ,aAAY,GAE5B,MAAM,EAAS,WAAW,EAAG,KAAK,GAAG,CAAC,GAAK,EACrC,EAAS,WAAW,EAAG,KAAK,OAAO,CAAC,GAAK,EACzC,EAAU,GAAO,CAErB,IAAI,GADQ,EAAG,OAAS,YAAc,EAAG,QAAQ,CAAC,EAAI,GACzC,QAAU,EACnB,IAAK,EAAK,EACd,EAAI,GACJ,IAAI,EAAO,EACP,EAAO,EACP,IAAU,KACZ,EAAO,EAAS,EAChB,EAAO,EAAS,GACP,IAAU,MACnB,EAAO,EAAS,GAEd,EAAO,IACT,EAAO,GAET,EAAG,KAAK,CAAE,EAAG,EAAM,MAAO,CAAI,CAAE,EAC5B,EAAG,wBACL,EAAG,uBAAsB,EAE3B,MAAM,EAAQ,IAAI,YAAY,SAAU,CACtC,OAAQ,CAAE,GAAA,CAAE,CACxB,CAAW,EACD,EAAG,KAAK,cAAc,CAAK,CAC7B,EACM,EAAO,IAAM,CACb,EAAY,UAAS,IACvB,SAAS,oBAAoB,YAAa,CAAM,EAChD,SAAS,oBAAoB,YAAa,CAAM,EAChD,SAAS,oBAAoB,UAAW,CAAI,EAC5C,SAAS,oBAAoB,WAAY,CAAI,GAE/C,MAAM,EAAQ,IAAI,YAAY,SAAU,CACtC,OAAQ,CAAE,GAAA,CAAE,CACxB,CAAW,EACD,EAAG,KAAK,cAAc,CAAK,CAC7B,EACI,EAAY,UAAS,IACvB,SAAS,iBAAiB,YAAa,CAAM,EAC7C,SAAS,iBAAiB,YAAa,CAAM,EAC7C,SAAS,iBAAiB,UAAW,CAAI,EACzC,SAAS,iBAAiB,WAAY,CAAI,EAE9C,EACA,EAAW,iBAAiB,YAAa,CAAa,EACtD,EAAW,iBAAiB,aAAc,CAAa,EACvD,EAAW,KAAK,IAAM,CACpB,EAAW,oBAAoB,YAAa,CAAa,EACzD,EAAW,oBAAoB,aAAc,CAAa,CAC5D,CAAC,CACH,EACA,OAAA,EAAoB,GAAG,EACvB,EAAoB,GAAG,EACvB,EAAG,eAAiB,IAAM,CACxB,EAAW,QAAS,GAAO,EAAE,CAAE,CACjC,EACO,CACT,CACF,CACA,GAAqB,EAAU,EAC/B,GAAwB,EAAU,EAClC,GAAiB,EAAU,EAC3B,GAAkB,EAAU,EAC5B,SAAS,IAAM,CACb,MAAM,EAAQ,EAAY,gBAAgB,GAAS,KAAK,EAClD,EAAM,IAAI,GAAa,CAAK,EAClC,OAAA,EAAI,KAAK,CAAE,MAAO,EAAO,CAAE,EACpB,CACT,CACA,GAAI,MAAQ,+BACR,EAAY,UAAS,GAAM,OAAO,OAAO,IAAQ,MACnD,OAAO,IAAM,IAEX,EAAY,UAAS,GACnB,OAAO,OAAO,IAAQ,MACxB,OAAO,IAAM,IAEX,OAAO,OAAO,KAAS,MACzB,OAAO,KAAO,CAAA,IAGZ,OAAO,GAAW,MAChB,OACJ,GAAO,KAAS,MACd,GAAO,KAAO,CAAA,GAEZ,OACJ,GAAO,IAAQ,MACb,GAAO,IAAM,KAInB,MAAM,GAAoB,MAAM,EAAkB,CAUhD,OAAO,iBAAiB,EAAY,CAClC,SAAW,CAAC,EAAK,CAAI,IAAK,OAAO,QAAQ,CAAU,EACjD,GAAkB,iBAAiB,IAAI,EAAK,CAAI,CAEpD,CAIA,YAAY,EAAK,CACf,KAAK,IAAM,EACX,KAAK,EAAI,EAAI,CACf,CACA,aAAc,CACZ,KAAK,IAAI,cAAgB,CACvB,gBACA,eACA,aACA,eACA,iBACA,kBACA,eACA,aACA,aACA,YACA,cACA,QACA,2BACA,UACA,cACA,qBACA,qBACA,qBACA,mBACA,mBACA,YACA,UACA,cACA,QACA,oBACA,SACN,EACI,KAAK,IAAI,UAAY,CACnB,QACA,YACA,YACA,aACA,aACA,YACA,aACA,UACA,WACA,UACA,OACN,EACI,KAAK,IAAI,WAAa,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EACrD,KAAK,IAAI,KAAO,IAAI,GAAK,KAAK,EAAG,KAAK,GAAG,EACzC,KAAK,IAAI,KAAO,IAAI,GAAK,KAAK,IAAI,GAAI,KAAK,EAAG,KAAK,GAAG,EACtD,KAAK,IAAI,OAAS,IAAI,GAAO,CAAA,CAAE,EAC/B,KAAK,IAAI,KAAO,IAAI,GAAK,KAAK,EAAG,CAC/B,aAAc,IAAM,KAAK,IAAI,KAAK,aAAY,EAC9C,YAAa,IAAM,KAAK,IAAI,KAAK,YAAW,CAClD,CAAK,EACD,KAAK,IAAI,KAAO,IAAI,GAAK,KAAK,EAAG,KAAK,GAAG,EACzC,KAAK,IAAI,SAAW,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EACjD,KAAK,IAAI,UAAY,IAAI,GAAU,KAAK,CAAC,EACzC,KAAK,IAAI,WAAa,IAAI,GAAW,KAAK,CAAC,EAC3C,KAAK,IAAI,OAAS,IAAI,GAAO,KAAK,EAAG,KAAK,GAAG,EAC7C,KAAK,IAAI,KAAO,IAAI,GAAK,KAAK,CAAC,EAC/B,KAAK,IAAI,aAAe,IAAI,GAAa,KAAK,CAAC,EAC/C,KAAK,IAAI,QAAU,IAAI,GACvB,KAAK,IAAI,WAAa,IAAI,GAAW,KAAK,CAAC,EAC3C,KAAK,IAAI,OAAS,IAAI,GAAO,KAAK,EAAG,CAEnC,iBAAkB,IAAI,IAAM,CAC1B,IAAI,EACJ,OAAQ,EAAK,KAAK,IAAI,SAAW,KAAO,OAAS,EAAG,cAAc,iBAAiB,GAAG,CAAC,CACzF,EACA,wBAAyB,IAAM,KAAK,IAAI,cAAc,wBAAuB,EAC7E,aAAc,IAAI,IAAM,KAAK,IAAI,cAAc,cAAc,GAAG,CAAC,CACvE,CAAK,EACD,KAAK,IAAI,MAAQ,IAAI,GAAM,KAAK,CAAC,EACjC,KAAK,IAAI,WAAa,IAAI,GAAW,KAAK,CAAC,EAC3C,KAAK,IAAI,cAAgB,IAAI,GAAc,KAAK,CAAC,EACjD,KAAK,IAAI,WAAa,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EACrD,KAAK,IAAI,cAAgB,IAAI,GAAc,KAAK,EAAG,KAAK,GAAG,EAC3D,KAAK,IAAI,mBAAqB,IAAI,GAAmB,KAAK,EAAG,KAAK,GAAG,EACrE,KAAK,IAAI,SAAW,KAAK,IAAI,mBAAmB,OAChD,MAAM,EAAkB,IAAI,GAAQ,KAAK,EAAG,KAAK,GAAG,EACpD,KAAK,EAAE,QAAQ,QAAU,EACzB,OAAO,eAAe,KAAK,IAAK,UAAW,CACzC,KAAM,CACJ,OAAO,KAAK,EAAE,QAAQ,OACxB,EACA,aAAc,EACpB,CAAK,EACD,KAAK,qBAAoB,CAC3B,CAWA,sBAAuB,CACrB,MAAM,EAAM,GAAkB,iBACxB,EAAI,KAAK,EACT,EAAM,KAAK,IACX,EAAc,EAAI,IAAI,SAAS,EACrC,EAAI,QAAU,EAAc,IAAI,EAAY,EAAG,CAAG,EAAI,KACtD,MAAM,EAAa,EAAI,IAAI,QAAQ,EACnC,EAAI,OAAS,EAAa,IAAI,EAAW,EAAG,CAAG,EAAI,KACnD,MAAM,EAAY,EAAI,IAAI,iBAAiB,EAC3C,EAAI,gBAAkB,EAAY,IAAI,EAAU,EAAG,CAAG,EAAI,KAC1D,MAAM,EAAgB,EAAI,IAAI,WAAW,EACzC,EAAI,UAAY,EAAgB,IAAI,EAAc,EAAG,CAAG,EAAI,KAC5D,MAAM,EAAmB,EAAI,IAAI,cAAc,EAC/C,EAAI,aAAe,EAAmB,IAAI,EAAiB,EAAG,CAAG,EAAI,KACrE,MAAM,EAAiB,EAAI,IAAI,YAAY,EAC3C,EAAI,WAAa,EAAiB,IAAI,EAAe,EAAG,CAAG,EAAI,KAC/D,MAAM,EAAc,EAAI,IAAI,SAAS,EACrC,EAAI,QAAU,EAAc,IAAI,EAAY,EAAG,CAAG,EAAI,KACtD,MAAM,EAAkB,EAAI,IAAI,aAAa,EAC7C,EAAI,YAAc,EAAkB,IAAI,EAAgB,EAAG,CAAG,EAAI,KAClE,MAAM,EAAU,EAAI,IAAI,KAAK,EAC7B,EAAI,IAAM,EAAU,IAAI,EAAQ,EAAG,CAAG,EAAI,KAC1C,MAAM,EAAc,EAAI,IAAI,SAAS,EACrC,EAAI,QAAU,EAAc,IAAI,EAAY,EAAG,CAAG,EAAI,KACtD,MAAM,EAAkB,EAAI,IAAI,aAAa,EAC7C,EAAI,YAAc,EAAkB,IAAI,EAAgB,EAAG,CAAG,EAAI,KAClE,MAAM,EAAY,EAAI,IAAI,OAAO,EACjC,EAAI,MAAQ,EAAY,IAAI,EAAU,EAAG,CAAG,EAAI,KAChD,MAAM,EAAc,EAAI,IAAI,gBAAgB,EAC5C,EAAI,eAAiB,EAAc,IAAI,EAAY,EAAG,CAAG,EAAI,KAC7D,MAAM,EAAc,EAAI,IAAI,SAAS,EACrC,OAAO,eAAe,EAAK,UAAW,CACpC,KAAM,CACJ,IAAI,EACJ,MAAI,CAAC,KAAK,UAAY,IACpB,KAAK,SAAW,IAAI,EAAY,EAAG,IAAI,IACjC,EAAK,KAAK,WAAa,KAAO,EAAK,IAC7C,EACA,aAAc,EACpB,CAAK,EACD,MAAM,EAAc,EAAI,IAAI,kBAAkB,EAC9C,OAAO,eAAe,EAAK,mBAAoB,CAC7C,KAAM,CACJ,IAAI,EACJ,MAAI,CAAC,KAAK,mBAAqB,IAC7B,KAAK,kBAAoB,IAAI,EAAY,EAAG,IAAI,IAC1C,EAAK,KAAK,oBAAsB,KAAO,EAAK,IACtD,EACA,aAAc,EACpB,CAAK,EACD,MAAM,EAAe,EAAI,IAAI,oBAAoB,EACjD,OAAO,eAAe,EAAK,qBAAsB,CAC/C,KAAM,CACJ,IAAI,EACJ,MAAI,CAAC,KAAK,qBAAuB,IAC/B,KAAK,oBAAsB,IAAI,EAAa,EAAG,IAAI,IAC7C,EAAK,KAAK,sBAAwB,KAAO,EAAK,IACxD,EACA,aAAc,EACpB,CAAK,CACH,CACF,EAWA,EAAc,GAAmB,mBAAoC,IAAI,GAAK,EAC9E,IAAI,GAAmB,GACvB,MAAM,EAAQ,CAIZ,YAAY,EAAK,CACf,KAAK,IAAM,EACX,KAAK,EAAI,EAAI,CACf,CAIA,MAAM,CAAE,WAAA,CAAU,EAAI,CACpB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,GAC/C,EAAK,KAAK,IAAI,QAAU,MAAgB,EAAG,SAAS,CAAU,EAC1D,IACH,KAAK,EAAE,QAAQ,YAAc,IAE3B,KAAK,IAAI,mBACX,KAAK,IAAI,kBAAkB,QAAO,EAEhC,KAAK,IAAI,UACX,KAAK,IAAI,SAAS,QAAO,EAEvB,KAAK,EAAE,QAAQ,gBAAkB,OAAO,KAAK,EAAE,QAAQ,eAAe,YAAe,aACvF,KAAK,EAAE,QAAQ,eAAe,WAAU,EACxC,KAAK,EAAE,QAAQ,eAAiB,MAElC,GAAiB,cAAc,KAAK,CAAC,EACjC,GACF,KAAK,IAAI,kBAAoB,KAC7B,KAAK,IAAI,SAAW,MACnB,EAAK,KAAK,IAAI,sBAAwB,MAAgB,EAAG,QAAO,EACjE,KAAK,IAAI,oBAAsB,QAE9B,EAAK,KAAK,IAAI,eAAiB,MAAgB,EAAG,SAAQ,EAC3D,KAAK,IAAI,aAAe,MACvB,EAAK,KAAK,IAAI,aAAe,MAAgB,EAAG,SAAQ,EACzD,KAAK,IAAI,WAAa,MACrB,EAAK,KAAK,IAAI,UAAY,MAAgB,EAAG,SAAQ,EACtD,KAAK,IAAI,QAAU,MAClB,EAAK,KAAK,IAAI,cAAgB,MAAgB,EAAG,SAAQ,EAC1D,KAAK,IAAI,YAAc,MACtB,EAAK,KAAK,IAAI,MAAQ,MAAgB,EAAG,SAAQ,EAClD,KAAK,IAAI,IAAM,MACd,EAAK,KAAK,IAAI,UAAY,MAAgB,EAAG,SAAQ,EACtD,KAAK,IAAI,QAAU,MAClB,EAAK,KAAK,IAAI,cAAgB,MAAgB,EAAG,SAAQ,EAC1D,KAAK,IAAI,YAAc,MACtB,EAAK,KAAK,IAAI,iBAAmB,MAAgB,EAAG,SAAQ,EAC7D,KAAK,IAAI,eAAiB,KAC1B,KAAK,IAAI,MAAQ,MAChB,GAAM,EAAK,KAAK,IAAI,qBAAuB,KAAO,OAAS,EAAG,WAAa,MAAgB,EAAG,KAAK,CAAE,EACtG,KAAK,IAAI,mBAAqB,KAC9B,KAAK,IAAI,SAAW,KACpB,KAAK,IAAI,UAAY,KACrB,KAAK,IAAI,gBAAkB,KAC3B,KAAK,IAAI,QAAU,KACnB,KAAK,IAAI,WAAa,KACtB,KAAK,IAAI,KAAO,KAChB,KAAK,IAAI,YAAc,KACvB,KAAK,IAAI,KAAO,KAChB,KAAK,IAAI,KAAO,KAChB,KAAK,IAAI,KAAO,KAChB,KAAK,IAAI,OAAS,KAClB,KAAK,IAAI,WAAa,KACtB,KAAK,IAAI,MAAQ,KACjB,KAAK,IAAI,WAAa,KACtB,KAAK,IAAI,cAAgB,KACzB,KAAK,IAAI,OAAS,KAClB,KAAK,IAAI,WAAa,KACtB,KAAK,IAAI,QAAU,KACnB,KAAK,IAAI,WAAa,KACtB,KAAK,IAAI,kBAAoB,KAC7B,KAAK,IAAI,cAAgB,KACzB,KAAK,IAAI,SAAW,KACpB,KAAK,IAAI,aAAe,KACxB,KAAK,IAAI,oBAAsB,KAC/B,KAAK,IAAI,EAAE,QAAQ,QAAU,MAE/B,KAAK,iBAAiB,CAAE,WAAA,CAAU,CAAE,CACtC,CAIA,QAAQ,EAAM,CACZ,EAAK,KAEH,UAAW,CACT,KAAK,YAAY,GAAG,EACpB,KAAK,IAAG,CACV,EACA,EACN,EACI,EAAK,MAAK,CACZ,CAIA,iBAAiB,CAAE,WAAA,CAAU,EAAI,CAC/B,MAAM,EAEJ,KAAK,EAAE,IAET,GAAI,EAAY,UAAS,GAAM,EAAO,MAAO,CAC3C,MAAM,EAAQ,EAAO,MAAM,KACvB,EAAM,YAAc,EAAM,WAAW,YAAc,CAAC,IACtD,EAAM,WAAW,WAAW,MAAM,UAAY,SAEhD,MAAM,EAAS,EAAO,OAMtB,GALI,GACF,KAAK,IAAI,UAAU,QAAS,GAAU,CACpC,EAAO,oBAAoB,EAAO,KAAK,IAAI,OAAO,aAAa,CACjE,CAAC,EAEC,KAAK,IAAI,KAAO,KAClB,KAAO,KAAK,IAAI,GAAG,YACjB,KAAK,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,UAAU,EAGlD,KAAK,QAAQ,EAAO,KAAK,EACzB,EAAO,MAAM,OAAM,CACrB,CACA,EAAO,MAAQ,KACf,EAAO,OAAS,KAChB,EAAO,YAAc,KACrB,EAAO,aAAe,KACtB,EAAO,gBAAkB,KACzB,EAAO,OAAS,KAChB,EAAO,WAAa,KACpB,EAAO,eAAiB,KACxB,EAAO,kBAAoB,KAC3B,EAAO,qBAAuB,KAC9B,EAAO,eAAiB,KACxB,EAAO,kBAAoB,KAC3B,EAAO,OAAS,IAClB,CACF,CACA,MAAM,GAAiB,yBACvB,SAAS,IAAc,CACrB,MAAM,EAEJ,WAEF,OAAK,EAAE,EAAc,IAAG,EAAE,EAAc,EAAI,CAAA,GACrC,EAAE,EAAc,CACzB,CACA,SAAS,GAAe,EAAK,CAC3B,GAAI,CAAC,GAAO,OAAO,EAAI,MAAS,UAAY,OAAO,EAAI,OAAU,WAAY,CAC3E,QAAQ,MACN,sEACN,EACI,MACF,CACA,GAAW,EAAG,EAAI,IAAI,EAAI,CAC5B,CACA,SAAS,GAAU,EAAO,CACxB,OAAO,GAAW,EAAG,CAAK,GAAK,IACjC,CACA,SAAS,GAAiB,EAAO,CAC/B,OAAO,GAAW,EAAG,CAAK,CAC5B,CACA,MAAM,GAAsB,IAAI,QAChC,SAAS,GAAkB,EAAI,EAAI,CACjC,GAAI,EAAY,MAAK,EAAI,OACzB,IAAI,EAAS,GACb,GAAI,EAAG,WAAa,KAAK,uBAAwB,CAC/C,MAAM,EAAS,EAAG,sBAAqB,GACnC,EAAG,MAAM,UAAY,QAAU,EAAO,QAAU,KAClD,EAAS,GAEb,CACA,MAAM,EAAK,IAAI,eAAgB,GAAM,CAC/B,GACF,EAAG,KAAK,EAAI,CAAC,EAEf,EAAS,EACX,CAAC,EACG,EAAG,WAAa,KAAK,uBACvB,MAAM,KAAK,EAAG,QAAQ,EAAE,QAAS,GAAM,EAAG,QAAQ,CAAC,CAAC,EAEpD,EAAG,QAAQ,CAAE,EAEf,GAAI,IAAI,EAAI,CAAE,CAChB,CACA,SAAS,GAAqB,EAAI,EAAI,CACpC,GAAI,EAAY,MAAK,EAAI,OACzB,MAAM,EAAK,GAAI,IAAI,CAAE,EACjB,IACF,EAAG,WAAU,EACb,GAAI,OAAO,CAAE,EAEjB,CACA,MAAM,GAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GACV,GAA0B,CAC9B,8HACF,EACM,GAA6C,IAAI,KAAK,sBAAsB,EAC5E,GAAa,QACb,GAAoC,IAAI,IACxC,GAA4B,IAAI,IAChC,GAA4B,IAAI,IACtC,IAAI,GAAqB,GACzB,SAAS,GAAa,EAAS,CAC7B,GAAI,OAAO,MAAS,WAAY,OAAO,KAAK,CAAO,EACnD,GAAI,OAAO,EAAW,IACpB,OAAO,EAAO,KAAK,EAAS,QAAQ,EAAE,SAAS,QAAQ,EAEzD,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CACA,SAAS,GAAc,EAAQ,CAC7B,MAAM,EAAa,EAAO,QAAQ,KAAM,GAAG,EAAE,QAAQ,KAAM,GAAG,EACxD,EAAS,EAAW,OAAO,KAAK,KAAK,EAAW,OAAS,CAAC,EAAI,EAAG,GAAG,EACpE,EAAS,GAAa,CAAM,EAC5B,EAAQ,IAAI,WAAW,EAAO,MAAM,EAC1C,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,EAAM,CAAC,EAAI,EAAO,WAAW,CAAC,EACtE,OAAO,CACT,CACA,SAAS,GAAiB,EAAM,CAC9B,MAAM,EAAU,EAAK,SAAW,EAAK,QAAQ,OAAS,EAAI,EAAK,QAAQ,KAAK,GAAG,EAAI,GACnF,MAAO,MAAM,EAAK,SAAS,IAAI,EAAK,UAAU,IAAI,EAAK,IAAI,IAAI,CAAO,EACxE,CACA,SAAS,IAAkB,CACzB,OAAO,OAAO,OAAW,KAAe,OAAO,SAAW,OAAO,SAAS,SAAW,EACvF,CACA,SAAS,GAAY,EAAa,CAChC,GAAI,CACF,MAAM,EAAM,KAAK,MAAM,GAAa,CAAW,CAAC,EAChD,OAAO,OAAO,EAAI,KAAQ,UAAY,EAAI,IAAM,EAAI,IAAM,IAC5D,MAAY,CACV,OAAO,IACT,CACF,CACA,SAAS,GAAO,EAAQ,CACtB,GAAU,QAAS,GAAa,CAC9B,GAAI,CACF,EAAS,CAAM,CACjB,MAAY,CACZ,CACF,CAAC,CACH,CACA,SAAS,GAAgB,EAAK,EAAM,EAAW,CAC7C,OAAO,GAAQ,KAAM,KAAM,WAAa,CACtC,GAAI,GAAU,IAAI,CAAG,GAAK,GAAkB,IAAI,CAAG,EAAG,OACtD,GAAU,IAAI,CAAG,EACjB,MAAM,EAAS,WAAW,OAAS,WAAW,OAAO,OAAS,OACxD,EAAW,GAAe,eAChC,GAAI,CAAC,GAAU,EAAS,SAAW,EAAG,CACpC,GAAU,OAAO,CAAG,EACf,KACH,GAAqB,GACrB,QAAQ,KACN,EAAS,uGAAyG,+GAC5H,GAEM,MACF,CACA,MAAM,EAAS,IAAI,YAAW,EAAG,OAAO,GAAiB,CAAI,CAAC,EAC9D,IAAI,EAAW,GACf,UAAW,KAAQ,EAAU,CAC3B,GAAI,CACF,MAAM,EAAY,MAAM,EAAO,UAC7B,OACA,GAAc,CAAI,EAClB,CAAE,KAAM,QAAS,WAAY,OAAO,EACpC,GACA,CAAC,QAAQ,CACnB,EACQ,EAAW,MAAM,EAAO,OACtB,CAAE,KAAM,UAAW,KAAM,OAAO,EAChC,EACA,GAAc,CAAS,EACvB,CACV,CACM,MAAY,CACV,EAAW,EACb,CACA,GAAI,EAAU,KAChB,CACA,GAAU,OAAO,CAAG,EACpB,GAAkB,IAAI,EAAK,CAAQ,EAC9B,GACH,QAAQ,MACN,oEACR,EAEI,GAAO,GAAe,YAAY,CAAG,CAAC,CACxC,CAAC,CACH,CACA,MAAM,EAAe,CAMnB,OAAO,kBAAkB,EAAa,CACpC,GAAI,CACF,MAAM,EAAO,KAAK,MAAM,GAAa,CAAW,CAAC,EACjD,MAAI,CAAC,EAAK,WAAa,CAAC,EAAK,YAAc,CAAC,EAAK,KACxC,KAEF,CACL,QAAS,MAAM,QAAQ,EAAK,OAAO,EAAI,EAAK,QAAU,OACtD,WAAY,EAAK,WACjB,UAAW,EAAK,UAChB,KAAM,EAAK,KACX,MAAO,EACf,CACI,MAAY,CACV,OAAO,IACT,CACF,CAMA,OAAO,QAAS,CACd,OAAO,KAAK,UACd,CAKA,OAAO,kBAAmB,CACxB,OAAK,KAAK,YAGV,KAAK,iBAAmB,KAAK,YAAY,KAAK,UAAU,EACjD,KAAK,kBAHH,CAAE,QAAS,GAAO,MAAO,EAAK,CAIzC,CAMA,OAAO,WAAW,EAAK,CACrB,OAAK,EACE,KAAK,YAAY,CAAG,EAAE,MADZ,EAEnB,CAEA,OAAO,gBAAiB,CACtB,OAAK,KAAK,WACH,KAAK,iBAAgB,EAAG,MADF,EAE/B,CAUA,OAAO,SAAS,EAAU,CACxB,OAAA,GAAU,IAAI,CAAQ,EACf,IAAM,CACX,GAAU,OAAO,CAAQ,CAC3B,CACF,CAMA,OAAO,WAAW,EAAK,CACrB,KAAK,WAAa,EAClB,KAAK,iBAAmB,KAAK,YAAY,CAAG,EACvC,KAAK,iBAAiB,OACzB,QAAQ,MAAM,UAAU,KAAK,iBAAiB,OAAO,EAAE,CAE3D,CAaA,OAAO,YAAY,EAAK,CACtB,GAAI,CACF,GAAI,OAAO,GAAQ,UAAY,CAAC,EAAI,WAAW,EAAU,EACvD,MAAO,CACL,QAAS,GACT,QAAS,mEACT,kBAAmB,GACnB,MAAO,EACjB,EAEM,MAAM,EAAc,EAAI,MAAM,GAAW,MAAM,EAC/C,GAAI,CAAC,EACH,MAAO,CACL,QAAS,GACT,QAAS,oEACT,kBAAmB,GACnB,MAAO,EACjB,EAEM,MAAM,EAAc,KAAK,kBAAkB,CAAW,EACtD,GAAI,CAAC,EACH,MAAO,CACL,QAAS,GACT,QAAS,sDACT,kBAAmB,GACnB,MAAO,EACjB,EAEM,MAAM,EAAY,GAAY,CAAW,EACzC,GAAI,CAAC,GAA6B,IAAI,MAAU,GAC9C,MAAO,CACL,KAAM,EACN,QAAS,GACT,QAAS,iHACT,kBAAmB,GACnB,MAAO,EACjB,EAEM,MAAM,EAAsB,IAAI,KAEhC,GADmB,IAAI,KAAK,EAAY,UAAU,EACjC,EACf,MAAO,CACL,KAAM,EACN,QAAS,GACT,QAAS,sBAAsB,EAAY,UAAU,+BACrD,kBAAmB,GACnB,MAAO,EACjB,EAEM,GAAI,EAAY,SAAW,EAAY,QAAQ,OAAS,EAAG,CACzD,MAAM,EAAW,GAAe,EAIhC,GAAI,CAHY,EAAY,QAAQ,KACjC,GAAW,IAAa,GAAU,EAAS,SAAS,IAAI,CAAM,EAAE,CAC3E,EAEU,MAAO,CACL,KAAM,EACN,QAAS,GACT,QAAS,yCAAyC,CAAQ,uBAAuB,EAAY,QAAQ,KAAK,IAAI,CAAC,IAC/G,kBAAmB,GACnB,MAAO,EACnB,CAEM,CACA,GAAI,EAAW,CACb,MAAM,EAAU,GAAkB,IAAI,CAAG,EACzC,OAAI,IAAY,GACP,CACL,KAAM,EACN,QAAS,GACT,QAAS,8DACT,kBAAmB,GACnB,MAAO,EACnB,GAEY,IAAY,QACT,GAAgB,EAAK,EAAa,CAAS,EAE3C,CACL,KAAM,EACN,QAAS,GACT,kBAAmB,IAAY,GAC/B,MAAO,EACjB,EACM,CACA,MAAO,CACL,KAAM,EACN,QAAS,GACT,kBAAmB,GACnB,MAAO,EACf,CACI,MAAY,CACV,MAAO,CACL,QAAS,GACT,QAAS,gDACT,kBAAmB,GACnB,MAAO,EACf,CACI,CACF,CAEA,OAAO,sBAAuB,CAC5B,GAAkB,MAAK,EACvB,GAAU,MAAK,EACf,GAAqB,EACvB,CACF,CAEA,EAAc,GAAgB,aAAc,IAAI,EAMhD,EAAc,GAAgB,iBAAkB,EAAuB,EAEvE,EAAc,GAAgB,mBAAoB,IAAI,EACtD,MAAM,GAAiB,4BACjB,GAAiB,aACjB,GAAkB,CACtB,SAAU,WACV,IAAK,IACL,MAAO,IACP,OAAQ,IACR,KAAM,IACN,cAAe,OACf,WAAY,OACZ,iBAAkB,OAClB,aAAc,OACd,OAAQ,QACR,QAAS,QACT,WAAY,UACZ,QAAS,GACX,EACA,SAAS,IAAyB,CAChC,MAAM,EAAM;;;;;;;;;;;;SAYL,EAAc;;IAGrB,MAAO,2BAA2B,mBAAmB,EAAI,KAAI,CAAE,CAAC,IAClE,CACA,MAAM,EAAU,CAMd,OAAO,YAAY,EAAI,CACrB,OAAO,OAAO,EAAG,MAAO,GAAiB,CACvC,gBAAiB,GAAsB,EACvC,iBAAkB,QACxB,CAAK,CACH,CAQA,OAAO,IAAI,EAAW,CACpB,GAAI,CAAC,GAAa,OAAO,SAAa,IAAa,OAAO,KAC1D,IAAI,EAAY,KAAK,KAAK,CAAS,EACnC,OAAK,IACH,EAAY,SAAS,cAAc,KAAK,EACxC,EAAU,aAAa,GAAgB,EAAE,EACzC,EAAU,YAAY,CAAS,GAEjC,KAAK,YAAY,CAAS,EACtB,OAAO,kBAAqB,YAAc,iBAAiB,CAAS,EAAE,WAAa,WACrF,EAAU,MAAM,SAAW,YAEtB,CACT,CAKA,OAAO,KAAK,EAAW,CACrB,OAAK,EAGH,EAAU,cAAc,IAAI,EAAc,GAAG,EAHxB,IAKzB,CAKA,OAAO,OAAO,EAAW,CACvB,MAAO,CAAC,CAAC,KAAK,KAAK,CAAS,CAC9B,CAKA,OAAO,OAAO,EAAW,CACvB,MAAM,EAAW,KAAK,KAAK,CAAS,EAChC,GAAU,EAAS,OAAM,CAC/B,CACF,CACA,EAAc,GAAW,OAAQ,EAAc,EAC/C,MAAM,GAAc,iCACpB,IAAI,GAA4B,GAChC,MAAM,GAA2B,IAAI,IACrC,SAAS,GAAa,EAAK,CACzB,GAAS,OAAO,CAAG,CACrB,CACA,SAAS,IAA+B,CACtC,GAA4B,GAC5B,GAA6B,CAC/B,CACA,SAAS,GAAqB,EAAG,EAAK,CACpC,MAAM,EAAQ,GAAK,EAAE,QAAU,EAAE,OAAO,OAAS,CAAA,EAC3C,EAAO,CAAA,EACT,EAAM,OAAS,QAAQ,EAAK,KAAK,MAAM,EACvC,EAAI,YAAc,EAAI,WAAW,OAAO,EAAK,KAAK,YAAY,EAClE,MAAM,EAAO,EAAM,KACnB,OAAI,EAAI,aAAe,IAAS,EAAK,UAAY,IAAQ,OAAO,EAAK,WAAc,aACjF,EAAK,KAAK,MAAM,EAEd,EAAI,KAAO,EAAM,KAAO,EAAM,IAAI,UAAY,IAAM,EAAK,KAAK,KAAK,EACnE,EAAI,SAAW,EAAM,SAAW,EAAM,QAAQ,UAAY,IAC5D,EAAK,KAAK,SAAS,EAEjB,EAAI,aAAe,EAAM,aAAe,EAAM,YAAY,UAAY,IACxE,EAAK,KAAK,cAAc,EAEtB,EAAI,eAAiB,EAAI,aAAa,OAAS,KACjD,EAAK,KAAK,cAAc,EAEtB,EAAI,SAAW,EAAM,SAAW,EAAM,QAAQ,UAAY,IAC5D,EAAK,KAAK,SAAS,EAEd,CACT,CACA,SAAS,GAAW,EAAG,CACrB,MAAM,EAAW,GAAK,EAAE,QAAU,EAAE,OAAO,OAAS,EAAE,OAAO,MAAM,QACnE,GAAI,EAAU,OAAO,EACrB,MAAM,EAAY,GAAe,OAAM,EACvC,GAAI,EAAW,OAAO,EACtB,MAAM,EAAO,EAAY,QAAO,EAChC,OAAI,GAAQ,EAAK,QAAgB,EAAK,QAC/B,IACT,CACA,MAAM,GAAgC,IAAI,IAAI,CAAC,UAAW,YAAY,CAAC,EACvE,SAAS,GAAmB,EAAK,CAC/B,GAAI,CAAC,EAAK,MAAO,GACjB,MAAM,EAAS,GAAe,YAAY,CAAG,EAC7C,GAAI,CAAC,EAAO,MAAO,MAAO,GAC1B,MAAM,EAAO,EAAO,MAAQ,EAAO,KAAK,KACxC,OAAO,OAAO,GAAS,UAAY,GAAc,IAAI,EAAK,YAAW,CAAE,CACzE,CACA,SAAS,GAAmB,EAAK,EAAQ,CACvC,MAAM,EAAO,GAAU,IAAI,CAAM,EAEjC,GADI,CAAC,GAAQ,OAAO,iBAAqB,KACrC,EAAI,iBAAmB,EAAI,kBAAoB,EAAM,OACrD,EAAI,iBAAiB,EAAI,gBAAgB,WAAU,EACvD,MAAM,EAAU,IAAI,iBAAiB,IAAM,CACzC,MAAM,EAAI,GAAU,KAAK,CAAM,EAC1B,IACL,EAAQ,WAAU,EAClB,GAAU,YAAY,CAAC,EACvB,EAAQ,YAAW,EACnB,EAAQ,QAAQ,EAAG,CAAE,WAAY,GAAM,gBAAiB,CAAC,OAAO,CAAC,CAAE,EACrE,CAAC,EACD,EAAQ,QAAQ,EAAM,CAAE,WAAY,GAAM,gBAAiB,CAAC,OAAO,CAAC,CAAE,EACtE,EAAI,gBAAkB,EACtB,EAAI,gBAAkB,CACxB,CACA,SAAS,GAAa,EAAK,EAAQ,CAEjC,GADA,GAAmB,EAAK,CAAM,EAC1B,OAAO,iBAAqB,KAAe,EAAI,gBAAiB,OACpE,MAAM,EAAU,IAAI,iBAAiB,IAAM,CACpC,GAAU,KAAK,CAAM,GAAG,GAAmB,EAAK,CAAM,CAC7D,CAAC,EACD,EAAQ,QAAQ,EAAQ,CAAE,UAAW,EAAI,CAAE,EAC3C,EAAI,gBAAkB,CACxB,CACA,SAAS,GAAkB,EAAK,EAAQ,CAClC,EAAI,kBACN,EAAI,gBAAgB,WAAU,EAC9B,EAAI,gBAAkB,MAEpB,EAAI,kBACN,EAAI,gBAAgB,WAAU,EAC9B,EAAI,gBAAkB,MAExB,EAAI,gBAAkB,KACtB,MAAM,EAAO,GAAU,EAAI,GAAK,EAAI,EAAE,KAAO,EAAI,EAAE,IAAI,OACnD,GAAM,GAAU,OAAO,CAAI,CACjC,CACA,SAAS,GAAY,EAAK,EAAK,EAAU,CACvC,GAAI,EAAI,wBAAyB,OACjC,EAAI,wBAA0B,GAC9B,MAAM,EAAO,EAAS,OAAS,EAC/B,GAAI,CAAC,EAAK,CACR,QAAQ,KACN,+BAA+B,EAAO,IAAM,EAAE,YAAY,EAAS,KAAK,IAAI,CAAC,+EAA+E,EAAW,EAC7K,EACI,MACF,CACA,MAAM,EAAS,GAAe,YAAY,CAAG,EAC7C,GAAI,EAAO,MAAO,CAChB,MAAM,EAAO,EAAO,MAAQ,EAAO,KAAK,MAAQ,UAChD,QAAQ,KACN,+BAA+B,EAAO,IAAM,EAAE,YAAY,EAAS,KAAK,IAAI,CAAC,kDAAkD,CAAI,0BAA0B,EAAO,OAAS,IAAI,sDAAsD,EAAW,EACxP,EACI,MACF,CACI,IAAQ,GAAe,OAAM,GAC/B,QAAQ,MAAM,UAAU,EAAO,OAAO,EAAE,CAE5C,CACA,SAAS,GAAe,EAAG,EAAK,CAC9B,GAAI,CACF,GAAI,CAAC,EAAY,UAAS,EAAI,OAC9B,GAAI,GAAK,EAAE,SAAW,EAAE,QAAQ,YAAa,CAC3C,GAAS,OAAO,CAAG,EACnB,MACF,CACA,MAAM,EAAS,GAAK,EAAE,KAAO,EAAE,IAAI,OACnC,GAAI,CAAC,EAAQ,OACb,MAAM,EAAW,GAAqB,EAAG,CAAG,EAC5C,GAAI,EAAS,SAAW,EAAG,CACzB,GAAS,OAAO,CAAG,EACnB,GAAkB,EAAK,CAAM,EAC7B,MACF,CACA,GAAS,IAAI,CAAG,EAChB,MAAM,EAAM,GAAW,CAAC,EACxB,GAAI,GAAmB,CAAG,EAAG,CAC3B,GAAkB,EAAK,CAAM,EAC7B,MACF,CACA,GAAa,EAAK,CAAM,EACxB,GAAY,EAAK,EAAK,CAAQ,CAChC,MAAY,CACZ,CACF,CACA,SAAS,IAAgC,CACvC,GAAI,CAAC,EAAY,UAAS,EAAI,OAC9B,MAAM,EAA0B,IAAI,IAC9B,EAAO,EAAY,QAAO,EAC1B,EAAY,GAAQ,EAAK,gBAC3B,MAAM,QAAQ,CAAS,GACzB,EAAU,QAAS,GAAU,CAC3B,MAAM,EAAQ,GAAS,EAAM,MACzB,GAAS,EAAM,GAAK,CAAC,EAAM,EAAE,QAAQ,cACvC,EAAQ,IAAI,CAAK,EACjB,GAAe,EAAM,EAAG,CAAK,EAEjC,CAAC,EAEH,MAAM,KAAK,EAAQ,EAAE,QAAS,GAAQ,CACpC,MAAM,EAAI,GAAO,EAAI,EACf,EAAS,GAAK,EAAE,KAAO,EAAE,IAAI,OACnC,GAAI,CAAC,GAAK,EAAE,QAAQ,aAAe,CAAC,GAAU,EAAO,cAAgB,GAAO,CAC1E,GAAS,OAAO,CAAG,EACnB,MACF,CACI,EAAQ,IAAI,CAAG,GACnB,GAAe,EAAG,CAAG,CACvB,CAAC,CACH,CACA,GAAe,SAAS,EAA6B,EACrD,MAAM,GAAc,MAAM,EAAY,CAOpC,YAAY,EAAI,EAAM,CAMpB,EAAc,KAAM,MAAM,EAE1B,EAAc,KAAM,YAAY,EAEhC,EAAc,KAAM,MAAM,EAE1B,EAAc,KAAM,MAAM,EAE1B,EAAc,KAAM,UAAU,EAE9B,EAAc,KAAM,WAAW,EAE/B,EAAc,KAAM,YAAY,EAEhC,EAAc,KAAM,QAAQ,EAE5B,EAAc,KAAM,MAAM,EAE1B,EAAc,KAAM,cAAc,EAElC,EAAc,KAAM,SAAS,EAE7B,EAAc,KAAM,QAAQ,EAE5B,EAAc,KAAM,OAAO,EAE3B,EAAc,KAAM,YAAY,EAEhC,EAAc,KAAM,eAAe,EAEnC,EAAc,KAAM,YAAY,EAEhC,EAAc,KAAM,eAAe,EAEnC,EAAc,KAAM,SAAS,EAE7B,EAAc,KAAM,MAAM,EAE1B,EAAc,KAAM,YAAY,EAEhC,EAAc,KAAM,SAAS,EAE7B,EAAc,KAAM,QAAQ,EAE5B,EAAc,KAAM,SAAS,EAE7B,EAAc,KAAM,kBAAkB,EAEtC,EAAc,KAAM,oBAAoB,EAExC,EAAc,KAAM,aAAa,EAEjC,EAAc,KAAM,iBAAiB,EAErC,EAAc,KAAM,WAAW,EAE/B,EAAc,KAAM,qBAAqB,EAEzC,EAAc,KAAM,mBAAmB,EAEvC,EAAc,KAAM,qBAAqB,EAEzC,EAAc,KAAM,qBAAqB,EAEzC,EAAc,KAAM,gBAAiB,CAAA,CAAE,EAEvC,EAAc,KAAM,YAAa,CAAA,CAAE,EAEnC,EAAc,KAAM,iBAAkB,IAAI,EAE1C,EAAc,KAAM,QAAQ,EAE5B,EAAc,KAAM,cAAc,EAElC,EAAc,KAAM,YAAY,EAEhC,EAAc,KAAM,SAAS,EAE7B,EAAc,KAAM,aAAa,EAEjC,EAAc,KAAM,KAAK,EAEzB,EAAc,KAAM,SAAS,EAE7B,EAAc,KAAM,aAAa,EAEjC,EAAc,KAAM,OAAO,EAE3B,EAAc,KAAM,UAAU,EAE9B,EAAc,KAAM,oBAAoB,EACxC,KAAK,KAAO,EACZ,KAAK,IAAM,KACX,KAAK,EAAI,IAAI,GAAK,CAAI,EAAE,KAAI,EAC5B,KAAK,GAAK,EACV,KAAK,EAAE,QAAQ,KAAO,EAAQ,SAAQ,EACtC,KAAK,EAAE,QAAQ,QAAU,KAAK,EAAE,OAAO,MAAM,GAAK,EAAQ,aAAa,KAAK,EAAE,OAAO,MAAM,EAAE,EAAI,KAAK,EAAE,QAAQ,KAChH,GAAqB,KAAK,CAAC,EACX,IAAI,GAAiB,IAAI,EACjC,YAAW,EACnB,KAAK,kBAAoB,KACzB,KAAK,aAAe,CAAE,KAAM,EAAG,aAAc,EAAG,KAAM,CAAC,EACvD,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EAC/B,EAAY,UAAS,IACvB,KAAK,oBAAsB,KAAK,qBAAqB,KAAK,IAAI,EAC9D,KAAK,oBAAsB,KAAK,sBAAsB,KAAK,IAAI,EAEnE,CAMA,QAAS,CACP,IAAI,EAAI,EACR,GAAI,GAAG,GAAM,EAAK,KAAK,IAAM,KAAO,OAAS,EAAG,SAAW,MAAgB,EAAG,OAC5E,OAAO,QAAQ,OACb,IAAI,MACF,+GACV,CACA,EAEI,GAAI,KAAK,eAAgB,OAAO,KAAK,eACrC,MAAM,EAAgB,IAAI,QAAQ,CAAC,EAAS,IAAW,CACrD,IAAI,EACJ,GAAI,EAAQ,cAAc,KAAK,EAAE,EAAG,CAC9B,OAAO,KAAK,gBAAoB,MAClC,KAAK,gBAAkB,CAAA,GAErB,KAAK,EAAE,OAAO,MAAM,IACtB,KAAK,gBAAgB,KAAK,CACxB,GAAI,KAAK,EAAE,QAAQ,QACnB,MAAO,KAAK,EAAE,OAAO,MAAM,MAC3B,MAAO,IACnB,CAAW,EAEH,KAAK,UAAU,KAAK,EAAE,OAAO,MAAM,aAAa,EAChD,MAAM,EAAc,KAAK,EAAE,OAAO,MAAM,OAAO,YAK/C,GAJI,OAAO,GAAgB,YACzB,EAAY,KAAM,KAAK,CAAC,EAE1B,KAAK,OAAO,UAAU,cAAe,CAAC,KAAM,KAAK,CAAC,CAAC,EAC/C,EAAY,UAAS,EAAI,CAC3B,OAAO,iBAAiB,SAAU,KAAK,mBAAmB,EAC1D,GAEE,KAAK,GAAG,WACR,KAAK,mBACjB,EACU,MAAM,EAEJ,KAAK,GAAG,aAAe,KAAK,GAAG,YAAW,EAEtC,EAAe,EAAQ,GAAG,aAAc,CAAQ,EAChD,EAAM,KAAK,GAAG,cACpB,IAAI,EAAM,EAAe,EAAS,eAAe,gBAAgB,EAAI,EAAI,eAAe,gBAAgB,EACxG,GAAI,CAAC,EAAK,CACR,EAAM,EAAY,gBAChB,+BACA,OACd,EACY,EAAI,GAAK,iBACT,EAAI,YAAc,GAClB,MAAM,IAAU,EAAM,KAAK,KAAK,QAAU,KAAO,OAAS,EAAI,QAAU,KAAK,EAAE,OAAO,MAAM,MACxF,GACF,EAAI,aAAa,QAAS,CAAK,EAE7B,EACF,EAAS,QAAQ,CAAG,EACX,KAAK,EAAE,OAAO,MAAM,mBAAqB,IAClD,EAAI,KAAK,YAAY,CAAG,CAE5B,CACF,CACA,MAAM,EAAY,KAAK,OAAO,KAAK,EAAE,OAAO,OAAQ,CAAA,CAAE,EACtD,GAAI,CAAC,EAAW,OAAO,EAAQ,IAAI,EACnC,KAAK,MAAM,CAAS,EAAE,KAAK,IAAM,CAC3B,OAAO,KAAK,EAAE,OAAO,MAAM,OAAO,SAAY,YAChD,KAAK,EAAE,OAAO,MAAM,OAAO,QAAQ,KAAM,KAAK,CAAC,EAEjD,KAAK,OAAO,UAAU,UAAW,CAAC,KAAM,KAAK,CAAC,CAAC,EAC/C,EAAQ,CAAS,CACnB,CAAC,EAAE,MAAO,GAAM,CACd,IAAI,EAAK,EACT,MAAM,EAAW,aAAa,MAAQ,EAAI,IAAI,MAAM,OAAO,CAAC,CAAC,EACvD,EAEJ,EAEF,EAAI,SAAW,GAAO,EAAM,KAAK,IAAM,KAAO,OAAS,EAAI,UAAY,KAAO,OAAS,EAAI,QAC3F,EAAI,GAAK,KAAK,GACd,EAAO,CAAQ,CACjB,CAAC,CACH,MACE,EAAO,IAAI,MAAM,mBAAmB,CAAC,CAEzC,CAAC,EACD,YAAK,eAAiB,EACtB,EAAc,MAAM,IAAM,CACpB,KAAK,iBAAmB,IAAe,KAAK,eAAiB,KACnE,CAAC,EACM,CACT,CAKA,OAAO,EAAK,EAAM,CAChB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACxB,MAAM,EAAI,KAAK,EACV,KAAK,MACQ,IAAI,GAAiB,IAAI,EACjC,YAAW,EAErB,MAAM,EAAK,KAAK,EAAE,QAkBlB,GAjBA,EAAG,OAAS,GACZ,EAAG,eAAiB,GAChB,CAAC,EAAQ,cAAc,KAAK,EAAE,IAIlC,KAAK,WAAW,sBAAsB,CAAI,EAC1C,GAAqB,CAAC,EAClB,EAAE,OAAO,MAAM,uBACA,IAAI,GAAS,EAAE,MAAM,EAC7B,yBAAyB,EAAE,OAAQ,KAAK,GAAG,EAEtD,KAAK,KAAK,cAAa,EACnB,EAAE,OAAO,MAAM,OAAS,YAC1B,EAAE,OAAO,KAAK,KAAO,GACrB,EAAE,OAAO,MAAM,CAAC,EAAE,KAAO,IAEvB,EAAG,WAAa,GAClB,OAAA,EAAG,eAAiB,GACb,KAET,IAAI,EAAS,EACb,EAAI,QAAQ,CAAC,EAAG,IAAc,CACxB,EAAE,SACJ,EAAS,KAAK,OAAO,cAAc,yBAAyB,CAC1D,UAAA,CACV,CAAS,EAEL,CAAC,EACD,MAAM,EAAQ,GAAU,iBAAiB,EAAQ,EAAE,OAAO,MAAM,IAAI,EACpE,EAAG,YAAc,EAAM,YACvB,EAAG,cAAgB,EAAM,cACzB,MAAM,EAAoB,EAAO,MAAO,GAAM,EAAE,MAAQ,EAAE,KAAK,SAAW,CAAC,GACvE,EAAO,SAAW,GAAK,GAAqB,EAAG,gBAAgB,OAAS,IAC1E,KAAK,OAAO,aAAY,EAEtB,EAAY,UAAS,GACvB,KAAK,OAAO,mBAAkB,EAEhC,MAAM,EAAc,KAAK,KAAK,UAAU,CAAM,EAC9C,KAAK,uBAAuB,EAAY,UAAU,EAClD,KAAK,sBAAsB,EAAY,SAAS,EAChD,KAAK,uBAAuB,EAAY,UAAU,EAClD,KAAK,sBAAsB,EAAY,SAAS,EAChD,KAAK,sBAAsB,EAAY,SAAS,GAC/C,EAAK,KAAK,qBAAuB,MAAgB,EAAG,QAAO,GAC3D,EAAK,KAAK,QAAU,MAAgB,EAAG,SAAS,YAAY,EAC7D,KAAK,MAAM,KAAI,EACC,IAAI,GAAQ,KAAK,EAAG,IAAI,EAChC,oBAAmB,EAC3B,KAAK,WAAW,mBAAkB,EAClC,KAAK,cAAc,KAAI,GACnB,CAAC,EAAG,QAAU,EAAG,gBAAgB,SAAW,EAAE,WAAW,OAAO,QAAU,EAAE,OAAO,OAAO,wBAC3F,EAAK,KAAK,SAAW,MAAgB,EAAG,KAAI,GAE/C,KAAK,OAAO,mBAAkB,EAC1B,EAAG,aACL,KAAK,KAAK,iBAAgB,EACtB,EAAE,OAAO,MAAM,OAAS,YAC1B,KAAK,WAAW,mBAAkB,EAEhC,KAAK,IAAI,UACX,KAAK,IAAI,QAAQ,KAAO,EAAE,QAAQ,KAClC,KAAK,IAAI,QAAQ,KAAO,EAAE,QAAQ,OAGtC,KAAK,WAAW,uBAAsB,EACpB,IAAI,GAAU,KAAK,CAAC,EAC5B,qBAAoB,EAC9B,MAAM,EAAc,KAAK,WAAW,WAAU,EAC9C,KAAK,mBAAmB,EAAY,MAAM,EAC1C,MAAM,EAAW,KAAK,KAAK,WAAU,GACpC,EAAK,KAAK,QAAU,MAAgB,EAAG,SAAS,cAAe,CAAE,SAAA,CAAQ,CAAE,EAC5E,KAAK,KAAK,eAAc,EACxB,MAAM,EAAU,KAAK,KAAK,cAAc,EAAQ,CAAQ,EAClD,EAAa,IAAI,GAAW,KAAK,EAAG,IAAI,EAC9C,EAAW,aAAY,EACnB,EAAE,OAAO,WAAW,WAAW,SACjC,EAAW,qBAAoB,EAEjC,KAAK,KAAK,mBAAkB,GAC3B,GAAM,EAAK,KAAK,SAAW,KAAO,OAAS,EAAG,wBAA0B,MAAgB,EAAG,iBAAgB,EACxG,EAAE,QAAQ,WAAa,IACzB,EAAE,IAAI,OAAO,UAAU,IAAI,gCAAgC,EAE7D,MAAM,EAAM,CACV,KAAM,CACJ,KAAM,EAAE,OAAO,WACf,IAAK,EAAE,OAAO,WACd,MAAO,EAAE,OAAO,UAChB,OAAQ,EAAE,OAAO,UACzB,CACA,EACI,MAAO,CACL,QAAA,EACA,SAAA,EACA,WAAY,CAClB,CACE,CAIA,MAAM,EAAY,KAAM,CACtB,MAAM,EAAK,KACL,EAAI,EAAG,EACb,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACxC,GAAI,EAAG,KAAO,KACZ,OAAO,EACL,IAAI,MAAM,wDAAwD,CAC5E,EACiB,EAAE,QAAQ,oBACnB,EAAG,OAAO,aAAY,EAExB,EAAG,KAAO,IAAI,GAAK,EAAG,EAAG,CAAE,EAC3B,MAAM,EAAS,EAAG,KAAK,SAAQ,EACzB,EAAkB,GAAiB,iBAAiB,IAAI,aAAa,EAe3E,GAdA,EAAG,YAAc,EAAkB,IAAI,EAAgB,EAAG,EAAG,CAC3D,MAAO,EAAG,MACV,UAAW,EAAG,SACtB,CAAO,EAAI,MACJ,EAAK,EAAG,cAAgB,MAAgB,EAAG,eAAc,GACzD,EAAK,EAAG,cAAgB,MAAgB,EAAG,cAAa,EACrD,EAAE,OAAO,KAAK,WAAa,SACzB,GACF,EAAE,IAAI,YAAY,IAAI,EAAO,EAAE,GAE5B,EAA+B,GAAO,gBAAkB,MAAgB,EAAG,MAC9E,EAAE,IAAI,YAAY,IAAI,EAAO,aAAa,GAG1C,MAAM,QAAQ,EAAU,OAAO,EACjC,QAAS,EAAI,EAAG,EAAI,EAAU,QAAQ,OAAQ,IAC5C,EAAE,IAAI,YAAY,IAAI,EAAU,QAAQ,CAAC,CAAC,OAG5C,EAAE,IAAI,YAAY,IAAI,EAAU,OAAO,EAErC,EAAE,OAAO,KAAK,WAAa,UACzB,GACF,EAAE,IAAI,YAAY,IAAI,EAAO,EAAE,GAE5B,EAA+B,GAAO,gBAAkB,MAAgB,EAAG,MAC9E,EAAE,IAAI,YAAY,IAAI,EAAO,aAAa,GAG1C,EAAE,OAAO,MAAM,WAAW,WAAa,SACzC,EAAG,WAAW,gBAAe,EAE3B,EAAE,OAAO,MAAM,CAAC,EAAE,WAAW,WAAa,SAC5C,EAAG,WAAW,gBAAe,EAE3B,EAAE,OAAO,MAAM,OAAS,WAC1B,EAAG,KAAK,SAAS,EAAE,OAAO,MAAM,KAAM,CAAM,EAE9C,MAAM,EAAQ,IAAI,GAAM,KAAK,EAAG,KAAK,IAAK,CAAM,EAC1C,EAAQ,IAAI,GAChB,KAAK,EACL,CAAE,MAAO,KAAK,MAAO,UAAW,KAAK,SAAS,EAC9C,CACR,EAWM,GAVI,IAAW,OACb,EAAM,sBAAqB,EAC3B,EAAM,uBAAsB,EAC5B,EAAE,OAAO,MAAM,IAAI,CAAC,EAAM,IAAU,CAC9B,EAAE,QAAQ,mBAAmB,QAAQ,CAAK,IAAM,IAClD,EAAM,iBAAiB,EAAO,EAAK,QAAQ,CAE/C,CAAC,IAEF,EAAK,EAAG,cAAgB,MAAgB,EAAG,oBAAmB,EAC3D,CAAC,EAAE,QAAQ,OAAQ,CAOrB,GANI,EAAY,UAAS,GAAM,EAAE,OAAO,QAAQ,SAAW,CAAC,EAAE,QAAQ,UACnE,EAAK,EAAG,EAAE,QAAQ,UAAY,MAAgB,EAAG,YAAY,EAAU,QAAQ,GAE9E,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,SAAS,SAAW,EAAE,OAAO,MAAM,cAAc,SAAS,WAAW,WAC3I,EAAK,EAAG,qBAAuB,MAAgB,EAAG,KAAI,GAErD,EAAY,UAAS,GAAM,EAAE,QAAQ,aAAe,EAAE,UAAU,YACpE,EAAE,OAAO,MAAM,uBAAyB,EAAE,UAAU,aAC9C,EAAE,OAAO,MAAM,KAAK,SAAW,EAAE,OAAO,MAAM,WAAa,EAAE,OAAO,MAAM,UAAU,SACxF,EAAE,OAAO,MAAM,KAAO,EAAE,OAAO,MAAM,IAAI,YACtC,EAAK,EAAG,mBAAqB,MAAgB,EAAG,KAAK,CACpD,SAAU,EAAU,QAClC,CAAa,OAEE,CACL,MAAM,EAAQ,EAAE,OAAO,MAAM,QAAQ,MACpB,CACf,OACA,SACA,UACA,YACA,MACA,OACZ,EACmB,QAAS,GAAM,CACtB,EAAM,CAAC,EAAI,EACb,CAAC,CACH,CACI,EAAE,OAAO,MAAM,QAAQ,MAAQ,CAAC,EAAE,QAAQ,sBAC3C,EAAK,EAAG,UAAY,MAAgB,EAAG,cAAa,EAEzD,EACC,EAAK,EAAG,QAAU,MAAgB,EAAG,SAAS,OAAQ,CACrD,KAAM,OACN,SAAuC,GAAU,QACzD,CAAO,EACG,EAAE,QAAQ,OAAO,cAAc,OAAS,GAC1C,EAAE,QAAQ,OAAO,cAAc,QAAS,GAAO,CAC7C,EAAG,OAAO,EAAG,OAAQ,GAAO,EAAG,OAAO,CACxC,CAAC,EAEC,CAAC,EAAE,QAAQ,YAAc,CAAC,EAAE,QAAQ,QACtC,EAAG,KAAK,oBAAmB,EAE7B,GAAe,EAAG,CAAE,EACpB,EAAQ,CAAE,CACZ,CAAC,CACH,CAKA,SAAU,CACR,IAAI,EACJ,KAAK,eAAiB,KAClB,EAAY,UAAS,IACvB,OAAO,oBAAoB,SAAU,KAAK,mBAAmB,EAC7D,GAEE,KAAK,GAAG,WACR,KAAK,mBACb,EACM,cAAc,EAAK,KAAK,EAAE,QAAQ,cAAgB,KAAO,EAAK,MAAM,GAEtE,MAAM,EAAU,KAAK,EAAE,OAAO,MAAM,GAChC,GAAW,MAAM,QAAQ,KAAK,eAAe,GAC/C,KAAK,gBAAgB,QACnB,CAAC,EAAG,IAAM,CACJ,EAAE,KAAO,EAAQ,aAAa,CAAO,GACvC,KAAK,gBAAgB,OAAO,EAAG,CAAC,CAEpC,CACR,EAEQ,KAAK,qBACP,KAAK,oBAAoB,QAAO,EAElC,GAAkB,IAAI,EACtB,GAAa,IAAI,EACjB,IAAI,GAAQ,KAAK,GAAG,EAAE,MAAM,CAAE,WAAY,EAAK,CAAE,CACnD,CAWA,cAAc,EAAU,EAAS,GAAO,EAAU,GAAM,EAAqB,GAAM,EAAyB,GAAM,CAChH,MAAM,EAAI,KAAK,EAEf,GADA,EAAE,SAAS,UAAY,OACnB,KAAK,kBAAmB,CAC1B,GAAI,EAAQ,aAAa,KAAK,kBAAmB,CAAQ,EACvD,OAAO,QAAQ,QAAQ,IAAI,EAE7B,GAAI,EAAS,QAAU,KAAK,kBAAkB,QAAU,CAAC,GAAY,wBAAwB,CAAQ,GAC/F,KAAK,UAAU,KAAK,kBAAkB,MAAM,IAAM,KAAK,UAAU,EAAS,MAAM,EAAG,CACrF,MAAM,EAAuB,EAAe,CAAA,EAAI,CAAQ,EAClD,EAAoB,EAAe,CAAA,EAAI,KAAK,iBAAiB,EAGnE,GAFA,OAAO,EAAqB,OAC5B,OAAO,EAAkB,OACrB,EAAQ,aAAa,EAAsB,CAAiB,EAC9D,OAAO,QAAQ,QAAQ,IAAI,CAE/B,CAEJ,CACA,OAAI,EAAS,SACX,KAAK,KAAK,kBAAiB,EAC3B,KAAK,OAAO,YAAY,GAAO,GAAM,EAAK,EACtC,EAAS,OAAO,QAAU,EAAS,OAAO,CAAC,EAAE,OAC/C,EAAS,OAAS,EAAS,OAAO,IAChC,CAAC,EAAG,IACK,KAAK,cAAc,cAAc,EAAG,CAAC,CAExD,GAEM,KAAK,cAAc,wBAAuB,GAExC,EAAS,QACX,EAAW,KAAK,cAAc,iBAAiB,CAAQ,GAErD,EAAS,QACX,EAAW,KAAK,cAAc,iBAAiB,CAAQ,GAErD,EAAE,QAAQ,uBAAuB,OAAS,GAC5C,KAAK,OAAO,mBAAkB,EAE5B,EAAS,QACX,EAAW,KAAK,MAAM,mBAAmB,CAAQ,GAE5C,KAAK,cAAc,eACxB,EACA,EACA,EACA,EACA,CACN,CACE,CASA,aAAa,EAAY,CAAA,EAAI,EAAU,GAAM,EAAyB,GAAM,CAC1E,YAAK,KAAK,kBAAiB,EAC3B,KAAK,OAAO,kBAAiB,EAC7B,KAAK,cAAc,wBAAuB,EACnC,KAAK,cAAc,cACxB,EACA,EACA,CACN,CACE,CASA,aAAa,EAAU,EAAU,GAAM,EAAyB,GAAM,CACpE,KAAK,KAAK,kBAAiB,EAC3B,MAAM,EAAY,KAAK,EAAE,OAAO,OAAO,MAAK,EAC5C,OAAA,EAAU,KAER,CACN,EACI,KAAK,OAAO,kBAAiB,EAC7B,KAAK,cAAc,wBAAuB,EACnC,KAAK,cAAc,cACxB,EACA,EACA,CACN,CACE,CASA,WAAW,EAAS,EAAyB,GAAM,CACjD,MAAM,EAAK,KACX,EAAG,KAAK,kBAAiB,EACzB,EAAG,EAAE,QAAQ,YAAc,GACvB,EAAG,EAAE,OAAO,MAAM,WAAW,SAC/B,EAAG,OAAO,iBAAgB,EAE5B,MAAM,EAAY,EAAG,EAAE,OAAO,OAAO,MAAK,EAC1C,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IACpC,GAAI,EAAQ,CAAC,IAAM,MAAQ,OAAO,EAAQ,CAAC,EAAM,IAAa,CAC5D,MAAM,EAEJ,EAAQ,CAAC,EAEL,EAEJ,EAAU,CAAC,EAEb,QAAS,EAAI,EAAG,EAAI,EAAS,KAAK,OAAQ,IACxC,EAAS,KAAK,KAAK,EAAS,KAAK,CAAC,CAAC,CAEvC,CAEF,OAAA,GAAoB,EAAW,EAAG,CAAC,EACnC,EAAG,EAAE,OAAO,OAAS,EACjB,IACF,EAAG,EAAE,QAAQ,cAAgB,EAAG,EAAE,OAAO,QAEpC,KAAK,OAAM,CACpB,CAQA,OAAO,wBAAwB,EAAU,CACvC,MAAM,EAAS,GAAY,EAAS,OACpC,GAAI,CAAC,MAAM,QAAQ,CAAM,EAAG,MAAO,GACnC,IAAI,EAAS,EACb,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAI,EAAO,CAAC,GAAK,EAAO,CAAC,EAAE,KAEjC,GADA,GAAU,MAAM,QAAQ,CAAC,EAAI,EAAE,OAAS,EACpC,EAAS,IAAK,MAAO,EAC3B,CACA,MAAO,EACT,CAIA,OAAO,EAAU,CACf,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,GAAI,GAAY,KAAK,mBAAqB,CAAC,GAAY,wBAAwB,CAAQ,GAAK,KAAK,UAAU,KAAK,iBAAiB,IAAM,KAAK,UAAU,CAAQ,EAC5J,OAAO,EAAQ,IAAI,EAErB,KAAK,kBAAoB,GAAY,CAAC,GAAY,wBAAwB,CAAQ,EAAI,EAAQ,MAAM,CAAQ,EAAI,KAChH,IAAI,GAAQ,KAAK,GAAG,EAAE,MAAM,CAAE,WAAY,EAAI,CAAE,EAChD,MAAM,EAAY,KAAK,OAAO,KAAK,EAAE,OAAO,OAAQ,GAA8B,CAAA,CAAE,EACpF,GAAI,CAAC,EAAW,OAAO,EAAQ,IAAI,EACnC,KAAK,MAAM,CAAS,EAAE,KAAK,IAAM,CAC/B,IAAI,GACH,EAAK,KAAK,kBAAoB,MAAgB,EAAG,gBAAe,EACjE,GAAoB,KAAK,CAAC,EAC1B,GAAyB,KAAK,CAAC,EAC3B,OAAO,KAAK,EAAE,OAAO,MAAM,OAAO,SAAY,YAChD,KAAK,EAAE,OAAO,MAAM,OAAO,QAAQ,KAAM,KAAK,CAAC,EAEjD,KAAK,OAAO,UAAU,UAAW,CAAC,KAAM,KAAK,CAAC,CAAC,EAC/C,KAAK,EAAE,QAAQ,QAAU,GACzB,EAAQ,IAAI,CACd,CAAC,EAAE,MAAO,GAAM,CACd,EAAO,CAAC,CACV,CAAC,CACH,CAAC,CACH,CAmBA,uBAAuB,EAAW,CAChC,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACb,KAAK,oBAAsB,GAC3B,GAAI,CACF,GAAI,EAAG,gBACL,YAAK,oBAAsB,gBACpB,GAET,GAAI,EAAE,OAAO,MAAM,UAAU,QAAS,MAAO,GAC7C,MAAM,EAAI,EAAE,OAAO,YACnB,GAAI,IAAM,EAAE,OAAS,EAAE,MAAM,QAAU,EAAE,OAAS,EAAE,MAAM,QAAU,EAAE,QAAU,EAAE,OAAO,QAAU,EAAE,OAAS,EAAE,MAAM,QAAU,EAAE,QAAU,EAAE,OAAO,QACnJ,YAAK,oBAAsB,cACpB,GAET,GAAI,EAAE,OAAO,MAAM,KAAO,EAAE,OAAO,MAAM,IAAI,QAC3C,YAAK,oBAAsB,MACpB,GAET,MAAM,EAAM,KAAK,WACjB,GAAI,CAAC,GAAO,CAAC,EAAI,SACf,YAAK,oBAAsB,eACpB,GAET,MAAM,EAAoB,EAAE,OAAO,cAC7B,EAAmB,EAAE,OAAO,aAC5B,EAAmB,EAAI,SAAS,qBAAoB,EACpD,EAAe,EAAI,SAAS,oBAAmB,EACrD,EAAE,OAAO,cAAgB,CAAA,EACzB,EAAE,OAAO,aAAe,CAAA,EACxB,EAAE,OAAO,MAAM,IAAI,CAAC,EAAO,IAAU,CACnC,EAAE,OAAO,cAAc,KAAK,CAC1B,MAAO,EAAiB,CAAK,EAAE,MAC/B,MAAA,CACV,CAAS,EACD,EAAE,OAAO,aAAa,KAEpB,CAAE,MAAO,EAAa,CAAK,EAAE,MAAO,MAAA,CAAK,CACnD,CACM,CAAC,EACD,MAAM,EAAgB,EAAI,SAAS,mBAAkB,EACrD,GAAI,EAAgB,EAAI,WAAa,EACnC,OAAA,EAAE,OAAO,cAAgB,EACzB,EAAE,OAAO,aAAe,EACxB,KAAK,oBAAsB,cAAc,CAAa,MAAM,EAAI,UAAU,GACnE,GAET,MAAM,EAAU,EAAE,IAAI,YAAY,KAC5B,EAAU,EAAQ,cAAc,kBAAkB,EAClD,EAAiB,EAAQ,cAAc,0BAA0B,EACvE,GAAI,CAAC,EACH,YAAK,oBAAsB,kBACpB,GAET,MAAM,EAAa,EAAQ,WACrB,EAAW,EAAiB,EAAe,YAAc,EAAQ,YACvE,EAAQ,OAAM,EACV,GAAgB,EAAe,OAAM,EACzC,EAAQ,iBAAiB,wBAAwB,EAAE,QAAS,GAAM,EAAE,OAAM,CAAE,EAC5E,KAAK,KAAO,IAAI,GAAK,EAAG,IAAI,EAC5B,MAAM,EAAS,KAAK,KAAK,SAAQ,EAC7B,GAAU,EAAO,KACnB,EAAW,aAAa,EAAO,GAAG,KAAM,CAAQ,EAC5C,EAAO,eAAiB,EAAO,cAAc,MAC/C,EAAW,aAAa,EAAO,cAAc,KAAM,CAAQ,GAG/D,MAAM,EAAQ,IAAI,GAAM,KAAK,EAAG,KAAK,IAAK,CAAM,EAC1C,EAAW,EAAQ,cAAc,mBAAmB,EAC1D,GAAI,EAAU,CACZ,MAAM,EAAU,EAAS,WACnB,EAAQ,EAAS,YACvB,EAAS,OAAM,EACf,MAAM,EAAU,EAAM,UAAS,EAC/B,EAAQ,aAAa,EAAQ,KAAM,CAAK,CAC1C,CACA,MAAM,EAAQ,IAAI,GAChB,KAAK,EACL,CAAE,MAAO,KAAK,MAAO,UAAW,KAAK,SAAS,EAC9C,CACR,EACM,QAAS,EAAQ,EAAG,EAAQ,EAAE,OAAO,MAAM,OAAQ,IAAS,CAC1D,GAAI,EAAG,mBAAmB,QAAQ,CAAK,IAAM,GAAI,SACjD,MAAM,EAAO,EAAE,IAAI,OAAO,cACxB,0BAA0B,CAAK,IACzC,EACQ,GAAI,CAAC,EACH,YAAK,oBAAsB,mBACpB,GAET,MAAM,EAAU,EAAK,WACrB,GAAI,CAAC,EACH,YAAK,oBAAsB,qBACpB,GAET,MAAM,EAAQ,EAAK,YACnB,EAAK,OAAM,EACX,MAAM,EAAU,EAAM,UAAU,CAAK,EACrC,EAAQ,aAAa,EAAQ,KAAM,CAAK,CAC1C,CACA,OAAI,IAAW,OACb,EAAM,sBAAqB,EAC3B,EAAM,uBAAsB,EAC5B,EAAE,OAAO,MAAM,IAAI,CAAC,EAAM,IAAU,CAC9B,EAAG,mBAAmB,QAAQ,CAAK,IAAM,IAC3C,EAAM,iBAAiB,EAAO,EAAK,QAAQ,CAE/C,CAAC,GAEI,EACT,OAAS,EAAG,CACV,YAAK,oBAAsB,WAAa,GACxC,EAAE,SACK,EACT,CACF,CAeA,WAAW,EAAS,EAAkB,CACpC,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,IAAI,EAAI,EAAI,EACZ,GAAI,CACF,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACb,EAAG,cAAgB,EACnB,EAAG,YAAc,GACjB,EAAG,eAAiB,GACpB,GAAiB,oBAAoB,CAAC,EACtC,MAAM,EAAM,EAAE,QACd,EAAI,KAAO,CAAC,OAAO,UACnB,EAAI,KAAO,OAAO,UAClB,EAAI,QAAU,CAAA,EACd,EAAI,QAAU,CAAA,EACd,EAAI,KAAO,CAAC,OAAO,UACnB,EAAI,KAAO,OAAO,UAClB,EAAI,YAAc,CAAC,OAAO,UAC1B,EAAI,YAAc,OAAO,UACzB,EAAI,WAAa,CAAA,EACjB,EAAI,WAAa,KACjB,EAAI,oBAAsB,CAAA,EAC1B,EAAI,OAAS,EACb,EAAI,OAAS,CAAA,EACb,EAAI,OAAS,EACb,EAAI,YAAc,EAClB,EAAI,oBAAsB,EAC1B,EAAI,YAAc,CAAA,EAClB,EAAI,gBAAkB,KACtB,EAAI,gBAAkB,CAAA,EACtB,EAAI,2BAA6B,CAAA,EACjC,EAAI,eAAiC,IAAI,IACzC,EAAI,SAA2B,IAAI,IACnC,EAAI,gBAAkB,CAAA,EACtB,EAAI,cAAgB,GACpB,EAAI,eAAiB,GACjB,EAAG,aACL,KAAK,KAAK,iBAAgB,EACtB,EAAE,OAAO,MAAM,OAAS,YAC1B,KAAK,WAAW,mBAAkB,GAGtC,KAAK,WAAW,uBAAsB,EACtC,MAAM,EAAW,KAAK,KAAK,WAAU,EACjC,KAAK,oBAAmB,KAAK,kBAAkB,SAAW,GAC9D,MAAM,EAAkB,KAAK,UAAU,CACrC,GAAI,EAAG,YAAc,CAAA,GAAI,IAAK,GAAM,EAAI,EAAE,OAAS,IAAI,EACvD,KAAM,EAAG,KACT,KAAM,EAAG,IACnB,CAAS,EACK,EAAe,EAAG,YAAc,GAAoB,MAAQ,IAAoB,EACtF,GAAI,GAAgB,CAAC,KAAK,uBAAuB,CAAQ,EACvD,YAAK,aAAa,OACX,KAAK,OAAM,EAAG,KAAK,IAAM,EAAQ,IAAI,CAAC,EAAE,MAAM,CAAM,EAEzD,EACF,KAAK,aAAa,eAElB,KAAK,aAAa,QAEnB,EAAK,KAAK,QAAU,MAAgB,EAAG,SAAS,cAAe,CAAE,KAAM,OAAQ,SAAA,CAAQ,CAAE,EAC1F,MAAM,EAEJ,KAAK,IAAI,SAEL,EAAkB,CAAC,EAAE,GAAM,EAAG,OAAS,UAAY,EAAG,mBAAqB,EAAG,kBAAiB,GACjG,IAAiB,EAAG,oBAAsB,IAC9C,MAAM,EAAU,EAAE,IAAI,YAAY,KACjB,EAAQ,kBACtB,EAAkB,GAAK,oCAAsC,wGACxE,EACiB,QACN,GAAO,CACN,IAAI,EACJ,OAAQ,EAAM,EAAG,aAAe,KAAO,OAAS,EAAI,YAAY,CAAE,CACpE,CACV,EACQ,MAAM,EAAU,KAAK,KAAK,cAAc,EAAE,OAAO,OAAQ,CAAQ,EAC3D,EAAS,EAAQ,cAAc,kBAAkB,EACjD,EAAU,EAAQ,cAAc,mBAAmB,EACnD,EAAS,MAAM,QAAQ,CAAO,EAAI,EAAU,CAAC,CAAO,EACpD,EAAS,GAAU,EAAE,OAAO,KAAK,WAAa,QAAU,EAAS,EACnE,EACF,EAAO,QAAS,GAAM,CACpB,MAAM,EAAO,GAAK,EAAE,KAAO,EAAE,KAAO,EAChC,GAAM,EAAQ,aAAa,EAAM,CAAM,CAC7C,CAAC,EAED,EAAO,QAAS,GAAM,CACpB,EAAE,IAAI,YAAY,IAAI,CAAC,CACzB,CAAC,EAEH,MAAM,EAAa,IAAI,GAAW,EAAG,IAAI,EACzC,EAAW,aAAY,EACnB,EAAE,OAAO,WAAW,WAAW,SACjC,EAAW,qBAAoB,EAE7B,EAAY,UAAS,GAAM,EAAE,OAAO,QAAQ,SAAW,CAAC,EAAG,UAC5D,EAAK,EAAE,QAAQ,UAAY,MAAgB,EAAG,YAAY,CAAQ,IAEpE,EAAK,KAAK,QAAU,MAAgB,EAAG,SAAS,OAAQ,CAAE,KAAM,OAAQ,SAAA,CAAQ,CAAE,EAC/E,OAAO,EAAE,OAAO,MAAM,OAAO,SAAY,YAC3C,EAAE,OAAO,MAAM,OAAO,QAAQ,KAAM,CAAC,EAEvC,KAAK,OAAO,UAAU,UAAW,CAAC,KAAM,CAAC,CAAC,EAC1C,GAAe,EAAG,IAAI,EACtB,EAAG,QAAU,GACb,EAAQ,IAAI,CACd,OAAS,EAAG,CACV,EAAO,CAAC,CACV,CACF,CAAC,CACH,CAOA,iBAAkB,CAChB,MAAM,EAEJ,KAAK,iBAAgB,EAEvB,OAAA,EAAM,OAAO,EAAG,EAAG,IAAI,EAChB,CACT,CAOA,kBAAmB,CACjB,OAAO,KAAK,gBAAgB,OACzB,GAAO,OAAS,EAAG,OAAS,CAAC,CAAC,KAAK,EAAE,OAAO,MAAM,OAAS,KAAK,EAAE,OAAO,MAAM,QAAU,EAAG,KACnG,EAAM,IAAK,GAAO,EAAG,KAAK,CACxB,CAOA,OAAO,aAAa,EAAI,CACtB,MAAM,EAAU,EAAQ,aAAa,CAAE,EACvC,GAAI,CAAC,KAAK,gBAAiB,OAC3B,MAAM,EAAI,KAAK,gBAAgB,OAC5B,GAAO,EAAG,KAAO,CACxB,EAAM,CAAC,EACH,OAAO,GAAK,EAAE,KAChB,CAMA,OAAO,YAAa,CAClB,IAAI,EACJ,MAAM,EAAM,SAAS,iBAAiB,mBAAmB,EACzD,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,MAAM,EAEJ,EAAI,CAAC,EAED,EAAW,KAAK,OAAO,EAAK,EAAI,CAAC,EAAE,aAAa,cAAc,IAAM,KAAO,EAAK,EAAE,EACtE,IAAI,GAAY,EAAI,CAAQ,EACpC,OAAM,CAClB,CACF,CAgBA,OAAO,KAAK,EAAS,KAAO,EAAM,CAChC,MAAM,EAAQ,KAAK,aAAa,CAAO,EACvC,GAAI,CAAC,EAAO,OACZ,EAAM,EAAE,QAAQ,aAAe,GAC/B,IAAI,EAAM,KACV,OAAI,EAAM,cAAc,QAAQ,CAAE,IAAM,KACtC,EACA,EAAM,CAAE,EAAE,GAAG,CAAI,GAEZ,CACT,CASA,OAAO,MAAM,EAAQ,EAAQ,CAC3B,OAAO,EAAQ,OAAO,EAAQ,CAAM,CACtC,CACA,OAAO,kBAAmB,CACxB,OAAO,GAAgB,CACzB,CAOA,OAAO,IAAI,EAAS,CAClB,GAAS,CAAO,CAClB,CAWA,OAAO,iBAAiB,EAAY,CAClC,GAAiB,iBAAiB,CAAU,CAC9C,CAkBA,OAAO,WAAW,EAAK,CACrB,OAAA,GAAe,WAAW,CAAG,EAC7B,GAA6B,EACtB,EACT,CAUA,OAAO,eAAe,EAAK,CACzB,OAAA,GAAe,CAAG,EACX,EACT,CASA,OAAO,iBAAiB,EAAO,CAC7B,OAAA,GAAiB,CAAK,EACf,EACT,CASA,OAAO,iBAAiB,EAAM,EAAS,CACrC,GAAmB,iBAAiB,EAAM,CAAO,CACnD,CAYA,OAAO,mBAAmB,EAAO,EAAK,CACpC,MAAM,EAEJ,GAAY,qBAEd,OAAK,EAMD,CAAC,GAAO,OAAO,EAAI,YAAe,YACpC,QAAQ,KACN,oCAAoC,CAAK,8CACjD,EACa,IAEL,GAAc,CAAK,GAAK,CAAC,GAAS,CAAK,GACzC,QAAQ,KACN,oCAAoC,CAAK,mCAAmC,CAAK,kCACzF,EACa,KAET,GAAS,CAAE,CAAC,CAAK,EAAG,EAAQ,EAAO,CAAG,CAAC,CAAE,EACzC,GAAW,CAAK,EACT,KAnBL,QAAQ,KACN,oCAAoC,CAAK,oEACjD,EACa,GAiBX,CAOA,OAAO,qBAAqB,EAAO,CACjC,OAAI,GAAS,CAAK,GAAG,GAAW,CAAK,EAC9B,EACT,CAUA,OAAO,cAAc,EAAO,EAAK,CAC/B,OAAA,GAAc,EAAO,CAAG,EACjB,EACT,CAQA,OAAO,gBAAgB,EAAO,CAC5B,OAAA,GAAgB,CAAK,EACd,EACT,CAUA,OAAO,eAAe,EAAO,EAAI,CAC/B,OAAA,GAAe,EAAO,CAAE,EACjB,EACT,CAcA,OAAO,YAAY,EAAM,CACvB,MAAM,EAEJ,GAAY,oBAEd,GAAI,CAAC,EACH,eAAQ,KACN,wGACR,EACa,KAET,MAAM,EAAc,EAAQ,CAAI,EAChC,OAAA,GAA6B,EACtB,CACT,CAOA,OAAO,eAAe,EAAI,CACxB,MAAM,EAEJ,GAAY,gBAEd,OAAO,EAAM,EAAI,CAAE,EAAI,IACzB,CAKA,kBAAmB,CACjB,IAAI,GACH,EAAK,KAAK,cAAgB,MAAgB,EAAG,WAAU,CAC1D,CAOA,cAAe,CACb,IAAI,GACH,EAAK,KAAK,UAAY,MAAgB,EAAG,aAAY,CACxD,CAEA,aAAc,CACZ,IAAI,GACH,EAAK,KAAK,UAAY,MAAgB,EAAG,YAAW,CACvD,CAEA,eAAgB,CACd,IAAI,GACH,EAAK,KAAK,UAAY,MAAgB,EAAG,cAAa,CACzD,CAQA,aAAa,EAAY,CACvB,OAAO,KAAK,OAAO,aAAa,CAAU,CAC5C,CAQA,6BAA6B,EAAG,EAAe,CAC7C,OAAO,KAAK,OAAO,oBAAoB,EAAG,CAAa,CACzD,CAMA,WAAW,EAAY,CACrB,KAAK,OAAO,WAAW,CAAU,CACnC,CAMA,WAAW,EAAY,CACrB,KAAK,OAAO,WAAW,CAAU,CACnC,CAMA,gBAAgB,EAAY,CAC1B,KAAK,OAAO,gBAAgB,CAAU,CACxC,CAOA,eAAe,EAAY,CACzB,OAAO,KAAK,OAAO,eAAe,CAAU,CAC9C,CAOA,YAAY,EAAoB,GAAM,EAAkB,GAAM,CAC5D,KAAK,OAAO,YAAY,EAAmB,CAAe,CAC5D,CASA,iBAAiB,EAAO,EAAS,CAC/B,KAAK,OAAO,iBAAiB,EAAO,CAAO,CAC7C,CAOA,oBAAoB,EAAO,EAAS,CAClC,KAAK,OAAO,oBAAoB,EAAO,CAAO,CAChD,CAQA,mBAAmB,EAAM,EAAe,GAAM,EAAU,OAAQ,CAC9D,IAAI,EACJ,IAAI,EAGF,KAEE,IACF,EAAK,IAEN,EAAK,EAAG,cAAgB,MAAgB,EAAG,2BAA2B,EAAM,EAAc,CAAE,CAC/F,CAQA,mBAAmB,EAAM,EAAe,GAAM,EAAU,OAAQ,CAC9D,IAAI,EACJ,IAAI,EAGF,KAEE,IACF,EAAK,IAEN,EAAK,EAAG,cAAgB,MAAgB,EAAG,2BAA2B,EAAM,EAAc,CAAE,CAC/F,CAQA,mBAAmB,EAAM,EAAe,GAAM,EAAU,OAAQ,CAC9D,IAAI,EACJ,IAAI,EAGF,KAEE,IACF,EAAK,IAEN,EAAK,EAAG,cAAgB,MAAgB,EAAG,2BAA2B,EAAM,EAAc,CAAE,CAC/F,CAMA,iBAAiB,EAAU,OAAQ,CACjC,IAAI,EACJ,IAAI,EAGF,KAEE,IACF,EAAK,GAEP,EAAG,kBAAoB,MACtB,EAAK,EAAG,cAAgB,MAAgB,EAAG,iBAAiB,CAAE,CACjE,CAOA,iBAAiB,EAAI,EAAU,OAAQ,CACrC,IAAI,EACJ,IAAI,EAGF,KAEE,IACF,EAAK,GAEP,EAAG,kBAAoB,MACtB,EAAK,EAAG,cAAgB,MAAgB,EAAG,iBAAiB,EAAI,CAAE,CACrE,CAMA,cAAe,CAEb,OADW,KAAK,EAAE,IAAI,OAAO,cAAc,mBAAmB,CAEhE,CAQA,qBAAqB,EAAM,EAAM,CAC/B,OAAO,KAAK,UAAU,sBAAsB,EAAM,CAAI,CACxD,CAOA,wBAAwB,EAAc,EAAG,CAEvC,OADc,IAAI,GAAM,KAAK,CAAC,EACjB,YAAY,CAAW,EAAE,QACxC,CAOA,uBAAuB,EAAc,EAAG,CAEtC,OADc,IAAI,GAAM,KAAK,CAAC,EACjB,YAAY,CAAW,EAAE,OACxC,CAMA,gBAAiB,CACf,OAAO,KAAK,EAAE,QAAQ,YACxB,CAQA,UAAW,CACT,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACb,MAAO,CAEL,OAAQ,EAAE,WAAW,OACrB,YAAa,EAAE,WAAW,YAC1B,OAAQ,EAAG,OACX,OAAQ,EAAE,UAAU,OACpB,aAAc,EAAG,aACjB,cAAe,EAAG,cAClB,cAAe,EAAG,cAClB,cAAe,EAAG,cAElB,KAAM,EAAG,KACT,KAAM,EAAG,KACT,KAAM,EAAG,KACT,KAAM,EAAG,KACT,QAAS,EAAG,QACZ,QAAS,EAAG,QACZ,SAAU,EAAG,SACb,WAAY,EAAG,WAEf,WAAY,EAAG,WACf,WAAY,EAAG,WACf,YAAa,EAAG,YAEhB,WAAY,EAAE,UAAU,WAExB,eAAgB,EAAG,eACnB,sBAAuB,EAAG,sBAE1B,SAAU,EAAG,SACb,UAAW,EAAG,UACd,UAAW,EAAE,OAAO,UACpB,WAAY,EAAE,OAAO,WAErB,mBAAoB,EAAE,SAAS,mBAC/B,uBAAwB,EAAG,uBAC3B,OAAQ,EAAE,SAAS,OAEnB,QAAS,EAAE,WAAW,QACtB,QAAS,EAAE,WAAW,QACtB,cAAe,EAAE,WAAW,cAC5B,cAAe,EAAE,WAAW,cAC5B,cAAe,EAAE,WAAW,cAC5B,cAAe,EAAE,WAAW,cAC5B,cAAe,EAAE,WAAW,cAC5B,iBAAkB,EAAE,UAAU,iBAC9B,eAAgB,EAAE,UAAU,eAC5B,YAAa,EAAE,WAAW,WAChC,CACE,CASA,yBAAyB,EAAa,EAAgB,CACpD,OAAO,KAAK,cAAc,yBACxB,EACA,CACN,CACE,CAQA,MAAM,EAAK,EAAK,CACd,IAAI,GACH,EAAK,KAAK,IAAI,UAAY,MAAgB,EAAG,kBAAkB,EAAK,CAAG,CAC1E,CAMA,UAAU,EAAY,CACpB,KAAK,aAAa,uBAAuB,CAAU,CACrD,CAQA,QAAQ,EAAU,CAChB,GAAI,CAAC,KAAK,IAAI,QACZ,MAAM,IAAI,MACR,oFACR,EACI,OAAO,KAAK,IAAI,QAAQ,QAAQ,CAAQ,CAC1C,CAQA,aAAa,EAAO,CAClB,GAAI,CAAC,KAAK,IAAI,QACZ,MAAM,IAAI,MACR,oFACR,EACI,OAAO,KAAK,IAAI,QAAQ,aAAa,CAAK,CAC5C,CAOA,YAAY,EAAW,CAAA,EAAI,CACzB,GAAI,CAAC,KAAK,IAAI,QACZ,MAAM,IAAI,MACR,oFACR,EACI,OAAO,KAAK,IAAI,QAAQ,YAAY,CAAQ,CAC9C,CACA,OAAQ,CACN,OAAO,KAAK,EAAE,IAAI,KACpB,CASA,mBAAoB,CAClB,OAAO,KAAK,mBAAqB,KAAK,mBAAmB,cAAa,EAAK,KAC7E,CAWA,eAAgB,CACd,YAAK,kBAAoB,KAClB,KAAK,OAAM,CACpB,CAQA,UAAU,EAAI,CACZ,GAAI,CAAC,KAAK,IAAI,UACZ,MAAM,IAAI,MACR,wFACR,EACI,OAAO,KAAK,IAAI,UAAU,UAAU,CAAE,CACxC,CAOA,SAAU,CACR,GAAI,CAAC,KAAK,IAAI,UACZ,MAAM,IAAI,MACR,wFACR,EACI,OAAO,KAAK,IAAI,UAAU,QAAO,CACnC,CAOA,aAAc,CACZ,GAAI,CAAC,KAAK,IAAI,UACZ,MAAM,IAAI,MACR,wFACR,EACI,OAAO,KAAK,IAAI,UAAU,YAAW,CACvC,CAYA,OAAO,gBAAgB,EAAQ,EAAO,CACpC,UAAW,KAAO,OAAO,KAAK,CAAK,EAAG,CACpC,MAAM,EAAI,OAAO,yBAAyB,EAAO,CAAG,EAChD,GAAK,UAAW,IAAG,EAAO,CAAG,EAAI,EAAE,MACzC,CACF,CAIA,uBAAuB,EAAO,CAC5B,GAAY,gBAAgB,KAAK,EAAE,WAAY,CAAK,CACtD,CAIA,sBAAsB,EAAO,CAC3B,GAAY,gBAAgB,KAAK,EAAE,UAAW,CAAK,CACrD,CAIA,uBAAuB,EAAO,CAC5B,GAAY,gBAAgB,KAAK,EAAE,WAAY,CAAK,CACtD,CAIA,sBAAsB,EAAO,CAC3B,GAAY,gBAAgB,KAAK,EAAE,UAAW,CAAK,CACrD,CAIA,sBAAsB,EAAO,CAC3B,GAAY,gBAAgB,KAAK,EAAE,UAAW,CAAK,CACrD,CAIA,mBAAmB,EAAO,CACxB,GAAY,gBAAgB,KAAK,EAAE,OAAQ,CAAK,CAClD,CACA,uBAAwB,CAClB,KAAK,EAAE,QAAQ,gBAAkB,KAAK,EAAE,OAAO,MAAM,sBACvD,KAAK,cAAa,CAEtB,CAIA,eAAgB,CACd,KAAK,EAAE,QAAQ,YAAc,OAAO,WAAW,IAAM,CACnD,MAAM,EAAK,KAAK,EAAE,QAClB,GAAI,KAAK,MAAQ,EAAG,oBAAqB,CACvC,MAAM,EAAM,KAAK,KAAK,mBAAkB,EACxC,GAAI,EAAI,IAAM,EAAG,oBAAoB,GAAK,EAAI,IAAM,EAAG,oBAAoB,GAAK,EAAI,KAAO,EAAG,oBAAoB,GAChH,MAEJ,CACA,EAAG,QAAU,GACb,EAAG,YAAc,GACjB,KAAK,IAAI,OAAM,CACjB,EAAG,GAAG,CACR,CACA,sBAAuB,CACrB,IAAI,EACJ,cAAc,EAAK,KAAK,EAAE,QAAQ,cAAgB,KAAO,EAAK,MAAM,EACpE,GAAI,CAAE,qBAAsB,CAAM,EAAK,KAAK,EAAE,OAAO,MACjD,OAAO,GAAW,aACpB,EACA,EAAM,GAER,GAAU,KAAK,cAAa,CAC9B,CACF,EAQA,EAAc,GAAa,eAAgB,IAAI,EAC5C,IAAC,GAAa,GACjB,MAAM,EAAQ,CAKZ,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,CACb,CAIA,gBAAgB,EAAW,CAGzB,OAFe,IAAI,UAAS,EACN,gBAAgB,EAAW,eAAe,EAClD,eAChB,CAKA,aAAa,EAAK,EAAO,CACvB,MAAM,EAAW,WAAW,EAAI,eAAe,KAAM,OAAO,CAAC,EACvD,EAAY,WAAW,EAAI,eAAe,KAAM,QAAQ,CAAC,EAC/D,EAAI,eAAe,KAAM,QAAS,EAAW,CAAK,EAClD,EAAI,eAAe,KAAM,SAAU,EAAY,CAAK,EACpD,EAAI,eAAe,KAAM,UAAW,OAAS,EAAW,IAAM,CAAS,CACzE,CAUA,mBAAmB,EAAY,CAC7B,MAAM,EAAI,KAAK,EACT,EAAQ,+BACR,EAAe,EAAE,IAAI,OAAO,iBAChC,2BACN,EACI,GAAI,CAAC,EAAa,OAAQ,OAC1B,MAAM,EAAY,EAAW,iBAAiB,2BAA2B,EACzE,QAAS,EAAI,EAAG,EAAI,EAAa,QAAU,EAAI,EAAU,OAAQ,IAAK,CACpE,IAAI,EACJ,GAAI,CACF,EACA,EAAa,CAAC,EAAE,UAAS,CAC3B,MAAY,CACV,QACF,CACA,MAAM,EAAK,EAAU,CAAC,EAChB,EAAM,SAAS,gBAAgB,GAAS,OAAO,EACrD,EAAI,aAAa,IAAK,EAAG,aAAa,GAAG,GAAK,GAAG,EACjD,EAAI,aAAa,IAAK,EAAG,aAAa,GAAG,GAAK,GAAG,EACjD,EAAI,aAAa,QAAS,EAAG,aAAa,OAAO,GAAK,GAAG,EACzD,EAAI,aAAa,SAAU,EAAG,aAAa,QAAQ,GAAK,GAAG,EAC3D,EAAI,aAAa,OAAQ,CAAO,EAChC,EAAI,eAAe,EAAO,aAAc,CAAO,EAC3C,EAAG,YAAY,EAAG,WAAW,aAAa,EAAK,CAAE,CACvD,CACF,CAQA,eAAe,EAAM,EAAU,CAC7B,OAEE,MAAM,UAAU,MAAM,KAAK,EAAK,iBAAiB,CAAQ,CAAC,CAE9D,CAaA,iBAAiB,EAAI,EAAQ,CAC3B,OAAO,KAAK,CAAM,EAAE,QAAS,GAAS,CAChC,EAAG,MAAM,iBAAiB,CAAI,IAAM,IACtC,EAAG,MAAM,YAAY,EAAM,EAAO,CAAI,CAAC,CAE3C,CAAC,CACH,CAYA,kBAAkB,EAAY,CAC5B,MAAM,EAAI,KAAK,EACf,KAAK,eAAe,EAAY,OAAO,EAAE,QAAS,GAAO,EAAG,OAAM,CAAE,EACpE,KAAK,eACH,EACA,CACE,sBACA,sBACA,2BACA,2BACA,0BACA,0BACA,wBACA,4BACR,EAAQ,KAAK,IAAI,CACjB,EAAM,QAAS,GAAO,CAChB,EAAG,MAAM,YAAY,UAAW,OAAQ,WAAW,CACrD,CAAC,EACD,KAAK,eAAe,EAAY,oBAAoB,EAAE,QAAS,GAAO,CACpE,KAAK,iBAAiB,EAAI,CACxB,UAAW,+BACX,mBAAoB,MACpB,gBAAiB,UACzB,CAAO,CACH,CAAC,EACD,KAAK,eAAe,EAAY,oBAAoB,EAAE,QAAS,GAAO,CACpE,KAAK,iBAAiB,EAAI,CACxB,UAAW,aACX,mBAAoB,SACpB,gBAAiB,UACzB,CAAO,CACH,CAAC,EACG,GAAC,EAAE,OAAO,OAAO,MAAQ,CAAC,EAAE,IAAI,cAAgB,CAAC,EAAE,IAAI,aAAa,SAAS,UAGjF,KAAK,eAAe,EAAY,oBAAoB,EAAE,QAAS,GAAO,CACpE,KAAK,iBAAiB,EAAI,CACxB,QAAS,OACT,SAAU,OACV,QAAS,QACjB,CAAO,EACD,MAAM,EAAK,EAAG,UACR,EAAS,EAAG,SAAS,0BAA0B,GAAK,EAAG,SAAS,2BAA2B,EAC3F,EAAgB,EAAG,SAAS,yBAAyB,GAAK,EAAG,SAAS,4BAA4B,EACpG,EAAG,SAAS,oCAAoC,GAClD,KAAK,iBAAiB,EAAI,CAAE,iBAAkB,QAAQ,CAAE,EAEtD,GACF,KAAK,iBAAiB,EAAI,CAAE,iBAAkB,SAAU,OAAQ,GAAG,CAAE,EAEnE,GACF,KAAK,iBAAiB,EAAI,CAAE,YAAa,MAAM,CAAE,EAE/C,GAAU,GAAiB,EAAG,SAAS,uBAAuB,EAChE,KAAK,iBAAiB,EAAI,CACxB,kBAAmB,aACnB,cAAe,YACzB,CAAS,EACQ,GAAiB,EAAG,SAAS,yBAAyB,EAC/D,KAAK,iBAAiB,EAAI,CACxB,kBAAmB,SACnB,cAAe,QACzB,CAAS,EACQ,GAAiB,EAAG,SAAS,wBAAwB,GAC9D,KAAK,iBAAiB,EAAI,CACxB,kBAAmB,WACnB,cAAe,UACzB,CAAS,CAEL,CAAC,EACD,KAAK,eAAe,EAAY,0BAA0B,EAAE,QACzD,GAAO,CACN,KAAK,iBAAiB,EAAI,CAAE,QAAS,MAAM,CAAE,CAC/C,CACN,EACI,KAAK,eACH,EACA,mCACN,EAAM,QAAS,GAAO,CAChB,KAAK,iBAAiB,EAAI,CAAE,iBAAkB,gBAAgB,CAAE,CAClE,CAAC,EACD,KAAK,eAAe,EAAY,2BAA2B,EAAE,QAC1D,GAAO,CACN,KAAK,iBAAiB,EAAI,CACxB,OAAQ,EAAG,UAAU,SAAS,qBAAqB,EAAI,OAAS,UAChE,cAAe,SACf,QAAS,OACT,cAAe,QACzB,CAAS,CACH,CACN,EACI,KAAK,eAAe,EAAY,yBAAyB,EAAE,QAAS,GAAO,CACzE,KAAK,iBAAiB,EAAI,CACxB,SAAU,WACV,YAAa,MACrB,CAAO,CACH,CAAC,EACD,KAAK,eAAe,EAAY,2BAA2B,EAAE,QAC1D,GAAO,CACN,KAAK,iBAAiB,EAAI,CACxB,SAAU,WACV,QAAS,OACT,cAAe,SACf,kBAAmB,SACnB,OAAQ,UACR,eAAgB,KAC1B,CAAS,CACH,CACN,EACI,KAAK,eAAe,EAAY,6BAA6B,EAAE,QAC5D,GAAO,CACN,KAAK,iBAAiB,EAAI,CAAE,QAAS,MAAM,CAAE,CAC/C,CACN,EACI,KAAK,eACH,EACA,sGACN,EAAM,QAAS,GAAO,CAChB,EAAG,MAAM,YAAY,UAAW,OAAQ,WAAW,CACrD,CAAC,EACH,CAIA,aAAa,EAAQ,CACnB,OAAO,IAAI,QAAS,GAAY,CAC9B,MAAM,EAAI,KAAK,EACf,IAAI,EAAQ,GAAU,EAAE,OAAO,MAAM,QAAQ,OAAO,OAAS,EAAE,OAAO,MAAM,QAAQ,OAAO,MAAQ,EAAE,QAAQ,SACxG,IACH,EAAQ,GAEV,MAAM,EAAQ,EAAE,QAAQ,SAAW,EAC7B,EAAS,EAAE,QAAQ,UAAY,EAC/B,EAEJ,EAAE,IAAI,OAAO,UAAU,EAAI,EAE7B,EAAW,MAAM,MAAQ,EAAQ,KACjC,EAAW,MAAM,OAAS,EAAS,KACnC,KAAK,mBAAmB,CAAU,EAClC,KAAK,kBAAkB,CAAU,EACjC,MAAM,EAAiB,IAAI,cAAa,EAAG,kBAAkB,CAAU,EACvE,IAAI,EAAY;;;;;;;mBAOH,EAAE,QAAQ,QAAQ,eAAe,EAAE,QAAQ,SAAS;;qEAEF,CAAK,cAAc,CAAM;gBAC9E,CAAc;;;;QAKxB,MAAM,EAAU,KAAK,gBAAgB,CAAS,EAC1C,IAAU,GACZ,KAAK,aAAa,EAAS,CAAK,EAElC,KAAK,sBAAsB,CAAO,EAAE,KAAK,IAAM,CAC7C,EAAY,IAAI,cAAa,EAAG,kBAAkB,CAAO,EACzD,EAAQ,EAAU,QAAQ,UAAW,QAAQ,CAAC,CAChD,CAAC,CACH,CAAC,CACH,CAIA,sBAAsB,EAAS,CAC7B,MAAM,EAAS,EAAQ,qBAAqB,OAAO,EAC7C,EAAW,MAAM,KAAK,CAAM,EAAE,IAAK,GAAQ,CAC/C,MAAM,EAAO,EAAI,eAAe,+BAAgC,MAAM,EACtE,OAAI,GAAQ,CAAC,EAAK,WAAW,OAAO,EAC3B,KAAK,iBAAiB,CAAI,EAAE,KAAM,GAAW,CAClD,EAAI,eAAe,+BAAgC,OAAQ,CAAM,CACnE,CAAC,EAAE,MAAO,GAAU,CAClB,QAAQ,MAAM,oCAAqC,CAAK,CAC1D,CAAC,EAEI,QAAQ,QAAO,CACxB,CAAC,EACD,OAAO,QAAQ,IAAI,CAAQ,CAC7B,CAIA,iBAAiB,EAAK,CACpB,OAAI,EAAY,MAAK,EAAW,QAAQ,QAAQ,CAAG,EAC5C,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,MAAM,EAAM,IAAI,MAChB,EAAI,YAAc,YAClB,EAAI,OAAS,IAAM,CACjB,MAAM,EAAS,SAAS,cAAc,QAAQ,EAC9C,EAAO,MAAQ,EAAI,MACnB,EAAO,OAAS,EAAI,OACpB,MAAM,EAAM,EAAO,WAAW,IAAI,EAC9B,GAAK,EAAI,UAAU,EAAK,EAAG,CAAC,EAChC,EAAQ,EAAO,UAAS,CAAE,CAC5B,EACA,EAAI,QAAU,EACd,EAAI,IAAM,CACZ,CAAC,CACH,CACA,QAAS,CACP,OAAO,IAAI,QAAS,GAAY,CAC9B,KAAK,aAAY,EAAG,KAAM,GAAY,CACpC,MAAM,EAAU,IAAI,KAAK,CAAC,CAAO,EAAG,CAClC,KAAM,6BAChB,CAAS,EACD,EAAQ,IAAI,gBAAgB,CAAO,CAAC,CACtC,CAAC,CACH,CAAC,CACH,CAIA,QAAQ,EAAU,CAChB,OAAI,EAAY,MAAK,EAAW,QAAQ,QAAQ,CAAE,OAAQ,EAAE,CAAE,EACvD,IAAI,QAAS,GAAY,CAC9B,MAAM,EAAI,KAAK,EACT,EAAQ,EAAW,EAAS,OAAS,EAAS,MAAQ,EAAE,QAAQ,SAAW,EAC3E,EAAS,SAAS,cAAc,QAAQ,EAC9C,EAAO,MAAQ,EAAE,QAAQ,SAAW,EACpC,EAAO,OAAS,SAAS,EAAE,IAAI,OAAO,MAAM,OAAQ,EAAE,EAAI,EAC1D,MAAM,EAAW,EAAE,OAAO,MAAM,aAAe,eAAiB,CAAC,EAAE,OAAO,MAAM,WAAa,OAAS,EAAE,OAAO,MAAM,WAC/G,EAAM,EAAO,WAAW,IAAI,EAC7B,IACL,EAAI,UAAY,EAChB,EAAI,SAAS,EAAG,EAAG,EAAO,MAAO,EAAO,MAAM,EAC9C,KAAK,aAAa,CAAK,EAAE,KAAM,GAAY,CACzC,MAAM,EAAS,sBAAwB,mBAAmB,CAAO,EAC3D,EAAM,IAAI,MAChB,EAAI,YAAc,YAClB,EAAI,OAAS,IAAM,CACjB,EAAI,UAAU,EAAK,EAAG,CAAC,EACvB,MAAM,EAAa,EACnB,GAAI,EAAW,SAAU,CACvB,MAAM,EAAO,EAAW,SAAQ,EAChC,EAAQ,CAAE,KAAA,CAAI,CAAE,CAClB,KAAO,CACL,MAAM,EAAS,EAAO,UAAU,WAAW,EAC3C,EAAQ,CAAE,OAAA,CAAM,CAAE,CACpB,CACF,EACA,EAAI,IAAM,CACZ,CAAC,EACH,CAAC,CACH,CACA,aAAc,CACZ,KAAK,OAAM,EAAG,KAAM,GAAQ,CAC1B,KAAK,gBACH,EACA,KAAK,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,SACvC,MACR,CACI,CAAC,CACH,CACA,aAAc,CACZ,MAAM,EAAQ,KAAK,EAAE,OAAO,MAAM,QAAQ,OAAO,MAC3C,EAAQ,KAAK,EAAE,OAAO,MAAM,QAAQ,OAAO,MAC3C,EAAS,EAAQ,CAAE,MAAA,CAAK,EAAK,EAAQ,CAAE,MAAA,CAAK,EAAK,OACvD,KAAK,QAAQ,CAAM,EAAE,KAAK,CAAC,CAAE,OAAA,EAAQ,KAAA,CAAI,IAAO,CAC1C,EACF,UAAU,iBAAiB,EAAM,KAAK,EAAE,QAAQ,QAAU,MAAM,EAEhE,KAAK,gBACH,EACA,KAAK,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,SACvC,MACV,CAEI,CAAC,CACH,CAEA,YAAY,CACV,OAAA,EACA,SAAA,EACA,gBAAA,EAAkB,IAClB,cAAA,EAAgB;CACpB,EAAK,CACD,MAAM,EAAI,KAAK,EACV,IAAQ,EAAS,EAAE,OAAO,QAC/B,IAAI,EAAU,CAAA,EACd,MAAM,EAAO,CAAA,EACb,IAAI,EAAS,GACb,MAAM,EAAe,SACf,EAAU,EAAE,WAAW,OAAO,IAAI,CAAC,EAAG,IACnC,EAAE,QAAQ,uBAAuB,QAAQ,CAAC,IAAM,GAAK,EAAI,CAAA,CACjE,EACK,EAAW,GAAQ,CACvB,GAAI,GAAO,MAAQ,EAAQ,SAAS,CAAG,EAAG,OAAO,EACjD,MAAM,EAAI,OAAO,CAAG,EACpB,MAAO,eAAe,KAAK,CAAC,EAAI,IAAI,CAAC,GAAK,CAC5C,EACM,EAAwB,GACxB,OAAO,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,mBAAsB,WAC1D,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,kBAAkB,CAAG,EAE5D,EAAE,OAAO,MAAM,OAAS,YAAc,OAAO,CAAG,EAAE,QAAU,GACvD,IAAI,KAAK,CAAG,EAAE,aAAY,EAE5B,EAAQ,SAAS,CAAG,EAAI,EAAM,EAAQ,EAAI,MAAM,CAAe,EAAE,KAAK,EAAE,CAAC,EAE5E,EAAqB,GAClB,OAAO,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,gBAAmB,WAAa,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,eAAe,CAAK,EAAI,EAAQ,CAAK,EAEnJ,EAAsB,KAAK,IAC/B,GAAG,EAAO,IAAK,GACN,EAAE,KAAO,EAAE,KAAK,OAAS,CACjC,CACP,EACU,EAAa,IAAI,GAAK,KAAK,CAAC,EAC5B,EAAY,IAAI,GAAU,KAAK,EAAG,CACtC,MAAO,KAAK,IAAI,MAChB,UAAW,KAAK,IAAI,SAC1B,CAAK,EACK,EAAU,GAAM,CACpB,IAAI,EAAM,GACV,GAAI,CAAC,EAAE,QAAQ,WACb,EAAM,EAAE,OAAO,OAAO,CAAC,MAClB,CACL,GAAI,EAAE,OAAO,MAAM,OAAS,YAAc,EAAE,OAAO,MAAM,sBACvD,GAAI,EAAE,QAAQ,gBAAiB,CAC7B,MAAM,EAAc,EAAE,WAAW,iBAAiB,CAAC,EAE7C,EADK,IAAI,GAAO,KAAK,IAAI,CAAC,EACR,2BAA0B,EAClD,EAAM,EAAY,EAAE,UAAU,OAAO,CAAC,EAAG,CACvC,YAAa,EACb,eAAgB,EAChB,EAAA,CACd,CAAa,CACH,MACE,EAAM,EAAU,SACd,EAAE,UAAU,OACZ,EAAE,UAAU,gBACZ,EACA,CACd,EAAc,KAGF,EAAE,OAAO,MAAM,OAAS,aACtB,EAAE,OAAO,MAAM,WAAW,OAC5B,EAAM,EAAE,OAAO,MAAM,WAAW,CAAC,EACxB,EAAE,OAAO,OAAO,SACzB,EAAM,EAAE,OAAO,OAAO,CAAC,GAG7B,CACA,OAAI,IAAQ,KAAa,aACrB,MAAM,QAAQ,CAAG,IACnB,EAAM,EAAI,KAAK,GAAG,GAEb,EAAQ,SAAS,CAAG,EAAI,EAAM,EAAI,MAAM,CAAe,EAAE,KAAK,EAAE,EACzE,EACM,EAA2B,IACxB,CAAC,GAAG,MAAM,CAAmB,CAAC,EAAE,IAAI,IAAM,EAAE,EAE/C,EAAwB,CAAC,EAAG,IAAO,CACvC,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAIxB,GAHI,EAAQ,QAAU,IAAO,GAC3B,EAAK,KAAK,EAAQ,KAAK,CAAe,CAAC,EAErC,EAAE,KAAM,CACV,MAAM,EAAU,EAAE,KAAK,OAAS,EAAE,KAAO,EAAwB,EACjE,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,EAAU,CAAA,EACV,IAAI,EAAM,EAAO,CAAC,EAClB,GAAI,IAAQ,YAQZ,IAPK,IACC,EAAW,WAAU,EACvB,EAAM,EAAO,CAAE,EAAE,KAAK,CAAC,EAAE,EAChB,EAAW,gBAAe,IACnC,EAAM,EAAO,CAAE,EAAE,KAAK,CAAC,EAAI,EAAO,CAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EAAI,KAGnD,IAAO,EAAG,CACZ,EAAQ,KAAK,EAAqB,CAAG,CAAC,EACtC,QAAS,EAAK,EAAG,EAAK,EAAE,WAAW,OAAO,OAAQ,IAAM,CACtD,MAAM,EAAQ,EAAW,WAAU,GAAM,EAAK,EAAO,CAAE,EAAE,KAAK,CAAC,IAAM,KAAO,OAAS,EAAG,EAAI,EAAQ,CAAE,EAAE,CAAC,EACzG,EAAQ,KAAK,EAAkB,CAAK,CAAC,CACvC,CACF,EACI,EAAE,OAAO,MAAM,OAAS,eAAiB,EAAE,MAAQ,EAAE,OAAS,iBAChE,EAAQ,IAAG,EACX,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,EAC9C,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,EAC9C,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,EAC9C,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,IAE5C,EAAE,OAAO,MAAM,OAAS,WAAa,EAAE,MAAQ,EAAE,OAAS,aAC5D,EAAQ,IAAG,EACX,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,EAC9C,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,EAC9C,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,EAC9C,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,EAC9C,EAAQ,KAAK,EAAE,WAAW,cAAc,CAAE,EAAE,CAAC,CAAC,GAE5C,EAAE,OAAO,MAAM,OAAS,aAC1B,EAAQ,IAAG,EACX,EAAQ,KAAK,EAAE,UAAU,iBAAiB,CAAE,EAAE,CAAC,CAAC,EAChD,EAAQ,KAAK,EAAE,UAAU,eAAe,CAAE,EAAE,CAAC,CAAC,IAE5C,EAAE,OAAO,MAAM,OAAS,UAAY,EAAE,MAAQ,EAAE,OAAS,YAC3D,EAAQ,IAAG,EACX,EAAQ,MAAM,EAAK,EAAE,WAAW,gBAAgB,CAAE,IAAM,KAAO,OAAS,EAAG,CAAC,CAAC,EAC7E,EAAQ,MAAM,EAAK,EAAE,WAAW,gBAAgB,CAAE,IAAM,KAAO,OAAS,EAAG,CAAC,CAAC,EAC7E,EAAQ,MAAM,GAAM,GAAM,EAAK,EAAE,WAAW,mBAAmB,CAAE,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,SAAW,KAAO,EAAK,CAAC,GAE1I,EAAQ,QACV,EAAK,KAAK,EAAQ,KAAK,CAAe,CAAC,EAE3C,CACF,CACF,EACM,EAAuB,IAAM,CACjC,MAAM,EAA6B,IAAI,IACjC,EAAO,CAAA,EACb,EAAO,QAAQ,CAAC,EAAG,IAAO,CACH,GAAE,KAAK,QAAS,GAAa,CAChD,IAAI,EAAK,EACT,GAAI,EAAW,WAAU,EACvB,EAAM,EAAS,EACf,EAAQ,EAAS,UACR,EAAW,gBAAe,EACnC,EAAM,EAAS,CAAC,EAChB,EAAQ,EAAS,CAAC,MAElB,QAGF,EAAK,CAAG,IACN,EAAK,CAAG,EAAI,MACV,EAAO,MACrB,EAAc,KAAK,EAAE,GAEX,EAAK,CAAG,EAAE,CAAE,EAAI,EAAkB,CAAK,EACvC,EAAW,IAAI,CAAG,CACpB,CAAC,CACH,CAAC,EACG,EAAQ,QACV,EAAK,KAAK,EAAQ,KAAK,CAAe,CAAC,EAEzC,MAAM,KAAK,CAAU,EAAE,KAAI,EAAG,QAAS,GAAQ,CAC7C,MAAM,EAEJ,EAAK,CAAG,EAEV,EAAK,KAAK,CAAC,EAAqB,CAAG,EAAG,GAAG,CAAM,EAAE,KAAK,CAAe,CAAC,CACxE,CAAC,CACH,EACA,EAAQ,KAAK,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,cAAc,EACzD,EAAE,OAAO,MAAM,OAAS,WAC1B,EAAQ,KAAK,SAAS,EACtB,EAAQ,KAAK,IAAI,EACjB,EAAQ,KAAK,QAAQ,EACrB,EAAQ,KAAK,IAAI,EACjB,EAAQ,KAAK,SAAS,GACb,EAAE,OAAO,MAAM,OAAS,eACjC,EAAQ,KAAK,MAAM,EACnB,EAAQ,KAAK,MAAM,EACnB,EAAQ,KAAK,KAAK,EAClB,EAAQ,KAAK,OAAO,GACX,EAAE,OAAO,MAAM,OAAS,YACjC,EAAQ,KAAK,SAAS,EACtB,EAAQ,KAAK,SAAS,GACb,EAAE,OAAO,MAAM,OAAS,UACjC,EAAQ,KAAK,SAAS,EACtB,EAAQ,KAAK,SAAS,EACtB,EAAQ,KAAK,cAAc,GAE3B,EAAO,IAAI,CAAC,EAAG,IAAO,CACpB,MAAM,GAAS,EAAE,KAAO,EAAE,KAAO,UAAU,CAAE,IAAM,GAC/C,EAAE,QAAQ,YACZ,EAAQ,KACN,EAAM,MAAM,CAAe,EAAE,KAAK,EAAE,EAAI,EAAM,MAAM,CAAe,EAAE,KAAK,EAAE,EAAI,UAAU,CAAE,EACxG,CAEM,CAAC,EAEE,EAAE,QAAQ,aACb,EAAQ,KAAK,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,WAAW,EAC1D,EAAK,KAAK,EAAQ,KAAK,CAAe,CAAC,GAErC,CAAC,EAAE,QAAQ,oBAAsB,EAAE,QAAQ,YAAc,CAAC,EAAE,OAAO,MAAM,WAAW,QAAU,CAAC,EAAE,OAAO,OAAO,OACjH,EAAoB,EAEpB,EAAO,IAAI,CAAC,EAAG,IAAO,CAChB,EAAE,QAAQ,WACZ,EAAsB,EAAG,CAAE,GAE3B,EAAU,CAAA,EACV,EAAQ,KAAK,EAAqB,EAAE,UAAU,OAAO,CAAE,CAAC,CAAC,EACzD,EAAQ,KAAK,EAAkB,EAAQ,CAAE,CAAC,CAAC,EAC3C,EAAK,KAAK,EAAQ,KAAK,CAAe,CAAC,EAE3C,CAAC,EAEH,GAAU,EAAK,KAAK,CAAa,EACjC,KAAK,gBACH,gCAAkC,mBAAmB,EAAe,CAAM,EAC1E,GAAsB,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,SACxD,MACN,CACE,CAMA,gBAAgB,EAAM,EAAU,EAAK,CACnC,GAAI,EAAY,MAAK,EAAI,OACzB,MAAM,EAAe,SAAS,cAAc,GAAG,EAC/C,EAAa,KAAO,EACpB,EAAa,UAAY,GAAsB,KAAK,EAAE,QAAQ,SAAW,EACzE,SAAS,KAAK,YAAY,CAAY,EACtC,EAAa,MAAK,EAClB,SAAS,KAAK,YAAY,CAAY,CACxC,CACF,CACA,GAAW,iBAAiB,CAAE,QAAS,EAAO,CAAE,EAChD,MAAM,GAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAC5B,IAAI,GAAY,KAAe,CAI7B,YAAY,EAAO,CACjB,KAAK,EAAI,EAAM,EACf,KAAK,MAAQ,CACf,CACA,iBAAkB,CAChB,GAAI,EAAY,MAAK,EAAI,OAAO,KAChC,MAAM,EAAa,SAAS,cAAc,OAAO,EACjD,EAAW,aAAa,OAAQ,UAAU,EAC1C,MAAM,EAAQ,KAAK,EAAE,OAAO,MAAM,MAC9B,GACF,EAAW,aAAa,QAAS,CAAK,EAExC,MAAM,EAAO,SAAS,eAAe,EAAmB,EACxD,OAAA,EAAW,YAAY,CAAI,EACpB,CACT,CACA,qBAAsB,CAEpB,MAAM,EADI,KAAK,EACW,IAAI,OAAO,cAAc,oBAAoB,EACvE,GAAI,CAAC,EACH,MAAO,CAAE,KAAM,EAAG,KAAM,CAAC,EAE3B,KAAM,CAAE,MAAO,EAAsB,OAAQ,CAAqB,EAAK,EAAgB,sBAAqB,EAC5G,MAAO,CACL,KAAM,EACN,KAAM,CACZ,CACE,CACA,uBAAwB,CACtB,IAAI,EACJ,MAAM,EAAe,KAAK,gBAAe,EACrC,KAAK,EAAE,OAAO,MAAM,mBAAqB,IAAS,KACnD,EAAK,KAAK,EAAE,IAAI,kBAAoB,MAAgB,EAAG,YAAY,CAAY,EAEpF,CAKA,iBAAiB,EAAW,EAAU,CACpC,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACf,GAAI,EAAE,QAAQ,YAAc,EAAE,OAAO,MAAM,OAAS,YAAa,CAC/D,EAAE,QAAQ,QAAU,GACpB,IAAI,EAAW,KACX,EAAY,KAEhB,GADA,EAAE,QAAQ,aAAe,CAAA,EACrB,EAAE,QAAQ,WAAY,CAKxB,GAJA,GAAY,EAAK,MAAM,UAAU,KAAK,KACpC,EAAE,IAAI,OAAO,iBAAiB,oBAAoB,EACjD,GAAO,EAAG,aAAa,gBAAgB,IAAM,OAAO,CAAS,CACxE,IAAc,KAAO,EAAK,KACd,CAAC,EAAU,OACf,EAAY,UAAU,EAAK,EAAS,aAAa,gBAAgB,IAAM,KAAO,EAAK,GAAI,EAAE,CAC3F,KAAO,CAIL,GAHA,EAAW,EAAE,IAAI,OAAO,cACtB,2BAA2B,EAAY,CAAC,IAClD,EACY,CAAC,EAAU,OACf,EAAY,UAAU,EAAK,EAAS,aAAa,KAAK,IAAM,KAAO,EAAK,GAAI,EAAE,EAAI,CACpF,CA+BA,GA9BI,EAC0B,CAC1B,CACE,GAAI,EAAE,QAAQ,gBACd,IAAK,EAAE,QAAQ,sBAC3B,EACU,CACE,GAAI,EAAE,QAAQ,yBACd,IAAK,EAAE,QAAQ,+BAC3B,CACA,EAC4B,QAAS,GAAM,CACjC,MAAM,EAEJ,EAAE,GAEE,EAEJ,EAAE,IAEJ,KAAK,oBACH,EACA,EAEA,CACZ,CACQ,CAAC,EAED,KAAK,WAAW,CAAE,SAAA,EAAU,UAAA,CAAS,CAAE,EAErC,EAAE,OAAO,MAAM,cAAc,QAAS,CACxC,MAAM,EAAa,EAAE,IAAI,OAAO,cAC9B,kCAAkC,EAAY,CAAC,IACzD,EACQ,GAAI,EAAY,CACd,MAAM,EAAc,EAAE,QAAQ,uBAAuB,SAAS,CAAS,GAAK,EAAE,QAAQ,gCAAgC,SAAS,CAAS,EACxI,EAAW,aACT,eACA,EAAc,OAAS,OACnC,EACU,MAAM,EAAe,EAAW,cAC9B,yBACZ,EACgB,EAAa,EAAe,EAAa,YAAc,EAAE,WAAW,YAAY,CAAS,EACzF,EAAa,EAAc,SAAW,UAC5C,EAAW,aACT,aACA,GAAG,CAAU,KAAK,CAAU,mCACxC,CACQ,CACF,CACF,KAAO,CAGL,GAFA,EAAE,QAAQ,QAAU,GACpB,EAAE,QAAQ,aAAe,CAAA,EACrB,EACF,KAAK,oBACH,EAAE,QAAQ,gBACV,EAAE,QAAQ,uBACV,CACV,MACa,CACL,MAAM,EAAS,KAAK,yBAAyB,CAAE,UAAW,CAAS,CAAE,EACrE,KAAK,MAAM,aACT,EACA,EAAE,OAAO,MAAM,WAAW,iBAAiB,OACrD,CACM,CACA,GAAI,EAAE,OAAO,MAAM,cAAc,QAAS,CACxC,MAAM,EAAa,EAAE,IAAI,OAAO,cAC9B,kCAAkC,EAAY,CAAC,IACzD,EACQ,GAAI,EAAY,CACd,MAAM,EAAc,EAAE,QAAQ,uBAAuB,SAAS,CAAS,EACvE,EAAW,aACT,eACA,EAAc,OAAS,OACnC,EACU,MAAM,EAAe,EAAW,cAC9B,yBACZ,EACgB,EAAa,EAAe,EAAa,YAAc,EAAE,WAAW,YAAY,CAAS,EACzF,EAAa,EAAc,SAAW,UAC5C,EAAW,aACT,aACA,GAAG,CAAU,KAAK,CAAU,mCACxC,CACQ,CACF,CACF,CACF,CAYA,uBAAuB,EAAQ,CAC7B,MAAM,EAAO,KAAK,EAAE,OAAO,MAAM,KACjC,OAAK,IAAS,OAAS,IAAS,SAAW,IAAS,aAAe,IAAS,aAAe,EAAO,SAAW,GAAK,EAAO,CAAC,GAAK,OAAO,EAAO,CAAC,GAAM,UAAY,MAAM,QAAQ,EAAO,CAAC,EAAE,IAAI,EACnL,EAAO,CAAC,EAAE,KAEZ,CACT,CAOA,gBAAgB,EAAY,CAC1B,OAAI,KAAK,EAAE,OAAO,MAAM,OAAS,QAAU,GAAc,MAAM,QAAQ,EAAW,IAAI,EAC7E,EAAW,KAEb,GAAc,OAAO,GAAe,SAAW,EAAW,EAAI,CACvE,CAQA,iBAAiB,EAAW,EAAG,EAAO,CACpC,MAAM,EAAQ,EAAU,CAAC,EACzB,GAAI,KAAK,EAAE,OAAO,MAAM,OAAS,QAAU,GAAS,MAAM,QAAQ,EAAM,IAAI,EAAG,CAC7E,EAAM,KAAO,MAAM,QAAQ,CAAK,EAAI,EAAQ,CAAA,EAC5C,MACF,CACI,GAAS,OAAO,GAAU,SAC5B,EAAM,EAAI,EAEV,EAAU,CAAC,EAAI,CAEnB,CAEA,yBAAyB,CAAE,UAAA,CAAS,EAAI,CACtC,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAS,EAAQ,MAAM,EAAE,OAAO,MAAM,EAC5C,GAAI,EAAG,WAAY,CACjB,MAAM,EAAQ,EAAE,OAAO,MAAM,EAAG,sBAAsB,CAAS,CAAC,EAC1D,EAAe,CACnB,MAAO,EACP,KAAM,EAAO,CAAS,EAAE,KAAK,MAAK,EAClC,KAAM,EAAO,CAAS,EAAE,MAAQ,EAAE,OAAO,MAAM,KAI/C,MAAO,EAAG,aAAe,CAAA,GAAI,CAAS,CAC9C,EACM,GAAI,GAAS,EAAM,MAAQ,EAAM,WAC3B,EAAG,gCAAgC,QAAQ,CAAS,EAAI,IAC1D,EAAG,yBAAyB,KAAK,CAAY,EAC7C,EAAG,gCAAgC,KAAK,CAAS,WAG/C,EAAG,uBAAuB,QAAQ,CAAS,EAAI,EAAG,CACpD,EAAG,gBAAgB,KAAK,CAAY,EACpC,EAAG,uBAAuB,KAAK,CAAS,EACxC,MAAM,EAAsB,EAAG,aAAa,QAAQ,CAAS,EAC7D,EAAG,aAAa,OAAO,EAAqB,CAAC,CAC/C,CAEJ,SACM,EAAG,uBAAuB,QAAQ,CAAS,EAAI,EAAG,CACpD,MAAM,EAAY,KAAK,uBAAuB,CAAM,EACpD,EAAG,gBAAgB,KAAK,CACtB,MAAO,EAGP,KAAM,KAAK,gBAAgB,EAAU,CAAS,CAAC,EAC/C,MAEG,GAAM,EAAK,EAAE,OAAO,OAAO,CAAS,IAAM,KAAO,OAAS,EAAG,OAAS,KAAO,EAAK,OAGrF,MAAO,EAAG,aAAe,CAAA,GAAI,CAAS,CAChD,CAAS,EACD,EAAG,uBAAuB,KAAK,CAAS,CAC1C,CAEF,MAAM,EAAc,EAAG,WAAa,EAAE,OAAO,OAAO,OAAS,KAAK,uBAAuB,CAAM,EAAE,OACjG,OAAA,EAAG,mBAAqB,EAAG,gBAAgB,OAAS,EAAG,yBAAyB,SAAW,EACpF,KAAK,gCAAgC,CAAM,CACpD,CAEA,WAAW,CAAE,SAAA,EAAU,UAAA,CAAS,EAAI,CAClC,MAAM,EAAI,KAAK,EACT,EAAS,KAAK,yBAAyB,CAC3C,UAAA,CACN,CAAK,EACK,EAAiB,EAAS,WAChC,QAAS,EAAK,EAAG,EAAK,EAAe,OAAQ,IACvC,EAAe,CAAE,EAAE,UAAU,SAAS,gCAAgC,IACpE,EAAe,CAAE,EAAE,UAAU,SAAS,iBAAiB,EACzD,EAAe,CAAE,EAAE,UAAU,OAAO,iBAAiB,EAErD,EAAe,CAAE,EAAE,UAAU,IAAI,iBAAiB,GAIxD,KAAK,MAAM,aACT,EACA,EAAE,OAAO,MAAM,WAAW,iBAAiB,OACjD,CACE,CAMA,oBAAoB,EAAiB,EAAe,EAAW,CAC7D,MAAM,EAAI,KAAK,EACf,IAAI,EAAS,EAAQ,MAAM,EAAE,OAAO,MAAM,EAC1C,GAAI,EAAgB,OAAS,EAAG,CAC9B,QAAS,EAAI,EAAG,EAAI,EAAgB,OAAQ,IAC1C,GAAI,EAAgB,CAAC,EAAE,QAAU,EAAW,CAC1C,GAAI,EAAE,QAAQ,WACZ,EAAO,CAAS,EAAE,KAAO,EAAgB,CAAC,EAAE,KAAK,MAAK,EACtD,EAAO,CAAS,EAAE,OAAS,OACtB,CACL,MAAM,EAAY,KAAK,uBAAuB,CAAM,EACpD,KAAK,iBAAiB,EAAW,EAAW,EAAgB,CAAC,EAAE,IAAI,CACrE,CACA,EAAgB,OAAO,EAAG,CAAC,EAC3B,EAAc,OAAO,EAAG,CAAC,EACzB,EAAE,QAAQ,aAAa,KAAK,CAAS,EACrC,GACF,CAEF,EAAS,KAAK,gCAAgC,CAAM,EACpD,KAAK,MAAM,aACT,EACA,EAAE,OAAO,MAAM,WAAW,iBAAiB,OACnD,CACI,CACF,CAIA,gCAAgC,EAAQ,CACtC,MAAM,EAAI,KAAK,EACf,IAAI,EAAY,EAChB,GAAI,EAAE,QAAQ,WACZ,EAAO,QAAQ,CAAC,EAAG,IAAO,CAClB,EAAE,QAAQ,uBAAuB,QAAQ,CAAE,EAAI,GAAK,EAAE,QAAQ,gCAAgC,QAAQ,CAAE,EAAI,IAChH,EAAO,CAAE,EAAE,KAAO,CAAA,EAClB,IAEJ,CAAC,MACI,CACL,MAAM,EAAY,KAAK,uBAAuB,CAAM,EACpD,EAAU,QAAQ,CAAC,EAAG,IAAO,CACrB,EAAE,QAAQ,uBAAuB,QAAQ,CAAE,EAAI,IACnD,KAAK,iBAAiB,EAAW,EAAI,CAAC,EACtC,IAEJ,CAAC,CACH,CACA,MAAM,EAAc,EAAE,QAAQ,WAAa,EAAO,OAAS,KAAK,uBAAuB,CAAM,EAAE,OAC/F,OAAA,EAAE,QAAQ,mBAAqB,IAAc,EACtC,CACT,CACF,EACA,MAAM,GAAS,6BACf,MAAM,EAAsB,CAK1B,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,MAAQ,KACb,KAAK,QAAU,KACf,KAAK,aAAe,KACpB,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,MAAQ,KACb,KAAK,YAAc,CAAA,EACnB,KAAK,iBAAmB,GACxB,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,CACjD,CAEA,eAAgB,CACd,MAAM,EAAM,KAAK,EAAE,OAAO,YAAY,QAAQ,WAAW,eACzD,OAAI,OAAO,EAAI,WAAc,WAAmB,EAAI,UAC5C,GAAM,CACZ,GAAI,CAAC,OAAO,SAAS,CAAC,EAAG,OAAO,OAAO,CAAC,EACxC,MAAM,EAAM,KAAK,IAAI,CAAC,EACtB,OAAI,GAAO,IAAY,EAAE,QAAQ,CAAC,EAC9B,GAAO,GAAW,EAAE,QAAQ,CAAC,EAC1B,EAAE,QAAQ,CAAC,CACpB,CACF,CAKA,OAAO,UAAU,EAAG,CAClB,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,GAAO,GAAM,GAAM,GAAM,EAA0B,GAAE,SAAW,KAAO,OAAS,EAAG,cAAgB,KAAO,OAAS,EAAG,UAAY,KAAO,OAAS,EAAG,aAAe,KAAO,OAAS,EAAG,eAC7L,MAAO,CAAC,EAAE,GAAO,EAAI,QACvB,CAKA,MAAO,CACL,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAChC,MAAM,EAAI,KAAK,EACT,EAEJ,EAAE,IAAI,aAER,GAAI,CAAC,EAAc,OACnB,MAAM,EAAM,EAAE,OAAO,YAAY,QAAQ,WAAW,eAC9C,EAAW,EAAE,OAAO,OAAO,SAC3B,EAAa,IAAa,QAAU,IAAa,QACjD,GAAa,GAAM,EAAK,EAAI,QAAU,KAAO,OAAS,EAAG,OAAS,KAAO,EAAK,EAC9E,EAAc,EAAY,EAC1B,EAAqB,EAAI,WAAa,GAAK,EAC3C,EAAsB,EAAI,WAAa,GAAK,EAC5C,EAAgB,EAAI,WAAa,GAAK,EACtC,EAAc,KAAK,oBAAoB,EAAa,EAAI,OAAS,EAAI,MAAO,CAAU,EACtF,EAAiB,EAAI,UACrB,EAAW,EAAa,KAAK,IAAI,EAAiB,EAAc,EAAG,CAAa,EAAI,EAAc,EAAqB,EACvH,EAAY,EAAa,EAAc,EAAsB,EAAI,EAAiB,EAAc,EAChG,EAAqB,EAAiB,EACtC,GAAwB,EAAW,GAAsB,EACzD,EAAS,EAAa,IAAa,OAAS,EAAuB,EAAuB,EAAc,EACxG,EAAS,EAAa,EAAsB,IAAa,MAAQ,EAAc,EAC/E,EAAM,EAAY,gBAAgB,GAAQ,KAAK,EACrD,EAAI,aAAa,QAAS,oCAAoC,EAC9D,EAAI,aAAa,QAAS,OAAO,CAAQ,CAAC,EAC1C,EAAI,aAAa,SAAU,OAAO,CAAS,CAAC,EAC5C,EAAI,aAAa,WAAY,SAAS,EACtC,MAAM,EAAO,EAAY,gBAAgB,GAAQ,MAAM,EACjD,EAAS,+BAA+B,EAAE,QAAQ,IAAI,GACtD,EAAa,EAAY,gBAAgB,GAAQ,gBAAgB,EACvE,EAAW,aAAa,KAAM,CAAM,EAChC,GACF,EAAW,aAAa,KAAM,GAAG,EACjC,EAAW,aAAa,KAAM,GAAG,EACjC,EAAW,aAAa,KAAM,GAAG,EACjC,EAAW,aAAa,KAAM,GAAG,IAEjC,EAAW,aAAa,KAAM,GAAG,EACjC,EAAW,aAAa,KAAM,GAAG,EACjC,EAAW,aAAa,KAAM,GAAG,EACjC,EAAW,aAAa,KAAM,GAAG,GAEnC,KAAM,CAAE,IAAA,EAAK,IAAA,EAAK,MAAA,EAAO,MAAA,CAAK,EAAK,KAAK,cAAa,EACrD,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,EAAM,QAAS,GAAM,CACnB,MAAM,EAAS,EAAY,gBAAgB,GAAQ,MAAM,EACzD,EAAO,aAAa,SAAU,IAAI,EAAE,QAAU,KAAK,QAAQ,CAAC,CAAC,GAAG,EAChE,EAAO,aAAa,aAAc,EAAE,KAAK,EACzC,EAAW,YAAY,CAAM,CAC/B,CAAC,EACD,EAAK,YAAY,CAAU,EAC3B,EAAI,YAAY,CAAI,EACpB,MAAM,EAAO,EAAY,gBAAgB,GAAQ,MAAM,EAQvD,GAPA,EAAK,aAAa,IAAK,OAAO,CAAM,CAAC,EACrC,EAAK,aAAa,IAAK,OAAO,CAAM,CAAC,EACrC,EAAK,aAAa,QAAS,OAAO,EAAa,EAAiB,CAAW,CAAC,EAC5E,EAAK,aAAa,SAAU,OAAO,EAAa,EAAc,CAAc,CAAC,EAC7E,EAAK,aAAa,KAAM,GAAG,EAC3B,EAAK,aAAa,OAAQ,QAAQ,CAAM,GAAG,EAC3C,EAAI,YAAY,CAAI,EAChB,EAAI,WAAY,CAClB,MAAM,IAAe,EAAK,EAAI,aAAe,KAAO,OAAS,EAAG,UAAY,MAAM,QAAQ,EAAE,OAAO,OAAO,OAAO,MAAM,EAAI,EAAE,OAAO,OAAO,OAAO,OAAO,CAAC,EAAI,EAAE,OAAO,OAAO,OAAO,SAAW,EAAE,OAAO,MAAM,UACzM,IAAkB,EAAK,EAAI,aAAe,KAAO,OAAS,EAAG,WAAa,OAC1E,IAAoB,EAAK,EAAI,aAAe,KAAO,OAAS,EAAG,aAAe,EAAE,OAAO,MAAM,WAC7F,EAAM,KAAK,cAAa,EACxB,EAAY,CAAC,EAAM,GAAG,EAAG,IAAW,CACxC,MAAM,GAAI,EAAY,gBAAgB,GAAQ,MAAM,EACpD,OAAA,GAAE,aAAa,IAAK,OAAO,EAAC,CAAC,EAC7B,GAAE,aAAa,IAAK,OAAO,CAAC,CAAC,EAC7B,GAAE,aAAa,cAAe,CAAM,EACpC,GAAE,aAAa,oBAAqB,QAAQ,EAC5C,GAAE,aAAa,OAAQ,CAAU,EACjC,GAAE,aAAa,YAAa,CAAa,EACrC,GAAiB,GAAE,aAAa,cAAe,CAAe,EAClE,GAAE,YAAc,OAAO,CAAI,EACpB,EACT,EACA,GAAI,EAAY,CACd,MAAM,EAAO,EAAS,EAAiB,EACvC,EAAI,YAAY,EAAU,EAAI,CAAG,EAAG,EAAM,EAAS,EAAc,GAAI,QAAQ,CAAC,EAC9E,EAAI,YAAY,EAAU,EAAI,CAAG,EAAG,EAAM,EAAS,GAAI,QAAQ,CAAC,CAClE,KAAO,CACL,MAAM,EAAO,EAAS,EAAiB,EACvC,EAAI,YAAY,EAAU,EAAI,CAAG,EAAG,EAAS,EAAG,EAAM,KAAK,CAAC,EAC5D,EAAI,YAAY,EAAU,EAAI,CAAG,EAAG,EAAS,EAAc,EAAG,EAAM,OAAO,CAAC,CAC9E,CACF,CACA,MAAM,IAAe,EAAK,EAAI,QAAU,KAAO,OAAS,EAAG,QAAU,EAAE,OAAO,MAAM,UAC9E,EAAQ,KAAK,YAAY,EAAW,EAAY,CAAQ,EA0C9D,GAzCA,EAAI,YAAY,CAAK,EACrB,KAAK,QAAU,EACf,KAAK,YAAc,CAAA,EACf,EAAE,OAAO,OAAO,YAAY,qBAAuB,EAAM,OAAS,GACpE,EAAM,QAAS,GAAM,CACnB,MAAM,EAAM,EAAY,gBAAgB,GAAQ,MAAM,EACtD,GAAI,EAAY,CACd,MAAM,EAAO,EAAS,EAAc,EAAE,GAAK,EACrC,EAAO,EAAS,EAAc,EAAE,GAAK,EAC3C,EAAI,aAAa,IAAK,OAAO,CAAM,CAAC,EACpC,EAAI,aAAa,IAAK,OAAO,CAAI,CAAC,EAClC,EAAI,aAAa,QAAS,OAAO,CAAc,CAAC,EAChD,EAAI,aAAa,SAAU,OAAO,KAAK,IAAI,EAAG,EAAO,CAAI,CAAC,CAAC,CAC7D,MACE,EAAI,aAAa,IAAK,OAAO,EAAS,EAAE,GAAK,CAAW,CAAC,EACzD,EAAI,aAAa,IAAK,OAAO,CAAM,CAAC,EACpC,EAAI,aACF,QACA,OAAO,KAAK,IAAI,GAAI,EAAE,GAAK,EAAE,IAAM,CAAW,CAAC,CAC3D,EACU,EAAI,aAAa,SAAU,OAAO,CAAc,CAAC,EAEnD,EAAI,aAAa,OAAQ,aAAa,EACtC,EAAI,aAAa,QAAS,kCAAkC,EAC5D,EAAI,aAAa,mBAAoB,OAAO,EAAE,KAAK,CAAC,EACpD,EAAI,MAAM,OAAS,UACnB,EAAI,YAAY,CAAG,EACnB,KAAK,YAAY,KAAK,CAAG,CAC3B,CAAC,EAEH,KAAK,MAAQ,CACX,WAAA,EACA,SAAA,EACA,OAAA,EACA,OAAA,EACA,YAAA,EACA,eAAA,EACA,UAAA,EACA,SAAA,EACA,UAAA,CACN,EACQ,EAAI,eAAgB,CACtB,MAAM,EAAK,EAAY,cAAc,KAAK,EAC1C,EAAG,UAAU,IAAI,0CAA0C,EAC3D,EAAG,MAAM,SAAW,WACpB,EAAG,MAAM,WAAa,EAAK,EAAI,aAAe,KAAO,OAAS,EAAG,WAAa,OAC9E,EAAG,MAAM,aAAe,EAAK,EAAI,aAAe,KAAO,OAAS,EAAG,aAAe,EAAE,OAAO,MAAM,YAAc,GAC/G,EAAG,MAAM,MAAQ,EAAE,OAAO,MAAM,UAChC,EAAG,MAAM,WAAa,mBACtB,EAAG,MAAM,MAAQ,OACjB,EAAG,MAAM,QAAU,UACnB,EAAG,MAAM,aAAe,MACxB,EAAG,MAAM,cAAgB,OACzB,EAAG,MAAM,WAAa,SACtB,EAAG,MAAM,QAAU,IACnB,EAAG,MAAM,WAAa,qBACtB,KAAK,aAAe,CACtB,CACA,EAAa,UAAU,IAAI,yCAAyC,EACpE,EAAa,UAAU,IACrB,uBAAyB,CAC/B,EACI,EAAa,YAAY,CAAG,EACxB,KAAK,cAAc,EAAa,YAAY,KAAK,YAAY,EACjE,KAAK,MAAQ,EACb,KAAK,oBAAoB,EAAc,EAAU,EAAY,EAAU,CAAS,EAChF,KAAK,sBAAqB,EAC1B,KAAK,0BAAyB,CAChC,CAQA,oBAAoB,EAAO,EAAY,CACrC,MAAM,EAAI,KAAK,EACT,EAAQ,EAAa,EAAE,QAAQ,WAAa,EAAE,OAAO,MAAM,QAAU,IAAM,EAAE,QAAQ,UAAY,EAAE,OAAO,MAAM,OAAS,IAC/H,GAAI,OAAO,GAAU,SAAU,CAC7B,MAAM,EAAU,EAAM,KAAI,EAC1B,GAAI,EAAQ,SAAS,GAAG,EAAG,CACzB,MAAM,EAAM,WAAW,CAAO,GAAK,EACnC,OAAO,KAAK,IAAI,GAAI,EAAQ,EAAM,GAAG,CACvC,CACA,MAAM,EAAI,WAAW,CAAO,EAC5B,OAAO,OAAO,SAAS,CAAC,EAAI,EAAI,GAClC,CACA,OAAI,OAAO,GAAU,UAAY,OAAO,SAAS,CAAK,EAAU,EACzD,GACT,CAaA,oBAAoB,EAAc,EAAU,EAAY,EAAU,EAAW,CAC3E,MAAM,EAAI,KAAK,EAET,EADM,EAAE,OAAO,YAAY,QAAQ,WAAW,eAClC,OAAS,SACrB,EAAU,GACV,EAAa,EAAE,QAAQ,UAAY,EAAE,OAAO,MAAM,OAAS,IAC3D,EAAc,EAAE,QAAQ,WAAa,EAAE,OAAO,MAAM,QAAU,IAC9D,EAAc,EAAE,OAAO,OAAO,SAAW,EACzC,EAAc,EAAE,OAAO,OAAO,SAAW,EAS/C,GARA,EAAa,MAAM,SAAW,WAC9B,EAAa,MAAM,QAAU,QAC7B,EAAa,MAAM,SAAW,UAC9B,EAAa,MAAM,QAAU,IAC7B,EAAa,MAAM,MAAQ,EAAW,KACtC,EAAa,MAAM,OAAS,EAAY,KACxC,EAAa,MAAM,MAAQ,OAC3B,EAAa,MAAM,OAAS,OACxB,EAAY,CACd,MAAM,EAAkB,EAAc,EAAY,EAAU,EAC5D,IAAI,EACA,IAAU,QAAS,EAAI,EAClB,IAAU,MAAO,EAAI,EAAU,KAAK,IAAI,EAAG,CAAe,EAC9D,EAAI,EAAU,KAAK,IAAI,EAAG,CAAe,EAAI,EAClD,EAAa,MAAM,IAAM,EAAI,EAAc,KACvC,IAAa,OACf,EAAa,MAAM,KAAO,EAAU,EAAc,KAElD,EAAa,MAAM,KAAO,EAAa,EAAW,EAAU,EAAc,IAE9E,KAAO,CACL,MAAM,EAAiB,EAAa,EAAW,EAAU,EACzD,IAAI,EACA,IAAU,QAAS,EAAI,EAClB,IAAU,MAAO,EAAI,EAAU,KAAK,IAAI,EAAG,CAAc,EAC7D,EAAI,EAAU,KAAK,IAAI,EAAG,CAAc,EAAI,EACjD,EAAa,MAAM,KAAO,EAAI,EAAc,KACxC,IAAa,MACf,EAAa,MAAM,IAAM,EAAU,EAAc,KAEjD,EAAa,MAAM,IAAM,EAAc,EAAY,EAAU,EAAc,IAE/E,CACF,CAeA,kBAAmB,CACjB,IAAI,EAAI,EACR,GAAI,CAAC,EAAY,UAAS,EAAI,OAC9B,MAAM,EAAI,KAAK,EACT,EAAI,EAAE,QACN,EAEJ,EAAE,IAAI,aAGR,GADI,CAAC,GAAQ,CAAC,KAAK,OACf,CAAC,OAAO,SAAS,EAAE,SAAS,GAAK,CAAC,OAAO,SAAS,EAAE,UAAU,EAAG,OACrE,KAAM,CAAE,WAAA,EAAY,SAAA,EAAU,SAAA,EAAU,UAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,eAAA,CAAc,EAAK,KAAK,MACrF,EAAQ,EAAE,OAAO,YAAY,QAAQ,WAAW,eAAe,OAAS,SACxE,EAAK,EAAE,OAAO,OAAO,SAAW,EAChC,EAAK,EAAE,OAAO,OAAO,SAAW,EAChC,GAAc,GAAM,EAAK,KAAK,MAAQ,KAAO,OAAS,EAAG,aAAe,KAAO,OAAS,EAAG,WAC3F,EAAY,EAAa,EAAW,uBAAuB,OAAO,EAAE,OAAS,EAAW,uBAAuB,UAAU,EAAE,OAAS,EACpI,EAAY,EAAE,OAAO,aAAe,EACpC,EAAc,CAAC,EAAQ,IAAS,CACpC,MAAM,EAAQ,KAAK,IAAI,EAAG,EAAS,CAAI,EACvC,OAAI,IAAU,QAAgB,EAC1B,IAAU,MAAc,EACrB,EAAQ,CACjB,EACA,GAAI,EAAY,CACd,EAAK,MAAM,IAAM,EAAE,WAAa,EAAY,EAAE,WAAY,CAAS,EAAI,EAAK,KAC5E,MAAM,EAAY,IAAa,OAAS,EAAI,EAAE,WAAa,EAAE,UACvD,EAAU,IAAa,OAAS,EAAE,WAAa,EAAE,SACjD,GAAe,EAAY,GAAW,EAC5C,EAAK,MAAM,KAAO,EAAc,EAAS,EAAiB,EAAI,EAAK,IACrE,KAAO,CACL,EAAK,MAAM,KAAO,EAAE,WAAa,EAAY,EAAE,UAAW,CAAQ,EAAI,EAAK,KAC3E,MAAM,EAAY,IAAa,MAAQ,EAAY,EAAE,WAAa,EAAE,WAAa,EAC3E,EAAU,IAAa,MAAQ,EAAE,WAAa,EAAE,UAChD,GAAe,EAAY,GAAW,EAC5C,EAAK,MAAM,IAAM,EAAc,EAAS,EAAiB,EAAI,EAAK,IACpE,CACA,EAAY,sBAAsB,IAAM,KAAK,mBAAkB,CAAE,CACnE,CAQA,oBAAqB,CACnB,MAAM,EAAI,KAAK,EACT,EAEJ,EAAE,IAAI,aAEF,EAAQ,KAAK,OAAS,KAAK,MAAM,cAAc,MAAM,EACrD,EAAO,EAAE,IAAI,OAAO,cAAc,kBAAkB,EAC1D,GAAI,CAAC,GAAQ,CAAC,GAAS,CAAC,GAAQ,CAAC,KAAK,MAAO,OAC7C,MAAM,EAAI,EAAM,sBAAqB,EAC/B,EAAK,EAAK,sBAAqB,EACrC,GAAI,CAAC,EAAE,OAAS,CAAC,EAAE,QAAU,CAAC,EAAG,OAAS,CAAC,EAAG,OAAQ,OACtD,MAAM,EAAU,GACV,CAAE,WAAA,EAAY,SAAA,CAAQ,EAAK,KAAK,MACtC,GAAI,EAAY,CACd,MAAM,EAAM,IAAa,OAAS,EAAG,KAAO,EAAE,MAAQ,EAAE,KAAO,EAAG,MAClE,GAAI,EAAM,EAAS,CACjB,MAAM,EAAU,WAAW,EAAK,MAAM,IAAI,GAAK,EACzC,EAAQ,EAAU,EACxB,EAAK,MAAM,KAAO,GAAW,IAAa,OAAS,CAAC,EAAQ,GAAS,IACvE,CACF,KAAO,CACL,MAAM,EAAM,IAAa,MAAQ,EAAG,IAAM,EAAE,OAAS,EAAE,IAAM,EAAG,OAChE,GAAI,EAAM,EAAS,CACjB,MAAM,EAAS,WAAW,EAAK,MAAM,GAAG,GAAK,EACvC,EAAQ,EAAU,EACxB,EAAK,MAAM,IAAM,GAAU,IAAa,MAAQ,CAAC,EAAQ,GAAS,IACpE,CACF,CACF,CAIA,SAAU,CACR,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5B,QAAS,EAAI,EAAG,EAAI,KAAK,YAAY,OAAQ,IAAK,CAChD,MAAM,EAAK,KAAK,YAAY,CAAC,GAC5B,EAAK,EAAG,sBAAwB,MAAgB,EAAG,KAAK,EAAI,YAAa,KAAK,YAAY,GAC1F,EAAK,EAAG,sBAAwB,MAAgB,EAAG,KAAK,EAAI,WAAY,KAAK,YAAY,CAC5F,CAGA,GAFA,KAAK,YAAc,CAAA,EACnB,KAAK,iBAAmB,GACpB,IAAG,EAAK,KAAK,MAAQ,MAAgB,EAAG,QAC5C,GAAI,EACD,GAAM,EAAK,KAAK,IAAI,QAAQ,sBAAwB,MAAgB,EAAG,KACtE,EACA,sBACA,KAAK,YACb,GACO,GAAM,EAAK,KAAK,IAAI,QAAQ,sBAAwB,MAAgB,EAAG,KACtE,EACA,sBACA,KAAK,YACb,CACI,MAAY,CACZ,CACF,CAEA,2BAA4B,CAC1B,GAAK,EAAY,UAAS,EAC1B,QAAS,EAAI,EAAG,EAAI,KAAK,YAAY,OAAQ,IAAK,CAChD,MAAM,EAAK,KAAK,YAAY,CAAC,EAC7B,EAAG,iBAAiB,YAAa,KAAK,YAAY,EAClD,EAAG,iBAAiB,WAAY,KAAK,YAAY,CACnD,CACF,CAMA,aAAa,EAAG,CACd,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACT,EAEJ,EAAE,cAEE,EAAM,UAAU,EAAK,EAAO,aAAa,kBAAkB,IAAM,KAAO,EAAK,KAAM,EAAE,EACvF,EAAM,GAAK,IAAQ,KAAK,mBAC5B,KAAK,iBAAmB,GACvB,GAAM,GAAM,EAAK,KAAK,MAAQ,KAAO,OAAS,EAAG,SAAW,KAAO,OAAS,EAAG,YAAc,MAAgB,EAAG,KAAK,EAAI,cAAe,CAAC,KAAK,IAAK,EAAK,CAAC,CAAC,EAC3J,IAAI,GAAO,CAAC,EAAE,uBAAuB,EAAK,WAAW,EACvD,CAEA,cAAe,CACb,GAAI,KAAK,iBAAmB,EAAG,OAC/B,MAAM,EAAM,KAAK,iBACjB,KAAK,iBAAmB,GACxB,IAAI,GAAO,KAAK,CAAC,EAAE,uBAAuB,EAAK,OAAO,CACxD,CACA,uBAAwB,CACtB,IAAI,EAAI,EACH,EAAY,UAAS,IACnB,GAAM,EAAK,KAAK,MAAQ,KAAO,OAAS,EAAG,SAAW,MAAgB,EAAG,mBAChF,KAAK,IAAI,OAAO,iBACd,sBACA,KAAK,YACX,EACI,KAAK,IAAI,OAAO,iBACd,sBACA,KAAK,YACX,EACE,CAMA,gBAAgB,EAAM,CACpB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,KAAK,QAAS,OACnB,MAAM,EAAO,EAAK,EAAK,OAAS,CAAC,EACjC,GAAI,CAAC,GAAQ,OAAO,GAAS,SAAU,OACvC,MAAM,EAAI,EAAK,YACT,EAAI,EAAK,eAEf,GADI,OAAO,GAAM,UAAY,OAAO,GAAM,UACtC,EAAE,OAAO,MAAM,OAAS,UAAW,OACvC,MAAM,GAAO,GAAM,EAAK,EAAE,aAAe,KAAO,OAAS,EAAG,SAAW,KAAO,OAAS,EAAG,CAAC,EACrF,EAA6B,IAAI,CAAC,EACpC,GAAO,MAAQ,OAAO,MAAM,CAAG,GACnC,KAAK,eAAe,CAAG,CACzB,CACA,cAAe,CACR,KAAK,UACV,KAAK,QAAQ,aAAa,UAAW,GAAG,EACpC,KAAK,eACP,KAAK,aAAa,MAAM,QAAU,KAEtC,CAKA,eAAe,EAAK,CAClB,GAAI,CAAC,KAAK,SAAW,CAAC,KAAK,MAAO,OAClC,KAAM,CAAE,WAAA,EAAY,SAAA,EAAU,OAAA,EAAQ,OAAA,EAAQ,YAAA,EAAa,eAAA,EAAgB,UAAA,CAAS,EAAK,KAAK,MACxF,EAAM,KAAK,KAEX,EADM,KAAK,KACE,EACnB,IAAI,EAQJ,GAPI,IAAS,EACX,EAAM,GAEN,GAAO,EAAM,GAAO,EAElB,EAAM,IAAG,EAAM,GACf,EAAM,IAAG,EAAM,GACf,EAAY,CACd,MAAM,EAAU,EAAS,EAAc,EAAM,EAC7C,IAAI,EAAM,EACN,IAAa,QACf,EAAO,EAAS,EAChB,EAAQ,EAAO,IAEf,EAAO,EACP,EAAQ,EAAO,GAEjB,MAAM,EAAS,CACb,GAAG,CAAI,IAAI,CAAO,GAClB,GAAG,CAAK,IAAI,EAAU,EAAY,CAAC,GACnC,GAAG,CAAK,IAAI,EAAU,EAAY,CAAC,EAC3C,EAAQ,KAAK,GAAG,EACV,KAAK,QAAQ,aAAa,SAAU,CAAM,CAC5C,KAAO,CACL,MAAM,EAAU,EAAS,EAAM,EAC/B,IAAI,EAAM,EACN,IAAa,OACf,EAAO,EAAS,EAChB,EAAQ,EAAO,IAEf,EAAO,EACP,EAAQ,EAAO,GAEjB,MAAM,EAAS,CACb,GAAG,CAAO,IAAI,CAAI,GAClB,GAAG,EAAU,EAAY,CAAC,IAAI,CAAK,GACnC,GAAG,EAAU,EAAY,CAAC,IAAI,CAAK,EAC3C,EAAQ,KAAK,GAAG,EACV,KAAK,QAAQ,aAAa,SAAU,CAAM,CAC5C,CAEA,GADA,KAAK,QAAQ,aAAa,UAAW,GAAG,EACpC,KAAK,aAAc,CACrB,MAAM,EAAM,KAAK,cAAa,EAE9B,GADA,KAAK,aAAa,YAAc,EAAI,CAAG,EACnC,EAAY,CACd,MAAM,EAAU,EAAS,EAAc,EAAM,EACzC,IAAa,OACf,KAAK,aAAa,MAAM,KAAO,GAAG,EAAS,EAAiB,EAAY,CAAC,MAEzE,KAAK,aAAa,MAAM,KAAO,GAAG,EAAS,EAAY,CAAC,KACxD,KAAK,aAAa,MAAM,UAAY,qBAEtC,KAAK,aAAa,MAAM,IAAM,GAAG,EAAU,CAAC,IAC9C,KAAO,CACL,MAAM,EAAU,EAAS,EAAM,EAC/B,KAAK,aAAa,MAAM,KAAO,GAAG,CAAO,KACzC,KAAK,aAAa,MAAM,UAAY,mBAChC,IAAa,MACf,KAAK,aAAa,MAAM,IAAM,GAAG,EAAS,EAAiB,EAAY,CAAC,KAExE,KAAK,aAAa,MAAM,IAAM,GAAG,EAAS,EAAY,EAAE,IAE5D,CACA,KAAK,aAAa,MAAM,QAAU,GACpC,CACF,CAMA,YAAY,EAAM,EAAO,EAAW,CAClC,MAAM,EAAU,EAAY,gBAAgB,GAAQ,SAAS,EAC7D,OAAA,EAAQ,aAAa,OAAQ,CAAK,EAClC,EAAQ,aAAa,UAAW,GAAG,EACnC,EAAQ,aAAa,QAAS,mCAAmC,EACjE,EAAQ,aAAa,SAAU,aAAa,EAC5C,EAAQ,aAAa,iBAAkB,MAAM,EACtC,CACT,CASA,eAAgB,CACd,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,YAAY,QAAQ,WAClC,EAAM,EAAG,eACf,IAAI,EAAU,IACV,EAAU,KACd,MAAM,IAAS,EAAK,EAAE,aAAe,KAAO,OAAS,EAAG,SAAW,CAAA,EACnE,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAM,EAAK,CAAC,EAClB,GAAK,EACL,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,MAAM,EAAI,EAAI,CAAC,EACX,GAAK,MAAQ,OAAO,MAAM,CAAC,IAC3B,EAAI,IAAS,EAAU,GACvB,EAAI,IAAS,EAAU,GAC7B,CACF,CACK,OAAO,SAAS,CAAO,IAAG,EAAU,GACpC,OAAO,SAAS,CAAO,IAAG,EAAU,GACzC,IAAI,EAAM,EACN,EAAM,EACN,OAAO,EAAG,IAAQ,MACpB,EAAM,EAAG,IAAM,EAAU,EAAG,IAAM,GAEhC,OAAO,EAAG,IAAQ,MACpB,EAAM,EAAG,IAAM,EAAU,EAAG,IAAM,GAEpC,MAAM,EAAQ,CAAA,EACR,EAAQ,CAAA,EACd,GAAI,EAAG,QAAU,EAAG,OAAO,OAAS,EAAG,CACrC,MAAM,EAAS,EAAG,OAAO,IAAI,CAAC,EAAG,IAAkB,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CACtF,eAAgB,CACxB,CAAO,CAAC,EAAE,KAAK,CAAC,EAAG,IAAM,EAAE,KAAO,EAAE,IAAI,EAC5B,EAAK,EAAO,CAAC,EAAE,KACf,EAAK,EAAO,EAAO,OAAS,CAAC,EAAE,GACrC,EAAM,EACN,EAAM,EACN,MAAM,EAAO,EAAK,GAAM,EACxB,EAAO,QAAS,GAAM,CACpB,MAAM,GAAM,EAAE,KAAO,GAAM,EACrB,GAAM,EAAE,GAAK,GAAM,EACzB,EAAM,KAAK,CAAE,SAAU,EAAK,GAAM,EAAG,MAAO,EAAE,KAAK,CAAE,EACrD,EAAM,KAAK,CAAE,MAAO,EAAE,eAAgB,GAAA,EAAI,GAAA,CAAE,CAAE,CAChD,CAAC,CACH,KAAO,CACL,MAAM,EAAY,EAAE,QAAQ,OAAO,CAAC,GAAK,UACnC,EAAQ,IAAI,EACZ,GAAkB,EAAK,EAAE,OAAO,YAAY,QAAQ,iBAAmB,KAAO,EAAK,GACnF,EAEJ,EAAE,QAAQ,QAEN,EAAI,KAAK,IAAI,EAAG,EAAI,OAAS,EAAE,EACrC,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,GAAK,EAAI,GACb,EAAI,EAAM,GAAK,EAAM,GACrB,EAAQ,KAAK,IAAI,CAAG,EAAI,KAAK,IAAI,CAAG,EACpC,EAAY,IAAU,EAAI,EAAI,IAAM,EAAI,EAC9C,IAAI,EACA,EACE,EAAE,OAAO,YAAY,QAAQ,qBAC/B,EAAoB,EAAY,EAAI,EAAY,KAAO,EAAiB,OAAS,EAAI,EAAY,MAAQ,EAAiB,MAE1H,EAAoB,GAAa,EAAI,GAAK,EAAI,EAAY,KAAO,GAAkB,EAAI,EAAY,KAAO,EAG5G,EAAoB,EAAI,EAAY,IAElC,EAAoB,IAAG,EAAoB,GAC3C,EAAoB,KAAI,EAAoB,IAChD,MAAM,EAAS,EAAE,OAAO,YAAY,QAAQ,aAAe,EAAM,WAC/D,EAAE,OAAO,MAAM,OAAS,OAAS,EAAoB,GAAK,EAC1D,CACV,EAAY,EACJ,EAAM,KAAK,CAAE,QAAS,EAAG,MAAO,CAAM,CAAE,CAC1C,CACF,CACA,MAAO,CAAE,IAAA,EAAK,IAAA,EAAK,MAAA,EAAO,MAAA,CAAK,CACjC,CACF,CACA,MAAM,EAAO,CAKX,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,aAAe,IAAI,IAAM,EAAI,cAAc,cAAc,GAAG,CAAC,EAClE,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,kBAAoB,KAAK,EAAE,OAAO,MAAM,OAAS,OAAS,KAAK,EAAE,OAAO,YAAY,IAAI,aAAe,KAAK,EAAE,OAAO,OAAO,SAAW,EAC5I,KAAK,cAAgB,IAAI,GAAU,IAAI,CACzC,CACA,MAAO,CACL,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAM,EAAE,OACd,KAAK,kBAAoB,EAAI,MAAM,OAAS,OAAS,EAAI,YAAY,IAAI,aAAe,EAAI,OAAO,SAAW,EAC9G,MAAM,EAAmB,EAAI,OAAO,qBAAuB,KAAK,EAAE,WAAW,OAAO,SAAW,GAAK,KAAK,mBAGzG,EAAI,MAAM,OAAS,WAAa,KAAK,EAAE,WAAW,OAAO,OAAS,EAElE,GADA,KAAK,cAAc,sBAAqB,GACnC,GAAoB,CAAC,EAAG,aAAe,EAAI,OAAO,KAAM,CAC3D,MAAM,EAEJ,EAAE,IAAI,aAER,KAAO,EAAa,YAClB,EAAa,YAAY,EAAa,UAAU,EAE9C,KAAK,wBACP,KAAK,sBAAsB,QAAO,EAClC,KAAK,sBAAwB,MAE3B,EAAI,MAAM,OAAS,WAAa,GAAsB,UAAU,CAAC,GACnE,KAAK,sBAAwB,IAAI,GAAsB,EAAG,KAAK,GAAG,EAClE,KAAK,sBAAsB,KAAI,IAE/B,KAAK,YAAW,EACZ,EAAI,OAAO,WAAa,UAAY,EAAI,OAAO,WAAa,MAC9D,KAAK,sBAAqB,GACjB,EAAI,OAAO,WAAa,SAAW,EAAI,OAAO,WAAa,SACpE,KAAK,oBAAmB,EAG9B,CACF,CACA,mBAAmB,CAAE,EAAA,EAAG,UAAA,CAAS,EAAI,CACnC,MAAM,EAAI,KAAK,EACT,EAAW,EAAY,cAAc,MAAM,EACjD,EAAS,UAAU,IAAI,0BAA0B,EACjD,MAAM,EAAS,EAAE,OAAO,OAAO,QAAQ,OAAS,EAAE,OAAO,QAAQ,MACjE,IAAI,EAAQ,EACR,MAAM,QAAQ,CAAM,IACtB,EAAQ,EAAO,CAAC,GAElB,MAAM,EAAQ,MAAM,QAAQ,EAAE,OAAO,OAAO,QAAQ,IAAI,EAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,KAAK,CAAC,CAAC,EAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,IAAI,EAC3I,EAAW,MAAM,QAAQ,EAAE,OAAO,OAAO,QAAQ,OAAO,EAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC,EAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,OAAO,EACvJ,EAAW,MAAM,QAAQ,EAAE,OAAO,OAAO,QAAQ,OAAO,EAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC,EAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,OAAO,EACvJ,EAAe,MAAM,QAAQ,EAAE,OAAO,OAAO,QAAQ,WAAW,EAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,YAAY,CAAC,CAAC,EAAI,WAAW,EAAE,OAAO,OAAO,QAAQ,WAAW,EACvK,EAAS,EAAS,MAKxB,GAJA,EAAO,QAAU,EAAQ,GAAgB,EAAI,KAC7C,EAAO,OAAS,EAAQ,GAAgB,EAAI,KAC5C,EAAO,KAAO,EAAW,KACzB,EAAO,IAAM,EAAW,KACpB,EAAE,OAAO,OAAO,QAAQ,WAC1B,EAAO,WAAa,cACpB,EAAO,MAAQ,EAAU,CAAC,EACtB,MAAM,QAAQ,EAAE,OAAO,OAAO,QAAQ,UAAU,EAC9C,EAAE,OAAO,OAAO,QAAQ,WAAW,CAAC,IACtC,EAAS,UAAY,EAAE,OAAO,OAAO,QAAQ,WAAW,CAAC,EAAC,GAG5D,EAAS,UAAY,EAAE,OAAO,OAAO,QAAQ,WAAU,MAEpD,CAEL,MAAM,EADU,IAAI,GAAQ,KAAK,IAAI,EAAG,KAAK,GAAG,EACnB,gBAAgB,CAC3C,SAAU,gEAAgE,CAAK,GAC/E,YAAa,EACb,YAAa,EACb,KAAM,CACd,CAAO,EAQK,GAPS,EAAY,UAAS,EAElC,OAAO,IAGP,GAAO,KAEe,EAAG,MAAM,CAAQ,EAAE,KAAK,OAAQ,MAAM,EACxD,EAAS,IAAI,EAAS,KAAK,CAAC,EAAE,WAAW,EAAG,EAAG,EAAc,EAAe,CAAA,EAAI,CAAY,EAAG,CACnG,eAAgB,MAAM,QAAQ,CAAS,EAAI,EAAU,CAAC,EAAI,EAAa,eACvE,MAAA,CACR,CAAO,CAAC,EACgB,EAAE,IAAI,MAAM,KAC5B,6CACR,EACgB,QAAS,GAAY,CACzB,EAAQ,KAAK,UAAU,SAAS,4BAA4B,EAC9D,EAAQ,KAAK,MAAM,UAAY,sBAE/B,EAAQ,KAAK,MAAM,UAAY,qBAEnC,CAAC,EACD,EAAU,IAAI,CAAM,CACtB,CACA,OAAO,CACT,CACA,aAAc,CACZ,IAAI,EACJ,MAAM,EAAK,KACL,EAAI,KAAK,EACT,EAEJ,EAAE,IAAI,aAEF,EAAa,EAAE,OAAO,OAAO,WACnC,IAAI,EAAc,EAAE,WAAW,YAC3B,EAAY,EAAE,OAAO,OAAO,QAAQ,WAAa,EAAE,OAAO,OAAO,QAAQ,WAAW,MAAK,EAAK,EAAE,QAAQ,OAAO,MAAK,EACxH,GAAI,EAAE,OAAO,MAAM,OAAS,UAAW,CACrC,MAAM,EAAS,EAAE,OAAO,YAAY,QAAQ,WAAW,OACvD,EAAc,EAAO,IAAK,GACjB,EAAW,KAAO,EAAW,KAAO,EAAW,KAAO,MAAQ,EAAW,EACjF,EACD,EAAY,EAAO,IAAK,GAAU,EAAM,KAAK,CAC/C,MAAW,KAAK,oBACd,EAAc,EAAE,UAAU,OAAO,MAAK,GAEpC,EAAE,OAAO,OAAO,kBAAkB,SACpC,EAAc,EAAE,OAAO,OAAO,mBAEhC,MAAM,EAAkB,EAAE,WAAW,gBAC/B,EAAmB,EAAE,OAAO,OAAO,aACnC,EAAe,CAAA,EACjB,EAAE,UAAU,aAAa,OAAS,GAAK,EAAE,OAAO,OAAO,sBACzD,EAAE,UAAU,aAAa,QAAQ,CAAC,EAAG,IAAO,CAC1C,EAAa,CAAE,EAAI,EAAY,cAAc,KAAK,EAClD,EAAa,CAAE,EAAE,UAAU,IACzB,0BACA,2BAA2B,CAAE,EACvC,EACY,EAAE,OAAO,OAAO,kCAAoC,aACtD,EAAa,UAAU,IAAI,oCAAoC,EAE/D,EAAa,CAAE,EAAE,UAAU,IAAI,kCAAkC,CAErE,CAAC,EAEH,QAAS,EAAI,EAAmB,EAAY,OAAS,EAAI,EAAG,EAAmB,GAAK,EAAI,GAAK,EAAY,OAAS,EAAG,EAAmB,IAAM,IAAK,CACjJ,MAAM,EAAO,EAAgB,EAAY,CAAC,EAAG,CAAE,YAAa,EAAG,EAAA,CAAC,CAAE,EAClE,IAAI,EAAkB,GAClB,EAA2B,GAC/B,GAAI,EAAE,QAAQ,gBAAgB,OAAS,EACrC,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,gBAAgB,OAAQ,IAChD,EAAE,QAAQ,gBAAgB,CAAC,EAAE,QAAU,IACzC,EAAkB,IAIxB,GAAI,EAAE,QAAQ,gCAAgC,OAAS,EACrD,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,gCAAgC,OAAQ,IAChE,EAAE,QAAQ,gCAAgC,CAAC,IAAM,IACnD,EAA2B,IAIjC,MAAM,EAAW,KAAK,mBAAmB,CAAE,EAAA,EAAG,UAAA,CAAS,CAAE,EACzD,EAAS,SAAS,EAAU,CAC1B,IAAK,EAAI,EACT,iBAAkB,GAAmB,CAC7C,CAAO,GACG,GAAmB,IACrB,EAAS,UAAU,IAAI,4BAA4B,EAErD,MAAM,EAAW,EAAY,cAAc,KAAK,EAChD,GAAI,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,SAAS,QAAS,CACzF,EAAS,aAAa,OAAQ,QAAQ,EACtC,EAAS,aAAa,WAAY,GAAG,EACrC,MAAM,EAAa,MAAM,QAAQ,CAAI,EAAI,EAAK,KAAK,GAAG,EAAI,EACpD,EAAc,GAAmB,EACjC,EAAa,EAAc,SAAW,UAC5C,EAAS,aACP,aACA,GAAG,CAAU,KAAK,CAAU,mCACtC,EACQ,EAAS,aAAa,eAAgB,EAAc,OAAS,OAAO,CACtE,CACA,MAAM,EAAe,EAAY,cAAc,MAAM,EACrD,EAAa,UAAU,IAAI,wBAAwB,EACnD,EAAa,UAAY,MAAM,QAAQ,CAAI,EAAI,EAAK,KAAK,GAAG,EAAI,EAChE,IAAI,EAAY,EAAE,OAAO,OAAO,OAAO,gBAAkB,EAAE,QAAQ,OAAO,CAAC,EAAI,MAAM,QAAQ,EAAE,OAAO,OAAO,OAAO,MAAM,GAAK,EAAK,EAAE,OAAO,OAAO,OAAO,SAAW,KAAO,OAAS,EAAG,CAAC,EAAI,EAAE,OAAO,OAAO,OAAO,OAChN,IACH,EAAY,EAAE,OAAO,MAAM,WAE7B,EAAa,MAAM,MAAQ,EAC3B,EAAa,MAAM,SAAW,EAAE,OAAO,OAAO,SAC9C,EAAa,MAAM,WAAa,EAAE,OAAO,OAAO,WAChD,EAAa,MAAM,WAAa,GAAc,EAAE,OAAO,MAAM,WAC7D,EAAS,SAAS,EAAc,CAC9B,IAAK,EAAI,EACT,EAAA,EACA,oBAAqB,mBAAmB,CAAI,EAC5C,iBAAkB,GAAmB,CAC7C,CAAO,EACD,EAAS,YAAY,CAAQ,EAC7B,EAAS,YAAY,CAAY,EACjC,MAAM,EAAY,IAAI,GAAU,KAAK,CAAC,EACjC,EAAE,OAAO,OAAO,mBACL,EAAU,sBAAsB,CAAC,IACjC,GAAK,EAAU,qBAAqB,CAAC,GAAK,CAAC,EAAU,aAAa,CAAC,GAAK,EAAE,QAAQ,uBAAuB,QAAQ,CAAC,IAAM,IAAM,EAAE,QAAQ,gCAAgC,QAAQ,CAAC,IAAM,IACnM,EAAS,UAAU,IAAI,+BAA+B,EAGrD,EAAE,OAAO,OAAO,mBACf,EAAU,aAAa,CAAC,GAAK,EAAE,QAAQ,uBAAuB,QAAQ,CAAC,IAAM,IAAM,EAAE,QAAQ,gCAAgC,QAAQ,CAAC,IAAM,IAC9I,EAAS,UAAU,IAAI,+BAA+B,EAGtD,EAAa,OACf,EAAE,UAAU,aAAa,QAAQ,CAAC,EAAO,IAAO,CAC9C,IAAI,EAAK,EACL,EAAM,UAEP,GAAM,EAAM,EAAE,OAAO,OAAO,CAAC,IAAM,KAAO,OAAS,EAAI,OAAS,KAAO,EAAK,EACzF,IACY,EAAa,YAAY,EAAa,CAAE,CAAC,EACzC,EAAa,CAAE,EAAE,YAAY,CAAQ,EAEzC,CAAC,EAED,EAAa,YAAY,CAAQ,EAEnC,EAAa,UAAU,IACrB,oBAAoB,EAAE,OAAO,OAAO,eAAe,EAC3D,EACM,EAAa,UAAU,IACrB,uBAAyB,EAAE,OAAO,OAAO,QACjD,EACM,EAAS,UAAU,IAAI,0BAA0B,EACjD,EAAS,MAAM,OAAS,GAAG,EAAE,OAAO,OAAO,WAAW,QAAQ,MAAM,EAAE,OAAO,OAAO,WAAW,UAAU,KACzG,EAAa,MAAM,MAAQ,EAAE,OAAO,OAAO,MAAQ,EAAE,OAAO,OAAO,MAAQ,KAAO,GAClF,EAAa,MAAM,OAAS,EAAE,OAAO,OAAO,OAAS,EAAE,OAAO,OAAO,OAAS,KAAO,GACrF,EAAS,SAAS,EAAU,CAC1B,IAAK,EAAI,EACT,WAAY,EAAQ,aAAa,EAAY,CAAC,CAAC,EAC/C,iBAAkB,GAAmB,CAC7C,CAAO,GACG,GAAmB,IACrB,EAAS,UAAU,IAAI,4BAA4B,EAEhD,EAAE,OAAO,OAAO,YAAY,kBAC/B,EAAS,UAAU,IAAI,qBAAqB,CAEhD,CACA,EAAE,IAAI,OAAO,iBAAiB,QAAS,EAAG,cAAe,EAAI,EACzD,EAAE,OAAO,OAAO,YAAY,qBAAuB,EAAE,OAAO,OAAO,kBAAkB,SAAW,IAClG,EAAE,IAAI,OAAO,iBAAiB,YAAa,EAAG,gBAAiB,EAAI,EACnE,EAAE,IAAI,OAAO,iBAAiB,WAAY,EAAG,gBAAiB,EAAI,GAEhE,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,SAAS,SAChF,EAAE,IAAI,OAAO,iBACX,UACA,EAAG,gBAAgB,KAAK,CAAE,EAC1B,EACR,CAEE,CAKA,gBAAgB,EAAS,EAAS,CAChC,MAAM,EAAI,KAAK,EACT,EAEJ,EAAE,IAAI,aAEF,EAAe,EAAa,aAClC,IAAI,EAAI,EACJ,EAAI,EACR,GAAI,EAAE,OAAO,OAAO,WAAa,SAC/B,EAAI,EAAE,QAAQ,UAAY,KAAK,IAAI,EAAc,EAAE,QAAQ,UAAY,CAAC,EAAI,UACnE,EAAE,OAAO,OAAO,WAAa,MAAO,CAC7C,MAAM,EAAM,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EACrC,EAAS,EAAI,WAAW,uBAAuB,OAAO,EAAE,OACxD,EAAY,EAAI,WAAW,uBAAuB,UAAU,EAAE,OACpE,GAAK,EAAS,EAAI,EAAS,GAAK,IAAM,EAAY,EAAI,EAAY,GAAK,EACzE,CACA,EAAa,MAAM,SAAW,WAC9B,EAAI,EAAI,EAAU,EAAE,OAAO,OAAO,QAClC,EAAI,EAAI,EAAU,EAAE,OAAO,OAAO,QAClC,EAAa,MAAM,KAAO,EAAI,KAC9B,EAAa,MAAM,IAAM,EAAI,KACzB,EAAE,OAAO,OAAO,WAAa,UAC/B,EAAa,MAAM,KAAO,OAC1B,EAAa,MAAM,MAAQ,GAAK,EAAE,OAAO,OAAO,QAAU,MAI1D,CAAC,QAAS,QAAQ,EAEH,QAAS,GAAO,CAC3B,GAAgB,EAAa,MAAM,CAAE,IACvC,EAAa,MAAM,CAAE,EAAI,SAAS,OAAO,EAAE,OAAO,OAAO,CAAE,CAAC,EAAG,EAAE,EAAI,KAEzE,CAAC,CACH,CACA,uBAAwB,CACtB,MAAM,EAAI,KAAK,EACT,EAEJ,EAAE,IAAI,aAER,EAAa,MAAM,MAAQ,IAC3B,MAAM,EAAa,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EAC5C,EAAY,EAAW,WAAW,uBAAuB,OAAO,EAChE,EAAe,EAAW,WAAW,uBAAuB,UAAU,EACtE,EAAU,GAChB,IAAI,EAAU,EACV,EAAE,OAAO,OAAO,WAAa,QAC/B,EAAU,EAAU,OAAS,EAAa,OAAS,EAAE,OAAO,MAAM,OAAS,EAAE,OAAO,SAAS,OAAS,IAExG,KAAK,gBAAgB,EAAS,CAAO,CACvC,CACA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACT,EAAQ,KAAK,cAAc,oBAAmB,EAC9C,EAAU,GAChB,IAAI,EAAU,EACV,EAAE,OAAO,OAAO,WAAa,SAC/B,EAAU,IAER,EAAE,OAAO,OAAO,WAAa,UAC/B,EAAU,EAAE,QAAQ,SAAW,EAAM,KAAO,IAE9C,KAAK,gBAAgB,EAAS,CAAO,CACvC,CAIA,gBAAgB,EAAG,CACjB,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAEJ,EAAE,OAEE,EAAkB,EAAO,UAAU,SAAS,0BAA0B,GAAK,EAAO,UAAU,SAAS,wBAAwB,GAAK,EAAO,UAAU,SAAS,0BAA0B,EAC5L,GAAI,EAAE,OAAO,MAAM,OAAS,WAAa,CAAC,KAAK,kBACzC,CAAC,EAAO,UAAU,SAAS,4BAA4B,GAAK,GAC/C,IAAI,GAAO,KAAK,IAAI,CAAC,EAC7B,oBAAoB,EAAG,CAAM,UAGlC,EAAiB,CACnB,MAAM,EAAY,UAAU,EAAK,EAAO,aAAa,KAAK,IAAM,KAAO,EAAK,IAAK,EAAE,EAAI,EACvF,KAAK,IAAI,OAAO,UAAU,cAAe,CAAC,KAAK,IAAK,EAAW,KAAK,CAAC,CAAC,EACtE,MAAM,EAAS,IAAI,GAAO,KAAK,IAAI,CAAC,EAChC,EAAE,OAAS,YACb,EAAO,uBAAuB,EAAW,WAAW,EAC3C,EAAE,OAAS,YACpB,EAAO,uBAAuB,EAAW,OAAO,CAEpD,CAEJ,CAIA,gBAAgB,EAAG,CACjB,MAAM,EAAK,KACL,EAAI,KAAK,EACT,EAEJ,EAAE,OAGJ,IADqB,EAAO,UAAU,SAAS,0BAA0B,GAAK,EAAO,UAAU,SAAS,wBAAwB,GAAK,EAAO,UAAU,SAAS,0BAA0B,KAErL,EAAE,MAAQ,SAAW,EAAE,MAAQ,KAAK,CACtC,EAAE,eAAc,EAChB,MAAM,EAAM,EAAO,aAAa,KAAK,EACrC,EAAG,cAAc,CAAC,EACd,IAAQ,MAAQ,EAAE,OAAO,OAAO,YAAY,kBAC9C,sBAAsB,IAAM,CAC1B,MAAM,EAAW,EAAE,IAAI,OAAO,cAC5B,kCAAkC,CAAG,IACjD,EACc,GAAU,EAAS,MAAK,CAC9B,CAAC,CAEL,CACF,CAIA,cAAc,EAAG,CACf,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAEJ,EAAE,OAEJ,GAAI,CAAA,EAAE,OAAO,OAAO,kBAAkB,SAClC,EAAO,UAAU,SAAS,0BAA0B,GAAK,EAAO,UAAU,SAAS,wBAAwB,GAAK,EAAO,UAAU,SAAS,0BAA0B,GAAG,CACzK,MAAM,EAAY,UAAU,EAAK,EAAO,aAAa,KAAK,IAAM,KAAO,EAAK,IAAK,EAAE,EAAI,EACjF,EAAW,EAAO,aAAa,gBAAgB,IAAM,OACrD,EAAc,KAAK,EAAE,OAAO,MAAM,OAAO,YAC3C,OAAO,GAAgB,YACzB,EAAY,KAAK,IAAK,EAAW,KAAK,CAAC,EAEzC,KAAK,IAAI,OAAO,UAAU,cAAe,CAAC,KAAK,IAAK,EAAW,KAAK,CAAC,CAAC,EACtE,MAAM,EAAc,KAAK,EAAE,OAAO,OAAO,QAAQ,QAC7C,OAAO,GAAgB,YAAc,EAAO,UAAU,SAAS,0BAA0B,IAC3F,EAAY,KAAK,IAAK,EAAW,KAAK,CAAC,EACvC,KAAK,IAAI,OAAO,UAAU,oBAAqB,CAC7C,KAAK,IACL,EACA,KAAK,CACf,CAAS,GAEkB,EAAE,OAAO,MAAM,OAAS,WAAa,EAAE,OAAO,MAAM,OAAS,WAAa,CAAC,KAAK,mBACjF,EAAE,OAAO,OAAO,YAAY,kBAC9C,KAAK,cAAc,iBAAiB,EAAW,CAAQ,CAE3D,CACF,CACF,CACA,GAAW,iBAAiB,CAAE,OAAQ,EAAM,CAAE,EAC9C,MAAM,GAAS;;;;;;;;EACT,GAAU;;;;EACV,GAAW;;;;EACX,GAAY;;;EACZ,GAAa;;;EACb,GAAY;;;;;;;EACZ,GAAa;;;;;;;EACb,GAAU;;;EAChB,MAAM,EAAQ,CAKZ,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,GAAK,KAAK,EAAE,OAAO,MAAM,OAC9B,KAAK,cAAgB,sBACrB,KAAK,aAAe,KAAK,EAAE,QAAQ,OAAO,QAC1C,KAAK,KAAO,EAAE,QAAQ,KACtB,KAAK,KAAO,EAAE,QAAQ,KACtB,KAAK,OAAS,KACd,KAAK,SAAW,KAChB,KAAK,UAAY,KACjB,KAAK,MAAQ,KACb,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,YAAc,KACnB,KAAK,WAAa,KAClB,KAAK,OAAS,KACd,KAAK,YAAc,CAAA,EACnB,KAAK,EAAI,IACX,CACA,eAAgB,CACd,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAY,IACT,EAAY,gBAAgB,+BAAgC,KAAK,EAEpE,EAAY,IAAM,CACtB,MAAM,EAEJ,EAAY,gBAAgB,+BAAgC,QAAQ,EAEtE,OAAA,EAAI,aAAa,OAAQ,QAAQ,EAC1B,CACT,EACM,EAAgB,EAAS,EAgB/B,GAfA,EAAc,aAAa,QAAS,oBAAoB,EACxD,EAAc,MAAM,IAAM,EAAE,OAAO,MAAM,QAAQ,QAAU,KAC3D,EAAc,MAAM,MAAQ,CAAC,EAAE,OAAO,MAAM,QAAQ,QAAU,EAAI,KAClE,EAAE,IAAI,OAAO,YAAY,CAAa,EACtC,KAAK,OAAS,EAAS,EACvB,KAAK,SAAW,EAAS,EACzB,KAAK,UAAY,EAAS,EAC1B,KAAK,MAAQ,EAAS,EACtB,KAAK,YAAc,EAAS,EAC5B,KAAK,UAAY,EAAS,EAC1B,KAAK,YAAc,EAAS,EAC5B,KAAK,WAAa,EAAS,EAC3B,KAAK,OAAS,EAAS,EACvB,KAAK,cAAgB,CAAA,EACrB,KAAK,EAAI,EAAE,OAAO,MAAM,QAAQ,MAC5B,MAAM,QAAQ,KAAK,EAAE,WAAW,EAClC,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,YAAY,OAAQ,IAC7C,KAAK,cAAc,KAAK,EAAS,CAAE,EAGvC,MAAM,EAAkB,CAAA,EAClB,EAAoB,CAAC,EAAM,EAAI,IAAQ,CAC3C,MAAM,EAAO,EAAK,YAAW,EACzB,KAAK,EAAE,CAAI,GAAK,EAAE,OAAO,MAAM,KAAK,SACtC,EAAgB,KAAK,CACnB,GAAA,EACA,KAAM,OAAO,KAAK,EAAE,CAAI,GAAM,SAAW,KAAK,EAAE,CAAI,EAAI,EACxD,MAEE,KAAK,aAAa,CAAI,EAExB,MAAO,cAAc,CAAI,OACnC,CAAS,CAEL,EACA,EAAkB,SAAU,KAAK,SAAU,EAAS,EACpD,EAAkB,UAAW,KAAK,UAAW,EAAU,EACvD,MAAM,EAAsB,GAAM,CAC5B,KAAK,EAAE,CAAC,GAAK,EAAE,OAAO,MAAM,CAAC,EAAE,SACjC,EAAgB,KAAK,CACnB,GAAI,IAAM,OAAS,KAAK,OAAS,KAAK,YACtC,KAAM,OAAO,KAAK,EAAE,CAAC,GAAM,SAAW,KAAK,EAAE,CAAC,EAAI,IAAM,OAAS,GAAU,GAC3E,MAEE,KAAK,aAAa,IAAM,OAAS,gBAAkB,WAAW,EAEhE,MAAO,cAAc,CAAC,OAChC,CAAS,CAEL,EACA,EAAmB,MAAM,EACzB,EAAmB,WAAW,EAC1B,KAAK,EAAE,KAAO,EAAE,OAAO,MAAM,KAAK,SACpC,EAAgB,KAAK,CACnB,GAAI,KAAK,MACT,KAAM,OAAO,KAAK,EAAE,KAAQ,SAAW,KAAK,EAAE,IAAM,GACpD,MAAO,KAAK,aAAa,IACzB,MAAO,qBACf,CAAO,EAEC,KAAK,EAAE,SAAW,EAAE,OAAO,MAAM,SAAW,EAAE,OAAO,MAAM,QAAQ,SACrE,EAAgB,KAAK,CACnB,GAAI,KAAK,UACT,KAAM,OAAO,KAAK,EAAE,SAAY,SAAW,KAAK,EAAE,QAAU,GAC5D,MAEE,KAAK,aAAa,SAAW,UAE/B,MAAO,yBACf,CAAO,EAEH,EAAkB,QAAS,KAAK,YAAa,EAAQ,EACjD,KAAK,EAAE,UACT,EAAgB,KAAK,CACnB,GAAI,KAAK,WACT,KAAM,OAAO,KAAK,EAAE,UAAa,SAAW,KAAK,EAAE,SAAW,GAC9D,MAAO,KAAK,aAAa,KACzB,MAAO,sBACf,CAAO,EAEH,QAAS,EAAI,EAAG,EAAI,KAAK,cAAc,OAAQ,IAC7C,EAAgB,KAAK,CACnB,GAAI,KAAK,cAAc,CAAC,EACxB,KAAM,KAAK,EAAE,YAAY,CAAC,EAAE,KAC5B,MAAO,KAAK,EAAE,YAAY,CAAC,EAAE,MAC7B,MAAO,KAAK,EAAE,YAAY,CAAC,EAAE,MAC7B,MAAO,kCAAoC,KAAK,EAAE,YAAY,CAAC,EAAE,KACzE,CAAO,EAEH,EAAgB,QAAQ,CAAC,EAAG,IAAU,CAChC,EAAE,OACJ,EAAQ,iBAAiB,EAAiB,EAAO,EAAE,KAAK,CAE5D,CAAC,EACD,QAAS,EAAI,EAAG,EAAI,EAAgB,OAAQ,IAC1C,EAAS,SAAS,EAAgB,CAAC,EAAE,GAAI,CACvC,MAAO,EAAgB,CAAC,EAAE,MAC1B,MAAO,EAAgB,CAAC,EAAE,MAC1B,aAAc,EAAgB,CAAC,EAAE,KACzC,CAAO,EACD,EAAgB,CAAC,EAAE,GAAG,UAAY,EAAgB,CAAC,EAAE,KACrD,EAAc,YAAY,EAAgB,CAAC,EAAE,EAAE,EAE7C,KAAK,OAAO,YACd,KAAK,OAAO,aAAa,eAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,WAAW,CAAC,EAEvE,KAAK,YAAY,YACnB,KAAK,YAAY,aACf,eACA,OAAO,CAAC,CAAC,EAAE,SAAS,gBAAgB,CAC5C,EAEQ,KAAK,MAAM,YACb,KAAK,MAAM,aAAa,eAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,UAAU,CAAC,EAErE,KAAK,UAAU,YACjB,KAAK,UAAU,aACb,eACA,OAAO,CAAC,CAAC,EAAE,SAAS,cAAc,CAC1C,EAEQ,KAAK,WAAW,aAClB,KAAK,WAAW,aAAa,gBAAiB,MAAM,EACpD,KAAK,WAAW,aAAa,gBAAiB,OAAO,GAEvD,KAAK,qBAAqB,CAAa,EACnC,EAAE,SAAS,YACb,KAAK,OAAO,UAAU,IAAI,KAAK,aAAa,EACnC,EAAE,SAAS,WACpB,KAAK,MAAM,UAAU,IAAI,KAAK,aAAa,EAClC,EAAE,SAAS,iBACpB,KAAK,YAAY,UAAU,IAAI,KAAK,aAAa,EACxC,EAAE,SAAS,gBAAkB,KAAK,YAC3C,KAAK,UAAU,UAAU,IAAI,KAAK,aAAa,GAC9C,GAAM,EAAK,KAAK,IAAI,UAAY,KAAO,OAAS,EAAG,eAAiB,MAAgB,EAAG,KAAK,CAAE,GAEjG,KAAK,yBAAwB,CAC/B,CAIA,qBAAqB,EAAQ,CAC3B,KAAK,YAAc,CAAA,EACnB,EAAO,YAEL,KAAK,MACX,EACI,EAAS,SAAS,KAAK,OAAQ,CAC7B,MAAO,kBACP,KAAM,MACZ,CAAK,EACD,MAAM,EAAY,CAChB,CACE,KAAM,YACN,MAAO,KAAK,aAAa,WACjC,EACM,CACE,KAAM,YACN,MAAO,KAAK,aAAa,WACjC,EACM,CACE,KAAM,YACN,MAAO,KAAK,aAAa,WACjC,CACA,EACI,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IACpC,KAAK,YAAY,KACf,EAAY,gBAAgB,+BAAgC,KAAK,CACzE,EACM,KAAK,YAAY,CAAC,EAAE,UAAY,EAAU,CAAC,EAAE,MAC7C,EAAS,SAAS,KAAK,YAAY,CAAC,EAAG,CACrC,MAAO,wBAAwB,EAAU,CAAC,EAAE,IAAI,GAChD,MAAO,EAAU,CAAC,EAAE,MACpB,KAAM,WACN,SAAU,IAClB,CAAO,EACD,KAAK,OAAO,YAAY,KAAK,YAAY,CAAC,CAAC,CAE/C,CACA,0BAA2B,CACzB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,GACnC,EAAK,KAAK,cAAgB,MAAgB,EAAG,iBAAiB,QAAS,KAAK,gBAAgB,KAAK,IAAI,CAAC,GACtG,EAAK,KAAK,cAAgB,MAAgB,EAAG,iBAC5C,QACA,KAAK,oBAAoB,KAAK,KAAM,WAAW,CACrD,GACK,EAAK,KAAK,SAAW,MAAgB,EAAG,iBACvC,QACA,KAAK,oBAAoB,KAAK,KAAM,MAAM,CAChD,GACK,EAAK,KAAK,WAAa,MAAgB,EAAG,iBAAiB,QAAS,KAAK,aAAa,KAAK,IAAI,CAAC,GAChG,EAAK,KAAK,YAAc,MAAgB,EAAG,iBAAiB,QAAS,KAAK,cAAc,KAAK,IAAI,CAAC,GAClG,EAAK,KAAK,QAAU,MAAgB,EAAG,iBAAiB,QAAS,KAAK,cAAc,KAAK,IAAI,CAAC,GAC9F,EAAK,KAAK,YAAc,MAAgB,EAAG,iBAAiB,QAAS,KAAK,cAAc,KAAK,IAAI,CAAC,GAClG,EAAK,KAAK,aAAe,MAAgB,EAAG,iBAAiB,QAAS,KAAK,WAAW,KAAK,IAAI,CAAC,EACjG,KAAK,YAAY,QAAS,GAAM,CAC1B,EAAE,UAAU,SAAS,WAAW,EAClC,EAAE,iBAAiB,QAAS,KAAK,eAAe,KAAK,KAAM,KAAK,CAAC,EACxD,EAAE,UAAU,SAAS,WAAW,EACzC,EAAE,iBAAiB,QAAS,KAAK,eAAe,KAAK,KAAM,KAAK,CAAC,EACxD,EAAE,UAAU,SAAS,WAAW,GACzC,EAAE,iBAAiB,QAAS,KAAK,eAAe,KAAK,KAAM,KAAK,CAAC,CAErE,CAAC,EACD,QAAS,EAAI,EAAG,EAAI,KAAK,EAAE,YAAY,OAAQ,IAC7C,KAAK,cAAc,CAAC,EAAE,iBACpB,QACA,KAAK,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,KAAM,KAAK,IAAK,KAAK,IAAI,CAAC,CACnE,EAE2B,CACrB,KAAK,YACL,KAAK,YACL,KAAK,OACL,KAAK,SACL,KAAK,UACL,KAAK,MACL,KAAK,UACL,KAAK,WACL,GAAG,KAAK,aACd,EACmB,QAAS,GAAQ,CAC9B,EAAI,iBAAiB,UAAY,GAAM,CACrC,GAAI,EAAE,MAAQ,SAAW,EAAE,MAAQ,IAAK,CACtC,EAAE,eAAc,EAChB,MAAM,EAAW,EAAI,UACrB,EAAI,MAAK,EACT,sBAAsB,IAAM,CAC1B,MAAM,EAAS,KAAK,EAAE,IAAI,OAC1B,GAAI,CAAC,EAAQ,OACb,MAAM,EAAY,EAAS,MAAM,GAAG,EAAE,KAAM,GAAM,EAAE,WAAW,aAAa,CAAC,EAC7E,GAAI,CAAC,EAAW,OAChB,MAAM,EAAW,EAAO,cAAc,IAAI,CAAS,EAAE,EACjD,GAAU,EAAS,MAAK,CAC9B,CAAC,CACH,CACF,CAAC,CACH,CAAC,GACA,EAAK,KAAK,aAAe,MAAgB,EAAG,iBAC3C,UACC,GAAM,CACL,IAAI,GACA,EAAE,MAAQ,aAAe,EAAE,MAAQ,aACrC,EAAE,eAAc,GACT,EAAM,KAAK,SAAW,MAAgB,EAAI,UAAU,SAAS,sBAAsB,GACxF,KAAK,WAAU,EAEjB,OAAO,WAAW,IAAM,CACtB,MAAM,EAAM,EAAE,MAAQ,YAAc,EAAI,KAAK,YAAY,OAAS,EAC9D,KAAK,YAAY,CAAG,GACtB,KAAK,YAAY,CAAG,EAAE,MAAK,CAC/B,EAAG,EAAE,EAET,CACN,EACI,KAAK,YAAY,QAAQ,CAAC,EAAG,IAAQ,CACnC,EAAE,iBAAiB,UAAY,GAAM,CACnC,IAAI,EACA,EAAE,MAAQ,aACZ,EAAE,eAAc,GACH,KAAK,YAAY,EAAM,CAAC,GAAK,KAAK,YAAY,CAAC,GACvD,MAAK,GACD,EAAE,MAAQ,WACnB,EAAE,eAAc,GACH,KAAK,YAAY,EAAM,CAAC,GAAK,KAAK,YAAY,KAAK,YAAY,OAAS,CAAC,GACjF,MAAK,GACD,EAAE,MAAQ,UAAY,EAAE,MAAQ,OACzC,KAAK,WAAU,GACd,EAAM,KAAK,aAAe,MAAgB,EAAI,MAAK,EAChD,EAAE,MAAQ,OAEZ,EAAE,eAAc,IAET,EAAE,MAAQ,SAAW,EAAE,MAAQ,OACxC,EAAE,eAAc,EAChB,EAAE,MAAK,EAEX,CAAC,CACH,CAAC,CACH,CAIA,oBAAoB,EAAM,CACT,KAAK,IAAI,gBAAe,EAChC,QAAS,GAAO,CACrB,MAAM,EAAK,EAAG,IAAI,QACZ,EAAc,IAAS,YAAc,mBAAqB,cAC1D,EAAa,CAAC,CAAC,EAAG,EAAE,QAAQ,CAAW,EAC7C,EAAG,oBAAmB,EACtB,MAAM,EAAK,IAAS,YAAc,EAAG,YAAc,EAAG,OACjD,IACH,EAAG,EAAE,QAAQ,CAAW,EAAI,GAC5B,EAAG,UAAU,IAAI,EAAG,aAAa,GAEnC,EAAG,aAAa,eAAgB,OAAO,CAAC,CAAC,EAAG,EAAE,QAAQ,CAAW,CAAC,CAAC,CACrE,CAAC,CACH,CAMA,eAAgB,CACd,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACT,EAAW,CAAC,EAAE,SAAS,eAC7B,KAAK,oBAAmB,EACpB,IACF,EAAE,SAAS,eAAiB,IAC3B,EAAK,KAAK,YAAc,MAAgB,EAAG,UAAU,IAAI,KAAK,aAAa,GAC3E,GAAM,EAAK,KAAK,IAAI,UAAY,KAAO,OAAS,EAAG,eAAiB,MAAgB,EAAG,KAAK,CAAE,IAEhG,EAAK,KAAK,YAAc,MAAgB,EAAG,aAC1C,eACA,OAAO,EAAE,SAAS,cAAc,CACtC,CACE,CACA,0BAA2B,CACzB,MAAM,EAAI,KAAK,EACV,KAAK,SACR,KAAK,OAAS,EAAE,IAAI,OAAO,cAAc,uBAAuB,GAE7D,KAAK,QACR,KAAK,MAAQ,EAAE,IAAI,OAAO,cAAc,sBAAsB,GAE3D,KAAK,cACR,KAAK,YAAc,EAAE,IAAI,OAAO,cAC9B,4BACR,GAES,KAAK,YACR,KAAK,UAAY,EAAE,IAAI,OAAO,cAAc,0BAA0B,EAE1E,CAIA,yBAAyB,EAAM,CAC7B,KAAK,oBAAmB,EACxB,IAAS,MAAQ,KAAK,EAAE,SAAS,WAAa,GAAO,KAAK,EAAE,SAAS,YAAc,GACnF,MAAM,EAAK,IAAS,MAAQ,KAAK,MAAQ,KAAK,OACxC,EAAM,IAAS,MAAQ,KAAK,OAAS,KAAK,MAC5C,GACF,EAAG,UAAU,IAAI,KAAK,aAAa,EAEjC,GACF,EAAI,UAAU,OAAO,KAAK,aAAa,CAE3C,CACA,eAAgB,CACC,KAAK,IAAI,gBAAe,EAChC,QAAS,GAAO,CACrB,MAAM,EAAK,EAAG,IAAI,QACZ,EAAa,CAAC,CAAC,EAAG,EAAE,SAAS,WACnC,EAAG,oBAAmB,EACjB,IACH,EAAG,EAAE,SAAS,WAAa,GAC3B,EAAG,MAAM,UAAU,IAAI,EAAG,aAAa,GAEzC,EAAG,MAAM,aAAa,eAAgB,OAAO,CAAC,CAAC,EAAG,EAAE,SAAS,UAAU,CAAC,CAC1E,CAAC,CACH,CACA,qBAAsB,CACpB,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACf,EAAE,SAAS,WAAa,GACxB,EAAE,SAAS,YAAc,GACzB,EAAE,SAAS,iBAAmB,GAC1B,EAAE,SAAS,iBACb,EAAE,SAAS,eAAiB,IAC3B,GAAM,EAAK,KAAK,IAAI,UAAY,KAAO,OAAS,EAAG,cAAgB,MAAgB,EAAG,KAAK,CAAE,GAC7F,EAAK,KAAK,YAAc,MAAgB,EAAG,aAAa,eAAgB,OAAO,GAElF,KAAK,yBAAwB,EACX,CAAC,KAAK,MAAO,KAAK,YAAa,KAAK,OAAQ,KAAK,SAAS,EAClE,QAAS,GAAO,CACpB,GACF,EAAG,UAAU,OAAO,KAAK,aAAa,CAE1C,CAAC,CACH,CAOA,gBAAiB,CACf,MAAM,EAAI,KAAK,EACf,OAAI,EAAE,UAAU,WACP,CAAE,KAAM,EAAE,QAAQ,KAAM,KAAM,EAAE,QAAQ,IAAI,EAE9C,CAAE,KAAM,EAAE,QAAQ,KAAM,KAAM,EAAE,QAAQ,IAAI,CACrD,CACA,cAAe,CACb,MAAM,EAAI,KAAK,EACT,CAAE,KAAA,EAAM,KAAA,CAAI,EAAK,KAAK,eAAc,EAC1C,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,MAAM,GAAW,EAAO,GAAQ,EAC1B,GAAW,EAAO,GAAW,EAC7B,GAAW,EAAO,GAAW,EAC7B,EAAc,KAAK,gBAAgB,EAAS,CAAO,EACpD,EAAE,SAAS,eACd,KAAK,kBAAkB,EAAY,KAAM,EAAY,IAAI,CAE7D,CACA,eAAgB,CACd,MAAM,EAAI,KAAK,EACT,CAAE,KAAA,EAAM,KAAA,CAAI,EAAK,KAAK,eAAc,EAG1C,GAFA,KAAK,KAAO,EACZ,KAAK,KAAO,EACR,EAAE,OAAO,MAAM,OAAS,YAAc,IAAI,KAAK,CAAI,EAAE,eAAc,EAAK,IAC1E,OAEF,MAAM,GAAW,EAAO,GAAQ,EAC1B,EAAU,GAAQ,EAAU,GAC5B,EAAU,GAAQ,EAAU,GAC5B,EAAc,KAAK,gBAAgB,EAAS,CAAO,EACpD,EAAE,SAAS,gBACd,KAAK,kBAAkB,EAAY,KAAM,EAAY,IAAI,CAE7D,CAKA,gBAAgB,EAAS,EAAS,CAChC,MAAM,EAAc,KAAK,EAAE,OAAO,MAAM,sBACxC,MAAO,CACL,KAAM,EAAc,KAAK,MAAM,CAAO,EAAI,EAC1C,KAAM,EAAc,KAAK,MAAM,CAAO,EAAI,CAChD,CACE,CAKA,kBAAkB,EAAS,EAAS,CAClC,MAAM,EAAI,KAAK,EACf,GAAI,IAAY,QAAU,IAAY,OAAQ,CAC5C,KAAK,gBAAe,EACpB,MACF,CACA,GAAI,EAAE,OAAO,MAAM,wBACb,EAAU,IACZ,EAAU,EACV,EAAU,EAAE,QAAQ,YAElB,EAAU,EAAU,GACtB,OAGJ,IAAI,EAAQ,CACV,IAAK,EACL,IAAK,CACX,EACI,MAAM,EAAkB,KAAK,mBAC3B,EAEA,MACN,EACQ,IACF,EAAQ,EAAgB,OAE1B,MAAM,EAAW,CACf,MAAA,CACN,EACI,GAAI,CAAC,EAAE,QAAQ,cAAe,OAC9B,MAAM,EAAQ,EAAQ,MAAM,EAAE,QAAQ,cAAc,KAAK,EACpD,EAAE,OAAO,MAAM,QAClB,EAAS,MAAQ,GAEnB,KAAK,EAAE,SAAS,OAAS,GACzB,KAAK,IAAI,cAAc,eACrB,EACA,GACA,KAAK,EAAE,OAAO,MAAM,WAAW,iBAAiB,OACtD,EACI,KAAK,aAAa,EAAO,CAAK,CAChC,CAKA,aAAa,EAAO,EAAO,CACrB,OAAO,KAAK,GAAG,QAAW,aAC5B,KAAK,GAAG,OAAO,KAAK,IAAK,CAAE,MAAA,EAAO,MAAA,CAAK,CAAE,EACzC,KAAK,IAAI,OAAO,UAAU,SAAU,CAAE,MAAA,EAAO,MAAA,CAAK,CAAE,EAExD,CAKA,mBAAmB,EAAO,EAAO,CAC/B,IAAI,EAAW,KACf,OAAI,OAAO,KAAK,GAAG,YAAe,aAChC,EAAW,KAAK,GAAG,WAAW,KAAM,CAAE,MAAA,EAAO,MAAA,CAAK,CAAE,GAE/C,CACT,CACA,YAAa,CACX,OAAO,WAAW,IAAM,CACtB,IAAI,EAAI,EAAI,GACP,EAAK,KAAK,SAAW,MAAgB,EAAG,UAAU,SAAS,sBAAsB,EACpF,KAAK,WAAU,IAEd,EAAK,KAAK,SAAW,MAAgB,EAAG,UAAU,IAAI,sBAAsB,GAC5E,EAAK,KAAK,aAAe,MAAgB,EAAG,aAAa,gBAAiB,MAAM,EAErF,EAAG,CAAC,CACN,CACA,YAAa,CACX,IAAI,EAAI,GACP,EAAK,KAAK,SAAW,MAAgB,EAAG,UAAU,OAAO,sBAAsB,GAC/E,EAAK,KAAK,aAAe,MAAgB,EAAG,aAAa,gBAAiB,OAAO,CACpF,CAIA,eAAe,EAAM,CACnB,MAAM,EAAI,KAAK,EACT,EAAQ,IAAI,GAAQ,KAAK,EAAG,KAAK,GAAG,EAC1C,OAAQ,EAAI,CACV,IAAK,MACH,EAAM,YAAW,EACjB,MACF,IAAK,MACH,EAAM,YAAW,EACjB,MACF,IAAK,MACH,EAAM,YAAY,CAChB,OAAQ,EAAE,OAAO,OACjB,gBAAiB,EAAE,OAAO,MAAM,QAAQ,OAAO,IAAI,eAC7D,CAAS,EACD,KACR,CACE,CACA,iBAAkB,CACD,KAAK,IAAI,gBAAe,EAChC,QAAS,GAAO,CACrB,MAAM,EAAI,EAAG,EACb,GAAI,CAAC,EAAE,SAAS,OAAQ,OAIxB,GAHA,EAAE,QAAQ,UAAU,IAAM,EAAE,QAAQ,cAAc,MAAM,IACxD,EAAE,QAAQ,UAAU,IAAM,EAAE,QAAQ,cAAc,MAAM,IACxD,EAAG,cAAc,wBAAuB,EACpC,OAAO,EAAE,OAAO,MAAM,OAAO,iBAAoB,WAAY,CAC/D,MAAM,EAAiB,EAAE,OAAO,MAAM,OAAO,gBAAgB,EAAI,CAAC,EAC9D,GACF,EAAG,cAAc,wBAAwB,CAAc,CAE3D,CACI,OAAO,EAAE,OAAO,MAAM,OAAO,QAAW,YAC1C,EAAG,IAAI,QAAQ,aAAa,CAC1B,IAAK,EAAE,OAAO,MAAM,IACpB,IAAK,EAAE,OAAO,MAAM,GAC9B,CAAS,EAEH,MAAM,EAAS,EAAG,IAAI,OAAO,qBAC3B,EAAQ,MAAM,EAAE,QAAQ,aAAa,CAC7C,EACM,EAAG,cAAc,cACf,EACA,EAAE,OAAO,MAAM,WAAW,iBAAiB,OACnD,EACM,EAAE,SAAS,OAAS,EACtB,CAAC,CACH,CACA,SAAU,CACR,KAAK,OAAS,KACd,KAAK,SAAW,KAChB,KAAK,UAAY,KACjB,KAAK,MAAQ,KACb,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,YAAc,KACnB,KAAK,WAAa,IACpB,CACF,CACA,MAAM,EAAY,CAOhB,OAAO,OAAO,EAAG,CACf,MAAM,EAAK,EAAE,OAAO,WAAa,EACjC,OAAQ,EAAE,QAAQ,KAAO,EAAE,QAAQ,MAAQ,CAC7C,CAOA,OAAO,UAAU,EAAG,EAAO,CACzB,OAAQ,EAAQ,EAAE,QAAQ,MAAQ,GAAY,OAAO,CAAC,CACxD,CAOA,OAAO,UAAU,EAAG,EAAI,CACtB,OAAO,EAAE,QAAQ,KAAO,EAAK,GAAY,OAAO,CAAC,CACnD,CACF,CACA,MAAM,GAA2B,IAC3B,GAA+B,IAC/B,GAA2B,IAC3B,GAAwB,IACxB,GAAiB,QACjB,GAAoB,GAC1B,MAAM,WAAyB,EAAQ,CAKrC,YAAY,EAAG,EAAK,CAClB,MAAM,EAAG,CAAG,EACZ,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,QAAU,GACf,KAAK,SAAW,IAAI,EAAS,KAAK,CAAC,EACnC,KAAK,UAAY,CACf,YACA,aACA,YACA,aACA,YACA,UACA,UACN,EACI,KAAK,QAAU,EACf,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,OAAS,EACd,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,cAAgB,MACvB,CAEA,KAAK,CAAE,SAAA,CAAQ,EAAI,CACjB,MAAM,EAAI,KAAK,EACT,EAAK,KACX,KAAK,SAAW,EAChB,KAAK,SAAW,KAAK,SAAS,SAAS,EAAG,EAAG,EAAG,CAAC,EACjD,KAAK,cAAgB,KAAK,SAAS,SAAS,EAAG,EAAG,EAAG,CAAC,EACtD,KAAK,YAAc,IAAI,GAAI,EAAG,EAAG,EAAE,OAAO,UAAW,EAAE,OAAO,UAAU,EACxE,KAAK,SAAS,KAAK,UAAU,IAAI,sBAAsB,EACvD,KAAK,cAAc,KAAK,UAAU,IAAI,2BAA2B,EACjE,EAAE,IAAI,MAAM,IAAI,KAAK,QAAQ,EAC7B,EAAE,IAAI,MAAM,IAAI,KAAK,aAAa,EAC9B,EAAE,OAAO,MAAM,UAAU,OAAS,IACpC,KAAK,gBAAkB,KAAK,cAAc,UAAU,CAClD,KAAM,EACN,KAAM,EACN,KAAM,EAAE,OAAO,UACf,KAAM,EAAE,OAAO,UACvB,CAAO,EAAE,GAAG,qBAAsB,KAAK,kBAAkB,KAAK,KAAM,UAAU,CAAC,EAChE,EAAE,OAAO,MAAM,UAAU,OAAS,IAC3C,KAAK,gBAAkB,KAAK,cAAc,UAAU,CAClD,KAAM,EACN,KAAM,EAAE,OAAO,SACvB,CAAO,EAAE,GAAG,qBAAsB,KAAK,kBAAkB,KAAK,KAAM,UAAU,CAAC,EAEzE,KAAK,gBAAkB,KAAK,cAAc,UAAS,EAAG,GAAG,qBAAsB,KAAK,kBAAkB,KAAK,KAAM,UAAU,CAAC,EAE9H,KAAK,qBAAoB,EACzB,KAAK,UACL,EAAE,IAAI,OAAO,cAAc,GAAG,EAAE,QAAQ,UAAU,kBAAkB,EAC/D,KAAK,YACV,KAAK,UAAU,UAAU,IAAI,qBAAqB,EAClD,KAAK,UAAU,QAAS,GAAU,CAChC,IAAI,GACH,EAAK,KAAK,YAAc,MAAgB,EAAG,iBAC1C,EACA,EAAG,eAAe,KAAK,EAAI,CAAQ,EACnC,CACE,QAAS,GACT,QAAS,EACnB,CACA,CACI,CAAC,EACG,EAAE,OAAO,MAAM,KAAK,SAAW,EAAE,OAAO,MAAM,KAAK,qBACrD,KAAK,UAAU,iBAAiB,QAAS,EAAG,gBAAgB,KAAK,CAAE,EAAG,CACpE,QAAS,GACT,QAAS,EACjB,CAAO,EAEC,KAAK,iBAAgB,GACvB,CAAC,aAAc,YAAa,WAAY,aAAa,EAAE,QACpD,GAAU,CACT,IAAI,GACH,EAAK,KAAK,YAAc,MAAgB,EAAG,iBAAiB,EAAO,EAAG,cAAc,KAAK,CAAE,EAAG,CAC7F,QAAS,GACT,QAAS,EACrB,CAAW,CACH,CACR,EAEE,CAEA,SAAU,CACJ,KAAK,kBACP,KAAK,gBAAgB,UAAU,EAAK,EACpC,KAAK,gBAAgB,IAAG,EACxB,KAAK,cAAc,IAAG,GAExB,KAAK,cAAgB,KACrB,KAAK,SAAW,IAClB,CAKA,eAAe,EAAU,EAAG,CAC1B,MAAM,EAAI,KAAK,EACT,EAAU,KAAK,IAAI,QAEzB,GADI,EAAE,SAAS,UAAY,EAAE,SAAS,SAAS,MAC3C,KAAK,iBAAgB,GAAM,EAAE,SAAW,EAAE,QAAQ,OAAS,EAC7D,OAEF,MAAM,EAAW,EAAE,SAAS,YAAc,EAAE,OAAO,MAAM,KAAK,KAAO,EAAE,OAAO,MAAM,UAAU,KACxF,EAAe,EAAE,OAAO,MAAM,QAAQ,aAY5C,GAXI,IAAiB,YACf,EAAE,UACJ,EAAE,SAAS,gBAAkB,GAC7B,EAAQ,yBAAyB,IAAiB,MAAQ,OAAS,KAAK,GAEpE,EAAE,SAAS,kBACb,EAAQ,yBAAyB,CAAY,EAC7C,EAAE,SAAS,gBAAkB,KAI/B,CAAC,EAAE,OAAQ,OACf,MAAM,EAAK,EAAE,OAAO,UACpB,IAAI,EAKJ,GAJI,EAAE,OAAO,YAAc,EAAE,OAAO,aAAe,OACjD,EAAK,EAAE,OAAO,WAAW,WAEJ,EAAA,EAAG,SAAS,0BAA0B,GAAK,EAAG,SAAS,wBAAwB,GAAK,GAAM,EAAG,SAAS,oBAAoB,GAIjJ,IAFA,KAAK,QAAU,EAAE,OAAS,aAAe,EAAE,OAAS,aAAe,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,OAAS,WAAa,EAAE,eAAe,CAAC,EAAE,QAAU,EAAE,QAClJ,KAAK,QAAU,EAAE,OAAS,aAAe,EAAE,OAAS,aAAe,EAAE,QAAQ,CAAC,EAAE,QAAU,EAAE,OAAS,WAAa,EAAE,eAAe,CAAC,EAAE,QAAU,EAAE,QAC9I,EAAE,OAAS,aAAe,EAAE,QAAU,GAAK,EAAE,OAAS,aAAc,CACtE,MAAM,EAAc,KAAK,UAAS,EAClC,GAAI,CAAC,EAAa,OAClB,KAAK,OAAS,KAAK,iBAAiB,KAAK,OAAO,EAChD,KAAK,OAAS,KAAK,QAAU,EAAY,IACzC,KAAK,QAAU,GACf,KAAK,EAAE,SAAS,UAAY,EAC9B,EACI,EAAE,OAAS,aAAe,EAAE,QAAU,GAAK,EAAE,OAAS,eACxD,KAAK,QAAU,GACX,EAAE,SAAS,YACb,EAAE,SAAS,UAAY,KACnB,KAAK,EAAE,SAAS,WAClB,KAAK,YAAY,CACf,QAAS,KACT,SAAA,EACA,SAAU,KAAK,QAC3B,CAAW,IAGC,KAAK,EAAE,SAAS,WAAa,EAAE,SAAS,aAAe,KAAK,EAAE,SAAS,WAAa,EAAE,SAAS,oBACjG,KAAK,UAAY,KAAK,iBAAiB,CACrC,QAAS,KACT,SAAA,CACZ,CAAW,KAIH,EAAE,OAAS,WAAa,EAAE,OAAS,YAAc,EAAE,OAAS,eAC9D,KAAK,cAAc,CAAE,SAAA,CAAQ,CAAE,EAEjC,KAAK,2BAA0B,EACjC,CAEA,cAAc,CAAE,SAAA,EAAU,UAAA,CAAS,EAAI,CACrC,MAAM,EAAI,KAAK,EACT,EAAc,KAAK,UAAS,EAC9B,IAAgB,KAAK,EAAE,SAAS,WAAa,KAC/C,KAAK,KAAO,KAAK,iBAAiB,KAAK,OAAO,EAC9C,KAAK,KAAO,KAAK,QAAU,EAAY,IACvC,KAAK,MAAQ,KAAK,IAAI,KAAK,KAAO,KAAK,MAAM,EAC7C,KAAK,MAAQ,KAAK,IAAI,KAAK,KAAO,KAAK,MAAM,GACzC,EAAE,SAAS,aAAe,EAAE,SAAS,mBACvC,KAAK,eAAe,CAClB,QAAS,KACT,SAAA,CACV,CAAS,GAGD,EAAE,SAAS,aACb,KAAK,kBAAkB,KAAK,aAAa,EAE3C,KAAK,QAAU,GACf,KAAK,EAAE,SAAS,UAAY,EAC9B,CAoBA,QAAS,CACP,MAAM,EAAK,KAAK,EAAE,SAClB,OAAK,EAAG,QACN,EAAG,MAAQ,CACT,OAAQ,EACR,QAAS,EAET,MAAO,KAEP,SAAU,IAClB,GAEW,EAAG,KACZ,CAIA,gBAAgB,EAAG,CACjB,EAAE,eAAc,EAChB,MAAM,EAAK,KAAK,OAAM,EACtB,IAAI,EAAK,EAAE,OACP,EAAE,YAAc,EAAG,GAAM,GACpB,EAAE,YAAc,IAAG,GAAM,KAClC,EAAG,QAAU,KAAK,IAAI,EAAG,EAAK,EAAwB,EACtD,EAAG,QAAU,EAAE,QACX,EAAG,OAAS,OACd,EAAG,MAAQ,sBAAsB,IAAM,KAAK,gBAAe,CAAE,GAE3D,EAAG,UAAU,aAAa,EAAG,QAAQ,EACzC,EAAG,SAAW,WAAW,IAAM,KAAK,cAAa,EAAI,GAAG,CAC1D,CAKA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACT,EAAK,KAAK,OAAM,EACtB,EAAG,MAAQ,KACX,MAAM,EAAQ,EAAG,OAEjB,GADA,EAAG,OAAS,EACR,IAAU,GAAK,EAAE,QAAQ,YAAa,OAC1C,MAAM,EAAc,KAAK,UAAS,EAClC,GAAI,CAAC,GAAe,CAAC,EAAY,MAAO,OACxC,KAAM,CAAE,IAAA,EAAK,IAAA,CAAG,EAAK,KAAK,gBAAe,EACnC,EAAQ,EAAM,EACd,EAAS,KAAK,IAClB,KAAK,KAAK,EAAG,QAAU,EAAY,MAAQ,EAAY,MAAO,CAAC,EAC/D,CACN,EACI,IAAI,EAAW,EAAQ,EACvB,MAAM,EAAS,KAAK,aAAY,EAChC,GAAI,EAAQ,CACV,MAAM,EAAW,EAAE,QAAQ,SAAW,GAAK,SAAS,EAAE,QAAQ,QAAQ,EAAI,EAAE,QAAQ,SAAW,EACzF,EAAW,KAAK,IAAI,EAAW,GAAI,EAAO,IAAM,EAAO,KAAO,IAAI,EACpE,EAAW,IAAU,EAAW,GAChC,EAAW,EAAO,IAAM,EAAO,MAAK,EAAW,EAAO,IAAM,EAAO,IACzE,CAEA,IAAI,EADW,EAAM,EAAS,EACP,EAAS,EAC5B,EAAU,EAAU,EACxB,MAAM,EAAM,EAAQ,KAEpB,GADI,KAAK,IAAI,EAAU,CAAG,EAAI,GAAO,KAAK,IAAI,EAAU,CAAG,EAAI,GAC3D,MAAM,CAAO,GAAK,MAAM,CAAO,EAAG,OACtC,MAAM,EAAkB,KAAK,mBAC3B,CAAE,IAAK,EAAS,IAAK,CAAO,EAE5B,MACN,EACQ,GAAmB,EAAgB,QACrC,EAAU,EAAgB,MAAM,IAChC,EAAU,EAAgB,MAAM,KAElC,KAAK,aAAa,EAAS,EAAS,EAAI,CAC1C,CAEA,eAAgB,CACd,MAAM,EAAI,KAAK,EACT,EAAK,KAAK,OAAM,EAEtB,GADA,EAAG,SAAW,KACV,EAAE,QAAQ,aAAe,CAAC,EAAE,SAAS,OAAQ,OACjD,KAAM,CAAE,IAAA,EAAK,IAAA,CAAG,EAAK,KAAK,gBAAe,EACnC,EAAQ,EAAE,QAAQ,cAAgB,EAAQ,MAAM,EAAE,QAAQ,cAAc,KAAK,EAAI,CAAA,EACjF,EAAU,KAAK,IAAI,QACrB,GAAS,EAAQ,aAAa,CAAE,IAAA,EAAK,IAAA,CAAG,EAAI,CAAK,CACvD,CACA,4BAA6B,CAC3B,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,KAAK,cAAe,OACzB,MAAM,EAAU,KAAK,cAAc,KAAK,sBAAqB,EACzD,EAAQ,MAAQ,GAAK,EAAQ,OAAS,IACxC,KAAK,cAAc,OAAO,EAAK,EAAE,OAAO,EAAK,EAC7C,KAAK,cAAc,OAAO,CACxB,UAAW,IAAM,CACjB,EACA,UAAW,IAAM,CACjB,EACA,aAAc,CAAC,EAAO,EAAG,EAAO,EAAU,IACpC,IAAe,KAAO,IAAe,IAChC,EAAM,OAAO,CAAC,EAAE,IAAI,CAAE,eAAgB,EAAG,OAAQ,OAAQ,KAAM,MAAM,CAAE,EACzE,EAAM,OAAO,CAAC,EAEvB,aAAc,CAAC,EAAO,IACb,EAAM,OAAO,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,CAExC,CAAO,EAAE,OAAM,EAAG,GAAG,SAAU,IAAM,CAC7B,IAAI,EACJ,GAAI,EAAE,SAAS,iBACb,EAAE,SAAS,UAAY,CACrB,EAAG,WAAW,KAAK,cAAc,KAAK,aAAa,GAAG,CAAC,EACvD,EAAG,WAAW,KAAK,cAAc,KAAK,aAAa,GAAG,CAAC,EACvD,MAAO,WAAW,KAAK,cAAc,KAAK,aAAa,OAAO,CAAC,EAC/D,OAAQ,WAAW,KAAK,cAAc,KAAK,aAAa,QAAQ,CAAC,CAC7E,EACU,cAAc,EAAK,KAAK,EAAE,QAAQ,uBAAyB,KAAO,EAAK,MAAM,EAC7E,KAAK,EAAE,QAAQ,qBAAuB,OAAO,WAAW,IAAM,CAC5D,KAAK,uBAAsB,CAC7B,EAAG,EAAE,MACA,CACL,MAAM,EAAW,EAAE,SAAS,YAAc,EAAE,OAAO,MAAM,KAAK,KAAO,EAAE,OAAO,MAAM,UAAU,KAC9F,KAAK,cAAc,CAAE,SAAA,EAAU,UAAW,EAAI,CAAE,CAClD,CACF,CAAC,EAEL,CACA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACT,EAAW,KAAK,SACtB,GAAI,CAAC,EAAE,SAAS,aACd,GAAI,OAAO,EAAE,SAAS,UAAc,KAAe,EAAE,SAAS,YAAc,KAC1E,KAAK,kBAAkB,EAAc,EAAe,CAAA,EAAI,EAAE,SAAS,SAAS,EAAG,CAC7E,WAAY,EAAE,OAAO,WACrB,WAAY,EAAE,OAAO,UAC/B,CAAS,CAAC,UAEE,EAAE,OAAO,MAAM,UAAU,MAAM,MAAQ,QAAU,EAAE,OAAO,MAAM,UAAU,MAAM,MAAQ,OAAQ,CAClG,IAAI,EAAI,GAAY,UAAU,EAAG,EAAE,OAAO,MAAM,UAAU,MAAM,GAAG,EAC/D,EAAQ,GAAY,UAAU,EAAG,EAAE,OAAO,MAAM,UAAU,MAAM,GAAG,EAAI,EACvE,EAAE,UAAU,aACd,GAAK,EAAE,OAAO,MAAM,UAAU,MAAM,IAAM,EAAE,QAAQ,WAAW,CAAC,EAAE,SAAW,EAAS,eACtF,GAAS,EAAE,OAAO,MAAM,UAAU,MAAM,IAAM,EAAE,OAAO,MAAM,UAAU,MAAM,KAAO,EAAS,gBAE/F,MAAM,EAAgB,CACpB,EAAA,EACA,EAAG,EACH,MAAA,EACA,OAAQ,EAAE,OAAO,WACjB,WAAY,EAAE,OAAO,WACrB,WAAY,EAAE,OAAO,WACrB,iBAAkB,EAC9B,EACU,KAAK,kBAAkB,CAAa,EACpC,KAAK,2BAA0B,EAC3B,OAAO,EAAE,OAAO,MAAM,OAAO,WAAc,YAC7C,EAAE,OAAO,MAAM,OAAO,UAAU,KAAK,IAAK,CACxC,MAAO,CACL,IAAK,EAAE,OAAO,MAAM,UAAU,MAAM,IACpC,IAAK,EAAE,OAAO,MAAM,UAAU,MAAM,GACpD,EACc,MAAO,CAAA,CACrB,CAAa,CAEL,EAGN,CAEA,kBAAkB,CAAE,EAAA,EAAG,EAAA,EAAG,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAa,EAAG,WAAA,EAAa,CAAC,EAAI,CACzE,MAAM,EAAI,KAAK,EACT,EAAW,KAAK,SAChB,EAAgB,KAAK,cAC3B,GAAI,KAAK,SAAW,EAAE,SAAS,YAAc,KAAM,CACjD,MAAM,EAAe,CACnB,UAAW,aAAe,EAAa,KAAO,EAAa,GACnE,EACU,EAAE,SAAS,aAAe,KAAK,UAC7B,EAAQ,IAAG,EAAQ,GACvB,EAAS,KAAK,CACZ,EAAA,EACA,EAAA,EACA,MAAA,EACA,OAAA,EACA,KAAM,EAAE,OAAO,MAAM,KAAK,WAAW,KAAK,MAC1C,eAAgB,EAAE,OAAO,MAAM,KAAK,WAAW,KAAK,QACpD,OAAQ,EAAE,OAAO,MAAM,KAAK,WAAW,OAAO,MAC9C,eAAgB,EAAE,OAAO,MAAM,KAAK,WAAW,OAAO,MACtD,iBAAkB,EAAE,OAAO,MAAM,KAAK,WAAW,OAAO,OAClE,CAAS,EACD,EAAS,SAAS,EAAS,KAAM,CAAY,GAE3C,EAAE,SAAS,mBACb,EAAc,KAAK,CACjB,EAAA,EACA,EAAA,EACA,MAAO,EAAQ,EAAI,EAAQ,EAC3B,OAAQ,EAAS,EAAI,EAAS,EAC9B,KAAM,EAAE,OAAO,MAAM,UAAU,KAAK,MACpC,eAAgB,EAAE,OAAO,MAAM,UAAU,KAAK,QAC9C,OAAQ,EAAE,OAAO,MAAM,UAAU,OAAO,MACxC,eAAgB,EAAE,OAAO,MAAM,UAAU,OAAO,MAChD,mBAAoB,EAAE,OAAO,MAAM,UAAU,OAAO,UACpD,iBAAkB,EAAE,OAAO,MAAM,UAAU,OAAO,OAC5D,CAAS,EACD,EAAS,SAAS,EAAc,KAAM,CAAY,EAEtD,CACF,CAIA,kBAAkB,EAAM,CAClB,GACF,EAAK,KAAK,CACR,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,CAChB,CAAO,CAEL,CACA,iBAAiB,CAAE,QAAA,EAAS,SAAA,CAAQ,EAAI,CACtC,MAAM,EAAI,KAAK,EACT,EAAK,EACL,EAAc,KAAK,UAAS,EAClC,GAAI,CAAC,EAAa,OAClB,MAAM,EAAS,EAAG,OAAS,EACrB,EAAS,EAAG,OAClB,IAAI,EAAY,GACZ,EAAY,GAChB,MAAM,EAAO,KAAK,iBAAiB,EAAG,OAAO,EACvC,EAAM,EAAG,QAAU,EAAY,IACrC,IAAI,EAAiB,EAAO,EACxB,EAAkB,EAAM,EACxB,EAAgB,CAClB,WAAY,EAAE,OAAO,WACrB,WAAY,EAAE,OAAO,UAC3B,EACI,OAAI,KAAK,IAAI,EAAiB,CAAM,EAAI,EAAE,OAAO,UAC/C,EAAiB,EAAE,OAAO,UAAY,EAC7B,EAAO,IAChB,EAAiB,GAEf,EAAS,IACX,EAAY,GACZ,EAAiB,KAAK,IAAI,CAAc,GAEtC,EAAS,IACX,EAAY,GACZ,EAAkB,KAAK,IAAI,CAAe,GAExC,IAAa,IACf,EAAgB,CACd,EAAG,EAAY,EAAS,EAAiB,EACzC,EAAG,EACH,MAAO,EACP,OAAQ,EAAE,OAAO,UACzB,EACe,IAAa,IACtB,EAAgB,CACd,EAAG,EACH,EAAG,EAAY,EAAS,EAAkB,EAC1C,MAAO,EAAE,OAAO,UAChB,OAAQ,CAChB,EAEM,EAAgB,CACd,EAAG,EAAY,EAAS,EAAiB,EACzC,EAAG,EAAY,EAAS,EAAkB,EAC1C,MAAO,EACP,OAAQ,CAChB,EAEI,EAAgB,EAAc,EAAe,CAAA,EAAI,CAAa,EAAG,CAC/D,WAAY,EAAE,OAAO,WACrB,WAAY,EAAE,OAAO,UAC3B,CAAK,EACD,EAAG,kBAAkB,CAAa,EAClC,EAAG,kBAAkB,UAAU,EACxB,CACT,CAKA,kBAAkB,EAAM,EAAG,CACzB,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAG,OACR,EAAE,eAAc,EAChB,KAAM,CAAE,QAAA,EAAS,IAAA,CAAG,EAAK,EAAE,OACrB,EAEJ,KAAK,YAEP,GAAI,CAAE,EAAA,EAAG,EAAA,CAAC,EAAK,EACX,EAAI,EAAY,IAClB,EAAI,EAAY,GAEd,EAAI,EAAY,IAClB,EAAI,EAAY,GAEd,EAAI,GAAK,EAAY,KACvB,EAAI,EAAY,GAAK,EAAI,GAEvB,EAAI,GAAK,EAAY,KACvB,EAAI,EAAY,GAAK,EAAI,GAE3B,EAAQ,KAAK,EAAG,CAAC,EACjB,MAAM,EAAU,KAAK,cACrB,IAAI,EAAgB,EAChB,IAAS,aACX,EAAgB,IAElB,MAAM,EAAc,GACX,WAAW,EAAQ,KAAK,aAAa,CAAI,CAAC,EAE7C,EAAe,CACnB,EAAG,EAAW,GAAG,EACjB,EAAG,EAAW,GAAG,EACjB,MAAO,EAAW,OAAO,EACzB,OAAQ,EAAW,QAAQ,CACjC,EACI,EAAE,SAAS,UAAY,EACvB,MAAM,EAAO,EAAE,OAAO,MAAM,KACtB,EAAa,CAAC,EAAE,IAAS,EAAK,SAAW,OAAO,EAAK,WAAc,cACpE,OAAO,EAAE,OAAO,MAAM,OAAO,WAAc,YAAc,IAAe,EAAE,SAAS,mBACtF,cAAc,EAAK,KAAK,EAAE,QAAQ,uBAAyB,KAAO,EAAK,MAAM,EAC7E,KAAK,EAAE,QAAQ,qBAAuB,OAAO,WAAW,IAAM,CAC5D,KAAK,uBAAsB,CAC7B,EAAG,CAAa,EAEpB,CAUA,wBAAyB,CACvB,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAE,SAAS,iBAAkB,OAClC,MAAM,EAAO,EAAE,OAAO,MAAM,KACtB,EAAa,CAAC,EAAE,IAAS,EAAK,SAAW,OAAO,EAAK,WAAc,aACzE,GAAI,OAAO,EAAE,OAAO,MAAM,OAAO,WAAc,YAAc,CAAC,EAC5D,OAEF,MAAM,EAAc,KAAK,UAAS,EAClC,GAAI,CAAC,EAAa,OAClB,MAAM,EAAgB,KAAK,cAAc,KAAK,sBAAqB,EAC7D,EAAW,KAAK,SACtB,IAAI,EAAM,EAAM,EAAM,EACtB,MAAM,EAAU,KAAK,iBAAiB,EAAc,IAAI,EAClD,EAAW,KAAK,iBAAiB,EAAc,KAAK,EAC1D,GAAK,EAAE,UAAU,WAOf,EAAO,EAAE,QAAQ,WAAW,CAAC,EAAE,QAAU,EAAU,EAAS,eAC5D,EAAO,EAAE,QAAQ,WAAW,CAAC,EAAE,QAAU,EAAW,EAAS,eAC7D,EAAO,EACP,EAAO,MAVoB,CAC3B,GAAI,CAAC,EAAE,QAAQ,WAAY,OAC3B,EAAO,GAAY,UAAU,EAAG,CAAO,EACvC,EAAO,GAAY,UAAU,EAAG,CAAQ,EACxC,EAAO,EAAE,QAAQ,WAAW,CAAC,EAAE,SAAW,EAAY,OAAS,EAAc,QAAU,EAAS,OAAO,CAAC,EACxG,EAAO,EAAE,QAAQ,WAAW,CAAC,EAAE,SAAW,EAAc,IAAM,EAAY,KAAO,EAAS,OAAO,CAAC,CACpG,CAMA,MAAM,EAAS,CACb,MAAO,CAAE,IAAK,EAAM,IAAK,CAAI,EAC7B,MAAO,CAAE,IAAK,EAAM,IAAK,CAAI,CACnC,EACQ,OAAO,EAAE,OAAO,MAAM,OAAO,WAAc,YAC7C,EAAE,OAAO,MAAM,OAAO,UAAU,KAAK,IAAK,CAAM,EAE9C,EAAE,OAAO,MAAM,MAAM,SAAW,EAAE,OAAO,MAAM,OAAO,gBAAkB,QAC1E,EAAE,OAAO,MAAM,OAAO,cAAc,KAAK,IAAK,CAAM,GAErD,EAAK,KAAK,IAAI,cAAgB,MAAgB,EAAG,kBAAkB,EAAO,KAAK,CAClF,CAEA,eAAe,CAAE,QAAA,EAAS,SAAA,CAAQ,EAAI,CACpC,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAK,EACL,EAAW,KAAK,SAChB,EAAU,KAAK,IAAI,QACnB,EAAU,EAAE,SAAS,YAAc,EAAG,SAAS,KAAK,sBAAqB,EAAK,EAAG,cAAc,KAAK,sBAAqB,EACzH,EAAc,EAAG,UAAS,EAChC,GAAI,CAAC,EAAa,OAClB,MAAM,EAAc,KAAK,iBAAiB,EAAQ,IAAI,EAChD,EAAY,KAAK,iBAAiB,EAAQ,KAAK,EAC/C,EAAc,EAAQ,IAAM,EAAY,IACxC,EAAY,EAAQ,OAAS,EAAY,IAC/C,IAAI,EAAc,EACb,EAAE,UAAU,YAIf,EAAe,EAAE,QAAQ,WAAW,CAAC,EAAE,QAAU,EAAc,EAAS,eACxE,EAAgB,EAAE,QAAQ,WAAW,CAAC,EAAE,QAAU,EAAY,EAAS,iBAJvE,EAAe,GAAY,UAAU,EAAG,CAAW,EACnD,EAAgB,GAAY,UAAU,EAAG,CAAS,GAKpD,MAAM,EAAgB,CAAA,EAChB,EAAe,CAAA,EAQrB,GAPA,EAAE,OAAO,MAAM,QAAQ,CAAC,EAAM,IAAU,CACtC,MAAM,EAAc,EAAE,QAAQ,eAAe,CAAK,EAAE,CAAC,EAC/C,EAAa,EAAE,QAAQ,WAAW,CAAK,EAAE,QAAU,EAAS,OAAO,CAAW,EAAI,EAClF,EAAY,EAAE,QAAQ,WAAW,CAAK,EAAE,QAAU,EAAS,OAAO,CAAW,EAAI,EACvF,EAAc,KAAK,CAAU,EAC7B,EAAa,KAAK,CAAS,CAC7B,CAAC,EACG,EAAG,UAAY,EAAG,MAAQ,IAAM,EAAG,MAAQ,KAAO,IAAiB,GACrE,GAAI,EAAE,SAAS,YAAa,CAC1B,GAAI,CAAC,EAAE,QAAQ,cAAe,OAC9B,IAAI,EAAQ,EAAQ,MAAM,EAAE,QAAQ,cAAc,KAAK,EACnD,EAAQ,EAAQ,MAAM,EAAE,QAAQ,cAAc,KAAK,EAyBvD,GAxBA,EAAE,SAAS,OAAS,GAChB,EAAE,OAAO,MAAM,wBACjB,EAAe,KAAK,MAAM,CAAY,EACtC,EAAgB,KAAK,MAAM,CAAa,EACpC,EAAe,IACjB,EAAe,EACf,EAAgB,EAAE,QAAQ,YAExB,EAAgB,EAAe,IACjC,EAAgB,EAAe,KAG/B,IAAa,MAAQ,IAAa,OACpC,EAAQ,CACN,IAAK,EACL,IAAK,CACjB,IAEY,IAAa,MAAQ,IAAa,MACpC,EAAM,QAAQ,CAAC,EAAM,IAAU,CAC7B,EAAM,CAAK,EAAE,IAAM,EAAa,CAAK,EACrC,EAAM,CAAK,EAAE,IAAM,EAAc,CAAK,CACxC,CAAC,EAEC,EAAS,CACX,MAAM,EAAkB,EAAQ,mBAAmB,EAAO,CAAK,EAC3D,IACF,EAAQ,EAAgB,MAAQ,EAAgB,MAAQ,EACxD,EAAQ,EAAgB,MAAQ,EAAgB,MAAQ,EAE5D,CACA,MAAM,EAAW,CACf,MAAA,CACV,EACa,EAAE,OAAO,MAAM,QAClB,EAAS,MAAQ,GAEnB,EAAG,IAAI,cAAc,eACnB,EACA,GACA,EAAG,EAAE,OAAO,MAAM,WAAW,iBAAiB,OACxD,EACY,OAAO,EAAE,OAAO,MAAM,OAAO,QAAW,YAC1C,EAAQ,aAAa,EAAO,CAAK,CAErC,SAAW,EAAE,SAAS,iBAAkB,CACtC,IAAI,EAAQ,KACR,EAAQ,KAKZ,GAJA,EAAQ,CACN,IAAK,EACL,IAAK,CACf,EACY,IAAa,MAAQ,IAAa,IAAK,CACzC,MAAM,EAEJ,EAAQ,MAAM,EAAE,OAAO,KAAK,EAE9B,EAAQ,EACR,EAAU,QAAQ,CAAC,EAAM,IAAU,CACjC,EAAU,CAAK,EAAE,IAAM,EAAa,CAAK,EACzC,EAAU,CAAK,EAAE,IAAM,EAAc,CAAK,CAC5C,CAAC,CACH,CACA,EAAE,SAAS,UAAY,EAAG,UACtB,OAAO,EAAE,OAAO,MAAM,OAAO,WAAc,YAC7C,EAAE,OAAO,MAAM,OAAO,UAAU,EAAG,IAAK,CACtC,MAAA,EACA,MAAA,CACZ,CAAW,GAEF,EAAK,EAAG,IAAI,cAAgB,MAAgB,EAAG,kBAAkB,CAAK,CACzE,EAEJ,CAEA,YAAY,CAAE,QAAA,CAAO,EAAI,CACvB,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAK,EACX,GAAI,OAAO,EAAE,SAAS,mBAAmB,EAAM,IAAa,CAC1D,MAAM,EAAS,EAAE,SAAS,mBAAmB,EAAI,EAAG,QAC9C,IAAW,EAAK,EAAE,SAAS,mBAAmB,IAAM,KAAO,EAAK,GAAK,EAAG,QAC1E,KAAK,IAAI,CAAM,EAAI,KAAK,IAAI,CAAM,GAAK,EAAS,EAClD,KAAK,cAAgB,OACZ,KAAK,IAAI,CAAM,EAAI,KAAK,IAAI,CAAM,GAAK,EAAS,EACzD,KAAK,cAAgB,QACZ,KAAK,IAAI,CAAM,EAAI,KAAK,IAAI,CAAM,GAAK,EAAS,EACzD,KAAK,cAAgB,KACZ,KAAK,IAAI,CAAM,EAAI,KAAK,IAAI,CAAM,GAAK,EAAS,IACzD,KAAK,cAAgB,OAEzB,CACA,EAAE,SAAS,mBAAqB,CAC9B,EAAG,EAAG,QACN,EAAG,EAAG,OACZ,EACI,MAAM,EAAe,EAAE,UAAU,WAAa,EAAE,QAAQ,KAAO,EAAE,QAAQ,KACnE,EAAgB,EAAE,UAAU,WAAa,EAAE,QAAQ,KAAO,EAAE,QAAQ,KAC1E,EAAG,YAAY,EAAc,CAAa,CAC5C,CAyBA,YAAY,EAAc,EAAe,CACvC,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAW,KAAK,SACtB,GAAI,CAAC,EAAE,QAAQ,cAAe,OAC9B,MAAM,EAAQ,EAAQ,MAAM,EAAE,QAAQ,cAAc,KAAK,EACzD,IAAI,EAAS,EAAS,OAClB,EAAO,EAAE,QAAQ,KACjB,EAAO,EAAE,QAAQ,KAarB,GAZI,EAAE,UAAU,aACd,EAAS,EAAS,eAClB,EAAO,EAAE,QAAQ,KACjB,EAAO,EAAE,QAAQ,MAEf,KAAK,gBAAkB,QACzB,EAAe,EAAO,EAAE,OAAO,UAAY,GAAoB,EAC/D,EAAgB,EAAO,EAAE,OAAO,UAAY,GAAoB,GACvD,KAAK,gBAAkB,UAChC,EAAe,EAAO,EAAE,OAAO,UAAY,GAAoB,EAC/D,EAAgB,EAAO,EAAE,OAAO,UAAY,GAAoB,GAE9D,CAAC,EAAE,UAAU,WAAY,CAC3B,MAAM,GAAY,EAAK,EAAE,QAAQ,qBAAuB,KAAO,EAAK,EAAE,QAAQ,YACxE,GAAY,EAAK,EAAE,QAAQ,qBAAuB,KAAO,EAAK,EAAE,QAAQ,aAC1E,EAAe,GAAY,EAAgB,KAC7C,EAAe,EACf,EAAgB,EAEpB,CAKA,MAAM,EAAW,CACf,MALY,CACZ,IAAK,EACL,IAAK,CACX,CAGA,EACS,EAAE,OAAO,MAAM,QAClB,EAAS,MAAQ,GAEnB,KAAK,oBAAoB,EAAU,EAAc,CAAa,CAChE,CAMA,oBAAoB,EAAU,EAAc,EAAe,CACzD,MAAM,EAAI,KAAK,EAEf,GADA,KAAK,IAAI,cAAc,eAAe,EAAU,GAAO,EAAK,EACxD,OAAO,EAAE,OAAO,MAAM,OAAO,UAAa,WAAY,CACxD,MAAM,EAAO,CACX,MAAO,CACL,IAAK,EACL,IAAK,CACf,CACA,EACM,EAAE,OAAO,MAAM,OAAO,SAAS,KAAK,IAAK,CAAI,EAC7C,KAAK,IAAI,OAAO,UAAU,WAAY,CAAI,CAC5C,CACF,CAaA,kBAAmB,CACjB,OAAO,KAAK,cAAa,GAAM,KAAK,mBAAkB,CACxD,CACA,eAAgB,CACd,MAAM,EAAI,KAAK,EAAE,OAAO,MACxB,MAAO,CAAC,EAAE,EAAE,MAAQ,EAAE,KAAK,SAAW,EAAE,KAAK,MAC/C,CACA,oBAAqB,CACnB,MAAM,EAAI,KAAK,EAAE,OAAO,MACxB,MAAO,CAAC,EAAE,EAAE,KAAO,EAAE,IAAI,QAC3B,CAEA,IAAK,CACH,MAAM,EAAK,KAAK,EAAE,SAClB,OAAK,EAAG,WACN,EAAG,SAAW,CACZ,KAAM,GAEN,MAAO,KAEP,SAAU,KAEV,QAAS,CAAA,EAET,WAAY,IACpB,GAEW,EAAG,QACZ,CAEA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACf,OAAO,EAAE,UAAU,WAAa,CAAE,IAAK,EAAE,QAAQ,KAAM,IAAK,EAAE,QAAQ,IAAI,EAAK,CAAE,IAAK,EAAE,QAAQ,KAAM,IAAK,EAAE,QAAQ,IAAI,CAC3H,CAMA,WAAY,CACV,MAAM,EAAS,KAAK,EAAE,IAAI,OACpB,EAAO,GAAU,EAAO,cAAc,kBAAkB,EAC9D,OAAO,EAAO,EAAK,sBAAqB,EAAK,IAC/C,CAcA,iBAAiB,EAAS,CACxB,MAAM,EAAS,KAAK,EAAE,IAAI,OACpB,EAAM,GAAU,EAAO,cAAc,iBAAiB,EACtD,EAAU,EAAM,EAAI,sBAAqB,EAAG,KAAO,EACzD,OAAO,EAAU,EAAU,KAAK,EAAE,OAAO,UAC3C,CAOA,cAAe,CACb,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACf,OAAI,EAAE,UAAU,WAAmB,KAC5B,CACL,KAAM,EAAK,EAAE,QAAQ,qBAAuB,KAAO,EAAK,EAAE,QAAQ,YAClE,KAAM,EAAK,EAAE,QAAQ,qBAAuB,KAAO,EAAK,EAAE,QAAQ,WACxE,CACE,CASA,aAAa,EAAS,EAAS,EAAQ,CACrC,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAE,QAAQ,cAAe,MAAO,GACrC,MAAM,EAAM,KAAK,gBAAe,EAC1B,EAAa,GAAU,EAAU,EAAU,EAAI,IAAM,EAAI,IACzD,EAAS,KAAK,aAAY,EAChC,GAAI,EAAQ,CACV,MAAM,EAAQ,EAAU,EACpB,EAAU,EAAO,MACnB,EAAU,EAAO,IACjB,EAAU,EAAU,GAElB,EAAU,EAAO,MACnB,EAAU,EAAO,IACjB,EAAU,EAAU,GAElB,EAAU,EAAO,MAAK,EAAU,EAAO,IAC7C,CAQA,GAPI,EAAE,OAAO,MAAM,wBACjB,EAAU,KAAK,MAAM,CAAO,EAC5B,EAAU,EAAa,KAAK,KAAK,CAAO,EAAI,KAAK,MAAM,CAAO,EAC1D,EAAU,IAAG,EAAU,GACvB,GAAU,EAAU,EAAO,MAAK,EAAU,KAAK,MAAM,EAAO,GAAG,GAC/D,EAAU,EAAU,IAEtB,EAAE,EAAU,GAAU,MAAO,GACjC,MAAM,EAAW,CAAE,MAAO,CAAE,IAAK,EAAS,IAAK,CAAO,CAAE,EACxD,OAAK,EAAE,OAAO,MAAM,QAClB,EAAS,MAAQ,EAAQ,MAAM,EAAE,QAAQ,cAAc,KAAK,GAE1D,IAAQ,EAAE,SAAS,OAAS,IAChC,KAAK,IAAI,cAAc,eAAe,EAAU,GAAO,EAAK,EACrD,CAAE,KAAM,EAAS,KAAM,CAAO,CACvC,CACA,gBAAiB,CACf,MAAM,EAAI,KAAK,GAAE,EACb,EAAE,YAAc,OAClB,qBAAqB,EAAE,UAAU,EACjC,EAAE,WAAa,KAEnB,CACA,eAAgB,CACd,MAAM,EAAI,KAAK,EACf,GAAI,OAAO,EAAE,OAAO,MAAM,OAAO,UAAa,WAAY,OAC1D,KAAM,CAAE,IAAA,EAAK,IAAA,CAAG,EAAK,KAAK,gBAAe,EACnC,EAAO,CAAE,MAAO,CAAE,IAAA,EAAK,IAAA,CAAG,CAAE,EAClC,EAAE,OAAO,MAAM,OAAO,SAAS,KAAK,IAAK,CAAI,EAC7C,KAAK,IAAI,OAAO,UAAU,WAAY,CAAI,CAC5C,CAEA,YAAY,EAAG,EAAG,CAChB,MAAM,EAAI,KAAK,GAAE,EAAG,QAEpB,IADA,EAAE,KAAK,CAAE,EAAA,EAAG,EAAA,CAAC,CAAE,EACR,EAAE,OAAS,GAAG,EAAE,MAAK,CAC9B,CAMA,cAAc,EAAG,CACf,MAAM,EAAI,KAAK,EACT,EAAI,KAAK,GAAE,EACX,EAAO,EAAE,KACf,GAAI,IAAS,aAAc,CACzB,KAAK,eAAc,EACnB,MAAM,EAAc,KAAK,UAAS,EAClC,GAAI,CAAC,EAAa,OAClB,GAAI,EAAE,QAAQ,QAAU,GAAK,KAAK,cAAa,EAC7C,EAAE,eAAc,EAChB,EAAE,KAAO,GACT,EAAE,SAAW,KACb,KAAK,YAAY,EAAG,CAAW,UACtB,EAAE,QAAQ,SAAW,GAAK,KAAK,mBAAkB,GAAM,EAAE,SAAS,WAAY,CACvF,EAAE,KAAO,GACT,EAAE,MAAQ,KACV,MAAM,EAAI,EAAE,QAAQ,CAAC,EACf,EAAM,KAAK,gBAAe,EAC1B,EAAK,EAAE,OAAO,WAAa,EACjC,EAAE,SAAW,CACX,OAAQ,EAAE,QACV,OAAQ,EAAE,QACV,KAAM,KAEN,MAAO,EAAI,IACX,MAAO,EAAI,IACX,QAAS,EAAI,IAAM,EAAI,KAAO,CACxC,EACQ,EAAE,QAAU,CAAC,CAAE,EAAG,EAAE,QAAS,EAAG,EAAE,SAAS,CAAE,CAC/C,CACA,MACF,CACA,GAAI,IAAS,YAAa,CACpB,EAAE,OAAS,EAAE,QAAQ,QAAU,GACjC,EAAE,eAAc,EAChB,KAAK,WAAW,CAAC,GACR,EAAE,UAAY,EAAE,QAAQ,SAAW,GAC5C,KAAK,SAAS,CAAC,EAEjB,MACF,CACI,EAAE,MACA,EAAE,QAAQ,OAAS,GAAG,KAAK,UAAS,EAC/B,EAAE,UACP,EAAE,QAAQ,SAAW,GAAG,KAAK,QAAO,EAEtC,EAAE,QAAQ,SAAW,IACvB,EAAE,SAAS,UAAY,GACvB,KAAK,QAAU,GACX,EAAE,YAAc,MAAQ,CAAC,EAAE,OAAS,CAAC,EAAE,WACzC,EAAE,KAAO,IAGf,CAEA,YAAY,EAAG,EAAa,CAC1B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QAAQ,CAAC,EAChB,EAAK,EAAE,QAAQ,CAAC,EAChB,EAAO,KAAK,MAAM,EAAG,QAAU,EAAG,QAAS,EAAG,QAAU,EAAG,OAAO,GAAK,EACvE,GAAM,EAAG,QAAU,EAAG,SAAW,EAAI,EAAY,KAAO,EAAE,QAAQ,qBAClE,CAAE,IAAA,EAAK,IAAA,CAAG,EAAK,KAAK,gBAAe,EACzC,KAAK,GAAE,EAAG,MAAQ,CAChB,GAAI,EACJ,IAAK,EACL,MAAO,EACP,MAAO,EACP,UAAW,EAAE,OAAO,WAAa,CACvC,CACE,CAEA,WAAW,EAAG,CACZ,MAAM,EAAI,KAAK,EACT,EAAI,KAAK,GAAE,EAAG,MACpB,GAAI,CAAC,EAAG,OACR,MAAM,EAAc,KAAK,UAAS,EAClC,GAAI,CAAC,EAAa,OAClB,MAAM,EAAK,EAAE,QAAQ,CAAC,EAChB,EAAK,EAAE,QAAQ,CAAC,EAChB,EAAO,KAAK,MAAM,EAAG,QAAU,EAAG,QAAS,EAAG,QAAU,EAAG,OAAO,GAAK,EACvE,GAAM,EAAG,QAAU,EAAG,SAAW,EAAI,EAAY,KAAO,EAAE,QAAQ,qBAClE,EAAS,EAAE,MAAQ,EAAE,MACrB,EAAW,GAAU,EAAE,GAAK,GAElC,IAAI,EADe,EAAE,MAAQ,EAAE,IAAM,EAAE,UAAY,EACxB,EAAK,EAAE,UAAY,EAC1C,EAAU,EAAU,EACxB,MAAM,EAAS,KAAK,aAAY,EAChC,GAAI,EAAQ,CACV,MAAM,EAAW,EAAE,QAAQ,SAAW,GAAK,SAAS,EAAE,QAAQ,QAAQ,EAAI,EAAE,QAAQ,SAAW,EACzF,EAAW,KAAK,IAAI,EAAW,GAAI,EAAO,IAAM,EAAO,KAAO,IAAI,EACxE,GAAI,EAAU,EAAU,EAAU,CAChC,MAAM,GAAO,EAAU,GAAW,EAClC,EAAU,EAAM,EAAW,EAC3B,EAAU,EAAM,EAAW,CAC7B,CACF,CACA,KAAK,aAAa,EAAS,EAAS,EAAI,CAC1C,CACA,WAAY,CACV,MAAM,EAAI,KAAK,EACT,EAAI,KAAK,GAAE,EACjB,EAAE,MAAQ,KACV,KAAM,CAAE,IAAA,EAAK,IAAA,CAAG,EAAK,KAAK,gBAAe,EACnC,EAAQ,CAAE,IAAA,EAAK,IAAA,CAAG,EAClB,EAAQ,EAAE,QAAQ,cAAgB,EAAQ,MAAM,EAAE,QAAQ,cAAc,KAAK,EAAI,CAAA,EACjF,EAAU,KAAK,IAAI,QACrB,GAAS,EAAQ,aAAa,EAAO,CAAK,CAChD,CAEA,SAAS,EAAG,CACV,MAAM,EAAI,KAAK,GAAE,EACX,EAAI,EAAE,SACN,EAAI,EAAE,QAAQ,CAAC,EACrB,GAAI,CAAC,EAAE,KAAM,CACX,MAAM,EAAK,KAAK,IAAI,EAAE,QAAU,EAAE,MAAM,EAClC,EAAK,KAAK,IAAI,EAAE,QAAU,EAAE,MAAM,EACxC,GAAI,EAAK,GAAK,EAAK,EAAG,CACpB,KAAK,YAAY,EAAE,QAAS,EAAE,SAAS,EACvC,MACF,CACA,GAAI,EAAK,EAAI,CACX,EAAE,KAAO,GACT,EAAE,SAAW,KACb,MACF,CACA,EAAE,KAAO,GACX,CACA,GAAI,EAAE,OAAS,IAAK,OACpB,EAAE,eAAc,EAEhB,MAAM,GADe,EAAE,QAAU,EAAE,QACF,EAAE,OACnC,KAAK,YAAY,EAAE,QAAS,EAAE,SAAS,EACvC,KAAK,aAAa,EAAE,MAAQ,EAAW,EAAE,MAAQ,EAAW,EAAK,CACnE,CACA,SAAU,CACR,MAAM,EAAI,KAAK,GAAE,EACX,EAAI,EAAE,SACZ,EAAE,SAAW,KACb,IAAI,EAAM,EACV,MAAM,EAAU,EAAE,QAClB,GAAI,EAAQ,QAAU,EAAG,CACvB,MAAM,EAAI,EAAQ,CAAC,EACb,EAAI,EAAQ,EAAQ,OAAS,CAAC,EAC9B,EAAK,EAAE,EAAI,EAAE,EACf,EAAK,IAAG,GAAO,EAAE,EAAI,EAAE,GAAK,EAClC,CACA,EAAE,QAAU,CAAA,EACR,GAAK,EAAE,OAAS,KAAO,KAAK,mBAAkB,GAAM,KAAK,IAAI,CAAG,EAAI,GACtE,KAAK,cAAc,CAAG,GAEtB,EAAE,KAAO,GACT,KAAK,cAAa,EAEtB,CAQA,cAAc,EAAM,CAClB,MAAM,EAAI,KAAK,EACT,EAAI,KAAK,GAAE,EACX,EAAc,EAAE,OAAO,MAAM,KAAO,EAAE,OAAO,MAAM,IAAI,SACvD,EAAW,OAAO,GAAgB,SAAW,KAAK,IAAI,KAAK,IAAI,EAAa,EAAG,EAAG,IAAK,EAAI,GACjG,IAAI,EAAM,EACN,EAAQ,KACZ,EAAE,KAAO,GACT,MAAM,EAAQ,GAAO,CACnB,GAAI,EAAE,QAAQ,YAAa,CACzB,EAAE,WAAa,KACf,EAAE,KAAO,GACT,MACF,CACA,GAAI,GAAS,KAAM,CACjB,EAAQ,EACR,EAAE,WAAa,sBAAsB,CAAI,EACzC,MACF,CACA,MAAM,EAAK,EAAK,EAGhB,GAFA,EAAQ,EACR,GAAO,KAAK,IAAI,EAAU,EAAK,EAAc,EACzC,KAAK,IAAI,CAAG,EAAI,GAAuB,CACzC,EAAE,WAAa,KACf,EAAE,KAAO,GACT,KAAK,cAAa,EAClB,MACF,CACA,MAAM,EAAM,KAAK,gBAAe,EAC1B,EAAK,EAAE,OAAO,WAAa,EAC3B,GAAS,EAAI,IAAM,EAAI,KAAO,EAC9B,EAAY,EAAM,EAAK,EACvB,EAAU,KAAK,aACnB,EAAI,IAAM,EACV,EAAI,IAAM,EACV,EACR,EACY,EAAS,KAAK,aAAY,EAEhC,GADgB,CAAC,GAAW,IAAW,EAAY,GAAK,EAAQ,MAAQ,EAAO,KAAO,EAAO,IAAM,EAAO,KAAO,MAAQ,EAAY,GAAK,EAAQ,MAAQ,EAAO,KAAO,EAAO,IAAM,EAAO,KAAO,MACtL,CACX,EAAE,WAAa,KACf,EAAE,KAAO,GACT,KAAK,cAAa,EAClB,MACF,CACA,EAAE,WAAa,sBAAsB,CAAI,CAC3C,EACA,EAAE,WAAa,sBAAsB,CAAI,CAC3C,CACF,CACA,GAAW,iBAAiB,CAC1B,QAAS,GACT,iBAAkB,EACpB,CAAC,EACD,IAAI,GAAY,KAAe,CAI7B,YAAY,EAAS,CACnB,KAAK,EAAI,EAAQ,EACjB,KAAK,QAAU,CACjB,CAKA,gBAAgB,EAAM,EAAY,KAAM,CACtC,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACf,GAAI,EAAK,MAAM,cAAgB,WAAY,CACzC,MAAM,EAAI,IAAc,KAAO,EAAY,EACrC,EAAQ,EAAE,IAAI,OAAO,cACzB,yEAAyE,CAAC,IAClF,EACM,GAAI,IAAU,KAAM,CAClB,MAAM,EAEJ,EAAM,QAAO,EAEf,EAAM,aACJ,IACA,OACE,YAAY,EAAK,EAAM,aAAa,GAAG,IAAM,KAAO,EAAK,GAAG,EAAI,EAAW,OAAS,CAChG,CACA,EACQ,MAAM,EAAU,EAAK,MAAM,WAAa,MAAQ,EAAW,MAAQ,CAAC,EAAW,MAC/E,EAAM,aACJ,IACA,OAAO,YAAY,EAAK,EAAM,aAAa,GAAG,IAAM,KAAO,EAAK,GAAG,EAAI,CAAO,CACxF,EACQ,KAAM,CAAE,EAAA,EAAG,EAAA,CAAC,EAAK,KAAK,QAAQ,SAAS,mBAAmB,CAAK,EAC/D,EAAM,aAAa,YAAa,cAAc,CAAC,IAAI,CAAC,GAAG,CACzD,CACF,CACF,CAKA,oBAAoB,EAAQ,EAAM,CAChC,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,GAAU,CAAC,EAAK,MAAM,MAAQ,CAAC,OAAO,EAAK,MAAM,IAAI,EAAE,KAAI,EAC9D,OAAO,KAET,MAAM,EAAS,EAAE,IAAI,OAAO,cAAc,kBAAkB,EAC5D,GAAI,CAAC,EAAQ,OAAO,KACpB,MAAM,EAAa,EAAO,sBAAqB,EACzC,EAEJ,EAAO,QAAO,EAEV,EAAO,EAAW,MAAQ,EAAS,OAAS,EAC5C,EAAS,EAAO,sBAAqB,EAC3C,GAAI,CACF,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,CACd,EAAQ,EAAK,MAAM,MAAM,QACjB,EAAK,MAAM,cAAgB,aAC7B,CAAC,EAAM,EAAS,EAAO,CAAM,EAAI,CAAC,EAAO,EAAQ,EAAM,CAAO,GAEhE,MAAM,GAAM,EAAO,KAAO,EAAW,MAAQ,EAAO,EAC9C,GAAM,EAAO,IAAM,EAAW,KAAO,EAAO,EAC5C,EAAS,KAAK,QAAQ,SAAS,SACnC,EAAK,EAAE,QAAQ,qBACf,EACA,EAAO,MAAQ,EAAO,EAAQ,EAC9B,EAAO,OAAS,EAAO,EAAO,EAC9B,EAAK,MAAM,aACX,EAAK,MAAM,MAAM,WACjB,EACA,EAAK,MAAM,YACX,EAAK,MAAM,YACX,CACN,EACI,OAAI,EAAK,IACP,EAAO,KAAK,UAAU,IAAI,EAAK,EAAE,EAE5B,CACT,CACA,uBAAwB,CACtB,MAAM,EAAI,KAAK,EACT,EAAM,CAAC,EAAM,EAAG,IAAS,CAC7B,MAAM,EAAY,EAAE,IAAI,OAAO,cAC7B,eAAe,CAAI,4BAA4B,CAAI,0BAA0B,CAAC,IACtF,EACM,GAAI,EAAW,CACb,MAAM,EAAS,EAAU,WACnB,EAAS,KAAK,oBAAoB,EAAW,CAAI,EACvD,GAAI,EAAQ,CACgB,GAAO,aAAa,EAAO,KAAM,CAAS,EACpE,MAAM,EAAS,EAAU,aAAa,GAAG,EACrC,IAAW,MACb,GAAuB,EAAQ,WAAW,CAAM,EAAG,CAAC,EAElD,EAAK,MAAM,YACb,EAAO,KAAK,iBACV,aACA,EAAK,MAAM,WAAW,KAAK,KAAM,CAAI,CACnD,EAEc,EAAK,MAAM,YACb,EAAO,KAAK,iBACV,aACA,EAAK,MAAM,WAAW,KAAK,KAAM,CAAI,CACnD,EAEc,EAAK,MAAM,OACb,EAAO,KAAK,iBACV,QACA,EAAK,MAAM,MAAM,KAAK,KAAM,CAAI,CAC9C,CAEQ,CACF,CACF,EACA,EAAE,OAAO,YAAY,MAAM,QACzB,CAAC,EAAM,IAAM,EAAI,EAAM,EAAG,OAAO,CACvC,EACI,EAAE,OAAO,YAAY,MAAM,QACzB,CAAC,EAAM,IAAM,EAAI,EAAM,EAAG,OAAO,CACvC,EACI,EAAE,OAAO,YAAY,OAAO,QAC1B,CAAC,EAAM,IAAM,EAAI,EAAM,EAAG,OAAO,CACvC,CACE,CAKA,QAAQ,EAAM,EAAM,CAClB,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAI,IAAS,KAAO,EAAK,EAAI,EAAK,GACxC,IAAI,EACA,EAAU,GACd,GAAI,KAAK,QAAQ,WAAY,CAC3B,MAAM,EAAS,EAAE,OAAO,MAAM,sBAAwB,EAAE,UAAU,eAAiB,EAAE,UAAU,OACzF,EAAW,EAAO,QAAQ,CAAC,EAC3B,EAAS,EAAE,IAAI,OAAO,cAC1B,4CAA4C,EAAW,CAAC,GAChE,EACM,EAAK,EAAS,YAAY,EAAK,EAAO,aAAa,GAAG,IAAM,KAAO,EAAK,GAAG,GAAK,EAAE,OAAO,WAAa,EAAO,OAAS,IAAM,EAAW,GAAK,EAAE,QAAQ,UAClJ,EAAK,cAAgB,QAAU,EAAE,QAAQ,YAC3C,GAAM,EAAE,QAAQ,UAAY,GAAK,EAAE,WAAW,OAAO,OAAS,GAAK,EAAE,QAAQ,UAAY,EAAK,YAElG,KAAO,CACL,MAAM,EAAW,EAAE,QAAQ,eAAe,EAAK,UAAU,EACzD,GAAI,CAAC,GAAY,EAAS,CAAC,GAAK,MAAQ,CAAC,EAAE,OAAO,MAAM,EAAK,UAAU,EACrE,MAAO,CAAE,GAAI,EAAG,QAAS,EAAI,EAE/B,MAAM,EAAc,EAAS,CAAC,EACxB,EAAO,EAAE,OAAO,MAAM,EAAK,UAAU,EAAE,YAAc,IAAI,GAAU,KAAK,CAAC,EAAE,UAC/E,EAAE,OAAO,MAAM,EAAK,UAAU,EAAE,QAChC,EACA,CACR,EACM,EAAE,QAAQ,UAAU,CAAW,GAAK,EAAI,EAAE,QAAQ,QAAQ,CAAW,IAAM,EAAE,QAAQ,OAAO,CAAW,EAAI,EAAE,OAAO,YACpH,EAAK,EAAE,OAAO,WAAa,KAAK,IAAI,KAAK,IAAI,EAAM,CAAC,EAAG,EAAE,OAAO,UAAU,EAC1E,EAAU,EAAO,EAAE,OAAO,YAAc,EAAO,EAC3C,EAAK,SAAW,EAAK,IAAM,QAAU,EAAK,IAAM,QAClD,EAAK,IAEF,EAAK,EAAE,OAAO,MAAM,EAAK,UAAU,IAAM,MAAgB,EAAG,WAC/D,EAAK,EAET,CACA,OAAI,OAAO,GAAM,UAAY,EAAE,SAAS,IAAI,IAC1C,EAAK,WAAW,CAAC,GAEZ,CAAE,GAAA,EAAI,QAAA,CAAO,CACtB,CAKA,QAAQ,EAAM,EAAM,CAClB,MAAM,EAAI,KAAK,EACT,EAAI,IAAS,KAAO,EAAK,EAAI,EAAK,GAClC,EAAM,KAAK,QAAQ,WAAa,EAAE,QAAQ,KAAO,EAAE,QAAQ,KAC3D,EAAM,KAAK,QAAQ,WAAa,EAAE,QAAQ,KAAO,EAAE,QAAQ,KAC3D,EAAQ,KAAK,QAAQ,WAAa,EAAE,QAAQ,OAAO,CAAC,EAAI,EAAE,QAAQ,OACxE,IAAI,EAAU,GACV,EAAK,KAAK,QAAQ,sBAAwB,EAAM,IAAM,EAAQ,EAAE,OAAO,YAAc,EAAI,IAAQ,EAAQ,EAAE,OAAO,WACtH,OAAK,EAAE,OAAO,MAAM,OAAS,YAAc,EAAE,OAAO,MAAM,wBAA0B,CAAC,KAAK,QAAQ,YAAc,CAAC,EAAE,UAAU,qBACtH,EAAE,OAAO,MAAM,UAAU,UAC5B,EAAK,KAAK,WAAW,CAAC,IAGtB,OAAO,GAAM,UAAY,EAAE,SAAS,IAAI,IAC1C,EAAK,WAAW,CAAC,GAEE,GAAM,MAAS,EAAK,SACvC,EAAK,EAAE,OAAO,WAEZ,EAAK,cAAgB,QAAU,EAAE,QAAQ,UAAY,CAAC,KAAK,QAAQ,aACrE,GAAM,EAAE,QAAQ,SAAW,GAAK,EAAE,WAAW,OAAO,OAAS,GAAK,EAAE,QAAQ,SAAW,EAAK,aAE1F,OAAO,GAAO,WAChB,EAAK,EACL,EAAU,IAER,WAAW,EAAG,QAAQ,EAAE,CAAC,EAAI,WAAW,EAAE,OAAO,UAAU,QAAQ,EAAE,CAAC,GACxE,EAAK,EAAE,OAAO,UACd,EAAU,IACD,EAAK,IACd,EAAK,EACL,EAAU,IAEL,CAAE,EAAG,EAAI,QAAA,CAAO,CACzB,CAIA,WAAW,EAAG,CACZ,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,IAAI,EAAK,EACT,GAAI,EAAE,OAAO,MAAM,uBAAyB,EAAE,UAAU,eAAe,OAAQ,CAC7E,MAAM,EAAO,OAAO,CAAC,EACrB,EAAI,EAAE,UAAU,eAAe,UAC5B,GAAM,OAAO,CAAC,IAAM,CAC7B,EAAU,CACN,CACA,MAAM,EAAW,EAAE,UAAU,OAAO,IACjC,GAAS,MAAM,QAAQ,CAAI,EAAI,EAAK,KAAK,GAAG,EAAI,CACvD,EAAM,QAAQ,CAAC,EACL,EAAS,EAAE,IAAI,OAAO,cAC1B,4CAA4C,EAAW,CAAC,GAC9D,EACI,OAAI,IACF,EAAK,YAAY,EAAK,EAAO,aAAa,GAAG,IAAM,KAAO,EAAK,GAAG,GAE7D,CACT,CACF,EACA,MAAM,EAAa,CAIjB,YAAY,EAAS,CACnB,KAAK,EAAI,EAAQ,EACjB,KAAK,QAAU,EACf,KAAK,WAAa,KAAK,QAAQ,WAC/B,KAAK,QAAU,IAAI,GAAU,KAAK,OAAO,CAC3C,CAMA,mBAAmB,EAAM,EAAQ,EAAO,CACtC,MAAM,EAAI,KAAK,EACT,EAAS,KAAK,QAAQ,QAAQ,KAAM,CAAI,EAC9C,IAAI,EAAK,EAAO,EAChB,MAAM,EAAS,EAAO,QACtB,IAAI,EAAS,GACT,EACJ,MAAM,EAAO,EAAK,MAAM,KAClB,EAAkB,EAAK,gBAC7B,GAAK,EAAQ,SAAS,CAAE,EACxB,IAAI,EAAK,KAAO,MAAQ,OAAO,EAAK,GAAO,KACzC,GAAI,CAAC,EAAQ,CACX,MAAM,EAAO,KAAK,QAAQ,SAAS,SACjC,EAAK,EAAK,QAEV,EAAI,EAAK,QAET,EAAK,EAAK,QAEV,EAAE,OAAO,WAAa,EAAK,QAE3B,EAAK,YAEL,EAEA,EAAK,WACf,EACQ,EAAO,YAAY,EAAK,IAAI,EACxB,EAAK,IACP,EAAK,KAAK,UAAU,IAAI,EAAK,EAAE,EAEjC,GAAuB,EAAM,EAAK,EAAK,QAAS,CAAC,CACnD,MACK,CACL,MAAM,EAAU,KAAK,QAAQ,QAAQ,KAAM,CAAI,EAG/C,GAFA,EAAK,EAAQ,EACb,EAAS,EAAQ,QACb,EAAK,EAAI,CACX,MAAM,EAAO,EACb,EAAK,EACL,EAAK,CACP,CACA,MAAM,EAAO,KAAK,QAAQ,SAAS,SACjC,EAAK,EAAK,QAEV,EAAI,EAAK,QAET,EAAK,EAEL,EAAE,OAAO,WAAa,EAAK,QAE3B,EAEA,EAAK,UAEL,EAAK,QAEL,EAEA,EAAK,YAEL,CAER,EACM,EAAK,KAAK,UAAU,IAAI,4BAA4B,EACpD,EAAK,KAAK,YAAa,oBAAoB,EAAE,QAAQ,IAAI,GAAG,EAC5D,EAAO,YAAY,EAAK,IAAI,EACxB,EAAK,IACP,EAAK,KAAK,UAAU,IAAI,EAAK,EAAE,EAEjC,GAAuB,EAAM,EAAK,EAAK,QAAS,CAAC,CACnD,CACA,GAAI,EAAE,GAAU,GAAS,CACvB,MAAM,EAAY,KAAK,QAAQ,SAAS,aACtC,EACA,EAAK,MAAM,MAAM,QACzB,EACY,EAAQ,EAAK,MAAM,WAAa,MAAQ,EAAI,EAAK,MAAM,WAAa,SAAW,EAAE,OAAO,WAAa,GAAK,EAAK,MAAM,cAAgB,WAAa,EAAU,MAAQ,EAAI,GAAK,EAAE,OAAO,WACtL,EAAS,KAAK,QAAQ,SAAS,SAAS,CAC5C,EAAG,EAAK,EAAK,MAAM,QACnB,EAAG,EAAQ,EAAK,MAAM,SAAW,EAAK,MAAM,cAAgB,WAAa,EAAK,MAAM,WAAa,MAAQ,EAAU,MAAQ,EAAI,GAAK,CAAC,EAAU,MAAQ,EAAI,GAC3J,KAAA,EACA,WAAY,EAAK,MAAM,WACvB,SAAU,EAAK,MAAM,MAAM,SAC3B,WAAY,EAAK,MAAM,MAAM,WAC7B,WAAY,EAAK,MAAM,MAAM,WAC7B,UAAW,EAAK,MAAM,MAAM,MAC5B,SAAU,qCAAqC,EAAK,MAAM,MAAM,QAAQ,IAAI,EAAK,GAAK,EAAK,GAAK,EAAE,EAC1G,CAAO,EACD,EAAO,KAAK,CACV,IAAK,CACb,CAAO,EACD,EAAO,YAAY,EAAO,IAAI,EAC9B,GAAuB,EAAQ,EAAK,EAAK,MAAM,QAAS,CAAC,EACzD,KAAK,QAAQ,QAAQ,gBAAgB,EAAM,CAAK,CAClD,EACF,CACA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACT,EAAM,KAAK,QAAQ,SAAS,MAAM,CACtC,MAAO,8BACb,CAAK,EACD,OAAA,EAAE,OAAO,YAAY,MAAM,IACzB,CAAC,EAAM,IAAU,CACf,KAAK,mBAAmB,EAAM,EAAI,KAAM,CAAK,CAC/C,CACN,EACW,CACT,CACF,CACA,MAAM,EAAa,CAIjB,YAAY,EAAS,CACnB,KAAK,EAAI,EAAQ,EACjB,KAAK,QAAU,EACf,KAAK,QAAU,IAAI,GAAU,KAAK,OAAO,EACzC,KAAK,UAAY,IAAI,GAAU,KAAK,QAAQ,EAAG,CAC7C,MAAO,KAAK,QAAQ,MACpB,UAAW,KAAK,QAAQ,SAC9B,CAAK,CACH,CAMA,mBAAmB,EAAM,EAAQ,EAAO,CACtC,MAAM,EAAI,KAAK,EACT,EAAkB,EAAK,gBAC7B,IAAI,EAAS,KAAK,QAAQ,QAAQ,KAAM,CAAI,EACxC,EAAK,EAAO,GAChB,MAAM,EAAS,EAAO,QACtB,IAAI,EACA,EAAS,GACT,EAAQ,GACZ,MAAM,EAAO,EAAK,MAAM,KACxB,GAAI,EAAK,KAAO,MAAQ,OAAO,EAAK,GAAO,KACzC,GAAI,CAAC,EAAQ,CACX,EAAQ,GACR,MAAM,EAAO,KAAK,QAAQ,SAAS,SACjC,EAAI,EAAK,QAET,EAAK,EAAK,QAEV,KAAK,yBAAyB,CAAI,EAElC,EAAK,EAAK,QAEV,EAAK,YAEL,EAEA,EAAK,WACf,EACQ,EAAO,YAAY,EAAK,IAAI,EACxB,EAAK,IACP,EAAK,KAAK,UAAU,IAAI,EAAK,EAAE,CAEnC,MACK,CAIL,GAHA,EAAS,KAAK,QAAQ,QAAQ,KAAM,CAAI,EACxC,EAAK,EAAO,GACZ,EAAS,EAAO,QACZ,EAAK,EAAI,CACX,MAAM,EAAO,EACb,EAAK,EACL,EAAK,CACP,CACA,GAAI,EAAE,GAAU,GAAS,CACvB,EAAQ,GACR,MAAM,EAAO,KAAK,QAAQ,SAAS,SACjC,EAAI,EAAK,QAET,EAAK,EAAK,QAEV,KAAK,yBAAyB,CAAI,EAElC,EAAK,EAEL,EAEA,EAAK,UAEL,EAAK,QAEL,EAEA,EAAK,YAEL,CAEV,EACQ,EAAK,KAAK,UAAU,IAAI,4BAA4B,EACpD,EAAK,KAAK,YAAa,oBAAoB,EAAE,QAAQ,IAAI,GAAG,EAC5D,EAAO,YAAY,EAAK,IAAI,EACxB,EAAK,IACP,EAAK,KAAK,UAAU,IAAI,EAAK,EAAE,CAEnC,CACF,CACA,GAAI,EAAO,CACT,MAAM,EAAQ,EAAK,MAAM,WAAa,QAAU,EAAE,OAAO,UAAY,EAAK,MAAM,WAAa,SAAW,EAAE,OAAO,UAAY,EAAI,EAC3H,EAAS,KAAK,QAAQ,SAAS,SAAS,CAC5C,EAAG,EAAQ,EAAK,MAAM,QACtB,GAAI,GAAkB,GAAM,EAAK,MAAM,QAAU,EACjD,KAAA,EACA,WAAY,EAAK,MAAM,WACvB,SAAU,EAAK,MAAM,MAAM,SAC3B,WAAY,EAAK,MAAM,MAAM,WAC7B,WAAY,EAAK,MAAM,MAAM,WAC7B,UAAW,EAAK,MAAM,MAAM,MAC5B,SAAU,qCAAqC,EAAK,MAAM,MAAM,QAAQ,IAAI,EAAK,GAAK,EAAK,GAAK,EAAE,EAC1G,CAAO,EACD,EAAO,KAAK,CACV,IAAK,CACb,CAAO,EACD,EAAO,YAAY,EAAO,IAAI,CAChC,CACF,CAIA,yBAAyB,EAAM,CAC7B,MAAM,EAAI,KAAK,EACf,IAAI,EAAQ,EAAE,OAAO,UACrB,OAAI,EAAK,MAAM,QAAQ,GAAG,EAAI,GAC5B,EAAQ,EAAE,OAAO,UAAY,SAAS,EAAK,MAAO,EAAE,EAAI,IAExD,EAAQ,SAAS,EAAK,MAAO,EAAE,EAE1B,EAAQ,EAAK,OACtB,CACA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACT,EAAM,KAAK,QAAQ,SAAS,MAAM,CACtC,MAAO,8BACb,CAAK,EACD,OAAA,EAAE,OAAO,YAAY,MAAM,QACzB,CAAC,EAAM,IAAU,CACf,EAAK,WAAa,KAAK,UAAU,oBAAoB,EAAK,UAAU,EAC9D,KAAK,UAAU,cAAc,EAAK,UAAU,GAAK,KAAK,UAAU,wBAAwB,EAAK,UAAU,GAC3G,KAAK,mBAAmB,EAAM,EAAI,KAAM,CAAK,CAEjD,CACN,EACW,CACT,CACF,CACA,MAAM,EAAiB,CAIrB,YAAY,EAAS,CACnB,KAAK,EAAI,EAAQ,EACjB,KAAK,QAAU,EACf,KAAK,QAAU,IAAI,GAAU,KAAK,OAAO,CAC3C,CAMA,mBAAmB,EAAM,EAAQ,EAAO,CACtC,MAAM,EAAI,KAAK,EACf,GAAI,EAAE,QAAQ,uBAAuB,QAAQ,EAAK,WAAW,EAAI,GAC/D,OAEF,MAAM,EAAU,KAAK,QAAQ,QAAQ,KAAM,CAAI,EACzC,EAAI,EAAQ,EACZ,EAAQ,EAAQ,QAChB,EAAU,KAAK,QAAQ,QAAQ,KAAM,CAAI,EACzC,EAAI,EAAQ,GACZ,EAAQ,EAAQ,QACtB,GAAK,EAAQ,SAAS,CAAC,GACnB,EAAE,GAAS,GAAQ,CACrB,MAAM,EAAa,CACjB,MAAO,EAAK,OAAO,KACnB,iBAAkB,EAAK,OAAO,YAC9B,eAAgB,EAAK,OAAO,UAC5B,iBAAkB,EAAK,OAAO,YAC9B,MAAO,EAAK,OAAO,MACnB,QAAS,EAAK,OAAO,OACrB,MAAO,sCAAsC,EAAK,OAAO,QAAQ,IAAI,EAAK,GAAK,EAAK,GAAK,EAAE,EACnG,EACM,IAAI,EAAQ,KAAK,QAAQ,SAAS,WAChC,EAAI,EAAK,OAAO,QAChB,EAAI,EAAK,OAAO,QAChB,CACR,EACM,EAAO,YAAY,EAAM,IAAI,EAC7B,MAAM,EAAiB,CAAC,EAAM,IAAI,EAClC,GAAuB,EAAO,EAAG,CAAC,EAClC,MAAM,EAAO,EAAK,MAAM,KAAO,EAAK,MAAM,KAAO,GAC3C,EAAS,KAAK,QAAQ,SAAS,SAAS,CAC5C,EAAG,EAAI,EAAK,MAAM,QAClB,EAAG,EAAI,EAAK,MAAM,QAAU,EAAK,OAAO,KAAO,WAAW,EAAK,MAAM,MAAM,QAAQ,EAAI,IACvF,KAAA,EACA,WAAY,EAAK,MAAM,WACvB,SAAU,EAAK,MAAM,MAAM,SAC3B,WAAY,EAAK,MAAM,MAAM,WAC7B,WAAY,EAAK,MAAM,MAAM,WAC7B,UAAW,EAAK,MAAM,MAAM,MAC5B,SAAU,qCAAqC,EAAK,MAAM,MAAM,QAAQ,IAAI,EAAK,GAAK,EAAK,GAAK,EAAE,EAC1G,CAAO,EAMD,GALA,EAAO,KAAK,CACV,IAAK,CACb,CAAO,EACD,EAAO,YAAY,EAAO,IAAI,EAC9B,GAAuB,EAAQ,EAAG,CAAC,EAC/B,EAAK,UAAU,IAAK,CACtB,MAAM,EAAI,KAAK,QAAQ,SAAS,MAAM,CACpC,MAAO,2CAA6C,EAAK,UAAU,QAC7E,CAAS,EACD,EAAE,KAAK,CACL,UAAW,aAAa,EAAI,EAAK,UAAU,OAAO,KAAK,EAAI,EAAK,UAAU,OAAO,GAC3F,CAAS,EACD,EAAE,KAAK,UAAY,EAAK,UAAU,IAClC,EAAO,YAAY,EAAE,IAAI,EACzB,EAAe,KAAK,EAAE,IAAI,CAC5B,CACA,GAAI,EAAK,MAAM,KAAM,CACnB,MAAM,EAAW,EAAK,MAAM,MAAQ,EAAK,MAAM,MAAQ,GACjD,EAAY,EAAK,MAAM,OAAS,EAAK,MAAM,OAAS,GAC1D,EAAQ,KAAK,QAAQ,SAAS,CAC5B,EAAG,EAAI,EAAK,MAAM,QAAU,EAAW,EACvC,EAAG,EAAI,EAAK,MAAM,QAAU,EAAY,EACxC,MAAO,EACP,OAAQ,EACR,KAAM,EAAK,MAAM,KACjB,SAAU,+BACpB,CAAS,EACD,EAAe,KAAK,EAAM,IAAI,CAChC,CACI,EAAK,SAAW,EAAK,QAAQ,SAC/B,EAAe,QAAS,GAAS,CAC/B,EAAK,iBAAiB,aAAc,IAAM,CACxC,KAAK,iBAAiB,EAAM,CAAI,CAClC,CAAC,EACD,EAAK,iBAAiB,aAAc,IAAM,CACxC,KAAK,iBAAgB,CACvB,CAAC,CACH,CAAC,EAEC,EAAK,YACP,EAAM,KAAK,iBACT,aACA,EAAK,WAAW,KAAK,KAAM,CAAI,CACzC,EAEU,EAAK,YACP,EAAM,KAAK,iBACT,aACA,EAAK,WAAW,KAAK,KAAM,CAAI,CACzC,EAEU,EAAK,OACP,EAAM,KAAK,iBAAiB,QAAS,EAAK,MAAM,KAAK,KAAM,CAAI,CAAC,CAEpE,CACF,CAQA,mBAAoB,CAClB,MAAM,EAAI,KAAK,EACf,IAAI,EAEF,EAAE,IAAI,OAAO,cAAc,gCAAgC,EAE7D,OAAK,IACH,EACA,EAAY,gBAAgB,+BAAgC,KAAK,EACjE,EAAG,UAAU,IAAI,qBAAsB,+BAA+B,EACtE,EAAE,IAAI,OAAO,YAAY,CAAE,GAEtB,CACT,CAQA,uBAAuB,EAAM,CAC3B,MAAM,EAAI,KAAK,EACT,EAAK,EAAK,SAAW,CAAA,EAC3B,GAAI,OAAO,EAAG,WAAc,WAC1B,OAAO,EAAG,UAAU,CAClB,WAAY,EACZ,YAAa,EAAK,YAClB,GAAI,EAAK,GACT,EAAA,CACR,CAAO,EAEH,IAAI,EAAU,EAAG,MAAQ,KAAO,EAAG,KAAO,EAAK,OAAS,EAAK,MAAM,KACnE,OAAI,MAAM,QAAQ,CAAO,IACvB,EAAU,EAAQ,KAAK,OAAO,GAEzB,GAAW,KAAO,GAAK,OAAO,CAAO,CAC9C,CAKA,iBAAiB,EAAM,EAAY,CACjC,MAAM,EAAI,KAAK,EACT,EAAU,KAAK,uBAAuB,CAAI,EAChD,GAAI,CAAC,EAAS,OACd,MAAM,EAAK,KAAK,kBAAiB,EACjC,EAAG,UAAY,EACf,MAAM,EAAQ,EAAK,QAAQ,OAAS,EAAE,OAAO,QAAQ,OAAS,QAC9D,EAAG,UAAU,OAAO,yBAA0B,uBAAuB,EACrE,EAAG,UAAU,IAAI,oBAAoB,CAAK,EAAE,EAC5C,EAAG,UAAU,IAAI,mBAAmB,EACpC,MAAM,EAAW,EAAE,IAAI,OAAO,sBAAqB,EAC7C,EAAW,EAAW,sBAAqB,EAC3C,EAAS,EAAG,sBAAqB,EACjC,EAAU,EAAK,QAAQ,SAAW,EAClC,EAAU,EAAK,QAAQ,SAAW,EACxC,IAAI,EAAO,EAAS,KAAO,EAAS,KAAO,EAAS,MAAQ,EAAI,EAAO,MAAQ,EAC3E,EAAM,EAAS,IAAM,EAAS,IAAM,EAAO,OAAS,GACxD,EAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAM,EAAS,MAAQ,EAAO,KAAK,CAAC,EAC5D,EAAM,IACR,EAAM,EAAS,IAAM,EAAS,IAAM,EAAS,OAAS,IAExD,EAAG,MAAM,KAAO,EAAO,EAAU,KACjC,EAAG,MAAM,IAAM,EAAM,EAAU,IACjC,CACA,kBAAmB,CACjB,MAAM,EAEJ,KAAK,EAAE,IAAI,OAAO,cAAc,gCAAgC,EAE9D,GACF,EAAG,UAAU,OAAO,mBAAmB,CAE3C,CACA,sBAAuB,CACrB,MAAM,EAAI,KAAK,EACT,EAAM,KAAK,QAAQ,SAAS,MAAM,CACtC,MAAO,8BACb,CAAK,EACD,OAAA,EAAE,OAAO,YAAY,OAAO,IAC1B,CAAC,EAAM,IAAU,CACf,KAAK,mBAAmB,EAAM,EAAI,KAAM,CAAK,CAC/C,CACN,EACW,CACT,CACF,CACA,MAAM,EAAY,CAIhB,YAAY,EAAG,CAAE,MAAA,EAAQ,KAAM,UAAA,EAAY,IAAI,EAAK,CAAA,EAAI,CACtD,KAAK,EAAI,EACT,KAAK,MAAQ,EACb,KAAK,UAAY,EACjB,KAAK,WAAa,OAClB,KAAK,qBAAuB,OAC5B,KAAK,SAAW,IAAI,EAAS,KAAK,CAAC,EAC/B,KAAK,EAAE,QAAQ,kBACjB,KAAK,WAAa,IAEpB,KAAK,QAAU,IAAI,GAAU,IAAI,EACjC,KAAK,iBAAmB,IAAI,GAAa,IAAI,EAC7C,KAAK,iBAAmB,IAAI,GAAa,IAAI,EAC7C,KAAK,kBAAoB,IAAI,GAAiB,IAAI,EAC9C,KAAK,EAAE,QAAQ,iBAAmB,KAAK,EAAE,OAAO,MAAM,CAAC,EAAE,WAC3D,KAAK,qBAAuB,IAE9B,KAAK,UAAY,KAAK,EAAE,OAAO,UAAY,KAAK,EAAE,QAAQ,UAC5D,CACA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACf,GAAI,EAAE,QAAQ,YAAc,EAAE,QAAQ,WAAY,CAChD,MAAM,EAAe,KAAK,iBAAiB,qBAAoB,EACzD,EAAe,KAAK,iBAAiB,qBAAoB,EACzD,EAAmB,KAAK,kBAAkB,qBAAoB,EAC9D,EAAc,EAAE,OAAO,MAAM,WAAW,QACxC,EAAY,CAAC,EAAc,EAAc,CAAgB,EACzD,EAAc,CAClB,EAAa,KACb,EAAa,KACb,EAAiB,IACzB,EACY,EAAmB,EAAE,OAAO,MAAM,OAAS,QAAU,EAAE,OAAO,MAAM,OAAS,QAAU,EAAE,OAAO,MAAM,OAAS,YAC/G,EAAgB,CAAC,EAAkB,GAAO,CAAgB,EAChE,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,EAAE,IAAI,YAAY,IAAI,EAAU,CAAC,CAAC,EAC9B,GAAe,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,aAC9C,EAAE,OAAO,MAAM,OAAS,WAAa,EAAE,OAAO,MAAM,OAAS,UAAY,EAAE,QAAQ,WAAa,GAAK,CAAC,EAAc,CAAC,GACvH,EAAY,CAAC,EAAE,UAAU,IAAI,2BAA2B,EAG5D,EAAE,QAAQ,gBAAgB,KAAK,CAAE,GAAI,EAAY,CAAC,EAAG,MAAO,CAAC,CAAE,EAEjE,KAAK,QAAQ,sBAAqB,CACpC,CACF,CACA,gBAAiB,CACL,KAAK,EACb,OAAO,YAAY,OAAO,IAAK,GAAM,CACrC,KAAK,SAAS,CAAC,CACjB,CAAC,CACH,CACA,eAAgB,CACJ,KAAK,EACb,OAAO,YAAY,MAAM,IAAK,GAAM,CACpC,KAAK,QAAQ,CAAC,CAChB,CAAC,CACH,CAMA,mBAAmB,EAAM,EAAQ,EAAO,CACtC,KAAK,iBAAiB,mBAAmB,EAAM,EAAQ,CAAK,CAC9D,CAMA,mBAAmB,EAAM,EAAQ,EAAO,CACtC,KAAK,iBAAiB,mBAAmB,EAAM,EAAQ,CAAK,CAC9D,CAMA,mBAAmB,EAAM,EAAQ,EAAO,CACtC,KAAK,kBAAkB,mBAAmB,EAAM,EAAQ,CAAK,CAC/D,CAIA,QAAQ,EAAQ,CACd,KAAM,CACJ,EAAA,EACA,EAAA,EACA,KAAA,EACA,WAAA,EACA,UAAA,EACA,SAAA,EACA,WAAA,EACA,WAAA,EACA,SAAA,EACA,gBAAA,EACA,YAAA,EACA,gBAAA,EACA,aAAA,EACA,YAAA,EACA,SAAA,EAAW,kBACX,YAAA,EAAc,EACd,aAAA,EAAe,EACf,cAAA,EAAgB,EAChB,WAAA,EAAa,CACnB,EAAQ,EACE,EAAI,KAAK,EACT,EAAS,KAAK,SAAS,SAAS,CACpC,EAAA,EACA,EAAA,EACA,KAAA,EACA,WAAY,GAAc,QAC1B,SAAU,GAAY,OACtB,WAAY,GAAc,UAC1B,WAAY,GAAc,EAAE,OAAO,MAAM,WACzC,UAAW,GAAa,EAAE,OAAO,MAAM,UACvC,SAAU,mBAAqB,EAAW,EAAW,EAC3D,CAAK,EACK,EAAS,EAAE,IAAI,OAAO,cAAc,CAAQ,EAC9C,GACF,EAAO,YAAY,EAAO,IAAI,EAEhC,MAAM,EAAW,EAAO,KAAI,EAC5B,GAAI,EAAM,CACR,MAAM,EAAS,KAAK,SAAS,SAC3B,EAAS,EAAI,EACb,EAAS,EAAI,EACb,EAAS,MAAQ,EAAc,EAC/B,EAAS,OAAS,EAAgB,EAClC,EACA,GAAoC,cACpC,EACA,EACA,EACA,CACR,EACM,EAAO,aAAa,EAAO,KAAM,EAAO,IAAI,CAC9C,CACF,CAIA,SAAS,EAAQ,CACf,MAAM,EAAI,KAAK,EACT,CACJ,KAAA,EACA,EAAA,EAAI,EACJ,EAAA,EAAI,EACJ,MAAA,EAAQ,GACR,OAAA,EAAS,GACT,SAAA,EAAW,iBACjB,EAAQ,EACE,EAAM,EAAE,IAAI,MAAM,MAAM,CAAI,EAClC,EAAI,KAAK,EAAO,CAAM,EAAE,KAAK,EAAG,CAAC,EACjC,MAAM,EAAS,EAAE,IAAI,OAAO,cAAc,CAAQ,EAClD,OAAI,GACF,EAAO,YAAY,EAAI,IAAI,EAEtB,CACT,CAOA,2BAA2B,EAAQ,EAAc,EAAS,CACxD,YAAK,sBAAsB,CACzB,OAAA,EACA,aAAA,EACA,QAAA,EACA,KAAM,QACN,cAAe,EAAQ,kBAC7B,CAAK,EACM,CACT,CAMA,2BAA2B,EAAQ,EAAc,EAAS,CACxD,YAAK,sBAAsB,CACzB,OAAA,EACA,aAAA,EACA,QAAA,EACA,KAAM,QACN,cAAe,EAAQ,kBAC7B,CAAK,EACM,CACT,CAMA,2BAA2B,EAAQ,EAAc,EAAS,CACxD,OAAI,OAAO,KAAK,WAAe,MAC7B,KAAK,WAAa,EAAQ,EAAE,QAAQ,iBAEtC,KAAK,sBAAsB,CACzB,OAAA,EACA,aAAA,EACA,QAAA,EACA,KAAM,QACN,cAAe,EAAQ,kBAC7B,CAAK,EACM,CACT,CAEA,sBAAsB,CACpB,OAAA,EACA,aAAA,EACA,QAAA,EACA,KAAA,EACA,cAAA,CACJ,EAAK,CACD,MAAM,EAAK,EACL,EAAI,EAAG,EACP,EAAS,EAAE,IAAI,OAAO,cAAc,eAAe,CAAI,cAAc,EACrE,EAAQ,EAAO,WAAW,OAAS,EACnC,EAAW,IAAI,GACf,EAAW,OAAO,OACtB,CAAA,EACA,IAAS,QAAU,EAAS,gBAAkB,IAAS,QAAU,EAAS,gBAAkB,EAAS,eAC3G,EACU,EAAO,EAAQ,OAAO,EAAU,CAAM,EAC5C,OAAQ,EAAI,CACV,IAAK,QACH,KAAK,mBAAmB,EAAM,EAAQ,CAAK,EAC3C,MACF,IAAK,QACH,KAAK,mBAAmB,EAAM,EAAQ,CAAK,EAC3C,MACF,IAAK,QACH,KAAK,mBAAmB,EAAM,EAAQ,CAAK,EAC3C,KACR,CACI,MAAM,EAAgB,EAAE,IAAI,OAAO,cACjC,eAAe,CAAI,4BAA4B,CAAI,0BAA0B,CAAK,IACxF,EACU,EAAS,KAAK,QAAQ,oBAAoB,EAAe,CAAI,EACnE,OAAI,GACF,EAAO,aAAa,EAAO,KAAM,CAAa,EAE5C,GACF,EAAE,QAAQ,OAAO,cAAc,KAAK,CAClC,QAAS,EACT,GAAI,EAAK,GAAK,EAAK,GAAK,EAAQ,SAAQ,EACxC,OAAQ,EACR,MAAO,gBACP,OAAA,CACR,CAAO,EAEI,CACT,CAYA,yBAAyB,EAAG,CAC1B,MAAM,EAAK,EAAE,IAAI,QAAU,EAAE,IAAI,OAAO,cAAc,gCAAgC,EAClF,GAAM,EAAG,YACX,EAAG,WAAW,YAAY,CAAE,CAEhC,CAIA,iBAAiB,EAAK,CACpB,MAAM,EAAI,EAAI,EACd,KAAK,yBAAyB,CAAC,EAC/B,MAAM,EAAQ,EAAE,IAAI,OAAO,iBACzB,6FACN,EACI,QAAS,EAAI,EAAE,QAAQ,OAAO,cAAc,OAAS,EAAG,GAAK,EAAG,KAC1D,EAAE,QAAQ,OAAO,cAAc,CAAC,EAAE,QAAU,WAAa,EAAE,QAAQ,OAAO,cAAc,CAAC,EAAE,QAAU,kBACvG,EAAE,QAAQ,OAAO,cAAc,OAAO,EAAG,CAAC,EAG9C,MAAM,UAAU,QAAQ,KAAK,EAAQ,GAAM,CACzC,KAAO,EAAE,YACP,EAAE,YAAY,EAAE,UAAU,CAE9B,CAAC,CACH,CAKA,iBAAiB,EAAK,EAAI,CACxB,MAAM,EAAI,EAAI,EACd,KAAK,yBAAyB,CAAC,EAC/B,MAAM,EAAQ,EAAE,IAAI,OAAO,iBAAiB,IAAI,CAAE,EAAE,EAChD,IACF,EAAE,QAAQ,OAAO,cAAc,IAAI,CAAC,EAAG,IAAM,CACvC,EAAE,KAAO,GACX,EAAE,QAAQ,OAAO,cAAc,OAAO,EAAG,CAAC,CAE9C,CAAC,EACD,OAAO,KAAK,EAAE,OAAO,WAAW,EAAE,QAAS,GAAQ,CACjD,MAAM,EAAkB,EAAE,OAAO,YAAY,CAAG,EAC5C,MAAM,QAAQ,CAAe,IAC/B,EAAE,OAAO,YAAY,CAAG,EAAI,EAAgB,OAAQ,GAAM,EAAE,KAAO,CAAE,EAEzE,CAAC,EACD,MAAM,UAAU,QAAQ,KAAK,EAAQ,GAAM,CACzC,EAAE,cAAc,YAAY,CAAC,CAC/B,CAAC,EAEL,CACF,CACA,GAAW,iBAAiB,CAAE,YAAa,EAAW,CAAE,EACxD,MAAM,EAAmB,CAKvB,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,YAAc,EACnB,KAAK,eAAiB,EACtB,KAAK,OAAS,GACd,KAAK,kBAAoB,GACzB,KAAK,WAAa,KAClB,KAAK,cAAgB,KACrB,KAAK,uBAAyB,KAC9B,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,mBAAqB,CAC5B,CAMA,MAAO,CAEL,MAAM,EADI,KAAK,EACC,IAAI,MAAM,KACrB,IACL,EAAM,aAAa,WAAY,GAAG,EAClC,EAAM,iBAAiB,QAAS,KAAK,QAAQ,EAC7C,EAAM,iBAAiB,OAAQ,KAAK,OAAO,EAC3C,EAAM,iBAAiB,YAAa,KAAK,eAAgB,CAAE,QAAS,EAAI,CAAE,EAC1E,EAAM,iBAAiB,cAAe,KAAK,eAAgB,CACzD,QAAS,EACf,CAAK,EACD,EAAM,iBAAiB,aAAc,KAAK,eAAgB,CACxD,QAAS,GACT,QAAS,EACf,CAAK,EACD,EAAM,iBAAiB,UAAW,KAAK,WAAY,CAAE,QAAS,EAAK,CAAE,EACrE,KAAK,IAAI,OAAO,iBAAiB,cAAe,KAAK,cAAc,EACrE,CAIA,SAAU,CACR,MAAM,EAAI,KAAK,EACT,EAAQ,EAAE,IAAI,OAAS,EAAE,IAAI,MAAM,KACzC,KAAK,IAAI,OAAO,oBAAoB,cAAe,KAAK,cAAc,EACjE,IACL,EAAM,oBAAoB,QAAS,KAAK,QAAQ,EAChD,EAAM,oBAAoB,OAAQ,KAAK,OAAO,EAC9C,EAAM,oBAAoB,UAAW,KAAK,UAAU,EACpD,EAAM,oBACJ,YACA,KAAK,eAEL,CAAE,QAAS,EAAI,CACrB,EACI,EAAM,oBACJ,cACA,KAAK,eAEL,CAAE,QAAS,EAAI,CACrB,EACI,EAAM,oBACJ,aACA,KAAK,eAEL,CAAE,QAAS,EAAI,CACrB,EACE,CAKA,gBAAiB,CACf,KAAK,mBAAqB,KAAK,IAAG,CACpC,CAQA,UAAU,EAAI,CACd,CAEA,UAAW,CACJ,KAAK,cAAa,IACnB,KAAK,IAAG,EAAK,KAAK,mBAAqB,MAG3C,KAAK,OAAS,GACd,KAAK,aAAY,EACjB,KAAK,oBAAmB,EACxB,KAAK,kBAAiB,GACxB,CACA,SAAU,CACR,KAAK,OAAS,GACd,KAAK,kBAAoB,GACzB,KAAK,WAAU,CACjB,CAIA,gBAAiB,CACV,KAAK,SACV,KAAK,OAAS,GACd,KAAK,WAAU,EACjB,CAKA,WAAW,EAAG,CACZ,IAAI,EAAI,EAAI,EACZ,GAAI,GAAC,KAAK,cAAa,GAAM,CAAC,KAAK,QACnC,IAAI,EAAE,WAAa,EAAE,MAAQ,cAAgB,EAAE,MAAQ,cAAgB,KAAK,QAAO,EAAI,CACrF,EAAE,eAAc,EAChB,KAAK,OAAO,EAAE,MAAQ,aAAe,EAAI,EAAE,EAC3C,MACF,CACA,OAAQ,EAAE,IAAG,CACX,IAAK,aACH,EAAE,eAAc,EAChB,KAAK,MAAM,EAAG,CAAC,EACf,MACF,IAAK,YACH,EAAE,eAAc,EAChB,KAAK,MAAM,EAAG,EAAE,EAChB,MACF,IAAK,UACH,EAAE,eAAc,EAChB,KAAK,MAAM,GAAI,CAAC,EAChB,MACF,IAAK,YACH,EAAE,eAAc,EAChB,KAAK,MAAM,EAAG,CAAC,EACf,MACF,IAAK,OACH,EAAE,eAAc,EAChB,KAAK,eAAiB,EACtB,KAAK,iBAAgB,EACrB,KAAK,kBAAiB,EACtB,MACF,IAAK,MACH,EAAE,eAAc,EAChB,KAAK,eAAiB,KAAK,mBAAmB,KAAK,WAAW,EAAI,EAClE,KAAK,kBAAiB,EACtB,KAAK,kBAAiB,EACtB,MACF,IAAK,QACL,IAAK,IACH,EAAE,eAAc,EAChB,KAAK,WAAU,EACf,MACF,IAAK,IACL,IAAK,IACC,KAAK,SAAQ,IACf,EAAE,eAAc,GACf,EAAK,KAAK,IAAI,UAAY,MAAgB,EAAG,aAAY,EAC1D,KAAK,UAAU,WAAW,GAE5B,MACF,IAAK,IACL,IAAK,IACC,KAAK,SAAQ,IACf,EAAE,eAAc,GACf,EAAK,KAAK,IAAI,UAAY,MAAgB,EAAG,cAAa,EAC3D,KAAK,UAAU,YAAY,GAE7B,MACF,IAAK,IACC,KAAK,SAAQ,GAAM,KAAK,EAAE,SAAS,SACrC,EAAE,eAAc,GACf,EAAK,KAAK,IAAI,UAAY,MAAgB,EAAG,gBAAe,EAC7D,KAAK,UAAU,YAAY,GAE7B,MACF,IAAK,SACH,EAAE,eAAc,EACX,KAAK,mBAIR,KAAK,OAAS,GACd,KAAK,kBAAoB,GACzB,KAAK,WAAU,IALf,KAAK,kBAAoB,GACzB,KAAK,WAAU,GAMjB,KACR,EACE,CAEA,UAAW,CACT,MAAM,EAAI,KAAK,EACf,MAAO,GACL,EAAE,QAAQ,YAAc,EAAE,OAAO,MAAM,MAAQ,EAAE,OAAO,MAAM,KAAK,QAEvE,CACA,SAAU,CACR,OAAO,KAAK,SAAQ,CACtB,CAKA,OAAO,EAAW,CAChB,MAAM,EAAI,KAAK,EACT,EAAU,KAAK,IAAI,QACzB,GAAI,CAAC,EAAS,OACd,MAAM,EAAO,OAAO,EAAE,QAAQ,IAAI,EAC5B,EAAO,OAAO,EAAE,QAAQ,IAAI,EAClC,GAAI,CAAC,SAAS,CAAI,GAAK,CAAC,SAAS,CAAI,GAAK,IAAS,EAAM,OAEzD,MAAM,GADO,EAAO,GACA,GAAM,EAC1B,EAAQ,kBAAkB,EAAO,EAAM,EAAO,CAAI,EAClD,KAAK,UAAU,EAAY,EAAI,eAAiB,aAAa,CAC/D,CAMA,MAAM,EAAS,EAAQ,CACrB,MAAM,EAAI,KAAK,EACT,EAAa,EAAE,OAAO,MAAM,cAAc,SAAS,WAAW,WACpE,GAAI,IAAY,EAAG,CACjB,MAAM,EAAQ,KAAK,EAAE,QAAQ,QAC7B,GAAI,GAAS,EAAM,SAAW,EAAM,QAAQ,OAAQ,CAClD,MAAM,EAAI,KAAK,eAEf,GADyB,EAAM,aAAe,EAAM,YAAY,WAAW,CAAC,GAAK,EAAM,YAAY,uBAAsB,EACnG,MACxB,CACA,MAAM,EAAQ,KAAK,gBAAe,EAClC,IAAI,EAAK,KAAK,YAAc,EACxB,EAAW,EACf,KAAO,EAAW,IACZ,EAAK,IAAG,EAAK,EAAa,EAAQ,EAAI,GACtC,GAAM,IAAO,EAAK,EAAa,EAAI,EAAQ,GAC3C,EAAC,EAAE,QAAQ,uBAAuB,SAAS,CAAE,IACjD,GAAM,EACN,IAEF,KAAK,YAAc,EACnB,MAAM,EAAU,KAAK,mBAAmB,CAAE,EACtC,KAAK,gBAAkB,IACzB,KAAK,eAAiB,EAAU,EAEpC,CACA,GAAI,IAAW,EAAG,CAChB,MAAM,EAAU,KAAK,mBAAmB,KAAK,WAAW,EACxD,IAAI,EAAK,KAAK,eAAiB,EAC3B,EAAK,IAAG,EAAK,EAAa,EAAU,EAAI,GACxC,GAAM,IAAS,EAAK,EAAa,EAAI,EAAU,GACnD,KAAK,eAAiB,EAClB,EAAS,EACX,KAAK,iBAAgB,EAErB,KAAK,kBAAiB,EAEnB,KAAK,oBAAoB,KAAK,YAAa,KAAK,cAAc,GACjE,KAAK,+BAA+B,CAAM,CAE9C,CACA,KAAK,kBAAiB,CACxB,CAEA,kBAAmB,CACjB,MAAM,EAAI,KAAK,EACT,EAAK,KAAK,YACV,EAAU,KAAK,mBAAmB,CAAE,EAC1C,IAAI,EAAK,KAAK,eACV,EAAW,EACf,GAAK,MAAM,QAAQ,EAAE,WAAW,OAAO,CAAE,CAAC,EAC1C,MAAO,EAAW,GAAW,EAAE,WAAW,OAAO,CAAE,EAAE,CAAE,IAAM,MAC3D,GAAM,EAAK,GAAK,EAChB,IAEF,KAAK,eAAiB,EACxB,CAEA,mBAAoB,CAClB,MAAM,EAAI,KAAK,EACT,EAAK,KAAK,YACV,EAAU,KAAK,mBAAmB,CAAE,EAC1C,IAAI,EAAK,KAAK,eACV,EAAW,EACf,GAAK,MAAM,QAAQ,EAAE,WAAW,OAAO,CAAE,CAAC,EAC1C,MAAO,EAAW,GAAW,EAAE,WAAW,OAAO,CAAE,EAAE,CAAE,IAAM,MAC3D,GAAM,EAAK,EAAI,GAAW,EAC1B,IAEF,KAAK,eAAiB,EACxB,CAEA,mBAAoB,CAClB,KAAM,CAAE,YAAa,EAAG,eAAgB,CAAC,EAAK,KACxC,EAAI,KAAK,EACT,EAAQ,EAAE,QAAQ,QACpB,CAAC,GAAS,CAAC,EAAM,UACrB,EAAE,SAAS,oBAAsB,EACjC,EAAE,SAAS,uBAAyB,EACpC,KAAK,iBAAiB,EAAG,CAAC,EAC1B,KAAK,aACH,EACA,EAEA,CACN,EACE,CACA,YAAa,CACX,MAAM,EAAI,KAAK,EACT,EAEJ,EAAE,QAAQ,QAIZ,GAFA,KAAK,kBAAiB,EACtB,KAAK,iBAAgB,EACjB,CAAC,EAAO,OACR,EAAM,QACR,EAAM,OAAO,gBAAe,EAE9B,KAAK,uBAAyB,KAC9B,MAAM,EAAY,EAAM,aAAY,EAChC,IACF,EAAU,UAAU,OAAO,mBAAmB,EAC1C,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,cAAc,SACrF,EAAU,aAAa,cAAe,MAAM,GAGhD,EAAE,IAAI,OAAO,UAAU,OAAO,2BAA2B,EACzD,MAAM,EAAc,EAAM,iBAAgB,EACtC,GAAa,EAAY,UAAU,OAAO,mBAAmB,CACnE,CAOA,aAAa,EAAG,EAAG,EAAO,CACxB,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KACtB,EAAY,EAAM,aAAY,EACpC,GAAI,CAAC,EAAW,OAChB,MAAM,EAAa,EAAM,oBAAmB,EAC5C,EAAM,YAAc,CAClB,EAAG,EACH,EAAG,EACH,QAAS,EAAW,SAAW,EAC/B,SAAU,EAAW,UAAY,CACvC,EACI,KAAK,mBAAmB,EAAG,EAAG,CAAK,EACnC,EAAE,IAAI,OAAO,UAAU,IAAI,2BAA2B,EACtD,EAAU,UAAU,IAAI,mBAAmB,EACvC,EAAE,OAAO,MAAM,cAAc,SAAW,EAAE,OAAO,MAAM,cAAc,cAAc,SACrF,EAAU,gBAAgB,aAAa,EAErC,IAAS,OAAS,IAAS,SAAW,IAAS,YACjD,KAAK,oBAAoB,EAAG,EAAG,EAAO,CAAS,EACtC,IAAS,YAClB,KAAK,sBAAsB,EAAG,EAAG,EAAO,CAAS,EACxC,IAAS,WAAa,IAAS,UACxC,KAAK,qBAAqB,EAAG,EAAG,EAAO,EAAW,CAAI,EAC7C,IAAS,OAAS,IAAS,eAAiB,IAAS,WAAa,IAAS,UAAY,IAAS,WACzG,KAAK,gBAAgB,EAAG,EAAG,CAAK,EAEhC,KAAK,qBAAqB,EAAG,EAAG,CAAK,CAEzC,CAcA,mBAAmB,EAAG,EAAG,EAAO,CAC9B,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KAC5B,IAAI,EAAU,EACV,EAAU,EACd,MAAM,EAAK,KAAK,qBAAqB,EAAG,CAAC,EACzC,GAAI,EAAI,CACN,MAAM,EAAO,EAAG,sBAAqB,EACrC,EAAU,EAAK,KAAO,EAAK,MAAQ,EACnC,EAAU,EAAK,IAAM,EAAK,OAAS,CACrC,SAAW,EAAE,QAAQ,aAAe,EAAE,QAAQ,YAAY,CAAC,GAAK,EAAE,QAAQ,YAAY,CAAC,EAAE,CAAC,EAAG,CAC3F,MAAM,EAAK,EAAE,QAAQ,YAAY,CAAC,EAAE,CAAC,EAC/B,EAAS,EAAM,WAAa,EAAM,UAAS,EACjD,GAAI,EAAQ,CACV,MAAM,EAAW,EAAO,sBAAqB,EAC7C,EAAU,EAAS,MAAQ,EAAG,CAAC,GAAK,GACpC,EAAU,EAAS,KAAO,EAAG,CAAC,GAAK,EACrC,CACF,KAAO,CACL,MAAM,EAAQ,EAAE,IAAI,OAAS,EAAE,IAAI,MAAM,KACzC,GAAI,EAAO,CACT,MAAM,EAAU,EAAM,sBAAqB,EAC3C,EAAU,EAAQ,KAAO,EAAQ,MAAQ,EACzC,EAAU,EAAQ,IAAM,EAAQ,OAAS,CAC3C,CACF,CACA,IAAI,IAAS,QAAU,IAAS,QAAU,IAAS,aAAe,IAAS,WAAa,IAAS,UAAY,IAAS,UAChH,EAAE,QAAQ,aAAe,EAAE,QAAQ,YAAY,CAAC,GAAK,EAAE,QAAQ,YAAY,CAAC,EAAE,CAAC,EAAG,CACpF,MAAM,EAAK,EAAE,QAAQ,YAAY,CAAC,EAAE,CAAC,EAC/B,EAAS,EAAM,WAAa,EAAM,UAAS,EACjD,GAAI,EAAQ,CACV,MAAM,EAAW,EAAO,sBAAqB,EAC7C,EAAU,EAAS,MAAQ,EAAG,CAAC,GAAK,GACpC,EAAU,EAAS,KAAO,EAAG,CAAC,GAAK,EACrC,CACF,CAEF,EAAM,EAAI,CAAE,KAAM,YAAa,QAAA,EAAS,QAAA,CAAO,CACjD,CAOA,gBAAgB,EAAG,EAAG,EAAO,CAC3B,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACT,EAAS,EAAM,QAAQ,SAAW,EAAM,YAAY,WAAW,CAAC,GAAK,EAAE,QAAQ,kBAAoB,EAAM,YAAY,uBAAsB,EAC3I,GAEH,GAAM,GAAM,GAAM,EAAK,EAAE,UAAU,cAAgB,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,IAAM,KAAO,OAAS,EAAG,CAAC,EAEvJ,EAAM,cAAc,gBAAgB,EAAc,EAAe,EAAe,CAC9E,QAAS,EAAM,QACf,EAAA,EACA,EAAA,CACN,EAAqC,GAAU,KAAQ,QAAU,CAAE,GAAI,EAAU,EAAE,CAAE,EAAiC,GAAU,KAAQ,QAAU,CAAE,GAAI,EAAU,EAAE,CAAE,EAAG,CACnK,OAAA,CACN,CAAK,CAAC,EACF,MAAM,EAAS,wCAAwC,CAAC,KAClD,EAAS,EAAE,IAAI,MAAM,QACzB,GAAG,CAAM,YAAY,CAAC,OAAO,CAAM,cAAc,CAAC,OAAO,CAAM,YAAY,CAAC,IAClF,EAOI,GANI,IACF,KAAK,iBAAgB,EACJ,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EACrC,eAAe,EAAQ,IAAI,EACpC,KAAK,cAAgB,GAEnB,EAAE,QAAQ,gBAAiB,CAC7B,MAAM,EAAW,GAAU,EAAO,KAClC,GAAI,EAAU,CACZ,MAAM,EAAW,EAAE,IAAI,OAAO,sBAAqB,EAC7C,EAAU,EAAS,sBAAqB,EACxC,EAAQ,EAAQ,KAAO,EAAS,KAChC,EAAQ,EAAQ,IAAM,EAAS,IAC/B,EAAK,EAAQ,OACb,EAAK,EAAQ,MACb,EAAU,EAAM,YAAY,SAAW,EACvC,EAAW,EAAM,YAAY,UAAY,EACzC,EAAI,EAAQ,EAAK,EAAI,EAAW,EACtC,IAAI,EAAI,EAAQ,EAChB,MAAM,EAAY,EAAM,UAAY,EAAM,SAAS,mBAAqB,KAAO,EAAM,SAAS,kBAAoB,EAAS,MAAQ,EAC/H,EAAQ,IACV,EAAI,EAAQ,GAEd,MAAM,EAAY,EAAM,aAAY,EAChC,IACF,EAAU,MAAM,KAAO,EAAI,KAC3B,EAAU,MAAM,IAAM,EAAI,KAE9B,CACF,MACE,EAAM,gBAAgB,0BAA0B,EAAG,CAAC,CAExD,CAOA,qBAAqB,EAAG,EAAG,EAAO,CAChC,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KAEtB,EADmB,EAAM,QAAQ,QACJ,EAAM,YAAY,WAAW,CAAC,GAAK,EAAM,YAAY,uBAAsB,EAC9G,EAAM,cAAc,gBAAgB,CAClC,QAAS,EAAM,QACf,EAAA,EACA,EAAA,EACA,OAAA,CACN,CAAK,EACD,MAAM,EAAgB,IAAS,WAAa,IAAS,SAC/C,EAAoB,EAAE,QAAQ,QAAQ,YAAc,EACtD,EACF,KAAK,wBAAwB,EAAG,EAAG,CAAK,EAC/B,EACL,EACF,EAAM,OAAO,cAAc,CAAC,EAE5B,EAAM,gBAAgB,wBAAwB,EAAG,CAAC,EAE3C,EACT,EAAM,gBAAgB,yBAAyB,CAAC,EAEhD,EAAM,gBAAgB,wBAAwB,EAAG,CAAC,CAEtD,CAaA,wBAAwB,EAAG,EAAG,EAAO,CACnC,MAAM,EAAS,KAAK,EAAE,IAAI,OACtB,KAAK,yBACP,EAAM,OAAO,aAAa,KAAK,sBAAsB,EACrD,KAAK,uBAAyB,MAEhC,MAAM,EAAW,EAAO,cACtB,wCAAwC,CAAC,IAC/C,EACI,GAAI,CAAC,EAAU,OACf,MAAM,EAAW,EAAS,cAAc,2BAA2B,CAAC,IAAI,EACnE,IACL,EAAM,OAAO,oBAAoB,EAAG,CAAQ,EAC5C,KAAK,uBAAyB,EAChC,CAQA,oBAAoB,EAAG,EAAG,EAAO,EAAW,CAC1C,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACf,EAAM,cAAc,gBAAgB,CAClC,QAAS,EAAM,QACf,EAAG,EACH,OAAQ,EACd,CAAK,EACD,MAAM,EAAe,EAAU,sBAAqB,EAC9C,EAAU,EAAa,OAAS,EAAM,YAAY,SAAW,EAC7D,EAAW,EAAa,QAAU,EAAM,YAAY,UAAY,EAChE,EAAU,EAAE,IAAI,OAAO,cAAc,2BAA2B,CAAC,IAAI,EAC3E,GAAI,EAAS,CACX,MAAM,EAAK,YAAY,EAAK,EAAQ,aAAa,SAAS,IAAM,KAAO,EAAK,EAAE,EACxE,EAAK,YAAY,EAAK,EAAQ,aAAa,SAAS,IAAM,KAAO,EAAK,EAAE,EAC9E,GAAI,CAAC,MAAM,CAAE,GAAK,CAAC,MAAM,CAAE,EAAG,CAC5B,MAAM,EAAW,EAAE,IAAI,MAAM,KAAK,sBAAqB,EACjD,EAAY,EAAE,IAAI,OAAO,sBAAqB,EAC9C,EAAU,EAAS,KAAO,EAAU,KACpC,EAAU,EAAS,IAAM,EAAU,IACzC,EAAU,MAAM,KAAO,EAAU,EAAK,EAAU,EAAI,KACpD,EAAU,MAAM,IAAM,EAAU,EAAK,EAAW,GAAK,IACvD,CACF,CACF,CAQA,sBAAsB,EAAG,EAAI,EAAO,EAAW,CAC7C,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,EAAM,cAAc,gBAAgB,CAClC,QAAS,EAAM,QACf,EAAA,EACA,OAAQ,EACd,CAAK,EACD,KAAM,CAAE,QAAA,EAAU,EAAG,SAAA,EAAW,CAAC,EAAK,EAAM,oBAAmB,EACzD,EAAQ,EAAE,IAAI,OAAO,cACzB,kDAAkD,CAAC,SACzD,EACI,GAAI,EAAO,CACT,MAAM,EAAQ,YAAY,EAAK,EAAM,aAAa,YAAY,IAAM,KAAO,EAAK,EAAE,GAAK,EAEjF,GADe,EAAE,OAAO,YAAY,UAAU,YAAc,GAClC,EAAQ,EAClC,EAAU,EAAE,OAAO,UAAY,EAC/B,EAAU,EAAE,OAAO,WAAa,EAChC,EAAa,EAAE,QAAQ,YAAc,KAAK,IAAI,EAAE,OAAO,UAAW,EAAE,OAAO,UAAU,EAAI,EACzF,EAAc,EAAE,WAAW,OAAO,OAClC,EAAY,EAAa,KAAK,IAAI,EAAa,CAAC,EAChD,EAAc,EAAa,EAAI,EAC/B,EAAc,EAAc,EAC5B,GAAc,EAAc,GAAe,EAC3C,EAAW,EAAQ,iBACvB,EACA,EACA,EACA,CACR,EACY,EAAI,EAAS,GAAK,EAAE,OAAO,YAAc,GACzC,EAAI,EAAS,GAAK,EAAE,OAAO,YAAc,GAC/C,EAAU,MAAM,KAAO,EAAI,EAAU,EAAI,KACzC,EAAU,MAAM,IAAM,EAAI,EAAW,GAAK,IAC5C,CACF,CASA,qBAAqB,EAAG,EAAG,EAAO,EAAW,EAAM,CACjD,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACf,EAAM,cAAc,gBAAgB,CAClC,QAAS,EAAM,QACf,EAAA,EACA,EAAA,EACA,OAAQ,EACd,CAAK,EACD,MAAM,EAAc,EAAU,sBAAqB,EAC7C,EAAU,EAAY,OAAS,EAAM,YAAY,SAAW,EAC5D,EAAW,EAAY,QAAU,EAAM,YAAY,UAAY,EAC/D,EAAY,IAAS,UAAY,0BAA4B,0BAC7D,EAAO,EAAE,IAAI,OAAO,cAAc,IAAI,CAAS,OAAO,CAAC,SAAS,CAAC,IAAI,EAC3E,GAAI,EAAM,CACR,MAAM,EAAW,EAAE,IAAI,OAAO,sBAAqB,EAC7C,EAAW,EAAK,sBAAqB,EACrC,EAAS,EAAS,KAAO,EAAS,KAClC,EAAS,EAAS,IAAM,EAAS,IACjC,EAAY,EAAS,MACrB,EAAa,EAAS,OACtB,EAAK,YAAY,EAAK,EAAK,aAAa,IAAI,IAAM,KAAO,EAAK,EAAE,EAChE,EAAgB,YAAY,EAAK,EAAK,aAAa,OAAO,IAAM,KAAO,EAAK,EAAE,EACpF,EAAM,gBAAgB,gBAAgB,EAAK,EAAgB,CAAC,EAC5D,IAAI,EAAI,EAAS,EAAY,EAAU,EACvC,MAAM,EAAI,EAAS,EAAa,EAAI,EAAW,EAC3C,EAAS,EAAY,EAAE,OAAO,UAAY,IAC5C,EAAI,EAAS,EAAU,GAEzB,EAAU,MAAM,KAAO,EAAI,KAC3B,EAAU,MAAM,IAAM,EAAI,IAC5B,CACF,CAMA,iBAAiB,EAAG,EAAG,CACrB,KAAK,kBAAiB,EACtB,MAAM,EAAK,KAAK,qBAAqB,EAAG,CAAC,EACzC,GAAI,EAAI,CACN,EAAG,UAAU,IAAI,6BAA6B,EAC9C,EAAG,aAAa,OAAQ,KAAK,EAC7B,MAAM,EAAQ,KAAK,iBAAiB,EAAG,CAAC,EACpC,GAAO,EAAG,aAAa,aAAc,CAAK,EAC9C,KAAK,WAAa,CACpB,CACF,CACA,mBAAoB,CACd,KAAK,aACP,KAAK,WAAW,UAAU,OAAO,6BAA6B,EAC9D,KAAK,WAAW,gBAAgB,MAAM,EACtC,KAAK,WAAW,gBAAgB,YAAY,EAC5C,KAAK,WAAa,KAEtB,CASA,iBAAiB,EAAG,EAAG,CACrB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAChC,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KACtB,EAAc,EAAE,WAAW,aAAe,CAAA,EAC1C,EAAS,EAAE,WAAW,QAAU,CAAA,EACtC,GAAI,IAAS,OAAS,IAAS,SAAW,IAAS,YAAa,CAC9D,MAAM,GAAc,IAAO,EAAK,EAAE,YAAc,KAAO,OAAS,EAAG,SAAW,EAAE,UAAU,OAAO,CAAC,IAAM,KAAO,EAAK,GAC9G,EAAQ,MAAM,QAAQ,CAAM,EAAI,EAAO,CAAC,EAAI,GAClD,OAAO,EAAa,GAAG,CAAU,KAAK,CAAK,GAAK,GAAG,CAAK,EAC1D,CACA,GAAI,IAAS,YAAa,CACxB,MAAM,EAAc,EAAY,CAAC,GAAK,UAAU,EAAI,CAAC,GAC/C,EAAQ,MAAM,QAAQ,CAAM,EAAI,EAAO,CAAC,EAAI,GAClD,MAAO,GAAG,CAAW,KAAK,CAAK,EACjC,CACA,MAAM,EAAa,EAAY,CAAC,GAAK,UAAU,EAAI,CAAC,GAE9C,GADM,MAAM,QAAQ,EAAO,CAAC,CAAC,EAAI,EAAO,CAAC,EAAI,CAAA,GAC9B,CAAC,EACtB,IAAI,EAAiB,GAAY,KAAO,GAAK,OAAO,CAAQ,EAC5D,MAAM,GAAc,GAAM,EAAK,EAAE,aAAe,KAAO,OAAS,EAAG,mBAAqB,KAAO,OAAS,EAAG,CAAC,EAC5G,GAAI,OAAO,GAAe,WACxB,GAAI,CACF,EAAiB,EAAW,EAAU,CACpC,YAAa,EACb,eAAgB,EAChB,EAAA,CACV,CAAS,CACH,MAAY,CACZ,CAEF,IAAI,EAAW,GACf,MAAM,GAAkB,EAAK,EAAE,YAAc,KAAO,OAAS,EAAG,eAC1D,GAAW,GAAM,EAAK,EAAE,aAAe,KAAO,OAAS,EAAG,UAAY,KAAO,OAAS,EAAG,CAAC,EAChG,GAAI,MAAM,QAAQ,CAAc,GAAK,EAAe,CAAC,GAAK,KACxD,EAAW,OAAO,EAAe,CAAC,CAAC,UAC1B,MAAM,QAAQ,CAAO,GAAK,EAAQ,CAAC,GAAK,KAAM,CACvD,MAAM,GAAc,EAAK,EAAE,aAAe,KAAO,OAAS,EAAG,gBAC7D,GAAI,OAAO,GAAe,WACxB,GAAI,CACF,EAAW,OACT,EAAW,EAAQ,CAAC,EAAG,CAAE,YAAa,EAAG,eAAgB,EAAG,EAAA,CAAC,CAAE,CAC3E,CACQ,MAAY,CACV,EAAW,OAAO,EAAQ,CAAC,CAAC,CAC9B,MAEA,EAAW,OAAO,EAAQ,CAAC,CAAC,CAEhC,CACA,OAAO,EAAW,GAAG,CAAU,KAAK,CAAc,KAAK,CAAQ,GAAK,GAAG,CAAU,KAAK,CAAc,EACtG,CACA,kBAAmB,CACb,KAAK,gBACU,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EACrC,eAAe,KAAK,cAAe,IAAI,EAChD,KAAK,cAAgB,KAEzB,CAKA,qBAAqB,EAAG,EAAG,CACzB,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KACtB,EAAS,EAAE,IAAI,OACrB,OAAI,IAAS,OAAS,IAAS,SAAW,IAAS,YAC1C,EAAO,cAAc,2BAA2B,CAAC,IAAI,EAE1D,IAAS,UACJ,EAAO,cACZ,+BAA+B,CAAC,SAAS,CAAC,IAClD,EAEQ,IAAS,UACJ,EAAO,cACZ,+BAA+B,CAAC,SAAS,CAAC,IAClD,EAEQ,IAAS,YACJ,EAAO,cACZ,kDAAkD,CAAC,SAC3D,EAEQ,IAAS,OAAS,IAAS,eAAiB,IAAS,WAAa,IAAS,UAAY,IAAS,WAC3F,EAAO,cACZ,wCAAwC,CAAC,cAAc,CAAC,IAChE,EAEmB,EAAO,cACpB,wCAAwC,CAAC,8BAA8B,CAAC,IAC9E,GACqB,IACnB,CAEA,YAAa,CAEX,MAAM,EADI,KAAK,EACC,QAAQ,QACxB,GAAI,CAAC,EAAO,OACZ,MAAM,EAAiB,CACrB,KAAM,UACN,QAAS,EACT,QAAS,CACf,EACI,EAAM,YAAY,EAAgB,KAAK,YAAa,KAAK,cAAc,CACzE,CAEA,eAAgB,CACd,MAAM,EAAO,KAAK,EAAE,OAAO,MAAM,cACjC,OAAO,EAAK,SAAW,EAAK,SAAS,SAAW,EAAK,SAAS,WAAW,OAC3E,CACA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KAC5B,OAAI,IAAS,OAAS,IAAS,SAAW,IAAS,YAC1C,EAEF,EAAE,WAAW,OAAO,MAC7B,CAIA,mBAAmB,EAAI,CACrB,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,KAC5B,GAAI,IAAS,OAAS,IAAS,SAAW,IAAS,YACjD,OAAO,EAAE,WAAW,OAAO,OAE7B,MAAM,EAAS,EAAE,WAAW,OAC5B,OAAO,EAAO,CAAE,GAAK,MAAM,QAAQ,EAAO,CAAE,CAAC,EAAI,EAAO,CAAE,EAAE,OAAS,CACvE,CACA,cAAe,CACb,MAAM,EAAc,KAAK,gBAAe,EACpC,KAAK,aAAe,IAAa,KAAK,YAAc,EAAc,GAClE,KAAK,YAAc,IAAG,KAAK,YAAc,GAC7C,MAAM,EAAU,KAAK,mBAAmB,KAAK,WAAW,EACpD,KAAK,gBAAkB,IAAS,KAAK,eAAiB,EAAU,GAChE,KAAK,eAAiB,IAAG,KAAK,eAAiB,EACrD,CAUA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAK,KAAK,YAChB,GAAI,CAAC,EAAE,SAAS,OAAQ,OACxB,MAAM,EAAU,EAAE,WAAW,SAAW,EAAE,WAAW,QAAQ,CAAE,EAC/D,GAAI,CAAC,GAAW,CAAC,EAAQ,OAAQ,OACjC,MAAM,EAAO,EAAG,KACV,EAAO,EAAG,KAChB,GAAI,IAAS,QAAU,IAAS,OAAQ,OACxC,MAAM,EAAW,EAAQ,KAAK,cAAc,EAC5C,GAAI,GAAY,GAAQ,GAAY,EAAM,OAC1C,MAAM,EAAU,EAAQ,OACxB,QAAS,EAAK,EAAG,EAAK,EAAS,IAC7B,GAAI,EAAQ,CAAE,GAAK,GAAQ,EAAQ,CAAE,GAAK,EAAM,CAC9C,KAAK,eAAiB,EACtB,MACF,CAEJ,CAOA,+BAA+B,EAAW,CACxC,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAK,KAAK,YACV,EAAU,EAAE,WAAW,SAAW,EAAE,WAAW,QAAQ,CAAE,EAC/D,GAAI,CAAC,GAAW,CAAC,EAAQ,OAAQ,OACjC,MAAM,EAAO,EAAG,KACV,EAAO,EAAG,KAChB,GAAI,IAAS,QAAU,IAAS,OAAQ,OACxC,MAAM,EAAU,EAAQ,OACxB,GAAI,GAAa,GACf,QAAS,EAAK,EAAG,EAAK,EAAS,IAC7B,GAAI,EAAQ,CAAE,GAAK,GAAQ,EAAQ,CAAE,GAAK,EAAM,CAC9C,KAAK,eAAiB,EACtB,MACF,MAGF,SAAS,EAAK,EAAU,EAAG,GAAM,EAAG,IAClC,GAAI,EAAQ,CAAE,GAAK,GAAQ,EAAQ,CAAE,GAAK,EAAM,CAC9C,KAAK,eAAiB,EACtB,MACF,CAGN,CAOA,oBAAoB,EAAI,EAAI,CAC1B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACb,GAAI,CAAC,EAAE,SAAS,OAAQ,MAAO,GAC/B,MAAM,EAAU,EAAE,WAAW,SAAW,EAAE,WAAW,QAAQ,CAAE,EAC/D,GAAI,CAAC,EAAS,MAAO,GACrB,MAAM,EAAI,EAAQ,CAAE,EACpB,OAAI,IAAM,OAAe,GAClB,GAAK,EAAG,MAAQ,GAAK,EAAG,IACjC,CAQA,UAAU,EAAS,CACjB,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAE,OAAO,MAAM,cAAc,cAAc,QAAS,OACzD,MAAM,EAAS,EAAE,IAAI,OACrB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAS,EAAO,cAAc,uBAAuB,EACtD,IACL,EAAO,YAAc,GACrB,WAAW,IAAM,CACf,EAAO,YAAc,CACvB,EAAG,CAAC,EACN,CACF,CACA,GAAW,iBAAiB,CAAE,mBAAoB,EAAkB,CAAE,EACtE,MAAM,GAA6B,IAAI,IAAI,CAAC,MAAO,SAAU,SAAS,CAAC,EACjE,GAAgC,IAAI,IAAI,CAAC,MAAO,QAAS,YAAa,YAAa,OAAO,CAAC,EAC3F,GAA8B,IAAI,IAAI,CAAC,MAAM,CAAC,EACpD,SAAS,GAAS,EAAM,CACtB,OAAI,GAAW,IAAI,CAAI,EAAU,MAC7B,GAAc,IAAI,CAAI,EAAU,SAChC,GAAY,IAAI,CAAI,EAAU,OAC3B,IACT,CACA,MAAM,EAAgB,CAKpB,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,UAAY,IACnB,CAMA,cAAc,EAAU,EAAQ,CAC9B,GAAI,IAAa,EAAQ,MAAO,GAChC,MAAM,EAAK,GAAS,CAAQ,EACtB,EAAK,GAAS,CAAM,EAC1B,MAAI,GAAC,GAAM,CAAC,EAEd,CAOA,wBAAwB,EAAU,EAAQ,EAAW,CACnD,GAAI,CAAC,MAAM,QAAQ,CAAS,GAAK,EAAU,SAAW,EAAG,MAAO,GAChE,MAAM,EAAK,GAAS,CAAQ,EACtB,EAAK,GAAS,CAAM,EAC1B,OAAI,IAAO,UAAY,IAAO,OACxB,EAAU,MAAO,GAAM,OAAO,GAAM,QAAQ,EAAU,GACnD,EAAU,SAAW,GAAK,EAAU,CAAC,GAAK,OAAO,EAAU,CAAC,GAAM,UAAY,MAAM,QAAQ,EAAU,CAAC,EAAE,IAAI,EAElH,IAAO,MACF,EAAU,MACd,GAAM,GAAK,OAAO,GAAM,UAAY,MAAM,QAAQ,EAAE,IAAI,CACjE,EAEW,IAAO,MAAQ,IAAO,IAC/B,CAYA,qBAAqB,CAAE,SAAA,EAAU,OAAA,EAAQ,UAAA,CAAS,EAAI,CAEpD,GADA,KAAK,UAAY,KACb,CAAC,EAAY,UAAS,EAAI,MAAO,GACrC,MAAM,EAAU,KAAK,EAAE,OAAO,MAAM,WAMpC,GALI,CAAC,GAAW,EAAQ,UAAY,IAChC,EAAQ,gBAAkB,EAAQ,eAAe,UAAY,IAE7D,EAAQ,sBAAwB,GAAoB,GACpD,CAAC,KAAK,cAAc,EAAU,CAAM,GACpC,CAAC,KAAK,wBAAwB,EAAU,EAAQ,CAAS,EAAG,MAAO,GACvE,MAAM,EAAW,KAAK,gBAAgB,CAAQ,EAC9C,GAAI,CAAC,EAAS,OAAQ,MAAO,GAC7B,MAAM,EAAU,KAAK,cAAc,EAAU,EAAU,EAAQ,CAAS,EACxE,OAAI,EAAQ,OAAS,EAAU,IAC/B,KAAK,UAAY,CACf,SAAA,EACA,OAAA,EACA,QAAA,EACA,UAAW,CACT,WAAY,KAAK,EAAE,OAAO,YAAc,EACxC,WAAY,KAAK,EAAE,OAAO,YAAc,CAChD,CACA,EACI,KAAK,EAAE,QAAQ,cAAgB,CAAA,EACxB,GACT,CASA,gBAAgB,EAAU,CACxB,IAAI,EACJ,MAAM,GAAU,EAAK,KAAK,EAAE,QAAQ,MAAQ,KAAO,OAAS,EAAG,OAC/D,GAAI,CAAC,EAAQ,MAAO,CAAA,EACpB,MAAM,EAAW,CAAA,EACX,EAAM,GAAS,CAAQ,EAC7B,GAAI,IAAQ,MACU,EAAO,iBACzB,2CACR,EACkB,QAAS,GAAe,CAClC,IAAI,EACJ,MAAM,EAAY,UACf,EAAM,EAAW,aAAa,gBAAgB,IAAM,KAAO,EAAM,IAClE,EACV,EACsB,EAAW,iBAAiB,cAAc,EAClD,QAAQ,CAAC,EAAG,IAAM,CACtB,MAAM,EAAI,EAAE,aAAa,QAAQ,GAAK,EAAE,aAAa,GAAG,EACnD,GACL,EAAS,KAAK,CACZ,UAAA,EACA,EAAA,EACA,EAAA,EACA,KAAM,EAAE,aAAa,MAAM,CACvC,CAAW,CACH,CAAC,CACH,CAAC,UACQ,IAAQ,SACjB,GAAI,IAAa,aAAe,IAAa,QAAS,CACpD,MAAM,EAAU,KAAK,EAAE,OAAO,UAAY,EACpC,EAAU,KAAK,IAAI,KAAK,EAAE,OAAO,UAAW,KAAK,EAAE,OAAO,UAAU,EAAI,EAChE,EAAO,iBACnB,sDACV,EACc,QAAS,GAAM,CACnB,IAAI,EACJ,MAAM,EAEJ,EAAE,cAEE,EAAY,UACf,EAAgC,GAAO,aAAa,gBAAgB,IAAM,KAAO,EAAM,IACxF,EACZ,EACgB,EAAO,EAAE,aAAa,GAAG,EAC/B,GAAI,CAAC,EAAM,OACX,MAAM,EAAc,WAAW,EAAE,aAAa,cAAc,GAAK,GAAG,EAC9D,EAAI,EAAc,GAAI,KAAK,0BAC/B,EACA,EACA,EACA,CACZ,GAAe,EACL,EAAS,KAAK,CACZ,UAAA,EACA,EAAG,EACH,EAAA,EACA,KAAM,EAAE,aAAa,QAAQ,CACzC,CAAW,CACH,CAAC,CACH,MACiB,EAAO,iBACpB,6CACV,EACe,QACL,CAAC,EAAG,IAAM,CACR,MAAM,EAAI,EAAE,aAAa,GAAG,EACvB,GACL,EAAS,KAAK,CACZ,UAAW,EACX,EAAG,EACH,EAAA,EACA,KAAM,EAAE,aAAa,MAAM,CACzC,CAAa,CACH,CACV,EAGI,OAAO,CACT,CAcA,0BAA0B,EAAM,EAAa,EAAS,EAAS,CAC7D,MAAM,EAAI,EAAK,MACb,oHACN,EACI,GAAI,CAAC,EAAG,OAAO,KACf,MAAM,EAAK,WAAW,EAAE,CAAC,CAAC,EACpB,EAAK,WAAW,EAAE,CAAC,CAAC,EACpB,EAAI,WAAW,EAAE,CAAC,CAAC,EACnB,EAAQ,SAAS,EAAE,CAAC,EAAG,EAAE,EACzB,EAAQ,SAAS,EAAE,CAAC,EAAG,EAAE,EACzB,EAAK,WAAW,EAAE,CAAC,CAAC,EACpB,EAAK,WAAW,EAAE,CAAC,CAAC,EAC1B,GAAI,CAAC,SAAS,CAAC,GAAK,GAAK,EAAG,OAAO,KACnC,MAAM,EAAO,EAAc,EACrB,EAAS,EAAI,EACb,EAAS,KAAK,IAAI,EAAG,EAAI,CAAI,EAC7B,EAAO,CAAC,EAAI,EAAI,IAAS,CAC7B,MAAM,EAAK,EAAK,EACV,EAAK,EAAK,EACV,EAAO,KAAK,KAAK,EAAK,EAAK,EAAK,CAAE,EACxC,GAAI,IAAS,EAAG,MAAO,CAAE,EAAG,EAAS,EAAG,CAAO,EAC/C,MAAM,EAAI,EAAO,EACjB,MAAO,CAAE,EAAG,EAAU,EAAK,EAAG,EAAG,EAAU,EAAK,CAAC,CACnD,EACM,EAAK,EAAK,EAAI,EAAI,CAAM,EACxB,EAAK,EAAK,EAAI,EAAI,CAAM,EACxB,EAAK,EAAK,EAAI,EAAI,CAAM,EACxB,EAAK,EAAK,EAAI,EAAI,CAAM,EACxB,EAAY,EAAQ,EAAI,EAC9B,MAAO,KAAK,EAAG,CAAC,IAAI,EAAG,CAAC,MAAM,CAAM,IAAI,CAAM,MAAM,CAAK,IAAI,CAAK,IAAI,EAAG,CAAC,IAAI,EAAG,CAAC,MAAM,EAAG,CAAC,IAAI,EAAG,CAAC,MAAM,CAAM,IAAI,CAAM,MAAM,CAAK,IAAI,CAAS,IAAI,EAAG,CAAC,IAAI,EAAG,CAAC,IACpK,CAkBA,qBAAqB,EAAS,EAAS,EAAY,EAAa,EAAe,EAAa,CAC1F,MAAM,EAAa,EAAc,EAC3B,EAAS,EAAa,EACtB,EAAS,KAAK,IAAI,EAAG,EAAa,CAAU,EAC5C,GAAQ,EAAgB,IAAM,KAAK,GAAK,IACxC,GAAQ,EAAc,IAAM,KAAK,GAAK,IACtC,EAAS,CACb,EAAG,EAAU,EAAS,KAAK,IAAI,CAAI,EACnC,EAAG,EAAU,EAAS,KAAK,IAAI,CAAI,CACzC,EACU,EAAO,CACX,EAAG,EAAU,EAAS,KAAK,IAAI,CAAI,EACnC,EAAG,EAAU,EAAS,KAAK,IAAI,CAAI,CACzC,EACU,EAAS,CACb,EAAG,EAAU,EAAS,KAAK,IAAI,CAAI,EACnC,EAAG,EAAU,EAAS,KAAK,IAAI,CAAI,CACzC,EACU,EAAO,CACX,EAAG,EAAU,EAAS,KAAK,IAAI,CAAI,EACnC,EAAG,EAAU,EAAS,KAAK,IAAI,CAAI,CACzC,EACU,EAAQ,EAAc,EAAgB,EAAI,EAC1C,EAAQ,KAAK,IAAI,EAAc,CAAa,EAAI,IAAM,EAAI,EAChE,MAAO,KAAK,EAAO,CAAC,IAAI,EAAO,CAAC,MAAM,CAAM,IAAI,CAAM,MAAM,CAAK,IAAI,CAAK,IAAI,EAAK,CAAC,IAAI,EAAK,CAAC,MAAM,EAAK,CAAC,IAAI,EAAK,CAAC,MAAM,CAAM,IAAI,CAAM,MAAM,CAAK,IAAI,EAAI,CAAK,IAAI,EAAO,CAAC,IAAI,EAAO,CAAC,IAC5L,CAKA,aAAc,CACZ,OAAO,KAAK,UAAY,KAAK,UAAU,SAAW,IACpD,CAuBA,cAAc,EAAU,EAAW,EAAQ,EAAW,CACpD,MAAM,EAAsB,IAAI,IAC1B,EAAK,GAAS,CAAM,EACpB,EAAO,EAAS,MAAK,EAAG,KAAK,CAAC,EAAG,IAAM,EAAE,UAAY,EAAE,WAAa,EAAE,EAAI,EAAE,CAAC,EACnF,GAAI,IAAO,UAAY,IAAO,OAC5B,OAAA,EAAK,QAAQ,CAAC,EAAG,IAAM,CACrB,EAAI,IAAI,GAAG,CAAC,KAAM,CAAE,EAAG,EAAE,EAAG,KAAM,EAAE,IAAI,CAAE,CAC5C,CAAC,EACM,EAET,GAAI,IAAO,MAAO,CAChB,MAAM,EAAY,CAAA,EAElB,OADe,MAAM,QAAQ,CAAS,EAAI,EAAY,CAAA,GAC/C,QAAQ,CAAC,EAAG,IAAc,CAC/B,MAAM,EAAO,GAAK,MAAM,QAAQ,EAAE,IAAI,EAAI,EAAE,KAAO,CAAA,EACnD,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,EAAU,KAAK,CAAE,UAAW,EAAW,EAAA,CAAC,CAAE,CAE9C,CAAC,EACD,EAAK,QAAQ,CAAC,EAAG,IAAM,CACrB,MAAM,EAAM,EAAU,CAAC,EACnB,GACF,EAAI,IAAI,GAAG,EAAI,SAAS,IAAI,EAAI,CAAC,GAAI,CAAE,EAAG,EAAE,EAAG,KAAM,EAAE,IAAI,CAAE,CAEjE,CAAC,EACM,CACT,CACA,OAAO,CACT,CACA,UAAW,CACT,OAAO,KAAK,YAAc,IAC5B,CAMA,kBAAkB,EAAW,EAAG,CAC9B,GAAI,CAAC,KAAK,UAAW,OAAO,KAC5B,MAAM,EAAQ,KAAK,UAAU,QAAQ,IAAI,GAAG,CAAS,IAAI,CAAC,EAAE,EAC5D,GAAI,CAAC,EAAO,OAAO,KACnB,MAAM,EAAK,KAAK,UAAU,UAAU,YAAc,KAAK,EAAE,OAAO,YAAc,GACxE,EAAK,KAAK,UAAU,UAAU,YAAc,KAAK,EAAE,OAAO,YAAc,GAC9E,OAAO,IAAO,GAAK,IAAO,EAAI,EAAM,EAAI,KAAK,gBAAgB,EAAM,EAAG,EAAI,CAAE,CAC9E,CAcA,gBAAgB,EAAG,EAAI,EAAI,CACzB,OAAI,IAAO,GAAK,IAAO,EAAU,EAChB,GAAU,CAAC,EACZ,IAEb,GAAM,CACL,MAAM,EAAM,EAAE,CAAC,EACf,OAAI,IAAQ,IAAY,IACpB,IAAQ,KAAO,IAAQ,KAAO,IAAQ,IACjC,GAAG,CAAG,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,GAErC,IAAQ,IAAY,GAAG,CAAG,IAAI,EAAE,CAAC,EAAI,CAAE,GACvC,IAAQ,IAAY,GAAG,CAAG,IAAI,EAAE,CAAC,EAAI,CAAE,GACvC,IAAQ,IACH,GAAG,CAAG,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,GAEzF,IAAQ,KAAO,IAAQ,IAClB,GAAG,CAAG,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,GAE/D,IAAQ,IACH,GAAG,CAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAI,CAAE,IAAI,EAAE,CAAC,EAAI,CAAE,GAE1E,EAAE,KAAK,GAAG,CACnB,CACN,EAAM,KAAK,GAAG,CACZ,CASA,oBAAoB,EAAG,CACrB,MAAM,EAAM,KAAK,kBAAkB,CAAC,EACpC,OAAK,EACE,CAAE,EAAG,EAAI,EAAI,EAAI,MAAQ,EAAG,EAAG,EAAI,EAAI,EAAI,OAAS,CAAC,EAD3C,IAEnB,CASA,kBAAkB,EAAG,CACnB,GAAI,CAAC,KAAK,UAAW,OAAO,KAC5B,MAAM,EAAQ,KAAK,UAAU,QAAQ,IAAI,GAAG,CAAC,IAAI,EACjD,GAAI,CAAC,EAAO,OAAO,KACnB,MAAM,EAAM,KAAK,UAAU,EAAM,CAAC,EAClC,GAAI,CAAC,EAAK,OAAO,KACjB,MAAM,EAAK,KAAK,UAAU,UAAU,YAAc,KAAK,EAAE,OAAO,YAAc,GACxE,EAAK,KAAK,UAAU,UAAU,YAAc,KAAK,EAAE,OAAO,YAAc,GAC9E,MAAO,CACL,EAAG,EAAI,KAAO,EACd,EAAG,EAAI,KAAO,EACd,MAAO,EAAI,KAAO,EAAI,KACtB,OAAQ,EAAI,KAAO,EAAI,IAC7B,CACE,CAOA,UAAU,EAAG,CACX,MAAM,EAAW,GAAU,CAAC,EAC5B,IAAI,EAAO,IACP,EAAO,IACP,EAAO,KACP,EAAO,KACP,EAAO,GAuBX,OAtBA,EAAS,QAEN,GAAM,CACL,MAAM,EAAM,EAAE,CAAC,EACf,GAAI,IAAQ,IAAK,OACjB,IAAI,EAAQ,CAAA,EACZ,GAAI,IAAQ,IAAK,EAAQ,CAAC,CAAC,EAAE,CAAC,GAAI,EAAO,GAAQ,GAAK,EAAE,CAAC,CAAC,CAAC,UAClD,IAAQ,IAAK,EAAQ,CAAC,EAAE,EAAO,GAAQ,GAAK,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,CAAC,UACvD,IAAQ,IAAK,EAAQ,CAAC,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,CAAC,MAEzC,SAAS,EAAI,EAAG,EAAI,EAAI,EAAE,OAAQ,GAAK,EAAG,EAAM,KAAK,CAAC,EAAE,CAAC,EAAG,EAAE,EAAI,CAAC,CAAC,CAAC,EAEvE,EAAM,QAAQ,CAAC,CAAC,EAAG,CAAC,IAAM,CACpB,CAAC,SAAS,CAAC,GAAK,CAAC,SAAS,CAAC,IAC/B,EAAO,GACH,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GACvB,CAAC,CACH,CACN,EACS,EACE,CAAE,KAAA,EAAM,KAAA,EAAM,KAAA,EAAM,KAAA,CAAI,EADb,IAEpB,CAMA,kBAAkB,EAAW,EAAG,CAC9B,GAAI,CAAC,KAAK,UAAW,OAAO,KAC5B,MAAM,EAAQ,KAAK,UAAU,QAAQ,IAAI,GAAG,CAAS,IAAI,CAAC,EAAE,EAC5D,OAAO,EAAQ,EAAM,KAAO,IAC9B,CAEA,UAAW,CACT,MAAM,EAAU,KAAK,EAAE,OAAO,MAAM,WACpC,OAAO,EAAQ,gBAAkB,EAAQ,eAAe,OAAS,EAAQ,OAAS,GACpF,CAOA,iBAAkB,CAChB,IAAI,EACJ,GAAI,CAAC,KAAK,WAAa,CAAC,EAAY,UAAS,EAAI,OACjD,MAAM,GAAU,EAAK,KAAK,EAAE,QAAQ,MAAQ,KAAO,OAAS,EAAG,OAC/D,GAAI,CAAC,EAAQ,OACb,MAAM,EAAQ,KAAK,SAAQ,EACH,CACtB,oBACA,oBACA,mBACA,mCACA,iCACA,qBACA,yBACA,2BACN,EACoB,QAAS,GAAQ,CAC/B,EAAO,iBAAiB,CAAG,EAAE,QAAS,GAAO,CACtC,EAAG,QACR,EAAG,MAAM,QAAU,IACnB,EAAG,MAAM,WAAa,WAAW,CAAK,cACtC,EAAY,sBAAsB,IAAM,CACtC,EAAG,MAAM,QAAU,GACrB,CAAC,EACD,WAAW,IAAM,CACf,EAAG,MAAM,WAAa,GACtB,EAAG,MAAM,QAAU,EACrB,EAAG,EAAQ,EAAE,EACf,CAAC,CACH,CAAC,EACD,WAAW,IAAM,KAAK,QAAO,EAAI,EAAQ,GAAG,CAC9C,CACA,SAAU,CACR,KAAK,UAAY,IACnB,CACF,CACA,GAAW,iBAAiB,CAAE,gBAAiB,EAAe,CAAE,EAChE,MAAM,GAAU,+BAChB,MAAM,EAAW,CAMf,YAAY,EAAG,EAAK,EAAW,CAC7B,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,UAAY,CACnB,CAIA,OAAO,EAAM,CACX,GAAI,CAAC,EAAY,UAAS,EAAI,OAC9B,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,OACrB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAW,EAAO,cAAc,wBAAwB,EAC1D,GAAY,EAAS,YACvB,EAAS,WAAW,YAAY,CAAQ,EAE1C,MAAM,EAAM,EAAE,OAAO,WAAa,EAAE,OAAO,UAAU,WAErD,GADI,CAAC,GAAO,EAAI,OAAS,IACrB,KAAK,UAAU,QAAU,EAAG,OAChC,MAAM,EAAM,EAAY,gBAAgB,GAAS,KAAK,EACtD,EAAI,aAAa,QAAS,uBAAuB,EACjD,EAAI,aAAa,aAAc,sBAAsB,EACrD,KAAK,UAAU,EAAK,CAAG,EACvB,MAAM,EAAY,EAAI,WAAa,KAAO,EAAI,UAAY,MAC1D,EAAK,QAAQ,CAAC,EAAI,IAAM,CACtB,GAAI,EAAI,EAAG,CACT,MAAM,EAAM,EAAY,gBAAgB,GAAS,MAAM,EACvD,EAAI,aAAa,QAAS,iCAAiC,EAC3D,EAAI,aAAa,cAAe,MAAM,EACtC,EAAI,YAAc,EAClB,EAAI,YAAY,CAAG,CACrB,CACA,MAAM,EAAQ,KAAK,OAAO,EAAI,CAAC,EAE/B,GADkB,IAAM,EAAK,OAAS,EACvB,CACb,MAAM,EAAM,EAAY,gBAAgB,GAAS,MAAM,EACvD,EAAI,aACF,QACA,0DACV,EACQ,EAAI,aAAa,eAAgB,MAAM,EACvC,EAAI,YAAc,EAClB,EAAI,YAAY,CAAG,CACrB,KAAO,CACL,MAAM,EAEJ,EAAY,gBAAgB,GAAS,QAAQ,EAI/C,GAFA,EAAI,aAAa,OAAQ,QAAQ,EACjC,EAAI,aAAa,QAAS,4BAA4B,EAClD,IAAM,EAAG,CACX,MAAM,EAAQ,EAAY,gBAAgB,GAAS,MAAM,EACzD,EAAM,aAAa,QAAS,6BAA6B,EACzD,EAAM,aAAa,cAAe,MAAM,EACxC,EAAM,YAAc,SACpB,EAAI,YAAY,CAAK,CACvB,CACA,MAAM,EAAO,EAAY,gBAAgB,GAAS,MAAM,EACxD,EAAK,aAAa,QAAS,6BAA6B,EACxD,EAAK,YAAc,EACnB,EAAI,YAAY,CAAI,EACpB,EAAI,iBAAiB,QAAS,IAAM,KAAK,UAAU,aAAa,CAAC,CAAC,EAClE,EAAI,YAAY,CAAG,CACrB,CACF,CAAC,EACD,EAAO,YAAY,CAAG,EACtB,KAAK,oBAAoB,CAAG,CAC9B,CAQA,oBAAoB,EAAK,CACvB,MAAM,EAAI,KAAK,EACT,EAEJ,CAAC,yBAA0B,2BAA2B,EAAE,IAAK,GAAM,EAAE,IAAI,OAAO,cAAc,CAAC,CAAC,EAAE,OAAQ,GAAO,IAAO,IAAI,EAE9H,GAAI,CAAC,EAAO,OAAQ,OACpB,MAAM,EAAU,EAAE,IAAI,OAAO,sBAAqB,EAAG,IACrD,QAAS,EAAO,EAAG,EAAO,EAAO,OAAS,EAAG,IAAQ,CACnD,MAAM,EAAK,EAAI,sBAAqB,EAC9B,EAAM,EAAO,KAAM,GAAO,CAC9B,MAAM,EAAI,EAAG,sBAAqB,EAClC,OAAO,EAAG,KAAO,EAAE,OAAS,EAAG,MAAQ,EAAE,MAAQ,EAAG,IAAM,EAAE,QAAU,EAAG,OAAS,EAAE,GACtF,CAAC,EACD,GAAI,CAAC,EAAK,MACV,EAAI,MAAM,IAAM,GAAG,EAAI,sBAAqB,EAAG,OAAS,EAAU,CAAC,IACrE,CACF,CAMA,OAAO,EAAI,EAAO,CAChB,MAAM,EAAM,KAAK,EAAE,OAAO,UAAU,WACpC,IAAI,EACJ,GAAI,IAAU,EACZ,EAAQ,EAAI,WAAa,KAAO,EAAI,UAAY,UAC3C,CACL,MAAM,GAAQ,KAAK,EAAE,OAAO,UAAU,QAAU,CAAA,GAAI,KACjD,GAAM,GAAK,EAAE,KAAO,CAC7B,EACM,EAAQ,GAAQ,EAAK,MAAQ,OAAO,CAAE,CACxC,CACA,OAAI,OAAO,EAAI,WAAc,WACpB,EAAI,UAAU,EAAO,CAAE,MAAA,EAAO,MAAO,KAAK,UAAU,KAAK,CAAE,EAE7D,CACT,CAKA,UAAU,EAAK,EAAK,CAClB,MAAM,EAAK,EAAI,SAAW,EACpB,EAAK,EAAI,SAAW,EAC1B,EAAI,MAAM,SAAW,WACrB,EAAI,MAAM,IAAM,EAAK,KACjB,EAAI,WAAa,YACnB,EAAI,MAAM,MAAQ,CAAC,EAAK,EAAI,KAE5B,EAAI,MAAM,KAAO,EAAK,IAE1B,CACF,CACA,MAAM,GAAY,GAClB,MAAM,EAAU,CAKd,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,MAAQ,CAAA,EACb,KAAK,aAAe,KACpB,KAAK,OAAS,GACd,KAAK,WAAa,IAAI,GAAW,EAAG,EAAK,IAAI,EAC7C,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,KAAI,CACX,CACA,MAAO,CACL,MAAM,EAAI,KAAK,EACX,CAAC,EAAE,OAAO,WAAa,CAAC,EAAE,OAAO,UAAU,SAC3C,KAAK,SACT,KAAK,OAAS,GACd,KAAK,IAAI,iBAAiB,qBAAsB,KAAK,cAAc,EACnE,KAAK,IAAI,iBAAiB,UAAW,KAAK,YAAY,EACtD,KAAK,IAAI,iBAAiB,UAAW,KAAK,YAAY,EACxD,CAGA,IAAI,MAAO,CACT,MAAO,CAAC,OAAQ,GAAG,KAAK,MAAM,IAAK,GAAM,EAAE,EAAE,CAAC,CAChD,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,MAAM,MACpB,CASA,UAAU,EAAI,EAAc,EAAM,CAChC,MAAM,EAAQ,KAAK,cAAc,CAAE,EACnC,OAAI,EAAc,KAAK,WAAW,EAAO,EAAc,CAAI,EACvD,OAAO,KAAK,EAAE,OAAO,UAAU,aAAgB,WAC1C,KAAK,gBAAgB,EAAI,EAAc,CAAI,GAEpD,QAAQ,KACN,6BAA6B,CAAE,4EACrC,EACW,QAAQ,QAAQ,KAAK,GAAG,EACjC,CAKA,SAAU,CACR,OAAO,KAAK,aAAa,KAAK,MAAM,OAAS,CAAC,CAChD,CAKA,aAAc,CACZ,OAAO,KAAK,aAAa,CAAC,CAC5B,CAMA,aAAa,EAAa,CACxB,MAAM,EAAM,KAAK,MAAM,OACvB,GAAI,EAAc,GAAK,GAAe,EAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG,EAC1E,MAAM,EAAO,KAAK,KAAK,KAAK,KAAK,OAAS,CAAC,EACrC,EAAU,IAAgB,EAAI,KAAK,aAAe,KAAK,MAAM,CAAW,EAAE,QAChF,KAAK,MAAQ,KAAK,MAAM,MAAM,EAAG,CAAW,EAC5C,MAAM,EAAK,KAAK,KAAK,KAAK,KAAK,OAAS,CAAC,EACzC,OAAO,KAAK,OAAO,KAAK,kBAAkB,CAAO,EAAG,KAAM,CAAE,KAAA,EAAM,GAAA,CAAE,CAAE,CACxE,CAMA,cAAc,EAAI,CAChB,MAAM,EAAO,KAAK,EAAE,OAAO,WAAa,KAAK,EAAE,OAAO,UAAU,OAChE,OAAK,MAAM,QAAQ,CAAI,GAChB,EAAK,KAAM,GAAM,GAAK,EAAE,KAAO,CAAE,GAAK,IAC/C,CAOA,WAAW,EAAO,EAAc,EAAM,CACpC,GAAI,KAAK,MAAM,QAAU,GACvB,eAAQ,KAAK,oCAAoC,EAAS,YAAY,EAC/D,QAAQ,QAAQ,KAAK,GAAG,EAE5B,KAAK,eAAc,KAAK,aAAe,KAAK,UAAS,GAC1D,MAAM,EAAO,KAAK,KAAK,KAAK,KAAK,OAAS,CAAC,EAC3C,YAAK,MAAM,KAAK,CAAE,GAAI,EAAM,GAAI,KAAM,EAAM,KAAM,QAAS,KAAK,UAAS,CAAE,CAAE,EACtE,KAAK,OAAO,KAAK,eAAe,CAAK,EAAG,OAAQ,CACrD,KAAA,EACA,GAAI,EAAM,GACV,MAAO,EACP,YAAa,GAAQ,EAAK,YAC1B,eAAgB,GAAQ,EAAK,cACnC,CAAK,CACH,CAQA,gBAAgB,EAAI,EAAO,EAAM,CAC/B,MAAM,EAAK,KAAK,EAAE,OAAO,UAAU,YACnC,IAAI,EACJ,GAAI,CACF,EAAS,EAAG,CACV,MAAA,EACA,YAAa,GAAQ,EAAK,YAC1B,eAAgB,GAAQ,EAAK,cACrC,CAAO,CACH,OAAS,EAAO,CACd,YAAK,MAAM,iBAAkB,CAAE,GAAA,EAAI,MAAA,CAAK,CAAE,EACnC,QAAQ,QAAQ,KAAK,GAAG,CACjC,CACA,OAAO,QAAQ,QAAQ,CAAM,EAAE,KAC5B,GACK,CAAC,GAAS,CAAC,EAAM,KAAa,KAAK,IAChC,KAAK,WAAW,EAAO,EAAO,CAAI,EAE1C,IACC,KAAK,MAAM,iBAAkB,CAAE,GAAA,EAAI,MAAA,CAAK,CAAE,EACnC,KAAK,IAEpB,CACE,CAOA,WAAY,CACV,MAAM,EAAI,KAAK,EAAE,OACX,EAAS,KAAK,gBAAe,EAC7B,EAAO,CAAE,OAAQ,KAAK,kBAAkB,EAAQ,MAAM,EAAE,MAAM,CAAC,CAAC,EACtE,OAAI,MAAM,QAAQ,EAAE,MAAM,GAAK,EAAE,OAAO,SACtC,EAAK,OAAS,EAAQ,MAAM,EAAE,MAAM,GAEtC,EAAK,MAAQ,CAAE,KAAM,EAAE,MAAM,KAAM,QAAS,EAAE,MAAM,OAAO,EACvD,EAAO,IAAI,OAAO,IAAG,EAAK,MAAQ,EAAQ,MAAM,EAAE,KAAK,GACvD,EAAO,IAAI,OAAO,IAAG,EAAK,MAAQ,EAAQ,MAAM,EAAE,KAAK,GACvD,EAAO,IAAI,QAAQ,IAAG,EAAK,OAAS,EAAE,OAAS,EAAQ,MAAM,EAAE,MAAM,EAAI,QACzE,EAAO,IAAI,aAAa,IAAG,EAAK,YAAc,EAAQ,MAAM,EAAE,WAAW,GACzE,EAAO,IAAI,MAAM,IAAG,EAAK,KAAO,EAAQ,MAAM,EAAE,IAAI,GACpD,EAAO,IAAI,QAAQ,IAAG,EAAK,OAAS,EAAQ,MAAM,EAAE,MAAM,GACvD,CACT,CAWA,kBAAkB,EAAQ,CACxB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAU,CACd,GAAG,EAAG,iBAAmB,CAAA,EACzB,GAAG,EAAG,0BAA4B,CAAA,CACxC,EACI,GAAI,CAAC,EAAQ,OAAQ,OAAO,EAC5B,MAAM,EAAO,EAAE,OAAO,MAAM,KAEtB,GADiB,IAAS,OAAS,IAAS,SAAW,IAAS,cAAgB,EAAO,SAAW,GAAK,EAAO,CAAC,GAAK,OAAO,EAAO,CAAC,GAAM,UAAY,MAAM,QAAQ,EAAO,CAAC,EAAE,IAAI,EACrJ,EAAO,CAAC,EAAE,KAAO,EACnD,UAAW,KAAS,EAAS,CAC3B,MAAM,EAAI,EAAM,MACZ,EAAG,WACD,EAAO,CAAC,IACV,EAAO,CAAC,EAAE,KAAO,MAAM,QAAQ,EAAM,IAAI,EAAI,EAAM,KAAK,MAAK,EAAK,EAAM,MAEjE,EAAU,CAAC,GAAK,OAAO,EAAU,CAAC,GAAM,SACjD,EAAU,CAAC,EAAE,EAAI,EAAM,KACd,EAAU,CAAC,IAAM,SAC1B,EAAU,CAAC,EAAI,EAAM,KAEzB,CACA,OAAO,CACT,CAMA,iBAAkB,CAChB,MAAM,EAAyB,IAAI,IAC7B,EAAO,KAAK,EAAE,OAAO,WAAa,KAAK,EAAE,OAAO,UAAU,QAAU,CAAA,EAC1E,UAAW,KAAK,EACT,IACD,EAAE,OAAO,EAAO,IAAI,OAAO,EAC3B,EAAE,OAAO,EAAO,IAAI,OAAO,EAC3B,EAAE,QAAQ,EAAO,IAAI,QAAQ,EAC7B,EAAE,aAAa,EAAO,IAAI,aAAa,EACvC,EAAE,MAAM,EAAO,IAAI,MAAM,EACzB,EAAE,QAAQ,EAAO,IAAI,QAAQ,GAEnC,OAAO,CACT,CAOA,wBAAwB,EAAM,EAAK,CAC7B,EAAI,QAAO,EAAK,MAAQ,EAAI,OAC5B,EAAI,QAAO,EAAK,MAAQ,EAAI,OAC5B,EAAI,SAAQ,EAAK,OAAS,EAAI,QAC9B,EAAI,cAAa,EAAK,YAAc,EAAI,aACxC,EAAI,OAAM,EAAK,KAAO,EAAI,MAC1B,EAAI,SAAQ,EAAK,OAAS,EAAI,OACpC,CAQA,eAAe,EAAO,CACpB,MAAM,EAAO,CAAA,EACT,MAAM,QAAQ,EAAM,MAAM,EAC5B,EAAK,OAAS,EAAM,OAEpB,EAAK,OAAS,CAAC,CAAE,KAAM,EAAM,MAAQ,GAAI,KAAM,EAAM,IAAI,CAAE,EAE7D,MAAM,EAAQ,CAAA,EACd,OAAI,EAAM,OAAS,EAAM,MAAM,OAAM,EAAM,KAAO,EAAM,MAAM,MAC1D,EAAM,OAAS,EAAM,MAAM,SAAW,OAAM,EAAM,QAAU,EAAM,MAAM,SACxE,OAAO,KAAK,CAAK,EAAE,SAAQ,EAAK,MAAQ,GAC5C,KAAK,wBAAwB,EAAM,CAAK,EACjC,CACT,CAMA,kBAAkB,EAAM,CACtB,MAAM,EAAO,CAAE,OAAQ,EAAK,OAAQ,MAAO,EAAK,KAAK,EACrD,OAAI,EAAK,QAAU,EAAK,OAAO,SAAQ,EAAK,OAAS,EAAK,QAC1D,KAAK,wBAAwB,EAAM,CAAI,EAChC,CACT,CASA,OAAO,EAAM,EAAW,EAAM,CAC5B,MAAM,EAAI,KAAK,EACf,EAAE,SAAS,mBAAqB,CAAA,EAChC,EAAE,QAAQ,gBAAkB,CAAA,EAC5B,EAAE,QAAQ,uBAAyB,CAAA,EACnC,EAAE,QAAQ,yBAA2B,CAAA,EACrC,EAAE,QAAQ,gCAAkC,CAAA,EAC5C,EAAE,QAAQ,mBAAqB,GAC/B,EAAE,QAAQ,aAAe,CAAA,EACzB,MAAM,GAAW,CAAC,EAAE,OAAO,UAAU,WAAa,EAAE,OAAO,UAAU,UAAU,UAAY,KAAU,EAAE,OAAO,MAAM,WAAW,UAAY,GACvI,IAAc,QAAQ,KAAK,MAAM,iBAAkB,CAAI,EAC3D,MAAM,EAAa,GAAS,KAAK,IAAI,cAAc,EAAM,GAAO,EAAM,GAAO,EAAK,EAC5E,EAAO,KACX,KAAK,MAAM,IAAc,OAAS,eAAiB,UAAW,CAAI,EAC3D,KAAK,KAEd,GAAI,GAAW,KAAK,aAAY,EAAI,CAClC,MAAM,EAAS,KAAK,eAAe,CAAI,EACvC,GAAI,EACF,OAAO,KAAK,WAAW,EAAQ,EAAW,IAAM,EAAU,EAAK,CAAC,EAAE,KAAK,CAAI,CAE/E,CACA,OAAO,EAAU,CAAO,EAAE,KAAK,CAAI,CACrC,CAEA,cAAe,CACb,MAAM,EAAI,KAAK,EAAE,OAAO,WAAa,KAAK,EAAE,OAAO,UAAU,UAC7D,MAAO,CAAC,EAAE,GAAK,EAAE,cACnB,CAEA,UAAW,CACT,MAAM,EAAQ,KAAK,EAAE,KAAO,KAAK,EAAE,IAAI,MACvC,OAAO,GAAS,EAAM,KAAO,EAAM,KAAO,IAC5C,CAOA,YAAa,CACX,MAAM,EAAM,KAAK,SAAQ,EACzB,MAAI,CAAC,GAAO,OAAO,EAAI,eAAkB,WAAmB,KACrD,EAAI,cACT,mEACN,CACE,CAWA,eAAe,EAAM,CACnB,GAAI,CAAC,EAAY,UAAS,EAAI,OAAO,KACrC,MAAM,EAAM,KAAK,SAAQ,EACnB,EAAQ,KAAK,WAAU,EAC7B,GAAI,CAAC,GAAO,CAAC,GAAS,OAAO,EAAM,SAAY,YAAc,OAAO,EAAI,uBAA0B,WAChG,OAAO,KAET,MAAM,EAAU,EAAI,sBAAqB,EACzC,IAAI,EAAK,KAMT,GALI,GAAQ,EAAK,aAAe,MAAQ,EAAK,gBAAkB,MAAQ,KAAK,EAAE,IAAI,SAChF,EAAK,KAAK,EAAE,IAAI,OAAO,cACrB,WAAW,EAAK,WAAW,SAAS,EAAK,cAAc,IAC/D,GAEQ,GAAM,OAAO,EAAG,uBAA0B,WAAY,CACxD,MAAM,EAAI,EAAG,sBAAqB,EAClC,MAAO,CACL,EAAG,EAAE,KAAO,EAAE,MAAQ,EAAI,EAAQ,KAClC,EAAG,EAAE,IAAM,EAAE,OAAS,EAAI,EAAQ,GAC1C,CACI,CACA,MAAM,EAAQ,EAAM,sBAAqB,EACzC,MAAO,CACL,EAAG,EAAM,KAAO,EAAM,MAAQ,EAAI,EAAQ,KAC1C,EAAG,EAAM,IAAM,EAAM,OAAS,EAAI,EAAQ,GAChD,CACE,CAkBA,WAAW,EAAQ,EAAW,EAAW,CACvC,OAAO,GAAQ,KAAM,KAAM,WAAa,CACtC,MAAM,EAAM,KAAK,cAAa,EACxB,EAAO,IAAc,OACrB,EAAS,KAAK,MAAM,EAAM,GAAI,EAC9B,EAAQ,EAAO,cAAgB,cAC/B,EAAS,EAAO,4BAA8B,cAC9C,EAAU,GAAO,CACrB,EAAG,MAAM,aAAe,WACxB,EAAG,MAAM,gBAAkB,GAAG,EAAO,CAAC,MAAM,EAAO,CAAC,IACtD,EACM,EAAS,GAAO,CACpB,EAAG,MAAM,UAAY,GACrB,EAAG,MAAM,QAAU,GACnB,EAAG,MAAM,gBAAkB,GAC3B,EAAG,MAAM,aAAe,EAC1B,EACM,EAAW,KAAK,WAAU,EAChC,IAAI,EAAU,KACd,GAAI,EAAU,CACZ,EAAO,CAAQ,EACf,EAAU,EAAS,QACjB,CACE,CAAE,UAAW,WAAY,QAAS,CAAC,EACnC,CAAE,UAAW,EAAO,QAAS,CAAC,CAC1C,EACU,CAAE,SAAU,EAAQ,OAAQ,UAAW,KAAM,UAAU,CACjE,EACQ,GAAI,CACF,MAAM,EAAQ,QAChB,MAAY,CACZ,CACF,CACA,MAAM,EAAS,EACf,MAAM,EAAU,KAAK,WAAU,EAC/B,GAAI,EAAS,CACX,EAAO,CAAO,EACd,EAAQ,MAAM,QAAU,IACxB,EAAQ,MAAM,UAAY,EACtB,GAAW,IAAa,GAAS,EAAQ,OAAM,EACnD,MAAM,EAAS,EAAQ,QACrB,CACE,CAAE,UAAW,EAAQ,QAAS,CAAC,EAC/B,CAAE,UAAW,WAAY,QAAS,CAAC,CAC/C,EAEU,CAAE,SAAU,EAAK,OAAQ,gCAAiC,KAAM,UAAU,CACpF,EACQ,GAAI,CACF,MAAM,EAAO,QACf,MAAY,CACZ,CACA,EAAM,CAAO,EACb,EAAO,OAAM,CACf,CACF,CAAC,CACH,CAEA,eAAgB,CACd,MAAM,EAAI,KAAK,EAAE,OAAO,WAAa,KAAK,EAAE,OAAO,UAAU,UACvD,EAAQ,GAAK,OAAO,EAAE,OAAU,SAAW,EAAE,MAAQ,IAC3D,OAAO,KAAK,IAAI,GAAI,CAAK,CAC3B,CAMA,MAAM,EAAO,EAAS,CACpB,MAAM,EAAK,KAAK,EAAE,OAAO,MAAM,QAAU,KAAK,EAAE,OAAO,MAAM,OAAO,CAAK,EACrE,OAAO,GAAO,YAAY,EAAG,EAAS,KAAK,IAAK,KAAK,CAAC,EAC1D,KAAK,IAAI,OAAO,UAAU,EAAO,CAAC,EAAS,KAAK,IAAK,KAAK,CAAC,CAAC,CAC9D,CAOA,eAAe,EAAQ,EAAM,EAAM,CACjC,GAAI,CAAC,EAAM,OACX,MAAM,EAAQ,KAAK,SAAS,EAAK,YAAa,EAAK,cAAc,EACjE,GAAI,GAAS,OAAO,GAAU,UAAY,EAAM,WAAa,KAC3D,OAAO,KAAK,UAAU,EAAM,UAAW,EAAO,CAAI,EAEpD,GAAI,OAAO,KAAK,EAAE,OAAO,UAAU,aAAgB,WACjD,OAAO,KAAK,gBAAgB,KAAM,EAAO,CAAI,CAGjD,CAMA,SAAS,EAAa,EAAgB,CACpC,MAAM,EAAS,KAAK,EAAE,OAAO,OAC7B,GAAI,CAAC,MAAM,QAAQ,CAAM,GAAK,GAAe,MAAQ,GAAkB,KACrE,OAAO,KAET,MAAM,EAAI,EAAO,CAAW,EAC5B,MAAI,CAAC,GAAK,CAAC,MAAM,QAAQ,EAAE,IAAI,EAAU,KAClC,EAAE,KAAK,CAAc,GAAK,KAAO,EAAE,KAAK,CAAc,EAAI,IACnE,CACA,cAAe,CACT,CAAC,KAAK,EAAE,OAAO,WAAa,CAAC,KAAK,EAAE,OAAO,UAAU,UACzD,KAAK,sBAAqB,EAC1B,KAAK,WAAW,OAAO,KAAK,IAAI,EAClC,CAKA,uBAAwB,CACtB,GAAI,CAAC,EAAY,UAAS,EAAI,OAC9B,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,OACf,EAAS,EAAE,OAAO,OACpB,CAAC,GAAU,CAAC,MAAM,QAAQ,CAAM,GACpC,EAAO,QAAQ,CAAC,EAAG,IAAM,CACvB,MAAM,EAAO,GAAK,MAAM,QAAQ,EAAE,IAAI,EAAI,EAAE,KAAO,KAC9C,GACL,EAAK,QAAQ,CAAC,EAAO,IAAM,CACzB,GAAI,CAAC,GAAS,OAAO,GAAU,UAAY,EAAM,WAAa,KAAM,OACtD,EAAO,iBAAiB,WAAW,CAAC,SAAS,CAAC,IAAI,EAC1D,QACH,GAAS,EAAK,UAAU,IAAI,6BAA6B,CACpE,CACM,CAAC,CACH,CAAC,CACH,CACF,CACA,GAAW,iBAAiB,CAAE,UAAW,EAAS,CAAE,EACpD,MAAM,GAAoB,EAC1B,SAAS,GAAW,EAAK,EAAK,CAC5B,MAAM,EAA2B,GAAQ,KACnC,EAA2B,GAAQ,KACzC,MAAI,CAAC,GAAU,CAAC,EAAe,KACxB,CAAE,IAAK,EAAS,EAAM,KAAM,IAAK,EAAS,EAAM,IAAI,CAC7D,CACA,SAAS,GAAe,EAAK,CAC3B,OAAK,MAAM,QAAQ,CAAG,EACf,EAAI,IAAK,GAAM,MAAM,QAAQ,CAAC,EAAI,EAAE,MAAK,EAAK,CAAC,EADtB,CAAA,CAElC,CACA,SAAS,GAAe,EAAQ,EAAK,CACnC,OAAI,OAAO,GAAW,YAAc,CAAC,EAAY,KAC7C,IAAW,EAAI,mBAA2B,QAC1C,IAAW,EAAI,mBAA2B,QAC1C,IAAW,EAAI,mBAA2B,QACvC,IACT,CACA,SAAS,GAAc,EAAM,CAC3B,OAAQ,EAAI,CACV,IAAK,QACH,MAAO,qBACT,IAAK,QACH,MAAO,qBACT,IAAK,QACH,MAAO,qBACT,QACE,OAAO,IACb,CACA,CACA,SAAS,GAAmB,EAAG,EAAK,CAClC,MAAM,EAAa,EAAE,OAAO,YAAc,EAAQ,MAAM,EAAE,OAAO,WAAW,EAAI,KAC1E,EAAU,CAAA,EACV,EAAM,EAAE,QAAQ,QAAU,EAAE,QAAQ,OAAO,eAAiB,CAAA,EAClE,UAAW,KAAS,EAAK,CACvB,GAAI,CAAC,GAAS,EAAM,QAAU,gBAAiB,SAC/C,MAAM,EAAO,GAAe,EAAM,OAAQ,CAAG,EACxC,GACL,EAAQ,KAAK,CAAE,KAAA,EAAM,OAAQ,EAAQ,MAAM,EAAM,MAAM,CAAC,CAAE,CAC5D,CACA,MAAO,CAAE,OAAQ,EAAY,QAAA,CAAO,CACtC,CACA,SAAS,GAAe,EAAK,CAC3B,MAAM,EAAI,GAAO,EAAI,QACrB,GAAI,CAAC,GAAK,OAAO,EAAE,SAAY,WAAY,OAAO,KAClD,MAAM,EAAO,EAAE,QAAO,EACtB,OAAO,MAAM,QAAQ,CAAI,GAAK,EAAK,OAAS,CAAE,KAAA,CAAI,EAAK,IACzD,CACA,SAAS,GAAiB,EAAG,EAAK,CAChC,IAAI,EAAI,EACR,MAAM,EAAO,EAAE,OAAO,OAAS,CAAA,EAEzB,GADU,MAAM,QAAQ,EAAE,OAAO,KAAK,EAAI,EAAE,OAAO,MAAQ,EAAE,OAAO,MAAQ,CAAC,EAAE,OAAO,KAAK,EAAI,CAAA,GAC5E,IACtB,GAAM,GAAW,GAAK,EAAE,IAAK,GAAK,EAAE,GAAG,CAC5C,EACQ,EAAO,EAAS,KAAM,GAAO,IAAO,IAAI,EACxC,EAAQ,EAAE,OAAO,MACjB,EAAY,GAAO,EAAI,UAC7B,MAAO,CACL,EAAG,GACH,OAAQ,CACN,MAAO,GAAW,EAAK,IAAK,EAAK,GAAG,EACpC,MAAO,EAAO,EAAW,IAC/B,EACI,OAAQ,CAAC,CAAC,EAAE,SAAS,OACrB,WAAY,EAAE,QAAQ,wBAA0B,CAAA,GAAI,MAAK,EACzD,oBAAqB,EAAE,QAAQ,iCAAmC,CAAA,GAAI,MAAK,EAC3E,mBAAoB,GAAe,EAAE,SAAS,kBAAkB,EAChE,MAAO,EAAQ,CAAE,MAAO,EAAK,EAAM,OAAS,KAAO,EAAK,KAAM,SAAU,EAAK,EAAM,UAAY,KAAO,EAAK,IAAI,EAAK,KACpH,OAAQ,EAAE,OAAO,OAAS,EAAE,OAAO,MAAM,eAAiB,KAC1D,YAAa,GAAmB,EAAG,CAAG,EACtC,MAAO,GAAa,EAAU,MAAQ,EAAI,CAAE,KAAM,EAAU,KAAK,MAAK,CAAE,EAAK,KAC7E,QAAS,GAAe,CAAG,CAC/B,CACA,CACA,SAAS,GAAkB,EAAK,EAAiB,EAAiB,CAChE,MAAM,EAAI,EAAI,EACd,GAAI,GAAmB,MAAQ,GAAmB,KAAM,OACxD,MAAM,EAAQ,EAAE,QAAQ,aAAe,CAAA,EACjC,EAAyB,IAAI,IAAI,CACrC,GAAG,GAAmB,CAAA,EACtB,GAAG,GAAmB,CAAA,CAC1B,CAAG,EACK,EAA0B,IAAI,IAAI,CACtC,GAAG,EAAE,QAAQ,wBAA0B,CAAA,EACvC,GAAG,EAAE,QAAQ,iCAAmC,CAAA,CACpD,CAAG,EACD,QAAS,EAAY,EAAG,EAAY,EAAM,OAAQ,IAAa,CAC7D,MAAM,EAAQ,EAAM,CAAS,EAC7B,GAAI,GAAS,KAAM,SACnB,MAAM,EAAiB,EAAO,IAAI,CAAS,EACrC,EAAc,EAAQ,IAAI,CAAS,EACrC,GAAkB,CAAC,EACrB,EAAI,WAAW,CAAK,EACX,CAAC,GAAkB,GAC5B,EAAI,WAAW,CAAK,CAExB,CACF,CACA,SAAS,GAAiB,EAAK,EAAoB,CAC5C,MAAM,QAAQ,CAAkB,IACrC,EAAI,EAAE,SAAS,mBAAqB,GAAe,CAAkB,EACvE,CACA,SAAS,GAAe,EAAK,EAAM,CAAE,QAAA,EAAU,GAAM,aAAA,CAAY,EAAK,CAAA,EAAI,CACxE,IAAI,EAAI,EACR,GAAI,CAAC,GAAO,CAAC,EAAM,OACf,OAAO,EAAK,GAAM,UAAY,EAAK,EAAI,IACzC,QAAQ,KACN,2BAA2B,EAAK,CAAC,2CAA2C,EAAiB,0BACnG,EAEE,EAAI,iBAAgB,EACpB,MAAM,EAAW,EAAe,EAAQ,MAAM,CAAY,EAAI,CAAA,EACxD,EAAK,EAAK,QAAU,EAAK,OAAO,MACtC,EAAS,MAAQ,OAAO,OACtB,CAAA,EACA,EAAS,MACT,EAAK,CAAE,KAAM,EAAK,EAAG,MAAQ,KAAO,EAAK,OAAQ,KAAM,EAAK,EAAG,MAAQ,KAAO,EAAK,MAAM,EAAK,CAAE,IAAK,OAAQ,IAAK,MAAM,CAC5H,EACE,MAAM,EAAK,EAAK,QAAU,EAAK,OAAO,MAStC,GARI,MAAM,QAAQ,CAAE,IAClB,EAAS,MAAQ,EAAG,IACjB,GAAM,CACL,IAAI,EAAK,EACT,OAAO,EAAI,CAAE,KAAM,EAAM,EAAE,MAAQ,KAAO,EAAM,OAAQ,KAAM,EAAM,EAAE,MAAQ,KAAO,EAAM,MAAM,EAAK,CAAA,CACxG,CACN,GAEM,EAAK,MAAO,CACd,MAAM,EAAQ,CAAA,EACV,EAAK,MAAM,MAAQ,OAAM,EAAM,KAAO,EAAK,MAAM,MACjD,EAAK,MAAM,SAAW,OAAM,EAAM,QAAU,EAAK,MAAM,SACvD,OAAO,KAAK,CAAK,EAAE,SACrB,EAAS,MAAQ,OAAO,OAAO,CAAA,EAAI,EAAS,MAAO,CAAK,EAE5D,CACI,EAAK,aAAe,EAAK,YAAY,SACvC,EAAS,YAAc,EAAQ,MAAM,EAAK,YAAY,MAAM,GAE9D,EAAI,cACF,EACA,GACA,EACA,GACA,EACJ,EACE,GAAqB,EAAK,CAAI,CAChC,CACA,SAAS,GAAqB,EAAK,EAAM,CACvC,GAAI,CAAC,GAAO,CAAC,EAAM,OACnB,MAAM,EAAI,EAAI,EACd,EAAE,SAAS,OAAS,CAAC,CAAC,EAAK,OAC3B,GAAkB,EAAK,EAAK,UAAW,EAAK,kBAAkB,EAC1D,EAAK,aAAe,MAAM,QAAQ,EAAK,YAAY,OAAO,GAC5D,EAAK,YAAY,QAAQ,QAAS,GAAM,CACtC,MAAM,EAAS,GAAc,EAAE,IAAI,EAC/B,GAAU,OAAO,EAAI,CAAM,GAAM,YACnC,EAAI,CAAM,EAAE,EAAE,OAAQ,EAAI,CAE9B,CAAC,EAEH,GAAiB,EAAK,EAAK,kBAAkB,EACzC,EAAK,QAAU,EAAK,SAAW,EAAE,OAAO,MAAM,eAChD,EAAI,UAAU,EAAK,MAAM,EAEvB,EAAI,SAAW,OAAO,EAAI,QAAQ,SAAY,YAChD,EAAI,QAAQ,QAAQ,EAAK,SAAW,EAAK,QAAQ,MAAQ,CAAA,CAAE,CAE/D,CACA,MAAM,GAAsB,EACtB,GAAW,OACjB,SAAS,GAAS,EAAK,CACrB,GAAI,OAAO,EAAW,IACpB,OAAO,EAAO,KAAK,EAAK,OAAO,EAAE,SAAS,QAAQ,EAEpD,MAAM,EAAQ,IAAI,YAAW,EAAG,OAAO,CAAG,EAC1C,IAAI,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,GAAO,OAAO,aAAa,EAAM,CAAC,CAAC,EAC1E,OAAO,KAAK,CAAG,CACjB,CACA,SAAS,GAAW,EAAK,CACvB,GAAI,OAAO,EAAW,IACpB,OAAO,EAAO,KAAK,EAAK,QAAQ,EAAE,SAAS,OAAO,EAEpD,MAAM,EAAM,KAAK,CAAG,EACd,EAAQ,IAAI,WAAW,EAAI,MAAM,EACvC,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,EAAM,CAAC,EAAI,EAAI,WAAW,CAAC,EAChE,OAAO,IAAI,YAAW,EAAG,OAAO,CAAK,CACvC,CACA,SAAS,GAAgB,EAAK,CAC5B,OAAO,GAAS,CAAG,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,CAChF,CACA,SAAS,GAAgB,EAAQ,CAC/B,IAAI,EAAM,EAAO,QAAQ,KAAM,GAAG,EAAE,QAAQ,KAAM,GAAG,EACrD,KAAO,EAAI,OAAS,GAAG,GAAO,IAC9B,OAAO,GAAW,CAAG,CACvB,CACA,SAAS,GAAe,EAAK,CAC3B,GAAI,CACF,OAAO,KAAK,MAAM,KAAK,UAAU,CAAG,CAAC,CACvC,MAAY,CACV,MACF,CACF,CACA,MAAM,EAAa,CAKjB,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,OAAS,CAAA,EACd,KAAK,SAAW,EAChB,KAAK,MAAQ,EACf,CAKA,SAAU,CACR,MAAM,EAAO,GAAiB,KAAK,EAAG,KAAK,GAAG,EACxC,EAEJ,CAAE,EAAG,GAAqB,KAAA,CAAI,EAE1B,EAAW,KAAK,mBAAkB,EACxC,OAAI,GAAY,OAAO,KAAK,CAAQ,EAAE,SAAQ,EAAM,QAAU,GACvD,CACT,CAMA,oBAAqB,CACnB,MAAM,EAAM,KAAK,EAAE,OACb,EAAY,EAAI,OAAS,EAAI,MAAM,cAAgB,EAAI,MAAM,aAAa,kBAAoB,CAAC,QAAS,QAAS,QAAS,QAAS,UAAU,EAC7I,EAAQ,CAAA,EACd,OAAA,EAAU,QAAS,GAAS,CAC1B,GAAI,EAAI,CAAI,IAAM,OAAQ,CACxB,MAAM,EAAW,GAAe,EAAI,CAAI,CAAC,EACrC,IAAa,SAAQ,EAAM,CAAI,EAAI,EACzC,CACF,CAAC,EACM,CACT,CASA,OAAO,EAAO,CACZ,MAAM,EAAI,GAAS,KAAK,QAAO,EAC/B,OAAO,GAAgB,KAAK,UAAU,CAAC,CAAC,CAC1C,CAOA,OAAO,EAAK,CACV,OAAO,GAAa,OAAO,CAAG,CAChC,CAMA,OAAQ,CACN,GAAI,CAAC,EAAY,UAAS,EAAI,MAAO,GACrC,MAAM,EAAU,KAAK,OAAO,KAAK,QAAO,CAAE,EACpC,EAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EACxC,OAAA,EAAI,KAAO,GAAG,EAAQ,IAAI,CAAO,GAC1B,EAAI,SAAQ,CACrB,CAgBA,MAAM,EAAe,EAAO,CAAA,EAAI,CAC9B,MAAM,EAAQ,OAAO,GAAkB,SAAW,GAAa,OAAO,CAAa,EAAI,EACvF,GAAI,CAAC,GAAS,CAAC,EAAM,KAAM,OAC3B,KAAK,MAAQ,GACb,GAAe,KAAK,EAAG,KAAK,GAAG,EAC/B,MAAM,EAAU,EAAK,UAAY,OAAS,EAAK,QAAU,GACnD,EAAW,EAAQ,OACvB,EAAM,QAAU,EAAQ,MAAM,EAAM,OAAO,EAAI,CAAA,EAC/C,EAAK,cAAgB,CAAA,CAC3B,EACU,EAAe,OAAO,KAAK,CAAQ,EAAE,OAAS,EAAW,QAC/C,KAAK,EAAE,OAAO,MAAM,MAAQ,KAAK,IAAI,gBAAe,EAAK,CAAC,KAAK,GAAG,GAC1E,QAAS,GAAU,CACzB,GAAe,EAAO,EAAM,KAAM,CAAE,QAAA,EAAS,aAAA,CAAY,CAAE,CAC7D,CAAC,CACH,CAMA,KAAK,EAAO,CACV,MAAM,EAAK,eAAe,EAAE,KAAK,QAAQ,GACzC,YAAK,OAAO,KAAK,CAAE,GAAA,EAAI,KAAM,GAAS,EAAI,MAAO,KAAK,QAAO,CAAE,CAAE,EACjE,KAAK,MAAQ,GACb,GAAe,KAAK,EAAG,KAAK,GAAG,EACxB,CACT,CAKA,MAAO,CACL,OAAO,KAAK,OAAO,IAAK,IAAO,CAAE,GAAI,EAAE,GAAI,KAAM,EAAE,KAAM,MAAO,EAAE,KAAK,EAAG,CAC5E,CAKA,OAAO,EAAI,CACT,MAAM,EAAI,KAAK,OAAO,UAAW,GAAM,EAAE,KAAO,CAAE,EAC9C,EAAI,IAAI,KAAK,OAAO,OAAO,EAAG,CAAC,CACrC,CAEA,UAAW,CACT,KAAK,OAAS,CAAA,EACd,KAAK,SAAW,CAClB,CAMA,OAAO,OAAO,EAAK,CACjB,GAAI,OAAO,GAAQ,UAAY,CAAC,EAAK,OAAO,KAC5C,GAAI,CACF,MAAM,EAAQ,KAAK,MAAM,GAAgB,CAAG,CAAC,EAC7C,MAAI,CAAC,GAAS,OAAO,GAAU,SAAiB,KAC5C,EAAM,IAAM,IACd,QAAQ,KACN,+CAA+C,EAAM,CAAC,cAAc,EAAmB,IACjG,EACe,MAEF,CACT,OAAS,EAAG,CACV,eAAQ,KAAK,kDAAmD,CAAC,EAC1D,IACT,CACF,CAOA,OAAO,QAAQ,EAAM,CACnB,GAAI,CACF,MAAM,EAAS,IAAS,EAAY,UAAS,EAAK,OAAO,SAAS,KAAO,IACzE,GAAI,CAAC,EAAQ,OAAO,KAEpB,MAAM,EADM,IAAI,IAAI,CAAM,EACT,KAAK,QAAQ,KAAM,EAAE,EACtC,GAAI,CAAC,EAAM,OAAO,KAClB,MAAM,EAAO,EAAK,MAAM,GAAG,EAAE,IAAK,GAAM,EAAE,MAAM,GAAG,CAAC,EAAE,KAAM,GAAM,EAAE,CAAC,IAAM,EAAQ,EACnF,MAAI,CAAC,GAAQ,EAAK,CAAC,GAAK,KAAa,KAC9B,GAAa,OAAO,mBAAmB,EAAK,CAAC,CAAC,CAAC,CACxD,MAAY,CACV,OAAO,IACT,CACF,CACF,CACA,GAAW,iBAAiB,CAAE,aAAc,EAAY,CAAE,EAC1D,GAAW,aAAe,CAExB,OAAS,IACP,GAA4B,EACrB,GAAa,OAAO,CAAG,GAGhC,QAAU,IACR,GAA4B,EACrB,GAAa,QAAQ,CAAI,EAEpC,EACA,MAAM,EAAW,CAKf,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,OAAS,CAAA,EACd,KAAK,UAAY,KACjB,KAAK,aAAe,GACpB,KAAK,SAAW,GAChB,KAAK,sBAAwB,GAC7B,KAAK,MAAQ,EACf,CAWA,KAAK,EAAO,CAAA,EAAI,CACd,IAAI,EAEJ,GADA,KAAK,OAAM,EACP,CAAC,EAAY,UAAS,EAAI,MAAO,GACrC,MAAM,EAAM,KAAK,IAAI,IAAM,KAAK,IAAI,GAAG,cACvC,GAAI,CAAC,GAAO,OAAO,qBAAyB,IAAa,MAAO,GAChE,IAAI,EAAO,KAKX,GAJI,EAAK,WACP,EAAO,OAAO,EAAK,UAAa,SAAW,EAAI,cAAc,EAAK,QAAQ,EAAI,EAAK,UAErF,KAAK,OAAS,KAAK,cAAc,EAAK,EAAM,EAAK,KAAK,EAClD,CAAC,KAAK,OAAO,OAAQ,MAAO,GAChC,KAAK,SAAW,EAAK,UAAY,GACjC,MAAM,EAAS,KAAK,IAAI,KAAK,KAAK,EAAK,EAAK,SAAW,KAAO,EAAK,GAAK,CAAC,EAAG,CAAC,EACvE,EAAM,EAAE,EAAS,KAAK,QAAQ,CAAC,EAC/B,EAAS,EAAE,IAAM,EAAS,KAAK,QAAQ,CAAC,EAC9C,YAAK,UAAY,IAAI,qBAClB,GAAY,KAAK,aAAa,CAAO,EACtC,CAAE,KAAA,EAAM,WAAY,IAAI,CAAG,UAAU,CAAM,IAAK,UAAW,CAAC,CAClE,EACI,KAAK,OAAO,QAAS,GAAM,CACzB,IAAI,EACJ,OAAQ,EAAM,KAAK,YAAc,KAAO,OAAS,EAAI,QAAQ,EAAE,EAAE,CACnE,CAAC,EACD,KAAK,MAAQ,GACb,GAAe,KAAK,EAAG,KAAK,GAAG,EACxB,KAAK,OAAO,MACrB,CAUA,cAAc,EAAK,EAAM,EAAU,CACjC,MAAM,EAAQ,CAAA,EACd,OAAI,MAAM,QAAQ,CAAQ,GACxB,EAAS,QAAQ,CAAC,EAAG,IAAM,CACzB,IAAI,EAAI,EACR,GAAI,CAAC,EAAG,OACR,MAAM,EAAK,EAAE,IAAM,OAAO,EAAE,IAAO,SAAW,EAAE,GAAK,EAAE,SAAW,EAAI,cAAc,EAAE,QAAQ,EAAI,KAClG,GAAI,CAAC,EAAI,CACP,QAAQ,KACN,+BAA+B,CAAC,sCAC5C,EACU,MACF,CACA,EAAM,KAAK,CACT,GAAA,EACA,KAAM,GAAM,EAAK,EAAE,MAAQ,KAAO,EAAK,EAAG,aAAa,gBAAgB,IAAM,KAAO,EAAK,OAAO,CAAC,EACjG,KAAM,EAAE,KACR,QAAS,EAAE,QACX,SAAU,EAAE,SACZ,QAAS,OAAO,EAAE,SAAY,WAAa,EAAE,QAAU,MACjE,CAAS,CACH,CAAC,EACM,KAEK,GAAQ,GAChB,iBAAiB,kBAAkB,EAAE,QAAQ,CAAC,EAAI,IAAM,CAC5D,EAAM,KAAK,CACT,GAAA,EACA,IAAK,EAAG,aAAa,gBAAgB,GAAK,OAAO,CAAC,EAClD,KAAM,EAAG,aAAa,gBAAgB,GAAK,OAC3C,QAAS,OACT,SAAU,EAAG,aAAa,oBAAoB,GAAK,OACnD,QAAS,MACjB,CAAO,CACH,CAAC,EACM,EACT,CAKA,aAAa,EAAS,CACpB,EAAQ,QAAS,GAAU,CACzB,MAAM,EAAM,KAAK,OAAO,UAAW,GAAM,EAAE,KAAO,EAAM,MAAM,EAC1D,EAAM,IACN,EAAM,eACR,KAAK,UAAU,CAAG,EACT,IAAQ,KAAK,cAAgB,EAAM,YACxC,EAAM,mBAAmB,KAAO,EAAM,WAAW,QAAU,EAAM,GACnE,KAAK,UAAU,EAAM,CAAC,EAG5B,CAAC,CACH,CASA,UAAU,EAAK,EAAO,CAAA,EAAI,CACxB,IAAI,EAAI,EACR,GAAI,IAAQ,KAAK,aAAc,OAC/B,MAAM,EAAO,KAAK,OAAO,CAAG,EAC5B,GAAI,CAAC,EAAM,OACX,MAAM,EAAY,EAAM,KAAK,aAAe,OAAS,KACrD,KAAK,aAAe,EACpB,MAAM,GAAW,EAAK,UAAY,OAAS,EAAK,QAAU,KAAK,WAAa,CAAC,GAAoB,EACjG,GAAI,EAAK,MAAQ,MAAQ,EAAK,QAC5B,GAAI,KAAK,IAAI,aAAc,CACzB,MAAM,GAAK,EAAK,EAAK,OAAS,KAAO,EAAK,CAAA,EACpC,EAAQ,OAAO,GAAM,UAAY,EAAE,KAAO,EAAI,CAAE,KAAM,KAAK,eAAe,CAAC,CAAC,EAClF,KAAK,IAAI,aAAa,MAAM,EAAO,CACjC,QAAA,EACA,aAAc,EAAK,OAC7B,CAAS,CACH,MAAY,KAAK,wBACf,KAAK,sBAAwB,GAC7B,QAAQ,KACN,+KACV,GAGI,MAAM,EAAO,CAAE,MAAO,EAAK,IAAK,EAAK,IAAK,GAAI,EAAK,GAAI,UAAA,CAAS,EAC5D,EAAK,SAAS,EAAK,QAAQ,KAAK,IAAK,CAAI,EACzC,EAAK,UAAU,KAAK,UAAU,EAAK,QAAQ,EAC3C,OAAO,KAAK,EAAE,OAAO,MAAM,OAAO,YAAe,YACnD,KAAK,EAAE,OAAO,MAAM,OAAO,WAAW,KAAK,IAAK,CAAI,GAErD,EAAK,KAAK,IAAI,SAAW,MAAgB,EAAG,UAAU,aAAc,CAAC,KAAK,IAAK,CAAI,CAAC,CACvF,CAaA,eAAe,EAAM,CACnB,MAAM,EAAW,EAAK,aAAe,EAAK,YAAY,QAAU,CAAA,EAChE,OAAO,EAAc,EAAe,CAAA,EAAI,CAAI,EAAG,CAC7C,YAAa,CACX,OAAQ,EAAe,CACrB,OAAQ,CAAA,EACR,MAAO,CAAA,EACP,MAAO,CAAA,EACP,MAAO,CAAA,EACP,OAAQ,CAAA,CAClB,EAAW,CAAQ,EACX,QAAS,EAAK,aAAe,EAAK,YAAY,SAAW,CAAA,CACjE,CACA,CAAK,CACH,CAOA,KAAK,EAAY,EAAO,CAAA,EAAI,CAC1B,MAAM,EAAM,OAAO,GAAe,SAAW,EAAa,KAAK,OAAO,UAAW,GAAM,EAAE,MAAQ,CAAU,EACvG,GAAO,GAAK,EAAM,KAAK,OAAO,QAAQ,KAAK,UAAU,EAAK,CAAI,CACpE,CAIA,SAAU,CACR,GAAI,KAAK,aAAe,EAAG,OAAO,KAClC,MAAM,EAAO,KAAK,OAAO,KAAK,YAAY,EAC1C,MAAO,CAAE,MAAO,KAAK,aAAc,IAAK,EAAO,EAAK,IAAM,IAAI,CAChE,CAEA,QAAS,CACH,KAAK,YACP,KAAK,UAAU,WAAU,EACzB,KAAK,UAAY,MAEnB,KAAK,OAAS,CAAA,EACd,KAAK,aAAe,GACpB,KAAK,MAAQ,GACb,GAAe,KAAK,EAAG,KAAK,GAAG,CACjC,CAEA,UAAW,CACT,KAAK,OAAM,CACb,CAQA,UAAU,EAAS,CACjB,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAE,OAAO,MAAM,cAAc,cAAc,QAAS,OACzD,MAAM,EAAS,EAAE,IAAI,OACrB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAS,EAAO,cAAc,uBAAuB,EACtD,IACL,EAAO,YAAc,GACrB,WAAW,IAAM,CACf,EAAO,YAAc,CACvB,EAAG,CAAC,EACN,CACF,CACA,GAAW,iBAAiB,CAAE,WAAY,EAAU,CAAE,EACtD,SAAS,GAAiB,EAAM,CAC9B,GAAI,CAAC,EAAM,MAAO,GAClB,MAAM,EAAM,EAAK,QACjB,OAAO,IAAQ,SAAW,IAAQ,YAAc,IAAQ,UAAY,EAAK,oBAAsB,EACjG,CACA,MAAM,EAAQ,CAKZ,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,MAAQ,CAAA,EACb,KAAK,QAAU,GACf,KAAK,SAAW,GAChB,KAAK,UAAY,GACjB,KAAK,SAAW,EAChB,KAAK,eAAiB,KACtB,KAAK,aAAe,KACpB,KAAK,cAAgB,OACrB,KAAK,eAAiB,KACtB,KAAK,eAAiB,KACtB,KAAK,SAAW,GAChB,KAAK,OAAS,GACd,KAAK,YAAW,EAChB,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,KAAI,CACX,CAOA,aAAc,CACZ,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,OAAO,OAAS,EAAE,OAAO,MAAM,SAAW,CAAA,EACxD,KAAK,QAAU,CAAC,CAAC,EAAI,QACrB,KAAK,SAAW,EAAI,SAAW,EAAI,EAAI,SAAW,IAClD,KAAK,WAAa,EAAI,YAAc,KAAO,EAAI,WAAa,IAC5D,KAAK,SAAW,EAAI,WAAa,EACnC,CAEA,aAAc,CACZ,KAAK,YAAW,EACZ,KAAK,SAAW,KAAK,SAAU,KAAK,cAAa,EAChD,KAAK,gBAAe,CAC3B,CACA,MAAO,CACD,KAAK,SACT,KAAK,OAAS,GACd,KAAK,IAAI,iBAAiB,UAAW,KAAK,UAAU,EACpD,KAAK,IAAI,iBAAiB,UAAW,KAAK,UAAU,EACpD,KAAK,IAAI,iBAAiB,WAAY,KAAK,UAAU,EACrD,KAAK,IAAI,iBAAiB,qBAAsB,KAAK,YAAY,EAC7D,KAAK,SAAW,KAAK,UAAU,KAAK,cAAa,EACvD,CAUA,eAAgB,CACd,GAAI,KAAK,eAAgB,OACzB,MAAM,EAEJ,KAAK,IAAI,GAEL,EAAM,GAAM,EAAG,cACjB,CAAC,EAAY,UAAS,GAAM,CAAC,IACjC,EAAI,iBAAiB,UAAW,KAAK,UAAU,EAC/C,EAAI,iBAAiB,cAAe,KAAK,eAAgB,EAAI,EAC7D,EAAI,iBAAiB,YAAa,KAAK,eAAgB,EAAI,EAC3D,KAAK,eAAiB,EACtB,KAAK,eAAiB,EACxB,CACA,iBAAkB,CACZ,KAAK,iBACP,KAAK,eAAe,oBAAoB,UAAW,KAAK,UAAU,EAClE,KAAK,eAAiB,MAEpB,KAAK,iBACP,KAAK,eAAe,oBAAoB,cAAe,KAAK,eAAgB,EAAI,EAChF,KAAK,eAAe,oBAAoB,YAAa,KAAK,eAAgB,EAAI,EAC9E,KAAK,eAAiB,MAExB,KAAK,SAAW,EAClB,CAEA,YAAa,CACX,KAAK,YAAW,EACX,KAAK,SACN,KAAK,MAAM,SAAW,GAAG,KAAK,QAAQ,UAAW,EAAI,CAC3D,CACA,YAAa,CAEX,GADA,KAAK,YAAW,EACZ,EAAC,KAAK,QACV,IAAI,KAAK,SAAU,CACjB,KAAK,eAAc,EACnB,MACF,CACA,KAAK,UAAU,QAAQ,EACzB,CACA,cAAe,CACT,CAAC,KAAK,SAAW,KAAK,UAC1B,KAAK,UAAU,WAAW,CAC5B,CAQA,eAAe,EAAG,CAChB,MAAM,EAEJ,KAAK,IAAI,GAEX,KAAK,SAAW,CAAC,EAAE,GAAM,EAAE,QAAU,EAAG,SAAS,EAAE,MAAM,EAC3D,CAIA,WAAW,EAAG,CACZ,GAAI,EAAE,EAAE,SAAW,EAAE,SAAU,OAC/B,MAAM,GAAO,EAAE,KAAO,IAAI,YAAW,EACrC,GAAI,IAAQ,KAAO,IAAQ,IAAK,OAChC,MAAM,EAEJ,KAAK,IAAI,GAEX,GAAI,CAAC,EAAI,OACT,MAAM,EAAM,EAAG,cACT,EAAS,GAAO,EAAI,cAE1B,GADI,GAAiB,CAAM,GACvB,EAAE,EAAG,SAAS,CAAM,GAAK,KAAK,UAAW,OAC7C,MAAM,EAAO,IAAQ,KAAO,EAAE,SAC9B,EAAE,eAAc,EACZ,EAAM,KAAK,KAAI,EACd,KAAK,KAAI,CAChB,CAKA,UAAU,EAAO,CACX,KAAK,UAAY,KAAK,WAAa,CAAC,KAAK,UAC7C,KAAK,cAAgB,EACjB,KAAK,WAAa,GAAK,EAAY,UAAS,GAC9C,aAAa,KAAK,cAAc,EAChC,KAAK,eAAiB,WACpB,IAAM,KAAK,QAAQ,KAAK,aAAa,EACrC,KAAK,UACb,GAEM,KAAK,QAAQ,CAAK,EAEtB,CAKA,QAAQ,EAAO,EAAO,CAGpB,GAFA,aAAa,KAAK,cAAc,EAChC,KAAK,eAAiB,KAClB,CAAC,IAAU,KAAK,UAAY,KAAK,WAAY,OACjD,MAAM,EAAK,KAAK,SAAS,CAAK,EACxB,EAAU,KAAK,MAAM,KAAK,OAAO,EACvC,GAAI,EAAA,GAAW,EAAQ,MAAQ,EAAG,KAMlC,KALI,KAAK,QAAU,KAAK,MAAM,OAAS,GACrC,KAAK,MAAM,OAAO,KAAK,QAAU,CAAC,EAEpC,KAAK,MAAM,KAAK,CAAE,EAClB,KAAK,QAAU,KAAK,MAAM,OAAS,EAC5B,KAAK,MAAM,OAAS,KAAK,UAC9B,KAAK,MAAM,MAAK,EAChB,KAAK,UAEP,KAAK,YAAW,EAClB,CAIA,SAAS,EAAO,CACd,MAAM,EAAO,GAAiB,KAAK,EAAG,KAAK,GAAG,EACxC,CAAE,OAAA,EAAQ,UAAA,CAAS,EAAK,KAAK,gBAAe,EAClD,MAAO,CACL,GAAI,QAAQ,EAAE,KAAK,QAAQ,GAC3B,KAAA,EACA,OAAA,EACA,UAAA,EACA,MAAO,GAAS,SAChB,GAAI,EAAY,UAAS,EAAK,KAAK,IAAG,EAAK,EAC3C,OAAQ,QAER,IAAK,KAAK,WAAW,EAAM,CAAM,CACvC,CACE,CAWA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACT,EAAO,KAAK,MAAM,KAAK,OAAO,EACpC,IAAI,EAAY,KAChB,GAAI,CACF,EAAY,KAAK,UAAU,EAAE,OAAO,MAAM,CAC5C,MAAY,CACV,EAAY,IACd,CACA,IAAI,EACJ,GAAI,GAAQ,IAAc,MAAQ,EAAK,YAAc,EAAW,CAC9D,MAAM,EAAK,EAAE,OAAQ,CAAE,OAAQ,CAAO,EAAK,EAAI,EAAO,GAAU,EAAI,CAAC,QAAQ,CAAC,EAC9E,EAAS,EAAQ,MAAM,CAAI,EAC3B,EAAO,OAAS,EAAK,OAAO,MAC9B,MACE,EAAS,EAAQ,MAAM,EAAE,MAAM,EAEjC,MAAO,CAAE,OAAQ,EAAQ,UAAA,CAAS,CACpC,CASA,WAAW,EAAM,EAAQ,CACvB,GAAI,CACF,OAAO,KAAK,UAAU,CAAI,EAAI,IAAM,KAAK,UAAU,CAAM,CAC3D,MAAY,CACV,MAAO,SAAS,KAAK,QAAQ,EAC/B,CACF,CAMA,SAAS,EAAI,EAAS,CACpB,GAAI,CAAC,EAAI,OACT,KAAK,SAAW,GAChB,IAAI,EACJ,GAAI,CACF,KAAK,IAAI,iBAAgB,EACzB,EAAI,KAAK,IAAI,cAAc,EAAQ,MAAM,EAAG,MAAM,EAAG,GAAO,EAAS,GAAO,EAAK,CACnF,OAAS,EAAG,CACV,WAAK,SAAW,GACV,CACR,CACA,QAAQ,QAAQ,CAAC,EAAE,KAAK,IAAM,CAC5B,GAAI,KAAK,EAAE,QAAQ,YAAa,CAC9B,KAAK,SAAW,GAChB,MACF,CACA,GAAqB,KAAK,IAAK,EAAG,IAAI,EACtC,KAAK,eAAc,EACnB,KAAK,YAAW,CAClB,CAAC,EAAE,MAAM,IAAM,CACb,KAAK,SAAW,EAClB,CAAC,CACH,CAKA,gBAAiB,CACf,GAAI,CAAC,EAAY,UAAS,EAAI,CAC5B,KAAK,SAAW,GAChB,MACF,CACA,aAAa,KAAK,YAAY,EAC9B,KAAK,aAAe,WAAW,IAAM,CACnC,KAAK,SAAW,EAClB,EAAG,CAAC,CACN,CASA,SAAS,EAAO,CACV,CAAC,KAAK,SAAW,KAAK,UAC1B,KAAK,QAAQ,GAAS,QAAQ,CAChC,CAIA,KAAK,EAAU,GAAM,CACd,KAAK,QAAO,IACjB,KAAK,UACL,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,EAAG,CAAO,EACjD,CAIA,KAAK,EAAU,GAAM,CACd,KAAK,QAAO,IACjB,KAAK,UACL,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,EAAG,CAAO,EACjD,CACA,SAAU,CACR,OAAO,KAAK,QAAU,CACxB,CACA,SAAU,CACR,OAAO,KAAK,QAAU,IAAM,KAAK,QAAU,KAAK,MAAM,OAAS,CACjE,CAKA,KAAK,EAAI,EAAU,GAAM,CACvB,MAAM,EAAM,KAAK,MAAM,UAAW,GAAM,EAAE,KAAO,CAAE,EAC/C,IAAQ,IAAM,IAAQ,KAAK,UAC/B,KAAK,QAAU,EACf,KAAK,SAAS,KAAK,MAAM,CAAG,EAAG,CAAO,EACxC,CAEA,OAAQ,CACN,aAAa,KAAK,cAAc,EAChC,KAAK,eAAiB,KACtB,MAAM,EAAU,KAAK,MAAM,KAAK,OAAO,EACvC,KAAK,MAAQ,EAAU,CAAC,CAAO,EAAI,CAAA,EACnC,KAAK,QAAU,KAAK,MAAM,OAAS,EACnC,KAAK,YAAW,CAClB,CASA,YAAY,EAAI,EAAO,CAAA,EAAI,CACzB,GAAI,OAAO,GAAO,WAAY,OAAO,QAAQ,QAAO,EACpD,MAAM,EAAc,KAAK,UACzB,YAAK,UAAY,GACV,QAAQ,QAAO,EAAG,KAAK,IAAM,EAAE,CAAE,EAAE,QAAQ,IAAM,CACtD,KAAK,UAAY,EACZ,GAAa,KAAK,QAAQ,EAAK,OAAS,cAAe,EAAI,CAClE,CAAC,CACH,CAIA,SAAU,CACR,OAAO,KAAK,MAAM,IAAK,IAAO,CAAE,GAAI,EAAE,GAAI,MAAO,EAAE,MAAO,GAAI,EAAE,EAAE,EAAG,CACvE,CAEA,OAAQ,CACN,MAAO,CACL,QAAS,KAAK,QAAO,EACrB,QAAS,KAAK,QAAO,EACrB,MAAO,KAAK,QACZ,OAAQ,KAAK,MAAM,MACzB,CACE,CACA,aAAc,CACZ,KAAK,IAAI,OAAO,UAAU,gBAAiB,CAAC,KAAK,IAAK,KAAK,MAAK,CAAE,CAAC,CACrE,CAEA,UAAW,CACT,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAChC,aAAa,KAAK,cAAc,EAChC,aAAa,KAAK,YAAY,EAC9B,KAAK,eAAiB,KACtB,KAAK,aAAe,KACpB,KAAK,gBAAe,EAChB,KAAK,UACN,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,UAAW,KAAK,UAAU,GACnG,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,UAAW,KAAK,UAAU,GACnG,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,WAAY,KAAK,UAAU,GACpG,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,qBAAsB,KAAK,YAAY,GAEnH,KAAK,MAAQ,CAAA,EACb,KAAK,QAAU,GACf,KAAK,OAAS,EAChB,CACF,CACA,GAAW,iBAAiB,CAAE,QAAS,EAAO,CAAE,EAChD,MAAM,GAAoB,EACpB,GAAuB,CAC3B,gBACA,eACA,aACA,eACA,eACA,aACA,aACA,kBACA,iBACA,QACA,qBACA,qBACA,qBACA,mBACA,mBACA,UACA,aACF,EACA,SAAS,GAAwB,EAAK,CACpC,MAAM,EAAM,CAAA,EACZ,OAAA,GAAqB,QAAS,GAAM,CAC9B,OAAO,EAAI,CAAC,GAAM,aAAY,EAAI,CAAC,EAAI,EAAI,CAAC,EAAE,KAAK,CAAG,EAC5D,CAAC,EACM,OAAO,OAAO,CAAG,CAC1B,CACA,SAAS,GAAgB,EAAG,EAAU,CACpC,MAAM,EAAO,IACP,GAAI,EAAE,IAAI,CAAE,EACT,GAEH,EAAS,CACb,IAAI,MAAO,CACT,OAAO,EAAE,IACX,EAEA,KAAK,EAAO,CAAA,EAAI,CACd,KAAM,CACJ,EAAA,EAAI,GACJ,OAAA,EAAS,OACT,MAAA,EAAQ,EACR,KAAA,EAAO,OACP,QAAA,EAAU,EACV,KAAA,EAAO,EACP,UAAA,EAAY,EACpB,EAAU,EACJ,OAAO,EACL,EAAS,SAAS,CAChB,EAAA,EACA,OAAA,EACA,YAAa,EACb,KAAA,EACA,YAAa,IAAS,OAAS,EAAI,EACnC,cAAe,EACf,gBAAiB,EACjB,QAAS,CACnB,CAAS,CACT,CACI,EAEA,KAAK,EAAO,CAAA,EAAI,CACd,KAAM,CAAE,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,OAAA,EAAS,OAAQ,MAAA,EAAQ,EAAG,KAAA,EAAO,CAAC,EAAK,EACjE,OAAO,EAAI,EAAS,SAAS,EAAI,EAAI,EAAI,EAAI,EAAQ,EAAM,CAAK,CAAC,CACnE,EAEA,KAAK,EAAO,CAAA,EAAI,CACd,KAAM,CACJ,EAAA,EAAI,EACJ,EAAA,EAAI,EACJ,EAAA,EAAI,EACJ,EAAA,EAAI,EACJ,EAAA,EAAI,EACJ,KAAA,EAAO,OACP,OAAA,EAAS,KACT,QAAA,EAAU,CAClB,EAAU,EACJ,OAAO,EACL,EAAS,SACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAAU,KAAO,EAAI,KACrB,CACV,CACA,CACI,EAEA,OAAO,EAAO,CAAA,EAAI,CAChB,KAAM,CAAE,GAAA,EAAK,EAAG,GAAA,EAAK,EAAG,EAAI,EAAG,KAAA,EAAO,OAAQ,OAAA,EAAS,IAAI,EAAK,EAChE,OAAO,EACL,EAAS,WAAW,EAAG,CAAE,GAAA,EAAI,GAAA,EAAI,KAAA,EAAM,OAAQ,GAAU,MAAM,CAAE,CACzE,CACI,EAEA,KAAK,EAAO,CAAA,EAAI,CACd,KAAM,CACJ,EAAA,EAAI,EACJ,EAAA,EAAI,EACJ,KAAA,EAAO,GACP,MAAA,EACA,KAAA,EACA,OAAA,EAAS,QACT,OAAA,CACR,EAAU,EACJ,OAAO,EACL,EAAS,SAAS,CAChB,EAAA,EACA,EAAA,EACA,KAAA,EACA,WAAY,EACZ,SAAU,EACV,UAAW,EACX,WAAY,CACtB,CAAS,CACT,CACI,EACA,OAAQ,CACN,MAAM,EAAO,EAAE,KACf,KAAO,EAAK,YAAY,EAAK,YAAY,EAAK,UAAU,EACxD,OAAO,CACT,CACJ,EACE,OAAO,CACT,CACA,SAAS,GAAe,EAAM,EAAQ,CACpC,MAAM,EAAM,EAAK,IACX,EAAI,EAAK,EACT,EAAM,CACV,KAAM,EAAO,IAAI,KACjB,QAAS,GAIT,IAAI,SAAU,CACZ,OAAO,EAAO,OAChB,EAMA,GAAG,EAAM,EAAI,CACX,MAAM,EAAI,EAAO,SACjB,OAAK,EAAE,IAAI,CAAI,GAAG,EAAE,IAAI,EAAM,CAAA,CAAE,EAChC,EAAE,IAAI,CAAI,EAAE,KAAK,CAAE,EACZ,CACT,EAKA,IAAI,EAAM,EAAI,CACZ,MAAM,EAAI,EAAO,SAAS,IAAI,CAAI,EAClC,GAAI,EAAG,CACL,MAAM,EAAI,EAAE,QAAQ,CAAE,EAClB,EAAI,IAAI,EAAE,OAAO,EAAG,CAAC,CAC3B,CACA,OAAO,CACT,EAGA,MAAO,CAAA,EAMP,MAAM,EAAM,CACV,OAAO,EAAK,OAAO,EAAO,IAAI,KAAM,GAAQ,CAAA,CAAE,CAChD,EAEA,IAAI,QAAS,CACX,OAAO,EAAK,cACd,EAIA,IAAI,MAAO,CACT,OAAO,EAAK,YAAc,EAAK,UAAY,EAAK,cAAa,EAC/D,EACA,MAAO,OAAO,OAAO,CACnB,IAAI,MAAO,CACT,OAAO,EAAE,OAAO,MAAM,IACxB,EACA,IAAI,WAAY,CACd,OAAO,EAAE,OAAO,MAAM,SACxB,EAEA,YAAY,EAAG,CACb,OAAO,EAAE,QAAQ,OAAO,CAAC,CAC3B,EAEA,MAAM,EAAO,CACX,OAAO,EAAK,OAAO,CAAK,CAC1B,CACN,CAAK,EAED,MAAO,GAAwB,CAAG,EAWlC,KAAK,EAAO,EAAQ,CAClB,EAAI,OAAO,UAAU,UAAU,EAAO,IAAI,IAAI,IAAI,CAAK,GAAI,CAAC,EAAK,CAAM,CAAC,CAC1E,EAEA,IAAI,IAAK,CACP,OAAO,EAAE,IAAI,MACf,CACJ,EACE,OAAO,OAAO,OAAO,CAAG,CAC1B,CACA,MAAM,EAAU,CAKd,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,OAAS,CAAA,EACd,KAAK,QAA0B,IAAI,IACnC,KAAK,eAAiB,KACtB,KAAK,gBAAkB,KACvB,KAAK,UAAY,KACjB,KAAK,cAAgB,GACrB,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,MAAK,CACZ,CACA,OAAQ,EACO,KAAK,EAAE,OAAO,SAAW,CAAA,GACjC,IAAI,CAAC,EAAO,KAAO,CACtB,MAAA,EACA,MAAO,EAAM,OAAS,KAAO,EAAM,MAAQ,CACjD,EAAM,EAAE,KAAK,CAAC,EAAG,IAAM,EAAE,MAAQ,EAAE,KAAK,EAAE,QAAS,GAAM,KAAK,UAAU,EAAE,KAAK,CAAC,EAC5E,KAAK,gBAAkB,KAAK,EAAE,OAAO,QACrC,KAAK,aAAY,CACnB,CACA,cAAe,CACT,KAAK,gBACT,KAAK,IAAI,iBAAiB,UAAW,KAAK,UAAU,EACpD,KAAK,cAAgB,GACvB,CACA,YAAa,CACX,KAAK,SAAS,cAAe,CAAE,KAAM,QAAQ,CAAE,CACjD,CAIA,UAAU,EAAO,CACf,MAAM,EAAM,GAAU,EAAM,IAAI,EAChC,GAAI,CAAC,EAAK,CACR,QAAQ,MAAM,wBAAwB,EAAM,IAAI,sBAAsB,EACtE,MACF,CACA,MAAM,EAAI,EAAI,YAAc,KAAO,EAAI,WAAa,EACpD,GAAI,KAAK,MAAM,CAAC,IAAM,GAAmB,CACvC,QAAQ,MACN,wBAAwB,EAAI,IAAI,wBAAwB,CAAC,cAAc,EAAiB,YAChG,EACM,MACF,CACA,MAAM,EAAS,CACb,IAAA,EACA,QAAS,OAAO,OAAO,EAAe,CAAA,EAAI,EAAM,SAAW,CAAA,CAAE,CAAC,EAC9D,SAA0B,IAAI,IAC9B,SAAU,GACV,SAAU,EACV,IAAK,IACX,EACI,EAAO,IAAM,GAAe,KAAM,CAAM,EACxC,KAAK,OAAO,KAAK,CAAM,EACvB,KAAK,OAAO,EAAQ,QAAS,IAAM,EAAI,MAAM,EAAO,GAAG,CAAC,CAC1D,CAKA,SAAS,EAAM,EAAO,CAMpB,GALI,IAAS,SACX,KAAK,WAAU,EACf,KAAK,aAAY,GAEnB,KAAK,UAAY,KACb,CAAC,KAAK,OAAO,OAAQ,OACrB,IAAS,aACX,KAAK,eAAiB,KACb,GAAS,aAAc,GAChC,KAAK,WAAW,EAAM,QAAQ,EAEhC,MAAM,EAAO,GAAS,EAAM,MAAQ,OACpC,IAAI,EAAO,KACX,UAAW,KAAU,KAAK,OAAQ,CAChC,GAAI,EAAO,SAAU,SACrB,MAAM,EAAM,EAAO,SAAS,IAAI,CAAI,EACpC,GAAI,CAAC,GAAO,CAAC,EAAI,OAAQ,SACrB,IAAS,OACX,EAAO,KAAK,cAAa,EACzB,KAAK,UAAY,GAEnB,MAAM,EAAU,CACd,IAAK,EAAO,IACZ,OAAQ,KAAK,eACb,KAAA,EACA,KAAA,EACA,KAAA,CACR,EACM,UAAW,KAAM,EAAI,MAAK,EACxB,KAAK,OAAO,EAAQ,EAAM,IAAM,EAAG,CAAO,CAAC,CAE/C,CACF,CAMA,OAAO,EAAQ,EAAO,EAAI,CACxB,GAAI,CAAA,EAAO,SACX,GAAI,CACF,EAAE,CACJ,OAAS,EAAG,CACV,QAAQ,MACN,wBAAwB,EAAO,IAAI,IAAI,eAAe,CAAK,KAC3D,CACR,EACM,EAAO,UAAY,EAAO,UAAY,GAAK,EACvC,EAAO,UAAY,IACrB,EAAO,SAAW,GAClB,QAAQ,MACN,wBAAwB,EAAO,IAAI,IAAI,mCACjD,EAEI,CACF,CAOA,WAAW,EAAU,CACnB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAI,EAAE,OACZ,GAAI,CAAC,GAAY,CAAC,EAAG,WAAY,CAC/B,KAAK,eAAiB,KACtB,MACF,CACA,MAAM,EAAS,EAAS,OAClB,EAAS,EAAS,QAAU,CAAA,EAC5B,EAAM,GAAS,EAAO,CAAI,GAAK,KAAO,EAAO,CAAI,EAAI,EAAO,CAAC,EAC7D,EAAQ,GAAS,EAAG,QAAQ,CAAI,GAAK,KAAO,EAAG,QAAQ,CAAI,EAAI,EAAG,KAClE,EAAQ,GAAS,EAAG,QAAQ,CAAI,GAAK,KAAO,EAAG,QAAQ,CAAI,EAAI,EAAG,KACxE,KAAK,eAAiB,CAEpB,EAAI,GAAM,EAAE,YAAc,EAAI,EAAG,MAAQ,EAKzC,EAAG,CAAC,EAAG,EAAO,IAAM,EAAE,YAAc,EAAK,CAAI,EAAI,GAAK,EAAG,CAAI,EAC7D,QAAS,CAAC,EAAG,KAAM,EAAG,IAAI,EAE1B,QAAS,CAAC,EAAO,IAAM,CAAC,EAAK,CAAI,EAAG,EAAK,CAAI,CAAC,EAC9C,UAAW,EAAE,UACb,WAAY,EAAE,WACd,OAAQ,CACd,CACE,CAKA,eAAgB,CACd,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACP,EAAS,EAAE,WAAW,QAAU,CAAA,EAChC,EAAU,EAAE,WAAW,SAAW,CAAA,EACxC,OAAO,EAAO,IAAI,CAAC,EAAO,IAAM,CAC9B,MAAM,EAAK,EAAQ,CAAC,GAAK,CAAA,EACnB,GAAU,GAAS,CAAA,GAAI,IAAI,CAAC,EAAG,KAAO,CAC1C,EAAG,EAAG,CAAC,GAAK,KAAO,EAAG,CAAC,EAAI,EAC3B,EAAA,CACR,EAAQ,EACF,MAAO,CACL,KAAM,EAAG,YAAc,EAAG,YAAY,CAAC,EAAI,OAC3C,QAAS,EAAG,wBAA0B,CAAA,GAAI,SAAS,CAAC,EACpD,MAAO,EAAG,OAAS,EAAG,OAAO,CAAC,EAAI,OAClC,OAAA,CACR,CACI,CAAC,CACH,CAMA,OAAO,EAAO,CACZ,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,QACb,OAAQ,EAAK,CACX,IAAK,YACH,OAAO,EAAE,OAAO,MAAM,UACxB,IAAK,aACH,OAAO,EAAE,OAAO,MAAM,WACxB,IAAK,SACL,IAAK,UACH,OAAO,EAAG,OAAS,EAAG,OAAO,CAAC,EAAI,OACpC,QACE,MAAI,eAAe,KAAK,CAAK,GACpB,EAAG,OAAS,EAAG,OAAO,OAAO,EAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAE1D,MACR,CACE,CAMA,OAAO,EAAO,CAAE,EAAA,EAAI,QAAS,UAAA,EAAY,EAAE,EAAK,CAAA,EAAI,CAClD,IAAI,EAAI,KAAK,QAAQ,IAAI,CAAK,EAC9B,GAAI,CAAC,EAAG,CACN,EAAI,KAAK,IAAI,SAAS,MAAM,CAC1B,MAAO,qBAAqB,CAAK,IAAI,CAAS,GAAG,KAAI,CAC7D,CAAO,EACD,MAAM,EAAS,KAAK,EAAE,IAAI,YAAY,KAClC,IAAM,SAAU,EAAO,aAAa,EAAE,KAAM,EAAO,UAAU,EAC5D,EAAO,YAAY,EAAE,IAAI,EAC9B,EAAE,KAAK,aAAa,cAAe,MAAM,EACzC,KAAK,QAAQ,IAAI,EAAO,CAAC,CAC3B,CACA,OAAO,GAAgB,EAAG,KAAK,IAAI,QAAQ,CAC7C,CAMA,cAAe,CACb,MAAM,EAAK,KAAK,EAAE,IAAI,YAChB,EAAS,GAAM,EAAG,KACxB,GAAI,EAAQ,CACV,MAAM,EAAS,EAAO,iBAAiB,gCAAgC,EACvE,MAAM,UAAU,QAAQ,KAAK,EAAS,GAAM,EAAE,OAAM,CAAE,CACxD,CACA,KAAK,QAAQ,MAAK,CACpB,CAUA,YAAa,CACX,MAAM,EAAU,KAAK,EAAE,OAAO,SAAW,CAAA,EACzC,GAAI,IAAY,KAAK,gBAAiB,OACtC,KAAK,gBAAkB,EACvB,MAAM,EAAU,IAAI,IAClB,EAAQ,IAAI,CAAC,EAAG,IAAM,CACpB,EAAE,KACF,CAAE,MAAO,EAAG,MAAO,EAAE,OAAS,KAAO,EAAE,MAAQ,CAAC,CACxD,CAAO,CACP,EACI,QAAS,EAAI,KAAK,OAAO,OAAS,EAAG,GAAK,EAAG,IAAK,CAChD,MAAM,EAAI,KAAK,OAAO,CAAC,EACjB,EAAO,EAAQ,IAAI,EAAE,IAAI,IAAI,EAC9B,EAIH,EAAE,QAAU,OAAO,OAAO,EAAe,CAAA,EAAI,EAAK,MAAM,SAAW,CAAA,CAAE,CAAC,GAHtE,KAAK,OAAO,EAAG,UAAW,IAAM,EAAE,IAAI,SAAW,EAAE,IAAI,QAAQ,EAAE,GAAG,CAAC,EACrE,KAAK,OAAO,OAAO,EAAG,CAAC,EAI3B,CACA,MAAM,EAAc,IAAI,IAAI,KAAK,OAAO,IAAK,GAAM,EAAE,IAAI,IAAI,CAAC,EACxD,EAAQ,CAAA,EACd,EAAQ,QAAQ,CAAC,EAAG,IAAU,CACvB,EAAY,IAAI,CAAK,GAAG,EAAM,KAAK,CAAC,CAC3C,CAAC,EACD,EAAM,KAAK,CAAC,EAAG,IAAM,EAAE,MAAQ,EAAE,KAAK,EAAE,QAAS,GAAM,KAAK,UAAU,EAAE,KAAK,CAAC,CAChF,CAIA,SAAS,EAAY,CACnB,GAAI,CAAC,EAAY,CACf,KAAK,SAAS,SAAS,EACvB,UAAW,KAAU,KAAK,OACxB,KAAK,OAAO,EAAQ,UAAW,IAAM,EAAO,IAAI,SAAW,EAAO,IAAI,QAAQ,EAAO,GAAG,CAAC,EAE3F,KAAK,OAAS,CAAA,EACV,KAAK,gBACP,KAAK,IAAI,qBAAuB,KAAK,IAAI,oBAAoB,UAAW,KAAK,UAAU,EACvF,KAAK,cAAgB,GAEzB,CACA,KAAK,QAAQ,MAAK,CACpB,CACF,CACA,GAAW,iBAAiB,CAAE,MAAO,EAAS,CAAE,EAChD,MAAM,GAAa,CACjB,KAAM,OACN,OAAQ,SACR,eAAgB,cAChB,mBAAoB,aACpB,iBAAkB,UAClB,eAAgB,cAChB,iBAAkB,gBAClB,YAAa,UACf,EACM,GAAQ,OAAO,OAAO,EACtB,GAAW,CACf,OAAQ,EACR,OAAQ,EACR,KAAM,EACN,SAAU,EACV,QAAS,EACT,KAAM,EACN,QAAS,EACT,MAAO,EACP,KAAM,EACN,KAAM,CACR,EACM,GAAa,CACjB,SACA,SACA,WACA,UACA,OACA,UACA,QACA,OACA,MACF,EACM,GAAc,CAElB,MAAO,CACL,OAAO,EACT,EACA,MAAO,CACL,OAAO,EACT,EACA,QAAS,CACP,OAAO,EACT,EACA,MAAM,EAAI,CACR,OAAI,OAAO,GAAO,YAAY,EAAE,EACzB,EACT,EACA,SAAU,CACR,OAAO,EACT,EACA,OAAQ,CACN,OAAO,EACT,EACA,MAAO,CACL,OAAO,EACT,EACA,QAAS,CACP,OAAO,EACT,EACA,MAAO,CACL,OAAO,EACT,CACF,EACM,GAAqB,CACzB,SAAU,OACV,MAAO,CAAA,EACP,UAAW,CAAE,KAAM,CACnB,EAAG,QAAS,CACZ,EAAG,QAAS,CACZ,EAAG,SAAU,IAAM,EAAK,EACxB,cAAe,CACf,EACA,aAAc,IAAM,KACpB,iBAAkB,CAClB,EACA,aAAc,IAAM,GACpB,kBAAmB,CACnB,EACA,qBAAsB,CACtB,EACA,aAAc,CACd,EACA,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAC,EACnD,EACM,GAAe,CACnB,eAAgB,GAChB,KAAM,CACJ,SAAU,IACV,SAAU,KACV,MAAO,CAAA,EACP,UAAW,CAAE,KAAM,CACnB,EAAG,QAAS,CACZ,EAAG,QAAS,CACZ,EAAG,SAAU,IAAM,EAAK,EACxB,cAAe,CACf,EACA,aAAc,IAAM,KACpB,iBAAkB,CAClB,EACA,kBAAmB,CACnB,EACA,qBAAsB,CACtB,EACA,aAAc,CACd,EACA,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAC,EACrD,EAEE,MAAO,CACL,OAAO,EACT,EACA,KAAM,CACJ,OAAO,EACT,EACA,OAAQ,CACN,OAAO,EACT,EACA,QAAS,CACP,OAAO,EACT,EACA,OAAQ,CACN,OAAO,EACT,EACA,KAAM,CACJ,OAAO,EACT,EACA,MAAO,CACL,OAAO,EACT,EACA,MAAO,CACL,OAAO,EACT,EACA,aAAc,CACZ,OAAO,EACT,EACA,SAAU,CACR,OAAO,EACT,CACF,EACA,MAAM,EAAgB,CAKpB,YAAY,EAAG,EAAG,CAChB,KAAK,eAAiB,GACtB,KAAK,GAAK,EACV,KAAK,GAAK,CACZ,CACA,IAAI,MAAO,CACT,OAAO,EACT,CAMA,KAAK,EAAG,EAAG,CACT,OAAI,OAAO,GAAM,UACX,IAAM,QAAU,IAAM,QAAQ,KAAK,GAAG,eAAe,KAAK,GAAI,CAAC,EAC5D,IAAM,OAAS,KAAO,OAE3B,GAAK,EAAE,OAAS,QAAQ,KAAK,GAAG,eAAe,KAAK,GAAI,EAAE,IAAI,EAC3D,KACT,CAEA,IAAI,EAAI,CACN,OAAO,IACT,CAEA,MAAM,EAAI,CACR,OAAO,IACT,CACA,QAAS,CACP,OAAO,IACT,CAEA,IAAI,EAAI,CACN,OAAO,IACT,CAEA,KAAK,EAAI,CACP,OAAI,IAAO,QAAQ,KAAK,GAAG,eAAe,KAAK,GAAI,CAAE,EAC9C,IACT,CAEA,OAAO,EAAI,CACT,OAAO,IACT,CACA,MAAO,CACL,OAAO,IACT,CACA,MAAO,CACL,OAAO,IACT,CAEA,YAAY,EAAI,CACd,OAAO,IACT,CACA,SAAU,CACR,OAAO,EACT,CACF,CACA,MAAM,GAAkB,CACtB,eAAgB,GAChB,KAAM,GAEN,MAAO,CACL,OAAO,EACT,EACA,KAAM,CACJ,OAAO,EACT,EACA,OAAQ,CACN,OAAO,EACT,EACA,QAAS,CACP,OAAO,EACT,EAEA,KAAM,CACJ,OAAO,EACT,EACA,SAAU,CACR,OAAO,EACT,CACF,EACA,MAAM,EAAW,CAEf,YAAY,EAAK,CACf,KAAK,eAAiB,GACtB,KAAK,KAAO,EACZ,MAAM,EAAO,KACb,KAAK,KAAO,CACV,SAAU,EAAM,EAAI,IAAM,IAC1B,SAAU,KACV,MAAO,CAAA,EACP,UAAW,CAAE,KAAM,CACnB,EAAG,QAAS,CACZ,EAAG,QAAS,CACZ,EAAG,SAAU,IAAM,EAAK,EAExB,aAAa,EAAG,EAAG,CACjB,EAAK,WAAW,EAAG,CAAC,CACtB,EACA,aAAc,IAAM,KACpB,iBAAkB,CAClB,EACA,aAAc,IAAM,GACpB,kBAAmB,CACnB,EACA,qBAAsB,CACtB,EACA,aAAc,CACd,EACA,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAC,EACvD,CACE,CAKA,WAAW,EAAG,EAAG,CACf,MAAM,EAAM,KAAK,KACjB,GAAI,CAAC,EAAK,OACV,MAAM,EAAK,GAAW,CAAC,EACnB,IAAO,SAAQ,EAAI,CAAE,EAAI,EAC/B,CAMA,KAAK,EAAG,EAAG,CACT,GAAI,OAAO,GAAM,SACf,OAAI,IAAM,OAAe,MACzB,KAAK,WAAW,EAAG,CAAC,EACb,MAET,UAAW,KAAK,EACV,EAAE,CAAC,IAAM,QAAQ,KAAK,WAAW,EAAG,EAAE,CAAC,CAAC,EAE9C,OAAO,IACT,CAEA,IAAI,EAAI,CACN,OAAO,IACT,CAEA,MAAM,EAAI,CACR,OAAO,IACT,CACA,QAAS,CACP,OAAO,IACT,CACA,OAAQ,CACN,OAAO,IACT,CAEA,IAAI,EAAI,CACN,OAAO,IACT,CAEA,KAAK,EAAG,CACN,OAAI,OAAO,GAAM,SAAiB,KAAK,KAAK,CAAC,EACtC,KAAK,KAAK,OAAQ,CAAC,CAC5B,CAEA,OAAO,EAAG,CACR,OAAI,OAAO,GAAM,UACX,EAAE,QAAU,QAAQ,KAAK,KAAK,SAAU,EAAE,KAAK,EAC/C,EAAE,QAAU,QAAQ,KAAK,KAAK,eAAgB,EAAE,KAAK,EAClD,MAEF,KAAK,KAAK,SAAU,CAAC,CAC9B,CAEA,KAAK,EAAG,CACN,OAAI,OAAO,GAAM,UAAY,KAAK,MAAQ,KAAK,KAAK,MAAQ,SAC1D,KAAK,KAAK,EAAI,GAET,IACT,CACA,MAAO,CACL,OAAO,IACT,CACA,MAAO,CACL,OAAO,IACT,CAEA,YAAY,EAAI,CACd,OAAO,IACT,CACA,MAAO,CACL,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAC,CAC1C,CACA,SAAU,CACR,OAAO,EACT,CACF,CACA,MAAM,EAAe,CAEnB,YAAY,EAAG,CACb,KAAK,EAAI,EACT,KAAK,GAAK,IAAI,EAAS,CAAC,EACxB,KAAK,MAAQ,CAAA,EACb,KAAK,IAAM,IAAI,aAAa,EAAE,EAC9B,KAAK,IAAM,IAAI,aAAa,EAAE,EAC9B,KAAK,OAAS,IAAI,aAAa,EAAE,EACjC,KAAK,QAAU,IAAI,WAAW,EAAE,EAChC,KAAK,QAAU,IAAI,WAAW,EAAE,EAChC,KAAK,KAAO,IAAI,WAAW,EAAE,EAC7B,KAAK,IAAM,EACX,KAAK,MAAQ,GACb,KAAK,KAAO,IAAI,aAAa,EAAE,EAC/B,KAAK,KAAO,IAAI,aAAa,EAAE,EAC/B,KAAK,KAAO,IAAI,aAAa,EAAE,EAC/B,KAAK,KAAO,IAAI,aAAa,EAAE,EAC/B,KAAK,SAAW,IAAI,WAAW,EAAE,EACjC,KAAK,MAAQ,IAAI,WAAW,EAAE,EAC9B,KAAK,MAAQ,IAAI,WAAW,EAAE,EAC9B,KAAK,KAAO,EACZ,KAAK,OAAS,GACd,KAAK,YAAc,EACnB,KAAK,QAAU,CAAA,EACf,KAAK,UAA4B,IAAI,IACrC,KAAK,IAAM,GACX,KAAK,IAAM,GACX,KAAK,KAAO,GACZ,KAAK,IAAM,GACX,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,SAAW,GAChB,KAAK,SAAW,GAChB,KAAK,OAAS,GACd,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,MAAQ,GACb,KAAK,MAAQ,GACb,KAAK,MAAQ,GACb,KAAK,MAAQ,EACf,CACA,kBAAmB,CACjB,KAAK,IAAM,GACX,KAAK,IAAM,GACX,KAAK,KAAO,GACZ,KAAK,IAAM,GACX,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,SAAW,GAChB,KAAK,SAAW,GAChB,KAAK,OAAS,GACd,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,MAAQ,GACb,KAAK,MAAQ,GACb,KAAK,MAAQ,GACb,KAAK,MAAQ,EACf,CAEA,OAAQ,CACN,KAAK,MAAQ,CAAA,EACb,KAAK,IAAM,EACX,KAAK,QAAU,CAAA,EACf,KAAK,UAA4B,IAAI,IACrC,KAAK,iBAAgB,EACrB,MAAM,EAAS,KAAK,EAAE,OAAO,QAAU,CAAA,EACvC,IAAI,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAI,EAAO,CAAC,GAAK,EAAO,CAAC,EAAE,KAC7B,MAAM,QAAQ,CAAC,IAAG,GAAO,EAAE,OACjC,CACA,EAAM,KAAK,KAAK,EAAM,IAAI,EAAI,GAC1B,EAAM,KAAK,OAAO,KAAK,cAAc,CAAG,EAC5C,KAAK,KAAO,EACZ,KAAK,YAAc,EACf,EAAM,KAAK,QAAQ,KAAK,YAAY,CAAG,CAC7C,CAEA,YAAY,EAAK,CACf,KAAK,OAAS,EACd,KAAK,KAAO,IAAI,aAAa,CAAG,EAChC,KAAK,KAAO,IAAI,aAAa,CAAG,EAChC,KAAK,KAAO,IAAI,aAAa,CAAG,EAChC,KAAK,KAAO,IAAI,aAAa,CAAG,EAChC,KAAK,SAAW,IAAI,WAAW,CAAG,EAClC,KAAK,MAAQ,IAAI,WAAW,CAAG,EAC/B,KAAK,MAAQ,IAAI,WAAW,CAAG,CACjC,CAEA,YAAa,CACX,MAAM,EAAM,KAAK,OAAS,EACpB,EAAK,IAAI,aAAa,CAAG,EAC/B,EAAG,IAAI,KAAK,IAAI,EAChB,KAAK,KAAO,EACZ,MAAM,EAAK,IAAI,aAAa,CAAG,EAC/B,EAAG,IAAI,KAAK,IAAI,EAChB,KAAK,KAAO,EACZ,MAAM,EAAK,IAAI,aAAa,CAAG,EAC/B,EAAG,IAAI,KAAK,IAAI,EAChB,KAAK,KAAO,EACZ,MAAM,EAAK,IAAI,aAAa,CAAG,EAC/B,EAAG,IAAI,KAAK,IAAI,EAChB,KAAK,KAAO,EACZ,MAAM,EAAM,IAAI,WAAW,CAAG,EAC9B,EAAI,IAAI,KAAK,QAAQ,EACrB,KAAK,SAAW,EAChB,MAAM,EAAM,IAAI,WAAW,CAAG,EAC9B,EAAI,IAAI,KAAK,KAAK,EAClB,KAAK,MAAQ,EACb,MAAM,EAAM,IAAI,WAAW,CAAG,EAC9B,EAAI,IAAI,KAAK,KAAK,EAClB,KAAK,MAAQ,EACb,KAAK,OAAS,CAChB,CAEA,cAAc,EAAK,CACjB,KAAK,MAAQ,EACb,KAAK,IAAM,IAAI,aAAa,CAAG,EAC/B,KAAK,IAAM,IAAI,aAAa,CAAG,EAC/B,KAAK,OAAS,IAAI,aAAa,CAAG,EAClC,KAAK,QAAU,IAAI,WAAW,CAAG,EACjC,KAAK,QAAU,IAAI,WAAW,CAAG,EACjC,KAAK,KAAO,IAAI,WAAW,CAAG,CAChC,CAEA,cAAe,CACb,MAAM,EAAM,KAAK,MAAQ,EACnB,EAAK,IAAI,aAAa,CAAG,EAC/B,EAAG,IAAI,KAAK,GAAG,EACf,KAAK,IAAM,EACX,MAAM,EAAK,IAAI,aAAa,CAAG,EAC/B,EAAG,IAAI,KAAK,GAAG,EACf,KAAK,IAAM,EACX,MAAM,EAAK,IAAI,aAAa,CAAG,EAC/B,EAAG,IAAI,KAAK,MAAM,EAClB,KAAK,OAAS,EACd,MAAM,EAAM,IAAI,WAAW,CAAG,EAC9B,EAAI,IAAI,KAAK,OAAO,EACpB,KAAK,QAAU,EACf,MAAM,EAAM,IAAI,WAAW,CAAG,EAC9B,EAAI,IAAI,KAAK,OAAO,EACpB,KAAK,QAAU,EACf,MAAM,EAAM,IAAI,WAAW,CAAG,EAC9B,EAAI,IAAI,KAAK,IAAI,EACjB,KAAK,KAAO,EACZ,KAAK,MAAQ,CACf,CACA,aAAc,CACZ,OAAO,KAAK,KACd,CACA,aAAc,CACZ,OAAO,KAAK,GACd,CAQA,aAAa,EAAM,EAAQ,EAAI,EAAM,EAAI,EAAI,CAC3C,MAAM,EAAM,GAAG,CAAI,IAAI,CAAM,IAAI,CAAE,IAAI,CAAI,IAAI,CAAE,IAAI,CAAE,GACjD,EAAS,KAAK,UAAU,IAAI,CAAG,EACrC,GAAI,IAAW,OAAQ,OAAO,EAC9B,MAAM,EAAK,KAAK,QAAQ,OACxB,YAAK,QAAQ,KAAK,CAChB,KAAA,EACA,OAAA,EACA,YAAa,EACb,WAAY,EACZ,YAAa,EACb,cAAe,CACrB,CAAK,EACD,KAAK,UAAU,IAAI,EAAK,CAAE,EACnB,CACT,CASA,eAAe,EAAG,EAAM,CACtB,MAAM,EAAO,KAAK,QAAQ,CAAC,EAC3B,GAAI,IAAS,KAAK,UAAY,IAAS,KAAK,SAAU,CACpD,KAAK,QAAQ,CAAC,EAAI,KAAK,OACvB,MACF,CACA,MAAM,EAAI,KAAK,QAAQ,CAAI,EAC3B,GAAI,CAAC,GAAK,EAAE,OAAS,EAAM,CACzB,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,OAAS,EACd,MACF,CACA,MAAM,EAAK,KAAK,aACd,EACA,EAAE,OACF,EAAE,YACF,EAAE,WACF,EAAE,YACF,EAAE,aACR,EACI,KAAK,QAAQ,CAAC,EAAI,EAClB,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,OAAS,CAChB,CAEA,YAAY,EAAG,CACb,OAAO,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC,CACrC,CAEA,aAAa,EAAG,CACd,OAAO,KAAK,KAAK,CAAC,CACpB,CAEA,UAAU,EAAI,CACZ,OAAO,GAAW,CAAE,GAAK,QAC3B,CAUA,aAAa,EAAG,EAAG,EAAG,EAAG,EAAO,CAAA,EAAI,CAClC,MAAM,EAAU,KAAK,aAAa,CAAI,EAClC,KAAK,MAAQ,KAAK,QAAQ,KAAK,WAAU,EAC7C,MAAM,EAAI,KAAK,OACf,YAAK,KAAK,CAAC,EAAI,GAAK,EACpB,KAAK,KAAK,CAAC,EAAI,GAAK,EACpB,KAAK,KAAK,CAAC,EAAI,EAAI,EAAI,EAAI,EAC3B,KAAK,KAAK,CAAC,EAAI,EAAI,EAAI,EAAI,EAC3B,KAAK,SAAS,CAAC,EAAI,EACnB,KAAK,MAAM,CAAC,EAAI,EAAK,aAAe,KAAO,GAAK,EAAK,YACrD,KAAK,MAAM,CAAC,EAAI,EAAK,gBAAkB,KAAO,GAAK,EAAK,eACpD,EAAK,SAAQ,KAAK,YAAc,EAAK,QAClC,EACT,CAOA,aAAa,EAAM,CACjB,MAAM,EAAO,EAAK,KACZ,EAAS,EAAK,OACd,EAAK,EAAK,YACV,EAAK,EAAK,YACV,EAAK,EAAK,cAChB,GAAI,IAAS,KAAK,MAAQ,IAAW,KAAK,MAAQ,IAAO,KAAK,OAAS,IAAO,KAAK,OAAS,IAAO,KAAK,MACtG,OAAO,KAAK,MAEd,MAAM,EAAK,KAAK,aAAa,EAAM,EAAQ,EAAI,EAAG,EAAI,CAAE,EACxD,YAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,MAAQ,EACN,CACT,CAEA,WAAY,CACV,OAAO,KAAK,IACd,CAEA,UAAU,EAAG,CACX,OAAO,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC,CACtC,CAEA,WAAW,EAAG,CACZ,OAAO,KAAK,MAAM,CAAC,CACrB,CAMA,KAAK,EAAK,EAAG,CACX,MAAM,EAAM,CACV,IAAA,EACA,EAAG,GAAK,EACR,KAAM,OACN,OAAQ,OACR,YAAa,OACb,WAAY,OACZ,QAAS,OACT,YAAa,OACb,cAAe,OACf,SAAU,MAChB,EACI,YAAK,MAAM,KAAK,CAAG,EACZ,CACT,CAQA,MAAM,EAAQ,CACZ,OAAO,EACT,CAOA,WAAW,EAAG,EAAG,EAAO,CAAA,EAAI,CAC1B,IAAI,EACJ,MAAM,EAAU,KAAK,eAAe,CAAI,EACpC,KAAK,KAAO,KAAK,OAAO,KAAK,aAAY,EAC7C,MAAM,EAAI,KAAK,MACf,YAAK,IAAI,CAAC,EAAI,GAAK,EACnB,KAAK,IAAI,CAAC,EAAI,OAAO,GAAM,SAAW,EAAI,IAC1C,KAAK,OAAO,CAAC,EAAI,EAAK,OAAS,EAC/B,KAAK,QAAQ,CAAC,GAAK,EAAK,GAAS,EAAK,OAAS,QAAQ,IAAM,KAAO,EAAK,EACzE,KAAK,QAAQ,CAAC,EAAI,EAClB,KAAK,KAAK,CAAC,EAAI,EAAK,aAAe,KAAO,GAAK,EAAK,YAC7C,IAAI,GAAgB,KAAM,CAAC,CACpC,CAQA,eAAe,EAAM,CACnB,MAAM,EAAQ,EAAK,OAAS,SACtB,EAAe,IAAU,QAAU,IAAU,QAAU,IAAU,QACjE,EAAO,EAAe,OAAS,EAAK,eACpC,EAAS,EAAe,EAAK,eAAiB,EAAK,iBACnD,EAAK,EAAK,iBACV,EAAO,EAAK,qBACZ,EAAK,EAAK,iBACV,EAAK,EAAe,EAAK,iBAAmB,EAAK,mBACvD,GAAI,IAAS,KAAK,KAAO,IAAW,KAAK,KAAO,IAAO,KAAK,MAAQ,IAAS,KAAK,KAAO,IAAO,KAAK,MAAQ,IAAO,KAAK,KACvH,OAAO,KAAK,KAEd,MAAM,EAAK,KAAK,aAAa,EAAM,EAAQ,EAAI,EAAM,EAAI,CAAE,EAC3D,YAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,KAAO,EACZ,KAAK,IAAM,EACX,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,KAAO,EACL,CACT,CAGA,YAAY,EAAM,CAChB,MAAM,EAAM,KAAK,KAAK,OAAQ,EAAK,SAAS,EAC5C,OAAA,EAAI,EAAI,EAAK,OACT,EAAK,gBACP,EAAI,IAAM,EAAK,cAAc,GAC7B,EAAI,IAAM,EAAK,cAAc,GAC7B,EAAI,QAAU,EAAK,cAAc,QAEnC,EAAI,OAAS,EAAK,OAClB,EAAI,YAAc,EAAK,YACvB,EAAI,KAAO,EAAK,KAChB,EAAI,QAAU,EAAK,cACnB,EAAI,GAAK,EAAK,UACd,KAAK,EAAE,QAAQ,eAAiB,GACzB,IAAI,GAAW,CAAG,CAC3B,CAEA,SAAS,EAAM,CACb,MAAM,EAAM,KAAK,KAAK,OAAQ,CAAC,EAC/B,OAAA,EAAI,EAAI,EAAK,EACb,EAAI,OAAS,EAAK,OAClB,EAAI,YAAc,EAAK,YACvB,EAAI,KAAO,EAAK,KAChB,EAAI,YAAc,EAAK,YACvB,EAAI,cAAgB,EAAK,cACzB,EAAI,QAAU,EAAK,cACnB,EAAI,WAAa,EAAK,gBACf,IAAI,GAAW,CAAG,CAC3B,CAMA,SAAS,EAAI,EAAI,EAAI,EAAI,EAAY,UAAW,EAAY,EAAG,EAAc,EAAG,CAC9E,MAAM,EAAM,KAAK,KAAK,OAAQ,CAAC,EAC/B,OAAA,EAAI,IAAM,EACV,EAAI,IAAM,EACV,EAAI,IAAM,EACV,EAAI,IAAM,EACV,EAAI,OAAS,EACb,EAAI,WAAa,EACjB,EAAI,YAAc,EACX,IAAI,GAAW,CAAG,CAC3B,CASA,SAAS,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAK,EAAG,EAAS,EAAG,EAAQ,UAAW,EAAU,EAAG,EAAc,KAAM,EAAc,KAAM,EAAkB,EAAG,CAChJ,MAAM,EAAM,KAAK,KAAK,OAAQ,CAAC,EAC/B,OAAA,EAAI,GAAK,EACT,EAAI,GAAK,EACT,EAAI,GAAK,EAAK,EAAI,EAAK,EACvB,EAAI,GAAK,EAAK,EAAI,EAAK,EACvB,EAAI,OAAS,EACb,EAAI,KAAO,EACX,EAAI,YAAc,EACd,GAAe,OACjB,EAAI,OAAS,EACb,EAAI,YAAc,GAAsB,EACxC,EAAI,WAAa,GAEZ,IAAI,GAAW,CAAG,CAC3B,CAKA,WAAW,EAAQ,EAAQ,KAAM,CAC/B,MAAM,EAAM,KAAK,KAAK,SAAU,CAAC,EACjC,OAAA,EAAI,EAAI,EAAS,EAAI,EAAI,EACrB,IACF,EAAI,GAAK,EAAM,GACf,EAAI,GAAK,EAAM,GACX,EAAM,OAAS,SAAQ,EAAI,KAAO,EAAM,MACxC,EAAM,SAAW,SAAQ,EAAI,OAAS,EAAM,SAE3C,IAAI,GAAW,CAAG,CAC3B,CAEA,SAAS,EAAM,CACb,MAAM,EAAM,KAAK,KAAK,OAAQ,CAAC,EAC/B,OAAA,EAAI,KAAO,MAAM,QAAQ,EAAK,IAAI,EAAI,EAAK,KAAK,KAAK,GAAG,EAAI,EAAK,KACjE,EAAI,GAAK,EAAK,EACd,EAAI,GAAK,EAAK,EACd,EAAI,WAAa,EAAK,YAAc,QACpC,EAAI,SAAW,EAAK,SACpB,EAAI,WAAa,EAAK,WACtB,EAAI,KAAO,EAAK,UACT,IAAI,GAAW,CAAG,CAC3B,CAMA,WAAW,EAAG,EAAG,EAAS,EAAM,CAC9B,OAAO,KAAK,GAAG,cAAc,EAAG,EAAG,GAAW,CAAO,GAAK,SAAU,CAAI,CAC1E,CACF,CACA,MAAM,GAAS,KAAK,GAAK,EACnB,GAAU,EAChB,MAAM,EAAiB,CAErB,YAAY,EAAG,CACb,KAAK,EAAI,EACT,KAAK,MAAQ,KACb,KAAK,QAAU,KACf,KAAK,KAAO,KACZ,KAAK,QAAU,EACf,KAAK,KAAO,EACZ,KAAK,KAAO,KACZ,KAAK,OAAS,EACd,KAAK,WAA6B,IAAI,IACtC,KAAK,eAAiB,CACxB,CAEA,kBAAmB,CACjB,OAAO,KAAK,cACd,CAQA,aAAa,EAAI,CACf,MAAM,EAAI,KAAK,KACf,MAAI,CAAC,GAAK,EAAE,QAAU,MAAQ,EAAE,OAAS,GAAK,GAAM,MAAQ,EAAK,GAC1D,IAAO,EAAE,OAD2D,EAC9C,EAAE,SAAW,KAAO,GAAM,EAAE,OAC3D,CACA,WAAY,CACV,IAAI,EACJ,MAAM,EAAK,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,EAAE,OAAO,WAAa,CAAC,CAAC,EACxD,EAAK,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,EAAE,OAAO,YAAc,CAAC,CAAC,EACzD,IAAY,EAAK,KAAK,EAAE,QAAQ,UAAY,KAAO,OAAS,EAAG,cAAgB,EAC/E,EAAS,KAAK,KAAK,EAAU,CAAC,EACpC,MAAO,CAAE,GAAA,EAAI,GAAA,EAAI,OAAA,CAAM,CACzB,CAMA,YAAa,CACX,MAAM,EAAM,EAAY,UAAS,EACjC,KAAK,KAAO,KAAK,IAAI,GAAS,GAAO,EAAI,kBAAoB,CAAC,EAC9D,KAAM,CAAE,GAAA,EAAI,GAAA,EAAI,OAAA,CAAM,EAAK,KAAK,UAAS,EACzC,KAAK,QAAU,EACf,MAAM,EAAI,EAAK,EAAS,EAClB,EAAI,EAAK,EAAS,EAClB,EAAK,EAAY,gBAAgB,GAAS,eAAe,EAC/D,EAAG,aAAa,IAAK,OAAO,CAAC,CAAM,CAAC,EACpC,EAAG,aAAa,IAAK,OAAO,CAAC,CAAM,CAAC,EACpC,EAAG,aAAa,QAAS,OAAO,CAAC,CAAC,EAClC,EAAG,aAAa,SAAU,OAAO,CAAC,CAAC,EACnC,EAAG,aAAa,QAAS,0BAA0B,EACnD,EAAG,MAAM,SAAW,UACpB,MAAM,EAEJ,EAAY,cAAc,QAAQ,EAEpC,OAAA,EAAO,aAAa,QAAS,0BAA0B,EACvD,EAAO,MAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,EAAI,KAAK,IAAI,CAAC,EACpD,EAAO,OAAS,KAAK,IAAI,EAAG,KAAK,MAAM,EAAI,KAAK,IAAI,CAAC,EACrD,EAAO,MAAM,MAAQ,EAAI,KACzB,EAAO,MAAM,OAAS,EAAI,KAC1B,EAAO,MAAM,cAAgB,OAC7B,EAAG,YAAY,CAAM,EACrB,KAAK,QAAU,EACf,KAAK,KAAO,EAAO,WAAW,IAAI,EAClC,KAAK,MAAQ,IAAI,GAAW,CAAE,EACvB,KAAK,KACd,CACA,SAAU,CACR,OAAO,KAAK,KACd,CACA,OAAQ,CACF,CAAC,KAAK,MAAQ,CAAC,KAAK,UACxB,KAAK,KAAK,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACvC,KAAK,KAAK,UAAU,EAAG,EAAG,KAAK,QAAQ,MAAO,KAAK,QAAQ,MAAM,EACnE,CAOA,UAAW,CACT,GAAI,CAAC,KAAK,QAAS,OACnB,MAAM,EAAM,EAAY,UAAS,EAC3B,EAAM,KAAK,IAAI,GAAS,GAAO,EAAI,kBAAoB,CAAC,EAC9D,GAAI,IAAQ,KAAK,KAAM,OACvB,KAAK,KAAO,EACZ,MAAM,EAAO,WAAW,KAAK,QAAQ,MAAM,KAAK,GAAK,EAC/C,EAAO,WAAW,KAAK,QAAQ,MAAM,MAAM,GAAK,EACtD,KAAK,QAAQ,MAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,EAAO,CAAG,CAAC,EACvD,KAAK,QAAQ,OAAS,KAAK,IAAI,EAAG,KAAK,MAAM,EAAO,CAAG,CAAC,CAC1D,CAWA,MAAM,EAAM,EAAO,EAAM,KAAM,CAC7B,MAAM,EAAM,KAAK,KACjB,GAAI,CAAC,EAAK,OACV,KAAK,KAAO,GAAO,KACnB,KAAK,SAAQ,EACb,KAAK,MAAK,EACV,MAAM,EAAM,KAAK,KACX,EAAI,KAAK,QAEf,GADA,EAAI,aAAa,EAAK,EAAG,EAAG,EAAK,EAAI,EAAK,EAAI,CAAG,EAC7C,EAAK,OAAQ,CACf,MAAM,EAAU,EAAK,OAAS,EAAI,EAAK,IAAI,CAAC,EAAG,IAAM,CAAC,EAAG,CAAC,CAAC,EAAE,KAC3D,CAAC,EAAG,IAAM,EAAE,CAAC,EAAE,IAAM,EAAE,CAAC,EAAE,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,EAAE,EAAI,EAAE,CAAC,EAAE,CAClE,EAAQ,IAAK,GAAS,EAAK,CAAC,CAAC,EAAI,EAC3B,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,MAAM,EAAI,EAAQ,CAAC,EACnB,KAAK,OAAS,KAAK,KAAO,KAAK,aAAa,EAAE,EAAE,EAAI,EACpD,KAAK,UAAU,EAAK,CAAC,CACvB,CACF,CACA,KAAK,YAAY,EAAK,CAAK,EAC3B,KAAK,cAAc,EAAK,CAAK,EAC7B,KAAK,OAAS,CAChB,CAWA,YAAY,EAAK,EAAO,CACtB,MAAM,EAAI,EAAM,UAAY,EAAM,UAAS,EAAK,EAChD,GAAI,CAAC,EAAG,OACR,MAAM,EAAK,EAAM,KACX,EAAK,EAAM,KACX,EAAK,EAAM,KACX,EAAK,EAAM,KACX,EAAS,EAAM,SACf,EAAS,EAAM,aAAe,EAC9B,EAEJ,EAEI,EAAW,EAAS,GAAK,OAAO,EAAG,WAAc,WACjD,EAAU,CAAC,CAAC,KAAK,KACjB,EAAK,KAAK,IAAI,EAAG,KAAK,EAAE,OAAO,WAAa,CAAC,EAC7C,EAAK,KAAK,IAAI,EAAG,KAAK,EAAE,OAAO,YAAc,CAAC,EACpD,EAAI,KAAI,EACR,EAAI,UAAS,EACb,EAAI,KAAK,EAAG,EAAG,EAAI,CAAE,EACrB,EAAI,KAAI,EACR,IAAI,EAAI,EACR,KAAO,EAAI,GAAG,CACZ,MAAM,EAAU,EAAO,CAAC,EAClB,EAAQ,EAAM,UAAU,CAAC,EAC/B,GAAI,CAAC,EAAO,CACV,IACA,QACF,CACA,MAAM,EAAO,EAAM,KACb,EAAS,GAAQ,IAAS,QAAU,EAAE,OAAO,GAAS,UAAY,EAAK,QAAQ,MAAM,IAAM,GAC3F,EAAS,EAAM,OACf,EAAK,EAAM,aAAe,KAAO,EAAI,OAAO,EAAM,WAAW,EAC7D,EAAW,GAAU,IAAW,QAAU,EAAK,GAAK,EAAE,OAAO,GAAW,UAAY,EAAO,QAAQ,MAAM,IAAM,GACjH,IAAQ,EAAI,UAAY,GACxB,IACF,EAAI,YAAc,EAClB,EAAI,UAAY,EAChB,EAAI,YAAY,CAAA,CAAE,GAEpB,MAAM,EAAY,EAAM,aAAe,KAAO,EAAI,OAAO,EAAM,WAAW,EACpE,EAAc,EAAM,eAAiB,KAAO,EAAI,OAAO,EAAM,aAAa,EAChF,IAAI,EAAI,EACR,KAAO,EAAI,GAAK,EAAO,CAAC,IAAM,GAAS,CACrC,MAAM,EAAI,EAAG,CAAC,EACR,EAAI,EAAG,CAAC,EACd,GAAI,EAAI,GAAK,EAAI,EAAG,CAClB,MAAM,EAAI,EAAU,KAAK,aAAa,EAAM,WAAW,CAAC,CAAC,EAAI,EACzD,GACF,EAAI,UAAS,EACb,EAAG,UAAU,EAAG,CAAC,EAAG,EAAG,CAAC,EAAG,EAAG,EAAG,CAAM,EACnC,IACF,EAAI,YAAc,EAAY,EAC9B,EAAI,KAAI,GAEN,IACF,EAAI,YAAc,EAAc,EAChC,EAAI,OAAM,KAGR,IACF,EAAI,YAAc,EAAY,EAC9B,EAAI,SAAS,EAAG,CAAC,EAAG,EAAG,CAAC,EAAG,EAAG,CAAC,GAE7B,IACF,EAAI,YAAc,EAAc,EAChC,EAAI,WAAW,EAAG,CAAC,EAAG,EAAG,CAAC,EAAG,EAAG,CAAC,GAGvC,CACA,GACF,CACA,EAAI,CACN,CACA,EAAI,YAAc,EAClB,EAAI,QAAO,CACb,CAUA,UAAU,EAAO,EAAS,EAAM,CAC9B,MAAM,EAAM,EAAU,IAAM,EAC5B,IAAI,EAAI,KAAK,WAAW,IAAI,CAAG,EAC/B,GAAI,IAAM,OAAQ,CAChB,GAAI,CACF,EAAI,IAAI,OAAO,EAAM,WAAW,EAAG,EAAG,EAAS,CAAI,CAAC,CACtD,MAAY,CACV,EAAI,IACN,CACA,KAAK,WAAW,IAAI,EAAK,CAAC,CAC5B,CACA,OAAO,CACT,CAUA,cAAc,EAAK,EAAO,CACxB,KAAK,eAAiB,EACtB,MAAM,EAAI,EAAM,YAAW,EAC3B,GAAI,CAAC,EAAG,OACR,MAAM,EAAK,EAAM,IACX,EAAK,EAAM,IACX,EAAQ,EAAM,OACd,EAAS,EAAM,QACf,EAAS,EAAM,QACf,EAAU,CAAC,CAAC,KAAK,KAClB,IAAS,KAAK,OAAS,GAC5B,IAAI,EAAI,EACR,KAAO,EAAI,GAAG,CACZ,MAAM,EAAU,EAAO,CAAC,EAClB,EAAU,EAAO,CAAC,EAClB,EAAQ,EAAM,YAAY,CAAC,EACjC,GAAI,CAAC,EAAO,CACV,IACA,QACF,CACA,MAAM,EAAS,KAAK,WAAW,EAAK,CAAK,EACnC,EAAW,KAAK,aAAa,EAAK,CAAK,EAC7C,KAAK,iBACL,MAAM,EAAY,EAAM,aAAe,KAAO,EAAI,OAAO,EAAM,WAAW,EACpE,EAAc,EAAM,eAAiB,KAAO,EAAI,OAAO,EAAM,aAAa,EAChF,GAAI,IAAY,EAAG,CACjB,IAAI,EAAI,EACR,KAAO,EAAI,GAAK,EAAO,CAAC,IAAM,GAAK,EAAO,CAAC,IAAM,GAAS,CACxD,MAAM,EAAI,EAAM,CAAC,GAAK,EAChB,EAAI,EAAG,CAAC,EACd,GAAI,EAAI,GAAK,IAAM,EAGjB,GAFA,EAAI,UAAS,EACb,EAAI,IAAI,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAM,EAC1B,EAAS,CACX,MAAM,EAAI,KAAK,aAAa,EAAM,aAAa,CAAC,CAAC,EAC7C,IACF,EAAI,YAAc,EAAY,EAC9B,EAAI,KAAI,GAEN,IACF,EAAI,YAAc,EAAc,EAChC,EAAI,OAAM,EAEd,MACM,GAAQ,EAAI,KAAI,EAChB,GAAU,EAAI,OAAM,EAG5B,GACF,CACA,EAAI,YAAc,EAClB,EAAI,CACN,KAAO,CACL,MAAM,EAAM,KAAK,KACX,EAAI,KAAK,QACf,IAAI,EAAI,EACR,KAAO,EAAI,GAAK,EAAO,CAAC,IAAM,GAAW,EAAO,CAAC,IAAM,GAAS,CAC9D,MAAM,EAAI,EAAG,CAAC,EACR,EAAO,EAAM,CAAC,EACpB,GAAI,IAAM,GAAK,EAAO,EAAG,CACvB,MAAM,EAAI,KAAK,UAAU,EAAO,EAAS,CAAI,EAC7C,GAAI,EAAG,CACL,EAAI,aAAa,EAAK,EAAG,EAAG,GAAM,EAAI,EAAG,CAAC,GAAK,GAAM,EAAI,GAAK,CAAG,EACjE,MAAM,EAAI,EAAU,KAAK,aAAa,EAAM,aAAa,CAAC,CAAC,EAAI,EAC3D,IACF,EAAI,YAAc,EAAY,EAC9B,EAAI,KAAK,CAAC,GAER,IACF,EAAI,YAAc,EAAc,EAChC,EAAI,OAAO,CAAC,EAEhB,CACF,CACA,GACF,CACA,EAAI,aAAa,EAAK,EAAG,EAAG,EAAK,EAAI,EAAK,EAAI,CAAG,EACjD,EAAI,YAAc,EAClB,EAAI,CACN,CACF,CACF,CASA,kBAAkB,EAAK,EAAK,CAC1B,MAAM,EAAK,EAAI,IACT,EAAK,EAAI,IACT,EAAI,EAAG,OACb,GAAK,EACL,CAAA,EAAI,UAAS,EACb,EAAI,OAAO,EAAG,CAAC,EAAG,EAAG,CAAC,CAAC,EACvB,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,EAAI,OAAO,EAAG,CAAC,EAAG,EAAG,CAAC,CAAC,EAErB,EAAI,SAAW,OACjB,EAAI,OAAO,EAAG,EAAI,CAAC,EAAG,EAAI,OAAO,EACjC,EAAI,OAAO,EAAG,CAAC,EAAG,EAAI,OAAO,EAC7B,EAAI,UAAS,GAEX,KAAK,WAAW,EAAK,CAAG,GAC1B,EAAI,KAAK,EAAI,WAAa,UAAY,UAAY,SAAS,EAEzD,KAAK,aAAa,EAAK,CAAG,GAC5B,EAAI,OAAM,EAEZ,EAAI,YAAc,EACpB,CAKA,UAAU,EAAK,EAAK,CAClB,OAAQ,EAAI,IAAG,CACb,IAAK,OAAQ,CACX,GAAI,EAAI,IAAK,CACX,KAAK,kBAAkB,EAAK,CAAG,EAC/B,KACF,CACA,GAAI,CAAC,EAAI,EAAG,OACZ,GAAI,CAAC,EAAI,OACP,GAAI,CACF,EAAI,OAAS,IAAI,OAAO,EAAI,CAAC,CAC/B,MAAY,CACV,MACF,CAEF,KAAK,gBAAgB,EAAK,EAAK,EAAI,MAAM,EACzC,KACF,CACA,IAAK,OAAQ,CACX,MAAM,EAAI,IAAI,OACV,EAAI,QAAU,OAClB,EAAE,WAAc,WACd,EAAE,UAAU,EAAI,GAAI,EAAI,GAAI,EAAI,GAAI,EAAI,GAAI,EAAI,MAAM,EAEtD,EAAE,KAAK,EAAI,GAAI,EAAI,GAAI,EAAI,GAAI,EAAI,EAAE,EAEvC,KAAK,gBAAgB,EAAK,EAAK,CAAC,EAChC,KACF,CACA,IAAK,SAAU,CACb,GAAI,EAAE,EAAI,EAAI,GAAI,OAClB,EAAI,UAAS,EACb,EAAI,IAAI,EAAI,GAAI,EAAI,GAAI,EAAI,EAAG,EAAG,EAAM,EACxC,KAAK,YAAY,EAAK,CAAG,EACzB,KACF,CACA,IAAK,OAAQ,CACX,EAAI,UAAS,EACb,EAAI,OAAO,EAAI,IAAK,EAAI,GAAG,EAC3B,EAAI,OAAO,EAAI,IAAK,EAAI,GAAG,EAC3B,KAAK,YAAY,EAAK,CAAG,EACzB,KACF,CACA,IAAK,OAAQ,CACX,GAAI,EAAI,MAAQ,KAAM,OACtB,EAAI,KAAI,EACR,EAAI,YAAc,KAAK,OACvB,EAAI,UAAY,EAAI,MAAQ,OAC5B,MAAM,EAAO,EAAI,UAAY,OAC7B,EAAI,KAAO,GAAG,OAAO,GAAS,SAAW,EAAO,KAAO,CAAI,IAAI,EAAI,YAAc,8BAA8B,GAC/G,EAAI,UAAY,EAAI,aAAe,SAAW,SAAW,EAAI,aAAe,MAAQ,QAAU,OAC9F,EAAI,SAAS,OAAO,EAAI,IAAI,EAAG,EAAI,GAAI,EAAI,EAAE,EAC7C,EAAI,QAAO,EACX,KACF,CACN,CACE,CAMA,gBAAgB,EAAK,EAAO,EAAQ,CAC9B,KAAK,WAAW,EAAK,CAAK,GAC5B,EAAI,KAAK,EAAQ,EAAM,WAAa,UAAY,UAAY,SAAS,EAEnE,KAAK,aAAa,EAAK,CAAK,GAC9B,EAAI,OAAO,CAAM,EAEnB,EAAI,YAAc,CACpB,CAKA,YAAY,EAAK,EAAO,CAClB,KAAK,WAAW,EAAK,CAAK,GAAG,EAAI,KAAI,EACrC,KAAK,aAAa,EAAK,CAAK,GAAG,EAAI,OAAM,EAC7C,EAAI,YAAc,CACpB,CAKA,YAAY,EAAK,EAAO,CAClB,KAAK,aAAa,EAAK,CAAK,GAAG,EAAI,OAAM,EAC7C,EAAI,YAAc,CACpB,CAMA,WAAW,EAAK,EAAO,CACrB,MAAM,EAAO,EAAM,KAEnB,MADI,CAAC,GAAQ,IAAS,QAClB,OAAO,GAAS,UAAY,EAAK,QAAQ,MAAM,IAAM,EAAU,IACnE,EAAI,aAAe,EAAM,aAAe,KAAO,EAAI,OAAO,EAAM,WAAW,GAAK,KAAK,OACrF,EAAI,UAAY,EACT,GACT,CAMA,aAAa,EAAK,EAAO,CACvB,MAAM,EAAS,EAAM,OACf,EAAK,EAAM,aAAe,KAAO,EAAI,OAAO,EAAM,WAAW,EAEnE,GADI,CAAC,GAAU,IAAW,QAAU,EAAE,EAAK,IACvC,OAAO,GAAW,UAAY,EAAO,QAAQ,MAAM,IAAM,EAAG,MAAO,GACvE,EAAI,aAAe,EAAM,eAAiB,KAAO,EAAI,OAAO,EAAM,aAAa,GAAK,KAAK,OACzF,EAAI,YAAc,EAClB,EAAI,UAAY,EAChB,EAAI,QAAU,EAAM,SAAW,OAC/B,MAAM,EAAO,EAAM,WACnB,OAAI,GAAQ,IAAS,EACnB,EAAI,YAAY,MAAM,QAAQ,CAAI,EAAI,EAAO,CAAC,OAAO,CAAI,CAAC,CAAC,EAE3D,EAAI,YAAY,CAAA,CAAE,EAEb,EACT,CAEA,WAAY,CACV,OAAO,KAAK,QAAU,KAAK,QAAQ,UAAS,EAAK,IACnD,CACA,SAAU,CACR,KAAK,MAAQ,KACb,KAAK,QAAU,KACf,KAAK,KAAO,KACZ,KAAK,WAAW,MAAK,CACvB,CACF,CACA,MAAM,EAAe,CAKnB,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,KAAO,SACZ,KAAK,GAAK,IAAI,GAAe,CAAC,EAC9B,KAAK,YAAc,IAAI,GAAiB,CAAC,CAC3C,CAGA,aAAc,CACZ,KAAK,GAAG,MAAK,CACf,CAMA,SAAU,CACR,MAAM,EAAO,KAAK,YAAY,WAAU,EACxC,YAAK,YAAY,MAAM,KAAK,GAAG,YAAW,EAAI,KAAK,EAAE,EAC9C,CACT,CAEA,OAAQ,CACN,KAAK,YAAY,MAAK,CACxB,CAOA,mBAAoB,CAClB,MAAM,EAAO,KAAK,YAAY,QAAO,EACrC,MAAO,CAAC,EAAE,GAAQ,EAAK,MAAQ,EAAK,KAAK,YAC3C,CAEA,gBAAiB,CACf,KAAK,YAAY,MAAM,KAAK,GAAG,YAAW,EAAI,KAAK,EAAE,CACvD,CAGA,MAAM,EAAO,CACX,OAAO,KAAK,GAAG,MAAM,CAAK,CAC5B,CAEA,SAAS,EAAM,CACb,OAAO,KAAK,GAAG,SAAS,CAAI,CAC9B,CAEA,YAAY,EAAM,CAChB,OAEE,KAAK,GAAG,SAAS,GAAG,CAAI,CAE5B,CAEA,YAAY,EAAM,CAChB,OAEE,KAAK,GAAG,SAAS,GAAG,CAAI,CAE5B,CAQA,aAAa,EAAG,EAAG,EAAG,EAAG,EAAM,CAC7B,OAAO,KAAK,GAAG,aAAa,EAAG,EAAG,EAAG,EAAG,CAAI,CAC9C,CAKA,WAAW,EAAG,EAAO,CACnB,OAAO,KAAK,GAAG,WAAW,EAAG,CAAK,CACpC,CAMA,WAAW,EAAG,EAAG,EAAM,CACrB,OAAO,KAAK,GAAG,WAAW,EAAG,EAAG,CAAI,CACtC,CAEA,YAAY,EAAM,CAChB,OAAO,KAAK,GAAG,YAAY,CAAI,CACjC,CAEA,SAAS,EAAM,CACb,OAAO,KAAK,GAAG,SAAS,CAAI,CAC9B,CAGA,SAAS,EAAS,CAChB,OAAO,IAAY,aAAe,IAAY,WAChD,CAiBA,QAAQ,EAAI,EAAI,CACd,MAAM,EAAI,KAAK,GACT,EAAI,EAAE,UAAY,EAAE,UAAS,EAAK,EACxC,GAAI,CAAC,EAAG,OAAO,KACf,MAAM,EAAK,EAAE,KACP,EAAK,EAAE,KACP,EAAK,EAAE,KACP,EAAK,EAAE,KACb,QAAS,EAAI,EAAI,EAAG,GAAK,EAAG,IAAK,CAC/B,MAAM,EAAI,EAAG,CAAC,EACR,EAAI,EAAG,CAAC,EACd,GAAI,EAAA,GAAK,GAAK,GAAK,IACf,GAAM,EAAG,CAAC,GAAK,EAAK,EAAG,CAAC,EAAI,GAAK,GAAM,EAAG,CAAC,GAAK,EAAK,EAAG,CAAC,EAAI,EAC/D,MAAO,CACL,YAAa,EAAE,MAAM,CAAC,EACtB,eAAgB,EAAE,MAAM,CAAC,EACzB,EAAG,EAAG,CAAC,EACP,EAAG,EAAG,CAAC,EACP,MAAO,EACP,OAAQ,CAClB,CAEI,CACA,OAAO,IACT,CAOA,QAAQ,EAAK,CACX,KAAK,YAAY,MAAM,KAAK,GAAG,YAAW,EAAI,KAAK,GAAI,GAAO,IAAI,CACpE,CAKA,UAAW,CACT,MAAM,EAAM,KAAK,YAAY,UAAS,EACtC,GAAI,CAAC,EAAK,OAAO,KACjB,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OAAO,MACpB,EAAS,KAAK,YAAY,QAChC,MAAO,CACL,QAAS,EACT,GAAI,EAAG,YAAc,IAAM,EAAI,SAAW,GAAK,EAC/C,GAAI,EAAG,YAAc,IAAM,EAAI,SAAW,GAAK,EAC/C,GAAI,KAAK,EAAE,OAAO,WAAa,GAAK,EAAS,EAC7C,GAAI,KAAK,EAAE,OAAO,YAAc,GAAK,EAAS,CACpD,CACE,CACA,SAAU,CACR,KAAK,YAAY,QAAO,CAC1B,CACF,CACA,GAAW,iBACT,SAKA,CAAC,EAAG,IAAQ,IAAI,GAAe,EAAG,CAAG,CACvC,EACA,SAAS,GAAsB,EAAO,EAAK,CACzC,MAAM,EAAM,KAAmB,CAI7B,YAAY,EAAG,EAAK,EAAU,CAC5B,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,SAAW,EAChB,KAAK,QAAU,EACjB,CAOA,KAAK,EAAQ,EAAQ,EAAe,CAClC,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,EAAG,KAAK,GAAG,EACnC,EAAO,GAAc,KAAK,IAAK,CAAQ,EACvC,EAAM,EAAS,MAAM,CAAE,MAAO,yBAAyB,CAAE,EAC/D,OAAA,EAAO,QAAQ,CAAC,EAAI,IAAQ,CAC1B,IAAI,EACJ,MAAM,EAAY,MAAM,QAAQ,CAAa,EAAI,EAAc,CAAG,EAAI,EAChE,EAAW,EAAS,MAAM,CAC9B,MAAO,oBACP,IAAK,EAAY,EACjB,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAS,CAAC,EACpE,iBAAkB,CAC5B,CAAS,EACK,EAAS,KAAK,QAClB,GACC,EAAE,WAAW,OAAO,CAAS,GAAK,CAAA,GAAI,MACjD,EACc,EAAQ,EAAE,QAAQ,OAAO,CAAS,EAClC,IAEF,EAAM,EAAE,OAAO,OAAO,CAAS,IAAM,KAAO,OAAS,EAAI,OAAS,CAAA,EAEhE,EAAQ,EAAE,WAAW,QAAQ,CAAS,GAAK,CAAA,EAC3C,EAAQ,EAAE,WAAW,OAAO,CAAS,GAAK,CAAA,EAChD,EAAE,QAAQ,cAAc,CAAS,EAAI,CAAA,EACrC,EAAE,QAAQ,cAAc,CAAS,EAAI,CAAA,EACjC,OAAO,EAAE,QAAQ,YAAY,CAAS,EAAM,MAC9C,EAAE,QAAQ,YAAY,CAAS,EAAI,CAAA,GAErC,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,MAAM,EAAO,EAAM,CAAC,EACpB,GAAI,IAAS,MAAQ,OAAO,EAAS,IAAa,SAClD,MAAM,EAAO,EAAM,CAAC,EACd,EAAM,EAAO,IAAI,EAAG,CAAI,EACxB,EAAM,EAAO,EAAE,CAAI,EACnB,EAAM,KAAK,KAAK,EAAM,EAAU,EAAW,CAAC,EAClD,GAAI,CACF,EAAI,WAAW,CACb,MAAO,EAAQ,CAAC,EAChB,EAAG,EACH,EAAG,EACH,OAAA,EACA,IAAA,EACA,YAAa,EACb,eAAgB,EAChB,MAAA,CACd,CAAa,CACH,OAAS,EAAG,CACL,KAAK,UACR,QAAQ,KACN,4CAA4C,CAAK,2BACjD,CAChB,EACc,KAAK,QAAU,GAEnB,CACA,EAAE,QAAQ,cAAc,CAAS,EAAE,CAAC,EAAI,EACxC,EAAE,QAAQ,cAAc,CAAS,EAAE,CAAC,EAAI,EACxC,EAAE,QAAQ,YAAY,CAAS,EAAE,CAAC,EAAI,CAAC,EAAK,CAAG,CACjD,CACA,EAAS,qBAAqB,EAAU,wBAAwB,EAChE,EAAI,IAAI,CAAQ,CAClB,CAAC,GACA,GAAM,EAAK,KAAK,IAAI,aAAe,KAAO,OAAS,EAAG,qBAAuB,MAAgB,EAAG,KAAK,EAAI,CAAG,EACtG,CACT,CAQA,QAAQ,EAAW,EAAM,CACvB,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAK,KAAK,EAAE,QACZ,EAAM,KAAK,EAAE,OACb,EAAS,KAAK,SAAS,OACvB,EAAY,KAAK,SAAS,OAC1B,GAAQ,GAAM,EAAK,EAAG,wBAA0B,KAAO,OAAS,EAAG,CAAS,IAAM,KAAO,EAAK,EAC9F,EAAK,MAAM,QAAQ,CAAS,GAAK,EAAK,EAAU,CAAI,IAAM,KAAO,EAAK,EAAU,CAAC,EAAI,EACrF,EAEJ,EAAG,QAEC,EAAO,MAAM,QAAQ,CAAO,GAAK,EAAQ,SAAU,EAAK,EAAQ,CAAI,IAAM,KAAO,EAAe,EAAG,KACnG,EAAY,EAAG,UACf,EAAa,EAAG,WAChB,EAAU,CAAC,EAAG,WACd,EAAI,GAAQ,EAAG,YAAc,EAC7B,EAAQ,EAAI,EAAI,EAAY,EAAI,EAChC,EAAS,EAAI,MAAM,gBAAkB,KACrC,EAAK,GAAM,GAAU,EAAI,EAAG,MAAQ,EAAS,EAAY,EACzD,EAAK,IAAO,EAAO,GAAK,EACxB,EAAM,CAAC,EAAO,IACb,EACD,GAAU,EAAI,EAAU,GAAS,EAAI,GAAK,GACtC,EAAQ,IAAO,EAFF,EAAE,CAAC,EAIpB,EAAO,EAAG,UAAY,EACtB,EAAO,EAAU,EAAQ,EAAS,EAAO,EAAS,EACxD,MAAO,CACL,EAAA,EACA,IAAA,EACA,EAAA,EACA,UAAA,EACA,WAAA,EACA,KAAA,CACR,CACI,CAQA,KAAK,EAAM,EAAU,EAAW,EAAG,CACjC,MAAM,EAAO,GAAO,CAClB,GAAI,EAAI,CACN,GAAI,CACF,EAAG,KAAK,aAAa,QAAS,OAAO,CAAS,CAAC,EAC/C,EAAG,KAAK,aAAa,IAAK,OAAO,CAAC,CAAC,EACnC,EAAG,KAAK,UAAU,IAAI,uBAAuB,CAC/C,MAAY,CACZ,CACA,EAAS,IAAI,CAAE,CACjB,CACA,OAAO,CACT,EACA,MAAO,CAEL,KAAM,CAAC,EAAI,CAAA,IAAO,CAChB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACpC,OAAO,EACL,EAAK,SAAS,CACZ,EAAG,EAAE,GAAK,GACV,QAAS,EAAK,EAAE,SAAW,KAAO,EAAK,OACvC,aAAc,GAAM,EAAK,EAAE,QAAU,KAAO,EAAK,EAAE,cAAgB,KAAO,EAAK,EAC/E,MAAO,EAAK,EAAE,OAAS,KAAO,EAAK,OACnC,aAAc,EAAK,EAAE,cAAgB,KAAO,EAAK,EAAE,MAAQ,EAAE,OAAS,QAAU,EAAK,EAAE,UAAY,KAAO,EAAK,EAAI,EACnH,eAAgB,GAAM,EAAK,EAAE,gBAAkB,KAAO,EAAK,EAAE,UAAY,KAAO,EAAK,EACrF,iBAAkB,EAAK,EAAE,OAAS,KAAO,EAAK,EAC9C,cAAe,EAAE,OAC/B,CAAa,CACb,CACQ,EAEA,KAAM,CAAC,EAAI,CAAA,IAAO,CAChB,IAAI,EAAI,EAAI,EAAI,EAChB,OAAO,EACL,EAAK,SACH,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,IACD,EAAK,EAAE,SAAW,KAAO,EAAK,QAC9B,EAAK,EAAE,OAAS,KAAO,EAAK,GAC5B,GAAM,EAAK,EAAE,QAAU,KAAO,EAAK,EAAE,cAAgB,KAAO,EAAK,CAChF,CACA,CACQ,EAEA,KAAM,CAAC,EAAI,CAAA,IAAO,CAChB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAChC,OAAO,EACL,EAAK,UACF,EAAK,EAAE,IAAM,KAAO,EAAK,GACzB,EAAK,EAAE,IAAM,KAAO,EAAK,GACzB,EAAK,EAAE,IAAM,KAAO,EAAK,GACzB,EAAK,EAAE,IAAM,KAAO,EAAK,GACzB,EAAK,EAAE,IAAM,KAAO,EAAK,GACzB,EAAK,EAAE,OAAS,KAAO,EAAK,QAC5B,EAAK,EAAE,UAAY,KAAO,EAAK,EAChC,EAAE,QAAU,MAAQ,EAAK,EAAE,cAAgB,KAAO,EAAK,EAAI,KAC3D,EAAE,MAChB,CACA,CACQ,EAEA,OAAQ,CAAC,EAAI,CAAA,IAAO,CAClB,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,OAAO,EACL,EAAK,YAAY,EAAK,EAAE,IAAM,KAAO,EAAK,EAAG,CAC3C,IAAK,EAAK,EAAE,KAAO,KAAO,EAAK,EAC/B,IAAK,EAAK,EAAE,KAAO,KAAO,EAAK,EAC/B,MAAO,EAAK,EAAE,OAAS,KAAO,EAAK,OACnC,OAAQ,EAAE,QAAU,OACpB,gBAAiB,EAAK,EAAE,cAAgB,KAAO,EAAK,EAAE,OAAS,EAAI,CACjF,CAAa,CACb,CACQ,EAEA,KAAM,CAAC,EAAI,CAAA,IAAO,CAChB,IAAI,EAAI,EAAI,EAAI,EAChB,OAAO,EACL,EAAK,SAAS,CACZ,GAAI,EAAK,EAAE,IAAM,KAAO,EAAK,EAC7B,GAAI,EAAK,EAAE,IAAM,KAAO,EAAK,EAC7B,MAAO,EAAK,EAAE,OAAS,KAAO,EAAK,GACnC,YAAa,EAAK,EAAE,SAAW,KAAO,EAAK,QAC3C,SAAU,EAAE,KACZ,UAAW,EAAE,MACb,WAAY,EAAE,MAC5B,CAAa,CACb,CACQ,CACR,CACI,CACJ,EACE,OAAA,EAAI,SAAW,EAAI,UAAY,KAC/B,EAAI,QAAU,OAAO,EAAI,SAAY,WAAa,EAAI,QAAU,KACzD,CACT,CACA,GAAW,qBAAuB,GAClC,MAAM,GAAa,+BACb,GAAiB,2BACvB,MAAM,EAAe,CAInB,YAAY,EAAG,EAAK,CAGlB,GAFA,KAAK,EAAI,EACT,KAAK,IAAM,EACP,EAAE,OAAO,MAAM,SAAW,MAAQ,CAAC,EAAY,UAAS,EAAI,OAChE,MAAM,EAAQ,KAAK,aAAY,EAC1B,IACL,KAAK,eAAe,CAAK,EACzB,KAAK,iBAAiB,CAAK,EAC7B,CAMA,cAAe,CACb,GAAI,CAAC,KAAK,IAAI,cAAe,CAC3B,MAAM,EAAO,EAAY,WAAW,EAAU,EACxC,EAAW,EAAY,WAAW,EAAc,EACtD,GAAI,CAAC,GAAQ,CAAC,EAAU,OAAO,KAC/B,KAAK,IAAI,cAAgB,CAAE,KAAA,EAAM,SAAA,EAAU,QAAS,IAAI,CAC1D,CACA,OAAO,KAAK,IAAI,aAClB,CAKA,eAAe,EAAO,CACpB,MAAM,EAAQ,KAAK,EAAE,OAAO,MACxB,EAAM,OACR,EAAM,KAAO,EAAM,KAAK,QAAU,OAAS,SAEzC,EAAM,UAAY,EAAM,SAAS,UACnC,EAAM,cAAgB,EAAM,eAAiB,CAAA,EAC7C,EAAM,cAAc,eAAiB,eAEzC,CAOA,iBAAiB,EAAO,CACtB,GAAI,EAAM,QAAS,OACnB,MAAM,EAAM,KAAK,IACX,EAAU,IAAM,CACpB,MAAM,EAAI,EAAI,cACd,GAAI,CAAC,EAAG,OACR,MAAM,EAAW,CAAE,KAAM,EAAE,MAAQ,EAAE,KAAK,QAAU,OAAS,OAAO,EAChE,EAAE,UAAY,EAAE,SAAS,QAC3B,EAAS,cAAgB,CAAE,eAAgB,cAAc,EAEzD,EAAS,cAAgB,CAAE,eAAgB,EAAE,EAE/C,EAAI,cAAc,CAAE,MAAO,CAAQ,EAAI,GAAO,GAAM,EAAK,CAC3D,EACA,GAAe,KAAK,EAAM,KAAM,CAAO,EACvC,GAAe,KAAK,EAAM,SAAU,CAAO,EAC3C,EAAM,QAAU,CAClB,CAEA,UAAW,CACT,MAAM,EAAQ,KAAK,IAAI,cAClB,IACD,EAAM,UACR,GAAe,QAAQ,EAAM,KAAM,EAAM,OAAO,EAChD,GAAe,QAAQ,EAAM,SAAU,EAAM,OAAO,GAEtD,KAAK,IAAI,cAAgB,KAC3B,CAIA,OAAO,KAAK,EAAK,EAAS,CACnB,IACD,OAAO,EAAI,kBAAqB,WAClC,EAAI,iBAAiB,SAAU,CAAO,EAC7B,OACX,EAAI,aAAgB,YAClB,EAAI,YAAY,CAAO,EAE3B,CAIA,OAAO,QAAQ,EAAK,EAAS,CACtB,IACD,OAAO,EAAI,qBAAwB,WACrC,EAAI,oBAAoB,SAAU,CAAO,EAChC,OACX,EAAI,gBAAmB,YACrB,EAAI,eAAe,CAAO,EAE9B,CACF,CACA,GAAW,iBAAiB,CAAE,eAAgB,EAAc,CAAE,EAC9D,MAAM,GAAe,8BACrB,SAAS,GAAW,EAAG,CACrB,GAAI,CAAC,OAAO,SAAS,CAAC,EAAG,OAAO,EAChC,MAAM,EAAI,OAAO,EAAE,YAAY,EAAE,CAAC,EAClC,OAAO,OAAO,GAAG,EAAG,EAAE,EAAI,EAAI,CAChC,CACA,SAAS,GAAM,EAAG,CAChB,OAAO,OAAO,GAAM,UAAY,OAAO,SAAS,CAAC,CACnD,CACA,SAAS,GAAY,EAAQ,CAC3B,GAAI,OAAO,GAAW,WAAY,OAAO,EACzC,GAAI,GAAU,OAAO,GAAW,SAAU,CACxC,GAAI,OAAO,EAAO,KAAQ,SAAU,CAClC,MAAM,EAAI,EAAO,IACjB,OAAQ,GAAS,EAAK,OAAO,CAAC,EAAG,IAAM,GAAK,OAAO,EAAE,CAAC,CAAC,GAAK,GAAI,CAAC,CACnE,CACA,GAAI,OAAO,EAAO,KAAQ,SAAU,CAClC,MAAM,EAAI,EAAO,IACjB,OAAQ,GAAS,EAAK,OAAS,EAAK,OAAO,CAAC,EAAG,IAAM,GAAK,OAAO,EAAE,CAAC,CAAC,GAAK,GAAI,CAAC,EAAI,EAAK,OAAS,CACnG,CACA,GAAI,OAAO,EAAO,KAAQ,SAAU,CAClC,MAAM,EAAI,EAAO,IACjB,OAAQ,GAAS,EAAK,OAAS,KAAK,IAAI,GAAG,EAAK,IAAK,GAAM,OAAO,EAAE,CAAC,CAAC,GAAK,CAAC,CAAC,EAAI,CACnF,CACA,GAAI,OAAO,EAAO,KAAQ,SAAU,CAClC,MAAM,EAAI,EAAO,IACjB,OAAQ,GAAS,EAAK,OAAS,KAAK,IAAI,GAAG,EAAK,IAAK,GAAM,OAAO,EAAE,CAAC,CAAC,GAAK,CAAC,CAAC,EAAI,CACnF,CACF,CACA,OAAQ,GAAS,EAAK,MACxB,CACA,SAAS,GAAW,EAAM,EAAO,CAC/B,OAAI,OAAO,GAAU,WAAmB,EAAK,MAAK,EAAG,KAAK,CAAK,EAC3D,IAAU,MAAc,EAAK,MAAK,EAAG,KAAK,CAAC,EAAG,IAAM,EAAI,EAAI,EAAI,EAAI,EAAI,GAAK,CAAC,EAC9E,IAAU,OAAe,EAAK,MAAK,EAAG,KAAK,CAAC,EAAG,IAAM,EAAI,EAAI,EAAI,EAAI,EAAI,GAAK,CAAC,EAC5E,CACT,CACA,SAAS,GAAe,EAAS,EAAU,EAAO,CAChD,MAAM,EAAuB,IAAI,IAC3B,EAAO,CAAA,EACb,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,MAAM,EAAI,EAAS,EAAQ,CAAC,CAAC,EACzB,GAAK,OACJ,EAAK,IAAI,CAAC,IACb,EAAK,IAAI,CAAC,EACV,EAAK,KAAK,CAAC,GAEf,CACA,OAAO,GAAW,EAAM,CAAK,CAC/B,CACA,SAAS,GAAa,EAAS,EAAU,EAAO,CAC9C,MAAM,EAAwB,IAAI,IAC5B,EAAwB,IAAI,IAC5B,EAAU,CAAA,EACV,EAAU,CAAA,EAChB,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,MAAM,EAAO,EAAS,EAAQ,CAAC,CAAC,EAChC,GAAI,CAAC,EAAM,SACX,MAAM,EAAI,EAAK,CAAC,EACV,EAAI,EAAK,CAAC,EACZ,GAAK,MAAQ,CAAC,EAAM,IAAI,CAAC,IAC3B,EAAM,IAAI,CAAC,EACX,EAAQ,KAAK,CAAC,GAEZ,GAAK,MAAQ,CAAC,EAAM,IAAI,CAAC,IAC3B,EAAM,IAAI,CAAC,EACX,EAAQ,KAAK,CAAC,EAElB,CACA,MAAO,CAAE,QAAS,GAAW,EAAS,CAAK,EAAG,QAAS,GAAW,EAAS,CAAK,CAAC,CACnF,CACA,SAAS,GAAW,EAAS,EAAU,EAAM,CAC3C,GAAI,GAAQ,MAAM,QAAQ,EAAK,UAAU,GAAK,EAAK,WAAW,QAAU,EAAG,CACzE,MAAM,EAAI,MAAM,KAAK,IAAI,IAAI,EAAK,WAAW,OAAO,EAAK,CAAC,CAAC,EAAE,KAC3D,CAAC,EAAG,IAAM,EAAI,CACpB,EACI,OAAO,EAAE,QAAU,EAAI,EAAE,IAAI,EAAU,EAAI,CAAC,EAAG,CAAC,CAClD,CACA,IAAI,EAAM,IACN,EAAM,KACV,QAAS,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,MAAM,EAAI,EAAS,EAAQ,CAAC,CAAC,EACxB,GAAM,CAAC,IACR,EAAI,IAAK,EAAM,GACf,EAAI,IAAK,EAAM,GACrB,CACA,GAAI,IAAQ,IAAU,MAAO,CAAC,EAAG,CAAC,EAClC,GAAI,IAAQ,EAAK,CACf,MAAM,EAAM,KAAK,IAAI,CAAG,EAAI,EAAI,KAAK,IAAI,CAAG,EAAI,EAChD,MAAO,CAAC,GAAW,CAAG,EAAG,GAAW,EAAM,CAAG,CAAC,CAChD,CACA,GAAI,GAAQ,GAAM,EAAK,KAAK,GAAK,EAAK,MAAQ,EAAG,CAC/C,MAAM,EAAK,EAAK,MACV,EAAQ,KAAK,MAAM,EAAM,CAAE,EAAI,EACrC,IAAI,EAAM,KAAK,KAAK,EAAM,CAAE,EAAI,EAC5B,GAAO,IAAO,EAAM,EAAQ,GAChC,MAAM,EAAS,KAAK,IAAI,EAAG,KAAK,OAAO,EAAM,GAAS,CAAE,CAAC,EACnD,EAAS,IAAI,MAAM,EAAS,CAAC,EACnC,QAAS,EAAI,EAAG,GAAK,EAAQ,IAAK,EAAO,CAAC,EAAI,GAAW,EAAQ,EAAI,CAAE,EACvE,OAAO,CACT,CACA,MAAM,EAAQ,GAAQ,GAAM,EAAK,KAAK,GAAK,EAAK,OAAS,EAAI,KAAK,MAAM,EAAK,KAAK,EAAI,GAChF,GAAK,EAAM,GAAO,EAClB,EAAQ,IAAI,MAAM,EAAQ,CAAC,EACjC,QAAS,EAAI,EAAG,GAAK,EAAO,IAAK,EAAM,CAAC,EAAI,GAAW,EAAM,EAAI,CAAC,EAClE,OAAA,EAAM,CAAK,EAAI,GAAW,CAAG,EACtB,CACT,CACA,SAAS,GAAW,EAAG,EAAO,CAC5B,GAAI,CAAC,GAAM,CAAC,EAAG,MAAO,GACtB,MAAM,EAAO,EAAM,OAAS,EAC5B,GAAI,EAAI,EAAM,CAAC,GAAK,EAAI,EAAM,CAAI,EAAG,MAAO,GAC5C,GAAI,IAAM,EAAM,CAAI,EAAG,OAAO,EAAO,EACrC,QAAS,EAAI,EAAG,EAAI,EAAM,IACxB,GAAI,GAAK,EAAM,CAAC,GAAK,EAAI,EAAM,EAAI,CAAC,EAAG,OAAO,EAEhD,MAAO,EACT,CACA,SAAS,GAAW,EAAO,CACzB,MAAM,EAAU,CAAA,EAChB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAS,EAAG,IACpC,EAAQ,KAAK,IAAY,EAAM,CAAC,EAAI,EAAM,EAAI,CAAC,GAAK,CAAC,CAAC,EAExD,OAAO,CACT,CACA,MAAM,EAAY,CAKhB,YAAY,EAAI,EAAS,CACvB,KAAK,GAAK,EACV,KAAK,QAAU,MAAM,QAAQ,CAAO,EAAI,EAAU,CAAA,EAClD,KAAK,KAAuB,IAAI,IAChC,KAAK,WAA6B,IAAI,GACxC,CAGA,OAAO,QAAS,CACd,MAAM,EAEJ,WAEF,OAAK,EAAE,EAAY,IAAG,EAAE,EAAY,EAAoB,IAAI,KACrD,EAAE,EAAY,CACvB,CAOA,OAAO,YAAY,EAAM,CACvB,GAAI,CAAC,GAAQ,OAAO,EAAK,IAAO,SAC9B,MAAM,IAAI,MAAM,mDAAmD,EAErE,MAAM,EAAQ,GAAY,OAAM,EAChC,IAAI,EAAK,EAAM,IAAI,EAAK,EAAE,EAC1B,OAAI,GACE,EAAK,SAAS,EAAG,WAAW,EAAK,OAAO,EACrC,IAET,EAAK,IAAI,GAAY,EAAK,GAAI,EAAK,OAAO,EAC1C,EAAM,IAAI,EAAK,GAAI,CAAE,EACd,EACT,CAEA,OAAO,IAAI,EAAI,CACb,OAAO,GAAY,OAAM,EAAG,IAAI,CAAE,GAAK,IACzC,CAQA,WAAW,EAAS,CAClB,YAAK,QAAU,MAAM,QAAQ,CAAO,EAAI,EAAU,CAAA,EAClD,KAAK,KAAK,QAAS,GAAQ,KAAK,iBAAiB,CAAG,CAAC,EACrD,KAAK,MAAM,UAAW,KAAK,MAAK,CAAE,EAClC,KAAK,MAAM,SAAU,KAAK,MAAK,CAAE,EAC1B,IACT,CAUA,kBAAkB,EAAS,EAAM,CAC/B,GAAI,CAAC,GAAQ,OAAO,EAAK,WAAc,WACrC,MAAM,IAAI,MACR,kCAAkC,CAAO,gCACjD,EAEI,MAAM,EAAO,EAAK,OAAS,EAAK,KAAO,QAAU,YAC3C,EAAM,CACV,SAAU,EAAK,UACf,QAAS,GAAY,EAAK,MAAM,EAChC,KAAA,EACA,KAAM,EAAK,KACX,MAAO,EAAK,MAEZ,OAAQ,KAER,OAAQ,CAAA,EAER,MAAO,IACb,EACI,YAAK,KAAK,IAAI,EAAS,CAAG,EAC1B,KAAK,iBAAiB,CAAG,EACrB,EAAK,QAAU,MAAM,KAAK,aAAa,EAAK,EAAK,MAAM,EACpD,IACT,CAEA,aAAa,EAAS,CACpB,OAAO,KAAK,KAAK,IAAI,CAAO,CAC9B,CAEA,gBAAgB,EAAS,CACvB,MAAM,EAAM,KAAK,KAAK,IAAI,CAAO,EAC3B,EAAY,EAAM,KAAK,WAAW,CAAG,EAAI,GAC/C,YAAK,KAAK,OAAO,CAAO,EACpB,GAAW,KAAK,MAAM,SAAU,KAAK,MAAK,CAAE,EACzC,IACT,CAEA,iBAAiB,EAAK,CACpB,GAAI,EAAI,OAAS,SAAU,CACzB,MAAM,EAAM,GAAa,KAAK,QAAS,EAAI,SAAU,EAAI,KAAK,EAC9D,EAAI,QAAU,EAAI,QAClB,EAAI,QAAU,EAAI,QAClB,EAAI,MAAQ,KACZ,MACF,CACA,GAAI,EAAI,OAAS,QACf,EAAI,MAAQ,GAAW,KAAK,QAAS,EAAI,SAAU,EAAI,IAAI,EAC3D,EAAI,OAAS,GAAW,EAAI,KAAK,UAEjC,EAAI,OAAS,GAAe,KAAK,QAAS,EAAI,SAAU,EAAI,KAAK,EACjE,EAAI,MAAQ,KACR,EAAI,kBAAkB,IAAK,CAC7B,MAAM,EAAS,IAAI,IAAI,EAAI,MAAM,EACjC,MAAM,KAAK,EAAI,MAAM,EAAE,QAAS,GAAM,CAC/B,EAAO,IAAI,CAAC,GAAG,EAAI,OAAO,OAAO,CAAC,CACzC,CAAC,CACH,CAEJ,CAQA,OAAO,EAAS,EAAQ,CACtB,MAAM,EAAM,KAAK,KAAK,IAAI,CAAO,EACjC,OAAK,GACL,KAAK,aAAa,EAAK,CAAM,EAC7B,KAAK,MAAM,SAAU,KAAK,MAAK,CAAE,EAC1B,MAHU,IAInB,CAKA,UAAU,EAAS,EAAK,CACtB,MAAM,EAAM,KAAK,KAAK,IAAI,CAAO,EACjC,GAAI,CAAC,GAAO,EAAI,OAAS,WAAY,OAAO,KACtC,EAAI,kBAAkB,MAAM,EAAI,OAAyB,IAAI,KACnE,MAAM,EAEJ,EAAI,OAEN,OAAI,EAAI,IAAI,CAAG,EAAG,EAAI,OAAO,CAAG,EAC3B,EAAI,IAAI,CAAG,EACZ,EAAI,OAAS,IAAG,EAAI,OAAS,MACjC,KAAK,MAAM,SAAU,KAAK,MAAK,CAAE,EAC1B,IACT,CAEA,aAAa,EAAK,EAAQ,CACxB,GAAI,GAAU,KAAM,CAClB,EAAI,OAAS,KACb,MACF,CACA,GAAI,EAAI,OAAS,QAAS,CACpB,MAAM,QAAQ,CAAM,GAAK,EAAO,SAAW,GAAK,EAAO,MAAM,EAAK,EACpE,EAAI,OAAS,CAAC,KAAK,IAAI,EAAO,CAAC,EAAG,EAAO,CAAC,CAAC,EAAG,KAAK,IAAI,EAAO,CAAC,EAAG,EAAO,CAAC,CAAC,CAAC,EAE5E,EAAI,OAAS,KAEf,MACF,CACA,MAAM,EAAM,aAAkB,IAAM,IAAI,IAAI,CAAM,EAAI,IAAI,IAAI,CAAM,EACpE,EAAI,OAAS,EAAI,KAAO,EAAM,IAChC,CAKA,MAAM,EAAS,CACb,MAAM,EAAM,KAAK,KAAK,IAAI,CAAO,EACjC,OAAI,IAAK,EAAI,OAAS,MACtB,KAAK,MAAM,SAAU,KAAK,MAAK,CAAE,EAC1B,IACT,CAEA,OAAQ,CACN,YAAK,KAAK,QAAS,GAAQ,CACzB,EAAI,OAAS,IACf,CAAC,EACD,KAAK,MAAM,SAAU,KAAK,MAAK,CAAE,EAC1B,IACT,CAEA,WAAW,EAAK,CACd,OAAI,EAAI,QAAU,KAAa,GAC3B,EAAI,kBAAkB,IAAY,EAAI,OAAO,KAAO,EACjD,EACT,CAEA,QAAQ,EAAK,EAAK,CAChB,GAAI,CAAC,KAAK,WAAW,CAAG,EAAG,MAAO,GAClC,MAAM,EAAI,EAAI,SAAS,CAAG,EAC1B,OAAI,EAAI,kBAAkB,IAAY,EAAI,OAAO,IAAI,CAAC,EACjD,GAAM,CAAC,EACL,GAAK,EAAI,OAAO,CAAC,GAAK,GAAK,EAAI,OAAO,CAAC,EADxB,EAExB,CAQA,gBAAgB,EAAe,CAC7B,MAAM,EAAS,CAAA,EAKf,OAJA,KAAK,KAAK,QAAQ,CAAC,EAAK,IAAO,CACzB,IAAO,GACP,KAAK,WAAW,CAAG,GAAG,EAAO,KAAK,CAAG,CAC3C,CAAC,EACG,EAAO,SAAW,EAAU,KAAK,QAC9B,KAAK,QAAQ,OAAQ,GAAQ,EAAO,MAAO,GAAQ,KAAK,QAAQ,EAAK,CAAG,CAAC,CAAC,CACnF,CAEA,cAAe,CACb,OAAO,KAAK,gBAAgB,IAAI,CAClC,CASA,aAAa,EAAS,CACpB,MAAM,EAAM,KAAK,KAAK,IAAI,CAAO,EACjC,GAAI,CAAC,EAAK,MAAO,CAAE,KAAM,WAAY,OAAQ,CAAA,EAAI,OAAQ,CAAA,EAAI,KAAM,CAAA,CAAE,EACrE,MAAM,EAAO,KAAK,gBAAgB,CAAO,EACzC,GAAI,EAAI,OAAS,SAAU,CACzB,MAAM,EAAS,IAAI,IAAI,EAAI,QAAQ,IAAI,CAAC,EAAG,IAAM,CAAC,EAAG,CAAC,CAAC,CAAC,EAClD,EAAS,IAAI,IAAI,EAAI,QAAQ,IAAI,CAAC,EAAG,IAAM,CAAC,EAAG,CAAC,CAAC,CAAC,EAClD,EAAU,EAAI,QAAQ,IAAI,IAAM,EAAI,QAAQ,IAAI,IAAM,CAAA,CAAE,CAAC,EAC/D,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAO,EAAI,SAAS,EAAK,CAAC,CAAC,EACjC,GAAI,CAAC,EAAM,SACX,MAAM,EAAK,EAAO,IAAI,EAAK,CAAC,CAAC,EACvB,EAAK,EAAO,IAAI,EAAK,CAAC,CAAC,EACzB,GAAM,MAAQ,GAAM,MAAM,EAAQ,CAAE,EAAE,CAAE,EAAE,KAAK,EAAK,CAAC,CAAC,CAC5D,CACA,MAAO,CACL,KAAM,SACN,QAAS,EAAI,QAAQ,MAAK,EAC1B,QAAS,EAAI,QAAQ,MAAK,EAC1B,OAAQ,EAAQ,IAAK,GAAS,EAAK,IAAK,GAAS,EAAI,QAAQ,CAAI,CAAC,CAAC,CAC3E,CACI,CACA,GAAI,EAAI,OAAS,QAAS,CACxB,MAAM,EAAQ,EAAI,OAAS,CAAC,EAAG,CAAC,EAC1B,EAAQ,EAAM,OAAS,EACvB,EAAU,MAAM,KAAK,CAAE,OAAQ,CAAK,EAAI,IAAM,CAAA,CAAE,EACtD,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAM,GAAW,EAAI,SAAS,EAAK,CAAC,CAAC,EAAG,CAAK,EAC/C,GAAO,GAAG,EAAQ,CAAG,EAAE,KAAK,EAAK,CAAC,CAAC,CACzC,CACA,MAAO,CACL,KAAM,QACN,OAAQ,GAAW,CAAK,EAExB,OAAQ,EAAQ,IAAK,GAAM,EAAI,QAAQ,CAAC,CAAC,EACzC,KAAM,EAAQ,IAAI,CAAC,EAAG,IAAM,CAAC,EAAM,CAAC,EAAG,EAAM,EAAI,CAAC,CAAC,CAAC,EACpD,MAAA,CACR,CACI,CACA,MAAM,EAAwB,IAAI,IAClC,EAAI,OAAO,QAAS,GAAM,EAAM,IAAI,EAAG,CAAA,CAAE,CAAC,EAC1C,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAI,EAAI,SAAS,EAAK,CAAC,CAAC,EACxB,EAAS,EAAM,IAAI,CAAC,EACtB,GAAQ,EAAO,KAAK,EAAK,CAAC,CAAC,CACjC,CACA,MAAO,CACL,KAAM,WACN,OAAQ,EAAI,OAAO,MAAK,EACxB,OAAQ,EAAI,OAAO,IAChB,GAAM,EAAI,QAAQ,EAAM,IAAI,CAAC,GAAK,CAAA,CAAE,CAC7C,EACM,KAAM,EAAI,OAAO,MAAK,CAC5B,CACE,CAKA,cAAe,CACb,MAAM,EAAM,CAAA,EACZ,YAAK,KAAK,QAAQ,CAAC,EAAM,IAAO,CAC9B,EAAI,CAAE,EAAI,KAAK,aAAa,CAAE,CAChC,CAAC,EACM,CACT,CAMA,OAAQ,CACN,MAAM,EAAU,CAAA,EAChB,YAAK,KAAK,QAAQ,CAAC,EAAK,IAAO,CACxB,KAAK,WAAW,CAAG,IACxB,EAAQ,CAAE,EAAI,EAAI,kBAAkB,IAAM,MAAM,KAAK,EAAI,MAAM,EAAI,EAAI,OAAO,MAAK,EACrF,CAAC,EACM,CACL,QAAA,EACA,cAAe,KAAK,aAAY,EAAG,OACnC,MAAO,KAAK,QAAQ,MAC1B,CACE,CAEA,SAAS,EAAS,CAChB,MAAM,EAAM,KAAK,KAAK,IAAI,CAAO,EACjC,MAAI,CAAC,GAAO,CAAC,KAAK,WAAW,CAAG,EAAU,KACnC,EAAI,kBAAkB,IAAM,IAAI,IAAI,EAAI,MAAM,EAAI,EAAI,OAAO,MAAK,CAC3E,CAKA,GAAG,EAAO,EAAI,CACZ,IAAI,EAAM,KAAK,WAAW,IAAI,CAAK,EACnC,OAAK,IACH,EAAsB,IAAI,IAC1B,KAAK,WAAW,IAAI,EAAO,CAAG,GAEhC,EAAI,IAAI,CAAE,EACH,IAAM,KAAK,IAAI,EAAO,CAAE,CACjC,CAEA,IAAI,EAAO,EAAI,CACb,IAAI,EACJ,OAAC,EAAK,KAAK,WAAW,IAAI,CAAK,IAAM,MAAgB,EAAG,OAAO,CAAE,EAC1D,IACT,CAEA,MAAM,EAAO,EAAS,CACpB,IAAI,GACH,EAAK,KAAK,WAAW,IAAI,CAAK,IAAM,MAAgB,EAAG,QAAS,GAAO,CACtE,GAAI,CACF,EAAG,CAAO,CACZ,OAAS,EAAG,CACV,QAAQ,MAAM,CAAC,CACjB,CACF,CAAC,CACH,CAMA,KAAK,EAAG,CACN,OAAO,OAAO,GAAY,EAAM,EAAE,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,QAAQ,CAC7H,CAKA,gBAAgB,EAAS,CACvB,GAAI,MAAM,QAAQ,CAAO,GAAK,EAAQ,OACpC,OAAO,EAAQ,IACZ,GAAM,OAAO,GAAM,SAAW,CAAE,MAAO,EAAG,MAAO,CAAC,EAAK,CAAE,MAAO,EAAE,MAAO,MAAO,EAAE,OAAS,EAAE,MAAO,OAAQ,EAAE,MAAM,CAC7H,EAEI,MAAM,EAAQ,KAAK,QAAQ,CAAC,EAE5B,OADe,EAAQ,OAAO,KAAK,CAAK,EAAI,CAAA,GAC9B,IAAK,IAAO,CAAE,MAAO,EAAG,MAAO,CAAC,EAAG,CACnD,CAMA,WAAW,EAAS,EAAM,EAAO,CAC/B,MAAM,EAAO,cAAgB,EAAQ,IAAK,GAAM,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,EAAI,gBACvF,EAAO,UAAY,EAAK,IAC3B,GAAQ,OAAS,EAAQ,IAAK,GAAM,CACnC,MAAM,EAAM,EAAI,EAAE,KAAK,EACjB,EAAM,EAAE,OAAS,EAAE,OAAO,EAAK,CAAG,EAAI,EAC5C,MAAO,OAAO,KAAK,KAAK,CAAG,CAAC,OAC9B,CAAC,EAAE,KAAK,EAAE,EAAI,OACpB,EAAM,KAAK,EAAE,EAAI,WAEb,MAAO,sCADS,YAAY,EAAK,MAAM,OAAO,CAAK,iBACC,GAAG,CAAI,GAAG,CAAI,UACpE,CAOA,UAAU,EAAI,EAAM,CAClB,GAAI,CAAC,EAAI,MAAO,CAAE,SAAU,CAC5B,EAAG,SAAU,CACb,CAAC,EACD,MAAM,EAAI,GAAQ,CAAA,EACZ,EAAU,KAAK,gBAAgB,EAAE,OAAO,EACxC,EAAW,EAAE,UAAY,EACzB,EAAO,EAAE,MAAQ,EACjB,EAAS,IAAM,CACnB,MAAM,EAAO,KAAK,aAAY,EACxB,EAAQ,EAAW,EAAK,MAAM,EAAO,EAAU,EAAO,EAAW,CAAQ,EAAI,EACnF,EAAG,UAAY,KAAK,WAAW,EAAS,EAAO,EAAK,MAAM,CAC5D,EACA,EAAM,EACN,MAAM,EAAM,KAAK,GAAG,SAAU,CAAM,EACpC,MAAO,CACL,QAAS,EACT,QAAS,IAAM,CACb,EAAG,EACH,EAAG,UAAY,EACjB,CACN,CACE,CAEA,SAAU,CACR,GAAY,OAAM,EAAG,OAAO,KAAK,EAAE,EACnC,KAAK,KAAK,MAAK,EACf,KAAK,WAAW,MAAK,EACrB,KAAK,QAAU,CAAA,CACjB,CACF,CACA,MAAM,GAAgB,CACpB,uBACA,+BACA,2BACA,4BACA,oBACF,EAAE,KAAK,IAAI,EACL,GAAuB,CAC3B,uBACA,sBACF,EAAE,KAAK,IAAI,EACL,GAAe,gCACf,GAAY,CAAC,MAAO,QAAS,YAAa,WAAW,EAC3D,MAAM,EAAY,CAKhB,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,QAAU,GACf,KAAK,OAAS,GACd,KAAK,SAAW,GAChB,KAAK,YAAc,KACnB,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EACrC,KAAK,MAAK,IAAO,UAAU,KAAK,YAAW,CACjD,CAEA,OAAQ,CACN,MAAM,EAAO,KAAK,EAAE,OAAO,MAAM,KACjC,OAAI,GAAQ,OAAO,EAAK,WAAc,WAAmB,SACrD,GAAQ,EAAK,QAAgB,YAC1B,KACT,CACA,UAAW,CACT,MAAM,EAAO,KAAK,EAAE,OAAO,MAAM,KACjC,MAAO,CAAC,EAAE,GAAQ,EAAK,QACzB,CASA,kBAAkB,EAAO,CACvB,IAAI,EACJ,MAAM,EAAO,KAAK,MAAK,EAEvB,GADI,IAAS,OACT,CAAC,GAAS,EAAM,KAAO,MAAQ,EAAM,KAAO,KAAM,OACtD,IAAI,EAAM,KAAK,IAAI,EAAM,IAAK,EAAM,GAAG,EACnC,EAAM,KAAK,IAAI,EAAM,IAAK,EAAM,GAAG,EACvC,MAAM,EAAQ,KAAK,EAAE,QAAQ,KACvB,EAAQ,KAAK,EAAE,QAAQ,KAC7B,GAAI,SAAS,CAAK,GAAK,SAAS,CAAK,GAAK,EAAQ,EAAO,CACvD,MAAM,GAAO,EAAQ,GAAS,KAC1B,EAAM,GAAS,IAAK,EAAM,GAC1B,EAAQ,GAAO,IAAK,EAAM,EAChC,CACA,GAAI,IAAS,SAAU,CACrB,MAAM,EAAK,KAAK,IAAG,EACnB,GAAI,CAAC,EAAI,OACT,EAAG,OAAO,KAAK,SAAQ,EAAI,CAAC,EAAK,CAAG,CAAC,EACrC,KAAK,kBAAkB,EAAI,CAAC,EAAK,CAAG,CAAC,EACrC,MACF,CACA,KAAK,OAAM,EAAG,QAAS,GAAO,CAC5B,IAAI,GACH,EAA4B,GAAG,cAAgB,MAAgB,EAAI,SAAS,EAAK,CAAG,CACvF,CAAC,EACD,MAAM,EAAO,CAAE,MAAO,CAAE,IAAA,EAAK,IAAA,CAAG,EAAI,cAAe,KAAK,EAAE,QAAQ,OAAO,EACrE,OAAO,KAAK,EAAE,OAAO,MAAM,OAAO,aAAgB,YACpD,KAAK,EAAE,OAAO,MAAM,OAAO,YAAY,KAAK,IAAK,CAAI,GAEtD,EAAK,KAAK,IAAI,SAAW,MAAgB,EAAG,UAAU,cAAe,CAAC,KAAK,IAAK,CAAI,CAAC,CACxF,CAEA,QAAS,CACP,MAAM,EAAW,OAAO,KAAK,IAAI,kBAAqB,WAAa,KAAK,IAAI,iBAAgB,EAAK,CAAA,EACjG,MAAO,CAAC,KAAK,IAAK,GAAG,CAAQ,CAC/B,CAMA,SAAS,EAAK,EAAK,CACjB,GAAI,CAAC,KAAK,SAAQ,EAAI,OACtB,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,OACrB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAa,EAAE,OAAO,MAAM,KAAK,WACnC,EAAE,IAAI,QAAU,OAAO,GAAe,UACxC,EAAE,IAAI,OAAO,MAAM,YAAY,eAAgB,OAAO,CAAU,CAAC,EAEnE,MAAM,EAAU,EAAE,QAAQ,SAAW,CAAA,EACvB,EAAO,iBAAiB,EAAa,EAC7C,QAAS,GAAS,CACtB,MAAM,EAAQ,EAAK,aAAa,GAAG,EACnC,GAAI,IAAU,KAAM,OACpB,MAAM,EAAI,SAAS,EAAO,EAAE,EACtB,EAAQ,EAAK,aAAa,OAAO,EACjC,EAAI,IAAU,KAAO,EAAI,SAAS,EAAO,EAAE,EAC3C,EAAM,EAAQ,CAAC,GAAK,EAAQ,CAAC,EACnC,GAAI,CAAC,EAAK,OACV,MAAM,EAAI,EAAI,CAAC,EACX,GAAK,MACT,EAAK,UAAU,OAAO,GAAc,EAAI,GAAO,EAAI,CAAG,CACxD,CAAC,EACD,KAAK,QAAU,EACjB,CAEA,OAAQ,CACN,MAAM,EAAS,KAAK,EAAE,IAAI,OACrB,IACL,EAAO,iBAAiB,IAAM,EAAY,EAAE,QAAS,GAAM,EAAE,UAAU,OAAO,EAAY,CAAC,EAC3F,KAAK,QAAU,GACjB,CAEA,YAAa,CACX,GAAI,KAAK,MAAK,IAAO,SAAU,CAC7B,MAAM,EAAK,KAAK,IAAG,EACf,GAAI,EAAG,MAAK,EAChB,MACF,CACA,KAAK,OAAM,EAAG,QAAS,GAAO,CAC5B,IAAI,EACJ,OAAQ,EAA2B,GAAG,cAAgB,KAAO,OAAS,EAAG,MAAK,CAChF,CAAC,CACH,CAOA,UAAW,CACT,OAEE,KAAK,EAAE,QAAQ,OAEnB,CAEA,KAAM,CACJ,MAAM,EAAO,KAAK,EAAE,OAAO,MAAM,KAC3B,EAAK,IAAS,EAAK,IAAM,KAAK,EAAE,OAAO,MAAM,OACnD,OAAO,EAAK,GAAY,IAAI,CAAE,EAAI,IACpC,CACA,QAAS,CACP,OAAO,GAAU,QAAQ,KAAK,EAAE,OAAO,MAAM,IAAI,IAAM,EACzD,CACA,YAAa,CACX,OAAO,KAAK,EAAE,OAAO,MAAM,OAAS,SACtC,CAMA,aAAc,CACZ,MAAM,EAAK,KAAK,IAAG,EACb,EAAO,KAAK,EAAE,OAAO,MAAM,KACjC,GAAI,CAAC,EAAI,CACP,MAAM,EAAK,GAAQ,EAAK,IAAM,KAAK,EAAE,OAAO,MAAM,MAClD,QAAQ,KACN,4EAA4E,CAAE,mFACtF,EACM,MACF,CACA,MAAM,EAAU,KAAK,SAAQ,EACxB,EAAG,aAAa,CAAO,GAC1B,EAAG,kBAAkB,EAAS,CAC5B,UAAW,EAAK,UAChB,OAAQ,EAAK,OAEb,KAAM,EAAK,OAAS,KAAK,WAAU,EAAK,SAAW,QACnD,KAAM,EAAK,KACX,MAAO,EAAK,KACpB,CAAO,EAEH,KAAK,cAAc,EAAG,aAAa,CAAO,CAAC,EAC3C,KAAK,MAAM,CAAE,CACf,CASA,eAAe,EAAK,CAClB,GAAI,EAAI,OAAS,SACf,OAAO,EAAI,QAAQ,IAAI,CAAC,EAAI,KAAQ,CAClC,KAAM,OAAO,CAAE,EACf,KAAM,EAAI,QAAQ,IAAI,CAAC,EAAI,KAAQ,CACjC,EAAG,OAAO,CAAE,EACZ,EAAG,EAAI,OAAO,CAAE,EAAE,CAAE,CAC9B,EAAU,CACV,EAAQ,EAEJ,GAAI,KAAK,OAAM,EAAI,OAAO,EAAI,OAAO,MAAK,EAC1C,MAAM,EAAQ,KAAK,EAAE,OAAO,MAAM,KAAK,YAAc,QACrD,OAAI,EAAI,OAAS,QACR,CAAC,CAAE,KAAM,EAAO,KAAM,EAAI,OAAO,IAAI,CAAC,EAAG,IAAM,CAAC,EAAG,EAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,EAEtE,CAAC,CAAE,KAAM,EAAO,KAAM,EAAI,OAAO,MAAK,CAAE,CAAE,CACnD,CAKA,OAAO,EAAK,CACV,OAAO,KAAK,UAAU,EAAI,QAAU,EAAI,MAAM,CAChD,CAMA,cAAc,EAAK,CACjB,MAAM,EAAI,KAAK,EACf,KAAK,YAAc,KAAK,OAAO,CAAG,EAClC,EAAE,OAAO,OAAS,KAAK,eAAe,CAAG,EACrC,EAAI,OAAS,WACb,KAAK,OAAM,EACb,EAAE,OAAO,OAAS,EAAI,OAAO,IAAI,MAAM,EAC9B,EAAI,OAAS,YACjB,EAAE,OAAO,QAAO,EAAE,OAAO,MAAQ,CAAA,GACtC,EAAE,OAAO,MAAM,WAAa,EAAI,OAAO,IAAI,MAAM,GACxC,EAAI,OAAS,SACtB,KAAK,gBAAgB,EAAI,KAAK,EAElC,CAMA,gBAAgB,EAAO,CACrB,GAAI,CAAC,MAAM,QAAQ,CAAK,GAAK,EAAM,OAAS,EAAG,OAC/C,MAAM,EAAI,KAAK,EACV,EAAE,OAAO,QAAO,EAAE,OAAO,MAC9B,CAAA,GACI,EAAE,OAAO,MAAM,KAAO,OAAM,EAAE,OAAO,MAAM,IAAM,EAAM,CAAC,GACxD,EAAE,OAAO,MAAM,KAAO,OAAM,EAAE,OAAO,MAAM,IAAM,EAAM,EAAM,OAAS,CAAC,EAC7E,CAEA,MAAM,EAAI,CACJ,KAAK,SACT,KAAK,OAAS,GACd,KAAK,IAAI,iBAAiB,qBAAsB,KAAK,cAAc,EACnE,KAAK,IAAI,iBAAiB,UAAW,KAAK,YAAY,EACtD,KAAK,IAAI,iBAAiB,UAAW,KAAK,YAAY,EACtD,EAAG,GAAG,SAAU,KAAK,SAAS,EAChC,CAKA,eAAe,EAAI,EAAM,EAAM,CAC7B,GAAI,KAAK,MAAK,IAAO,UAAY,CAAC,GAAQ,EAAK,gBAAkB,KAAM,OACvE,MAAM,EAAK,KAAK,IAAG,EACnB,GAAI,CAAC,EAAI,OACT,MAAM,EAAU,KAAK,SAAQ,EACvB,EAAM,EAAG,aAAa,CAAO,EACnC,GAAI,EAAI,OAAS,SAAU,OAC3B,MAAM,EAAM,EAAI,KAAK,EAAK,cAAc,EACpC,GAAO,OACX,EAAG,UAAU,EAAS,CAAG,EACzB,KAAK,kBAAkB,EAAI,CAAG,EAChC,CAGA,WAAY,CACN,KAAK,MAAK,IAAO,UAAY,KAAK,WACtC,KAAK,SAAW,GAChB,QAAQ,QAAO,EAAG,KAAK,IAAM,CAC3B,KAAK,SAAW,GACZ,MAAK,EAAE,QAAQ,aACnB,KAAK,kBAAiB,CACxB,CAAC,EACH,CAOA,mBAAoB,CAClB,GAAI,KAAK,MAAK,IAAO,SAAU,OAC/B,MAAM,EAAK,KAAK,IAAG,EACnB,GAAI,CAAC,EAAI,OACT,MAAM,EAAM,EAAG,aAAa,KAAK,SAAQ,CAAE,EACrC,EAAM,KAAK,OAAO,CAAG,EAC3B,GAAI,IAAQ,KAAK,YAAa,CAC5B,KAAK,cAAa,EAClB,MACF,CACA,KAAK,YAAc,EACnB,KAAK,IAAI,aAAa,KAAK,eAAe,CAAG,EAAG,EAAI,CACtD,CACA,cAAe,CACb,GAAI,KAAK,MAAK,IAAO,SAAU,OAC/B,MAAM,EAAS,KAAK,EAAE,OAAO,OAC7B,GAAI,CAAC,GAAU,EAAO,SAAW,EAAG,CAClC,KAAK,gBAAe,EACpB,MACF,CACA,KAAK,cAAa,CACpB,CAGA,iBAAkB,CACZ,KAAK,WACT,KAAK,SAAW,GAChB,QAAQ,QAAO,EAAG,KAAK,IAAM,CAE3B,GADA,KAAK,SAAW,GACZ,KAAK,EAAE,QAAQ,YAAa,OAChC,MAAM,EAAK,KAAK,IAAG,EACnB,GAAI,CAAC,EAAI,OACT,MAAM,EAAM,EAAG,aAAa,KAAK,SAAQ,CAAE,EACrC,EAAS,KAAK,eAAe,CAAG,EACjC,EAAO,SACZ,KAAK,YAAc,KAAK,OAAO,CAAG,EAClC,KAAK,IAAI,aAAa,EAAQ,EAAI,EACpC,CAAC,EACH,CAOA,eAAgB,CACd,MAAM,EAAK,KAAK,IAAG,EACnB,GAAI,CAAC,EAAI,OACT,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,OACrB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAU,KAAK,SAAQ,EACvB,EAAS,EAAG,SAAS,CAAO,EAC5B,EAAa,EAAE,OAAO,MAAM,KAAK,WACnC,EAAE,IAAI,QAAU,OAAO,GAAe,UACxC,EAAE,IAAI,OAAO,MAAM,YAAY,eAAgB,OAAO,CAAU,CAAC,EAEnE,MAAM,EAAa,aAAkB,IAC/B,EAAU,MAAM,QAAQ,CAAM,EAC9B,EAAO,EAAG,aAAa,CAAO,EAAE,KACtC,EAAO,iBAAiB,EAAoB,EAAE,QAAS,GAAS,CAC9D,MAAM,EAAQ,EAAK,aAAa,GAAG,EACnC,GAAI,IAAU,KAAM,OACpB,MAAM,EAAM,EAAK,SAAS,EAAO,EAAE,CAAC,EACpC,IAAI,EAAM,GACN,EACF,EAAM,CACN,EAAO,IAAI,CAAG,EACL,GAAW,MAAM,QAAQ,CAAG,IACrC,EAAM,EAAI,CAAC,GAAK,EAAO,CAAC,GAAK,EAAI,CAAC,GAAK,EAAO,CAAC,GAEjD,EAAK,UAAU,OAAO,GAAc,CAAG,CACzC,CAAC,EACD,KAAK,QAAU,CAAC,CAAC,CACnB,CAKA,kBAAkB,EAAI,EAAK,CACzB,IAAI,EACJ,MAAM,EAAO,EAAc,EAAe,CAAA,EAAI,EAAG,MAAK,CAAE,EAAG,CACzD,cAAe,KAAK,SAAQ,EAC5B,IAAA,CACN,CAAK,EACK,EAAS,KAAK,EAAE,OAAO,MAAM,OAC/B,OAAO,EAAO,cAAiB,YACjC,EAAO,aAAa,KAAK,IAAK,CAAI,GAEnC,EAAK,KAAK,IAAI,SAAW,MAAgB,EAAG,UAAU,eAAgB,CAAC,KAAK,IAAK,CAAI,CAAC,CACzF,CACA,UAAW,CACT,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAExB,GADA,KAAK,MAAK,EACN,KAAK,OAAQ,EACd,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,qBAAsB,KAAK,cAAc,GAClH,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,UAAW,KAAK,YAAY,GACrG,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,UAAW,KAAK,YAAY,EACtG,MAAM,EAAK,KAAK,IAAG,EACf,IACF,EAAG,IAAI,SAAU,KAAK,SAAS,EAC/B,EAAG,gBAAgB,KAAK,SAAQ,CAAE,GAEpC,KAAK,OAAS,EAChB,CACF,CACF,CACA,GAAW,iBAAiB,CAAE,YAAa,EAAW,CAAE,EACxD,MAAM,GAEJ,GAEF,GAAG,oBAAuB,GAAS,GAAY,YAAY,CAAI,EAC/D,GAAG,gBAAmB,GAAO,GAAY,IAAI,CAAE,EAC/C,MAAM,GAAa,2BACb,GAAQ,CAAC,QAAS,QAAS,OAAO,EAClC,GAAU,EACV,GAAgB,EAChB,GAAa,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACpC,GAAgB,CAAC,SAAU,SAAU,UAAW,UAAU,EAC1D,GAAe,CACnB,OAAQ,SACR,OAAQ,SACR,QAAS,SACT,SAAU,QACZ,EACM,GAAc,CAClB,UACA,UACA,UACA,UACA,UACA,SACF,EACM,GAAa,8QACnB,MAAM,EAAS,CAKb,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,OAAS,GACd,KAAK,MAAQ,KACb,KAAK,QAAU,KACf,KAAK,UAAY,GACjB,KAAK,WAAa,EAClB,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,MAAQ,KAAK,MAAM,KAAK,IAAI,EACjC,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,GACnD,KAAK,iBAAgB,GAAM,KAAK,cAAa,GAAM,KAAK,gBAAe,IACzE,KAAK,MAAK,CAEd,CACA,kBAAmB,CACjB,MAAM,EAAM,KAAK,EAAE,OAAO,MAAM,IAChC,MAAO,CAAC,EAAE,GAAO,EAAI,QACvB,CACA,iBAAkB,CAChB,MAAM,EAAM,KAAK,EAAE,OAAO,MAAM,IAChC,MAAO,CAAC,EAAE,GAAO,EAAI,QACvB,CACA,cAAe,CACb,MAAM,EAAM,KAAK,EAAE,OAAO,MAAM,IAChC,MAAO,CAAC,EAAE,GAAO,EAAI,KACvB,CAGA,SAAS,EAAG,EAAO,CACjB,IAAI,EAAO,EACP,EAAK,IACT,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,MAAM,EAAI,KAAK,IAAI,EAAM,CAAC,EAAI,CAAC,EAC3B,EAAI,IACN,EAAK,EACL,EAAO,EAAM,CAAC,EAElB,CACA,OAAO,CACT,CAKA,OAAO,EAAG,CACR,GAAI,CAAC,KAAK,aAAY,GAAM,OAAO,GAAM,SAAU,OAAO,EAC1D,MAAM,EAAI,KAAK,EAAE,QAAQ,WACzB,OAAO,GAAK,MAAM,QAAQ,EAAE,MAAM,GAAK,EAAE,OAAO,OAAS,KAAK,SAAS,EAAG,EAAE,MAAM,EAAI,CACxF,CAKA,OAAO,EAAG,EAAI,CACZ,GAAI,CAAC,KAAK,aAAY,GAAM,OAAO,GAAM,SAAU,OAAO,EAC1D,MAAM,EAAS,KAAK,EAAE,QAAQ,WACxB,EAAI,GAAU,EAAO,CAAE,EAC7B,OAAO,GAAK,MAAM,QAAQ,EAAE,MAAM,GAAK,EAAE,OAAO,OAAS,KAAK,SAAS,EAAG,EAAE,MAAM,EAAI,CACxF,CAEA,UAAU,EAAM,CACd,MAAM,EAAI,KAAK,EAAE,OAAO,YACxB,GAAI,CAAC,EAAG,MAAO,CAAA,EACf,MAAM,EAAM,IAAS,QAAU,SAAW,EAC1C,OAAO,MAAM,QAAQ,EAAE,CAAG,CAAC,EAAI,EAAE,CAAG,EAAI,CAAA,CAC1C,CAEA,aAAa,EAAM,CACjB,OAAK,EACD,EAAK,YAAc,GAAa,GAChC,EAAK,YAAc,GAAc,GAC9B,KAAK,iBAAgB,EAHV,EAIpB,CACA,eAAgB,CACd,OAAO,GAAM,KAAM,GAAM,KAAK,UAAU,CAAC,EAAE,KAAM,GAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CAC9E,CACA,OAAQ,CACF,KAAK,SACT,KAAK,OAAS,GACd,KAAK,IAAI,iBAAiB,UAAW,KAAK,WAAW,EACrD,KAAK,IAAI,iBAAiB,UAAW,KAAK,WAAW,EACvD,CAOA,aAAc,CAGZ,GAFA,KAAK,aAAa,EAAK,EACvB,KAAK,QAAO,EACR,KAAK,UAAW,CAClB,MAAM,EAAM,KAAK,EAAE,IAAI,OAAS,KAAK,EAAE,IAAI,MAAM,KAC7C,IACF,EAAI,MAAM,OAAS,YACnB,EAAI,iBAAiB,QAAS,KAAK,eAAgB,EAAI,EAE3D,CACF,CAMA,SAAU,CACR,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,OAChB,IACL,GAAM,QAAS,GAAS,CACtB,KAAK,UAAU,CAAI,EAAE,QAAQ,CAAC,EAAM,IAAU,CACvC,KAAK,aAAa,CAAI,IACtB,EAAK,KACR,EAAK,GAAK,kBAAoB,EAAO,IAAM,EAAQ,IAAM,EAAE,QAAQ,SAErE,EAAO,iBAAiB,IAAM,EAAK,EAAE,EAAE,QAAS,GAAO,CACjD,EAAG,aACP,EAAG,WAAa,GAChB,EAAG,MAAM,OAAS,OAClB,EAAG,UAAU,IAAI,EAAU,EAC3B,EAAG,iBACD,YACC,GAAM,KAAK,QAAQ,EAAG,EAAM,CAAK,CAC9C,EACU,EAAG,iBACD,aACC,GAAM,KAAK,QAAQ,EAAG,EAAM,CAAK,CAC9C,EACU,EAAG,iBAAiB,WAAa,GAAM,CACrC,EAAE,eAAc,EAChB,EAAE,gBAAe,EACjB,KAAK,WAAW,EAAM,EAAO,CAAE,OAAQ,EAAI,CAAE,CAC/C,CAAC,EACH,CAAC,EACH,CAAC,CACH,CAAC,EACG,KAAK,gBAAe,GAAI,KAAK,eAAc,EACjD,CAKA,QAAQ,EAAG,EAAM,EAAO,CACtB,GAAI,EAAE,QAAU,EAAE,SAAW,EAAG,OAChC,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,IAAI,QAAU,EAAE,IAAI,OAAO,cACzC,GAAI,CAAC,EAAK,OACV,EAAE,gBAAe,EACb,EAAE,YAAY,EAAE,eAAc,EAElC,MAAM,EADU,EAAE,OAAS,aACN,EAAE,QAAQ,CAAC,EAAI,EAC9B,EAAU,EAAE,IAAI,OAAS,EAAE,IAAI,MAAM,KACrC,EAAM,GAAW,EAAQ,aAAe,EAAQ,aAAY,EAAK,KACjE,EAAO,KAAK,UAAU,CAAI,EAAE,CAAK,EACvC,IAAI,EAAO,OACP,EAAO,KACP,EAAQ,EACR,EAAQ,EACZ,GAAI,IAAS,SAAW,EAAK,IAAM,OACjC,EAAO,EAAE,IAAI,OAAO,cAAc,+BAAiC,EAAK,EAAE,EACtE,GAAM,CACR,MAAM,EAAI,EAAK,sBAAqB,EAChC,KAAK,IAAI,EAAG,QAAU,EAAE,IAAI,GAAK,GAAS,EAAO,YAC5C,KAAK,IAAI,EAAG,QAAU,EAAE,KAAK,GAAK,KAAS,EAAO,aAC3D,EAAQ,WAAW,EAAK,aAAa,GAAG,CAAC,GAAK,EAC9C,EAAQ,WAAW,EAAK,aAAa,OAAO,CAAC,GAAK,CACpD,CAEF,KAAK,MAAQ,CACX,KAAA,EACA,MAAA,EACA,KAAA,EACA,IAAK,MAAM,KAAK,EAAE,IAAI,OAAO,iBAAiB,IAAM,EAAK,EAAE,CAAC,EAC5D,KAAA,EACA,KAAA,EACA,MAAA,EACA,MAAA,EACA,OAAQ,EAAG,QACX,OAAQ,EAAG,QACX,OAAQ,GAAO,EAAI,EAAI,EAAI,EAAI,EAC/B,OAAQ,GAAO,EAAI,EAAI,EAAI,EAAI,EAC/B,QAAS,EACT,QAAS,EACT,MAAO,EACb,EACI,EAAI,iBAAiB,YAAa,KAAK,OAAO,EAC9C,EAAI,iBAAiB,YAAa,KAAK,QAAS,CAAE,QAAS,EAAK,CAAE,EAClE,EAAI,iBAAiB,UAAW,KAAK,KAAK,EAC1C,EAAI,iBAAiB,WAAY,KAAK,KAAK,CAC7C,CAEA,QAAQ,EAAI,CACV,MAAM,EAAI,KAAK,MACf,GAAI,CAAC,EAAG,OACJ,EAAG,YAAY,EAAG,eAAc,EACpC,MAAM,EAAM,EAAG,OAAS,YAAc,EAAG,QAAQ,CAAC,EAAI,EAMtD,GALA,EAAE,SAAW,EAAI,QAAU,EAAE,QAAU,EAAE,OACzC,EAAE,SAAW,EAAI,QAAU,EAAE,QAAU,EAAE,QACrC,KAAK,IAAI,EAAE,OAAO,EAAI,IAAiB,KAAK,IAAI,EAAE,OAAO,EAAI,MAC/D,EAAE,MAAQ,IAER,EAAE,OAAS,OAAQ,CACrB,MAAM,EAAI,aAAa,EAAE,OAAO,IAAI,EAAE,OAAO,IAC7C,EAAE,IAAI,QAAS,GAAO,EAAG,aAAa,YAAa,CAAC,CAAC,CACvD,MAAW,EAAE,OACP,EAAE,OAAS,aACb,EAAE,KAAK,aAAa,IAAK,EAAE,MAAQ,EAAE,OAAO,EAC5C,EAAE,KAAK,aAAa,QAAS,KAAK,IAAI,EAAG,EAAE,MAAQ,EAAE,OAAO,CAAC,GACpD,EAAE,OAAS,aACpB,EAAE,KAAK,aAAa,QAAS,KAAK,IAAI,EAAG,EAAE,MAAQ,EAAE,OAAO,CAAC,EAGnE,CACA,OAAQ,CACN,MAAM,EAAI,KAAK,MAGf,GAFA,KAAK,MAAQ,KACb,KAAK,sBAAqB,EACtB,CAAC,GAAK,CAAC,EAAE,MAAO,CACd,IACF,EAAE,IAAI,QAAS,GAAO,EAAG,gBAAgB,WAAW,CAAC,EACrD,KAAK,WAAW,EAAE,KAAM,EAAE,KAAK,GAEjC,MACF,CACA,MAAM,EAAO,KAAK,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EACtC,IACL,KAAK,YAAY,EAAG,CAAI,EACxB,EAAE,IAAI,QAAS,GAAO,EAAG,gBAAgB,WAAW,CAAC,EACrD,KAAK,YAAY,EAAE,KAAM,EAAM,EAAE,KAAK,EACtC,KAAK,YAAY,UAAU,EAC3B,KAAK,aAAa,EAAE,KAAM,EAAM,EAAE,KAAK,EACzC,CAOA,YAAY,EAAO,CACjB,IAAI,EAAI,GACP,GAAM,EAAK,KAAK,IAAI,UAAY,KAAO,OAAS,EAAG,WAAa,MAAgB,EAAG,KAAK,EAAI,CAAK,CACpG,CAKA,YAAY,EAAG,EAAM,CACnB,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,OAAO,UAAY,EAAE,SAAW,EAAE,QAAQ,OAAS,EAAE,OAAO,WAAa,EAC1F,GAAI,EAAE,OAAS,QAAS,CACtB,KAAM,CAAE,KAAA,EAAM,KAAA,CAAI,EAAK,KAAK,aAAa,EAAM,EAAE,QAAS,EAAE,OAAO,EAEnE,GADA,EAAK,EAAI,KAAK,OAAO,CAAI,EACrB,GAAQ,KAAM,CAChB,MAAM,EAAK,EAAK,YAAc,EACxB,EAAM,EAAE,QAAQ,eACtB,EAAK,EAAI,KAAK,OAAO,EAAM,GAAO,EAAI,CAAE,EAAI,EAAI,CAAE,EAAE,CAAC,EAAI,CAAC,CAC5D,CACA,MACF,CACA,GAAI,EAAE,OAAS,QAAS,CACtB,GAAI,OAAO,EAAK,GAAM,SAAU,OAChC,GAAI,EAAE,OAAS,OACT,OAAO,EAAK,IAAO,UACrB,EAAK,GAAK,EACV,EAAK,IAAM,GAEX,EAAK,EAAI,KAAK,OAAO,EAAK,EAAI,CAAM,UAE7B,EAAE,OAAS,aAAe,EAAE,OAAS,YAAa,CAC3D,MAAM,EAAU,EAAK,IAAM,MAAQ,EAAK,GAAK,EAAK,IACrC,EAAE,OAAS,YAAc,CAAC,EAAU,GACvC,EAAK,EAAI,KAAK,OAAO,EAAK,EAAI,CAAM,EACrC,OAAO,EAAK,IAAO,WAAU,EAAK,GAAK,KAAK,OAAO,EAAK,GAAK,CAAM,EAC9E,CACA,MACF,CACA,GAAI,EAAE,OAAS,QAAS,CACtB,MAAM,EAAK,EAAK,YAAc,EACxB,EAAM,EAAE,QAAQ,eAChB,EAAK,GAAO,EAAI,CAAE,EAAI,EAAI,CAAE,EAAE,CAAC,EAAI,EACnC,EAAS,EAAE,QAAQ,OAAS,EAAE,QAAQ,OAAO,CAAE,EAAI,KACzD,GAAI,GAAU,MAAQ,CAAC,EAAE,OAAO,WAAY,OAC5C,MAAM,EAAS,CAAC,EAAE,SAAW,EAAS,EAAE,OAAO,YAC3C,OAAO,EAAK,IAAO,UACjB,OAAO,EAAK,GAAM,WAAU,EAAK,GAAK,GAC1C,EAAK,IAAM,GACF,OAAO,EAAK,GAAM,WAC3B,EAAK,EAAI,KAAK,OAAO,EAAK,EAAI,EAAQ,CAAE,EAE5C,CACF,CAMA,aAAa,EAAM,EAAS,EAAS,CACnC,MAAM,EAAI,KAAK,EACT,GAAa,EAAE,OAAO,MAAM,OAAS,YAAc,EAAE,OAAO,MAAM,wBAA0B,CAAC,EAAE,UAAU,mBAC/G,IAAI,EAAO,EAAK,EACZ,CAAC,GAAa,OAAO,EAAK,GAAM,UAAY,EAAE,OAAO,YACvD,EAAO,EAAK,EAAI,GAAW,EAAE,QAAQ,OAAS,EAAE,OAAO,YAEzD,IAAI,EAAO,EAAK,EAChB,MAAM,EAAK,EAAK,YAAc,EACxB,EAAM,EAAE,QAAQ,eAChB,EAAK,GAAO,EAAI,CAAE,EAAI,EAAI,CAAE,EAAE,CAAC,EAAI,EACnC,EAAS,EAAE,QAAQ,OAAS,EAAE,QAAQ,OAAO,CAAE,EAAI,KACnD,EAAO,EAAE,OAAO,MAAM,CAAE,GAAK,EAAE,OAAO,MAAM,CAAE,EAAE,YACtD,OAAI,OAAO,EAAK,GAAM,UAAY,GAAU,MAAQ,CAAC,GAAQ,EAAE,OAAO,aACpE,EAAO,EAAK,EAAI,GAAW,EAAS,EAAE,OAAO,aAExC,CAAE,KAAA,EAAM,KAAA,CAAI,CACrB,CAOA,YAAY,EAAM,EAAM,EAAO,CAE7B,MAAM,EADI,KAAK,EACE,IAAI,OACf,EAAc,KAAK,IAAI,YAC7B,GAAI,CAAC,GAAU,CAAC,EAAa,OAC7B,EAAO,iBAAiB,IAAM,EAAK,EAAE,EAAE,QAAS,GAAO,EAAG,OAAM,CAAE,EAClE,MAAM,EAAQ,EAAO,cAAc,eAAiB,EAAO,cAAc,EACzE,GAAI,CAAC,EAAO,OACR,IAAS,SAAW,EAAY,kBAClC,EAAY,kBAAkB,mBAAmB,EAAM,EAAO,CAAK,EAC1D,IAAS,SAAW,EAAY,iBACzC,EAAY,iBAAiB,mBAAmB,EAAM,EAAO,CAAK,EACzD,IAAS,SAAW,EAAY,kBACzC,EAAY,iBAAiB,mBAAmB,EAAM,EAAO,CAAK,EAEpE,MAAM,EAAU,EAAO,cACrB,eAAiB,EAAO,qBAAuB,EAAK,EAC1D,EACI,GAAI,GAAW,EAAY,SAAW,EAAK,OAAS,EAAK,MAAM,KAAM,CACnE,MAAM,EAAS,EAAY,QAAQ,oBAAoB,EAAS,CAAI,EAChE,GAAU,EAAQ,YACpB,EAAQ,WAAW,aAAa,EAAO,KAAM,CAAO,CAExD,CACA,KAAK,QAAO,CACd,CAMA,qBAAqB,EAAO,EAAM,CAChC,IAAI,EACJ,MAAM,EAAS,KAAK,EAAE,OAAO,MAAM,OAC/B,OAAO,EAAO,CAAK,GAAM,YAC3B,EAAO,CAAK,EAAE,KAAK,IAAK,CAAI,GAE7B,EAAK,KAAK,IAAI,SAAW,MAAgB,EAAG,UAAU,EAAO,CAAC,KAAK,IAAK,CAAI,CAAC,CAChF,CAEA,aAAa,EAAM,EAAM,EAAO,CAC9B,MAAM,EAAO,CAAE,KAAA,EAAM,GAAI,EAAK,GAAI,MAAA,EAAO,EAAG,EAAK,EAAG,EAAG,EAAK,CAAC,EACzD,EAAK,IAAM,OAAM,EAAK,GAAK,EAAK,IAChC,EAAK,IAAM,OAAM,EAAK,GAAK,EAAK,IACpC,KAAK,qBAAqB,oBAAqB,CAAI,CACrD,CAMA,aAAc,CACZ,GAAI,KAAK,UAAW,OACpB,MAAM,EAAM,KAAK,EAAE,IAAI,OAAS,KAAK,EAAE,IAAI,MAAM,KAC5C,IACL,KAAK,UAAY,GACjB,EAAI,MAAM,OAAS,YACnB,EAAI,iBAAiB,QAAS,KAAK,eAAgB,EAAI,EACvD,KAAK,aAAY,EACnB,CAEA,YAAa,CACX,GAAI,CAAC,KAAK,UAAW,OACrB,KAAK,UAAY,GACjB,MAAM,EAAM,KAAK,EAAE,IAAI,OAAS,KAAK,EAAE,IAAI,MAAM,KAC7C,IACF,EAAI,MAAM,OAAS,GACnB,EAAI,oBAAoB,QAAS,KAAK,eAAgB,EAAI,GAE5D,KAAK,aAAY,CACnB,CAEA,eAAe,EAAG,CAChB,GAAI,CAAC,KAAK,UAAW,OACrB,EAAE,eAAc,EAChB,EAAE,gBAAe,EACjB,MAAM,EAAM,KAAK,aAAa,EAAE,QAAS,EAAE,OAAO,EAClD,KAAK,WAAU,EACV,GACL,KAAK,SAAS,EAAI,EAAG,EAAI,CAAC,CAC5B,CAQA,SAAS,EAAG,EAAG,EAAO,CAAA,EAAI,CACxB,MAAM,EAAI,KAAK,EACf,KAAK,MAAK,EACV,KAAK,YAAc,EACnB,MAAM,EAAK,sBAAwB,KAAK,WAAa,IAAM,EAAE,QAAQ,QAC/D,EAAO,EAAQ,OAAO,IAAI,GAAO,EAAG,gBAAiB,CACzD,EAAA,EACA,EAAA,EACA,GAAA,EACA,UAAW,GACX,MAAO,CAAE,KAAM,EAAK,MAAQ,MAAM,CACxC,CAAK,EACI,EAAE,OAAO,cAAa,EAAE,OAAO,YAAc,CAAA,GAC7C,MAAM,QAAQ,EAAE,OAAO,YAAY,MAAM,IAAG,EAAE,OAAO,YAAY,OAAS,CAAA,GAC/E,EAAE,OAAO,YAAY,OAAO,KAAK,CAAI,EACrC,MAAM,EAAQ,EAAE,OAAO,YAAY,OAAO,OAAS,EACnD,YAAK,YAAY,QAAS,EAAM,CAAK,EACrC,KAAK,YAAY,YAAY,EAC7B,KAAK,aAAa,QAAS,EAAM,CAAK,EACtC,KAAK,WAAW,QAAS,EAAO,CAAE,OAAQ,EAAI,CAAE,EACzC,CACT,CAYA,aAAa,EAAM,EAAK,EAAO,CAAA,EAAI,CACjC,MAAM,EAAI,KAAK,EACf,KAAK,MAAK,EACV,KAAK,YAAc,EACnB,MAAM,EAAK,sBAAwB,KAAK,WAAa,IAAM,EAAE,QAAQ,QAC/D,EAAO,IAAS,IAAM,QAAU,QAChC,EAAW,IAAS,QAAU,IAAI,GAAO,EAAG,gBAAkB,IAAI,GAAO,EAAG,gBAC5E,EAAO,CACX,GAAA,EACA,UAAW,GACX,gBAAiB,EAAK,iBAAmB,KAAO,EAAK,gBAAkB,EACvE,MAAO,CAAE,KAAM,EAAK,MAAQ,EAAE,CACpC,EACQ,EAAK,QACP,EAAK,YAAc,EAAK,MACxB,EAAK,MAAM,YAAc,EAAK,OAE5B,IAAS,QAAS,EAAK,EAAI,EAC1B,EAAK,EAAI,EACd,MAAM,EAAO,EAAQ,OAAO,EAAU,CAAI,EACrC,EAAE,OAAO,cAAa,EAAE,OAAO,YAAc,CAAA,GAC7C,MAAM,QAAQ,EAAE,OAAO,YAAY,CAAI,CAAC,IAAG,EAAE,OAAO,YAAY,CAAI,EAAI,CAAA,GAC7E,EAAE,OAAO,YAAY,CAAI,EAAE,KAAK,CAAI,EACpC,MAAM,EAAQ,EAAE,OAAO,YAAY,CAAI,EAAE,OAAS,EAClD,YAAK,YAAY,EAAM,EAAM,CAAK,EAClC,KAAK,YAAY,YAAY,EAC7B,KAAK,aAAa,EAAM,EAAM,CAAK,EAC/B,EAAK,SAAW,IAAO,KAAK,WAAW,EAAM,EAAO,CAAE,OAAQ,EAAI,CAAE,EACjE,CACT,CAMA,aAAa,EAAS,EAAS,CAC7B,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,QAAU,EAAE,IAAI,OAAO,cAAc,kBAAkB,EAC5E,GAAI,CAAC,EAAQ,OAAO,KACpB,MAAM,EAAI,EAAO,sBAAqB,EACtC,GAAI,CAAC,EAAE,OAAS,CAAC,EAAE,OAAQ,OAAO,KAClC,MAAM,GAAM,EAAU,EAAE,MAAQ,EAAE,MAC5B,GAAM,EAAU,EAAE,KAAO,EAAE,OAC3B,EAAO,EAAE,QAAQ,KACjB,EAAS,EAAE,QAAQ,OACnB,EAAO,EAAE,QAAQ,SAAW,EAAE,QAAQ,QAAQ,CAAC,GAAK,KAAO,EAAE,QAAQ,QAAQ,CAAC,EAAI,EAAE,QAAQ,KAC5F,EAAS,EAAE,QAAQ,QAAU,EAAE,QAAQ,OAAO,CAAC,GAAK,KAAO,EAAE,QAAQ,OAAO,CAAC,EAAI,EAAE,QAAQ,KAAO,EAAE,QAAQ,KAClH,IAAI,EAAI,EAAO,EAAK,EACpB,MAAM,EAAI,GAAQ,EAAI,GAAM,EAE5B,OADmB,EAAE,OAAO,MAAM,OAAS,YAAc,EAAE,OAAO,MAAM,wBAA0B,CAAC,EAAE,UAAU,qBAChG,EAAI,KAAK,MAAM,CAAC,GACxB,CAAE,EAAA,EAAG,EAAA,CAAC,CACf,CAEA,aAAa,EAAM,EAAM,EAAO,CAC9B,MAAM,EAAO,CAAE,KAAA,EAAM,GAAI,EAAK,GAAI,MAAA,CAAK,EACnC,OAAO,EAAK,EAAM,MAAa,EAAK,EAAI,EAAK,GAC7C,OAAO,EAAK,EAAM,MAAa,EAAK,EAAI,EAAK,GACjD,KAAK,qBAAqB,oBAAqB,CAAI,CACrD,CAGA,gBAAiB,CAEf,MAAM,EADI,KAAK,EACE,IAAI,OACrB,GAAI,CAAC,GAAU,EAAO,cAAc,yBAAyB,EAAG,OAChE,MAAM,EAAM,EAAO,cACb,EAAM,EAAI,cAAc,KAAK,EACnC,EAAI,UAAY,yBAChB,MAAM,EAAI,EAAI,MACd,EAAE,SAAW,WACb,EAAE,IAAM,MACR,EAAE,KAAO,MACT,EAAE,OAAS,KACX,MAAM,EAAM,EAAI,cAAc,QAAQ,EACtC,EAAI,KAAO,SACX,EAAI,UAAY,qBAChB,EAAI,YAAc,SAClB,MAAM,EAAK,EAAI,MACf,EAAG,OAAS,UACZ,EAAG,KAAO,kBACV,EAAG,QAAU,UACb,EAAG,aAAe,MAClB,EAAG,OAAS,oBACZ,EAAG,MAAQ,UACX,EAAG,WAAa,OAChB,EAAI,iBAAiB,QAAU,GAAM,CACnC,EAAE,gBAAe,EACb,KAAK,UAAW,KAAK,WAAU,EAC9B,KAAK,YAAW,CACvB,CAAC,EACD,EAAI,YAAY,CAAG,EACnB,EAAO,YAAY,CAAG,EACtB,KAAK,aAAY,CACnB,CAEA,cAAe,CACb,MAAM,EAAS,KAAK,EAAE,IAAI,OACpB,EAEJ,GAAU,EAAO,cAAc,qBAAqB,EAEjD,IACD,KAAK,WACP,EAAI,MAAM,WAAa,UACvB,EAAI,MAAM,MAAQ,OAClB,EAAI,YAAc,mBAElB,EAAI,MAAM,WAAa,OACvB,EAAI,MAAM,MAAQ,UAClB,EAAI,YAAc,UAEtB,CAMA,aAAc,CACZ,MAAM,EAAM,KAAK,EAAE,OAAO,MAAM,IAChC,OAAO,GAAO,MAAM,QAAQ,EAAI,UAAU,GAAK,EAAI,WAAW,OAAS,EAAI,WAAa,EAC1F,CAKA,OAAO,SAAS,EAAK,CACnB,MAAM,EAAI,OAAO,GAAO,EAAE,EAAE,QAAQ,IAAK,EAAE,EACrC,EAAO,EAAE,SAAW,EAAI,EAAE,MAAM,EAAE,EAAE,IAAK,GAAM,EAAI,CAAC,EAAE,KAAK,EAAE,EAAI,EACjE,EAAI,SAAS,EAAM,EAAE,EAC3B,GAAI,MAAM,CAAC,GAAK,EAAK,SAAW,EAAG,MAAO,GAC1C,MAAM,EAAI,GAAK,GAAK,IACd,EAAI,GAAK,EAAI,IACb,EAAI,EAAI,IACd,OAAQ,KAAQ,EAAI,KAAQ,EAAI,KAAQ,GAAK,IAAM,GACrD,CAEA,OAAO,QAAQ,EAAO,CACpB,MAAM,EAAK,GAAS,EAAM,WAC1B,OAAO,IAAO,QAAU,SAAS,OAAO,CAAE,EAAG,EAAE,GAAK,GACtD,CAOA,SAAS,EAAK,EAAS,EAAO,EAAS,EAAY,EAAO,CACxD,MAAM,EAAI,EAAI,cAAc,QAAQ,EACpC,OAAA,EAAE,KAAO,SACT,EAAE,UAAY,sBAAwB,EAAa,IAAM,EAAa,IACtE,EAAE,MAAQ,EACV,EAAE,aAAa,aAAc,CAAK,EAC9B,EAAO,EAAE,UAAY,EACpB,EAAE,YAAc,EACrB,EAAE,iBAAiB,YAAc,GAAM,EAAE,eAAc,CAAE,EACzD,EAAE,iBAAiB,QAAU,GAAM,CACjC,EAAE,gBAAe,EACjB,EAAO,CACT,CAAC,EACM,CACT,CAKA,WAAW,EAAK,EAAM,CACpB,MAAM,EAAM,EAAI,cAAc,MAAM,EACpC,OAAA,EAAI,UAAY,2BAChB,EAAI,YAAc,EACX,CACT,CAOA,UAAU,EAAK,EAAG,EAAM,EAAY,CAClC,MAAM,EAAK,EAAI,cAAc,QAAQ,EACrC,OAAA,EAAG,KAAO,SACV,EAAG,UAAY,yBAA2B,EAAa,IAAM,EAAa,IAC1E,EAAG,MAAQ,EACX,EAAG,aAAa,aAAc,SAAW,CAAC,EAC1C,EAAG,QAAQ,MAAQ,EACnB,EAAG,MAAM,WAAa,EACtB,EAAG,iBAAiB,YAAc,GAAM,EAAE,eAAc,CAAE,EAC1D,EAAG,iBAAiB,QAAU,GAAM,CAClC,EAAE,gBAAe,EACjB,EAAK,CAAC,CACR,CAAC,EACM,CACT,CAMA,WAAW,EAAM,EAAO,EAAO,CAAA,EAAI,CACjC,MAAM,EAAI,KAAK,EACT,EAAO,KAAK,UAAU,CAAI,EAAE,CAAK,EACjC,EAAS,EAAE,IAAI,OACf,EAAS,EAAE,IAAI,OACrB,GAAI,CAAC,GAAQ,CAAC,EAAK,IAAM,CAAC,GAAU,CAAC,EAAQ,OAC7C,KAAK,aAAa,EAAK,EACvB,MAAM,EAAM,EAAO,cACb,EAAO,EAAI,cAAc,KAAK,EACpC,EAAK,UAAY,sBACjB,EAAK,aAAa,OAAQ,QAAQ,EAClC,EAAK,aAAa,aAAc,WAAW,EAC3C,EAAK,MAAM,WAAa,SACxB,MAAM,EAAU,EAAI,cAAc,KAAK,EACvC,EAAQ,UAAY,0BACpB,MAAM,EAAQ,EAAI,cAAc,OAAO,EACvC,EAAM,KAAO,OACb,EAAM,UAAY,wBAClB,EAAM,YAAc,YACpB,EAAM,MAAQ,EAAK,OAAS,EAAK,MAAM,MAAQ,GAC/C,EAAQ,YAAY,CAAK,EACzB,EAAQ,YACN,KAAK,SACH,EACA,GACA,cACA,IAAM,KAAK,YAAW,EACtB,6BACA,EACR,CACA,EACI,EAAK,YAAY,CAAO,EACxB,MAAM,EAAW,EAAI,cAAc,KAAK,EACxC,EAAS,UAAY,0BACjB,IAAS,SACX,EAAS,YAAY,KAAK,WAAW,EAAK,OAAO,CAAC,EAEpD,KAAK,YAAW,EAAG,QAAS,GAAM,CAChC,EAAS,YAAY,KAAK,UAAU,EAAK,EAAI,GAAQ,KAAK,YAAY,CAAG,CAAC,CAAC,CAC7E,CAAC,EACD,MAAM,EAAM,EAAI,cAAc,MAAM,EASpC,GARA,EAAI,UAAY,qBAChB,EAAS,YAAY,CAAG,EACxB,EAAS,YACP,KAAK,SAAS,EAAK,IAAK,OAAQ,IAAM,KAAK,YAAW,EAAI,0BAA0B,CAC1F,EACI,EAAS,YAAY,KAAK,SAAS,EAAK,KAAM,eAAgB,IAAM,KAAK,UAAU,EAAE,CAAC,CAAC,EACvF,EAAS,YAAY,KAAK,SAAS,EAAK,KAAM,cAAe,IAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EACrF,EAAK,YAAY,CAAQ,EACrB,IAAS,QAAS,CACpB,MAAM,EAAU,EAAI,cAAc,KAAK,EACvC,EAAQ,UAAY,0BACpB,EAAQ,YAAY,KAAK,WAAW,EAAK,MAAM,CAAC,EAChD,KAAK,YAAW,EAAG,QAAS,GAAM,CAChC,EAAQ,YACN,KAAK,UACH,EACA,EACC,GAAQ,KAAK,gBAAgB,CAAG,EACjC,6BACZ,CACA,CACM,CAAC,EACD,EAAK,YAAY,CAAO,CAC1B,CACA,GAAI,IAAS,QAAS,CACpB,MAAM,EAAY,EAAI,cAAc,KAAK,EACzC,EAAU,UAAY,0BACtB,EAAU,YAAY,KAAK,WAAW,EAAK,QAAQ,CAAC,EACpD,EAAU,YACR,KAAK,SAAS,EAAK,IAAK,iBAAkB,IAAM,KAAK,YAAY,EAAE,CAAC,CAC5E,EACM,MAAM,EAAU,EAAI,cAAc,MAAM,EACxC,EAAQ,UAAY,6BACpB,EAAU,YAAY,CAAO,EAC7B,EAAU,YACR,KAAK,SAAS,EAAK,IAAK,gBAAiB,IAAM,KAAK,YAAY,CAAC,CAAC,CAC1E,EACM,EAAU,YACR,KAAK,SACH,EACA,GAAa,OACb,eACA,IAAM,KAAK,YAAW,EACtB,2BACV,CACA,EACM,EAAK,YAAY,CAAS,CAC5B,CACA,EAAO,YAAY,CAAI,EACvB,KAAK,QAAU,CAAE,KAAA,EAAM,MAAA,EAAO,KAAA,EAAM,MAAA,CAAK,EACzC,KAAK,cAAa,EAClB,KAAK,UAAS,EACd,EAAK,MAAM,WAAa,GACxB,EAAM,MAAK,EACP,EAAK,QAAQ,EAAM,OAAM,EAC7B,EAAK,iBAAiB,UAAY,GAAM,CAClC,EAAE,MAAQ,UACZ,EAAE,eAAc,EAChB,EAAE,gBAAe,EACjB,KAAK,aAAa,EAAK,GACd,EAAE,MAAQ,SAAW,EAAE,SAAW,IAC3C,EAAE,eAAc,EAChB,KAAK,aAAa,EAAI,EAE1B,CAAC,EACD,EAAI,iBAAiB,YAAa,KAAK,iBAAkB,EAAI,EAC7D,EAAI,iBAAiB,aAAc,KAAK,iBAAkB,EAAI,CAChE,CAKA,iBAAiB,EAAG,CAClB,MAAM,EAAK,KAAK,QACZ,CAAC,GAAM,EAAG,KAAK,SAAS,EAAE,MAAM,GACpC,KAAK,aAAa,EAAI,CACxB,CAMA,eAAgB,CACd,MAAM,EAAK,KAAK,QAChB,GAAI,CAAC,EAAI,OACT,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,OACf,EAAS,EAAE,IAAI,OACf,EAAO,KAAK,UAAU,EAAG,IAAI,EAAE,EAAG,KAAK,EAC7C,GAAI,CAAC,GAAU,CAAC,GAAU,CAAC,EAAM,OACjC,MAAM,EAAS,EAAO,cACpB,eAAiB,EAAG,KAAO,qBAAuB,EAAK,EAC7D,GAAS,EAAO,cAAc,IAAM,EAAK,EAAE,EACvC,GAAI,CAAC,EAAQ,OACb,MAAM,EAAW,EAAO,sBAAqB,EACvC,EAAQ,EAAO,sBAAqB,EACpC,EAAK,EAAG,KAAK,YACb,EAAK,EAAG,KAAK,aACnB,IAAI,EAAO,KAAK,MAAM,EAAM,KAAO,EAAS,IAAI,EAC5C,EAAM,KAAK,MAAM,EAAM,OAAS,EAAS,GAAG,EAAI,EAChD,EAAM,EAAK,EAAO,aAAe,IACnC,EAAM,KAAK,MAAM,EAAM,IAAM,EAAS,GAAG,EAAI,EAAK,GAEhD,EAAO,EAAK,EAAO,YAAc,IAAG,EAAO,EAAO,YAAc,EAAK,GACzE,EAAG,KAAK,MAAM,KAAO,KAAK,IAAI,EAAG,CAAI,EAAI,KACzC,EAAG,KAAK,MAAM,IAAM,KAAK,IAAI,EAAG,CAAG,EAAI,IACzC,CAEA,WAAY,CACV,MAAM,EAAK,KAAK,QAChB,GAAI,CAAC,EAAI,OACT,MAAM,EAAO,KAAK,UAAU,EAAG,IAAI,EAAE,EAAG,KAAK,EAC7C,GAAI,CAAC,EAAM,OACX,MAAM,EAAQ,EAAK,OAAS,EAAK,MAAM,OAAS,CAAA,EAC1C,EAAK,OAAO,EAAM,YAAc,EAAE,EAAE,YAAW,EACrD,EAAG,KAAK,iBAAiB,0DAA0D,EAAE,QAAS,GAAO,CACnG,EAAG,UAAU,OACX,iCACC,EAAG,QAAQ,OAAS,IAAI,YAAW,IAAO,CACnD,CACI,CAAC,EACD,MAAM,EAAS,OAAO,EAAK,aAAe,EAAE,EAAE,YAAW,EACzD,EAAG,KAAK,iBAAiB,8BAA8B,EAAE,QAAS,GAAO,CACvE,EAAG,UAAU,OACX,iCACC,EAAG,QAAQ,OAAS,IAAI,YAAW,IAAO,CACnD,CACI,CAAC,EACD,MAAM,EAAU,EAAG,KAAK,cAAc,2BAA2B,EAC7D,GACF,EAAQ,UAAU,OAAO,6BAA8B,GAAS,QAAQ,CAAK,CAAC,EAEhF,MAAM,EAAI,EAAK,QAAU,CAAA,EACnB,EAAU,EAAG,KAAK,cAAc,6BAA6B,EAC/D,IACF,EAAQ,YAAc,OAAO,OAAO,EAAE,MAAS,SAAW,EAAE,KAAO,CAAC,GAEtE,MAAM,EAAW,EAAG,KAAK,cAAc,4BAA4B,EAC/D,IACF,EAAS,YAAc,GAAa,EAAE,KAAK,GAAK,GAAa,OAEjE,CAOA,cAAc,EAAI,CAChB,MAAM,EAAO,KAAK,UAAU,EAAG,IAAI,EAAE,EAAG,KAAK,EAC7C,GAAI,CAAC,EAAM,OACX,MAAM,EAAO,EAAG,MAAM,MACjB,EAAK,QAAO,EAAK,MAAQ,CAAA,GAC1B,EAAK,MAAM,OAAS,IACxB,EAAK,MAAM,KAAO,EAClB,KAAK,YAAY,EAAG,KAAM,EAAM,EAAG,KAAK,EACxC,KAAK,YAAY,UAAU,EAC3B,KAAK,YAAY,EAAG,KAAM,EAAM,EAAG,KAAK,EAC1C,CAMA,aAAa,EAAQ,CACnB,MAAM,EAAK,KAAK,QAChB,GAAI,CAAC,EAAI,OACT,KAAK,QAAU,KACf,MAAM,EAAM,KAAK,EAAE,IAAI,QAAU,KAAK,EAAE,IAAI,OAAO,cAC/C,IACF,EAAI,oBAAoB,YAAa,KAAK,iBAAkB,EAAI,EAChE,EAAI,oBAAoB,aAAc,KAAK,iBAAkB,EAAI,GAE/D,EAAG,KAAK,YAAY,EAAG,KAAK,WAAW,YAAY,EAAG,IAAI,EAC1D,GAAQ,KAAK,cAAc,CAAE,CACnC,CAMA,YAAY,EAAO,EAAQ,CACzB,MAAM,EAAK,KAAK,QAChB,GAAI,CAAC,EAAI,OACT,MAAM,EAAO,KAAK,UAAU,EAAG,IAAI,EAAE,EAAG,KAAK,EACxC,IACL,KAAK,cAAc,CAAE,EAChB,EAAK,QAAO,EAAK,MAAQ,CAAA,GACzB,EAAK,MAAM,QAAO,EAAK,MAAM,MAAQ,CAAA,GAC1C,EAAO,CAAI,EACX,KAAK,YAAY,EAAG,KAAM,EAAM,EAAG,KAAK,EACxC,KAAK,YAAY,CAAK,EACtB,KAAK,YAAY,EAAG,KAAM,EAAM,EAAG,KAAK,EACxC,KAAK,UAAS,EACd,KAAK,cAAa,EACpB,CAMA,YAAY,EAAG,CACb,MAAM,EAAK,KAAK,QAChB,GAAI,CAAC,EAAI,OACT,MAAM,EAAQ,GAAS,SAAS,CAAC,EACjC,KAAK,YAAY,YAAc,GAAS,CACtC,EAAK,MAAM,MAAM,WAAa,EAC9B,EAAK,MAAM,MAAM,MAAQ,EAAQ,UAAY,UAC7C,EAAK,MAAM,YAAc,EAAQ,UAAY,EACzC,EAAG,OAAS,UACT,EAAK,SAAQ,EAAK,OAAS,CAAA,GAChC,EAAK,OAAO,YAAc,EAAQ,UAAY,EAC9C,EAAK,OAAO,UAAY,EAAQ,UAAY,EAEhD,CAAC,CACH,CAKA,gBAAgB,EAAG,CACjB,MAAM,EAAK,KAAK,QACZ,CAAC,GAAM,EAAG,OAAS,SACvB,KAAK,YAAY,YAAc,GAAS,CACtC,EAAK,YAAc,GACf,EAAK,IAAM,MAAQ,EAAK,IAAM,QAAM,EAAK,UAAY,EAC3D,CAAC,CACH,CAKA,UAAU,EAAK,CACb,KAAK,YAAY,YAAc,GAAS,CACtC,MAAM,EAAM,WAAW,EAAK,MAAM,MAAM,QAAQ,GAAK,GACrD,IAAI,EAAI,EACR,QAAS,EAAI,EAAG,EAAI,GAAW,OAAQ,IACjC,KAAK,IAAI,GAAW,CAAC,EAAI,CAAG,EAAI,KAAK,IAAI,GAAW,CAAC,EAAI,CAAG,IAAG,EAAI,GAEzE,EAAI,KAAK,IAAI,GAAW,OAAS,EAAG,KAAK,IAAI,EAAG,EAAI,CAAG,CAAC,EACxD,EAAK,MAAM,MAAM,SAAW,GAAW,CAAC,EAAI,IAC9C,CAAC,CACH,CACA,aAAc,CACZ,KAAK,YAAY,YAAc,GAAS,CACtC,EAAK,MAAM,MAAM,WAAa,GAAS,QAAQ,EAAK,MAAM,KAAK,EAAI,IAAM,GAC3E,CAAC,CACH,CAKA,YAAY,EAAK,CACf,KAAK,YAAY,YAAc,GAAS,CACjC,EAAK,SAAQ,EAAK,OAAS,CAAA,GAChC,MAAM,EAAM,OAAO,EAAK,OAAO,MAAS,SAAW,EAAK,OAAO,KAAO,EACtE,EAAK,OAAO,KAAO,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,EAAM,CAAG,CAAC,CACxD,CAAC,CACH,CAEA,aAAc,CACZ,KAAK,YAAY,YAAc,GAAS,CACjC,EAAK,SAAQ,EAAK,OAAS,CAAA,GAChC,MAAM,EAAI,GAAc,QAAQ,EAAK,OAAO,KAAK,EACjD,EAAK,OAAO,MAAQ,IAAe,EAAI,GAAK,GAAc,MAAM,CAClE,CAAC,CACH,CAEA,aAAc,CACZ,MAAM,EAAK,KAAK,QAChB,GAAI,CAAC,EAAI,OACT,MAAM,EAAO,KAAK,UAAU,EAAG,IAAI,EAC7B,EAAO,EAAK,EAAG,KAAK,EAE1B,GADA,KAAK,aAAa,EAAK,EACnB,CAAC,EAAM,OACX,MAAM,EAAS,KAAK,EAAE,IAAI,OACtB,GAAU,EAAK,IACjB,EAAO,iBAAiB,IAAM,EAAK,EAAE,EAAE,QAAS,GAAO,EAAG,OAAM,CAAE,EAEpE,EAAK,OAAO,EAAG,MAAO,CAAC,EACvB,QAAS,EAAI,EAAG,MAAO,EAAI,EAAK,OAAQ,IACtC,KAAK,YAAY,EAAG,KAAM,EAAK,CAAC,EAAG,CAAC,EAEtC,KAAK,YAAY,YAAY,EAC7B,KAAK,aAAa,EAAG,KAAM,EAAM,EAAG,KAAK,CAC3C,CAEA,YAAY,EAAM,EAAM,EAAO,CAC7B,MAAM,EAAO,CAAE,KAAA,EAAM,GAAI,EAAK,GAAI,MAAA,EAAO,KAAM,EAAK,MAAQ,EAAK,MAAM,KAAO,EAAE,EAChF,KAAK,qBAAqB,mBAAoB,CAAI,CACpD,CAEA,YAAY,EAAM,EAAM,EAAO,CAC7B,MAAM,EAAO,CAAE,KAAA,EAAM,GAAI,EAAK,GAAI,MAAA,EAAO,MAAO,EAAK,MAAO,OAAQ,EAAK,MAAM,EAC/E,KAAK,qBAAqB,mBAAoB,CAAI,CACpD,CAEA,aAAa,EAAM,EAAM,EAAO,CAC9B,MAAM,EAAO,CAAE,KAAA,EAAM,GAAI,EAAK,GAAI,MAAA,CAAK,EACvC,KAAK,qBAAqB,oBAAqB,CAAI,CACrD,CAEA,uBAAwB,CACtB,MAAM,EAAM,KAAK,EAAE,IAAI,QAAU,KAAK,EAAE,IAAI,OAAO,cAC9C,IACL,EAAI,oBAAoB,YAAa,KAAK,OAAO,EACjD,EAAI,oBAAoB,YAAa,KAAK,OAAO,EACjD,EAAI,oBAAoB,UAAW,KAAK,KAAK,EAC7C,EAAI,oBAAoB,WAAY,KAAK,KAAK,EAChD,CACA,UAAW,CACT,IAAI,EAAI,EAAI,EAAI,EAChB,KAAK,sBAAqB,EAC1B,KAAK,aAAa,EAAK,EACvB,KAAK,WAAU,EACf,KAAK,MAAQ,KACT,KAAK,UACN,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,UAAW,KAAK,WAAW,GACpG,GAAM,EAAK,KAAK,KAAK,sBAAwB,MAAgB,EAAG,KAAK,EAAI,UAAW,KAAK,WAAW,EACrG,KAAK,OAAS,GAElB,CACF,CACA,GAAW,iBAAiB,CAAE,IAAK,EAAQ,CAAE,EAC7C,MAAM,EAAQ,CAKZ,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,SAAW,IAAI,EAAS,CAAC,EAC9B,KAAK,KAAO,CAAA,EACZ,KAAK,KAAO,KACZ,KAAK,MAAQ,GACb,KAAK,WAAa,GAClB,KAAK,KAAO,KACZ,KAAK,YAAc,GACnB,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,MAAQ,KAAK,MAAM,KAAK,IAAI,EACjC,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,EAAI,iBAAiB,UAAW,KAAK,YAAY,EACjD,EAAI,iBAAiB,UAAW,KAAK,YAAY,EACjD,KAAK,UAAS,CAChB,CACA,MAAO,CACL,OAAO,KAAK,EAAE,OAAO,MAAM,SAAW,CAAA,CACxC,CACA,UAAW,CACT,OAAO,KAAK,EAAE,QAAQ,YAAc,KAAK,KAAI,EAAG,UAAY,EAC9D,CACA,OAAQ,CACN,OAAO,KAAK,KAAI,EAAG,OAAS,OAAS,OAAS,MAChD,CAOA,cAAc,EAAO,CACnB,MAAM,GAEH,KAAK,EAAE,OAAO,QAAU,CAAA,GAAI,CAAC,EAEhC,GAAI,CAAC,EAAI,OAAO,KAChB,MAAM,EAAM,KAAK,QAAQ,EAAG,MAAQ,CAAA,CAAE,EACtC,GAAI,CAAC,EAAI,OAAQ,OAAO,KACxB,IAAI,EAAO,EAAI,CAAC,EACZ,EAAK,KAAK,IAAI,EAAI,CAAC,EAAE,EAAI,CAAK,EAClC,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,MAAM,EAAI,KAAK,IAAI,EAAI,CAAC,EAAE,EAAI,CAAK,EAC/B,EAAI,IACN,EAAK,EACL,EAAO,EAAI,CAAC,EAEhB,CACA,OAAO,CACT,CAOA,SAAS,EAAK,CACZ,GAAI,KAAK,MAAK,IAAO,OAAQ,OAAO,EACpC,MAAM,EAAU,KAAK,cAAc,EAAI,CAAC,EACxC,GAAI,CAAC,EAAS,OAAO,EACrB,MAAM,EAAI,KAAK,YAAY,EAAQ,EAAG,EAAQ,CAAC,EAC/C,MAAO,CAAE,EAAG,EAAQ,EAAG,EAAG,EAAQ,EAAG,GAAI,EAAE,GAAI,GAAI,EAAE,EAAE,CACzD,CACA,MAAO,CACL,OAAO,KAAK,EAAE,IAAI,QAAU,KAAK,EAAE,IAAI,OAAO,aAChD,CAEA,WAAY,CACV,GAAI,KAAK,WAAY,OACrB,MAAM,EAAM,KAAK,KAAI,EAChB,IACL,EAAI,iBAAiB,UAAW,KAAK,UAAU,EAC/C,EAAI,iBAAiB,QAAS,KAAK,QAAQ,EAC3C,KAAK,WAAa,GACpB,CAEA,WAAW,EAAG,CACZ,GAAI,CAAC,KAAK,SAAQ,GAAM,KAAK,WAAY,OACzC,MAAM,EAAM,KAAK,KAAI,EAAG,KAAO,IAC3B,EAAE,KAAO,EAAE,IAAI,YAAW,IAAO,OAAO,CAAG,EAAE,YAAW,EAC1D,KAAK,KAAI,EACA,EAAE,MAAQ,UACnB,KAAK,YAAW,CAEpB,CAEA,SAAS,EAAG,CACV,GAAI,KAAK,WAAY,OACrB,MAAM,EAAM,KAAK,KAAI,EAAG,KAAO,IAC3B,EAAE,KAAO,EAAE,IAAI,YAAW,IAAO,OAAO,CAAG,EAAE,YAAW,IACrD,KAAK,MAAM,KAAK,QAAO,EAEhC,CAEA,cAAe,CACR,KAAK,SAAQ,IAClB,KAAK,WAAa,GAClB,KAAK,KAAI,EACX,CAEA,aAAc,CACZ,KAAK,WAAa,GAClB,KAAK,YAAW,EAChB,KAAK,QAAO,CACd,CAQA,eAAe,EAAI,EAAI,CACrB,GAAI,CAAC,KAAK,SAAQ,EAAI,OACtB,KAAK,YAAW,EAChB,KAAK,SAAS,EAAK,EACnB,MAAM,EAAI,KAAK,SAAS,EAAI,CAAE,EAC9B,KAAK,KAAO,CAAE,EAAA,EAAG,EAAG,CAAC,EACrB,KAAK,YAAc,GACnB,MAAM,EAAM,KAAK,KAAI,EACjB,IACF,EAAI,iBAAiB,YAAa,KAAK,OAAO,EAC9C,EAAI,iBAAiB,YAAa,KAAK,QAAS,CAAE,QAAS,EAAK,CAAE,EAClE,EAAI,iBAAiB,YAAa,KAAK,YAAa,EAAI,EACxD,EAAI,iBAAiB,aAAc,KAAK,YAAa,EAAI,EACzD,EAAI,iBAAiB,UAAW,KAAK,WAAY,EAAI,GAEvD,KAAK,YAAW,CAClB,CAEA,YAAY,EAAG,CACb,GAAI,CAAC,KAAK,aAAe,CAAC,KAAK,KAAM,OACrC,EAAE,eAAc,EAChB,EAAE,gBAAe,EACjB,KAAM,CAAE,GAAA,EAAI,GAAA,CAAE,EAAK,KAAK,UAAU,CAAC,EACnC,KAAK,KAAK,EAAI,KAAK,SAAS,EAAI,CAAE,EAClC,KAAK,SAAS,EAAI,CACpB,CAEA,WAAW,EAAG,CACR,EAAE,MAAQ,UAAU,KAAK,SAAS,EAAK,CAC7C,CAKA,SAAS,EAAQ,CACf,IAAI,EAAI,EACR,GAAI,CAAC,KAAK,YAAa,OACvB,KAAK,YAAc,GACnB,MAAM,EAAM,KAAK,KAAI,EACjB,IACF,EAAI,oBAAoB,YAAa,KAAK,OAAO,EACjD,EAAI,oBAAoB,YAAa,KAAK,OAAO,EACjD,EAAI,oBAAoB,YAAa,KAAK,YAAa,EAAI,EAC3D,EAAI,oBAAoB,aAAc,KAAK,YAAa,EAAI,EAC5D,EAAI,oBAAoB,UAAW,KAAK,WAAY,EAAI,GAE1D,MAAM,EAAI,KAAK,KAGf,GAFA,KAAK,KAAO,KACZ,KAAK,WAAU,EACX,CAAC,GAAU,CAAC,EAAG,OACnB,MAAM,EAAI,KAAK,SAAS,EAAE,CAAC,EACrB,EAAI,KAAK,SAAS,EAAE,CAAC,EAC3B,GAAI,KAAK,IAAI,EAAE,GAAK,EAAE,EAAE,EAAI,GAAK,KAAK,IAAI,EAAE,GAAK,EAAE,EAAE,EAAI,EAAG,OAC5D,MAAM,EAAO,KAAK,MAAK,EACnB,KAAK,KAAI,EAAG,eAAiB,KAC/B,KAAK,KAAK,KAAK,CAAE,GAAI,EAAE,EAAG,GAAI,EAAE,EAAG,GAAI,EAAE,EAAG,GAAI,EAAE,EAAG,KAAA,CAAI,CAAE,EAC3D,KAAK,YAAW,GACf,GAAM,EAAK,KAAK,IAAI,UAAY,KAAO,OAAS,EAAG,WAAa,MAAgB,EAAG,KAAK,EAAI,SAAS,GAExG,KAAK,cAAc,EAAG,CAAC,CACzB,CAEA,eAAgB,CACd,IAAI,EAAI,EACR,KAAK,KAAO,CAAA,EACZ,KAAK,YAAW,GACf,GAAM,EAAK,KAAK,IAAI,UAAY,KAAO,OAAS,EAAG,WAAa,MAAgB,EAAG,KAAK,EAAI,gBAAgB,CAC/G,CAQA,SAAU,CACR,OAAO,KAAK,KAAK,IAAK,IAAO,CAC3B,GAAI,EAAE,GACN,GAAI,EAAE,GACN,GAAI,EAAE,GACN,GAAI,EAAE,GACN,KAAM,EAAE,OAAS,OAAS,OAAS,MACzC,EAAM,CACJ,CAQA,QAAQ,EAAM,CACZ,KAAK,KAAO,MAAM,QAAQ,CAAI,EAAI,EAAK,OACpC,GAAM,GAAK,SAAS,EAAE,EAAE,GAAK,SAAS,EAAE,EAAE,GAAK,SAAS,EAAE,EAAE,GAAK,SAAS,EAAE,EAAE,CACrF,EAAM,IAAK,IAAO,CACZ,GAAI,CAAC,EAAE,GACP,GAAI,CAAC,EAAE,GACP,GAAI,CAAC,EAAE,GACP,GAAI,CAAC,EAAE,GACP,KAAM,EAAE,OAAS,OAAS,OAAS,MACzC,EAAM,EAAI,CAAA,EACN,KAAK,YAAW,CAClB,CAOA,QAAQ,EAAM,CACZ,MAAM,EAAM,CAAA,EACZ,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,MAAM,EAAI,EAAK,CAAC,EAChB,IAAI,EACA,EACA,MAAM,QAAQ,CAAC,GACjB,EAAI,CAAC,EAAE,CAAC,EACR,EAAI,CAAC,EAAE,CAAC,GACC,GAAK,OAAO,GAAM,UAC3B,EAAI,CAAC,EAAE,EACP,EAAI,CAAC,EAAE,IAEP,EAAI,EACJ,EAAI,CAAC,GAEH,SAAS,CAAC,GAAK,SAAS,CAAC,GAAG,EAAI,KAAK,CAAE,EAAA,EAAG,EAAA,CAAC,CAAE,CACnD,CACA,OAAO,CACT,CAGA,MAAO,CACL,GAAI,KAAK,OAAS,CAAC,KAAK,SAAQ,EAAI,OACpC,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,YACrB,GAAI,CAAC,EAAQ,OACb,KAAK,MAAQ,GACb,MAAM,EAAO,KAAK,SAAS,SAAS,EAAG,EAAG,EAAE,OAAO,UAAW,EAAE,OAAO,UAAU,EACjF,EAAK,KAAK,aAAa,QAAS,4BAA4B,EAC5D,EAAK,KAAK,aAAa,OAAQ,aAAa,EAC5C,EAAK,KAAK,MAAM,OAAS,YACzB,EAAK,KAAK,MAAM,cAAgB,MAChC,EAAK,KAAK,iBAAiB,YAAa,KAAK,OAAO,EACpD,EAAK,KAAK,iBAAiB,aAAc,KAAK,QAAS,CAAE,QAAS,EAAK,CAAE,EACzE,EAAO,IAAI,CAAI,EACf,KAAK,KAAO,CACd,CACA,SAAU,CAER,GADA,KAAK,MAAQ,GACT,KAAK,KAAM,CACb,KAAK,KAAK,KAAK,oBAAoB,YAAa,KAAK,OAAO,EAC5D,KAAK,KAAK,KAAK,oBAAoB,aAAc,KAAK,OAAO,EAC7D,MAAM,EAAI,KAAK,KAAK,KAChB,EAAE,YAAY,EAAE,WAAW,YAAY,CAAC,EAC5C,KAAK,KAAO,IACd,CACF,CAEA,UAAU,EAAG,CACX,MAAM,EAAI,EAAE,SAAW,EAAE,QAAQ,CAAC,EAAI,EAAE,QAAQ,CAAC,EAAI,EACrD,MAAO,CAAE,GAAI,EAAE,QAAS,GAAI,EAAE,OAAO,CACvC,CACA,WAAY,CACV,MAAM,EAAI,KAAK,EAAE,IAAI,OAAO,cAAc,kBAAkB,EAC5D,OAAO,EAAI,EAAE,sBAAqB,EAAK,IACzC,CAEA,SAAU,CACR,MAAM,EAAI,KAAK,EAAE,QACX,EAAI,EAAE,YAAc,EAAE,WAAW,CAAC,EACxC,OAAI,GAAK,SAAS,EAAE,OAAO,GAAK,SAAS,EAAE,OAAO,GAAK,EAAE,UAAY,EAAE,QAC9D,CAAC,EAAE,QAAS,EAAE,OAAO,EAEvB,CAAC,EAAE,KAAM,EAAE,IAAI,CACxB,CAKA,SAAS,EAAI,EAAI,CACf,MAAM,EAAI,KAAK,EACT,EAAO,KAAK,UAAS,EACrB,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAS,GAAM,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACvC,EAAK,EAAO,GAAO,EAAK,EAAK,MAAQ,EAAK,KAAK,EAAI,EACnD,EAAK,EAAO,GAAO,EAAK,EAAK,KAAO,EAAK,MAAM,EAAI,EACnD,CAAC,EAAM,CAAI,EAAI,KAAK,QAAO,EAC3B,EAAI,EAAE,QAAQ,KAAO,GAAM,EAAE,QAAQ,KAAO,EAAE,QAAQ,MACtD,EAAI,EAAO,GAAM,EAAO,GAC9B,MAAO,CAAE,EAAA,EAAG,EAAA,EAAG,GAAI,EAAK,EAAI,GAAI,EAAK,CAAE,CACzC,CAKA,YAAY,EAAG,EAAG,CAChB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAK,EAAE,QAAQ,KAAO,EAAE,QAAQ,MAAQ,EACxC,CAAC,EAAM,CAAI,EAAI,KAAK,QAAO,EAC3B,EAAK,EAAO,GAAQ,EAC1B,MAAO,CACL,IAAK,EAAI,EAAE,QAAQ,MAAQ,EAAK,EAChC,GAAI,GAAM,EAAI,GAAQ,EAAK,CACjC,CACE,CAEA,QAAQ,EAAG,CACT,GAAI,CAAC,KAAK,MAAO,OACjB,EAAE,eAAc,EAChB,EAAE,gBAAe,EACjB,KAAM,CAAE,GAAA,EAAI,GAAA,CAAE,EAAK,KAAK,UAAU,CAAC,EAC7B,EAAI,KAAK,SAAS,EAAI,CAAE,EAC9B,KAAK,KAAO,CAAE,EAAA,EAAG,EAAG,CAAC,EACrB,MAAM,EAAM,KAAK,KAAI,EACjB,IACF,EAAI,iBAAiB,YAAa,KAAK,OAAO,EAC9C,EAAI,iBAAiB,UAAW,KAAK,KAAK,EAC1C,EAAI,iBAAiB,YAAa,KAAK,QAAS,CAAE,QAAS,EAAK,CAAE,EAClE,EAAI,iBAAiB,WAAY,KAAK,KAAK,GAE7C,KAAK,YAAW,CAClB,CAEA,QAAQ,EAAG,CACT,GAAI,CAAC,KAAK,KAAM,OACZ,EAAE,YAAY,EAAE,eAAc,EAClC,KAAM,CAAE,GAAA,EAAI,GAAA,CAAE,EAAK,KAAK,UAAU,CAAC,EACnC,KAAK,KAAK,EAAI,KAAK,SAAS,EAAI,CAAE,EAClC,KAAK,YAAW,CAClB,CAEA,MAAM,EAAI,CACR,IAAI,EAAI,EACR,MAAM,EAAM,KAAK,KAAI,EAOrB,GANI,IACF,EAAI,oBAAoB,YAAa,KAAK,OAAO,EACjD,EAAI,oBAAoB,UAAW,KAAK,KAAK,EAC7C,EAAI,oBAAoB,YAAa,KAAK,OAAO,EACjD,EAAI,oBAAoB,WAAY,KAAK,KAAK,GAE5C,CAAC,KAAK,KAAM,OAChB,MAAM,EAAO,KAAK,KAAK,EACjB,EAAO,KAAK,KAAK,EAGvB,GAFA,KAAK,KAAO,KACZ,KAAK,WAAU,EACX,KAAK,IAAI,EAAK,GAAK,EAAK,EAAE,EAAI,GAAK,KAAK,IAAI,EAAK,GAAK,EAAK,EAAE,EAAI,EAAG,CACjE,KAAK,YAAY,KAAK,QAAO,EAClC,MACF,CACA,MAAM,EAAO,KAAK,MAAK,EACjB,EAAI,KAAK,SAAS,CAAI,EACtB,EAAI,KAAK,SAAS,CAAI,EACxB,KAAK,KAAI,EAAG,eAAiB,KAC/B,KAAK,KAAK,KAAK,CAAE,GAAI,EAAE,EAAG,GAAI,EAAE,EAAG,GAAI,EAAE,EAAG,GAAI,EAAE,EAAG,KAAA,CAAI,CAAE,EAC3D,KAAK,YAAW,GACf,GAAM,EAAK,KAAK,IAAI,UAAY,KAAO,OAAS,EAAG,WAAa,MAAgB,EAAG,KAAK,EAAI,SAAS,GAExG,KAAK,cAAc,EAAG,CAAC,EAClB,KAAK,YAAY,KAAK,QAAO,CACpC,CACA,aAAc,CACZ,MAAM,EAAM,KAAK,KAAI,EACjB,IACF,EAAI,oBAAoB,YAAa,KAAK,OAAO,EACjD,EAAI,oBAAoB,UAAW,KAAK,KAAK,EAC7C,EAAI,oBAAoB,YAAa,KAAK,OAAO,EACjD,EAAI,oBAAoB,WAAY,KAAK,KAAK,GAEhD,KAAK,KAAO,KACZ,KAAK,WAAU,CACjB,CAKA,OAAO,EAAG,EAAG,CACX,MAAM,EAAK,EAAE,EAAI,EAAE,EACb,EAAK,EAAE,EAAI,EAAE,EACnB,MAAO,CACL,GAAA,EACA,GAAA,EACA,IAAK,EAAE,IAAM,EAAI,EAAK,KAAK,IAAI,EAAE,CAAC,EAAI,IAAM,IAC5C,MAAO,IAAO,EAAI,EAAK,EAAK,GAClC,CACE,CAEA,KAAK,EAAG,CACN,GAAI,CAAC,SAAS,CAAC,EAAG,MAAO,MACzB,MAAM,EAAI,KAAK,IAAI,CAAC,EACpB,OAAI,IAAM,IAAM,EAAI,KAAQ,GAAK,KAAa,EAAE,cAAc,CAAC,EACxD,OAAO,KAAK,MAAM,EAAI,GAAG,EAAI,GAAG,CACzC,CAEA,gBAAiB,CACf,GAAI,CAAC,EAAY,UAAS,EAAI,OAAO,KACrC,MAAM,EAAO,KAAK,EAAE,IAAI,aAAe,KAAK,EAAE,IAAI,YAAY,KAC9D,GAAI,CAAC,GAAQ,OAAO,kBAAqB,WAAY,OAAO,KAC5D,GAAI,CACF,OAAO,iBAAiB,CAAI,CAC9B,MAAY,CACV,OAAO,IACT,CACF,CAOA,cAAc,EAAQ,EAAS,EAAU,EAAI,CAC3C,GAAI,EAAQ,OAAO,EACnB,MAAM,EAAQ,IAAO,OAAS,EAAK,KAAK,eAAc,EAEtD,OADU,EAAQ,EAAM,iBAAiB,CAAO,EAAE,KAAI,EAAK,KAC/C,CACd,CAEA,SAAU,CACR,MAAM,EAAI,KAAK,KAAI,EAAG,QAAU,CAAA,EAC1B,EAAK,KAAK,eAAc,EAC9B,MAAO,CACL,GAAI,KAAK,cAAc,EAAE,GAAI,mBAAoB,UAAW,CAAE,EAC9D,KAAM,KAAK,cAAc,EAAE,KAAM,qBAAsB,UAAW,CAAE,EACpE,QAAS,KAAK,cAAc,EAAE,QAAS,wBAAyB,UAAW,CAAE,EAC7E,MAAO,KAAK,cAAc,EAAE,MAAO,sBAAuB,UAAW,CAAE,CAC7E,CACE,CAEA,UAAU,EAAI,CACZ,MAAM,EAAI,KAAK,QAAO,EACtB,OAAO,IAAO,EAAI,EAAE,QAAU,EAAK,EAAI,EAAE,GAAK,EAAE,IAClD,CAEA,UAAU,EAAI,CACZ,OAAO,IAAO,EAAI,0BAA4B,EAAK,EAAI,wBAA0B,yBACnF,CAKA,QAAQ,EAAG,CACT,GAAI,CAAC,SAAS,CAAC,EAAG,MAAO,MACzB,MAAM,EAAI,KAAK,KAAI,EAAG,QAAU,KAAK,KAAI,EAAG,OAAO,QACnD,GAAI,OAAO,GAAM,WACf,GAAI,CACF,MAAM,EAAI,EAAE,CAAC,EACb,GAAI,GAAK,KAAM,OAAO,OAAO,CAAC,CAChC,MAAY,CACZ,CAEF,OAAQ,GAAK,EAAI,IAAM,IAAM,KAAK,KAAK,CAAC,EAAI,GAC9C,CAQA,OAAO,EAAG,EAAG,EAAI,EAAM,CACrB,MAAM,EAAK,KAAK,KAAI,EAAG,MACvB,GAAI,OAAO,GAAO,WAAY,CAC5B,MAAM,EAAM,EAAG,CACb,KAAM,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,CAAC,EACtB,GAAI,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,CAAC,EACpB,GAAI,EAAG,GACP,GAAI,EAAG,GACP,cAAe,EAAG,IAClB,MAAO,EAAG,MACV,KAAA,CACR,CAAO,EACD,OAAO,MAAM,QAAQ,CAAG,EAAI,EAAI,IAAI,MAAM,EAAI,CAAC,OAAO,CAAG,CAAC,CAC5D,CACA,GAAI,IAAS,OAAQ,CACnB,MAAM,EAAQ,EAAG,KAAO,EAAI,GAAK,EAAG,GAAK,EAAI,UAAO,UAC9C,EAAM,SAAS,EAAG,GAAG,EAAI,IAAM,KAAK,QAAQ,EAAG,GAAG,EAAI,IAAM,GAClE,MAAO,CAAC,KAAK,MAAM,EAAG,EAAE,EAAI,KAAO,EAAM,EAAO,KAAK,MAAM,EAAE,CAAC,EAAI,SAAW,KAAK,MAAM,EAAE,CAAC,CAAC,CAC9F,CACA,MAAO,CAAC,WAAQ,KAAK,OAAO,EAAG,EAAE,EAAG,WAAQ,KAAK,MAAM,EAAG,EAAE,EAAG,KAAK,QAAQ,EAAG,GAAG,CAAC,CACrF,CAKA,OAAO,EAAI,CACT,GAAI,KAAK,EAAE,OAAO,MAAM,OAAS,WAAY,CAC3C,MAAM,EAAO,EAAK,MAClB,OAAO,KAAK,MAAM,EAAO,EAAE,EAAI,GAAK,GACtC,CACA,OAAO,KAAK,KAAK,CAAE,CACrB,CAKA,MAAM,EAAG,CACP,MAAM,EAAK,KAAK,KAAI,EAAG,QAAU,KAAK,KAAI,EAAG,OAAO,EACpD,GAAI,OAAO,GAAO,WAChB,GAAI,CACF,MAAM,EAAI,EAAG,CAAC,EACd,GAAI,GAAK,KAAM,OAAO,OAAO,CAAC,CAChC,MAAY,CACZ,CAEF,MAAM,EAAI,KAAK,EAAE,QAAQ,kBAAoB,KAAK,EAAE,QAAQ,iBAAiB,CAAC,EAC9E,GAAI,OAAO,GAAM,WACf,GAAI,CACF,MAAM,EAAI,EAAE,EAAG,CAAE,YAAa,EAAG,eAAgB,GAAI,EAAG,KAAK,CAAC,CAAE,EAChE,GAAI,GAAK,MAAQ,IAAM,GAAI,OAAO,OAAO,CAAC,CAC5C,MAAY,CACZ,CAEF,OAAO,KAAK,KAAK,CAAC,CACpB,CAMA,MAAM,EAAG,CACP,MAAM,EAAI,KAAK,EACT,EAAK,KAAK,KAAI,EAAG,QAAU,KAAK,KAAI,EAAG,OAAO,EACpD,GAAI,OAAO,GAAO,WAChB,GAAI,CACF,MAAM,EAAI,EAAG,CAAC,EACd,GAAI,GAAK,KAAM,OAAO,OAAO,CAAC,CAChC,MAAY,CACZ,CAEF,GAAI,EAAE,OAAO,MAAM,OAAS,WAE1B,OADU,IAAI,KAAK,CAAC,EACX,mBAAmB,OAAQ,CAClC,IAAK,UACL,MAAO,QACP,KAAM,SACd,CAAO,EAEH,MAAM,EAAI,EAAE,QAAQ,gBACpB,GAAI,OAAO,GAAM,WACf,GAAI,CACF,MAAM,EAAI,EAAE,EAAG,CAAE,EAAA,CAAC,CAAE,EACpB,GAAI,GAAK,MAAQ,IAAM,GAAI,OAAO,OAAO,CAAC,CAC5C,MAAY,CACZ,CAEF,OAAO,KAAK,KAAK,CAAC,CACpB,CAEA,YAAa,CACX,MAAM,EAAI,KAAK,EACf,GAAI,KAAK,OAAS,KAAK,MAAM,MAAQ,KAAK,MAAM,KAAK,WACnD,OAAO,KAAK,MAEd,MAAM,EAAI,KAAK,SAAS,MAAM,CAAE,MAAO,yBAAyB,CAAE,EAClE,OAAA,EAAE,KAAK,MAAM,cAAgB,OACzB,EAAE,IAAI,aAAa,EAAE,IAAI,YAAY,IAAI,CAAC,EAC9C,KAAK,MAAQ,EACN,CACT,CACA,YAAa,CACX,GAAI,KAAK,OAAS,KAAK,MAAM,KAAM,CACjC,MAAM,EAAI,KAAK,MAAM,KACjB,EAAE,YAAY,EAAE,WAAW,YAAY,CAAC,CAC9C,CACA,KAAK,MAAQ,IACf,CACA,aAAc,CACZ,GAAI,CAAC,KAAK,KAAM,OAChB,MAAM,EAAI,KAAK,WAAU,EACzB,KAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAC9D,MAAM,EAAI,KAAK,SAAS,KAAK,KAAK,CAAC,EAC7B,EAAI,KAAK,SAAS,KAAK,KAAK,CAAC,EACnC,KAAK,WAAW,EAAG,EAAG,EAAG,GAAO,KAAK,MAAK,CAAE,CAC9C,CAEA,aAAc,CACZ,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,IAAI,QAAU,EAAE,IAAI,OAAO,cAAc,0BAA0B,EAEjF,GADI,GAAO,EAAI,YAAY,EAAI,WAAW,YAAY,CAAG,EACrD,CAAC,KAAK,KAAK,QAAU,CAAC,EAAE,IAAI,YAAa,OAC7C,MAAM,EAAI,KAAK,SAAS,MAAM,CAAE,MAAO,yBAAyB,CAAE,EAClE,EAAE,KAAK,MAAM,cAAgB,OAC7B,EAAE,IAAI,YAAY,IAAI,CAAC,EACvB,KAAK,KAAK,QAAS,GAAM,CACvB,MAAM,EAAI,EAAc,EAAe,CAAA,EAAI,KAAK,YAAY,EAAE,GAAI,EAAE,EAAE,CAAC,EAAG,CAAE,EAAG,EAAE,GAAI,EAAG,EAAE,EAAE,CAAE,EACxF,EAAI,EAAc,EAAe,CAAA,EAAI,KAAK,YAAY,EAAE,GAAI,EAAE,EAAE,CAAC,EAAG,CAAE,EAAG,EAAE,GAAI,EAAG,EAAE,EAAE,CAAE,EAC9F,KAAK,WAAW,EAAG,EAAG,EAAG,GAAM,EAAE,MAAQ,MAAM,CACjD,CAAC,CACH,CASA,WAAW,EAAG,EAAG,EAAG,EAAQ,EAAM,CAChC,MAAM,EAAK,KAAK,OAAO,EAAG,CAAC,EACrB,EAAK,KAAK,SAAS,MAAM,CAC7B,MAAO,4BAA8B,KAAK,UAAU,EAAG,EAAE,GAAK,EAAS,6BAA+B,GAC5G,CAAK,GACI,GAAQ,KAAK,MAAK,KAAQ,OAAQ,KAAK,UAAU,EAAI,EAAG,EAAG,CAAE,EAC7D,KAAK,UAAU,EAAI,EAAG,EAAG,CAAE,EAChC,EAAE,IAAI,CAAE,CACV,CAGA,KAAK,EAAG,EAAG,EAAO,CAChB,GAAI,KAAK,KAAI,EAAG,UAAY,GAAO,OACnC,MAAM,EAAM,KAAK,SAAS,WAAW,EAAE,GAAI,EAAE,GAAI,CAC/C,MAAO,EACP,MAAO,SACP,eAAgB,EAChB,iBAAkB,EAClB,iBAAkB,OAClB,iBAAkB,EAClB,mBAAoB,CAC1B,CAAK,EACD,EAAE,IAAI,CAAG,CACX,CAIA,SAAS,EAAG,EAAO,EAAI,EAAI,EAAM,EAAM,EAAO,CAC5C,MAAM,EAAM,KAAK,SAAS,SAAS,EAAI,EAAI,EAAM,EAAM,CAAC,EACxD,EAAI,KAAK,aAAa,QAAS,6BAA6B,EAC5D,EAAI,KAAK,CAAE,KAAM,UAAW,eAAgB,IAAM,OAAQ,EAAO,eAAgB,CAAC,CAAE,EACpF,EAAE,IAAI,CAAG,EACT,MAAM,EAAQ,KAAK,SAAS,SAAS,CACnC,EAAG,EAAK,EACR,EAAG,EAAK,GACR,KAAM,EACN,WAAY,QACZ,SAAU,OACV,UAAW,UACX,SAAU,0BAChB,CAAK,EACD,EAAE,IAAI,CAAK,CACb,CAUA,UAAU,EAAG,EAAG,EAAG,EAAI,CACrB,MAAM,EAAI,KAAK,EACT,EAAM,KAAK,KAAI,EACf,EAAK,EAAE,OAAO,WACd,EAAQ,KAAK,UAAU,EAAG,EAAE,EAC5B,EAAK,KAAK,IAAI,EAAE,GAAI,EAAE,EAAE,EACxB,EAAK,KAAK,IAAI,EAAE,GAAI,EAAE,EAAE,EAC9B,GAAI,EAAI,OAAS,GAAO,CACtB,MAAM,EAAO,KAAK,SAAS,SAAS,EAAI,EAAG,KAAK,IAAI,EAAG,EAAK,CAAE,EAAG,EAAI,CAAC,EACtE,EAAK,KAAK,aAAa,QAAS,yBAAyB,EACzD,EAAK,KAAK,CAAE,KAAM,EAAO,eAAgB,IAAM,OAAQ,MAAM,CAAE,EAC/D,EAAE,IAAI,CAAI,CACZ,CACI,EAAI,SAAW,IACjB,CAAC,EAAG,CAAC,EAAE,QAAS,GAAM,CACpB,MAAM,EAAQ,KAAK,SAAS,SAAS,EAAE,GAAI,EAAG,EAAE,GAAI,EAAI,KAAK,QAAO,EAAG,MAAO,EAAG,CAAC,EAClF,EAAM,KAAK,aAAa,QAAS,0BAA0B,EAC3D,EAAE,IAAI,CAAK,CACb,CAAC,EAEH,CAAC,EAAG,CAAC,EAAE,QAAS,GAAM,KAAK,KAAK,EAAG,EAAG,CAAK,CAAC,EAC5C,MAAM,EAAQ,KAAK,OAAO,EAAG,EAAG,EAAI,MAAM,EACpC,EAAU,EAAM,OAAO,CAAC,EAAG,IAAM,KAAK,IAAI,EAAG,EAAE,MAAM,EAAG,CAAC,EACzD,EAAO,KAAK,IAAI,IAAK,EAAU,GAAG,EAClC,EAAO,GAAK,EAAM,OAAS,GACjC,IAAI,GAAM,EAAK,GAAM,EAAI,EAAO,EAChC,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,EAAE,OAAO,UAAY,EAAO,CAAC,CAAC,EAC5D,KAAK,SAAS,EAAG,EAAO,EAAI,EAAG,EAAM,EAAM,CAAK,CAClD,CAQA,UAAU,EAAG,EAAG,EAAG,EAAI,CACrB,MAAM,EAAQ,KAAK,UAAU,EAAG,EAAE,EAC5B,EAAO,KAAK,SAAS,SAAS,EAAE,GAAI,EAAE,GAAI,EAAE,GAAI,EAAE,GAAI,EAAO,EAAG,CAAC,EACvE,EAAK,KAAK,aAAa,QAAS,yBAAyB,EACzD,EAAE,IAAI,CAAI,EACV,CAAC,EAAG,CAAC,EAAE,QAAS,GAAM,KAAK,KAAK,EAAG,EAAG,CAAK,CAAC,EAC5C,MAAM,EAAQ,KAAK,OAAO,EAAG,EAAG,EAAI,MAAM,EACpC,EAAU,EAAM,OAAO,CAAC,EAAG,IAAM,KAAK,IAAI,EAAG,EAAE,MAAM,EAAG,CAAC,EACzD,EAAO,KAAK,IAAI,GAAI,EAAU,GAAG,EACjC,EAAO,GAAK,EAAM,OAAS,GACjC,IAAI,GAAM,EAAE,GAAK,EAAE,IAAM,EAAI,EACzB,GAAM,EAAE,GAAK,EAAE,IAAM,EAAI,EAAO,EACpC,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,KAAK,EAAE,OAAO,UAAY,EAAO,CAAC,CAAC,EACjE,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,KAAK,EAAE,OAAO,WAAa,EAAO,CAAC,CAAC,EAClE,KAAK,SAAS,EAAG,EAAO,EAAI,EAAI,EAAM,EAAM,CAAK,CACnD,CAIA,cAAc,EAAG,EAAG,CAClB,MAAM,EAAK,KAAK,OAAO,EAAG,CAAC,EACrB,EAAU,CACd,KAAM,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,CAAC,EACtB,GAAI,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,CAAC,EACpB,GAAI,EAAG,GACP,GAAI,EAAG,GACP,cAAe,EAAG,IAClB,MAAO,EAAG,KAChB,EACU,EAAK,KAAK,EAAE,OAAO,MAAM,OAAO,SAClC,OAAO,GAAO,YAAY,EAAG,KAAK,IAAK,CAAO,EAClD,KAAK,IAAI,OAAO,UAAU,WAAY,CAAC,KAAK,IAAK,CAAO,CAAC,CAC3D,CAEA,cAAe,CACR,KAAK,SAAQ,IACd,KAAK,EAAE,SAAS,gBAAkB,CAAC,KAAK,aAC1C,KAAK,WAAa,IAEhB,KAAK,KAAK,QAAQ,KAAK,YAAW,EAClC,KAAK,YAAc,CAAC,KAAK,OAC3B,KAAK,QAAO,EACZ,KAAK,KAAI,GAEb,CACA,UAAW,CACT,KAAK,YAAW,EAChB,KAAK,SAAS,EAAK,EACnB,KAAK,QAAO,EACZ,MAAM,EAAM,KAAK,KAAI,EACjB,GAAO,KAAK,aACd,EAAI,oBAAoB,UAAW,KAAK,UAAU,EAClD,EAAI,oBAAoB,QAAS,KAAK,QAAQ,GAEhD,KAAK,WAAa,GAClB,KAAK,KAAO,CAAA,CACd,CACF,CACA,GAAW,iBAAiB,CAAE,QAAS,EAAO,CAAE,EAChD,MAAM,EAAY,CAKhB,YAAY,EAAG,EAAK,CAClB,KAAK,EAAI,EACT,KAAK,IAAM,EACX,KAAK,KAAO,KACZ,KAAK,OAAS,CAAA,EACd,KAAK,YAAc,GACnB,KAAK,SAAW,KAChB,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,EAC/C,EAAI,iBAAiB,UAAW,KAAK,YAAY,EACjD,EAAI,iBAAiB,UAAW,KAAK,YAAY,CACnD,CACA,MAAO,CACL,OAAO,KAAK,EAAE,OAAO,MAAM,aAAe,CAAA,CAC5C,CACA,UAAW,CACT,OAAO,KAAK,KAAI,EAAG,UAAY,EACjC,CACA,MAAO,CACL,OAAO,KAAK,EAAE,IAAI,QAAU,KAAK,EAAE,IAAI,OAAO,aAChD,CAEA,cAAe,CAGb,GAFA,KAAK,eAAc,EACnB,KAAK,MAAK,EACN,CAAC,KAAK,SAAQ,GAAM,CAAC,EAAY,UAAS,EAAI,OAClD,MAAM,EAAM,KAAK,EAAE,IAAI,OAAS,KAAK,EAAE,IAAI,MAAM,KAC5C,IACL,EAAI,iBAAiB,cAAe,KAAK,UAAU,EACnD,KAAK,SAAW,EAClB,CACA,gBAAiB,CACX,KAAK,WACP,KAAK,SAAS,oBAAoB,cAAe,KAAK,UAAU,EAChE,KAAK,SAAW,KAEpB,CAEA,WAAW,EAAG,CACP,KAAK,SAAQ,IAClB,EAAE,eAAc,EAChB,KAAK,KAAK,EAAE,QAAS,EAAE,OAAO,EAChC,CAOA,cAAc,EAAI,EAAI,CACpB,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,IAAI,QAAU,EAAE,IAAI,OAAO,cAAc,kBAAkB,EAC1E,GAAI,CAAC,EAAM,OAAO,KAClB,MAAM,EAAI,EAAK,sBAAqB,EACpC,GAAI,CAAC,EAAE,OAAS,CAAC,EAAE,OAAQ,OAAO,KAClC,MAAM,EAAS,GAAM,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACvC,EAAK,GAAO,EAAK,EAAE,MAAQ,EAAE,KAAK,EAClC,EAAK,GAAO,EAAK,EAAE,KAAO,EAAE,MAAM,EAClC,EAAI,EAAE,QAAQ,KAAO,GAAM,EAAE,QAAQ,KAAO,EAAE,QAAQ,MACtD,EAAI,EAAE,QAAQ,YAAc,EAAE,QAAQ,WAAW,CAAC,EAClD,EAAO,GAAK,SAAS,EAAE,OAAO,EAAI,EAAE,QAAU,EAAE,QAAQ,KACxD,EAAO,GAAK,SAAS,EAAE,OAAO,EAAI,EAAE,QAAU,EAAE,QAAQ,KACxD,EAAI,EAAO,GAAM,EAAO,GAC9B,MAAO,CAAE,EAAA,EAAG,EAAA,CAAC,CACf,CAOA,cAAc,EAAS,CACrB,MAAM,EAAM,KAAK,KAAI,EACf,EAAM,MAAM,QAAQ,EAAI,KAAK,GAAK,EAAI,MAAM,OAAS,EAAI,MAAQ,CAAC,WAAY,QAAS,QAAS,SAAS,EACzG,EAAS,EAAI,QAAU,CAAA,EACvB,EAAM,CAAA,EACZ,OAAA,EAAI,QAAS,GAAO,CAClB,GAAI,OAAO,GAAO,UAChB,GAAI,IAAO,WACT,EAAI,KAAK,CACP,GAAI,WACJ,MAAO,EAAO,UAAY,gBAC1B,IAAK,IAAM,KAAK,UAAU,CAAO,CAC7C,CAAW,UACQ,IAAO,QAChB,EAAI,KAAK,CACP,GAAI,QACJ,MAAO,EAAO,OAAS,gBACvB,IAAK,IAAM,KAAK,MAAM,EAAS,GAAG,CAC9C,CAAW,UACQ,IAAO,QAChB,EAAI,KAAK,CACP,GAAI,QACJ,MAAO,EAAO,OAAS,kBACvB,IAAK,IAAM,KAAK,MAAM,EAAS,GAAG,CAC9C,CAAW,UACQ,IAAO,UAAW,CAC3B,MAAM,EAAI,KAAK,IAAI,QACR,GAAK,KAAK,EAAE,OAAO,MAAM,SAAW,KAAK,EAAE,OAAO,MAAM,QAAQ,SAEzE,EAAI,KAAK,CACP,GAAI,UACJ,MAAO,EAAO,SAAW,oBACzB,IAAK,IAAM,EAAE,eAAe,EAAQ,QAAS,EAAQ,OAAO,CAC1E,CAAa,CAEL,OACS,GAAM,OAAO,GAAO,UAAY,OAAO,EAAG,SAAY,YAC/D,EAAI,KAAK,CACP,GAAI,EAAG,IAAM,SACb,MAAO,EAAG,OAAS,SACnB,IAAK,IAAM,EAAG,QAAQ,KAAK,IAAK,CAAO,CACjD,CAAS,CAEL,CAAC,EACM,CACT,CAEA,UAAU,EAAS,CACjB,GAAI,EAAQ,GAAK,MAAQ,EAAQ,GAAK,KAAM,OAC5C,MAAM,EAAM,KAAK,KAAI,EACf,EAAM,KAAK,IAAI,IACrB,GAAI,GAAO,OAAO,EAAI,UAAa,WAAY,CAC7C,EAAI,SAAS,EAAQ,EAAG,EAAQ,EAAG,CAAE,KAAM,EAAI,UAAY,MAAM,CAAE,EACnE,MACF,CACA,KAAK,IAAI,mBACP,CACE,EAAG,EAAQ,EACX,EAAG,EAAQ,EACX,OAAQ,CAAE,KAAM,CAAC,EACjB,MAAO,CACL,KAAM,EAAI,UAAY,OACtB,MAAO,CAAE,WAAY,OAAQ,MAAO,SAAS,CACvD,CACA,EACM,EACN,CACE,CASA,MAAM,EAAS,EAAM,CACnB,MAAM,EAAK,KAAK,KAAI,EAAG,MAAQ,CAAA,EACzB,EAAM,IAAS,IAAM,EAAQ,EAAI,EAAQ,EAC/C,GAAI,GAAO,KAAM,OACjB,MAAM,EAAM,KAAK,IAAI,IACrB,GAAI,GAAO,OAAO,EAAI,cAAiB,WAAY,CACjD,EAAI,aAAa,EAAM,EAAK,CAC1B,KAAM,EAAG,KACT,gBAAiB,EAAG,gBACpB,MAAO,EAAG,KAClB,CAAO,EACD,MACF,CACA,MAAM,EAAO,CACX,gBAAiB,EAAG,iBAAmB,KAAO,EAAG,gBAAkB,CACzE,EACQ,EAAG,OAAM,EAAK,MAAQ,CAAE,KAAM,EAAG,IAAI,GACrC,EAAG,QACL,EAAK,YAAc,EAAG,MACtB,EAAK,MAAQ,EAAQ,OAAO,EAAK,OAAS,CAAA,EAAI,CAAE,YAAa,EAAG,KAAK,CAAE,GAErE,IAAS,IACX,KAAK,IAAI,mBAAmB,EAAQ,OAAO,EAAM,CAAE,EAAG,CAAG,CAAE,EAAG,EAAI,EAElE,KAAK,IAAI,mBAAmB,EAAQ,OAAO,EAAM,CAAE,EAAG,CAAG,CAAE,EAAG,EAAI,CAEtE,CAKA,KAAK,EAAS,EAAS,CACrB,KAAK,MAAK,EACV,MAAM,EAAI,KAAK,EACT,EAAS,EAAE,IAAI,OACf,EAAM,KAAK,KAAI,EACrB,GAAI,CAAC,GAAU,CAAC,EAAK,OACrB,MAAM,EAAO,KAAK,cAAc,EAAS,CAAO,EAC1C,EAAI,EAAE,QACN,EAAU,CACd,EAAG,EAAO,EAAK,EAAI,KACnB,EAAG,EAAO,EAAK,EAAI,KACnB,YAAa,EAAE,qBAAuB,EAAI,EAAE,oBAAsB,KAClE,eAAgB,EAAE,wBAA0B,EAAI,EAAE,uBAAyB,KAC3E,QAAA,EACA,QAAA,CACN,EACU,EAAQ,KAAK,cAAc,CAAO,EACxC,GAAI,CAAC,EAAM,OAAQ,OACnB,KAAK,OAAS,EACd,MAAM,EAAO,EAAI,cAAc,KAAK,EACpC,EAAK,UAAY,0BACjB,EAAK,aAAa,OAAQ,MAAM,EAChC,EAAK,MAAM,SAAW,WACtB,EAAK,MAAM,WAAa,SACxB,EAAM,QAAQ,CAAC,EAAI,IAAM,CACvB,MAAM,EAAM,EAAI,cAAc,QAAQ,EACtC,EAAI,KAAO,SACX,EAAI,UAAY,+BAChB,EAAI,aAAa,OAAQ,UAAU,EACnC,EAAI,SAAW,GACf,EAAI,YAAc,EAAG,MACrB,EAAI,iBAAiB,QAAU,GAAO,CACpC,EAAG,gBAAe,EAClB,KAAK,UAAU,CAAC,CAClB,CAAC,EACD,EAAI,iBAAiB,aAAc,IAAM,KAAK,OAAO,CAAC,CAAC,EACvD,EAAK,YAAY,CAAG,CACtB,CAAC,EACD,EAAO,YAAY,CAAI,EACvB,KAAK,KAAO,EACZ,MAAM,EAAW,EAAO,sBAAqB,EAC7C,IAAI,EAAO,EAAU,EAAS,KAC1B,EAAM,EAAU,EAAS,IAC7B,MAAM,EAAK,EAAK,YACV,EAAK,EAAK,aACV,EAAU,KAAK,IAAI,EAAG,EAAO,YAAc,CAAE,EAC7C,EAAS,KAAK,IAAI,EAAG,EAAO,aAAe,CAAE,EAC/C,EAAO,IAAS,EAAO,GACvB,EAAM,IAAQ,EAAM,GACxB,EAAK,MAAM,KAAO,KAAK,IAAI,EAAG,CAAI,EAAI,KACtC,EAAK,MAAM,IAAM,KAAK,IAAI,EAAG,CAAG,EAAI,KACpC,EAAK,MAAM,WAAa,UACxB,EAAI,iBAAiB,YAAa,KAAK,WAAY,EAAI,EACvD,EAAI,iBAAiB,UAAW,KAAK,OAAQ,EAAI,EACjD,KAAK,OAAO,CAAC,CACf,CAEA,OAAO,EAAG,CACR,GAAI,CAAC,KAAK,KAAM,OAChB,MAAM,EAAO,KAAK,KAAK,iBAAiB,+BAA+B,EACnE,KAAK,aAAe,GAAK,EAAK,KAAK,WAAW,GAChD,EAAK,KAAK,WAAW,EAAE,UAAU,OAAO,sCAAsC,EAEhF,KAAK,YAAc,EACf,EAAK,CAAC,IACR,EAAK,CAAC,EAAE,UAAU,IAAI,sCAAsC,EACxD,OAAO,EAAK,CAAC,EAAE,OAAU,YAAY,EAAK,CAAC,EAAE,MAAK,EAE1D,CAEA,UAAU,EAAG,CACX,MAAM,EAAK,KAAK,OAAO,CAAC,EACxB,KAAK,MAAK,EACN,GAAI,EAAG,IAAG,CAChB,CAEA,WAAW,EAAG,CACR,KAAK,MAAQ,KAAK,KAAK,SAAS,EAAE,MAAM,GAC5C,KAAK,MAAK,CACZ,CAEA,OAAO,EAAG,CACJ,CAAC,KAAK,MAAQ,CAAC,KAAK,OAAO,SAC3B,EAAE,MAAQ,UACZ,EAAE,eAAc,EAChB,KAAK,MAAK,GACD,EAAE,MAAQ,aACnB,EAAE,eAAc,EAChB,KAAK,QAAQ,KAAK,YAAc,GAAK,KAAK,OAAO,MAAM,GAC9C,EAAE,MAAQ,WACnB,EAAE,eAAc,EAChB,KAAK,QAAQ,KAAK,YAAc,EAAI,KAAK,OAAO,QAAU,KAAK,OAAO,MAAM,IACnE,EAAE,MAAQ,SAAW,EAAE,MAAQ,OACxC,EAAE,eAAc,EAChB,KAAK,UAAU,KAAK,YAAc,EAAI,EAAI,KAAK,WAAW,GAE9D,CACA,OAAQ,CACN,MAAM,EAAM,KAAK,KAAI,EACjB,IACF,EAAI,oBAAoB,YAAa,KAAK,WAAY,EAAI,EAC1D,EAAI,oBAAoB,UAAW,KAAK,OAAQ,EAAI,GAElD,KAAK,MAAQ,KAAK,KAAK,YACzB,KAAK,KAAK,WAAW,YAAY,KAAK,IAAI,EAE5C,KAAK,KAAO,KACZ,KAAK,OAAS,CAAA,EACd,KAAK,YAAc,EACrB,CACA,UAAW,CACT,KAAK,MAAK,EACV,KAAK,eAAc,CACrB,CACF,CACA,GAAW,iBAAiB,CAAE,YAAa,EAAW,CAAE,EACxD,MAAM,EAAc,CAIlB,YAAY,EAAQ,CAClB,KAAK,EAAI,EAAO,EAChB,KAAK,OAAS,EACd,KAAK,eAAiB,KAAK,EAAE,OAAO,YAAY,IAAI,WAAW,MAAM,UAChE,KAAK,iBACR,KAAK,eAAiB,KAAK,EAAE,OAAO,WAAW,UAEnD,CAQA,oBAAoB,EAAM,CACxB,KAAM,CACJ,EAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,EAAA,EACA,EAAA,EACA,UAAA,EACA,iBAAA,EACA,OAAA,EACA,UAAA,EACA,SAAA,EACA,aAAA,EACA,aAAA,EACA,cAAA,CACN,EAAQ,EACE,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EACrC,EAAc,MAAM,QAAQ,KAAK,OAAO,WAAW,EAAI,KAAK,OAAO,YAAY,CAAS,EAAI,KAAK,OAAO,YAC9G,IAAI,EACA,EACA,EAAE,UAAU,YAAc,CAAC,EAAE,QAAQ,iBACvC,EAAM,EAAI,GAAY,EAAgB,GACtC,EAAM,EAAI,GAAa,EAAgB,GAAK,IAE5C,EAAM,EAAI,EAAW,EACrB,EAAM,EAAI,EAAY,GAExB,IAAI,EAAa,KACb,EAAkB,KAClB,EAAc,EACd,EAAc,EACd,EAEF,CAAA,EAEF,MAAM,EAAmB,EAAE,OAAO,WAC5B,EAAsB,KAAK,OAAO,WAAW,WAC7C,EAA2B,KAAK,OAAO,WAAW,WAAW,MAC/D,OAAO,EAAiB,MAAgB,KAAK,OAAO,YAAc,KAAK,OAAO,aAChF,EAAM,EACN,EAAc,GAEZ,OAAO,EAAiB,KAAe,KAAK,OAAO,4BACrD,EAAM,EACN,EAAc,GAEhB,MAAM,EAAO,GACX,EAAiB,QACjB,EACA,EACA,CACN,EACU,EAAO,GACX,EAAiB,QACjB,EACA,EACA,CACN,EACI,IAAI,EAAY,CACd,MAAO,EACP,OAAQ,CACd,EACI,GAAI,EAAE,OAAO,WAAW,QAAS,CAC/B,MAAM,EAAS,EAAE,WAAW,OAAO,CAAS,EAAE,CAAC,EAC/C,EAAY,EAAS,aACnB,EAAE,OAAO,WAAW,UAAY,EAAE,OAAO,WAAW,UAAU,EAAQ,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CACzG,YAAa,EACb,eAAgB,EAChB,EAAA,CACV,CAAS,CAAC,EAAI,EAAE,WAAW,iBAAiB,CAAC,EAAE,CAAM,EAC7C,WAAW,EAAiB,MAAM,QAAQ,EAAE,SAAQ,CAC5D,CACI,CACA,MAAM,EAAS,CACb,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,UAAA,EACA,iBAAA,EACA,IAAA,EACA,IAAA,EACA,UAAA,EACA,SAAA,EACA,UAAA,EACA,YAAA,EACA,YAAA,EACA,YAAA,EACA,iBAAA,EACA,oBAAA,EACA,yBAAA,EACA,KAAA,EACA,KAAA,CACN,EACI,OAAI,KAAK,OAAO,aACd,EAAgB,KAAK,gCAAgC,CAAM,EAE3D,EAAgB,KAAK,mCAAmC,CAAM,EAEhE,EAAa,KAAK,yBAAyB,CACzC,EAAG,EAAc,YACjB,EAAG,EAAc,YACjB,IAAK,KAAK,OAAO,WAAa,CAAC,EAAI,CAAE,EAAI,EAAE,OAAO,MAAM,YAAc,OAAS,EAAO,CAAS,EAAE,CAAC,EAAI,EAAE,WAAW,OAAO,CAAS,EAAE,CAAC,EACtI,EAAG,EACH,EAAA,EACA,SAAA,EACA,UAAA,EACA,UAAA,EACA,iBAAA,CACN,CAAK,EACG,EAAE,OAAO,MAAM,SAAW,EAAyB,UACrD,EAAkB,KAAK,oBAAoB,CACzC,EAAG,EAAc,iBACjB,EAAG,EAAc,iBACjB,SAAA,EACA,UAAA,EACA,UAAA,EACA,WAAY,EAAc,sBAC1B,IAAK,KAAK,yBAAyB,CAAE,UAAA,EAAW,EAAA,CAAC,CAAE,EACnD,iBAAA,EACA,yBAAA,CACR,CAAO,GAEI,CACL,cAAA,EACA,WAAA,EACA,gBAAA,CACN,CACE,CAEA,yBAAyB,CAAE,UAAA,EAAW,EAAA,CAAC,EAAI,CACzC,MAAM,EAAI,KAAK,EACf,IAAI,EAAM,KAAK,OAAO,oBAAoB,CAAC,EAC3C,OAAI,KAAK,iBACP,EAAM,KAAK,eAAe,EAAK,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CAClE,YAAa,EACb,eAAgB,EAChB,EAAA,CACR,CAAO,CAAC,GAEG,CACT,CAIA,mCAAmC,EAAM,CACvC,MAAM,EAAI,KAAK,EACf,GAAI,CACF,EAAA,EACA,EAAA,EACA,UAAA,EACA,EAAA,EACA,IAAA,EACA,SAAA,EACA,UAAA,EACA,UAAA,EACA,YAAA,EACA,YAAA,EACA,iBAAA,EACA,oBAAA,EACA,yBAAA,EACA,YAAA,EACA,KAAA,EACA,KAAA,CACN,EAAQ,EACA,EACA,EACJ,MAAM,EAAwB,SACxB,EAAqB,EAC3B,EAAY,KAAK,IAAI,CAAS,EAC9B,MAAM,EAAW,EAAE,OAAO,YAAY,IAAI,WAAW,cAAgB,WAC/D,CAAE,eAAA,CAAc,EAAK,KAAK,OAAO,WAAW,uBAAuB,CACvE,EAAA,EACA,EAAA,CACN,CAAK,EACD,EAAM,EAAM,EAAc,EAC1B,MAAM,EAAyB,EAAE,OAAO,UAAY,EAAE,QAAQ,WAC1D,KAAK,OAAO,0BACd,GAAe,EAAW,GAEtB,EAAE,UAAU,WACd,EAAc,EAAM,EAAW,EAAI,EAEnC,EAAc,EAAM,EAAyB,EAAW,EAAI,EAE1D,CAAC,EAAE,OAAO,MAAM,SAAW,EAAiB,GAAK,EAAE,OAAO,YAAY,IAAI,0BAC5E,GAAe,EAAW,IAG1B,IAEF,EAAc,EAAc,EAAU,OAAS,EAAI,EAAc,EAAI,GAEvE,MAAM,EAAgB,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAAI,EAClD,IAAI,EAAO,EAIX,OAHI,KAAK,OAAO,aACd,EAAO,GAAK,EAAgB,EAAY,CAAC,IAEnC,EAAoB,SAAQ,CAClC,IAAK,SACC,EACE,EACF,EAAc,EAAO,EAAY,EAAI,EAErC,EAAc,EAAO,EAAY,EAAI,EAGnC,EACF,EAAc,EAAO,EAAY,EAAI,EAAU,OAAS,EAAI,EAE5D,EAAc,EAAO,EAAY,EAAI,EAAU,OAAS,EAAI,EAGhE,MACF,IAAK,SACC,EACE,EACF,EAAc,EAAO,EAAY,EAEjC,EAAc,EAAO,EAAY,EAG/B,EACF,EAAc,EAAO,EAAY,EAAU,OAAS,EAAc,EAElE,EAAc,EAAO,EAAY,EAAU,OAAS,EAAI,EAAc,EAG1E,MACF,IAAK,MACC,EACE,EACF,EAAc,EAAO,EAErB,EAAc,EAAO,EAGnB,EACF,EAAc,EAAO,EAAU,OAAS,EAAI,EAE5C,EAAc,EAAO,EAAU,OAAS,EAG5C,KACR,CACI,IAAI,EAAc,EAalB,GAZA,EAAE,UAAU,aAAa,QAAS,GAAO,CACvC,IAAI,GACH,EAAK,KAAK,OAAO,EAAG,KAAK,GAAG,CAAC,IAAM,MAAgB,EAAG,MAAM,QAC1D,GAAQ,CACH,EACF,EAAc,KAAK,IAAI,EAAI,CAAC,EAAG,CAAW,EAE1C,EAAc,KAAK,IAAI,EAAI,CAAC,EAAG,CAAW,CAE9C,CACR,CACI,CAAC,EACG,KAAK,OAAO,0BAA4B,GAAa,EAAyB,QAAS,CAGzF,MAAM,EADW,IAAI,EAAS,KAAK,OAAO,CAAC,EACN,aACnC,KAAK,yBAAyB,CAAE,UAAA,EAAW,EAAA,CAAC,CAAE,EAC9C,EAAiB,QACzB,EACU,EACF,EAAmB,EAAc,EAAoB,OAAS,EAAI,EAAO,EAAyB,QAAU,GAE5G,EAAmB,EAAc,EAAoB,OAAS,EAAO,EAAyB,QAAU,GAE1G,MAAM,EAAY,EAClB,EAAmB,GAAsB,EAAE,UAAU,WAAa,CAAC,EAAW,EAAE,QAAQ,UAAU,OAAS,EAAI,EAAE,QAAQ,UAAU,OAAS,EAAW,GAAK,EAAE,QAAQ,UAAU,OAAS,GAAK,EAAW,GAAa,EAAyB,OACjP,CACA,OAAK,EAAE,OAAO,MAAM,UACd,EAAc,EAChB,EAAc,EAAI,EACT,EAAc,EAAU,OAAS,EAAI,EAAE,OAAO,aACvD,EAAc,EAAE,OAAO,WAAa,IAGjC,CACL,IAAA,EACA,IAAK,EACL,YAAA,EACA,YAAA,EACA,iBAAA,EACA,iBAAA,EACA,sBAAA,CACN,CACE,CAIA,gCAAgC,EAAM,CACpC,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,GAAI,CACF,EAAA,EACA,EAAA,EACA,EAAA,EACA,UAAA,EACA,IAAA,EACA,UAAA,EACA,SAAA,EACA,UAAA,EACA,YAAA,EACA,YAAA,EACA,iBAAA,EACA,oBAAA,EACA,yBAAA,EACA,KAAA,EACA,KAAA,CACN,EAAQ,EACJ,MAAM,EAA0B,EAAE,OAAO,WAAa,EAAE,QAAQ,WAC1D,CAAE,eAAA,CAAc,EAAK,KAAK,OAAO,WAAW,uBAAuB,CACvE,EAAA,EACA,EAAA,CACN,CAAK,EACD,EAAW,KAAK,IAAI,CAAQ,EAC5B,IAAI,EACJ,GAAI,KAAK,OAAO,UAAW,CACzB,MAAM,GAAgB,EAAK,EAAU,eAAiB,KAAO,EAAK,EAClE,EAAc,EAAM,EAAY,EAAI,EAAO,CAC7C,MACE,EAAc,GAAO,KAAK,OAAO,WAAa,EAAI,GAA2B,EAAY,EAAI,EAAU,OAAS,EAAI,EAAO,EAEzH,CAAC,EAAE,OAAO,MAAM,SAAW,EAAiB,GAAK,EAAE,OAAO,YAAY,IAAI,0BAC5E,GAAe,EAAY,GAE7B,IAAI,EACA,EACA,EAAwB,QAC5B,MAAM,EAAgB,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAAI,EAClD,IAAI,EAAO,EAKX,GAJI,KAAK,OAAO,aACd,EAAO,GAAK,EAAgB,CAAC,EAAW,GACxC,EAAwB,EAAgB,QAAU,OAEhD,KAAK,OAAO,UACd,EAAc,EAAE,OAAO,UAAY,EAAI,MAEvC,QAAQ,EAAoB,SAAQ,CAClC,IAAK,SACC,EACF,EAAc,EAAO,EAAW,EAAI,EAEpC,EAAc,KAAK,IAAI,EAAU,MAAQ,EAAG,EAAO,EAAW,CAAC,EAAI,EAErE,MACF,IAAK,SACC,EACF,EAAc,EAAO,EAAW,EAAc,EAE9C,EAAc,EAAO,EAAW,EAAc,EAEhD,MACF,IAAK,MACC,EACF,EAAc,EAAO,EAAc,EAEnC,EAAc,EAAO,EAAc,EAErC,KACV,CAEI,IAAI,EAAc,EAalB,GAZA,EAAE,UAAU,aAAa,QAAS,GAAO,CACvC,IAAI,GACH,EAAM,KAAK,OAAO,EAAG,KAAK,GAAG,CAAC,IAAM,MAAgB,EAAI,MAAM,QAC5D,GAAQ,CACH,EACF,EAAc,KAAK,IAAI,EAAI,CAAC,EAAG,CAAW,EAE1C,EAAc,KAAK,IAAI,EAAI,CAAC,EAAG,CAAW,CAE9C,CACR,CACI,CAAC,EACG,KAAK,OAAO,0BAA4B,GAAa,EAAyB,QAAS,CAEzF,MAAM,EADW,IAAI,EAAS,KAAK,OAAO,CAAC,EACN,aACnC,KAAK,yBAAyB,CAAE,UAAA,EAAW,EAAA,CAAC,CAAE,EAC9C,EAAiB,QACzB,EACU,GACF,EAAmB,EAAc,EAAc,EAAO,EAAyB,QAC/E,EAAwB,OAExB,EAAmB,EAAc,EAAO,EAAyB,SAAW,KAAK,OAAO,WAAa,EAAE,EAAW,GAAe,GAEnI,EAAmB,EAAc,EAAU,OAAS,EAAI,EAAoB,OAAS,EAAI,EAAyB,QAAU,EACxH,EAAE,QAAQ,UAAU,OAAS,IAC/B,EAAmB,EAAmB,EAAE,QAAQ,UAAU,OAAS,GAAK,EAAY,GAExF,CACA,OAAK,EAAE,OAAO,MAAM,UACd,EAAiB,aAAe,QAC9B,EAAc,EAAU,MAAQ,EAClC,EAAc,EAAgB,EAAU,MAAQ,EAAc,EAAO,EAAc,EAC1E,EAAc,EAAU,MAAQ,EAAE,OAAO,YAClD,EAAc,EAAgB,EAAE,OAAO,UAAY,EAAc,EAAE,OAAO,UAAY,EAAU,MAAQ,GAEjG,EAAiB,aAAe,SACrC,EAAc,EAAU,MAAQ,EAAI,EACtC,EAAc,EAAU,MAAQ,EAAI,EAC3B,EAAc,EAAU,MAAQ,EAAI,EAAE,OAAO,YACtD,EAAc,EAAE,OAAO,UAAY,EAAU,MAAQ,EAAI,GAElD,EAAiB,aAAe,QACrC,EAAc,EAChB,EAAc,EAAU,MAAQ,EACvB,EAAc,EAAI,EAAE,OAAO,YACpC,EAAc,EAAE,OAAO,UAAY,EAAU,MAAQ,KAIpD,CACL,IAAK,EACL,IAAA,EACA,YAAA,EACA,YAAA,EACA,iBAAA,EACA,iBAAA,EACA,sBAAA,CACN,CACE,CAEA,yBAAyB,CACvB,EAAA,EACA,EAAA,EACA,IAAA,EACA,EAEA,EAAA,EACA,UAAA,EACA,UAAA,EACA,SAAA,EACA,iBAAA,CACJ,EAAK,CACD,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACf,IAAI,EAAS,YACT,EAAE,OAAO,YAAY,IAAI,WAAW,cAAgB,aACtD,EAAS,eAAe,CAAC,KAAK,CAAC,KACjC,MAAM,EAAa,IAAI,GAAW,KAAK,OAAO,EAAG,KAAK,OAAO,GAAG,EAC1D,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EACrC,EAAY,EAAiB,UACnC,IAAI,EAAmB,KACvB,MAAM,EAAuB,EAAE,QAAQ,uBAAuB,QAAQ,CAAC,EAAI,GAC3E,GAAI,EAAiB,SAAW,CAAC,EAAsB,CACrD,EAAmB,EAAS,MAAM,CAChC,MAAO,yBACP,UAAW,CACnB,CAAO,EACD,MAAM,EAAQ,EAAE,OAAO,aACjB,EAAK,EAAM,UAAY,MAAgB,EAAG,UAAc,EAAK,EAAM,UAAY,MAAgB,EAAG,WACtG,EAAiB,KAAK,aACpB,aACA,GAAG,CAAC,KAAK,GAAS,EAAG,EAAG,CAAC,CAAC,EACpC,EACQ,EAAiB,KAAK,aAAa,WAAY,OAAO,CAAC,CAAC,EACpD,OAAO,GAAQ,UAAY,SAAS,CAAG,GACzC,EAAiB,KAAK,aAAa,aAAc,OAAO,CAAG,CAAC,GAGhE,IAAI,EAAO,GACP,OAAO,EAAQ,MACjB,EAAO,EAAU,EAAK,EAAc,EAAe,CAAA,EAAI,CAAC,EAAG,CACzD,YAAa,EACb,eAAgB,EAChB,EAAA,CACV,CAAS,CAAC,GAEA,CAAC,GAAO,EAAE,OAAO,YAAY,IAAI,0BACnC,EAAO,IAET,MAAM,EAAgB,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAAI,EAC5C,EAAW,EAAE,OAAO,YAAY,IAAI,WAAW,SAcrD,GAbI,EAAE,OAAO,YAAY,IAAI,WAAW,cAAgB,aAClD,IAAa,QACX,EAAe,EAAiB,WAAa,MAC5C,EAAiB,WAAa,SAEjC,IAAa,WACf,EAAiB,WAAa,UAE5B,IAAa,WACX,EAAe,EAAiB,WAAa,MAC5C,EAAiB,WAAa,UAGnC,KAAK,OAAO,YAAc,KAAK,OAAO,WAAW,WAAW,sBAAuB,CACrF,MAAM,EAAS,EAAS,aACtB,EACA,WAAW,EAAiB,MAAM,QAAQ,EAAE,SAAQ,CAC9D,EACY,EAAW,EAAO,QACpB,EAAO,GAEX,CACI,EAAE,OAAO,MAAM,SAAW,KAAK,OAAO,WAAW,WAAW,wBAC1D,KAAK,OAAO,aACV,EAAU,MAAQ,IAAM,KAAK,IAAI,CAAQ,IAC3C,EAAO,IAGL,EAAU,OAAS,IAAM,KAAK,IAAI,CAAS,IAC7C,EAAO,KAIb,MAAM,EAA2B,EAAe,CAAA,EAAI,CAAgB,EAChE,KAAK,OAAO,cACV,EAAM,IACJ,EAAiB,aAAe,QAClC,EAAyB,WAAa,MAC7B,EAAiB,aAAe,QACzC,EAAyB,WAAa,UAI5C,EAAW,mBAAmB,CAC5B,EAAA,EACA,EAAA,EACA,KAAA,EACA,EACA,EAAA,EACA,OAAQ,EACR,iBAAkB,EAClB,oBAAqB,GACrB,iBAAkB,EAC1B,CAAO,CACH,CACA,OAAO,CACT,CAEA,oBAAoB,CAClB,EAAA,EACA,EAAA,EACA,IAAA,EACA,UAAA,EACA,WAAA,EACA,yBAAA,CACJ,EAAK,CACD,MAAM,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EAC3C,IAAI,EACJ,OAAI,EAAyB,SAAW,OAAO,EAAM,KAAe,OAAO,EAAM,KAAe,KAAK,OAAO,0BAA4B,IACtI,EAAqB,EAAS,SAAS,CACrC,EAAA,EACA,EAAA,EACA,UAAW,EAAyB,MAAM,MAC1C,KAAM,EACN,WAAA,EACA,WAAY,EAAyB,MAAM,WAC3C,SAAU,EAAyB,MAAM,SACzC,WAAY,EAAyB,MAAM,UACnD,CAAO,GAEI,CACT,CACF,CACA,IAAI,GAAY,KAAe,CAI7B,YAAY,EAAQ,CAClB,KAAK,EAAI,EAAO,EAChB,KAAK,OAAS,CAChB,CAIA,cAAc,EAAQ,CACpB,MAAM,EAAI,KAAK,EACf,KAAK,OAAO,OAAS,EACrB,KAAK,OAAO,WAAa,EACzB,KAAK,OAAO,UAAY,EACxB,KAAK,OAAO,SAAW,GACvB,KAAK,OAAO,aAAe,EAC3B,QAAS,EAAK,EAAG,EAAK,EAAO,OAAQ,IAKnC,GAJI,EAAO,CAAE,EAAE,OAAS,IACtB,KAAK,OAAO,UAAY,KAAK,OAAO,UAAY,EAChD,KAAK,OAAO,YAAc,EAAO,CAAE,EAAE,QAEnC,EAAE,UAAU,WACd,QAAS,EAAI,EAAG,EAAI,EAAO,CAAE,EAAE,OAAQ,IACjC,EAAE,WAAW,QAAQ,CAAE,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,EAAE,WAAW,QAAQ,CAAE,EAAE,CAAC,EAAI,EAAE,QAAQ,MAC1F,KAAK,OAAO,oBAIhB,KAAK,OAAO,aAAe,EAAE,QAAQ,WAGzC,KAAK,gBAAkB,KAAK,sBAAsB,EAAE,WAAW,MAAM,EACjE,EAAQ,SAAQ,IAClB,KAAK,gBAAkB,KAAK,gBAAgB,IACzC,GAIC,EAAM,IAAK,GAAM,MAAM,CAEjC,GAEQ,KAAK,OAAO,YAAc,IAC5B,KAAK,OAAO,UAAY,EAE5B,CAIA,iBAAiB,EAAW,CAC1B,MAAM,EAAI,KAAK,EACf,IAAI,EAAG,EAAG,EAAW,EAAW,EAAW,EAAU,EAAO,EACxD,EAAa,EAAE,QAAQ,WACvB,KAAK,OAAO,aACd,EAAa,EAAE,UAAU,OAAO,QAElC,IAAI,EAAY,KAAK,OAAO,UAI5B,GAHI,EAAE,OAAO,YAAY,IAAI,oBAC3B,EAAY,GAEV,KAAK,OAAO,aACd,EAAY,EAAE,OAAO,WAAa,EAClC,EAAY,EAAY,EACpB,EAAE,UAAU,aACd,EAAY,EAAE,OAAO,WAAa,KAAK,OAAO,WAC9C,EAAY,EAAY,KAAK,OAAO,WAEtC,EAAY,EAAY,SAAS,KAAK,OAAO,WAAW,UAAW,EAAE,EAAI,IACrE,OAAO,KAAK,OAAO,WAAW,SAAS,EAAE,QAAQ,GAAG,IAAM,KAC5D,EAAY,SAAS,KAAK,OAAO,WAAW,UAAW,EAAE,GAE3D,EAAQ,KAAK,OAAO,kBAAoB,EAAE,QAAQ,eAAiB,KAAK,OAAO,WAAa,EAAE,OAAO,UAAY,IAAM,KAAK,OAAO,WAAa,KAAK,OAAO,kBAAoB,EAAI,GAChL,KAAK,OAAO,WACd,EAAQ,EAAE,OAAO,UAAY,GAE/B,GAAK,EAAY,EAAY,KAAK,OAAO,WAAa,MACjD,CAML,GALA,EAAY,EAAE,OAAO,UAAY,KAAK,OAAO,aACzC,EAAE,OAAO,MAAM,wBACjB,EAAY,EAAE,OAAO,UAAY,EAAE,QAAQ,YAE7C,EAAW,EAAY,EAAY,SAAS,KAAK,OAAO,WAAW,YAAa,EAAE,EAAI,IAClF,EAAE,UAAU,WAAY,CAC1B,MAAM,EAAS,KAAK,OAAO,OACvB,EAAE,QAAQ,UAAY,EAAE,QAAQ,WAAa,IAAO,EAAE,QAAQ,SAAW,EAAS,IACpF,EAAY,EAAE,QAAQ,SAAW,GAEnC,EAAW,EAAY,EAAY,SAAS,KAAK,OAAO,WAAW,YAAa,EAAE,EAAI,IAClF,EAAW,IACb,EAAW,EAEf,CACI,OAAO,KAAK,OAAO,WAAW,WAAW,EAAE,QAAQ,GAAG,IAAM,KAC9D,EAAW,SAAS,KAAK,OAAO,WAAW,YAAa,EAAE,GAE5D,EAAQ,EAAE,OAAO,WAAa,KAAK,OAAO,UAAU,KAAK,OAAO,iBAAiB,GAAK,KAAK,OAAO,WAAa,EAAE,OAAO,WAAa,IAAM,KAAK,OAAO,WAAa,KAAK,OAAO,UAAU,KAAK,OAAO,iBAAiB,EAAI,EAAI,GAC3N,EAAE,UAAU,WAOd,EANqB,KAAK,OAAO,uBAAuB,CACtD,EAAA,EACA,EAAG,EACH,UAAA,EACA,SAAA,CACV,CAAS,EACgB,EAEjB,EAAI,EAAE,QAAQ,cAAgB,EAAQ,YAAY,EAAY,EAAW,KAAK,OAAO,SAAS,EAAI,CAEtG,CACA,OAAA,EAAE,QAAQ,UAAY,EACtB,EAAE,QAAQ,SAAW,EACd,CACL,EAAA,EACA,EAAA,EACA,UAAA,EACA,UAAA,EACA,UAAA,EACA,SAAA,EACA,MAAA,EACA,MAAA,CACN,CACE,CAIA,0BAA0B,EAAK,CACnB,EAAI,EACZ,UAAU,aAAa,QAAS,GAAU,CACrC,EAAI,CAAK,IAAG,EAAI,CAAK,EAAI,CAAA,GAC9B,EAAI,CAAK,EAAE,MAAQ,CAAA,EACnB,EAAI,CAAK,EAAE,MAAQ,CAAA,EACnB,EAAI,CAAK,EAAE,OAAS,CAAA,EACpB,EAAI,CAAK,EAAE,OAAS,CAAA,EACpB,EAAI,CAAK,EAAE,SAAW,CAAA,EACtB,EAAI,CAAK,EAAE,SAAW,CAAA,CACxB,CAAC,CACH,CAIA,wBAAwB,EAAK,CACjB,EAAI,EACZ,UAAU,aAAa,QAAS,GAAU,CACrC,EAAI,CAAK,IAAG,EAAI,CAAK,EAAI,CAAA,GAC9B,EAAI,CAAK,EAAE,MAAQ,CAAA,EACnB,EAAI,CAAK,EAAE,OAAS,CAAA,EACpB,EAAI,CAAK,EAAE,SAAW,CAAA,EACtB,EAAI,CAAK,EAAE,MAAQ,CAAA,EACnB,EAAI,CAAK,EAAE,OAAS,CAAA,EACpB,EAAI,CAAK,EAAE,SAAW,CAAA,CACxB,CAAC,CACH,CAOA,iBAAiB,EAAQ,EAAG,EAAG,EAAW,CACxC,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACT,EAAO,IAAI,GAAK,KAAK,OAAO,CAAC,EACnC,IAAI,EAAY,KAChB,MAAM,EAAe,KAAK,OAAO,WAAW,YAAc,EAAI,EAC9D,IAAI,EAAgB,GACpB,OAAI,KAAK,OAAO,WAAW,OAAO,OAAO,OAAS,GAC7B,KAAK,OAAO,WAAW,OAAO,OACtC,IAAK,GAAU,CACpB,EAAO,CAAC,EAAE,CAAC,GAAK,EAAM,MAAQ,EAAO,CAAC,EAAE,CAAC,GAAK,EAAM,KACtD,EAAY,EAAM,MAClB,EAAgB,GAEpB,CAAC,EAUI,CACL,MATe,EAAK,SAAS,CAC7B,aAAc,KAAK,OAAO,WAAW,YAAc,EAAe,EAClE,eAAgB,EAChB,MAAO,EACP,MAAO,EAAO,CAAC,EAAE,CAAC,EAClB,YAAa,EAAK,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,IAAM,KAAO,OAAS,EAAG,KACpE,UAAY,GAAM,EAAK,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,IAAM,KAAO,OAAS,EAAG,OAAS,MAAgB,EAAG,MAAS,EAAK,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,IAAM,KAAO,OAAS,EAAG,KAAK,KAAO,MAAM,QAAQ,EAAE,OAAO,KAAK,IAAI,EAAI,EAAE,OAAO,KAAK,KAAK,CAAS,EAAI,EAAE,OAAO,KAAK,IACzQ,CAAK,EAGC,cAAA,CACN,CACE,CAMA,eAAe,EAAG,EAAG,EAAW,CAC9B,IAAI,EAAc,EAClB,MAAM,EAAI,KAAK,EACf,OAAI,OAAO,KAAK,OAAO,OAAO,CAAC,EAAE,CAAC,EAAM,KAAe,KAAK,OAAO,OAAO,CAAC,EAAE,CAAC,IAAM,MAAQ,EAAE,OAAO,MAAM,OAAS,OAAS,CAAC,KAAK,OAAO,OAAO,CAAC,EAAE,CAAC,EACnJ,KAAK,OAAO,YAAc,GAE1B,KAAK,OAAO,YAAc,GAExB,EAAE,OAAO,OAAO,OACb,KAAK,OAAO,cACf,EAAc,MAAM,QAAQ,KAAK,OAAO,WAAW,EAAI,KAAK,OAAO,YAAY,CAAS,EAAI,KAAK,OAAO,cAGrG,CACT,CAIA,sBAAsB,EAAQ,CAC5B,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAoB,CAAC,KAAK,EAAE,OAAO,MAAM,SAAW,EAAE,OAAO,YAAY,IAAI,cAAgB,EAC7F,EAAY,EAAO,OACnB,IAAe,EAAK,EAAO,CAAC,IAAM,KAAO,OAAS,EAAG,QAAU,EAC/D,EAAS,MAAM,KACnB,CAAE,OAAQ,CAAS,EACnB,IAAM,MAAM,CAAU,EAAE,KAAK,EAAoB,MAAQ,MAAM,CACrE,EACI,GAAI,EAAmB,OAAO,EAC9B,MAAM,EAAY,KAAK,EAAE,OAAO,MAAM,KACtC,QAAS,EAAI,EAAG,EAAI,EAAY,IAAK,CACnC,MAAM,EAAkB,CAAA,EAClB,EAAkB,CAAA,EACxB,IAAI,EAAe,EACnB,QAAS,EAAI,EAAG,EAAI,EAAW,IAAK,CAClC,MAAM,EAAQ,EAAO,CAAC,EAAE,CAAC,EACrB,EAAQ,GACV,EAAgB,KAAK,CAAC,EACtB,KACS,EAAQ,IACjB,EAAgB,KAAK,CAAC,EACtB,IAEJ,CACA,GAAI,EAAgB,OAAS,GAAK,EAAgB,SAAW,EAC3D,GAAI,EAAgB,SAAW,EAC7B,EAAO,EAAgB,CAAC,CAAC,EAAE,CAAC,EAAI,IAAc,OAAS,IAAe,EAAI,MAAQ,WAC7E,CACL,MAAM,EAAqB,EAAgB,CAAC,EACtC,EAAoB,EAAgB,EAAgB,OAAS,CAAC,EACpE,UAAW,KAAK,EACV,IAAM,EACR,EAAO,CAAC,EAAE,CAAC,EAAI,IAAc,OAAS,IAAe,EAAI,MAAQ,SACxD,IAAM,EACf,EAAO,CAAC,EAAE,CAAC,EAAI,MAEf,EAAO,CAAC,EAAE,CAAC,EAAI,MAGrB,SACS,EAAgB,OAAS,GAAK,EAAgB,SAAW,EAClE,GAAI,EAAgB,SAAW,EAC7B,EAAO,EAAgB,CAAC,CAAC,EAAE,CAAC,EAAI,WAC3B,CACL,MAAM,EAAuB,KAAK,IAAI,GAAG,CAAe,EAClD,EAAsB,KAAK,IAAI,GAAG,CAAe,EACvD,UAAW,KAAK,EACV,IAAM,EACR,EAAO,CAAC,EAAE,CAAC,EAAI,SACN,IAAM,EACf,EAAO,CAAC,EAAE,CAAC,EAAI,MAEf,EAAO,CAAC,EAAE,CAAC,EAAI,MAGrB,SACS,EAAgB,OAAS,GAAK,EAAgB,OAAS,EAAG,CACnE,MAAM,EAAoB,EAAgB,EAAgB,OAAS,CAAC,EACpE,UAAW,KAAK,EACV,IAAM,EACR,EAAO,CAAC,EAAE,CAAC,EAAI,MAEf,EAAO,CAAC,EAAE,CAAC,EAAI,OAGnB,MAAM,EAAuB,KAAK,IAAI,GAAG,CAAe,EACxD,UAAW,KAAK,EACV,IAAM,EACR,EAAO,CAAC,EAAE,CAAC,EAAI,SAEf,EAAO,CAAC,EAAE,CAAC,EAAI,MAGrB,SAAW,IAAiB,EAAG,CAC7B,MAAM,EAAQ,EAAgB,CAAC,GAAK,EAAgB,CAAC,EACrD,EAAO,CAAK,EAAE,CAAC,EAAI,MACrB,CACF,CACA,OAAO,CACT,CAEA,cAAc,CAAE,EAAA,EAAG,EAAA,EAAG,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,SAAA,CAAQ,EAAI,CAChD,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EAErC,EADK,IAAI,GAAO,KAAK,OAAO,CAAC,EACN,2BAA0B,EACvD,GAAI,KAAK,OAAO,WAAW,OAAO,oBAAoB,OAAS,GAAK,IAAsB,EAAG,CACvF,GAAK,KAAK,OAAO,WAAW,OAAO,oBAAoB,SACzD,GAAK,KAAK,OAAO,WAAW,OAAO,oBAAoB,QAEzD,MAAM,EAAS,KAAK,OAAO,WAAW,OAAO,oBAAoB,CAAC,EAC5D,EAAO,EAAS,SACpB,OAAO,EAAO,IAAc,EAAK,EACjC,OAAO,EAAO,IAAc,EAAK,EACjC,OAAO,EAAO,IAAc,EAAK,EAAE,OAAO,UAC1C,OAAO,EAAO,IAAc,EAAK,EAAE,OAAO,WAC1C,KAAK,OAAO,WAAW,OAAO,oBAC9B,EACA,KAAK,OAAO,WAAW,OAAO,oBACtC,EACM,EAAS,IAAI,CAAI,EACjB,EAAK,KAAK,UAAU,IAAI,0BAA0B,CACpD,CACF,CAEA,eAAe,CACb,SAAA,EACA,aAAA,EACA,GAAA,EACA,GAAA,EACA,YAAA,EACA,WAAA,EACA,OAAA,EACA,YAAA,EACA,UAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,CACJ,EAAK,CACD,IAAI,EAAI,EAAI,EACZ,MAAM,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EAC3C,EAAc,MAAM,QAAQ,CAAW,EAAI,EAAY,CAAS,EAAI,EAC/D,IAAa,EAAc,GAChC,IAAI,EAAK,EACL,EAAM,GACL,EAAK,EAAE,OAAO,OAAO,CAAS,EAAE,KAAK,CAAC,IAAM,MAAgB,EAAG,oBAClE,EAAM,EAAe,EAAE,OAAO,OAAO,CAAS,EAAE,KAAK,CAAC,EAAE,kBAAoB,EAC5E,EAAK,EAAW,EAAE,OAAO,OAAO,CAAS,EAAE,KAAK,CAAC,EAAE,mBAErD,MAAM,EAAe,EAAc,EAC7B,EAAK,EAAM,EACX,EAAK,EAAM,EAAK,EAChB,GAAa,EAAO,CAAC,EAAE,CAAC,GAAK,EAAI,EAAI,KAAO,EAAa,GAAK,GACpE,GAAM,KAAO,EAAe,EAC5B,GAAM,KAAO,EAAe,EAC5B,MAAM,EAAK,EAAS,KAAK,EAAI,CAAE,EACzB,EAAU,EAAE,OAAO,YAAY,IAAI,0BAA4B,UAAY,KAAK,gBAAgB,CAAS,EAAE,CAAC,IAAM,OAAS,KAAO,KACxI,IAAI,EAAS,EAAS,KAAK,EAAI,CAAE,EAAI,EAAS,KAAK,EAAI,CAAE,EAAI,EAAS,KAAK,EAAI,CAAE,EAAI,EAAK,EACtF,KAAK,gBAAgB,CAAS,EAAE,CAAC,IAAM,SACzC,EAAS,EAAS,iBAChB,EACA,EAAE,OAAO,YAAY,IAAI,YACjC,GAEI,IAAI,EAAW,KACf,MAAM,GAAa,GAAM,EAAK,KAAK,OAAO,MAAQ,KAAO,OAAS,EAAG,kBAAoB,KAAO,OAAS,EAAG,kBAC1G,EACA,CACN,EASI,GARI,EACF,EAAW,EACF,EAAE,QAAQ,cAAc,OAAS,IAC1C,EAAW,KAAK,OAAO,gBAAgB,EAAW,EAAG,CAAM,GAEzD,GAAY,OACd,EAAW,EAAS,KAAK,EAAI,CAAE,EAAI,EAAS,KAAK,EAAI,CAAE,EAAI,EAAK,EAAK,EAAK,EAAK,EAAK,EAAS,KAAK,EAAI,CAAE,EAAI,GAE1G,EAAE,OAAO,MAAM,QAAS,CAC1B,IAAI,EAAO,KAAK,OAChB,EAAO,KAAK,OAAO,CAAW,EAC9B,EAAK,MAAM,KAAK,EAAK,EAAe,CAAS,EAC7C,EAAK,OAAO,KAAK,KAAK,IAAI,EAAK,EAAK,EAAc,CAAS,CAAC,EAC5D,EAAK,SAAS,KAAK,KAAK,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAC7C,CACA,MAAO,CACL,OAAA,EACA,SAAA,CACN,CACE,CAeA,wBAAwB,CACtB,aAAA,EACA,UAAA,EACA,OAAA,EACA,EACA,EAAA,EACA,UAAA,EACA,YAAA,EACA,EAAA,CACJ,EAAK,CACD,IAAI,EAAI,EACR,MAAM,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EACrC,EAAS,EAAE,OAAO,UAAY,EAC9B,EAAgB,GAAM,KAAK,IAAI,EAAI,KAAK,OAAO,cAAc,EAAI,EACjE,EAAU,EAAa,EAAO,CAAC,EAAE,CAAC,CAAC,EACnC,EAAU,EAAO,CAAC,EAAE,OAAS,EAC7B,EAAS,IAAM,EACf,EAAY,EAAE,OAAO,YAAY,OAAO,YAAc,QAAU,QAAU,OAChF,IAAI,EACA,EACF,EAAa,IAAc,QAAU,EAAI,EAEzC,EAAa,EAAa,EAAO,CAAC,EAAE,EAAI,CAAC,CAAC,EAE5C,MAAM,EAAe,EAAc,EAC7B,EAAK,EAAe,EACpB,EAAK,EAAe,EAAY,EAChC,EAAW,EAAS,EACpB,EAAY,EAAS,EACrB,EAAc,EAAS,EACvB,EAAe,EAAS,EACxB,EAAS,EAAS,KAAK,EAAU,CAAE,EAAI,EAAS,KAAK,EAAW,CAAE,EAAI,EAAS,KAAK,EAAc,CAAE,EAAI,EAAS,KAAK,EAAa,CAAE,EAAI,KAC/I,IAAI,EAAW,KACf,MAAM,GAAa,GAAM,EAAK,KAAK,OAAO,MAAQ,KAAO,OAAS,EAAG,kBAAoB,KAAO,OAAS,EAAG,kBAC1G,EACA,CACN,EACI,OAAI,EACF,EAAW,EACF,EAAE,QAAQ,cAAc,OAAS,IAC1C,EAAW,KAAK,OAAO,gBAAgB,EAAW,EAAG,CAAM,GAEzD,GAAY,OACd,EAAW,EAAS,KAAK,EAAQ,CAAE,EAAI,EAAS,KAAK,EAAQ,CAAE,EAAI,EAAS,KAAK,EAAQ,CAAE,EAAI,EAAS,KAAK,EAAQ,CAAE,EAAI,MAEtH,CACL,OAAA,EACA,SAAA,EAGA,EAAG,EACH,GAAI,EACJ,aAAc,CACpB,CACE,CAaA,qBAAqB,EAAY,CAC/B,MAAM,EAAI,KAAK,EACT,EAAa,EAAE,OAAO,WACtB,EAAY,EAAE,OAAO,UACrB,EAAS,EAAW,IAEvB,GAAM,KAAK,IAAI,OAAO,CAAC,GAAK,CAAC,CACpC,EACU,EAAQ,EAAO,OAEnB,CAAC,EAAG,IAAM,EAAI,EACd,CACN,EACI,GAAI,IAAU,GAAK,GAAc,EAC/B,OAAO,EAAO,IAAI,KAAO,CAAE,EAAG,EAAG,OAAQ,EAAG,QAAS,EAAG,WAAY,CAAC,EAAG,EAE1E,MAAM,EAAY,EAAY,EAC9B,IAAI,EAAa,EACjB,MAAM,EAAS,CAAA,EACf,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAW,EAAa,EAC9B,GAAc,EAAO,CAAC,EACtB,MAAM,EAAc,EAAa,EAC3B,EAAO,EAAW,EAClB,EAAU,EAAc,EAC9B,EAAO,KAAK,CACV,EAAG,EACH,OAAQ,EAAU,EAClB,QAAS,EAAW,EACpB,WAAY,EAAc,CAClC,CAAO,CACH,CACA,OAAO,CACT,CAQA,gBAAgB,CACd,aAAA,EACA,UAAA,EACA,QAAA,EACA,WAAA,EACA,UAAA,EACA,EAAA,EACA,YAAA,EACA,EAAA,CACJ,EAAK,CACD,IAAI,EAAI,EACR,MAAM,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EACrC,EAAS,EAAE,OAAO,UAAY,EAC9B,EAAe,EAAc,EAC7B,EAAK,EAAe,EACpB,EAAK,EAAe,EAAY,EAChC,EAAW,EAAS,EACpB,EAAY,EAAS,EACrB,EAAc,EAAS,EACvB,EAAe,EAAS,EACxB,EAAS,EAAS,KAAK,EAAU,CAAE,EAAI,EAAS,KAAK,EAAW,CAAE,EAAI,EAAS,KAAK,EAAc,CAAE,EAAI,EAAS,KAAK,EAAa,CAAE,EAAI,KAC/I,IAAI,EAAW,KACf,MAAM,GAAa,GAAM,EAAK,KAAK,OAAO,MAAQ,KAAO,OAAS,EAAG,kBAAoB,KAAO,OAAS,EAAG,kBAC1G,EACA,CACN,EACI,OAAI,EACF,EAAW,EACF,EAAE,QAAQ,cAAc,OAAS,IAC1C,EAAW,KAAK,OAAO,gBAAgB,EAAW,EAAG,CAAM,GAEzD,GAAY,OACd,EAAW,EAAS,KAAK,EAAQ,CAAE,EAAI,EAAS,KAAK,EAAQ,CAAE,EAAI,EAAS,KAAK,EAAQ,CAAE,EAAI,EAAS,KAAK,EAAQ,CAAE,EAAI,MAEtH,CACL,OAAA,EACA,SAAA,EACA,EAAG,EACH,GAAI,EACJ,aAAc,CACpB,CACE,CAEA,YAAY,CACV,aAAA,EACA,UAAA,EACA,GAAA,EACA,GAAA,EACA,YAAA,EACA,WAAA,EACA,OAAA,EACA,YAAA,EACA,UAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,CACJ,EAAK,CACD,IAAI,EAAI,EAAI,EACZ,MAAM,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EAC3C,EAAc,MAAM,QAAQ,CAAW,EAAI,EAAY,CAAS,EAAI,EAC/D,IAAa,EAAc,GAChC,IAAI,EAAM,EACN,EAAK,GACJ,EAAK,EAAE,OAAO,OAAO,CAAS,EAAE,KAAK,CAAC,IAAM,MAAgB,EAAG,kBAClE,EAAM,EAAe,EAAE,OAAO,OAAO,CAAS,EAAE,KAAK,CAAC,EAAE,gBAAkB,EAC1E,EAAK,EAAY,EAAE,OAAO,OAAO,CAAS,EAAE,KAAK,CAAC,EAAE,iBAEtD,MAAM,EAAe,EAAc,EAC7B,EAAK,EAAM,EACX,EAAK,EAAM,EAAK,EAChB,GAAa,EAAO,CAAC,EAAE,CAAC,GAAK,EAAI,EAAI,KAAO,EAAa,GAAK,GACpE,GAAM,KAAO,EAAe,EAC5B,GAAM,KAAO,EAAe,EAC5B,MAAM,EAAW,KAAK,OAAO,SACvB,EAAQ,GAAY,EAAK,GAAM,EAAI,EACnC,EAAK,EAAS,KAAK,EAAI,CAAE,EACzB,EAAU,EAAE,OAAO,YAAY,IAAI,0BAA4B,UAAY,KAAK,gBAAgB,CAAS,EAAE,CAAC,IAAM,OAAS,KAAO,KACxI,IAAI,EAAS,EAAS,KAAK,EAAI,CAAE,EAAI,EAAS,KAAK,EAAI,CAAE,EAAI,EAAS,KAAK,EAAI,CAAE,EAAI,EAAK,EACtF,KAAK,gBAAgB,CAAS,EAAE,CAAC,IAAM,SACzC,EAAS,EAAS,iBAChB,EACA,EAAE,OAAO,YAAY,IAAI,YACjC,GAEI,IAAI,EAAW,KACf,MAAM,GAAa,GAAM,EAAK,KAAK,OAAO,MAAQ,KAAO,OAAS,EAAG,kBAAoB,KAAO,OAAS,EAAG,kBAC1G,EACA,CACN,EAMI,GALI,EACF,EAAW,EACF,EAAE,QAAQ,cAAc,OAAS,IAC1C,EAAW,KAAK,OAAO,gBAAgB,EAAW,EAAG,CAAM,GAEzD,GAAY,KAAM,CACpB,MAAM,EAAS,EAAW,EAAS,KAAK,EAAO,CAAE,EAAI,EACrD,EAAW,EAAS,KAAK,EAAO,CAAE,EAAI,EAAS,KAAK,EAAO,CAAE,EAAI,EAAS,EAAS,EAAS,EAAS,EAAS,EAAS,KAAK,EAAO,CAAE,EAAI,CAC3I,CACA,GAAI,EAAE,OAAO,MAAM,QAAS,CAC1B,IAAI,EAAO,KAAK,OAChB,EAAO,KAAK,OAAO,CAAW,EAC9B,EAAK,MAAM,KAAK,EAAK,EAAe,CAAS,EAC7C,EAAK,OAAO,KAAK,KAAK,IAAI,EAAK,EAAK,EAAc,CAAS,CAAC,EAC5D,EAAK,SAAS,KAAK,KAAK,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAC7C,CACA,MAAO,CACL,OAAA,EACA,SAAA,CACN,CACE,CAKA,aAAa,EAAO,EAAO,EAAsB,GAAM,CACrD,IAAI,EAAU,EAAsB,EAAQ,KAC5C,OAAI,OAAO,EAAU,KAAe,IAAU,OAC5C,EAAU,EAAQ,EAAQ,KAAK,OAAO,gBAAkB,KAAK,OAAO,WAAa,EAAQ,KAAK,OAAO,eAAiB,GAAK,GAEtH,CACT,CAMA,aAAa,EAAO,EAAO,EAAmB,EAAsB,GAAM,CACxE,IAAI,EAAU,EAAsB,EAAQ,KAC5C,OAAI,OAAO,EAAU,KAAe,IAAU,OAC5C,EAAU,EAAQ,EAAQ,KAAK,OAAO,OAAO,CAAiB,GAAK,KAAK,OAAO,WAAa,EAAQ,KAAK,OAAO,OAAO,CAAiB,EAAI,GAAK,GAE5I,CACT,CASA,cAAc,EAAM,EAAO,EAAO,EAAG,EAAG,EAAmB,CACzD,MAAM,EAAI,KAAK,EACT,EAAQ,CAAA,EACR,EAAW,CAAC,EAAO,IAAU,CACjC,EAAM,KAAK,CACT,CAAC,CAAI,EAAG,IAAS,IAAM,KAAK,aAAa,EAAO,EAAO,EAAK,EAAI,KAAK,aAAa,EAAO,EAAO,EAAmB,EAAK,EACxH,MAAA,CACR,CAAO,CACH,EAMA,GALI,EAAE,WAAW,YAAY,CAAC,GAAK,EAAE,WAAW,YAAY,CAAC,EAAE,CAAC,GAAK,MAAM,QAAQ,EAAE,WAAW,YAAY,CAAC,EAAE,CAAC,CAAC,GAC/G,EAAE,WAAW,YAAY,CAAC,EAAE,CAAC,EAAE,QAAS,GAAS,CAC/C,EAAS,EAAK,MAAO,CAAI,CAC3B,CAAC,EAEC,KAAK,OAAO,WAAW,YAAc,EAAE,UAAU,YAAY,OAAQ,CACvE,MAAM,EAAS,KAAK,OAAO,WAAW,eAAiB,KAAK,OAAO,WAAW,eAAiB,EAAE,QAAQ,OACnG,EAAc,CAClB,aAAc,IAAS,IAAM,EAAI,EAAE,QAAQ,QAAQ,KAAK,CAAC,EACzD,YAAa,IAAS,IAAM,EAAE,QAAQ,QAAQ,KAAK,CAAC,EAAI,EACxD,gBAAiB,EACjB,cAAe,QACf,YAAa,MAAM,QAAQ,EAAO,CAAC,CAAC,EAAI,EAAO,CAAC,EAAE,CAAC,EAAI,EAAO,CAAC,CACvE,EACM,EAAS,EAAE,UAAU,iBAAiB,CAAC,EAAE,CAAC,EAAG,CAAW,EACxD,EAAS,EAAE,UAAU,eAAe,CAAC,EAAE,CAAC,EAAG,EAAc,EAAe,CAAA,EAAI,CAAW,EAAG,CACxF,YAAa,MAAM,QAAQ,EAAO,CAAC,CAAC,EAAI,EAAO,CAAC,EAAE,CAAC,EAAI,EAAO,CAAC,CACvE,CAAO,CAAC,CACJ,CACA,OAAO,CACT,CAEA,aAAa,CACX,aAAA,EACA,aAAA,EACA,MAAA,EACA,MAAA,EACA,SAAA,EACA,UAAA,CACJ,EAAK,CAED,GAAI,EADa,MAAM,QAAQ,CAAK,GAAK,EAAM,OAAS,GAAK,MAAM,QAAQ,CAAK,GAAK,EAAM,OAAS,GAElG,OAAO,KAET,MAAM,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EACrC,EAAY,EAAS,MAAM,CAC/B,UAAW,6BACjB,CAAK,EACD,EAAU,KAAK,UAAU,IAAI,2BAA2B,EACxD,KAAK,OAAO,EAAE,QAAQ,gBAAgB,KAAK,CACzC,GAAI,EAAU,IACpB,CAAK,EACD,EAAU,KACR,YACA,0BAA0B,KAAK,OAAO,EAAE,QAAQ,IAAI,GAC1D,EACI,IAAI,EAAO,KACX,OAAI,KAAK,OAAO,aACV,MAAM,QAAQ,CAAK,GACrB,EAAM,QAAS,GAAS,CACtB,GAAI,EAAK,GAAK,IAAM,EAAK,GAAK,EAAS,EAAE,OAAO,UAAY,EAAG,CAC7D,MAAM,EAAU,OAAO,EAAK,MAAM,aAAiB,IAAc,EAAK,MAAM,aAAe,EAAY,EACjG,EAAI,EAAe,EAAU,EAAY,EAC/C,EAAO,EAAS,SACd,EAAK,EACL,EAAI,EAAU,EACd,EAAK,EACL,EACA,EAAK,MAAM,YAAc,EAAK,MAAM,YAAc,OAClD,EAAK,MAAM,gBACX,EAAK,MAAM,YAAc,EAAK,MAAM,YAAc,EAClD,EAAK,MAAM,aACzB,EACY,EAAU,IAAI,CAAI,CACpB,CACF,CAAC,EAGC,MAAM,QAAQ,CAAK,GACrB,EAAM,QAAS,GAAS,CACtB,GAAI,EAAK,GAAK,IAAM,EAAK,GAAK,EAAS,EAAE,OAAO,WAAa,EAAG,CAC9D,MAAM,EAAS,OAAO,EAAK,MAAM,YAAgB,IAAc,EAAK,MAAM,YAAc,EAAW,EAC7F,EAAI,EAAe,EAAS,EAAW,EAC7C,EAAO,EAAS,SACd,EAAI,EAAS,EACb,EAAK,EACL,EACA,EAAK,EACL,EAAK,MAAM,YAAc,EAAK,MAAM,YAAc,OAClD,EAAK,MAAM,gBACX,EAAK,MAAM,aAAe,EAAK,MAAM,aAAe,EACpD,EAAK,MAAM,aACzB,EACY,EAAU,IAAI,CAAI,CACpB,CACF,CAAC,EAGE,CACT,CAEA,cAAc,CAAE,UAAA,EAAW,UAAA,EAAW,MAAA,EAAO,UAAA,EAAW,EAAA,CAAC,EAAI,CAC3D,MAAM,EAAI,KAAK,EACT,CAAE,EAAG,EAAQ,GAAI,EAAQ,aAAc,CAAM,EAAK,EAClD,CAAE,EAAG,EAAQ,GAAI,EAAQ,aAAc,CAAM,EAAK,EAClD,EAAS,EAAS,EAAU,UAC5B,EAAW,IAAI,EAAS,KAAK,OAAO,CAAC,EACrC,EAAQ,IAAI,EACZ,EAAa,EAAS,KAAK,EAAQ,CAAM,EAAI,EAAS,KAAK,EAAQ,CAAM,EAAI,EAAS,KAAK,EAAQ,CAAM,EAAI,EAAS,KAAK,EAAQ,CAAM,EAAI,EAAS,KAAK,EAAQ,CAAM,GAAK,EAAE,OAAO,YAAY,IAAI,0BAA4B,UAAY,KAAK,gBAAgB,CAAS,EAAE,CAAC,IAAM,OAAS,KAAO,MAC5S,OAAO,EAAS,SAAS,CACvB,EAAG,EACH,KAAM,EAAM,WAAW,GAAK,EAAQ,QAAQ,CAAK,CAAC,EAClD,OAAQ,OACR,YAAa,EACb,YAAa,EACb,QAAS,qDACf,CAAK,CACH,CAEA,uBAAuB,CAAE,EAAA,EAAG,EAAA,CAAC,EAAI,CAC/B,IAAI,EACJ,MAAM,EAAI,KAAK,EACf,IAAI,EAAiB,EACjB,EAAiB,EAErB,OADsB,EAAE,OAAO,YAAY,IAAI,WAAa,EAAE,WAAW,OAAO,IAAI,CAAC,EAAG,IAAO,CAAE,IAAM,EAAK,EAAE,QAAQ,eAAiB,KAAO,OAAS,EAAG,EAAE,IAAK,GAAO,CAAE,IAAM,CAAA,GAClK,QAAS,GAAQ,CAC7B,MAAM,EAAM,EAAE,QAAQ,cAAc,CAAG,EAAE,CAAC,EACtC,GACF,IAEE,EAAM,GAAK,IAAQ,GACrB,GAEJ,CAAC,EACM,CACL,eAAA,EACA,eAAA,CACN,CACE,CAIA,cAAc,EAAa,CACzB,MAAM,EAAI,KAAK,EACT,EAAa,EAAE,UAAU,aAAa,UACzC,GAIC,EAAM,QAAQ,EAAE,WAAW,YAAY,CAAW,CAAC,EAAI,EAE/D,EACU,EAAM,KAAK,OAAO,mBACxB,IAAI,EAAmB,EAAI,QAAQ,CAAU,EAC7C,OAAI,EAAmB,IACrB,EAAI,KAAK,CAAU,EACnB,EAAmB,EAAI,OAAS,GAE3B,CAAE,WAAA,EAAY,iBAAA,CAAgB,CACvC,CACF,EACA,MAAM,EAAI,CAMR,YAAY,EAAG,EAAK,EAAU,CAC5B,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,WAAa,EAAE,OAAO,YAAY,IACvC,KAAK,aAAe,KAAK,WAAW,WACpC,KAAK,YAAc,EAAE,OAAO,OAAO,MACnC,KAAK,YAAc,GACnB,KAAK,WAAa,EAAE,UAAU,YAAY,QAAU,KAAK,aACzD,KAAK,0BAA4B,CAAC,EAAE,QAAQ,iBAAmB,EAAE,UAAU,YAAY,QAAU,EAAE,OAAO,YAAY,IAAI,kBAC1H,KAAK,SAAW,KAAK,WAAW,SAChC,KAAK,UAAY,KAAK,WAAW,UACjC,KAAK,cAAgB,KACrB,KAAK,SAAW,EAChB,KAAK,OAAS,EACd,KAAK,OAAS,CAAA,EACd,KAAK,eAAiB,EACtB,KAAK,eAAiB,EACtB,KAAK,UAAY,CAAA,EACjB,KAAK,kBAAoB,EACrB,KAAK,WAAa,OACpB,KAAK,OAAS,EAAS,OACvB,KAAK,OAAS,EAAS,OACvB,KAAK,eAAiB,EAAS,eAC/B,KAAK,eAAiB,EAAS,eAC/B,KAAK,UAAY,EAAS,UAC1B,KAAK,kBAAoB,EAAS,mBAEpC,KAAK,WAAa,EAClB,KAAK,kBAAoB,EACzB,KAAK,UAAY,EACjB,KAAK,QAAU,CAAA,EACf,KAAK,WAAa,KAClB,KAAK,SAAW,KAChB,KAAK,kBAAoB,KACzB,KAAK,OAAS,CAAA,EACd,KAAK,SAAW,KAChB,KAAK,SAAW,EAChB,KAAK,WAAa,GAClB,MAAM,EAAM,IAAI,GAAO,KAAK,CAAC,EAC7B,KAAK,wBAA0B,EAAI,2BAA2B,OAAQ,CACpE,MACA,QACN,CAAK,EACD,KAAK,mBAAqB,CAAA,EAC1B,MAAM,EAAmB,EAAI,oBAAmB,EAC1C,EAAY,IAAI,GAAU,KAAK,CAAC,EACtC,KAAK,oBAAsB,EAAU,uBACnC,KAAK,EAAE,OAAO,OAAO,IAAI,CAAC,EAAG,IACpB,EAAiB,QAAQ,CAAC,IAAM,GAAK,EAAI,EACjD,EAAE,OAAQ,GACF,IAAM,EACd,CACP,EACI,KAAK,WAAa,IAAI,GAAU,IAAI,CACtC,CAOA,KAAK,EAAQ,EAAa,CACxB,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAY,IAAI,GAAU,KAAK,CAAC,EACtC,EAAS,EAAU,aAAa,CAAM,EACtC,KAAK,OAAS,EACd,KAAK,OAAS,EAAU,cAAc,KAAK,MAAM,EACjD,KAAK,WAAW,cAAc,CAAM,EACpC,MAAM,EAAM,EAAS,MAAM,CACzB,MAAO,8CACb,CAAK,EACG,EAAE,OAAO,WAAW,SAClB,KAAK,WAAa,KAAK,WAAW,WAAW,UAC/C,QAAQ,KACN,iIACV,EAGI,QAAS,EAAI,EAAG,EAAK,EAAG,EAAI,EAAO,OAAQ,IAAK,IAAM,CACpD,IAAI,EAAG,EACP,MAAM,EAAQ,CAAA,EACR,EAAQ,CAAA,EACR,EAAY,EAAE,QAAQ,YAE1B,EAAY,CAAC,EACX,EACE,CAAE,iBAAA,CAAgB,EAAK,KAAK,WAAW,cAAc,CAAS,EAC9D,EAAW,EAAS,MAAM,CAC9B,MAAO,oBACP,IAAK,EAAI,EACT,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAS,CAAC,EACpE,iBAAkB,CAC1B,CAAO,EACD,GAAO,0BAA0B,KAAK,EAAG,EAAU,CAAS,EACxD,EAAO,CAAC,EAAE,OAAS,IACrB,KAAK,SAAW,KAAK,SAAW,GAE9B,KAAK,OAAO,OAAS,IACvB,KAAK,WAAa,EAAE,QAAQ,sBAAsB,CAAS,EAC3D,KAAK,kBAAoB,GAE3B,MAAM,EAAoB,KAAK,kBAC/B,KAAK,WAAa,EAAE,OAAO,MAAM,KAAK,UAAU,GAAK,EAAE,OAAO,MAAM,KAAK,UAAU,EAAE,SACjF,KAAK,YACP,KAAK,cAAgB,KAAK,WAAW,qBAAqB,EAAO,CAAC,CAAC,GAErE,MAAM,EAAgB,KAAK,WAAW,iBAAiB,CAAS,EAC1D,CACJ,EACA,UAAA,EAEA,MAAA,EAEA,EAAG,EACH,UAAA,EAEA,MAAA,CAER,EAAU,EACJ,IAAI,EAAY,EAAc,UAC1B,EAAW,EAAc,SAC7B,EAAI,EACJ,EAAI,EACC,KAAK,cACR,EAAM,KAAK,GAAK,GAA8B,GAAK,CAAC,EAEtD,MAAM,EAAmB,EAAS,MAAM,CACtC,MAAO,wBACP,iBAAkB,CAC1B,CAAO,EACD,EAAE,QAAQ,gBAAgB,KAAK,CAC7B,GAAI,EAAiB,KAMrB,kBAAmB,GAAG,EAAK,EAAE,OAAO,WAAW,UAAY,MAAgB,EAAG,UAAY,KAAK,mBAAmB,CAAS,CACnI,CAAO,EACD,EAAiB,KAAK,UAAU,IAAI,2BAA2B,EAC/D,MAAM,EAAiB,EAAS,MAAM,CACpC,MAAO,8BACf,CAAO,EACK,EAAe,EAAS,MAAM,CAClC,MAAO,wBACf,CAAO,EACD,EAAE,QAAQ,gBAAgB,KAAK,CAC7B,GAAI,EAAa,IACzB,CAAO,EACD,EAAa,KAAK,UAAU,IAAI,2BAA2B,EAC3D,QAAS,EAAI,EAAG,EAAI,EAAO,CAAC,EAAE,OAAQ,IAAK,CACzC,MAAM,EAAc,KAAK,WAAW,eAAe,EAAG,EAAG,CAAS,EAClE,IAAI,EAEF,KAEF,MAAM,EAAc,CAClB,QAAS,CACP,EAAA,EACA,EAAA,EACA,UAAA,EACA,kBAAA,EACA,GAAA,CACZ,EACU,EAAA,EACA,EAAA,EACA,YAAA,EACA,SAAA,CACV,EACY,KAAK,cACP,EAAQ,KAAK,aAAa,EAAc,EAAe,CAAA,EAAI,CAAW,EAAG,CACvE,UAAA,EACA,MAAA,EACA,UAAA,CACZ,CAAW,CAAC,EACF,EAAW,KAAK,OAAO,CAAC,EAAE,CAAC,EAAI,KAAK,iBAEpC,EAAQ,KAAK,gBAAgB,EAAc,EAAe,CAAA,EAAI,CAAW,EAAG,CAC1E,UAAA,EACA,SAAA,EACA,MAAA,CACZ,CAAW,CAAC,EACF,EAAY,KAAK,OAAO,CAAC,EAAE,CAAC,EAAI,KAAK,OAAO,CAAiB,GAE/D,MAAM,EAAW,KAAK,WAAW,iBAC/B,EACA,EACA,EACA,CACV,EACQ,GAAI,KAAK,UAAY,CAAC,KAAK,WAAa,KAAK,WAAW,cAAgB,EAAK,EAAE,OAAO,YAAY,SAAW,KAAO,OAAS,EAAG,SAAW,aAAe,KAAK,QAAQ,QAAU,EAAI,EAAG,CACtL,MAAM,EAAY,KAAK,WAAW,cAAc,CAC9C,MAAO,OAAO,EAAS,OAAU,YAAc,EAAK,EAAS,QAAU,KAAO,OAAS,EAAG,QAAQ,KAAK,KAAO,GAAK,EAAS,MAAQ,EAAQ,UAAU,EAAE,QAAQ,OAAO,CAAC,CAAC,EACzK,UAAW,KAAK,QAAQ,KAAK,QAAQ,OAAS,CAAC,EAC/C,UAAW,EACX,UAAA,EACA,EAAA,CACZ,CAAW,EACD,EAAa,IAAI,CAAS,EACtB,EAAE,OAAO,MAAM,WAAW,SACZ,IAAI,GAAQ,KAAK,CAAC,EAC1B,WAAW,EAAW,EAAE,OAAO,MAAM,WAAY,CAAS,CAEtE,CACA,KAAK,QAAQ,KAAK,CAAK,EACvB,MAAM,EAAc,KAAK,WAAW,aAAa,CAC/C,aAAc,EAAM,aACpB,aAAc,EAAM,aACpB,MAAO,EAAM,MACb,MAAO,EAAM,MACb,UAAA,EACA,SAAA,CACV,CAAS,EACG,GACF,EAAe,IAAI,CAAW,EAEhC,EAAI,EAAM,EACV,EAAI,EAAM,EACN,EAAI,GACN,EAAM,KAAK,GAAK,GAA8B,GAAK,CAAC,EAEtD,EAAM,KAAK,CAAC,EACZ,KAAK,aAAa,EAAc,EAAe,CAC7C,UAAA,EACA,SAAU,EAAS,KAC7B,EAAW,EAAS,cAAgB,CAAE,SAAU,EAAS,KAAK,EAAK,CAAA,CAAE,EAAG,CAC9D,EAAA,EACA,EAAA,EACA,iBAAA,EACA,SAAU,EAAM,SAChB,OAAQ,EAAM,OACd,YAAA,EACA,SAAA,EACA,EAAA,EACA,EAAA,EACA,OAAA,EACA,UAAW,KAAK,IAAI,EAAM,UAAY,EAAM,UAAY,CAAS,EACjE,SAAU,KAAK,IAAI,EAAM,SAAW,EAAM,SAAW,CAAQ,EAC7D,iBAAA,EACA,eAAA,EACA,aAAA,EACA,cAAe,KAAK,SACpB,KAAM,KAChB,CAAS,CAAC,CACJ,CAGA,GAFA,EAAE,QAAQ,cAAc,CAAS,EAAI,EACrC,EAAE,QAAQ,cAAc,CAAS,EAAI,EACjC,EAAE,QAAQ,cAAc,OAAS,EAAG,CACtC,MAAM,EAAU,CAAA,EAChB,QAAS,EAAI,EAAG,EAAI,EAAO,CAAC,EAAE,OAAQ,IACpC,EAAQ,KAAK,GAAS,EAAG,EAAW,CAAC,CAAC,EAExC,GAAoB,CAClB,EAAA,EACA,SAAA,EACA,OAAQ,KAAK,YAAY,CAAS,EAClC,QAAA,EACA,aAAc,KAAK,aACnB,MAAO,EAAE,OAAO,MAAM,WAAW,iBAAiB,KAC5D,CAAS,CACH,CACA,EAAI,IAAI,CAAQ,CAClB,CACA,OAAO,CACT,CAEA,aAAa,CACX,UAAA,EACA,SAAA,EACA,SAAA,EACA,EAAA,EACA,EAAA,EACA,iBAAA,EACA,SAAA,EACA,OAAA,EACA,YAAA,EACA,SAAA,EACA,EAAA,EAEA,EAAA,EAEA,GAAA,EAEA,GAAA,EAEA,OAAA,EACA,UAAA,EACA,SAAA,EACA,aAAA,EACA,aAAA,EACA,iBAAA,EACA,eAAA,EACA,aAAA,EACA,cAAA,EACA,KAAA,EACA,QAAA,CACJ,EAAK,CACD,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EACxC,EAAO,GAAc,KAAK,IAAK,CAAQ,EAC7C,IAAI,EAAc,GAKlB,GAJK,EAAS,qBACZ,EAAS,mBAAqB,GAC9B,EAAS,qBAAqB,EAAU,eAAe,CAAI,OAAO,GAEhE,CAAC,EAAU,CACb,IAAI,EAAa,SAAS,EAAI,CAC5B,MAAM,EAAM,EAAE,OAAO,OAAO,OAC5B,IAAI,EACJ,OAAI,MAAM,QAAQ,CAAG,GAAK,EAAI,OAAS,IACrC,EAAI,EAAI,CAAE,EACL,IAAG,EAAI,IACR,OAAO,GAAM,YACR,EAAE,CACP,MAAO,EAAE,WAAW,OAAO,CAAE,EAAE,CAAC,EAChC,eAAgB,EAChB,EAAA,CACd,CAAa,EAGE,CACT,EACA,MAAM,EAAsB,OAAO,EAAE,QAAQ,OAAO,OAAO,CAAS,GAAM,WAAa,EAAW,CAAS,EAAI,EAAE,QAAQ,OAAO,OAAO,CAAS,EAChJ,EAAW,KAAK,WAAW,YAAc,EAAE,QAAQ,OAAO,OAAO,CAAC,EAAI,CACxE,CAEA,MAAM,EADgB,IAAI,GAAc,IAAI,EAG5B,oBAAoB,CAChC,EAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,EAAA,EACA,EAAA,EACA,OAAA,EACA,UAAA,EACA,iBAAA,EACA,UAAA,EACA,SAAA,EACA,aAAA,EACA,aAAA,EACA,cAAA,CACR,CAAO,EAEE,EAAE,QAAQ,kBACT,EAAc,cAAc,YAAc,KAAK,IAAI,EAAU,EAAE,QAAQ,oBAAoB,EAAI,GAAK,EAAc,cAAc,YAAc,KAAK,IAAI,EAAU,EAAE,QAAQ,oBAAoB,EAAI,EAAE,OAAO,aAC9M,EAAc,IAKhB,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,GACzB,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,cAE3B,EACA,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,aAEzB,KAAK,cACP,EAAW,QAEb,MAAM,EAAU,EAAE,OAAO,MAAM,WACzB,EAAU,EAAQ,iBAClB,EAAiB,GAAW,EAAQ,UAAY,IAAS,EAAE,EAAE,QAAQ,aAAe,KAAK,cAAc,CAAS,GACtH,IAAI,EAAQ,EACZ,GAAI,EAAgB,CAClB,MAAM,EAAY,EAAE,QAAQ,YAAc,EACpC,EAAa,EAAQ,OAAS,EAC9B,EAAc,KAAK,IACvB,EACA,EAAQ,MAAQ,GAAM,KAAK,IAAI,EAAG,CAAS,CACnD,EACM,IAAI,EAAU,GAAe,CAC3B,MAAO,aACP,MAAO,EACP,UAAW,CACnB,CAAO,EACG,EAAE,OAAO,MAAM,UACjB,GAAW,EAAI,EAAc,IAG/B,EAAQ,GADY,GAAc,EAEpC,CACA,GAAI,CAAC,EAAa,CAEhB,MAAM,IADgB,EAAK,KAAK,IAAI,kBAAoB,KAAO,OAAS,EAAG,SAAQ,KAAQ,GACrD,KAAK,IAAI,gBAAgB,SAAQ,EAAK,EAAE,OAAO,MAAM,WAAW,iBAAiB,MACjH,EAEJ,EAAK,YAAY,CACf,EAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,EACA,OAAA,EACA,OAAQ,EACR,YAAA,EACA,cAAe,EAAE,OAAO,OAAO,QAC/B,KAAM,EACN,eAAgB,EAChB,aAAc,EAAE,OAAO,MAAM,WAAW,MACxC,gBAAA,EACA,UAAW,cAAc,CAAI,SAAS,CAAO,GAC7C,UAAW,EACX,kBAAmB,EAC7B,CAAS,EAEH,EAAa,KAAK,YAAa,uBAAuB,EAAE,QAAQ,IAAI,GAAG,EACvE,MAAM,EAAW,EAAE,OAAO,mBACtB,EAAS,MAAQ,GACf,GAAK,EAAE,QAAQ,WAAa,EAAS,QACvC,EAAa,KAAK,aAAa,mBAAoB,EAAS,SAAS,EACrE,EAAa,KAAK,aAAa,eAAgB,EAAS,WAAW,EACnE,EAAa,KAAK,aAAa,eAAgB,EAAS,WAAW,GAGnE,OAAO,EAAO,KAAe,OAAO,EAAO,MAC7C,EAAa,KAAK,gBAAiB,CAAE,EACrC,EAAa,KAAK,gBAAiB,CAAE,GAEvB,IAAI,GAAQ,KAAK,CAAC,EAC1B,mBAAmB,EAAc,EAAW,CAAC,EACrD,EAAS,IAAI,CAAY,EACzB,EAAa,KAAK,CAChB,GAAI,EAAc,cAAc,IAChC,GAAI,EAAc,cAAc,IAChC,EAAA,EACA,IAAK,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAC7B,UAAA,EACA,SAAA,EAGA,eAAgB,GAAS,EAAG,EAAW,CAAC,CAChD,CAAO,EACG,EAAK,OAAS,WACX,EAAE,QAAQ,kBAAiB,EAAE,QAAQ,gBAAkB,CAAA,GACvD,EAAE,QAAQ,gBAAgB,CAAS,IACtC,EAAE,QAAQ,gBAAgB,CAAS,EAAI,CAAA,GAEzC,EAAE,QAAQ,gBAAgB,CAAS,EAAE,CAAC,EAAI,CACxC,GAAI,EAAc,cAAc,IAChC,GAAI,EAAc,cAAc,IAChC,SAAA,CACV,GAEU,EAAc,aAAe,MAC/B,EAAiB,IAAI,EAAc,UAAU,EAE3C,EAAc,iBAChB,EAAiB,IAAI,EAAc,eAAe,EAEpD,EAAS,IAAI,CAAgB,EACzB,GACF,EAAS,IAAI,CAAc,EAEzB,GACF,EAAS,IAAI,CAAY,CAE7B,CACA,OAAO,CACT,CAEA,aAAa,CACX,QAAA,EACA,UAAA,EACA,YAAA,EACA,MAAA,EACA,EAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,CACJ,EAAK,CACD,MAAM,EAAI,KAAK,EACT,EAAI,EAAQ,EACZ,EAAI,EAAQ,EAClB,IAAI,EACJ,GAAI,EAAE,UAAU,WACd,GAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,KAAK,eAAiB,EAC1E,EAAe,EAAI,EAAY,KAAK,iBAEhC,EAAE,OAAO,YAAY,IAAI,wBAAyB,CACpD,KAAM,CAAE,eAAA,EAAgB,eAAA,CAAc,EAAK,KAAK,WAAW,uBAAuB,CAAE,EAAA,EAAG,EAAA,CAAC,CAAE,EACtF,EAAiB,IACnB,EAAY,KAAK,UAAY,EAAY,GAE3C,EAAe,EAAI,EAAY,KAAK,SACpC,GAAgB,EAAY,CAC9B,MACE,EAAe,EAAI,EAAY,KAAK,SAGxC,MAAM,EAAe,KAAK,UAAY,EAAE,OAAO,YAAY,OAAO,QAAU,YACtE,EAAa,KAAK,WAAa,KAAK,cAAgB,KAAK,cAAc,CAAC,EAAI,KAC5E,EAAa,CAAC,CAAC,EACrB,GAAI,EACF,EAAe,EAAW,EAC1B,EAAY,EAAW,eACd,KAAK,UAAY,CAAC,EAAc,CACzC,MAAM,EAAS,GAAwB,EACvC,EAAQ,GAEP,KAAK,WAAW,aAEf,KAAK,OAAO,CAAC,EAAE,CAAC,EAChB,CACR,EAAU,GAAU,CAChB,CACA,EAAI,KAAK,WAAW,aAElB,KAAK,OAAO,CAAC,EAAE,CAAC,EAChB,GAAwB,CAC9B,EACI,IAAI,EACJ,OAAI,EACF,EACA,KAAK,WAAW,gBAAgB,CAC9B,aAAA,EACA,UAAA,EACA,QAAS,EAAW,QACpB,WAAY,EAAW,WACvB,UAAW,EAAQ,UACnB,EAAA,EACA,YAAA,EACA,EAAA,CACR,CAAO,EACQ,EACT,EACA,KAAK,WAAW,wBAAwB,CACtC,aAAA,EACA,UAAA,EACA,OAEE,KAAK,OAEP,EAAA,EACA,EAAA,EACA,UAAW,EAAQ,UACnB,YAAA,EACA,EAAA,CACR,CAAO,EAED,EACA,KAAK,WAAW,YAAY,CAC1B,aAAA,EACA,UAAA,EACA,GAAI,EACJ,GAAI,EACJ,YAAA,EACA,WAAY,KAAK,WACjB,OAAQ,KAAK,OACb,UAAW,EAAQ,UACnB,EAAA,EACA,EAAA,EACA,EAAA,CACR,CAAO,GAEC,GAAgB,KAClB,EAAQ,EAAM,GACd,EAAI,EAAM,GAER,CAAC,EAAE,UAAU,YAAc,CAAC,IAC9B,EAAI,EAAI,GAEN,IACF,EAAI,GAEN,KAAK,WAAW,cAAc,CAC5B,EAAA,EACA,EAAA,EACA,GAAI,EAAe,EAAY,KAAK,SACpC,GAAI,EAAY,KAAK,UACrB,SAAA,CACN,CAAK,EACM,CACL,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,GAAI,EACJ,EAAA,EACA,EAAA,EACA,MAAO,KAAK,WAAW,cACrB,IACA,EAEA,KACA,EAAQ,UACR,EACA,CACR,EACM,aAAA,EACA,UAAA,CACN,CACE,CAEA,gBAAgB,CACd,QAAA,EACA,EAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,EACA,MAAA,EACA,YAAA,EACA,SAAA,CACJ,EAAK,CACD,MAAM,EAAI,KAAK,EACT,EAAY,EAAQ,UACpB,EAAoB,EAAQ,kBAC5B,EAAI,EAAQ,EACZ,EAAI,EAAQ,EACZ,EAAK,EAAQ,GACnB,IAAI,EACJ,GAAI,EAAE,UAAU,WAAY,CAC1B,MAAM,EAAe,KAAK,uBAAuB,CAC/C,EAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,CACR,CAAO,EACD,EAAI,EAAa,EACjB,EAAe,EAAa,YAC9B,SACM,EAAE,OAAO,YAAY,IAAI,wBAAyB,CACpD,KAAM,CAAE,eAAA,EAAgB,eAAA,CAAc,EAAK,KAAK,WAAW,uBAAuB,CAAE,EAAA,EAAG,EAAA,CAAC,CAAE,EACtF,EAAiB,IACnB,EAAW,KAAK,UAAY,EAAW,GAEzC,EAAe,EAAI,EAAW,KAAK,SACnC,GAAgB,EAAW,CAC7B,MACE,EAAe,EAAI,EAAW,KAAK,SAGvC,EAAI,KAAK,WAAW,aAElB,KAAK,OAAO,CAAC,EAAE,CAAC,EAChB,EACA,CACN,EACI,MAAM,EAEJ,KAAK,WAAW,eAAe,CAC7B,aAAA,EACA,SAAA,EACA,GAAI,EACJ,GAAI,EACJ,YAAA,EACA,WAAY,KAAK,WACjB,OAAQ,KAAK,OACb,UAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,CACR,CAAO,EAEH,OAAK,EAAE,UAAU,aACf,EAAI,EAAI,GAEV,KAAK,WAAW,cAAc,CAC5B,GAAA,EACA,EAAA,EACA,EAAA,EACA,GAAI,EAAe,EAAc,EAAI,EAAW,KAAK,SACrD,GAAI,EAAW,KAAK,UAAY,EAAc,EAC9C,SAAA,CACN,CAAK,EACM,CACL,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,EAAA,EACA,EAAA,EACA,MAAO,KAAK,WAAW,cACrB,IAEA,KACA,EACA,EACA,EACA,CACR,EACM,aAAA,EACA,SAAA,CACN,CACE,CAEA,uBAAuB,CAAE,EAAA,EAAG,SAAA,EAAU,UAAA,EAAW,EAAA,CAAC,EAAI,CACpD,MAAM,EAAI,KAAK,EACf,IAAI,EAAM,EACV,OAAK,EAAE,WAAW,QAAQ,CAAS,EAAE,SACnC,EAAM,EAAE,QAAQ,qBAEd,EAAQ,SAAS,EAAE,WAAW,QAAQ,CAAG,EAAE,CAAC,CAAC,IAC/C,EAAI,GAAY,UAAU,EAAG,EAAE,WAAW,QAAQ,CAAG,EAAE,CAAC,CAAC,EAAI,EAAW,KAAK,UAAY,GAEpF,CACL,aAAc,EAAI,EAAW,KAAK,SAClC,EAAA,CACN,CACE,CAQA,YAAY,EAAW,CACrB,MAAM,EAAI,KAAK,EACf,IAAI,EAAS,KACb,QAAS,EAAK,EAAG,EAAK,EAAE,QAAQ,cAAc,OAAQ,IAAM,CAC1D,MAAM,EAAM,EAAE,QAAQ,cAAc,CAAE,EAClC,EAAI,OAAS,EAAI,MAAM,OAAS,GAAK,SAAS,EAAI,UAAW,EAAE,IAAM,SAAS,OAAO,CAAS,EAAG,EAAE,IACrG,EAAS,EAEb,CACA,OAAO,CACT,CAUA,gBAAgB,EAAW,CAEzB,GADK,KAAK,aAAY,KAAK,WAAa,CAAA,GACpC,KAAK,WAAW,CAAS,IAAM,OACjC,OAAO,KAAK,WAAW,CAAS,EAElC,MAAM,EAAS,KAAK,YAAY,CAAS,EACzC,IAAI,EAAM,KACV,GAAI,GAAU,EAAO,MAAM,MAAO,GAAM,EAAE,KAAO,IAAI,EAAG,CACtD,MAAM,EAAwB,IAAI,IAClC,EAAO,MAAM,QAAS,GAAM,CAC1B,EAAM,IAAI,EAAE,IAAK,CAAC,CACpB,CAAC,EACD,EAAM,CACR,CACA,YAAK,WAAW,CAAS,EAAI,EACtB,CACT,CAUA,mBAAmB,EAAW,CAC5B,IAAI,EAAI,EAER,GADK,KAAK,WAAU,KAAK,SAAW,CAAA,GAChC,KAAK,SAAS,CAAS,IAAM,OAAQ,OAAO,KAAK,SAAS,CAAS,EACvE,MAAM,EAAI,KAAK,EACf,IAAI,EAAS,GACb,GAAI,GAAwB,CAAC,GAAK,EAAE,QAAQ,cAAc,OAAS,EAAG,CACpE,MAAM,EAAS,KAAK,YAAY,CAAS,EACnC,GAAW,GAAM,EAAK,EAAE,WAAW,OAAO,CAAS,IAAM,KAAO,OAAS,EAAG,SAAW,KAAO,EAAK,EACzG,GAAI,CAAC,EACH,EAAS,EAAU,UACV,EAAO,MAAM,SAAW,EACjC,EAAS,OACJ,CACL,MAAM,EAAQ,KAAK,gBAAgB,CAAS,EAC5C,GAAI,GACF,QAAS,EAAI,EAAG,EAAI,EAAS,IAC3B,GAAI,CAAC,EAAM,IAAI,GAAS,EAAG,EAAW,CAAC,CAAC,EAAG,CACzC,EAAS,GACT,KACF,EAGN,CACF,CACA,YAAK,SAAS,CAAS,EAAI,EACpB,CACT,CAUA,cAAc,EAAW,CACvB,GAAI,KAAK,mBAAmB,CAAS,EAAG,MAAO,GAE/C,GADK,KAAK,oBAAmB,KAAK,kBAAoB,CAAA,GAClD,KAAK,kBAAkB,CAAS,IAAM,OACxC,OAAO,KAAK,kBAAkB,CAAS,EAEzC,MAAM,EAAK,GAAW,KAAK,EAAG,EAAW,GAAM,EAAI,EAC7C,EAAS,CAAC,EAAE,GAAM,EAAG,KAAK,SAChC,YAAK,kBAAkB,CAAS,EAAI,EAC7B,CACT,CAqBA,gBAAgB,EAAW,EAAG,EAAQ,CACpC,MAAM,EAAI,KAAK,EACT,EAAS,KAAK,YAAY,CAAS,EACzC,GAAI,CAAC,EACH,OAAO,GAAwB,CAAC,EAAI,KAAO,EAE7C,IAAI,EAAO,KACP,EAAa,GACjB,MAAM,EAAQ,KAAK,gBAAgB,CAAS,EAC5C,GAAI,EAAO,CACT,MAAM,EAAO,EAAM,IAAI,GAAS,EAAG,EAAW,CAAC,CAAC,EAC5C,EACF,EAAO,EAAK,EAEZ,EAAa,EAEjB,MAAW,OAAO,EAAO,MAAM,CAAC,EAAM,IACpC,EAAO,EAAO,MAAM,CAAC,EAAE,EAEvB,EAAa,GAEf,OAAI,GAAQ,GAAI,iBAAiB,CAAI,IAAM,GAAI,iBAAiB,CAAM,EAC7D,EAEL,GAAc,GAAwB,CAAC,EAClC,KAEF,CACT,CAQA,OAAO,iBAAiB,EAAG,CACzB,GAAI,CAAC,EAAG,MAAO,GACf,MAAM,EAAU,EAAE,MAAM,WAAW,EACnC,OAAO,EAAU,EAAQ,OAAS,CACpC,CACF,CACA,MAAM,WAAmB,EAAI,CAK3B,KAAK,EAAQ,EAAa,CACxB,MAAM,EAAI,KAAK,EACf,KAAK,SAAW,IAAI,EAAS,KAAK,CAAC,EACnC,KAAK,IAAM,IAAI,GAAI,KAAK,EAAG,KAAK,IAAK,KAAK,QAAQ,EAClD,MAAM,EAAY,IAAI,GAAU,KAAK,CAAC,EACtC,EAAS,EAAU,aAAa,CAAM,EACtC,KAAK,OAAS,EAAU,cAAc,KAAK,MAAM,EACjD,KAAK,WAAW,cAAc,CAAM,EAChC,EAAE,OAAO,MAAM,YAAc,SAC/B,EAAS,EAAE,QAAQ,YAEjB,EAAY,IACT,GAAM,EAAE,QAAQ,cAAc,CAAC,CAC1C,EACU,EAAE,QAAQ,cAAc,MAAK,GAEnC,KAAK,OAAS,EACd,KAAK,WAAW,0BAA0B,IAAI,EAC9C,MAAM,EAAM,KAAK,SAAS,MAAM,CAC9B,MAAO,8CACb,CAAK,EACD,IAAI,EAAI,EACJ,EAAI,EACR,QAAS,EAAI,EAAG,EAAK,EAAG,EAAI,EAAO,OAAQ,IAAK,IAAM,CACpD,MAAM,EAAY,EAAE,QAAQ,YAE1B,EAAY,CAAC,EACX,EACE,CAAE,WAAA,EAAY,iBAAA,CAAgB,EAAK,KAAK,WAAW,cAAc,CAAS,EAChF,KAAK,SACL,KAEE,EAAE,UAAU,aAAa,CAAU,CAC3C,EACM,MAAM,EAAa,CAAA,EACb,EAAa,CAAA,EACnB,IAAI,EAAoB,EACpB,KAAK,OAAO,OAAS,IACvB,KAAK,WACL,EAAE,QAAQ,sBAAsB,CAAS,EAAE,CAAC,EAC5C,EAAoB,GAEtB,KAAK,WAAa,EAAE,OAAO,MAAM,KAAK,UAAU,GAAK,EAAE,OAAO,MAAM,KAAK,UAAU,EAAE,SACrF,IAAI,EAAW,KAAK,SAAS,MAAM,CACjC,MAAO,oBACP,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAS,CAAC,EACpE,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EACD,GAAO,0BAA0B,KAAK,EAAG,EAAU,CAAS,EAC5D,MAAM,EAAmB,KAAK,SAAS,MAAM,CAC3C,MAAO,wBACP,iBAAkB,CAC1B,CAAO,EACK,EAAiB,KAAK,SAAS,MAAM,CACzC,MAAO,8BACf,CAAO,EACK,EAAgB,KAAK,iBACzB,EACA,EACA,OACA,OACA,OACA,OACA,CACR,EACY,CACJ,UAAA,EAEA,UAAA,EAEA,MAAA,EAEA,MAAA,CAER,EAAU,EACJ,IAAI,EAAY,EAAc,UAC1B,EAAW,EAAc,SAC7B,EAAI,EAAc,EAClB,EAAI,EAAc,EAClB,EAAE,QAAQ,UAAY,EACtB,EAAE,QAAQ,SAAW,EACrB,KAAK,WAAW,wBAAwB,IAAI,EACxC,KAAK,SAAS,MAAM,SAAW,GAGnC,KAAK,SAAS,MAAM,CAAC,EAAE,MAAO,GAAQ,MAAM,CAAG,CAAC,IAC9C,KAAK,SAAS,MAAM,CAAC,EAAI,KAAK,SAAS,MAAM,CAAC,EAAE,IAAI,IAAM,CAAK,EAC/D,KAAK,SAAS,OAAO,CAAC,EAAI,KAAK,SAAS,OAAO,CAAC,EAAE,IAAI,IAAM,CAAC,GAE/D,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,WAAY,IAAK,CAC7C,MAAM,EAAc,KAAK,WAAW,eAAe,EAAG,EAAG,CAAS,EAC5D,EAAiB,CACrB,QAAS,CAAE,EAAA,EAAG,EAAA,EAAG,UAAA,EAAW,kBAAA,EAAmB,GAAA,CAAE,EACjD,YAAA,EACA,EAAA,EACA,EAAA,EACA,SAAA,EACA,iBAAA,EACA,YAAa,EAAE,UAAU,aAAa,CAAU,CAC1D,EACQ,IAAI,EAEF,KAEE,KAAK,cACP,EAAQ,KAAK,oBAAoB,EAAc,EAAe,CAAA,EAAI,CAAc,EAAG,CACjF,MAAA,EACA,UAAA,EACA,UAAA,CACZ,CAAW,CAAC,EACF,EAAW,KAAK,OAAO,CAAC,EAAE,CAAC,EAAI,KAAK,iBAEpC,EAAQ,KAAK,uBAAuB,EAAc,EAAe,CAAA,EAAI,CAAc,EAAG,CACpF,UAAA,EACA,SAAA,EACA,MAAA,CACZ,CAAW,CAAC,EACF,EAAY,KAAK,OAAO,CAAC,EAAE,CAAC,EAAI,KAAK,OAAO,CAAiB,GAE/D,MAAM,EAAc,KAAK,WAAW,aAAa,CAC/C,aAAc,EAAM,aACpB,aAAc,EAAM,aACpB,MAAO,EAAM,MACb,MAAO,EAAM,MACb,UAAA,EACA,SAAA,CACV,CAAS,EACG,GACF,EAAe,IAAI,CAAW,EAEhC,EAAI,EAAM,EACV,EAAI,EAAM,EACV,EAAW,KAAK,CAAC,EACjB,EAAW,KAAK,CAAC,EACjB,MAAM,EAAW,KAAK,WAAW,iBAC/B,EACA,EACA,EACA,CACV,EACQ,IAAI,EAAU,GACd,MAAM,EAAY,EAAE,QAAQ,gBAAkB,oBAAsB,qBAChE,KAAK,WAAW,gBAAgB,CAAS,EAAE,CAAC,IAAM,UAAY,EAAE,WAAW,OAAO,CAAS,EAAE,CAAC,EAAI,GAAK,KAAK,WAAW,gBAAgB,CAAS,EAAE,CAAC,IAAM,OAAS,EAAE,WAAW,OAAO,CAAS,EAAE,CAAC,EAAI,KACxM,EAAU,GAEZ,EAAW,KAAK,aAAa,EAAc,EAAe,CACxD,UAAA,EACA,SAAU,EAAS,KAC7B,EAAW,EAAS,cAAgB,CAAE,SAAU,EAAS,KAAK,EAAK,CAAA,CAAE,EAAG,CAC9D,EAAA,EACA,EAAA,EACA,iBAAA,EACA,SAAU,EAAM,SAChB,OAAQ,EAAM,OACd,YAAA,EACA,SAAA,EACA,EAAA,EACA,EAAA,EACA,OAAA,EACA,UAAA,EACA,SAAA,EACA,iBAAA,EACA,eAAA,EACA,KAAM,MACN,cAAe,EACf,QAAA,CACV,CAAS,CAAC,CACJ,CACA,EAAE,QAAQ,cAAc,CAAS,EAAI,EACrC,EAAE,QAAQ,cAAc,CAAS,EAAI,EACrC,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,KAAK,EAC5C,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,EAC9C,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,QAAQ,EAClD,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,KAAK,EAC5C,KAAK,SAAS,OAAO,KAAK,KAAK,SAAS,MAAM,EAC9C,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,QAAQ,EAClD,EAAI,IAAI,CAAQ,CAClB,CACA,OAAO,CACT,CAUA,iBAAiB,EAAG,EAAG,EAAW,EAAW,EAAO,EAAO,EAAmB,CAC5E,MAAM,EAAI,KAAK,EACf,IAAI,EAAW,EACf,GAAI,KAAK,aAAc,CACrB,EAAY,EAAE,OAAO,WAAa,EAAE,QAAQ,WAC5C,MAAM,EAAgB,EAAE,OAAO,YAAY,IAAI,UAC3C,OAAO,CAAa,EAAE,QAAQ,GAAG,IAAM,GACzC,EAAY,SAAS,EAAe,EAAE,EAEtC,EAAY,EAAY,SAAS,EAAe,EAAE,EAAI,IAExD,EAAQ,EAAE,QAAQ,eAAiB,KAAK,WAAa,EAAE,OAAO,UAAY,KAAK,kBAAoB,KAAK,mBACxG,GAAK,EAAY,GAAa,CAChC,KAAO,CACL,EAAY,EAAE,OAAO,UAAY,EAAE,QAAQ,WAC3C,EAAW,EACX,MAAM,EAAkB,EAAE,OAAO,YAAY,IAAI,YAC7C,EAAE,UAAU,YAAc,EAAE,QAAQ,WAAa,GACnD,EAAY,EAAE,QAAQ,SAAW,KAAK,OACtC,EAAW,EAAY,SAAS,KAAK,WAAW,YAAa,EAAE,EAAI,KAC1D,OAAO,CAAe,EAAE,QAAQ,GAAG,IAAM,GAClD,EAAW,SAAS,EAAiB,EAAE,EAEvC,GAAY,SAAS,EAAiB,EAAE,EAAI,IAE1C,KAAK,WACP,EAAQ,KAAK,UAAU,CAAiB,EAExC,EAAQ,EAAE,OAAO,WAAa,KAAK,UAAU,CAAiB,EAEhE,EAAI,EAAE,QAAQ,eAAiB,EAAY,GAAY,CACzD,CACA,MAAM,EAAe,EAAE,QAAQ,UAAU,QAAU,EACnD,MAAO,CACL,EAAA,EACA,EAAA,EACA,UAAA,EACA,UAAA,EACA,WAAY,GAAgC,GAAK,EACjD,UAAW,GAA8B,GAAK,EAC9C,MAAA,EACA,MAAA,CACN,CACE,CAEA,oBAAoB,CAClB,QAAA,EACA,UAAA,EACA,YAAA,EACA,MAAA,EACA,EAAA,EACA,EAAA,EACA,iBAAA,EACA,YAAA,EACA,UAAA,EACA,SAAA,CACJ,EAAK,CACD,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,EAAI,KAAK,EACT,EAAe,EAAI,EAAmB,EAC5C,IAAI,EACJ,MAAM,EAAI,EAAQ,EACZ,EAAI,EAAQ,EACZ,EAAY,EAAQ,UACpB,EAAoB,EAAQ,kBAClC,IAAI,EAAW,EACf,QAAS,EAAI,EAAG,EAAI,KAAK,SAAS,OAAO,OAAQ,IAC/C,EAAW,EAAW,KAAK,SAAS,OAAO,CAAC,EAAE,CAAC,EAEjD,IAAI,EAAM,EAUV,GAPE,EAAE,OAAO,OAAO,CAAS,EAAE,OAE3B,EAAM,EAAY,QAEhB,EAAE,OAAO,OAAO,CAAS,EAAE,IACnC,GAEQ,EAAM,EAAG,CACX,IAAI,EAAM,EACN,KAAK,SAAS,SAAS,EAAM,CAAC,EAAE,CAAC,EAAI,EACvC,IACE,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,EAAI,KAAK,SAAS,MAAM,EAAM,CAAC,EAAE,CAAC,EAAI,GAAY,KAAK,WAAa,EAAW,GAAK,EAAI,KAAK,SAAS,MAAM,EAAM,CAAC,EAAE,CAAC,EACjK,KAAK,SAAS,SAAS,EAAM,CAAC,EAAE,CAAC,GAAK,IAC/C,IACE,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,EAAI,KAAK,SAAS,MAAM,EAAM,CAAC,EAAE,CAAC,EAAI,KAAK,SAAS,MAAM,EAAM,CAAC,EAAE,CAAC,EAAI,GAAY,KAAK,WAAa,EAAW,GAAK,GAE5K,EAAe,CACjB,MACE,EAAe,IAIb,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,KAAO,KAErD,EAAI,EAEJ,EAAI,IACF,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAK,KAAK,gBAAkB,KAAK,aAE3E,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAK,KAAK,eACtD,GAAK,EAEX,MAAM,EAAQ,KAAK,WAAW,YAAY,CACxC,aAAA,EACA,UAAA,EACA,GAAI,EACJ,GAAI,EACJ,YAAA,EACA,WAAY,KAAK,WACjB,OAAQ,KAAK,OACb,UAAW,EAAQ,UACnB,YAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,CACN,CAAK,EACD,YAAK,WAAW,cAAc,CAC5B,EAAA,EACA,EAAA,EACA,GAAI,EACJ,GAAI,EACJ,SAAA,CACN,CAAK,EACD,EAAI,EAAI,EACD,CACL,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,MAAO,KAAK,WAAW,cACrB,IACA,EAEA,KACA,EACA,EACA,CACR,EACM,aAAA,EACA,aAAA,EACA,EAAA,EACA,EAAA,CACN,CACE,CAEA,uBAAuB,CACrB,QAAA,EACA,EAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,EACA,MAAA,EACA,iBAAA,EACA,YAAA,EACA,SAAA,CACJ,EAAK,CACD,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACpC,MAAM,EAAI,KAAK,EACT,EAAI,EAAQ,EACZ,EAAI,EAAQ,EACZ,EAAK,EAAQ,GACb,EAAY,EAAQ,UACpB,EAAoB,EAAQ,kBAClC,GAAI,EAAE,UAAU,WAAY,CAC1B,IAAI,EAAY,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAC,EAC5C,IAAW,EAAY,GAC5B,GAAK,EAAY,EAAE,QAAQ,MAAQ,KAAK,OAAS,EAAW,EAAI,EAAE,QAAQ,UAAU,MACtF,CACA,MAAM,EAAe,EAAI,EAAmB,EAC5C,IAAI,EACA,EAAW,EACf,QAAS,EAAI,EAAG,EAAI,KAAK,SAAS,OAAO,OAAQ,IAC/C,EAAW,GAAa,MAAM,KAAK,SAAS,OAAO,CAAC,EAAE,CAAC,CAAC,EAAiC,EAA7B,KAAK,SAAS,OAAO,CAAC,EAAE,CAAC,GAEvF,IAAI,EAAM,EAIV,GAHI,IACF,EAAM,EAAY,QAAQ,EAAE,WAAW,YAAY,CAAS,CAAC,GAE3D,EAAM,GAAK,CAAC,EAAE,UAAU,YAAc,EAAM,GAAK,EAAE,UAAU,YAAc,EAAE,WAAW,QAAQ,EAAY,CAAC,EAAE,CAAC,IAAM,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAC,EAAG,CAC5J,IAAI,EACA,EACJ,MAAM,EAAI,KAAK,IAAI,KAAK,OAAO,OAAS,EAAG,EAAY,CAAC,EACxD,GAAI,KAAK,SAAS,MAAM,EAAM,CAAC,IAAM,QAAU,KAAK,SAAS,MAAM,EAAM,CAAC,EAAE,QAC1E,QAAS,EAAK,EAAG,EAAK,EAAG,IACvB,GAAI,CAAC,OAAO,EAAK,KAAK,SAAS,MAAM,EAAM,CAAE,IAAM,KAAO,OAAS,EAAG,CAAC,CAAC,EAAG,CACzE,EAAa,KAAK,SAAS,MAAM,EAAM,CAAE,EAAE,CAAC,EAC5C,KACF,EAGJ,QAAS,EAAK,EAAG,EAAK,EAAG,IACvB,KAAM,EAAK,KAAK,SAAS,SAAS,EAAM,CAAE,IAAM,KAAO,OAAS,EAAG,CAAC,GAAK,EAAG,CAC1E,IACE,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,EAAI,EAAa,GAAY,KAAK,WAAa,EAAW,GAAK,EAAI,EACvH,KACF,WAAa,EAAK,KAAK,SAAS,SAAS,EAAM,CAAE,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,EAAG,CAClF,IACE,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,IAAM,EAAI,EAAa,EAAa,GAAY,KAAK,WAAa,EAAW,GAAK,EAChI,KACF,CAEE,OAAO,EAAQ,MAAa,EAAM,EAAE,OAAO,aAK3C,EAAK,KAAK,SAAS,OAAO,CAAC,IAAM,MAAgB,EAAG,MAAO,GAAQ,IAAQ,CAAC,GAAM,KAAK,SAAS,OAAO,MAAM,EAAG,CAAG,EAAE,MACpH,GAAQ,EAAI,MAAO,GAAQ,MAAM,CAAG,CAAC,CAChD,EAEQ,EAAe,EAEf,EAAe,CAEnB,MACE,EAAe,GAId,EAAK,KAAK,OAAO,CAAC,IAAM,MAAgB,EAAG,CAAC,EAE7C,EAAI,IACF,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAK,KAAK,OAAO,CAAiB,GAAK,KAAK,aAEtF,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAK,KAAK,OAAO,CAAiB,EAC9E,GAAK,EAET,EAAI,EAEN,MAAM,EAAQ,KAAK,WAAW,eAAe,CAC3C,aAAA,EACA,SAAA,EACA,GAAI,EACJ,GAAI,EACJ,OAAQ,KAAK,OAAO,CAAiB,EACrC,YAAa,KAAK,YAClB,WAAY,KAAK,WACjB,OAAQ,KAAK,OACb,YAAA,EACA,UAAW,EAAQ,UACnB,EAAA,EACA,EAAA,EACA,EAAA,CACN,CAAK,EACD,YAAK,WAAW,cAAc,CAC5B,GAAA,EACA,EAAA,EACA,EAAA,EACA,GAAI,EACJ,GAAI,EACJ,SAAA,CACN,CAAK,EACM,CACL,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,MAAO,KAAK,WAAW,cACrB,IAEA,KACA,EACA,EACA,EACA,CACR,EACM,aAAA,EACA,EAAG,EAAE,UAAU,WAAa,EAAI,EAAI,EACpC,EAAA,CACN,CACE,CACF,CACA,SAAS,GAAkB,CACzB,EAAA,EACA,OAAA,EACA,MAAA,EACA,MAAA,EACA,OAAA,EACA,WAAA,EACA,QAAA,EACA,aAAA,EACA,QAAS,EACT,QAAA,CACF,EAAG,CACD,MAAM,EAAO,EACb,GAAI,CAAC,GAAQ,EAAK,OAAS,GAAO,MAAO,CAAA,EACzC,GAAI,CAAC,GAAU,CAAC,EAAO,OAAQ,MAAO,CAAA,EACtC,MAAM,EAAY,EAAK,WAAa,IAC9B,EAAS,EAAO,OAAS,EAAY,KAAK,KAAK,EAAO,OAAS,CAAS,EAAI,EAC5E,EAAI,EAAK,MAAQ,KAAO,EAAK,KAAO,IACpC,EAAa,EAAK,QAAU,KAAO,EAAK,OAAS,GACjD,EAAW,EAAa,EACxB,EAAY,EAAK,oBAAsB,IAAS,OAAO,GAAY,WACnE,EAAW,EAAK,QAAU,SAC1B,EAAQ,EAAK,WACb,EAAW,GAAS,MAAM,QAAQ,EAAM,MAAM,GAAK,EAAM,OAAO,OAAS,EACzE,EAAQ,EAAW,KAAK,IAAI,EAAG,EAAM,OAAS,EAAE,EAAI,EACpD,EAAO,GAAY,EAAM,KAAO,KAAO,EAAM,IAAM,EAAE,QAAQ,KAE7D,GADO,GAAY,EAAM,KAAO,KAAO,EAAM,IAAM,EAAE,QAAQ,MAC/C,GAAQ,EACtB,EAAU,EAAW,IAAI,MAAM,CAAK,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,EAC1D,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,GAAK,EAAQ,CAC9C,MAAM,EAAI,EAAO,CAAC,EACZ,EAAI,EAAQ,CAAC,EACnB,IAAI,GAAO,GAAO,EAAQ,KAAO,EAAQ,OAAS,CAAC,EAAI,IAAO,EAAI,EAClE,GAAI,EAAW,CACb,MAAM,EAEJ,EAAQ,CAAC,EAEP,EAAM,IAAK,EAAM,GACjB,EAAM,CAAC,IAAK,EAAM,CAAC,EACzB,CACA,MAAM,EAAK,EAAe,EAAI,EAAS,EACjC,EAAK,EAAe,EAAS,EAAM,EACnC,EAAM,EAAW,GAAc,EAAI,EAAI,CAAC,EAAI,GAAc,EAAI,EAAI,CAAC,EACzE,GAAI,EAAU,CACZ,IAAI,GAAK,EAAI,GAAQ,EACjB,EAAI,IAAG,EAAI,GACX,EAAI,IAAG,EAAI,GACf,EAAQ,KAAK,MAAM,GAAK,EAAQ,EAAE,CAAC,GAAK,CAC1C,MACE,EAAQ,CAAC,GAAK,CAElB,CACA,GAAI,CAAC,EACH,OAAO,EAAQ,CAAC,EAAI,CAAC,CAAE,KAAM,KAAM,EAAG,EAAQ,CAAC,CAAC,CAAE,EAAI,CAAA,EAExD,MAAM,EAAS,CAAA,EACf,QAAS,EAAI,EAAG,EAAI,EAAO,IACpB,EAAQ,CAAC,GACd,EAAO,KAAK,CACV,KAAM,GAAY,EAAM,OAAQ,GAAK,EAAQ,EAAE,EAC/C,EAAG,EAAQ,CAAC,CAClB,CAAK,EAEH,OAAO,CACT,CACA,SAAS,GAAa,CACpB,SAAA,EACA,EAAA,EACA,SAAA,EACA,YAAA,EACA,QAAS,EACT,YAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,CACF,EAAG,CACD,GAAI,CAAC,GAAY,EAAS,OAAS,IAAS,CAAC,EAAY,OAAQ,OACjE,MAAM,EAAW,EAAS,SAAW,KAAO,EAAS,QAAU,GACzD,EAAc,EAAS,aAAe,KAAO,EAAS,YAAc,OACpE,EAAU,EAAS,aAAe,KAAO,EAAS,YAAc,EAChE,EAAgB,EAAE,OAAO,MAAM,WAAW,SAAW,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,YACtF,EAAe,EAAS,MAAM,CAClC,MAAO,EAAgB,GAAG,CAAS,6BAA+B,CACtE,CAAG,EACG,GACF,EAAE,QAAQ,gBAAgB,KAAK,CAAE,GAAI,EAAa,IAAI,CAAE,EAE1D,EAAY,QAAQ,CAAC,CAAE,OAAA,EAAQ,EAAA,CAAC,IAAO,CACrC,MAAM,EAAW,EAAc,EAAE,QAAQ,OAAO,CAAC,EAAI,EAAE,QAAQ,OAAO,CAAS,EACzE,EAAK,EAAS,UACd,EAAc,IAAO,SAAW,EAAW,IAAO,cAAgB,GAAY,EAAU,GAAI,EAAI,GAAM,GAAY,EAAU,GAAI,EACtI,EAAO,QAAS,GAAM,CACpB,MAAM,EAAW,EAAS,SAAS,CACjC,EAAG,EAAE,EACL,KAAM,EAAE,MAAQ,KAAO,EAAE,KAAO,EAChC,OAAQ,EAAU,EAAI,EAAc,OACpC,YAAa,EACb,YAAa,EACb,QAAS,CACjB,CAAO,EACD,EAAS,KAAK,iBAAkB,CAAS,EACzC,EAAS,KAAK,IAAK,CAAC,EACpB,EAAS,KAAK,YAAa,uBAAuB,EAAE,QAAQ,IAAI,GAAG,EACnE,EAAS,KAAK,MAAM,cAAgB,OACpC,EAAa,IAAI,CAAQ,CAC3B,CAAC,CACH,CAAC,EACD,EAAS,IAAI,CAAY,CAC3B,CACA,SAAS,GAAY,EAAO,EAAQ,CAClC,MAAM,EAAM,EAAQ,SAAS,CAAK,EAClC,GAAI,CAAC,EAAK,OAAO,EACjB,MAAM,EAAI,KAAK,IAAI,EAAG,EAAI,CAAM,EAChC,MAAO,OAAO,KAAK,MAAM,EAAI,CAAC,EAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAI,CAAC,EAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAI,CAAC,EAAI,CAAC,CAAC,GAC1F,CACA,SAAS,GAAY,EAAQ,EAAG,CAC9B,GAAI,CAAC,EAAO,OAAQ,MAAO,OAC3B,GAAI,EAAO,SAAW,EAAG,OAAO,EAAO,CAAC,EACxC,MAAM,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,CAAC,CAAC,GAAK,EAAO,OAAS,GACnD,EAAI,KAAK,MAAM,CAAC,EAChB,EAAO,EAAI,EACX,EAAK,EAAQ,SAAS,EAAO,CAAC,CAAC,GAAK,CAAC,EAAG,EAAG,CAAC,EAC5C,EAAK,EAAQ,SAAS,EAAO,KAAK,IAAI,EAAI,EAAG,EAAO,OAAS,CAAC,CAAC,CAAC,GAAK,EACrE,EAAM,CAAC,EAAG,IAAM,KAAK,MAAM,GAAK,EAAI,GAAK,CAAI,EACnD,MAAO,OAAO,EAAI,EAAG,CAAC,EAAG,EAAG,CAAC,CAAC,CAAC,IAAI,EAAI,EAAG,CAAC,EAAG,EAAG,CAAC,CAAC,CAAC,IAAI,EAAI,EAAG,CAAC,EAAG,EAAG,CAAC,CAAC,CAAC,GAC3E,CACA,SAAS,GAAO,EAAG,CACjB,IAAI,GAAK,EAAI,cAAgB,EAC7B,OAAA,EAAI,KAAK,KAAK,EAAI,IAAM,GAAI,QAAQ,EACpC,EAAI,KAAK,KAAK,EAAI,IAAM,GAAI,QAAQ,IAC3B,EAAI,IAAM,MAAQ,GAAK,UAClC,CACA,SAAS,GAAc,EAAI,EAAI,EAAG,CAChC,MAAO,KAAK,EAAK,CAAC,IAAI,CAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAK,CAAC,KACnF,CACA,SAAS,GAAc,EAAI,EAAI,EAAG,CAChC,MAAO,KAAK,EAAK,CAAC,IAAI,EAAK,CAAC,MAAM,EAAI,CAAC,MAAM,EAAI,CAAC,MAAM,GAAK,CAAC,KAChE,CACA,MAAM,WAAuB,EAAI,CAO/B,KAAK,EAAQ,EAAO,EAAa,CAC/B,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAO,EAAE,QAAQ,YAAc,EAAQ,EAAE,OAAO,MAAM,KACtD,EAAO,IAAI,GAAK,KAAK,CAAC,EAC5B,KAAK,mBAAqB,KAAK,EAAE,OAAO,YAAY,YACpD,KAAK,WAAa,KAAK,EAAE,OAAO,YAAY,QAC5C,KAAK,aAAe,EAAE,OAAO,YAAY,IAAI,WAC7C,KAAK,OAAS,KAAK,oBAAsB,KAAK,mBAAmB,OAAS,OAC1E,KAAK,UAAY,IAAI,GAAU,KAAK,CAAC,EACrC,EAAS,KAAK,UAAU,aAAa,CAAM,EAC3C,KAAK,OAAS,EACd,KAAK,OAAS,KAAK,UAAU,cAAc,KAAK,MAAM,EACtD,KAAK,WAAW,cAAc,CAAM,EACpC,MAAM,EAAM,EAAS,MAAM,CACzB,MAAO,cAAc,CAAI,gCAC/B,CAAK,EACD,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,KAAK,UAAY,EAAE,OAAO,MAAM,OAAS,WACzC,EAAE,OAAO,OAAO,CAAC,EAAE,OAAS,UAC5B,IAAI,EACA,EACJ,MAAM,EAAQ,CAAA,EACR,EAAQ,CAAA,EACR,EAAY,EAAE,QAAQ,YAE1B,EAAY,CAAC,EACX,EACE,CAAE,iBAAA,CAAgB,EAAK,KAAK,WAAW,cAAc,CAAS,EAC9D,EAAW,EAAS,MAAM,CAC9B,MAAO,oBACP,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAS,CAAC,EACpE,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EACD,GAAO,0BAA0B,KAAK,EAAG,EAAU,CAAS,EACxD,EAAO,CAAC,EAAE,OAAS,IACrB,KAAK,SAAW,KAAK,SAAW,GAElC,IAAI,EAAoB,EACpB,KAAK,OAAO,OAAS,IACvB,KAAK,WACL,EAAE,QAAQ,sBAAsB,CAAS,EAAE,CAAC,EAC5C,EAAoB,GAEtB,MAAM,EAAgB,KAAK,WAAW,iBAAiB,CAAS,EAC1D,CACJ,EAAG,EACH,UAAA,EACA,UAAA,EAEA,MAAA,EAEA,EAAG,EACH,SAAA,EACA,UAAA,EAEA,MAAA,CAER,EAAU,EACJ,EAAI,EACJ,EAAI,EACJ,EAAM,KAAK,GAAK,GAA8B,GAAK,CAAC,EACpD,MAAM,EAAmB,EAAS,MAAM,CACtC,MAAO,wBACP,iBAAkB,CAC1B,CAAO,EACK,EAAiB,EAAS,MAAM,CACpC,MAAO,8BACf,CAAO,EACK,EAAgB,KAAK,UAAY,KAAK,WAAW,OAAS,KAC1D,EAAc,CAAA,EACd,EAAQ,EAAE,OAAO,UACjB,EAAa,GAA8B,EACjD,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,WAAY,IAAK,CAC7C,MAAM,EAAc,KAAK,WAAW,eAAe,EAAG,EAAG,CAAS,EAClE,IAAI,EAEF,KAEF,MAAM,EAAc,CAClB,QAAS,CACP,EAAA,EACA,EAAA,EACA,UAAA,EACA,kBAAA,CACZ,EACU,EAAA,EACA,EAAA,EACA,YAAA,EACA,SAAA,CACV,EAqBQ,GApBI,KAAK,aACP,EAAQ,KAAK,uBAAuB,EAAc,EAAe,CAAA,EAAI,CAAW,EAAG,CACjF,UAAA,EACA,UAAA,EACA,MAAA,CACZ,CAAW,CAAC,EAEF,EAAQ,KAAK,qBAAqB,EAAc,EAAe,CAAA,EAAI,CAAW,EAAG,CAC/E,UAAA,EACA,SAAA,EACA,MAAA,EACA,WAAY,CAAE,GAAI,CAAC,EAAY,GAAI,EAAQ,CAAU,CACjE,CAAW,CAAC,EAEJ,EAAI,EAAM,EACV,EAAI,EAAM,EACN,EAAI,GACN,EAAM,KAAK,GAAK,GAA8B,GAAK,CAAC,EAEtD,EAAM,KAAK,CAAC,EACR,EAAM,OACR,SAEF,MAAM,EAAc,KAAK,WAAW,aAAa,CAC/C,aAAc,EAAM,aACpB,aAAc,EAAM,aACpB,MAAO,EAAM,MACb,MAAO,EAAM,MACb,UAAA,EACA,SAAA,CACV,CAAS,EAoCD,GAnCI,GACF,EAAe,IAAI,CAAW,EAEhC,EAAM,OAAO,QACX,CAAC,EAAQ,IAAO,CACd,MAAM,EAAW,CAAC,KAAK,WAAa,KAAK,mBAAmB,KAAK,aAAe,EAAM,MAAM,CAAE,EAAI,EAAE,QAAQ,OAAO,OAAO,CAAC,EACrH,EAAW,EAAK,SAAS,CAC7B,aAAc,EACd,eAAgB,EAChB,MAAO,EAAM,MAAM,CAAE,EACrB,MAAO,EAAO,CAAC,EAAE,CAAC,CAChC,CAAa,EACD,KAAK,aAAa,CAChB,UAAA,EACA,SAAA,EACA,SAAA,EACA,EAAA,EACA,EAAA,EACA,SAAU,EAAM,SAChB,OAAA,EACA,YAAA,EACA,SAAA,EACA,EAAA,EACA,EAAA,EACA,OAAA,EACA,iBAAA,EACA,UAAA,EACA,SAAA,EACA,iBAAA,EACA,eAAA,EACA,cAAe,KAAK,SACpB,KAAM,EAAE,OAAO,MAAM,IACnC,CAAa,CACH,CACV,EACY,GAAiB,EAAc,OAAS,GAAO,CACjD,MAAM,GAAO,EAAK,EAAE,WAAW,gBAAgB,CAAS,IAAM,KAAO,OAAS,EAAG,CAAC,EAClF,GAAI,GAAO,EAAI,OAAQ,CACrB,MAAM,EAAU,GAEd,KAAK,UAAU,uBACb,EACA,CAChB,EAEY,IAAI,EAAQ,EAAY,EACxB,GAAI,KAAK,aAAc,CACrB,MAAM,EAAS,KAAK,eACd,EAAK,GAAgC,EACrC,GAAI,GAAwB,EAClC,EAAS,EAAM,aAAe,EAAK,EACnC,EAAa,EAAK,EAClB,EAAW,IAAM,GAAI,EAAO,EAAC,EAAI,CACnC,KAAO,CACL,MAAM,EAAS,KAAK,OAAO,CAAiB,EACtC,EAAK,GAA8B,EACnC,GAAI,GAAwB,EAClC,EAAS,EAAM,aAAe,EAAK,EACnC,EAAa,EAAK,EAClB,EAAW,IAAM,GAAI,EAAO,EAAC,EAAI,CACnC,CACA,MAAM,GAAS,GAAkB,CAC/B,EAAA,EACA,OAAQ,EACR,MAAO,EACP,MAAO,EACP,OAAA,EACA,WAAA,EACA,QAAA,EACA,aAAc,KAAK,aACnB,QAAS,CACvB,CAAa,EACG,GAAO,QAAQ,EAAY,KAAK,CAAE,OAAA,GAAQ,EAAA,CAAC,CAAE,CACnD,CACF,CACF,CACI,GACF,GAAa,CACX,SAAA,EACA,EAAA,EACA,SAAA,EACA,YAAA,EACA,QAAS,EACT,YAAa,EAAE,OAAO,YAAY,IAAI,YACtC,UAAA,EACA,UAAW,iCACX,WAAY,2BACtB,CAAS,EAEH,EAAE,QAAQ,cAAc,CAAS,EAAI,EACrC,EAAE,QAAQ,cAAc,CAAS,EAAI,EACrC,EAAI,IAAI,CAAQ,CAClB,CACA,OAAO,CACT,CAEA,qBAAqB,CACnB,QAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,EACA,MAAA,EACA,YAAA,EACA,WAAA,EAAa,IACjB,EAAK,CACD,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAI,EAAQ,EACZ,EAAI,EAAQ,EACZ,CAAE,OAAQ,CAAY,EAAK,EAAE,OAAO,YAAY,YAChD,CAAE,OAAQ,CAAS,EAAK,KAAK,WAC7B,EAAY,EAAQ,UACpB,EAAY,GAAW,MAAM,QAAQ,CAAM,EAAI,EAAO,CAAS,EAAI,EACnE,EAAW,EAAS,EAAa,MAAM,EACvC,EAAW,EAAS,EAAa,QAAQ,EACzC,EAAS,KAAK,OAAO,EAAQ,iBAAiB,EAC9C,EAAO,KAAK,aAAa,EAAW,CAAC,EAC3C,IAAI,EAAK,EACL,EAAK,EACL,EAAQ,EAAK,EAAI,EAAK,EAAI,CAAC,CAAQ,EAAI,CAAC,CAAQ,EAChD,KAAK,YACP,EAAQ,CAAC,EAAS,EAAU,KAAK,EAAG,EAAS,EAAU,KAAK,CAAC,GAE/D,IAAI,EAAK,KAAK,IAAI,EAAK,EAAG,EAAK,CAAC,EAC5B,EAAK,KAAK,IAAI,EAAK,EAAG,EAAK,CAAC,EAC5B,EAAI,EAAK,EACT,EAAE,UAAU,aACd,GAAK,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,KAAK,OAAS,EAAW,GAEvF,MAAM,EAAe,EAAI,EAAW,KAAK,SAazC,GAZI,QACF,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAO,OACnD,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,KAAO,MACnD,EAAK,EACL,EAAK,IAEL,EAAK,EAAQ,EAAK,EAClB,EAAK,EAAQ,EAAK,EAClB,EAAK,EAAQ,EAAK,EAAI,EACtB,EAAK,EAAQ,EAAK,EAAI,EACtB,EAAI,EAAQ,EAAK,EAAI,GAEnB,IAAe,EAAe,EAAW,EAAW,IAAM,EAAe,EAAW,IACtF,MAAO,CACL,OAAQ,KACR,SAAU,KACV,EAAG,EAAE,UAAU,WAAa,EAAI,EAAI,EACpC,EAAG,EACH,aAAA,EACA,MAAA,EACA,OAAQ,EAChB,EAEI,IAAI,EACJ,GAAI,KAAK,OAAQ,CACf,MAAM,EAAU,EAAe,EAAW,EACpC,EAAQ,EAAQ,EAAK,EAAI,EACzB,EAAS,EAAQ,EAAK,EAAI,EAChC,EAAS,CACP,EAAS,KAAK,EAAS,CAAE,EAAI,EAAS,KAAK,EAAS,CAAE,EAAI,EAAS,KAAK,EAAS,CAAK,EAAI,EAAS,KAAK,EAAc,CAAK,EAAI,EAAS,KAAK,EAAS,CAAM,EAAI,EAAS,KAAK,EAAe,EAAU,CAAM,CACrN,CACI,MAAW,KAAK,UACd,EAAS,CACP,EAAS,KAAK,EAAc,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAU,CAAE,EAAI,EAAS,KAAK,EAAe,EAAU,CAAC,EAAI,EAAS,KAAK,EAAc,CAAC,EAAI,EAAS,KAAK,EAAc,EAAK,EAAc,CAAC,EAC7f,EAAS,KAAK,EAAc,CAAC,EAAI,EAAS,KAAK,EAAe,EAAU,CAAC,EAAI,EAAS,KAAK,EAAe,EAAU,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAc,CAAE,EAAI,EAAS,KAAK,EAAc,CAAC,EAAI,GACtf,EAEM,EAAS,CACP,EAAS,KAAK,EAAc,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAU,CAAE,EAAI,EAAS,KAAK,EAAe,EAAU,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAc,CAAE,EAAI,EAAS,KAAK,EAAc,EAAK,EAAc,CAAC,CAC5f,EAEI,IAAI,EAAW,KACf,OAAI,EAAE,QAAQ,cAAc,OAAS,IACnC,EAAW,KAAK,gBAAgB,EAAW,EAAG,EAAO,CAAC,CAAC,GAErD,GAAY,OACd,EAAW,EAAS,KAAK,EAAe,EAAW,EAAG,CAAE,EAAI,EAAS,KAAK,EAAc,CAAE,GAEvF,EAAE,UAAU,aACf,EAAI,EAAI,GAEH,CACL,OAAA,EACA,SAAA,EACA,EAAA,EACA,EAAG,EACH,MAAO,KAAK,WAAW,cACrB,IAEA,KACA,EACA,EACA,EACA,EAAQ,iBAChB,EACM,aAAA,EACA,MAAA,CACN,CACE,CAEA,uBAAuB,CACrB,QAAA,EACA,EAAA,EACA,UAAA,EACA,UAAA,EACA,MAAA,EACA,YAAA,CACJ,EAAK,CACD,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAI,EAAQ,EACZ,EAAI,EAAQ,EACZ,EAAY,EAAQ,UACpB,CAAE,OAAQ,CAAY,EAAK,EAAE,OAAO,YAAY,YAChD,CAAE,OAAQ,CAAS,EAAK,KAAK,WAC7B,EAAY,GAAW,MAAM,QAAQ,CAAM,EAAI,EAAO,CAAS,EAAI,EACnE,EAAS,KAAK,eACd,EAAO,KAAK,aAAa,EAAW,CAAC,EAC3C,IAAI,EAAQ,EAAK,EAAI,EAAK,EAAI,CAAC,EAAS,EAAa,MAAM,CAAC,EAAI,CAAC,EAAS,EAAa,QAAQ,CAAC,EAC5F,KAAK,YACP,EAAQ,CAAC,EAAS,EAAU,KAAK,EAAG,EAAS,EAAU,KAAK,CAAC,GAE/D,IAAI,EAAK,EACL,EAAK,EACL,EAAK,KAAK,IAAI,EAAK,EAAG,EAAK,CAAC,EAC5B,EAAK,KAAK,IAAI,EAAK,EAAG,EAAK,CAAC,EAC5B,EAAI,EAAK,EACT,EAAE,UAAU,aACd,GAAK,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,KAAK,eAAiB,EAAY,GAEhG,MAAM,EAAe,EAAI,EAAY,KAAK,SACtC,QACF,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAO,OACnD,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,KAAO,MACnD,EAAK,EACL,EAAK,IAEL,EAAK,EAAQ,EAAK,EAClB,EAAK,EAAQ,EAAK,EAClB,EAAK,EAAQ,EAAK,EAAI,EACtB,EAAK,EAAQ,EAAK,EAAI,EACtB,EAAI,EAAQ,EAAK,EAAI,GAEvB,MAAM,EAAS,CACb,EAAS,KAAK,EAAI,CAAY,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,EAAI,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,EAAI,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,CAAS,EAAI,EAAS,KAAK,EAAG,EAAe,CAAS,EAAI,EAAS,KAAK,EAAG,CAAY,EAAI,EAAS,KAAK,EAAK,EAAc,EAAG,CAAY,EAC1hB,EAAS,KAAK,EAAG,CAAY,EAAI,EAAS,KAAK,EAAG,EAAe,CAAS,EAAI,EAAS,KAAK,EAAI,EAAe,CAAS,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,CAAY,EAAI,EAAS,KAAK,EAAG,CAAY,EAAI,GAC7f,EACI,IAAI,EAAW,KACf,OAAI,EAAE,QAAQ,cAAc,OAAS,IACnC,EAAW,KAAK,gBAAgB,EAAW,EAAG,EAAO,CAAC,CAAC,GAErD,GAAY,OACd,EAAW,EAAS,KAAK,EAAI,EAAe,EAAY,CAAC,EAAI,EAAS,KAAK,EAAI,CAAY,GAExF,EAAE,UAAU,aACf,EAAI,EAAI,GAEH,CACL,OAAA,EACA,SAAA,EACA,EAAG,EACH,EAAA,EACA,MAAO,KAAK,WAAW,cACrB,IACA,EAEA,KACA,EACA,EACA,CACR,EACM,aAAA,EACA,MAAA,CACN,CACE,CAKA,aAAa,EAAG,EAAG,CACjB,MAAM,EAAI,KAAK,EACT,EAAY,KAAK,UACjB,EAAgB,GAAQ,EAAI,CAAC,GAAK,EAAI,CAAC,EAAE,CAAC,GAAK,KAEnD,EAAU,uBAAuB,EAAI,CAAC,EAAE,CAAC,EAAG,CAAC,EAC3C,EACE,EAAI,EAAa,EAAE,WAAW,aAAa,EAC3C,EAAI,EAAa,EAAE,WAAW,aAAa,EAC3C,EAAI,EAAa,EAAE,WAAW,aAAa,EAC3C,EAAI,EAAa,EAAE,WAAW,aAAa,EAC3C,EAAI,EAAa,EAAE,WAAW,aAAa,EACjD,MAAO,CACL,EAAG,KAAK,UAAY,EAAI,EACxB,EAAG,KAAK,UAAY,EAAI,EACxB,EAAA,EACA,EAAG,KAAK,UAAY,EAAI,EACxB,EAAG,KAAK,UAAY,EAAI,CAC9B,CACE,CACF,CACA,MAAM,GAAY,GAAW,CAC3B,MAAM,EAAI,GAAkB,CAAM,EAC5B,EAAI,EAAO,OAAS,EACpB,EAAI,KACJ,EAAO,CAAA,EACb,IAAI,EAAG,EAAG,EAAG,EACb,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,EAAI,GAAM,EAAO,CAAC,EAAG,EAAO,EAAI,CAAC,CAAC,EAC9B,KAAK,IAAI,CAAC,EAAI,EAChB,EAAE,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,GAElB,EAAI,EAAE,CAAC,EAAI,EACX,EAAI,EAAE,EAAI,CAAC,EAAI,EACf,EAAI,EAAI,EAAI,EAAI,EACZ,EAAI,IACN,EAAI,EAAI,EAAI,KAAK,KAAK,CAAC,EACvB,EAAE,CAAC,EAAI,EAAI,EACX,EAAE,EAAI,CAAC,EAAI,EAAI,IAIrB,QAAS,EAAI,EAAG,GAAK,EAAG,IACtB,GAAK,EAAO,KAAK,IAAI,EAAG,EAAI,CAAC,CAAC,EAAE,CAAC,EAAI,EAAO,KAAK,IAAI,EAAG,EAAI,CAAC,CAAC,EAAE,CAAC,IAAM,GAAK,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,IAC1F,EAAK,KAAK,CAAC,GAAK,EAAG,EAAE,CAAC,EAAI,GAAK,CAAC,CAAC,EAEnC,OAAO,CACT,EACM,GAAW,GAAW,CAC1B,IAAI,EAAI,GACR,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAQ,EAAO,CAAC,EAChB,EAAI,EAAM,OACZ,EAAI,GACN,GAAK,IAAI,EAAM,CAAC,CAAC,KAAK,EAAM,CAAC,CAAC,GAC9B,GAAK,KAAK,EAAM,CAAC,CAAC,KAAK,EAAM,CAAC,CAAC,GAC/B,GAAK,KAAK,EAAM,CAAC,CAAC,KAAK,EAAM,CAAC,CAAC,IACtB,EAAI,IACb,GAAK,IAAI,EAAM,CAAC,CAAC,KAAK,EAAM,CAAC,CAAC,GAC9B,GAAK,KAAK,EAAM,CAAC,CAAC,KAAK,EAAM,CAAC,CAAC,GAEnC,CACA,OAAO,CACT,EACM,GAAS,CAMb,OAAO,EAAQ,CACb,MAAM,EAAO,GAAS,CAAM,EACtB,EAAI,EAAO,CAAC,EACZ,EAAK,EAAO,CAAC,EACb,EAAM,CAAA,EACN,EAAI,EAAK,CAAC,EACV,EAAK,EAAK,CAAC,EACjB,EAAI,KAAK,EAAI,CACX,EAAG,CAAC,EAAI,EAAG,CAAC,EACZ,EAAG,CAAC,EAAI,EAAG,CAAC,EACZ,EAAE,CAAC,EAAI,EAAE,CAAC,EACV,EAAE,CAAC,EAAI,EAAE,CAAC,EACV,EAAE,CAAC,EACH,EAAE,CAAC,CACT,CAAK,EACD,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,EAAI,EAAG,IAAK,CAC3C,MAAM,EAAK,EAAO,CAAC,EACb,EAAK,EAAK,CAAC,EACjB,EAAI,KAAK,CAAC,EAAG,CAAC,EAAI,EAAG,CAAC,EAAG,EAAG,CAAC,EAAI,EAAG,CAAC,EAAG,EAAG,CAAC,EAAG,EAAG,CAAC,CAAC,CAAC,CACvD,CACA,OAAO,CACT,EAQA,MAAM,EAAQ,EAAO,EAAK,CACxB,MAAM,EAAM,EAAO,MAAM,EAAO,CAAG,EACnC,GAAI,EAAO,CACT,GAAI,EAAM,EAAQ,GAAK,EAAI,CAAC,EAAE,OAAS,EAAG,CACxC,MAAM,EAAI,EAAI,CAAC,EAAE,OACjB,EAAI,CAAC,EAAI,CACP,EAAI,CAAC,EAAE,EAAI,CAAC,EAAI,EAAI,EAAI,CAAC,EAAE,EAAI,CAAC,EAChC,EAAI,CAAC,EAAE,EAAI,CAAC,EAAI,EAAI,EAAI,CAAC,EAAE,EAAI,CAAC,CAC1C,EAAU,OAAO,EAAI,CAAC,CAAC,CACjB,CACA,EAAI,CAAC,EAAI,EAAI,CAAC,EAAE,MAAM,EAAE,CAC1B,CACA,OAAO,CACT,CACF,EACA,SAAS,GAAM,EAAI,EAAI,CACrB,OAAQ,EAAG,CAAC,EAAI,EAAG,CAAC,IAAM,EAAG,CAAC,EAAI,EAAG,CAAC,EACxC,CACA,SAAS,GAAkB,EAAQ,CACjC,MAAM,EAAI,CAAA,EACV,IAAI,EAAK,EAAO,CAAC,EACb,EAAK,EAAO,CAAC,EACb,EAAI,EAAE,CAAC,EAAI,GAAM,EAAI,CAAE,EACvB,EAAI,EACR,QAAS,EAAI,EAAO,OAAS,EAAG,EAAI,EAAG,IACrC,EAAK,EACL,EAAK,EAAO,EAAI,CAAC,EACjB,EAAE,CAAC,GAAK,GAAK,EAAI,GAAM,EAAI,CAAE,IAAM,GAErC,OAAA,EAAE,CAAC,EAAI,EACA,CACT,CACA,MAAM,WAAe,EAAI,CAOvB,KAAK,EAAQ,EAAO,EAAa,CAC/B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAO,IAAI,GAAK,KAAK,CAAC,EAC5B,KAAK,cAAgB,EAAE,OAAO,YAAY,OAC1C,KAAK,cAAgB,KAAK,cAAc,OACxC,KAAK,eAAiB,KAAK,cAAc,gBAAkB,EAC3D,KAAK,UAAY,KAAK,cAAc,WAAa,aACjD,KAAK,YAAc,EAAE,OAAO,YAAY,IAAI,YAC5C,KAAK,aAAe,EAAE,OAAO,YAAY,IAAI,WAC7C,KAAK,UAAY,IAAI,GAAU,KAAK,CAAC,EACrC,EAAS,KAAK,UAAU,aAAa,CAAM,EAC3C,KAAK,OAAS,EACd,KAAK,OAAS,KAAK,UAAU,cAAc,KAAK,MAAM,EACtD,KAAK,WAAW,cAAc,CAAM,EACpC,MAAM,EAAM,EAAS,MAAM,CACzB,MAAO,iDACb,CAAK,EACD,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,IAAI,EACA,EACJ,MAAM,EAAQ,CAAA,EACR,EAAQ,CAAA,EACR,EAAY,EAAE,QAAQ,YAE1B,EAAY,CAAC,EACX,EACE,CAAE,iBAAA,CAAgB,EAAK,KAAK,WAAW,cAAc,CAAS,EAC9D,EAAW,EAAS,MAAM,CAC9B,MAAO,oBACP,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAS,CAAC,EACpE,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EACD,GAAO,0BAA0B,KAAK,EAAG,EAAU,CAAS,EACxD,EAAO,CAAC,EAAE,OAAS,IACrB,KAAK,SAAW,KAAK,SAAW,GAElC,IAAI,EAAoB,EACpB,KAAK,OAAO,OAAS,IACvB,KAAK,WACL,EAAE,QAAQ,sBAAsB,CAAS,EAAE,CAAC,EAC5C,EAAoB,GAEtB,MAAM,EAAgB,KAAK,WAAW,iBAAiB,CAAS,EAC1D,CACJ,EAAG,EACH,UAAA,EACA,UAAA,EACA,MAAA,EACA,EAAG,EACH,SAAA,EACA,UAAA,EACA,MAAA,CACR,EAAU,EACJ,EAAI,EACJ,EAAI,EACJ,EAAM,KAAK,GAAK,GAA8B,GAAK,CAAC,EACpD,MAAM,EAAmB,EAAS,MAAM,CACtC,MAAO,wBACP,iBAAkB,CAC1B,CAAO,EACD,KAAK,gBAAkB,EACnB,KAAK,YAAc,UACR,EAAE,WAAW,oBAAoB,CAAS,GAAK,CAAA,GACvD,QAAS,GAAM,CACd,GAAK,EAAE,UAAY,KAAK,kBAC1B,KAAK,gBAAkB,EAAE,UAE7B,CAAC,EAEH,MAAM,EAAiB,CAAA,EACvB,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,WAAY,IAAK,CAC7C,MAAM,EAAc,KAAK,WAAW,eAAe,EAAG,EAAG,CAAS,EAC5D,EAAQ,KAAK,aAAe,KAAK,qBAAqB,CAC1D,QAAS,CAAE,EAAA,EAAG,EAAA,EAAG,UAAA,EAAW,kBAAA,CAAiB,EAC7C,EAAA,EACA,UAAA,EACA,UAAA,EACA,MAAA,CACV,CAAS,EAAI,KAAK,mBAAmB,CAC3B,QAAS,CAAE,EAAA,EAAG,EAAA,EAAG,UAAA,EAAW,kBAAA,CAAiB,EAC7C,EAAA,EACA,UAAA,EACA,SAAA,EACA,MAAA,CACV,CAAS,EACD,EAAI,EAAM,EACV,EAAI,EAAM,EACN,EAAI,GACN,EAAM,KAAK,EAAM,MAAM,EAEzB,EAAM,KAAK,EAAM,mBAAmB,EACpC,MAAM,EAAc,KAAK,mBAAmB,CAC1C,UAAA,EACA,EAAA,EACA,OAAQ,EAAM,OACd,WAAY,EAAM,WAClB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,UAAW,EAAM,SAC3B,CAAS,EACG,EAAY,QAAQ,EAAe,KAAK,CAAE,OAAQ,EAAa,EAAA,CAAC,CAAE,EACtE,MAAM,EAAW,EAAK,SAAS,CAE7B,aAAc,KAAK,YAAc,EAAI,EACrC,eAAgB,EAChB,MAAO,KAAK,YAAc,EAAE,QAAQ,OAAO,CAAC,EAAI,OAChD,MAAO,EAAO,CAAC,EAAE,CAAC,CAC5B,CAAS,EACD,KAAK,aAAa,CAChB,UAAA,EACA,SAAA,EACA,SAAU,EAAE,QAAQ,OAAO,OAAO,CAAS,EAC3C,EAAA,EACA,EAAA,EACA,SAAU,EAAM,SAChB,OAAQ,EAAM,OACd,YAAA,EACA,SAAA,EACA,EAAA,EACA,EAAA,EACA,OAAA,EACA,iBAAA,EACA,UAAA,EACA,SAAA,EACA,iBAAA,EACA,cAAe,KAAK,SACpB,KAAM,QAChB,CAAS,EACD,MAAM,EAAS,EAAS,KAAK,cAC3B,kCAAkC,CAAC,IAC7C,EACY,GAAU,SAAS,EAAM,mBAAmB,GAC9C,EAAO,aACL,KAAK,aAAe,KAAO,KAC3B,GAAG,EAAM,mBAAmB,EACxC,CAEM,CACA,GAAa,CACX,SAAA,EACA,EAAA,EACA,SAAA,EACA,YAAa,EACb,QAAS,KAAK,cACd,YAAa,KAAK,YAClB,UAAA,EACA,UAAW,gCACX,WAAY,0BACpB,CAAO,EACD,EAAE,QAAQ,cAAc,CAAS,EAAI,EACrC,EAAE,QAAQ,cAAc,CAAS,EAAI,EACrC,EAAI,IAAI,CAAQ,CAClB,CACA,OAAO,CACT,CAEA,mBAAmB,CAAE,QAAA,EAAS,EAAA,EAAG,UAAA,EAAW,SAAA,EAAU,MAAA,CAAK,EAAI,CAC7D,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,CAAE,UAAA,EAAW,EAAA,EAAG,kBAAA,CAAiB,EAAK,EACtC,EAAS,KAAK,OAAO,CAAiB,EACxC,EAAE,UAAU,aACd,GAAK,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,KAAK,OAAS,EAAW,GAGvF,MAAM,EADe,EAAI,EAAW,KAAK,SACX,EAAW,EACnC,EAAa,EAAW,EACxB,EAAU,KAAK,WAAW,EAAW,CAAC,EACtC,EAAY,KAAK,mBAAmB,CAAO,EAC3C,EAAW,GAAM,EAAQ,KAAK,OAAO,EAAG,CAAS,EAAI,EACrD,EAAS,KAAK,cAAc,CAChC,MAAO,EAAQ,MACf,OAAA,EACA,WAAA,EACA,UAAA,EACA,SAAU,GACV,QAAA,EACA,UAAW,EACjB,CAAK,EACD,IAAI,EAAW,KACf,OAAI,EAAE,QAAQ,cAAc,OAAS,IACnC,EAAW,KAAK,gBAAgB,EAAW,EAAG,CAAM,GAElD,GAAY,OACd,EAAW,KAAK,cAAc,CAC5B,MAAO,EAAQ,MACf,OAAA,EACA,WAAA,EACA,UAAA,EACA,SAAU,GACV,QAAA,EACA,UAAW,EACnB,CAAO,GAEE,EAAE,UAAU,aACf,EAAI,EAAI,GAEH,CACL,OAAA,EACA,SAAA,EACA,EAAA,EACA,EAAG,EACH,OAAA,EACA,WAAA,EACA,QAAA,EACA,QAAA,EACA,UAAA,EACA,oBAAqB,GAAS,EAAK,KAAK,OAAO,EAAQ,CAAC,EAAE,CAAC,IAAM,KAAO,EAAK,CAAC,CACpF,CACE,CAEA,qBAAqB,CAAE,QAAA,EAAS,EAAA,EAAG,UAAA,EAAW,UAAA,EAAW,MAAA,CAAK,EAAI,CAChE,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,CAAE,UAAA,EAAW,EAAA,CAAC,EAAK,EACnB,EAAS,KAAK,eAChB,EAAE,UAAU,aACd,GAAK,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,KAAK,eAAiB,EAAY,GAGhG,MAAM,EADe,EAAI,EAAY,KAAK,SACZ,EAAY,EACpC,EAAa,EAAY,EACzB,EAAU,KAAK,WAAW,EAAW,CAAC,EACtC,EAAY,KAAK,mBAAmB,CAAO,EAC3C,EAAW,GAAM,EAAQ,KAAK,OAAO,EAAG,CAAS,EAAI,EACrD,EAAS,KAAK,cAAc,CAChC,MAAO,EAAQ,MACf,OAAA,EACA,WAAA,EACA,UAAA,EACA,SAAU,GACV,QAAA,EACA,UAAW,EACjB,CAAK,EACD,IAAI,EAAW,KACf,OAAI,EAAE,QAAQ,cAAc,OAAS,IACnC,EAAW,KAAK,gBAAgB,EAAW,EAAG,CAAM,GAElD,GAAY,OACd,EAAW,KAAK,cAAc,CAC5B,MAAO,EAAQ,MACf,OAAA,EACA,WAAA,EACA,UAAA,EACA,SAAU,GACV,QAAA,EACA,UAAW,EACnB,CAAO,GAEE,EAAE,UAAU,aACf,EAAI,EAAI,GAEH,CACL,OAAA,EACA,SAAA,EACA,EAAG,EACH,EAAA,EACA,OAAA,EACA,WAAA,EACA,QAAA,EACA,UAAA,EACA,QAAA,EACA,oBAAqB,GAAS,EAAK,KAAK,OAAO,EAAQ,CAAC,EAAE,CAAC,IAAM,KAAO,EAAK,CAAC,CACpF,CACE,CAOA,WAAW,EAAW,EAAG,CACvB,IAAI,EAEJ,MAAM,GAAK,EADD,KAAK,EACG,WAAW,oBAAoB,CAAS,IAAM,KAAO,OAAS,EAAG,CAAC,EACpF,GAAI,CAAC,GAAK,CAAC,EAAE,OAAO,OAClB,MAAO,CAAE,MAAO,CAAA,EAAI,UAAW,CAAC,EAElC,MAAM,EAAQ,EAAE,OAAO,IACrB,CAAC,EAAG,IAAM,CAChB,EACI,EAAM,KACJ,CAAC,EAAG,IAAM,EAAE,OAAO,CAAC,EAAI,EAAE,OAAO,CAAC,CACxC,EACI,MAAM,EAAQ,CAAA,EACd,IAAI,EAAQ,KACZ,UAAW,KAAK,EAAO,CACrB,MAAM,EAAI,EAAE,OAAO,CAAC,EAChB,IAAU,MAAQ,IAAM,IAC5B,EAAM,KAAK,CAAE,EAAA,EAAG,EAAG,EAAE,QAAQ,CAAC,CAAC,CAAE,EACjC,EAAQ,EACV,CACA,MAAO,CAAE,MAAA,EAAO,UAAW,EAAE,SAAS,CACxC,CAMA,mBAAmB,EAAS,CAC1B,OAAO,KAAK,YAAc,SAAW,KAAK,gBAAkB,EAAI,KAAK,gBAAkB,EAAQ,SACjG,CAQA,cAAc,CACZ,MAAA,EACA,OAAA,EACA,WAAA,EACA,UAAA,EACA,SAAA,EACA,QAAA,EACA,UAAA,CACJ,EAAK,CACD,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,GAAI,EAAM,SAAW,EAAG,CACtB,MAAM,EAAI,EAAQ,CAAC,EACnB,OAAO,EAAW,EAAS,KAAK,EAAQ,CAAC,EAAI,EAAS,KAAK,EAAQ,CAAC,EAAI,EAAS,KAAK,EAAG,CAAM,EAAI,EAAS,KAAK,EAAG,CAAM,CAC5H,CACA,MAAM,EAAS,GAAW,CACxB,GAAI,GAAa,GAAa,EAAG,MAAO,GACxC,MAAM,EAAK,EAAS,EAAY,EAAa,KAAK,eAClD,OAAO,KAAK,IAAI,EAAY,KAAK,IAAI,EAAG,CAAE,CAAC,CAC7C,EACM,EAAW,CAAA,EACX,EAAU,CAAA,EAChB,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,MAAM,EAAI,EAAQ,EAAM,CAAC,EAAE,CAAC,EACtB,EAAK,EAAM,EAAM,CAAC,EAAE,CAAC,EACvB,GACF,EAAS,KAAK,CAAC,EAAS,EAAI,CAAC,CAAC,EAC9B,EAAQ,KAAK,CAAC,EAAS,EAAI,CAAC,CAAC,IAE7B,EAAS,KAAK,CAAC,EAAG,EAAS,CAAE,CAAC,EAC9B,EAAQ,KAAK,CAAC,EAAG,EAAS,CAAE,CAAC,EAEjC,CACA,OAAA,EAAQ,QAAO,EACR,KAAK,cAAc,EAAU,EAAU,EAAK,EAAI,KAAK,cAAc,EAAS,EAAU,EAAI,EAAI,GACvG,CASA,cAAc,EAAW,EAAc,EAAW,CAChD,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAQ,EAAU,CAAC,EACzB,IAAI,EAAI,EAAY,EAAS,KAAK,EAAM,CAAC,EAAG,EAAM,CAAC,CAAC,EAAI,EAAS,KAAK,EAAM,CAAC,EAAG,EAAM,CAAC,CAAC,EAExF,GADoB,EAAU,OAAS,GAAK,CAAC,KAAK,kBAAkB,EAAW,CAAY,EAC1E,CACf,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IACpC,GAAK,EAAS,KAAK,EAAU,CAAC,EAAE,CAAC,EAAG,EAAU,CAAC,EAAE,CAAC,CAAC,EAErD,OAAO,CACT,CACA,MAAM,EAAQ,EAAU,IACtB,CAAC,CAAC,EAAI,CAAE,IAAM,EAAe,CAAC,EAAI,CAAE,EAAI,CAAC,EAAI,CAAE,CACrD,EACU,EAAM,GAAO,OAAO,CAAK,EACzB,EAAM,EAAe,EAAI,IAAI,EAAS,EAAI,EAChD,OAAA,GAAK,GAAQ,CAAG,EACT,CACT,CAKA,kBAAkB,EAAW,EAAc,CACzC,MAAM,EAAO,EAAe,EAAI,EAChC,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IACpC,GAAI,EAAU,CAAC,EAAE,CAAI,IAAM,EAAU,EAAI,CAAC,EAAE,CAAI,EAAG,MAAO,GAE5D,MAAO,EACT,CAWA,mBAAmB,CACjB,UAAA,EACA,EAAA,EACA,OAAA,EACA,WAAA,EACA,QAAA,EACA,QAAA,EACA,UAAA,CACJ,EAAK,CACD,IAAI,EACJ,OAAO,GAAkB,CACvB,EAAG,KAAK,EACR,QAAS,EAAK,KAAK,EAAE,WAAW,mBAAmB,CAAS,IAAM,KAAO,OAAS,EAAG,CAAC,EACtF,MAAO,EACP,MAAO,EACP,OAAA,EACA,WAAA,EACA,QAAA,EACA,aAAc,KAAK,aACnB,QAAS,KAAK,cAGd,QAAU,GAAM,KAAK,iBAAiB,EAAG,EAAS,EAAY,CAAS,CAC7E,CAAK,CACH,CASA,iBAAiB,EAAO,EAAS,EAAY,EAAmB,CAC9D,KAAM,CAAE,MAAA,CAAK,EAAK,EACZ,EAAY,GAAgD,EAAQ,UAC1E,GAAI,CAAC,EAAM,QAAU,GAAa,EAAG,MAAO,GAC5C,MAAM,EAAQ,GAAW,KAAK,IAC5B,EACA,EAAS,EAAY,EAAa,KAAK,cAC7C,EACI,GAAI,GAAS,EAAM,CAAC,EAAE,EAAG,OAAO,EAAK,EAAM,CAAC,EAAE,CAAC,EAC/C,GAAI,GAAS,EAAM,EAAM,OAAS,CAAC,EAAE,EACnC,OAAO,EAAK,EAAM,EAAM,OAAS,CAAC,EAAE,CAAC,EACvC,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAChC,GAAI,GAAS,EAAM,CAAC,EAAE,EAAG,CACvB,MAAM,EAAI,EAAM,EAAI,CAAC,EACf,EAAI,EAAM,CAAC,EACX,EAAI,EAAE,IAAM,EAAE,EAAI,GAAK,EAAQ,EAAE,IAAM,EAAE,EAAI,EAAE,GACrD,OAAO,EAAK,EAAE,GAAK,EAAE,EAAI,EAAE,GAAK,CAAC,CACnC,CAEF,MAAO,EACT,CAOA,OAAO,EAAO,EAAW,CACvB,OAEE,KAAK,UAAU,uBACb,EACA,CACR,CAEE,CACF,CACA,SAAS,GAAU,EAAK,CACtB,MAAM,EAAM,CAAA,EACZ,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,GAAK,EACnC,EAAI,KAAK,EAAI,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EAE7B,OAAO,CACT,CACA,MAAM,EAAe,CAKnB,YAAY,EAAG,EAAK,CAClB,KAAK,IAAM,EACX,KAAK,EAAI,CACX,CACA,iBAAkB,CAChB,MAAM,EAAI,KAAK,EACf,IAAI,EAAW,GACf,MAAM,EAAY,EAAE,OAAO,YAAY,EAAE,OAAO,MAAM,IAAI,EAC1D,OAAI,EAAU,WAAW,OAAO,OAAS,GACvC,EAAU,WAAW,OAAO,IAAK,GAAU,CACrC,EAAM,MAAQ,IAChB,EAAW,GAEf,CAAC,EAEI,CACT,CAOA,cAAc,EAAW,EAAG,EAAG,EAAU,CACvC,MAAM,EAAI,KAAK,EACf,IAAI,EAAoB,EACxB,MAAM,EAAiB,EAAE,OAAO,YAAY,CAAS,EAAE,eACjD,EAAa,KAAK,eAAe,EAAW,EAAG,CAAC,EAGpD,EAAE,QAAQ,SAAW,EAEjB,EAAE,OAAO,YAAY,CAAS,EAAE,qBAC9B,EAAW,QAAU,EACvB,EAAoB,EAAW,QAAU,KAAO,EAAiB,MAEjE,GAAqB,EAAI,EAAW,QAAU,MAAQ,EAAiB,MAGrE,EAAW,SAAW,EACxB,EAAoB,GAAK,EAAI,EAAW,QAAU,KAAO,EAEzD,GAAqB,EAAI,EAAW,QAAU,KAAO,GAIzD,EAAoB,EAAI,EAAW,QAAU,IACzC,IAAc,YAChB,GAAqB,EAAI,EAAW,QAAU,MAAQ,EAAiB,QAG3E,IAAI,EAAQ,EAAW,MACvB,MAAM,EAAQ,IAAI,EAClB,GAAI,EAAE,OAAO,YAAY,CAAS,EAAE,aAClC,GAAI,KAAK,EAAE,OAAO,MAAM,OAAS,OAAQ,CACvC,MAAM,EAAa,EAAM,WACvB,EAAoB,GACpB,EAAW,KACrB,EACQ,EAAQ,EAAQ,UACd,EAAQ,WAAW,CAAU,EAAI,EAAa,EAAQ,QAAQ,CAAU,EACxE,EAAE,OAAO,KAAK,OACxB,CACM,KAAO,CACL,MAAM,EAAa,EAAM,WAAW,EAAmB,EAAW,KAAK,EACvE,EAAQ,EAAQ,UACd,EAAQ,WAAW,CAAU,EAAI,EAAa,EAAQ,QAAQ,CAAU,EACxE,EAAE,OAAO,KAAK,OACxB,CACM,CAEF,MAAO,CAAE,MAAA,EAAO,WAAA,CAAU,CAC5B,CAMA,eAAe,EAAW,EAAG,EAAG,CAC9B,MAAM,EAAI,KAAK,EACT,EAAM,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAC9B,EAAY,EAAE,OAAO,YAAY,CAAS,EAChD,IAAI,EAAe,EAAU,WAAW,QAAU,EAAI,EAClD,EAAU,aAAe,EAAE,OAAO,MAAM,OAAS,YACnD,EAAe,GAEjB,IAAI,EAAQ,EAAE,QAAQ,OAAO,CAAY,EACrC,EAAY,KACZ,EACA,EACJ,GAAI,CAAC,EAAU,aAAe,IAAc,UAC1C,EAAM,EAAE,QAAQ,KAChB,EAAM,EAAE,QAAQ,SACX,CACL,MAAM,EAAM,EAAE,WAAW,OAAO,CAAC,EACjC,EAAM,EAAI,OAAS,EAAI,CAAC,EAAI,EAC5B,EAAM,EACN,QAAS,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC1B,EAAI,CAAC,EAAI,IAAK,EAAM,EAAI,CAAC,GACzB,EAAI,CAAC,EAAI,IAAK,EAAM,EAAI,CAAC,EAEjC,CACI,OAAO,EAAU,WAAW,IAAQ,MACtC,EAAM,EAAU,WAAW,IAAM,EAAE,QAAQ,KAAO,EAAU,WAAW,IAAM,EAAE,QAAQ,KACvF,EAAM,EAAU,WAAW,IAAM,EAAE,QAAQ,KAAO,EAAU,WAAW,IAAM,EAAE,QAAQ,MAEzF,MAAM,EAAQ,KAAK,IAAI,CAAG,EAAI,KAAK,IAAI,CAAG,EAC1C,IAAI,EAAU,IAAU,EAAI,EAAI,IAAM,EAAM,EAC5C,OAAI,EAAU,WAAW,OAAO,OAAS,GACpB,EAAU,WAAW,OAC7B,IAAK,GAAU,CACxB,GAAI,GAAO,EAAM,MAAQ,GAAO,EAAM,GAAI,CACxC,EAAQ,EAAM,MACd,EAAY,EAAM,UAAY,EAAM,UAAY,KAChD,EAAM,EAAM,KACZ,EAAM,EAAM,GACZ,MAAM,EAAS,KAAK,IAAI,CAAG,EAAI,KAAK,IAAI,CAAG,EAC3C,EAAU,IAAW,EAAI,EAAI,IAAM,EAAM,CAC3C,CACF,CAAC,EAEI,CACL,MAAA,EACA,UAAA,EACA,QAAA,CACN,CACE,CAEA,oBAAoB,CAAE,KAAA,EAAM,EAAA,EAAG,EAAA,EAAG,EAAG,EAAA,EAAG,WAAA,EAAY,SAAA,CAAQ,EAAI,CAC9D,MAAM,EAAI,KAAK,EACT,EAAmB,EAAE,OAAO,WAC5B,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAa,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EAClD,IAAI,EAAmB,KACvB,GAAI,EAAiB,QAAS,CAC5B,EAAmB,EAAS,MAAM,CAChC,MAAO,wBACf,CAAO,EACD,MAAM,EAAO,GAAuB,EAAiB,QAAS,EAAG,EAAG,CAAC,EAC/D,EAAO,GAAuB,EAAiB,QAAS,EAAG,EAAG,CAAC,EAC/D,EAAc,EAAI,EAClB,EAAc,EAAI,WAAW,EAAiB,MAAM,QAAQ,EAAI,EAAI,EAC1E,EAAW,mBAAmB,CAC5B,EAAG,EACH,EAAG,EACH,KAAA,EACA,EACA,EAAA,EACA,MAAO,EAAW,UAClB,OAAQ,EACR,SAAA,EACA,iBAAA,CACR,CAAO,CACH,CACA,OAAO,CACT,CACF,CACA,MAAM,EAAQ,CAMZ,YAAY,EAAG,EAAK,EAAU,CAC5B,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,OAAS,EAAS,OACvB,KAAK,OAAS,EAAS,OACvB,KAAK,YAAc,KAAK,EAAE,OAAO,MAAM,WAAW,iBAClD,KAAK,QAAU,IAAI,GAAe,EAAG,CAAG,EACxC,KAAK,WAAa,KAAK,EAAE,OAAO,YAAY,QAAQ,OACpD,KAAK,YAAc,KAAK,EAAE,OAAO,OAAO,KAAO,KAAK,EAAE,OAAO,OAAO,MAAQ,CAC9E,CAIA,KAAK,EAAQ,CACX,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EACxC,EAAO,GAAc,KAAK,IAAK,CAAQ,EACvC,EAAY,IAAS,GAAY,OAAO,EAAK,cAAiB,WAC9D,EAAM,EAAS,MAAM,CACzB,MAAO,oBACb,CAAK,EACD,EAAI,KAAK,YAAa,oBAAoB,EAAE,QAAQ,IAAI,GAAG,EAC3D,MAAM,EAAY,EAAE,OAAO,UAAY,EAAE,QAAQ,WAC3C,EAAY,EAAE,OAAO,WAAa,EAAE,WAAW,OAAO,OACtD,GAAiB,EAAE,OAAO,MAAM,OAAS,WAAa,EAAE,OAAO,MAAM,OAAS,aAAe,EAAE,UAAU,YAAc,KAAK,OAAS,EAC3I,IAAI,EAAQ,EACZ,GAAI,EAAe,CACjB,MAAM,EAAO,EAAE,QAAQ,SACvB,EAAQ,OAAO,SAAS,CAAI,GAAK,EAAO,EAAI,EAAO,KAAK,OAAS,CACnE,CACA,MAAM,EAAkB,MAAM,QAAQ,EAAE,OAAO,KAAK,OAAO,GAAK,EAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,IAAM,KAAO,EAAK,GAAK,EAAK,EAAE,OAAO,KAAK,UAAY,KAAO,EAAK,EAC9J,IAAI,EAAK,EACL,EAAM,GACV,KAAK,SAAW,KAAK,QAAQ,gBAAe,EAC5C,MAAM,EAAa,EAAO,MAAK,EAC3B,EAAE,OAAO,MAAM,CAAC,EAAE,WACpB,EAAM,GACN,EAAW,QAAO,GAEpB,QAAS,EAAI,EAAM,EAAI,EAAW,OAAS,EAAG,EAAM,EAAI,EAAW,OAAS,GAAK,EAAG,EAAM,IAAM,IAAK,CACnG,MAAM,EAAW,EAAS,MAAM,CAC9B,MAAO,8CACP,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAC,CAAC,EAC5D,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EAKD,GAJA,GAAO,0BAA0B,KAAK,EAAG,EAAU,CAAC,EAC/C,GACH,EAAS,qBAAqB,EAAU,0BAA0B,EAEhE,EAAE,OAAO,MAAM,WAAW,QAAS,CACrC,MAAM,EAAS,EAAE,OAAO,MAAM,WACd,IAAI,GAAQ,KAAK,CAAC,EAC1B,WAAW,EAAU,EAAQ,CAAC,CACxC,CACA,IAAI,EAAK,EACT,MAAM,EAAiB,EAAE,OAAO,YAAY,QAAQ,eACpD,IAAI,EAAI,EACR,QAAS,EAAS,EAAG,EAAS,EAAE,QAAQ,WAAY,IAAU,CAC5D,GAAI,CAAC,GAAiB,EAAE,WAAW,QAAQ,QAAU,CAAC,EAAE,QAAQ,oBAC1D,EAAE,QAAQ,KAAO,EAAE,QAAQ,SAAW,EAAS,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,EAAG,CAC7E,EAAK,EAAK,EACV,QACF,CAEF,GAAI,GAAK,EAAW,CAAC,EAAE,OAAQ,MAC/B,MAAM,EAAQ,EAAgB,EAAQ,EACtC,GAAI,EAAe,CACjB,MAAM,EAAO,EAAE,WAAW,QAAQ,CAAC,EAAI,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,EAAI,KACpE,GAAI,GAAQ,MAAQ,IAAS,EAAM,CACjC,IACA,QACF,CACA,GAAM,EAAO,EAAE,QAAQ,MAAQ,KAAK,OAAS,EAAQ,CACvD,CACA,MAAM,EAAY,KAAK,QAAQ,cAC7B,EAAE,OAAO,MAAM,KACf,EACA,EACA,KAAK,QACf,EACQ,IAAI,EAAQ,EAAU,MACtB,MAAM,EAAiB,EAAU,WAC7B,EAAE,OAAO,KAAK,OAAS,UAEzB,EADa,IAAI,GAAK,KAAK,CAAC,EACf,SAAS,CACpB,aAAc,EACd,eAAgB,EAChB,QAEE,EAAE,QAAQ,QAAU,EAAe,QAAU,EAAI,GAAK,EAAI,EAAe,QAAU,KAAO,EAAiB,EAAe,QAAU,IAAM,EAAe,QAAU,IAErK,UAAW,EAAQ,SAAQ,EAC3B,MAAO,EAAE,OAAO,KAAK,MAAM,MAAQ,EAAE,OAAO,KAAK,MAAM,MAAQ,EAC/D,OAAQ,EAAE,OAAO,KAAK,MAAM,OAAS,EAAE,OAAO,KAAK,MAAM,OAAS,CAC9E,CAAW,GAEH,MAAM,EAAS,KAAK,WACd,EAAS,EAAE,OAAO,YAAY,QAAQ,qBAAuB,EAAQ,EAAE,QAAQ,OAAO,OAAO,CAAC,EACpG,GAAI,EACF,EAAK,aAAa,EAAI,EAAI,EAAO,EAAW,CAC1C,KAAM,EACN,YAAa,EACb,OAAA,EACA,YAAa,KAAK,YAClB,OAAA,EACA,YAAa,EACb,eAAgB,CAC5B,CAAW,MACI,CACL,MAAM,EAAO,EAAS,SAAS,EAAI,EAAI,EAAO,EAAW,CAAM,EAiB/D,GAhBA,EAAK,KAAK,CACR,GAAI,EACJ,GAAI,CAChB,CAAW,EACD,EAAK,KAAK,UAAU,IAAI,yBAAyB,EACjD,EAAS,IAAI,CAAI,EACjB,EAAK,KAAK,CACR,KAAM,EACN,EAAA,EACA,MAAO,EACP,EAAA,EACA,IAAK,EAAO,CAAC,EAAE,CAAC,EAChB,eAAgB,KAAK,YACrB,OAAA,EACA,MAAA,CACZ,CAAW,EACG,EAAE,OAAO,MAAM,WAAW,SAAW,CAAC,EAAE,QAAQ,YAAa,CAC/D,IAAI,EAAQ,EACP,EAAE,QAAQ,UACb,EAAQ,EAAE,OAAO,MAAM,WAAW,OAEpC,KAAK,eAAe,EAAM,EAAI,EAAI,EAAO,EAAW,EAAO,EAAG,CAAC,CACjE,CACA,GAAI,EAAE,QAAQ,YAAa,CACzB,IAAI,EAAQ,EACZ,GAAI,KAAK,YAAY,SAAW,EAAE,QAAQ,cAAe,CACvD,EAAQ,KAAK,YAAY,MACzB,IAAI,EAAY,EAAE,QAAQ,cAAc,CAAC,GAAK,EAAE,QAAQ,cAAc,CAAC,EAAE,CAAC,GAAK,EAAE,QAAQ,cAAc,CAAC,EAAE,CAAC,EAAE,MACxG,IAAW,EAAY,0BAC5B,KAAK,iBACH,EACA,EAAQ,WAAW,CAAS,EAAI,EAAY,EAAQ,QAAQ,CAAS,EACrE,EAAQ,WAAW,CAAK,EAAI,EAAQ,EAAQ,QAAQ,CAAK,EACzD,CAChB,CACY,CACF,CACF,CACA,MAAM,EAAY,EAAE,OAAO,WAAW,UAChC,EAAgB,EAAU,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAAG,CACzD,MAAO,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAC/B,YAAa,EACb,eAAgB,EAChB,EAAA,CACV,CAAS,EACK,EAAa,KAAK,QAAQ,oBAAoB,CAClD,KAAM,EACN,EAAG,EAAK,EAAQ,EAChB,EAAG,EAAK,EAAY,EACpB,EAAA,EACA,EAAA,EACA,WAAY,EACZ,OAAQ,CAClB,CAAS,EACG,IAAe,MACjB,EAAS,IAAI,CAAU,EAEpB,IAAe,EAAK,EAAK,GAC9B,GACF,CACA,EAAK,EAAK,EACV,EAAI,IAAI,CAAQ,CAClB,CACA,MAAM,EAEJ,EAAE,QAAQ,WAAW,CAAC,EAAE,OAAO,MAAK,EAEtC,OAAI,EAAE,OAAO,MAAM,CAAC,EAAE,SACpB,EAAW,QAAQ,EAAE,EAErB,EAAW,KAAK,EAAE,EAEpB,EAAE,QAAQ,WAAW,CAAC,EAAE,OAAS,EAC1B,CACT,CAWA,eAAe,EAAI,EAAG,EAAG,EAAO,EAAQ,EAAO,EAAM,EAAG,EAAM,EAAG,CAC/D,MAAM,EAAI,KAAK,EACT,EAAa,IAAI,GAAW,KAAK,CAAC,EAElC,EADU,EAAE,OAAO,MAAM,WACP,iBAClB,EAAiB,GAAW,EAAQ,UAAY,GACtD,IAAI,EAAQ,EACZ,GAAI,EAAgB,CAClB,MAAM,GAAe,EAAE,WAAW,QAAU,CAAA,GAAI,QAAU,EACpD,EAAc,EAAE,QAAQ,YAAc,EACtC,EAAU,EAAc,EAAc,EACtC,EAAY,KAAK,IACrB,EAAQ,OAAS,EACjB,EAAQ,GAAM,KAAK,IAAI,EAAG,CAAO,CACzC,EACM,EAAQ,GAAe,CACrB,MAAO,WACP,MAAO,EACP,IAAA,EACA,IAAA,EACA,UAAA,CACR,CAAO,CACH,CACA,EAAW,YACT,EACA,CACE,EAAG,EAAI,EAAQ,EACf,EAAG,EAAI,EAAS,EAChB,MAAO,EACP,OAAQ,CAChB,EACM,CACE,EAAA,EACA,EAAA,EACA,MAAA,EACA,OAAA,CACR,EACM,EACA,IAAM,CACJ,EAAW,mBAAmB,CAAE,CAClC,EACA,CACN,CACE,CAOA,iBAAiB,EAAI,EAAW,EAAS,EAAO,CAC9C,EAAG,KAAK,CACN,KAAM,CACZ,CAAK,EAAE,QAAQ,CAAK,EAAE,KAAK,CACrB,KAAM,CACZ,CAAK,CACH,CACF,CACA,MAAM,EAAS,CAIb,YAAY,EAAS,CACnB,KAAK,EAAI,EAAQ,EACjB,KAAK,QAAU,CACjB,CAKA,mBAAmB,EAAG,EAAQ,CAC5B,MAAM,EAAI,KAAK,EACf,IAAI,EAAE,OAAO,KAAK,OAAS,YAAc,EAAE,OAAO,KAAK,KAAK,CAAC,IAAM,aAC/C,IAAI,GAAU,KAAK,QAAQ,CAAC,EAChC,qBAAqB,CAAC,EAAG,CACrC,MAAM,EAAU,EAAO,CAAC,EAAE,MAAK,EAC/B,EAAQ,EAAQ,OAAS,CAAC,EAAI,EAAQ,EAAQ,OAAS,CAAC,EAAI,KAC5D,EAAO,CAAC,EAAI,CACd,CAEF,OAAO,CACT,CAEA,gBAAgB,CAAE,OAAA,EAAQ,UAAA,EAAW,EAAA,EAAG,EAAA,EAAG,EAAA,EAAG,EAAA,EAAG,MAAA,CAAK,EAAI,CACxD,MAAM,EAAI,KAAK,EACT,EAAM,CAAA,EACN,EAAM,CAAA,EACZ,IAAI,EAAS,KAAK,QAAQ,uBAAyB,EAAE,OAAO,QAAQ,QACpE,OAAI,EAAE,UAAU,aACd,GAAU,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,KAAK,QAAQ,OAAS,EAAE,OAAO,QAAQ,SAEtG,IAAM,IACR,EAAI,KAAK,CAAM,EACf,EAAI,KACF,EAAQ,SAAS,EAAO,CAAC,EAAE,CAAC,CAAC,EAAI,EAAQ,EAAE,OAAO,QAAQ,QAAU,IAC5E,GAEI,EAAI,KAAK,EAAI,EAAE,OAAO,QAAQ,OAAO,EACrC,EAAI,KACF,EAAQ,SAAS,EAAO,CAAC,EAAE,EAAI,CAAC,CAAC,EAAI,EAAI,EAAE,OAAO,QAAQ,QAAU,IAC1E,EACW,CACL,EAAG,EACH,EAAG,CACT,CACE,CAEA,mBAAmB,CAAE,aAAA,EAAc,aAAA,EAAc,UAAA,CAAS,EAAI,CAC5D,MAAM,EAAI,KAAK,EACf,QAAS,EAAK,EAAG,EAAK,EAAE,QAAQ,cAAc,OAAQ,IAAM,CAC1D,MAAM,EAAM,EAAE,QAAQ,cAAc,CAAE,GACjC,EAAI,OAAS,QAAU,EAAI,OAAS,SAAW,EAAI,MAAM,OAAS,GAAK,SAAS,EAAI,UAAW,EAAE,IAAM,SAAS,EAAW,EAAE,IAC5H,EAAI,OAAS,QACf,KAAK,QAAQ,eAAiB,GAC9B,EAAe,EAAE,QAAQ,cAAc,CAAE,EAAE,MAAM,CAAC,EAAE,GAC3C,EAAI,OAAS,SACtB,KAAK,QAAQ,eAAiB,GAC9B,EAAe,EAAE,QAAQ,cAAc,CAAE,EAAE,MAAM,CAAC,EAAE,EAChD,EAAE,OAAO,OAAO,MAAQ,EAAE,QAAQ,cAAc,CAAE,EAAE,MAAM,CAAC,IAC7D,EAAe,EAAE,QAAQ,cAAc,CAAE,EAAE,MAAM,CAAC,EAAE,IAI5D,CACA,MAAO,CACL,aAAA,EACA,aAAA,CACN,CACE,CAEA,oBAAoB,CAClB,EAAA,EACA,UAAA,EACA,OAAA,EACA,MAAA,EACA,cAAA,EACA,kBAAA,CACJ,EAAK,CACD,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACT,EAAc,EAAE,OAAO,MAAM,SAAW,CAAC,EAAE,QAAQ,aAAe,EAAE,OAAO,MAAM,SAAW,EAAE,QAAQ,cAAgB,CAAC,KAAK,EAAE,OAAO,MAAM,gBAC/I,EAAK,KAAK,EAAE,OAAO,OAAO,CAAS,IAAM,KAAO,OAAS,EAAG,QAAU,SACtE,EAAK,KAAK,EAAE,OAAO,OAAO,CAAS,IAAM,KAAO,OAAS,EAAG,QAAU,UACxE,GAAI,QAAS,EAAK,EAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAO,IACrD,EACE,EAAI,EACN,EAAgB,KAAK,QAAQ,YAAY,EAAI,CAAC,EAAE,CAAC,EAEjD,EAAgB,KAAK,QAAQ,MAG/B,EAAgB,KAAK,QAAQ,MAE/B,EAAQ,EAAgB,EAAO,CAAC,EAAE,CAAC,EAAI,KAAK,QAAQ,OAAO,CAAiB,GAAK,KAAK,QAAQ,WAAa,EAAO,CAAC,EAAE,CAAC,EAAI,KAAK,QAAQ,OAAO,CAAiB,EAAI,GAAK,UAEpK,GAAe,EAAI,GAAK,OAAO,EAAO,CAAC,EAAE,CAAC,EAAM,KAClD,QAAS,EAAI,EAAI,EAAG,GAAK,EAAG,IAC1B,GAAI,EAAO,CAAC,EAAE,CAAC,IAAM,MAAQ,OAAO,EAAO,CAAC,EAAE,CAAC,EAAM,IAAa,CAChE,EAAgB,KAAK,QAAQ,YAAY,CAAC,EAAE,CAAC,EAC7C,EAAQ,EACR,KACF,EAIN,MAAO,CACL,MAAA,EACA,cAAA,CACN,CACE,CACF,CACA,MAAM,EAAK,CAOT,YAAY,EAAG,EAAK,EAAU,EAAe,CAC3C,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,SAAW,EAChB,KAAK,OAAS,EACd,KAAK,OAAS,CAAA,EACd,KAAK,OAAS,EACd,KAAK,UAAY,CAAA,EACjB,KAAK,YAAc,EAAE,KAAK,EAAE,OAAO,MAAM,OAAS,UAAY,KAAK,EAAE,OAAO,MAAM,OAAS,YAAc,EACzG,KAAK,QAAU,IAAI,GAAQ,KAAK,EAAG,KAAK,GAAG,EAC3C,KAAK,YAAc,KAAK,EAAE,QAAQ,OAAS,OAAO,UAClD,KAAK,YAAc,IAAI,GAAS,IAAI,EACpC,KAAK,QAAU,IAAI,GAAQ,KAAK,EAAG,KAAK,GAAG,EAC3C,KAAK,YAAc,CAAA,EACnB,KAAK,uBAAyB,EAC9B,KAAK,WAAa,EAClB,KAAK,UAAY,EACjB,KAAK,MAAQ,EACb,KAAK,YAAc,EACnB,KAAK,YAAc,EACnB,KAAK,WAAa,GAClB,KAAK,eAAiB,GACtB,KAAK,SAAW,KAChB,KAAK,aAAe,KACpB,KAAK,iBAAmB,KACxB,KAAK,kBAAoB,IAC3B,CAOA,KAAK,EAAQ,EAAO,EAAa,EAAgB,CAC/C,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAO,EAAE,QAAQ,YAAc,EAAQ,EAAE,OAAO,MAAM,KACtD,EAAM,EAAS,MAAM,CACzB,MAAO,cAAc,CAAI,gCAC/B,CAAK,EACK,EAAY,IAAI,GAAU,KAAK,CAAC,EACtC,KAAK,OAAS,KAAK,SAAS,OAC5B,KAAK,OAAS,KAAK,SAAS,OAC5B,KAAK,OAAS,KAAK,SAAS,OAC5B,KAAK,UAAY,KAAK,SAAS,UAC/B,EAAS,EAAU,aAAa,CAAM,EACtC,KAAK,OAAS,EAAU,cAAc,KAAK,MAAM,EACjD,KAAK,YAAc,CAAA,EACnB,MAAM,EAAY,CAAA,EAClB,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,EAAS,KAAK,YAAY,mBAAmB,EAAG,CAAM,EACtD,MAAM,EAAY,EAAE,QAAQ,YAE1B,EAAY,CAAC,EACX,EACE,EAAoB,KAAK,OAAO,OAAS,EAAI,EAAY,EAC/D,KAAK,oBAAoB,EAAQ,EAAG,CAAS,EAC7C,MAAM,EAAQ,CAAA,EACR,EAAS,CAAA,EACT,EAAQ,CAAA,EACd,IAAI,EAAI,EAAE,QAAQ,cAAgB,KAAK,uBACvC,MAAM,EAAI,EACJ,EAAY,CAAA,EACZ,EAAY,CAAA,EAClB,GAAO,0BAA0B,KAAK,EAAG,KAAK,SAAU,CAAS,EAC7D,EAAE,UAAU,YAAc,EAAE,WAAW,QAAQ,OAAS,IAC1D,GAAK,EAAE,WAAW,QAAQ,CAAS,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,KAAK,QAEnE,EAAM,KAAK,CAAC,EACZ,MAAM,EAAK,EACX,IAAI,EACJ,MAAM,EAAQ,EACd,IAAI,EAAQ,KAAK,MACb,EAAS,KAAK,MAClB,MAAM,EAAgB,EAStB,EARmB,KAAK,YAAY,oBAAoB,CACtD,EAAA,EACA,UAAA,EACA,OAAA,EACA,MAAA,EACA,cAAA,EACA,kBAAA,CACR,CAAO,EACkB,MACf,EAAE,OAAO,OAAO,QAAU,iBAAmB,EAAO,CAAC,EAAE,CAAC,IAAM,KAChE,EAAM,KAAK,IAAI,EAEf,EAAM,KAAK,CAAK,EAElB,MAAM,EAAK,EACX,IAAI,EACA,IAAS,cACX,EAAc,KAAK,YAAY,oBAAoB,CACjD,EAAA,EACA,UAAA,EACA,OAAQ,EACR,MAAO,EACP,cAAA,EACA,kBAAA,CACV,CAAS,EACD,EAAS,EAAY,MACrB,EAAM,EACN,EAAO,KAAK,EAAM,CAAC,IAAM,KAAO,EAAS,IAAI,GAE/C,MAAM,EAAY,KAAK,oBAAoB,CACzC,KAAA,EACA,OAAA,EACA,EAAA,EACA,UAAA,EACA,kBAAA,EACA,MAAA,EACA,MAAA,EACA,OAAA,CACR,CAAO,EACK,EAAS,CAAC,EAAM,CAAC,CAAC,EAClB,EAAU,CAAC,EAAO,CAAC,CAAC,EACpB,EAAgB,CACpB,KAAA,EACA,OAAA,EACA,UAAA,EACA,kBAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,UAAA,EACA,UAAA,EACA,UAAA,EACA,YAAA,EACA,cAAA,EACA,MAAA,EACA,MAAA,EACA,OAAA,EACA,eAAA,CACR,EACY,EAAQ,KAAK,uBAAuB,EAAc,EAAe,CAAA,EAAI,CAAa,EAAG,CACzF,WAAY,IAAS,YAAc,EAAO,CAAC,EAAE,OAAS,EAAI,OAC1D,aAAc,EACtB,CAAO,CAAC,EACF,GAAI,IAAS,YAAa,CACxB,MAAM,EAAa,KAAK,oBAAoB,CAC1C,OAAQ,EACR,EAAA,EACA,UAAA,EACA,MAAA,EACA,MAAO,CACjB,CAAS,EACK,EAAa,KAAK,uBAAuB,EAAc,EAAe,CAAA,EAAI,CAAa,EAAG,CAC9F,OAAQ,EACR,MAAO,CAAC,CAAC,EACT,MAAO,EACP,OAAQ,EACR,GAAI,EACJ,UAAW,EAAM,UACjB,UAAW,EACX,WAAY,EAAe,CAAC,EAAE,OAAS,EACvC,aAAc,EACxB,CAAS,CAAC,EACI,EAAW,EAAM,UAAU,OAAS,EAC1C,QAAS,EAAI,EAAG,EAAI,EAAU,IAC5B,EAAM,UAAU,CAAC,EAAI,EAAW,UAAU,EAAI,CAAQ,EAAI,EAAM,UAAU,CAAC,EAE7E,EAAM,UAAU,OAAO,CAAQ,EAC/B,EAAM,aAAe,EAAW,aAAe,EAAM,YACvD,KAAY,SAAS,KAAK,EAAM,YAAY,IAC1C,EAAM,cAAgB,KAExB,KAAK,aAAa,CAAE,KAAA,EAAM,UAAA,EAAW,EAAA,EAAG,MAAA,CAAK,CAAE,EAC/C,KAAK,SAAS,IAAI,KAAK,YAAY,EACnC,KAAK,SAAS,IAAI,KAAK,gBAAgB,EACvC,EAAU,KAAK,KAAK,QAAQ,CAC9B,CAOA,GANI,QACF,EAAK,EAAE,OAAO,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,QAAY,KAC3D,EAAU,KACR,CAAC,EAAG,IAAM,OAAO,EAAE,KAAK,aAAa,QAAQ,CAAC,EAAI,OAAO,EAAE,KAAK,aAAa,QAAQ,CAAC,CAC9F,EAEQ,EAAE,OAAO,MAAM,QACjB,QAAS,EAAI,EAAU,OAAS,EAAG,GAAK,EAAG,IACzC,EAAI,IAAI,EAAU,CAAC,CAAC,MAGtB,SAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IACpC,EAAI,IAAI,EAAU,CAAC,CAAC,EAGxB,OAAO,CACT,CAMA,oBAAoB,EAAQ,EAAG,EAAW,CACxC,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,KAAK,UAAY,EAAE,OAAO,WAAa,EAAE,QAAQ,YAAc,EAAE,OAAO,MAAM,gBAAkB,KAAO,EAAI,IAC3G,KAAK,YAAc,MAAM,QAAQ,EAAE,OAAO,OAAO,KAAK,EAAI,EAAE,OAAO,OAAO,MAAM,CAAS,EAAI,EAAE,OAAO,OAAO,MAC7G,IAAI,EAAoB,EACpB,KAAK,OAAO,OAAS,IACvB,KAAK,WAAa,EAAE,QAAQ,sBAAsB,CAAS,EAC3D,EAAoB,GAEtB,KAAK,WAAa,EAAE,OAAO,MAAM,KAAK,UAAU,GAAK,EAAE,OAAO,MAAM,KAAK,UAAU,EAAE,SACrF,KAAK,MAAQ,EAAE,OAAO,WAAa,KAAK,UAAU,CAAiB,GAAK,KAAK,WAAa,EAAE,OAAO,WAAa,IAAM,KAAK,WAAa,KAAK,UAAU,CAAiB,EAAI,EAAI,GAChL,KAAK,YAAc,KAAK,OACpB,KAAK,MAAQ,EAAE,OAAO,YAAc,EAAE,OAAO,YAAY,KAAK,SAAW,SAC3E,KAAK,YAAc,EAAE,OAAO,YAE9B,KAAK,uBAAyB,KAAK,UAAY,EAC/C,MAAM,EAEJ,EAAE,OAAO,OAAO,CAAS,EAa3B,GAXA,KAAK,SAAW,EAAS,MAAM,CAC7B,MAAO,oBACP,OAAQ,OAAO,EAAW,OAAW,IAAc,EAAW,OAAS,EACvE,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAS,CAAC,CAC1E,CAAK,EACD,KAAK,aAAe,EAAS,MAAM,CACjC,MAAO,iCACP,iBAAkB,CACxB,CAAK,EACD,KAAK,QAAQ,qBAAoB,EACjC,KAAK,kBAAoB,KACrB,EAAE,QAAQ,cAAe,CAC3B,MAAM,EAAa,KAAK,QAAQ,iBAAiB,CAC/C,UAAW,CACT,EAAG,CAAC,CAAC,EACL,EAAG,CAAC,EAAE,OAAO,WAAa,EAAE,QAAQ,QAAQ,WAAW,CACjE,EACQ,YAAa,EACb,EAAG,EACH,MAAO,GACP,iBAAkB,GAClB,eAAgB,EACxB,CAAO,EACG,IAAe,MACjB,KAAK,aAAa,IAAI,CAAU,CAEpC,CACA,KAAK,iBAAmB,EAAS,MAAM,CACrC,MAAO,wBACP,iBAAkB,CACxB,CAAK,EACD,MAAM,EAAgB,EAAO,CAAC,EAAE,SAAW,EAAE,QAAQ,WACrD,KAAK,SAAS,KAAK,CACjB,qBAAsB,EACtB,IAAK,EAAI,EACT,iBAAkB,CACxB,CAAK,EACD,KAAK,eAAiB,EACxB,CAEA,oBAAoB,CAClB,KAAA,EACA,OAAA,EACA,EAAA,EACA,UAAA,EACA,kBAAA,EACA,MAAA,EACA,MAAA,EACA,OAAA,CACJ,EAAK,CACD,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,IAAI,EAAU,EAAU,EAAc,EACtC,GAAI,EAAO,CAAC,EAAE,CAAC,IAAM,MACnB,QAAS,EAAI,EAAG,EAAI,EAAO,CAAC,EAAE,OAAQ,IACpC,GAAI,EAAO,CAAC,EAAE,CAAC,IAAM,KAAM,CACzB,EAAQ,KAAK,UAAY,EACzB,EAAQ,KAAK,MAAQ,EAAO,CAAC,EAAE,CAAC,EAAI,KAAK,OAAO,CAAiB,EACjE,EAAW,EAAS,KAAK,EAAO,CAAK,EACrC,EAAW,EAAS,KAAK,EAAO,KAAK,WAAW,EAChD,KACF,OAGF,EAAW,EAAS,KAAK,EAAO,CAAK,EACjC,IAAS,cACX,EAAW,EAAS,KAAK,EAAO,CAAM,EAAI,EAAS,KAAK,EAAO,CAAK,GAEtE,EAAW,EAAS,KAAK,EAAO,KAAK,WAAW,EAAI,EAAS,KAAK,EAAO,CAAK,EAIhF,GAFA,EAAe,EAAS,KAAK,EAAG,KAAK,WAAW,EAAI,EAAS,KAAK,EAAG,KAAK,WAAW,EACrF,EAAe,EAAS,KAAK,EAAG,KAAK,WAAW,EAAI,EAAS,KAAK,EAAG,KAAK,WAAW,EACjF,EAAE,QAAQ,cAAc,OAAS,EAAG,CACtC,MAAM,EAAW,KAAK,YAAY,mBAAmB,CACnD,aAAA,EACA,aAAA,EACA,UAAA,CACR,CAAO,EACD,EAAe,EAAS,aACxB,EAAe,EAAS,YAC1B,CACA,MAAO,CACL,MAAA,EACA,MAAA,EACA,SAAA,EACA,SAAA,EACA,aAAA,EACA,aAAA,CACN,CACE,CAEA,aAAa,CAAE,KAAA,EAAM,UAAA,EAAW,EAAA,EAAG,MAAA,CAAK,EAAI,CAC1C,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAO,GAAc,KAAK,IAAK,CAAQ,EACvC,EAAO,IAAI,GAAK,KAAK,CAAC,EAC5B,KAAK,YAAY,KAAK,EAAM,KAAK,EACjC,IAAI,EAAe,MACd,IAAS,QAAU,IAAS,SAAW,EAAE,QAAQ,cACpD,EAAe,GAAmB,EAAG,EAAW,EAAM,MAAO,EAAM,KAAK,GAE1E,IAAI,EAAY,KACZ,CAAC,IAAiB,IAAS,QAAU,IAAS,UAChD,EAAY,GAAqB,EAAG,CAClC,KAAA,EACA,UAAA,EACA,aAAc,EAAM,aACpB,aAAc,EAAM,aACpB,UAAW,EAAM,UACjB,UAAW,EAAM,SACzB,CAAO,GAEH,EAAE,QAAQ,cAAc,CAAS,EAAI,EAAM,MAC3C,EAAE,QAAQ,cAAc,CAAS,EAAI,EAAM,MAC3C,MAAM,EAAW,EAAE,OAAO,mBAC1B,GAAI,EAAS,MAAQ,GAAK,IAAS,YAAa,CAC9C,MAAM,EAAiB,EAAE,QAAQ,cAAc,CAAS,EAAE,EAAE,QAAQ,cAAc,CAAS,EAAE,OAAS,EAAS,MAAQ,CAAC,EAClH,EAAiB,EAAS,SAC9B,EACA,EACA,EAAE,OAAO,UACT,EAAE,OAAO,WACT,CACR,EACM,EAAE,IAAI,eAAe,YAAY,EAAe,IAAI,EACpD,MAAM,EAAoB,EAAS,SACjC,EACA,EACA,EACA,EAAE,OAAO,WACT,CACR,EACM,EAAE,IAAI,kBAAkB,YAAY,EAAkB,IAAI,CAC5D,CACK,KAAK,YAkBR,GAAmB,EAAG,CACpB,aAAc,KAAK,aACnB,UAAA,EACA,MAAO,EAAE,OAAO,MAAM,WAAW,iBAAiB,KAC1D,CAAO,GArBD,EAAE,QAAQ,gBAAgB,KAAK,CAC7B,GAAI,KAAK,aAAa,KACtB,MAAO,CACf,CAAO,EACD,GAAmB,EAAG,CACpB,aAAc,KAAK,aACnB,UAAA,EACA,MAAO,EAAE,OAAO,MAAM,WAAW,iBAAiB,KAC1D,CAAO,EACG,GAAW,EAAG,CAAS,KAAO,EAAK,KAAK,mBAAqB,MAAgB,EAAG,QAClF,KAAK,iBAAiB,KAAK,UAAU,IAAI,2BAA2B,EACpE,EAAE,QAAQ,gBAAgB,KAAK,CAC7B,GAAI,KAAK,iBAAiB,KAC1B,kBAAmB,EAC7B,CAAS,IASL,MAAM,EAA6B,CACjC,EAAA,EACA,UAAA,EACA,eAAgB,EAChB,aAAc,EAAE,OAAO,MAAM,WAAW,MACxC,gBAAiB,EAAE,OAAO,MAAM,WAAW,iBAAiB,MAC5D,UAAW,cAAc,CAAI,EACnC,EACU,EAAY,EAAM,UACxB,GAAI,IAAS,OAAQ,CACnB,MAAM,EAAW,EAAK,SAAS,CAC7B,aAAc,CACtB,CAAO,EACD,QAAS,EAAI,EAAG,EAAI,EAAM,UAAU,OAAQ,IAAK,CAC/C,MAAM,EAAe,EAAK,YAAY,EAAc,EAAe,CAAA,EAAI,CAA0B,EAAG,CAClG,SAAU,EAAe,GAAuB,EAAM,UAAU,CAAC,EAAG,CAAY,GAAK,GAAM,EAAkC,GAAU,OAAS,KAAO,OAAS,EAAG,OAAS,KAAO,EAAK,EAAM,aAC9L,OAAQ,EAAM,UAAU,CAAC,EACzB,cAAe,EAAY,CACzB,GAAI,EAAU,GACd,GAAI,EAAU,GACd,OAAQ,EAAU,UAC9B,EAAc,OACJ,cAAe,EAAkC,GAAU,OAAS,KAAO,OAAS,EAAG,SACvF,YAAa,CAAC,CAAC,EACf,OAAQ,OACR,YAAa,EACb,cAAe,KACf,KAAM,CAChB,CAAS,CAAC,EACF,KAAK,SAAS,IAAI,CAAY,CAChC,CACF,CACA,GAAI,EAAE,OAAO,OAAO,MAAQ,CAAC,KAAK,YAAa,CAC7C,IAAI,EAAW,KACf,GAAI,IAAS,OACX,EAAW,EAAK,SAAS,CACvB,aAAc,EACd,EAAA,CACV,CAAS,UAEG,EAAE,OAAO,OAAO,KAAK,OAAS,QAChC,EAAW,EAAE,QAAQ,OAAO,OAAO,CAAS,MACvC,CACL,MAAM,EAAW,EAAE,OAAO,KAC1B,EAAE,OAAO,KAAO,EAAE,OAAO,OAAO,KAChC,EAAW,EAAK,SAAS,CACvB,aAAc,EACd,EAAA,CACZ,CAAW,EACD,EAAE,OAAO,KAAO,CAClB,CAEF,QAAS,EAAI,EAAG,EAAI,EAAM,UAAU,OAAQ,IAAK,CAC/C,IAAI,EAAW,EACX,IAAS,cACX,EAAW,EAAK,SAAS,CACvB,aAAc,CAC1B,CAAW,GAEH,MAAM,EAAqB,EAAc,EAAe,CAAA,EAAI,CAA0B,EAAG,CACvF,SAAU,EAAe,GAAuB,EAAM,UAAU,CAAC,EAAG,CAAY,GAAK,GAAM,EAAkC,GAAU,OAAS,KAAO,OAAS,EAAG,OAAS,KAAO,EAAK,EAAM,aAC9L,OAAQ,EAAM,UAAU,CAAC,EACzB,cAAe,EAAY,CAAE,GAAI,EAAU,GAAI,GAAI,EAAU,EAAE,EAAK,OACpE,cAAe,EAAkC,GAAU,OAAS,KAAO,OAAS,EAAG,SACvF,YAAa,CAAC,CAAC,EACf,OAAQ,EACR,YAAa,KAAK,YAClB,cAAe,EAAE,OAAO,OAAO,QAC/B,KAAM,IAAS,YAAc,EAAW,MAClD,CAAS,EACK,EAAe,EAAK,YAAY,CAAkB,EAGxD,GAFA,KAAK,SAAS,IAAI,CAAY,EAC9B,EAAa,KAAK,YAAa,SAAS,EACpC,EAAS,MAAQ,GAAK,IAAS,YAAa,CAC9C,MAAM,EAAuB,EAAK,YAAY,CAAkB,EAChE,EAAqB,KAAK,aACxB,mBACA,EAAS,SACrB,EACc,EAAS,aACX,EAAqB,KAAK,aACxB,eACA,EAAS,WACvB,EAEU,KAAK,SAAS,IAAI,CAAoB,EACtC,EAAqB,KACnB,YACA,oBAAoB,EAAE,QAAQ,IAAI,GAC9C,EACU,EAAa,KACX,YACA,uBAAuB,EAAE,QAAQ,IAAI,GACjD,CACQ,CACF,CACF,CACF,CACA,uBAAuB,CACrB,KAAA,EACA,OAAA,EACA,WAAA,EACA,UAAA,EACA,kBAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,UAAA,EACA,UAAA,EACA,UAAA,EACA,YAAA,EACA,cAAA,EACA,MAAA,EACA,MAAA,EACA,OAAA,EACA,aAAA,EACA,eAAA,CACJ,EAAK,CACD,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAS,KAAK,OACpB,GAAI,CAAE,MAAA,EAAO,SAAA,EAAU,SAAA,EAAU,aAAA,EAAc,aAAA,CAAY,EAAK,EAChE,MAAM,EAAO,EAAQ,SAAS,EAAE,QAAQ,QAAQ,CAAS,CAAC,EAAI,EAAE,QAAQ,QAAQ,CAAS,EAAI,EAAE,QAAQ,KAClG,IACH,EAAa,EAAE,QAAQ,WAAa,EAAI,EAAE,QAAQ,WAAa,EAAI,EAAE,QAAQ,YAE/E,MAAM,EAAO,CAAC,EAAI,IACT,EAAW,EAAK,EAAO,CAAiB,GAAK,KAAK,WAAa,EAAK,EAAO,CAAiB,EAAI,GAAK,EAE9G,IAAI,EAAK,EACT,MAAM,EAAc,EAAE,OAAO,MAAM,SAAW,CAAC,EAAE,QAAQ,aAAe,EAAE,OAAO,MAAM,SAAW,EAAE,QAAQ,cAAgB,CAAC,KAAK,EAAE,OAAO,MAAM,gBAC/I,EAAK,KAAK,EAAE,OAAO,OAAO,CAAS,IAAM,KAAO,OAAS,EAAG,QAAU,SACtE,EAAK,KAAK,EAAE,OAAO,OAAO,CAAS,IAAM,KAAO,OAAS,EAAG,QAAU,UACxE,IAAI,EAAQ,EAAE,OAAO,OAAO,MACxB,MAAM,QAAQ,CAAK,IACjB,MAAM,QAAQ,CAAW,EAC3B,EAAQ,EAAM,EAAY,CAAC,CAAC,EAE5B,EAAQ,EAAM,CAAC,GAGnB,IAAI,EAAY,EACZ,EACJ,MAAM,EAAW,KAAK,YAAc,KAAK,iBAAiB,CAAS,EAAI,KACvE,GAAI,IAAU,YAAc,CAAC,KAAK,YAAa,CAC7C,MAAM,EAAO,KAAK,kBAAkB,CAClC,KAAA,EACA,OAAA,EACA,EAAA,EACA,UAAA,EACA,kBAAA,EACA,WAAA,EACA,EAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,UAAA,EACA,UAAA,EACA,UAAA,EACA,MAAA,EACA,MAAA,EACA,OAAA,EACA,YAAA,CACR,CAAO,EACD,GAAI,EAAM,OAAO,CACnB,CACA,QAAS,EAAI,EAAG,EAAI,GACd,EAAO,CAAC,EAAE,SAAW,EADK,IAAK,CAEnC,MAAM,EAAS,OAAO,EAAO,CAAC,EAAE,EAAI,CAAC,EAAM,KAAe,EAAO,CAAC,EAAE,EAAI,CAAC,IAAM,KAC/E,GAAI,EAAE,UAAU,WAAY,CAC1B,IAAI,EAAK,EAAE,WAAW,QAAQ,CAAS,EAAE,EAAI,CAAC,EAC1C,OAAO,EAAE,WAAW,QAAQ,CAAS,EAAE,EAAI,CAAC,EAAM,MACpD,EAAK,EAAE,WAAW,QAAQ,CAAS,EAAE,EAAa,CAAC,GAErD,GAAK,EAAK,EAAE,QAAQ,MAAQ,KAAK,MACnC,MACE,EAAI,EAAI,KAAK,UAEf,GAAI,EACF,GAAI,EAAI,GAAK,EAAE,QAAQ,gBAAgB,OAAS,EAAE,OAAO,OAAO,OAAS,EAAG,CAC1E,MAAM,EAAa,GAAO,CACxB,QAAS,GAAM,EAAI,GAAM,EAAG,KAC1B,GAAI,EAAE,QAAQ,uBAAuB,QACH,IAAY,EAAG,GAAM,EACrE,EAAkB,GACF,SAEA,QAAO,GAGX,MAAO,EACT,EACA,EAAgB,KAAK,YAAY,EAAU,EAAI,CAAC,CAAC,EAAE,EAAI,CAAC,CAC1D,MACE,EAAgB,KAAK,WAGvB,EAAgB,KAAK,MAEnB,EACF,EAAI,EAAK,EAAM,CAAa,GAE5B,EAAI,EAAK,EAAO,CAAC,EAAE,EAAI,CAAC,EAAG,CAAa,EACpC,IAAS,cACX,EAAK,EAAK,EAAe,CAAC,EAAE,EAAI,CAAC,EAAG,CAAa,IAGrD,IAAI,EAAK,EACL,EAAK,EACT,GAAI,EAAU,CACZ,MAAM,EAAO,EAAY,QAAU,EAAI,GACnC,EAAS,IAAG,EAAK,GAAK,GAAO,EAAO,KAAO,EAAE,EAAI,IAAO,EAAI,EAAS,GACrE,EAAS,IAAG,EAAK,GAAK,GAAO,EAAO,KAAO,EAAE,EAAI,IAAO,EAAI,EAAS,EAC3E,CACA,EAAM,KAAK,EAAO,CAAC,EAAE,EAAI,CAAC,IAAM,KAAO,KAAO,CAAE,EAC5C,IAAW,EAAE,OAAO,OAAO,QAAU,UAAY,EAAE,OAAO,OAAO,QAAU,kBAC7E,EAAM,KAAK,IAAI,EACf,EAAO,KAAK,IAAI,IAEhB,EAAM,KAAK,CAAE,EACb,EAAO,KAAK,CAAE,GAEhB,MAAM,EAAY,KAAK,YAAY,gBAAgB,CACjD,OAAA,EACA,EAAG,EACH,EAAG,EACH,UAAA,EACA,EAAA,EACA,EAAA,EACA,MAAA,CACR,CAAO,EACK,GAAkB,KAAK,aAAa,CACxC,KAAA,EACA,OAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,GAAA,EACA,MAAA,EACA,MAAA,EACA,OAAA,EACA,GAAA,EACA,GAAA,EACA,UAAA,EACA,cAAA,EACA,SAAA,EACA,SAAA,EACA,UAAA,EACA,UAAA,EACA,MAAA,EACA,aAAA,CACR,CAAO,EACD,EAAY,GAAgB,UAC5B,EAAY,GAAgB,UAC5B,EAAK,GAAgB,GACrB,EAAK,GAAgB,GACrB,EAAY,GAAgB,UAC5B,EAAgB,GAAgB,cAChC,EAAW,GAAgB,SAC3B,EAAW,GAAgB,SACvB,KAAK,gBAAkB,CAAC,EAAE,QAAQ,eAAiB,EAAE,IAAU,iBAAmB,IAAS,eAC7F,GAAgB,EAAS,KAAK,EAAG,KAAK,WAAW,EACjD,GAAgB,EAAS,KAAK,EAAG,KAAK,WAAW,GAEnD,KAAK,qBAAqB,EAAQ,EAAW,EAAG,EAAG,CAAS,EAC5D,KAAK,wBAAwB,CAC3B,KAAA,EACA,UAAA,EACA,EAAA,EACA,EAAA,EACA,UAAA,EACA,aAAA,CACR,CAAO,CACH,CACA,MAAO,CACL,MAAA,EACA,MAAA,EACA,aAAA,EACA,UAAA,EACA,aAAA,EACA,UAAA,EACA,SAAA,EACA,SAAA,CACN,CACE,CAEA,wBAAwB,CAAE,KAAA,EAAM,UAAA,EAAW,aAAA,EAAc,EAAG,EAAA,EAAG,UAAA,CAAS,EAAI,CAC1E,MAAM,EAAI,KAAK,EACT,EAAa,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EAClD,GAAK,KAAK,YAeR,KAAK,QAAQ,KAAK,KAAK,SAAU,EAAG,CAClC,UAAA,EACA,UAAA,EACA,OAAQ,KAAK,OACb,SAAU,KAAK,YACvB,CAAO,MApBoB,CAEjB,EADmB,CAAC,EAAE,QAAQ,aAAe,CAAC,EAAE,QAAQ,UACrC,EAAE,WAAW,OAAO,CAAC,EAAE,OAAS,GACrD,KAAK,aAAa,KAAK,UAAU,IAAI,2BAA2B,EAElE,MAAM,EAAe,KAAK,QAAQ,iBAAiB,CACjD,UAAA,EACA,YAAa,EACb,EAAG,EAAI,CACf,CAAO,EACG,IAAiB,MAAQ,IAAiB,KAAK,oBACjD,KAAK,aAAa,IAAI,CAAY,EAClC,KAAK,kBAAoB,EAE7B,CAQA,MAAM,EAAc,EAAW,cAAc,CAC3C,KAAA,EACA,aAAA,EACA,IAAK,EACL,EAAG,EACH,EAAG,EAAI,CACb,CAAK,EACG,IAAgB,MAClB,KAAK,iBAAiB,IAAI,CAAW,CAEzC,CAUA,iBAAiB,EAAW,CAC1B,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,GAAM,EAAK,EAAE,OAAO,YAAY,UAAY,KAAO,OAAS,EAAG,OACrE,GAAI,CAAC,GAAM,CAAC,EAAG,SAAW,CAAC,EAAG,GAAK,CAAC,EAAG,EAAG,OAAO,KACjD,MAAM,EAAU,EAAE,UAAU,YAAc,KAAK,OAAS,EAAI,KAAK,OAAS,KAAK,UACzE,EAAK,KAAK,OAAO,OAAS,EAAI,EAAY,EAC1C,EAAU,KAAK,OAAO,CAAE,EAAI,EAAI,KAAK,OAAO,CAAE,EAAI,EACxD,MAAO,CACL,GAAI,EAAG,GAAK,GAAK,EACjB,GAAI,EAAG,GAAK,GAAK,CACvB,CACE,CAmBA,kBAAkB,CAChB,KAAA,EACA,OAAA,EACA,EAAA,EACA,UAAA,EACA,kBAAA,EACA,WAAA,EACA,EAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,UAAA,EACA,UAAA,EACA,UAAA,EACA,MAAA,EACA,MAAA,EACA,OAAA,EACA,YAAA,CACJ,EAAK,CACD,MAAM,EAAI,KAAK,EAKf,GAJI,IAAS,QAAU,IAAS,QAC5B,EAAE,QAAQ,aAAe,GACzB,EAAE,OAAO,WAAW,SACpB,EAAE,OAAO,QAAQ,SAAS,QAC1B,EAAE,QAAQ,QAAQ,KAAK,CAAS,EAAI,EAAG,OAAO,KAClD,MAAM,EAAI,EAAO,CAAC,EACZ,EAAI,EAAE,OACZ,GAAI,CAAC,GAAc,EAAI,GAAK,EAAI,IAAM,EAAY,OAAO,KACzD,QAAS,GAAI,EAAG,IAAK,EAAY,KAAK,CACpC,MAAM,GAAI,EAAE,EAAC,EACb,GAAI,KAAM,MAAQ,OAAO,GAAM,IAAa,OAAO,IACrD,CACA,MAAM,EAAa,EAAE,UAAU,WACzB,EAAK,EAAa,EAAE,WAAW,QAAQ,CAAS,EAAI,KAC1D,GAAI,IAAe,CAAC,GAAM,EAAG,OAAS,GAAI,OAAO,KACjD,MAAM,EAAK,KAAK,OAAO,CAAiB,EAClC,EAAa,KAAK,WAClB,EAAQ,KAAK,MACb,EAAU,KAAK,YACf,EAAS,KAAK,OACd,EAAO,EAAE,QAAQ,KACjB,EAAY,KAAK,UACjB,EAAO,EAAE,OAAO,QAAQ,QACxB,EAAO,EAAE,OAAO,QAAQ,QACxB,EAAa,KAAK,gBAAkB,CAAC,EAAE,QAAQ,cACrD,GAAI,CAAE,aAAA,EAAc,aAAA,CAAY,EAAK,EACrC,MAAM,EAAI,KAAK,KAAO,KAAK,IAAI,SACzB,EAAa,CAAC,EAAE,GAAK,EAAE,MAAQ,EAAE,OAAS,OAC1C,EAAe,CAAC,GAAc,EAAE,QAAQ,aAAe,CAAC,CAAC,EAAE,QAAQ,gBACnE,EAAM,EAAa,IAAI,aAAa,CAAC,EAAI,KACzC,EAAM,EAAa,IAAI,aAAa,CAAC,EAAI,KAC3C,GAAO,IACT,EAAI,CAAC,EAAI,EACT,EAAI,CAAC,EAAI,GAEP,OAAO,EAAE,QAAQ,YAAY,CAAS,EAAM,MAC9C,EAAE,QAAQ,YAAY,CAAS,EAAI,CAAA,GAErC,MAAM,EAAM,EAAE,QAAQ,YAAY,CAAS,EACrC,EAAS,GAAM,EAAG,CAAC,EAAI,GAAQ,EAAS,EAAO,KAAK,uBAAyB,EACnF,EAAI,KAAK,CAAC,EAAQ,EAAU,MAAQ,CAAI,CAAC,EACzC,MAAM,EAAQ,EAAe,IAAI,MAAM,EAAa,CAAC,EAAI,CAAA,EACrD,IAAc,EAAM,CAAC,EAAI,KAAO,EAAK,IAAM,GAC/C,MAAM,EAAY,GAAgB,EAAa,IAAI,MAAM,CAAU,EAAI,KACvE,IAAI,GAAK,EACL,EAAK,EACL,EAAK,EACT,QAAS,GAAI,EAAG,GAAI,EAAY,KAAK,CAC/B,EACF,GAAM,EAAG,GAAI,CAAC,EAAI,GAAQ,GAE1B,GAAK,GAAK,EACV,EAAK,IAEP,MAAM,GAAI,EAAE,GAAI,CAAC,EACjB,EAAK,EAAQ,GAAI,GAAM,EAAa,GAAI,EAAK,GAAK,EAClD,EAAM,KAAK,CAAE,EACb,EAAM,KAAK,CAAE,EACb,EAAO,KAAK,CAAC,EACb,EAAI,KAAK,CAAC,EAAK,EAAM,EAAK,CAAI,CAAC,EAC3B,IACF,EAAM,GAAI,CAAC,EAAI,MAAQ,EAAK,IAAM,EAC9B,IAAW,EAAU,EAAC,EAAI,MAAQ,EAAK,IAAM,IAE/C,GAAO,IACT,EAAI,GAAI,CAAC,EAAI,EACb,EAAI,GAAI,CAAC,EAAI,EAEjB,CACA,IAAI,GAAW,GACX,GAAW,GAKf,GAJI,IACF,GAAW,EAAM,KAAK,EAAE,EACxB,GAAW,GAAW,MAAQ,EAAK,IAAM,EAAU,MAAQ,EAAK,IAAM,EAAU,KAE9E,EAAW,CACb,MAAM,GAAa,EAAU,KAAK,EAAE,EACpC,GAAgB,GAChB,GAAgB,EAClB,KAAW,CAAC,GAAgB,IAC1B,GAAgB,MAAQ,EAAK,IAAM,EACnC,GAAgB,MAAQ,EAAK,IAAM,GAErC,OAAA,EAAU,KAAK,EAAQ,EACvB,EAAU,KAAK,EAAQ,EAChB,CACL,MAAA,EACA,MAAA,EACA,aAAA,EACA,UAAA,EACA,aAAA,EACA,UAAA,EACA,SAAA,GACA,SAAA,GACA,UAAW,EAAM,CAAE,GAAI,EAAK,GAAI,EAAK,WAAY,CAAO,EAAK,MACnE,CACE,CAEA,aAAa,CACX,KAAA,EACA,OAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,MAAA,EACA,MAAA,EACA,GAAA,EACA,OAAA,EACA,GAAA,EACA,GAAA,EACA,UAAA,EACA,cAAA,EACA,SAAA,EACA,SAAA,EACA,UAAA,EACA,UAAA,EACA,MAAA,EACA,aAAA,CACJ,EAAK,CACD,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAc,KAAK,YACnB,EAAY,IAAS,YACrB,EAAuB,IAAS,aAAe,EACrD,OAAQ,EAAK,CACX,IAAK,gBAAiB,CACpB,MAAM,EAAM,EAAe,EAAQ,EAC7B,EAAkB,CAAC,EAAM,IACtB,EAAK,IAAI,CAAC,EAAG,IACX,CAAC,EAAG,EAAK,CAAE,CAAC,CACpB,EAAE,OAAQ,GAAM,EAAE,CAAC,IAAM,IAAI,EAE1B,EAAqB,GAAS,CAClC,MAAM,EAAU,CAAA,EAChB,IAAI,EAAQ,EACZ,OAAA,EAAK,QAAS,GAAM,CACd,IAAM,KACR,IACS,EAAQ,IACjB,EAAQ,KAAK,CAAK,EAClB,EAAQ,EAEZ,CAAC,EACG,EAAQ,GACV,EAAQ,KAAK,CAAK,EAEb,CACT,EACM,EAAc,CAAC,EAAM,IAAW,CACpC,MAAM,EAAU,EAAkB,CAAI,EAChC,EAAW,CAAA,EACjB,QAAS,EAAK,EAAG,EAAM,EAAG,EAAK,EAAQ,OAAQ,GAAO,EAAQ,GAAI,EAChE,EAAS,CAAE,EAAI,GAAO,MAAM,EAAQ,EAAK,EAAM,EAAQ,CAAE,CAAC,EAE5D,OAAO,CACT,EACA,OAAQ,EAAS,CACf,IAAK,GACH,GAAI,EAAI,EAAI,CAAC,IAAM,KACjB,MAEF,EAAY,EAEd,IAAK,GACH,GAAI,EAAE,EAAY,EAAM,SAAW,EAAO,CAAC,EAAE,OAAS,IAAM,EAAO,CAAC,EAAE,OAAS,GAC7E,MAGJ,IAAK,GAAG,CACN,MAAM,EAAO,EAAe,EAAQ,EAAM,MAAK,EAAG,QAAO,EACnD,EAAO,EAAe,EAAM,EAAI,MAAK,EAAG,QAAO,EAC/C,EAAe,EAAgB,EAAM,CAAI,EACzC,EAAS,EAAa,OAAS,EAAI,GAAO,OAAO,CAAY,EAAI,EACvE,IAAI,EAAoB,CAAA,EACpB,IACE,EACF,EAAY,EAEZ,EAAoB,EAAU,QAAO,GAGzC,IAAI,EAAe,EACf,EAAoB,EAiCxB,GAhCA,EAAY,EAAM,CAAM,EAAE,QAAS,GAAM,CACvC,IACA,MAAM,EAAY,GAAQ,CAAC,EACrB,EAAS,EACf,GAAqB,EAAE,OACvB,MAAM,EAAO,EAAoB,EAC7B,EACF,EAAW,EAAS,KAClB,EAAa,CAAM,EAAE,CAAC,EACtB,EAAa,CAAM,EAAE,CAAC,CACxC,EAAoB,EACK,EACT,EAAW,EAAS,KAClB,EAAkB,CAAM,EAAE,CAAC,EAC3B,EAAkB,CAAM,EAAE,CAAC,CAC7C,EAAoB,EAAS,KACX,EAAa,CAAM,EAAE,CAAC,EACtB,EAAa,CAAM,EAAE,CAAC,CACxC,EAAoB,EAAY,EAAS,KACvB,EAAkB,CAAI,EAAE,CAAC,EACzB,EAAkB,CAAI,EAAE,CAAC,CAC3C,GAEgB,EAAW,EAAS,KAClB,EAAa,CAAM,EAAE,CAAC,EACtB,EAAa,CAAM,EAAE,CAAC,CACxC,EAAoB,EACJ,EAAW,EAAW,EAAS,KAAK,EAAa,CAAI,EAAE,CAAC,EAAG,CAAW,EAAI,EAAS,KAAK,EAAa,CAAM,EAAE,CAAC,EAAG,CAAW,EAAI,IAChI,EAAU,KAAK,CAAQ,GAEzB,EAAU,KAAK,CAAQ,CACzB,CAAC,EACG,GAAa,EAAe,GAAK,CAAC,EAAsB,CAC1D,MAAM,EAAiB,EAAU,MAAM,CAAY,EAAE,QAAO,EAC5D,EAAU,OAAO,CAAY,EAC7B,EAAe,QACZ,GAAM,EAAU,KAAK,CAAC,CACvC,CACY,CACA,EAAY,EACZ,KACF,CACV,CACQ,KACF,CACA,IAAK,SAAU,CACb,MAAM,GAAU,EAAI,GAAM,IAC1B,GAAI,EAAO,CAAC,EAAE,CAAC,IAAM,KACnB,EAAY,MAEZ,QAAQ,EAAS,CACf,IAAK,GAQH,GAPA,EAAgB,EACZ,EACF,EAAW,EAAS,KAAK,EAAI,EAAO,CAAC,CAAC,EAAI,EAAS,KAAK,EAAI,CAAE,EAE9D,EAAW,EAAS,KAAK,EAAI,CAAE,EAEjC,EAAW,EAAS,KAAK,EAAI,CAAE,EAC3B,EAAO,CAAC,EAAE,EAAI,CAAC,IAAM,MAAQ,OAAO,EAAO,CAAC,EAAE,EAAI,CAAC,EAAM,IAAa,CACxE,EAAU,KAAK,CAAQ,EACvB,EAAU,KAAK,CAAQ,EACvB,KACF,CAEA,GADA,EAAY,EACR,EAAI,EAAO,CAAC,EAAE,OAAS,EAAG,CAC5B,MAAM,EAAI,EAAS,MAAM,EAAK,EAAQ,EAAI,EAAI,EAAQ,EAAG,EAAG,CAAC,EAC7D,GAAY,EACZ,GAAY,EACZ,KACF,CAEF,IAAK,GACH,GAAI,EAAO,CAAC,EAAE,EAAI,CAAC,IAAM,KACnB,EACF,GAAY,EAAS,KAAK,EAAI,CAAE,EAEhC,GAAY,EAAS,KAAK,EAAI,CAAE,EAElC,GAAY,EAAS,KAAK,EAAI,CAAW,EAAI,EAAS,KAAK,EAAe,CAAW,EAAI,IACzF,EAAU,KAAK,CAAQ,EACvB,EAAU,KAAK,CAAQ,EACvB,EAAY,OACP,CACL,MAAM,EAAI,EAAS,MAAM,EAAK,EAAQ,EAAI,EAAI,EAAQ,EAAG,EAAG,CAAC,EAC7D,GAAY,EACZ,GAAY,EACR,GAAK,EAAO,CAAC,EAAE,OAAS,IACtB,IACF,GAAY,EAAS,MAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAI,EAAS,KAAK,EAAG,CAAE,GAErE,GAAY,EAAS,MAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAW,EAAI,EAAS,KAAK,EAAe,CAAW,EAAI,IACrG,EAAU,KAAK,CAAQ,EACvB,EAAU,KAAK,CAAQ,EACvB,EAAY,GAEhB,CACA,KACd,CAEQ,EAAK,EACL,EAAK,EACL,KACF,CACA,QAAS,CACP,MAAM,EAAc,CAAC,EAAQ,EAAI,IAAO,CACtC,IAAI,EAAO,GACX,OAAQ,EAAM,CACZ,IAAK,WACH,EAAO,EAAS,KAAK,EAAI,KAAM,GAAG,EAAI,EAAS,KAAK,KAAM,EAAI,GAAG,EACjE,MACF,IAAK,WACH,EAAO,EAAS,KAAK,KAAM,EAAI,GAAG,EAAI,EAAS,KAAK,EAAI,KAAM,GAAG,EACjE,MACF,IAAK,WACH,EAAO,EAAS,KAAK,EAAI,CAAE,EAC3B,KACd,CACU,OAAO,CACT,EACA,GAAI,EAAO,CAAC,EAAE,CAAC,IAAM,KACnB,EAAY,MAEZ,QAAQ,EAAS,CACf,IAAK,GAQH,GAPA,EAAgB,EACZ,EACF,EAAW,EAAS,KAAK,EAAI,EAAO,CAAC,CAAC,EAAI,EAAS,KAAK,EAAI,CAAE,EAE9D,EAAW,EAAS,KAAK,EAAI,CAAE,EAEjC,EAAW,EAAS,KAAK,EAAI,CAAE,EAC3B,EAAO,CAAC,EAAE,EAAI,CAAC,IAAM,MAAQ,OAAO,EAAO,CAAC,EAAE,EAAI,CAAC,EAAM,IAAa,CACxE,EAAU,KAAK,CAAQ,EACvB,EAAU,KAAK,CAAQ,EACvB,KACF,CAEA,GADA,EAAY,EACR,EAAI,EAAO,CAAC,EAAE,OAAS,EAAG,CAC5B,MAAM,EAAI,EAAY,EAAO,EAAG,CAAC,EACjC,GAAY,EACZ,GAAY,EACZ,KACF,CAEF,IAAK,GACH,GAAI,EAAO,CAAC,EAAE,EAAI,CAAC,IAAM,KACnB,EACF,GAAY,EAAS,KAAK,EAAI,CAAE,EAEhC,GAAY,EAAS,KAAK,EAAI,CAAE,EAElC,GAAY,EAAS,KAAK,EAAI,CAAW,EAAI,EAAS,KAAK,EAAe,CAAW,EAAI,IACzF,EAAU,KAAK,CAAQ,EACvB,EAAU,KAAK,CAAQ,EACvB,EAAY,OACP,CACL,MAAM,EAAI,EAAY,EAAO,EAAG,CAAC,EACjC,GAAY,EACZ,GAAY,EACR,GAAK,EAAO,CAAC,EAAE,OAAS,IACtB,IACF,GAAY,EAAS,KAAK,EAAG,CAAE,GAEjC,GAAY,EAAS,KAAK,EAAG,CAAW,EAAI,EAAS,KAAK,EAAe,CAAW,EAAI,IACxF,EAAU,KAAK,CAAQ,EACvB,EAAU,KAAK,CAAQ,EACvB,EAAY,GAEhB,CACA,KACd,CAEQ,EAAK,EACL,EAAK,EACL,KACF,CACN,CACI,MAAO,CACL,UAAA,EACA,UAAA,EACA,GAAA,EACA,GAAA,EACA,UAAA,EACA,cAAA,EACA,SAAA,EACA,SAAA,CACN,CACE,CAQA,qBAAqB,EAAQ,EAAW,EAAG,EAAG,EAAW,CACvD,MAAM,EAAI,KAAK,EACf,GAAI,EAAO,CAAC,EAAE,CAAC,IAAM,MAAQ,EAAE,OAAO,QAAQ,oBAAsB,EAAO,CAAC,EAAE,SAAW,EAAG,CAC1F,IAAI,EAAQ,KAAK,YAAc,EAAE,OAAO,QAAQ,YAAc,EACxD,EAAQ,IACZ,EAAQ,GAEV,MAAM,EAAe,KAAK,QAAQ,iBAAiB,CACjD,UAAA,EACA,YAAa,EACb,EAAG,EAAI,EACP,MAAA,EACA,iBAAkB,EAC1B,CAAO,EACG,IAAiB,MACnB,KAAK,aAAa,IAAI,CAAY,CAEtC,CACF,CACF,CACA,MAAM,EAAsB,CAI1B,YAAY,EAAG,CACb,KAAK,EAAI,CACX,CAOA,eAAe,EAAG,EAAG,EAAG,EAAM,CAC5B,MAAM,EAAI,KAAK,EACT,EAAc,EAAE,OAAO,MAAM,CAAC,EAC9B,EAAY,EAAE,WAAW,iBAAiB,CAAC,EAWjD,OAViB,IAAI,EAAS,KAAK,CAAC,EACR,SAAS,CACnC,EAAG,EAAI,EAAY,OAAO,QAC1B,EAAG,EAAI,EAAY,OAAO,QAC1B,KAAM,EAAU,EAAM,CAAC,EACvB,WAAY,SACZ,SAAU,EAAY,OAAO,MAAM,SACnC,WAAY,EAAY,OAAO,MAAM,WACrC,UAAW,MAAM,QAAQ,EAAY,OAAO,MAAM,MAAM,EAAI,EAAY,OAAO,MAAM,OAAO,CAAC,EAAI,EAAY,OAAO,MAAM,MAChI,CAAK,CAEH,CAQA,iBAAiB,EAAQ,CAAE,SAAA,EAAU,WAAA,CAAU,EAAK,CAAA,EAAI,CACtD,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,IAAI,EAAW,EACf,OAAA,EAAO,QAAS,GAAS,CACvB,GAAI,IAAS,MAAQ,OAAO,EAAS,KAAe,IAAS,GAAI,OACjE,MAAM,EAAO,EAAS,aACpB,GAAG,CAAI,GACP,GAAY,OACZ,EACA,EACR,EACM,EAAW,KAAK,IAAI,EAAU,EAAK,KAAK,CAC1C,CAAC,EACM,CACT,CAoBA,kBAAkB,CAChB,MAAA,EACA,WAAA,EACA,OAAA,EACA,MAAA,EACA,OAAA,EACA,OAAA,EACA,KAAA,EACA,UAAA,EACA,MAAA,EACA,UAAA,CACJ,EAAK,CACD,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAQ,EAAS,MAAM,CAC3B,MAAO,iCACb,CAAK,EACD,GAAI,EAAU,KAAM,CAClB,MAAM,EAAI,KAAK,EAAO,CAAC,IAAI,EAAO,CAAC,MAAM,EAAM,CAAC,IAAI,EAAM,CAAC,MAAM,CAAM,IAAI,CAAM,GAC3E,EAAO,EAAS,SAAS,CAC7B,EAAA,EACA,OAAQ,EAAU,MAClB,YAAa,EAAU,MACvB,KAAM,OACN,cAAe,OACvB,CAAO,EACD,EAAK,KAAK,UAAU,IAAI,gCAAgC,EACxD,EAAM,IAAI,CAAI,CAChB,CACA,MAAM,EAAQ,IAAS,QAAU,EAAS,EAAI,EAAS,EACjD,EAAI,EAAM,OACV,EAAS,GAAU,EAAI,GAAK,EAAa,EACzC,EAAS,EAAS,SAAS,CAC/B,EAAG,EACH,EAAG,EACH,KAAM,IAAM,EAAI,EAAM,CAAC,EAAI,EAC3B,WAAY,IAAS,QAAU,QAAU,MACzC,SAAU,EAAM,SAChB,WAAY,EAAM,WAClB,WAAY,EAAM,WAClB,UAAA,EACA,iBAAkB,UAClB,SAAU,2BAChB,CAAK,EACD,GAAI,EAAI,EAAG,CACT,MAAM,EAAS,EAAO,KAAK,qBAAqB,OAAO,EACvD,QAAS,EAAK,EAAG,EAAK,EAAO,OAAQ,IACnC,EAAO,CAAE,EAAE,aAAa,IAAK,GAAG,CAAK,EAAE,EACvC,EAAO,CAAE,EAAE,aAAa,KAAM,IAAO,EAAI,IAAM,GAAG,CAAU,EAAE,CAElE,CACA,OAAA,EAAM,IAAI,CAAM,EACT,CACT,CACF,CACA,MAAM,GAAQ,KAAK,GAAK,IAClB,GAAQ,IAAM,KAAK,GACzB,SAAS,GAAS,EAAI,EAAI,EAAQ,EAAK,CACrC,MAAO,CACL,EAAG,EAAK,EAAS,KAAK,KAAK,EAAM,IAAM,EAAK,EAC5C,EAAG,EAAK,EAAS,KAAK,KAAK,EAAM,IAAM,EAAK,CAChD,CACA,CACA,MAAM,GAAM,GAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,GAC/B,SAAS,GAAwB,CAAE,GAAA,EAAI,GAAA,EAAI,IAAA,EAAK,KAAA,EAAM,GAAA,EAAI,GAAA,EAAI,EAAA,EAAG,QAAA,CAAO,EAAI,CAC1E,MAAM,EAAO,CAAC,EAAQ,IAAQ,GAAS,EAAI,EAAI,EAAQ,CAAG,EACpD,EAAS,EAAI,EAAO,GACpB,EAAQ,EAAI,EAAM,GAClB,EAAS,EAAK,EAAM,EAAK,CAAM,EAC/B,EAAO,EAAK,EAAM,EAAK,CAAM,EAC7B,EAAW,EAAU,EAAI,EAAS,IAAM,EAAI,EAC5C,EAAQ,EAAK,EAAM,CAAE,EACrB,EAAU,EAAK,EAAO,EAAG,CAAE,EAC3B,EAAU,EAAK,EAAM,CAAE,EACvB,EAAY,EAAK,EAAO,EAAG,CAAE,EAC7B,EAAO,EAAK,EAAK,EAAK,CAAK,EAC3B,EAAS,EAAK,EAAK,EAAK,CAAK,EAC7B,EAAU,EAAU,EAAI,EAAQ,IAAM,EAAI,EAC1C,EAAQ,EAAK,EAAK,CAAE,EACpB,EAAS,EAAK,EAAM,EAAG,CAAE,EACzB,EAAU,EAAK,EAAK,CAAE,EACtB,EAAW,EAAK,EAAM,EAAG,CAAE,EACjC,MAAO,CACL,IACA,GAAG,CAAM,EACT,IACA,EACA,EACA,EACA,EACA,EACA,GAAG,CAAI,EACP,IACA,GAAG,CAAK,EACR,GAAG,CAAO,EACV,IACA,GAAG,CAAM,EACT,IACA,GAAG,CAAK,EACR,GAAG,CAAI,EACP,IACA,EACA,EACA,EACA,EACA,EACA,GAAG,CAAM,EACT,IACA,GAAG,CAAO,EACV,GAAG,CAAQ,EACX,IACA,GAAG,CAAS,EACZ,IACA,GAAG,CAAO,EACV,GAAG,CAAM,EACT,GACJ,EAAI,KAAK,GAAG,CACZ,CACA,SAAS,GAAsB,CAAE,GAAA,EAAI,GAAA,EAAI,KAAA,EAAM,GAAA,EAAI,GAAA,EAAI,EAAA,EAAG,QAAA,CAAO,EAAI,CACnE,MAAM,EAAO,CAAC,EAAQ,IAAQ,GAAS,EAAI,EAAI,EAAQ,CAAG,EACpD,EAAS,EAAI,EAAO,GACpB,EAAS,EAAK,EAAM,EAAK,CAAM,EAC/B,EAAO,EAAK,EAAM,EAAK,CAAM,EAC7B,EAAW,EAAU,EAAI,EAAS,IAAM,EAAI,EAC5C,EAAQ,EAAK,EAAM,CAAE,EACrB,EAAU,EAAK,EAAO,EAAG,CAAE,EAC3B,EAAU,EAAK,EAAM,CAAE,EACvB,EAAY,EAAK,EAAO,EAAG,CAAE,EACnC,MAAO,CACL,IACA,GAAG,CAAM,EACT,IACA,EACA,EACA,EACA,EACA,EACA,GAAG,CAAI,EACP,IACA,GAAG,CAAK,EACR,GAAG,CAAO,EACV,IACA,GAAG,CAAE,IAAI,CAAE,GACX,IACA,GAAG,CAAS,EACZ,IACA,GAAG,CAAO,EACV,GAAG,CAAM,EACT,GACJ,EAAI,KAAK,GAAG,CACZ,CACA,SAAS,GAAsB,CAAE,GAAA,EAAI,GAAA,EAAI,IAAA,EAAK,KAAA,EAAM,GAAA,EAAI,GAAA,EAAI,QAAA,CAAO,EAAI,CACrE,MAAM,EAAO,CAAC,EAAQ,IAAQ,GAAS,EAAI,EAAI,EAAQ,CAAG,EACpD,EAAW,EAAU,IAAM,EAAI,EAC/B,EAAI,EAAK,EAAM,CAAE,EACjB,EAAI,EAAK,EAAM,CAAE,EACjB,EAAI,EAAK,EAAK,CAAE,EAChB,EAAM,EAAK,EAAK,CAAE,EACxB,MAAO,CACL,IACA,GAAG,CAAC,EACJ,IACA,EACA,EACA,EACA,EACA,EACA,GAAG,CAAC,EACJ,IACA,GAAG,CAAC,EACJ,IACA,EACA,EACA,EACA,EACA,EACA,GAAG,CAAG,EACN,GACJ,EAAI,KAAK,GAAG,CACZ,CACA,MAAM,EAAI,CAKR,YAAY,EAAG,EAAK,CAClB,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,UAAY,KAAK,EAAE,OAAO,MAAM,KACrC,KAAK,YAAc,KAAK,EAAE,OAAO,MAAM,WAAW,QAClD,KAAK,YAAc,KAAK,aAAe,KAAK,EAAE,OAAO,MAAM,WAAW,iBAAiB,QACvF,KAAK,aAAe,CAAC,CAAC,EACtB,KAAK,QAAU,EACf,KAAK,gBAAkB,KAAK,EAAE,OAAO,YAAY,IAAI,MAAM,OAC3D,KAAK,aAAe,EAAE,QAAQ,OAAO,SAAW,OAAS,EAAE,QAAQ,OAAO,OAAS,EAAE,QAAQ,OAC7F,KAAK,YAAc,KAAK,IAAI,EAAE,OAAO,UAAW,EAAE,OAAO,UAAU,EACnE,KAAK,QAAU,KAAK,YAAc,EAClC,KAAK,QAAU,EAAE,OAAO,UAAY,EAChC,EAAE,OAAO,MAAM,OAAS,YAC1B,KAAK,UAAY,IAEjB,KAAK,UAAY,KAAK,IACpB,EAAE,OAAO,YAAY,IAAI,SAAW,EAAE,OAAO,YAAY,IAAI,UACrE,EAEI,KAAK,aAAe,EAAE,OAAO,YAAY,IAAI,WAAa,KAAK,UAC/D,EAAE,QAAQ,WAAa,KAAK,YAAc,KAAO,EAAE,OAAO,OAAO,OAAU,EAAE,OAAO,MAAM,UAAU,QAA2C,EAAjC,EAAE,OAAO,MAAM,WAAW,MACxI,KAAK,YAAc,EAAE,OAAO,YAAY,IAAI,WAAW,SACvD,MAAM,EAAU,EAAE,OAAO,WAAW,MACpC,KAAK,mBAAqB,CACxB,SAAU,KAAK,YAAY,UAAY,EAAQ,SAC/C,WAAY,KAAK,YAAY,YAAc,EAAQ,WACnD,WAAY,KAAK,YAAY,YAAc,EAAQ,UACzD,EACI,KAAK,eAAiB,CAAA,EACtB,KAAK,sBAAwB,EAC7B,KAAK,mBAAqB,WAAW,KAAK,mBAAmB,QAAQ,GAAK,GAC1E,EAAE,QAAQ,wBAA0B,EACpC,KAAK,mBAAqB,KAAK,YAAY,MAAQ,KAAK,YAAc,YAClE,KAAK,oBAAsB,CAAC,EAAE,QAAQ,QACxC,KAAK,0BAAyB,EAEhC,KAAK,UAAY,EAAE,QAAQ,WAAa,SAAS,EAAE,OAAO,YAAY,IAAI,MAAM,KAAM,EAAE,EAAI,IAC5F,MAAM,EAAY,EAAE,OAAO,YAAY,IAAI,YACrC,EAAQ,EAAE,OAAO,UAAY,EAC7B,EAAQ,EAAE,OAAO,WAAa,EACpC,KAAK,WAAa,EAAQ,EAAQ,EAClC,KAAK,WAAa,EAAQ,EAAQ,EAClC,KAAK,gBAAkB,IAAI,EAAS,KAAK,CAAC,EAAE,MAAM,CAChD,MAAO,8BACP,UAAW,aAAa,KAAK,UAAU,KAAK,KAAK,UAAU,WAAW,CAAS,GACrF,CAAK,EACD,KAAK,KAAO,EACZ,KAAK,YAAc,CAAA,EACnB,KAAK,WAAa,CAAA,EAClB,KAAK,mBAAqB,CAAA,CAC5B,CASA,qBAAqB,EAAG,CACtB,IAAI,EAAI,EAAI,EACZ,MAAM,EAAI,KAAK,EACT,EAAQ,EAAE,WAAW,YAAY,CAAC,EAClC,EAAK,KAAK,YAAY,UAC5B,OAAI,OAAO,GAAO,WACT,EAAG,EAAO,CACf,YAAa,EACb,SAAU,GAAM,EAAK,EAAE,QAAQ,gBAAkB,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,EAC/F,OAAQ,EAAK,EAAE,QAAQ,eAAiB,KAAO,OAAS,EAAG,CAAC,EAC5D,EAAA,CACR,CAAO,EAEI,GAAS,KAAO,GAAK,GAAG,CAAK,EACtC,CAOA,sBAAsB,EAAG,CACvB,MAAM,EAAM,KAAK,qBAAqB,CAAC,EAEvC,OADY,MAAM,QAAQ,CAAG,EAAI,EAAM,GAAG,GAAc,EAAQ,GAAG,MAAM;CAAI,GAClE,IAAK,GAAM,GAAK,KAAO,GAAK,GAAG,CAAC,EAAE,CAC/C,CAOA,2BAA4B,CAC1B,MAAM,EAAI,KAAK,EACT,EAAU,IAAI,GAAsB,CAAC,EACrC,GAAY,EAAE,WAAW,aAAe,CAAA,GAAI,IAChD,CAAC,EAAG,IAAM,KAAK,sBAAsB,CAAC,CAC5C,EACU,EAAgB,EAAQ,iBAAiB,EAAS,KAAI,EAAI,CAC9D,SAAU,KAAK,mBAAmB,SAClC,WAAY,KAAK,mBAAmB,UAC1C,CAAK,EACD,KAAK,sBAAwB,EAAS,OAAO,CAAC,EAAG,IAAM,KAAK,IAAI,EAAG,EAAE,MAAM,EAAG,CAAC,EAC/E,KAAK,mBAAqB,KAAK,OAC5B,WAAW,KAAK,mBAAmB,QAAQ,GAAK,IAAM,IAC7D,EACI,MAAM,EAAK,KAAK,YAAY,UACtB,EAAc,KAAK,sBAAwB,KAAK,mBAChD,EAAK,GAAiB,EAAG,QAAU,IAAM,EAAG,KAAO,GAAK,GACxD,EAAK,EAAc,GAAK,EAAG,KAAO,GAAK,EACvC,EAAS,KAAK,IAClB,EAAE,QAAQ,WACV,EAAE,OAAO,UAAY,EAAI,EACzB,EAAE,OAAO,WAAa,EAAI,CAChC,EACI,EAAE,QAAQ,WAAa,KAAK,IAAI,EAAQ,KAAK,YAAc,GAAI,EAC/D,EAAE,QAAQ,wBAA0B,EACpC,MAAM,EAAY,EAAE,OAAO,MAAM,OAAS,OAAO,EAAE,OAAO,MAAM,MAAM,EAAI,GACpE,EAAqB,IAAc,IAAM,IAAc,OAC7D,KAAK,QAAU,EAAqB,EAAE,OAAO,WAAa,EAAI,EAAE,QAAQ,WAAa,CACvF,CAIA,KAAK,EAAQ,CACX,IAAI,EACJ,MAAM,EAAO,KACP,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAQ,EAAS,MAAM,CAC3B,MAAO,gBACb,CAAK,EACD,GAAI,EAAE,QAAQ,OAAQ,OAAO,EAC7B,IAAI,EAAQ,EACZ,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,GAAS,EAAQ,UAAU,EAAO,CAAC,CAAC,EAEtC,MAAM,EAAiB,CAAA,EACjB,EAAW,EAAS,MAAK,EAC3B,IAAU,IACZ,EAAQ,MAEV,EAAO,QAAS,GAAM,CACpB,KAAK,KAAO,KAAK,IAAI,KAAK,KAAM,CAAC,CACnC,CAAC,EACG,EAAE,OAAO,MAAM,CAAC,EAAE,MACpB,KAAK,KAAO,EAAE,OAAO,MAAM,CAAC,EAAE,KAE5B,EAAE,OAAO,KAAK,WAAa,QAAU,KAAK,YAAc,aAC1D,KAAK,kBAAkB,CAAK,EAE9B,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAQ,KAAK,UAAY,EAAQ,UAAU,EAAO,CAAC,CAAC,EAAI,EAC9D,EAAe,KAAK,CAAK,EACrB,KAAK,YAAc,aACrB,EAAe,CAAC,EAAI,KAAK,UAAY,EAAO,OAC5C,KAAK,WAAW,KACd,EAAE,QAAQ,WAAa,EAAO,CAAC,GAAK,KAAK,MAAQ,EAC3D,GAEQ,KAAK,WAAW,KAAK,EAAE,QAAQ,UAAU,CAE7C,CACA,MAAM,IAAgB,EAAK,KAAK,IAAI,kBAAoB,KAAO,OAAS,EAAG,SAAQ,KAAQ,GAC3F,GAAI,EAAE,QAAQ,aAAe,CAAC,EAAa,CACzC,IAAI,EAAY,EAChB,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,cAAc,OAAQ,IAClD,GAAa,EAAQ,UAAU,EAAE,QAAQ,cAAc,CAAC,CAAC,EAE3D,IAAI,EACJ,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,cAAc,OAAQ,IAClD,EAAgB,KAAK,UAAY,EAAQ,UAAU,EAAE,QAAQ,cAAc,CAAC,CAAC,EAAI,EACjF,KAAK,mBAAmB,KAAK,CAAa,CAE9C,CAIA,GAHI,KAAK,UAAY,IACnB,KAAK,UAAY,GAEf,KAAK,YAAc,QAAS,CAC9B,MAAM,EAAS,EAAS,WAAW,KAAK,SAAS,EACjD,EAAO,KAAK,CACV,GAAI,KAAK,QACT,GAAI,KAAK,QACT,KAAM,EAAE,OAAO,YAAY,IAAI,MAAM,WAAa,EAAE,OAAO,YAAY,IAAI,MAAM,WAAa,aACtG,CAAO,EACD,EAAS,IAAI,CAAM,CACrB,CACA,MAAM,EAAM,EAAK,SAAS,EAAgB,CAAM,EAShD,GARA,KAAK,YAAY,QAAS,GAAM,CAC9B,EAAI,IAAI,CAAC,CACX,CAAC,EACD,EAAS,KAAK,CACZ,UAAW,aAAa,KAAK,UAAU,KAAK,KAAK,UAAU,WAAW,EAAE,OAAO,YAAY,IAAI,WAAW,GAChH,CAAK,EACD,EAAS,IAAI,CAAG,EAChB,EAAM,IAAI,CAAQ,EACd,KAAK,gBAAgB,KAAM,CAC7B,MAAM,EAAqB,KAAK,aAAe,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,aAAe,KAAK,QAAU,EACxG,EAAa,KAAK,sBACtB,KAAK,gBACL,KAAK,gBACL,CACE,WAAY,KAAK,UACjB,QAAS,KAAK,QACd,QAAS,KAAK,QACd,QAAS,EAAqB,EAAI,KAAK,gBAAgB,IACjE,CACA,EACM,GAAI,EAAoB,CACtB,MAAM,EAAa,KAAK,gBAAgB,KACxC,EAAW,MAAM,WAAa,yBAC9B,WAAW,IAAM,CACf,EAAW,MAAM,QAAU,GAC7B,EAAG,KAAK,OAAO,CACjB,CACA,EAAM,IAAI,CAAU,CACtB,CACA,OAAI,EAAE,OAAO,KAAK,WAAa,SAAW,KAAK,YAAc,aAC3D,KAAK,kBAAkB,CAAK,EAEvB,CACT,CAMA,SAAS,EAAgB,EAAQ,CAC/B,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAO,IAAI,GAAK,KAAK,CAAC,EACtB,EAAI,EAAS,MAAM,CACvB,MAAO,mBACb,CAAK,EACD,IAAI,EAAa,KAAK,aAClB,EAAiB,KAAK,aACtB,EAAW,KAAK,aAChB,EAAe,KAAK,aACxB,KAAK,YAAc,EAAE,OAAO,OAAO,KAAO,EAAE,OAAO,OAAO,MAAQ,EAClE,MAAM,IAAgB,EAAK,KAAK,IAAI,kBAAoB,KAAO,OAAS,EAAG,SAAQ,KAAQ,GAC3F,QAAS,EAAI,EAAG,EAAI,EAAe,OAAQ,IAAK,CAC9C,MAAM,EAAW,EAAS,MAAM,CAC9B,MAAO,0CACP,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAC,CAAC,EAC5D,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EACD,EAAE,IAAI,CAAQ,EACd,EAAa,EACb,EAAiB,EACjB,EAAW,EAAa,EAAe,CAAC,EACxC,EAAe,EAAiB,KAAK,mBAAmB,CAAC,EACzD,MAAM,EAAQ,EAAW,EAAa,KAAK,UAAY,EAAW,EAAa,EAAW,EACpF,EAAW,EAAK,SAAS,CAC7B,aAAc,EACd,KAAM,KAAK,WAAW,CAAC,EACvB,MAAO,EAAO,CAAC,CACvB,CAAO,EACK,EAAY,EAAc,KAAK,IAAI,gBAAgB,kBAAkB,EAAG,CAAC,EAAI,KAC7E,EAAO,GAAa,KAAK,eAAe,EAAgB,CAAY,EACpE,EAAS,EAAS,SAAS,CAC/B,EAAG,EAOH,OAAQ,MAAM,QAAQ,KAAK,YAAY,GAAK,EAAK,KAAK,aAAa,CAAC,IAAM,KAAO,EAAK,KAAK,aAAa,EAAI,KAAK,aAAa,MAAM,EAAI,KAAK,aAC7I,YAAa,EACb,KAAM,EACN,YAAa,EAAE,OAAO,KAAK,QAC3B,QAAS,kCAAkC,KAAK,UAAU,YAAW,CAAE,UAAU,CAAC,EAC1F,CAAO,EAMD,GALA,EAAO,KAAK,CACV,MAAO,EACP,EAAG,CACX,CAAO,EACD,EAAQ,mBAAmB,EAAQ,EAAG,CAAC,EACnC,EAAE,OAAO,MAAM,WAAW,QAAS,CACrC,MAAM,EAAS,EAAE,OAAO,MAAM,WAC9B,EAAQ,WAAW,EAAQ,EAAQ,CAAC,CACtC,CACA,KAAK,aAAa,EAAQ,KAAK,eAAe,EAC9C,IAAI,EAAgB,CAClB,EAAG,EACH,EAAG,CACX,EACM,MAAM,GAAY,EAAa,EAAQ,GAAK,KAAK,UACjD,IAAI,EAAY,CAAE,EAAG,KAAK,QAAS,EAAG,KAAK,OAAO,EAC9C,KAAK,YAAc,OAAS,KAAK,YAAc,aACjD,EAAgB,EAAQ,iBACtB,KAAK,QACL,KAAK,QACL,EAAE,QAAQ,WAAa,KAAO,EAAE,OAAO,YAAY,IAAI,WAAW,OAClE,CACV,EACQ,EAAY,EAAQ,iBAClB,KAAK,QACL,KAAK,QACL,EAAE,QAAQ,WAAa,EACvB,CACV,GACiB,KAAK,YAAc,UAC5B,EAAgB,EAAQ,iBACtB,KAAK,QACL,KAAK,SACJ,EAAE,QAAQ,WAAa,KAAK,WAAa,EAAI,EAAE,OAAO,YAAY,IAAI,WAAW,OAClF,CACV,EACQ,EAAY,EAAQ,iBAClB,KAAK,QACL,KAAK,SACJ,EAAE,QAAQ,WAAa,KAAK,WAAa,EAC1C,CACV,GAEM,EAAS,SAAS,EAAO,KAAM,CAC7B,aAAc,EACd,kBAAmB,EACnB,mBAAoB,KAAK,YACzB,aAAc,EAAO,CAAC,EACtB,UAAW,EAAU,EACrB,UAAW,EAAU,CAC7B,CAAO,EACD,EAAS,IAAI,CAAM,EACnB,IAAI,EAAM,EASV,GARI,KAAK,aAAe,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,aACvD,EAAM,EAAQ,KAAK,UAAY,EAAE,OAAO,MAAM,WAAW,MACrD,IAAQ,IAAG,EAAM,GACrB,KAAK,QAAU,EAAM,KAAK,QAC1B,KAAK,aAAa,KAAK,KAAK,OAAO,GAEnC,KAAK,aAAa,KAAK,CAAC,EAEtB,GAAe,EAAW,CAC5B,MAAM,EAAU,KAAK,WAAW,CAC9B,GAAI,KACJ,WAAA,EACA,MAAA,EACA,KAAM,KAAK,WAAW,CAAC,CACjC,CAAS,EACK,EAAa,KAAK,IAAI,gBAAgB,SAAQ,EAC9C,EAAa,KAAK,IAAI,WAC5B,EAAO,KAAK,aAAa,gBAAiB,CAAO,EACjD,MAAM,EAAc,EAAO,QAAQ,CAAU,EAAE,KAAK,EAAS,UAAU,EAAE,KAAK,CAAE,eAAgB,KAAK,WAAW,CAAE,EAC9G,GAAe,OAAO,EAAY,OAAU,WAC9C,EAAY,MAAM,IAAM,EAAW,mBAAmB,CAAM,CAAC,EAE7D,EAAW,mBAAmB,CAAM,CAExC,MAAW,KAAK,aAAe,EAAE,QAAQ,YACvC,KAAK,aAAa,EAAQ,CACxB,KAAM,KAAK,WAAW,CAAC,EACvB,SAAA,EACA,WAAA,EACA,eAAA,EACA,aAAA,EACA,mBAAoB,GACpB,EAAA,EACA,aAAc,KAAK,aACnB,mBAAoB,GACpB,IAAK,EAAE,OAAO,MAAM,WAAW,iBAAiB,KAC1D,CAAS,EAED,KAAK,aAAa,EAAQ,CACxB,KAAM,KAAK,WAAW,CAAC,EACvB,SAAA,EACA,WAAA,EACA,EAAA,EACA,WAAY,EAAe,OAAS,EACpC,aAAc,KAAK,aACnB,IAAA,CACV,CAAS,EAKH,GAHI,EAAE,OAAO,YAAY,IAAI,eAAiB,KAAK,YAAc,aAC/D,EAAO,KAAK,iBAAiB,UAAW,KAAK,WAAW,KAAK,KAAM,CAAC,CAAC,EAEnE,OAAO,EAAE,SAAS,mBAAmB,CAAC,EAAM,KAAe,EAAE,SAAS,mBAAmB,CAAC,EAAE,QAAQ,CAAC,EAAI,GAC3G,GAAI,KAAK,aAAe,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,aAAe,KAAK,QAAU,EAAG,CACxF,MAAM,EAAQ,KACR,EAAK,EACX,WAAW,IAAM,EAAM,WAAW,CAAE,EAAG,KAAK,OAAO,CACrD,MACE,KAAK,WAAW,CAAC,EAGrB,GAAI,EAAE,OAAO,WAAW,QAAS,CAC/B,MAAM,EAAO,EAAc,EACrB,EAAO,EAAc,EAC3B,IAAI,EAAO,IAAM,EAAQ,KAAK,UAAY,IAC1C,GAAI,IAAU,GAAK,EAAE,OAAO,YAAY,IAAI,WAAW,oBAAsB,EAAe,CAAC,EAAG,CAC9F,MAAM,EAAY,EAAE,OAAO,WAAW,UAClC,IAAc,SAChB,EAAO,EAAU,EAAE,QAAQ,cAAc,CAAC,EAAE,CAAC,EAAG,CAC9C,YAAa,EACb,EAAA,CACd,CAAa,GAEH,MAAM,EAAY,EAAE,QAAQ,WAAW,MAAM,OAAO,CAAC,EAC/C,EAAiB,EAAS,MAAM,CACpC,MAAO,uBACnB,CAAW,EACK,EAAa,EAAS,SAAS,CACnC,EAAG,EACH,EAAG,EACH,KAAA,EACA,WAAY,SACZ,SAAU,EAAE,OAAO,WAAW,MAAM,SACpC,WAAY,EAAE,OAAO,WAAW,MAAM,WACtC,WAAY,EAAE,OAAO,WAAW,MAAM,WACtC,UAAA,CACZ,CAAW,EAED,GADA,EAAe,IAAI,CAAU,EACzB,EAAE,OAAO,WAAW,WAAW,QAAS,CAC1C,MAAM,EAAa,EAAE,OAAO,WAAW,WACvC,EAAQ,WAAW,EAAY,CAAU,CAC3C,CACA,EAAW,KAAK,UAAU,IAAI,sBAAsB,EAChD,EAAE,OAAO,MAAM,WAAW,SAAW,EAAE,QAAQ,UAAY,KAC7D,EAAW,KAAK,UAAU,IAAI,4BAA4B,EAC1D,EAAW,KAAK,MAAM,eAAiB,EAAE,OAAO,MAAM,WAAW,MAAQ,IAAM,KAEjF,KAAK,YAAY,KAAK,CAAc,CACtC,CACF,CACA,GAAI,KAAK,oBAAsB,IAAU,EAAG,CAC1C,MAAM,EAAQ,KAAK,sBAAsB,CAAC,EAC1C,GAAI,EAAM,KAAM,GAAM,IAAM,EAAE,EAAG,CAC/B,MAAM,EAAS,EAAQ,iBACrB,KAAK,QACL,KAAK,QACL,EAAE,QAAQ,WACV,CACZ,EACgB,EAAQ,EAAQ,iBACpB,KAAK,QACL,KAAK,QACL,EAAE,QAAQ,YAAc,KAAK,YAAY,UAAU,KAAO,GAC1D,CACZ,EACgB,EAAU,EAAM,GAAK,KAAK,QAC1B,EAAa,EAAU,EAAM,GAAK,KAAK,YAAY,UAAU,QAAU,GAAK,EAAM,GAAK,KAAK,YAAY,UAAU,QAAU,GAClI,KAAK,eAAe,KAAK,CACvB,MAAA,EACA,OAAA,EACA,MAAA,EACA,KAAM,EAAU,QAAU,OAC1B,OAAQ,EAAa,WAAW,KAAK,YAAY,SAAW,CAAC,EAC7D,OAAQ,EAAM,EAAI,WAAW,KAAK,YAAY,SAAW,CAAC,EAC1D,eAAgB,KAAK,YAAY,UAAU,OAAS,EAAE,QAAQ,OAAO,CAAC,EACtE,UAAW,KAAK,YAAY,OAAS,EAAE,OAAO,MAAM,SAChE,CAAW,CACH,CACF,CACF,CACA,GAAI,KAAK,oBAAsB,KAAK,eAAe,OAAQ,CACzD,KAAK,oBAAmB,EACxB,MAAM,EAAkB,EAAY,UAAS,IAAO,GAAe,KAAK,aAAe,EAAE,QAAQ,aAAe,KAAK,aAAe,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,aACrK,KAAK,eAAe,QAAS,GAAQ,CACnC,MAAM,EAAQ,IAAI,GAAsB,CAAC,EAAE,kBAAkB,CAC3D,MAAO,EAAI,MACX,WAAY,KAAK,mBACjB,OAAQ,EAAI,OACZ,MAAO,EAAI,MACX,OAAQ,EAAI,OACZ,OAAQ,EAAI,OACZ,KAAM,EAAI,KACV,UAAW,CACT,KAAM,KAAK,YAAY,UAAU,KACjC,MAAO,KAAK,YAAY,UAAU,MAClC,MAAO,EAAI,cACvB,EACU,MAAO,KAAK,mBACZ,UAAW,EAAI,SACzB,CAAS,EACG,IACF,EAAM,KAAK,UAAU,IAAI,2BAA2B,EACpD,EAAE,QAAQ,gBAAgB,KAAK,CAAE,GAAI,EAAM,IAAI,CAAE,GAEnD,EAAE,IAAI,CAAK,CACb,CAAC,CACH,CACA,OAAO,CACT,CAMA,qBAAsB,CACpB,MAAM,EAAI,KAAK,EACT,EAAa,KAAK,sBAAwB,KAAK,mBAAqB,EACpE,EAAO,KAAK,QAAU,EAAE,QAAQ,WAAa,EAAE,QAAQ,wBAC7D,CAAC,OAAQ,OAAO,EAAE,QAAS,GAAS,CAClC,MAAM,EAAQ,KAAK,eAAe,OAAQ,GAAM,EAAE,OAAS,CAAI,EAAE,KAAK,CAAC,EAAG,IAAM,EAAE,OAAS,EAAE,MAAM,EACnG,EAAM,QAAS,GAAM,CACnB,EAAE,OAAS,EAAE,MACf,CAAC,EACD,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAC5B,EAAM,CAAC,EAAE,OAAS,EAAM,EAAI,CAAC,EAAE,OAAS,IAC1C,EAAM,CAAC,EAAE,OAAS,EAAM,EAAI,CAAC,EAAE,OAAS,GAG5C,MAAM,EAAO,EAAM,EAAM,OAAS,CAAC,EAC7B,EAAW,EAAO,EAAK,OAAS,EAAO,EAC7C,GAAI,EAAW,EACb,QAAS,EAAI,EAAM,OAAS,EAAG,GAAK,EAAG,IACrC,EAAM,CAAC,EAAE,QAAU,EACf,EAAI,EAAM,OAAS,GAAK,EAAM,EAAI,CAAC,EAAE,OAAS,EAAM,CAAC,EAAE,OAAS,IAClE,EAAM,CAAC,EAAE,OAAS,EAAM,EAAI,CAAC,EAAE,OAAS,EAIhD,CAAC,CACH,CAKA,aAAa,EAAQ,EAAY,CAC/B,MAAM,EAAW,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EAC9C,EAAO,KAAK,iBACV,aACA,EAAS,eAAe,KAAK,EAAU,CAAM,CACnD,EACI,EAAO,KAAK,iBACV,aACA,EAAS,eAAe,KAAK,EAAU,CAAM,CACnD,EACI,EAAO,KAAK,iBACV,aACA,KAAK,sBAAsB,KAAK,IAAI,CAC1C,EACI,EAAO,KAAK,iBACV,YACA,EAAS,cAAc,KAAK,EAAU,CAAM,CAClD,EACS,KAAK,gBAAgB,MAAM,aAC9B,EAAO,KAAK,iBACV,aACA,KAAK,qBAAqB,KAAK,KAAM,EAAO,KAAM,CAAU,CACpE,EACM,EAAO,KAAK,iBACV,YACA,KAAK,qBAAqB,KAAK,KAAM,EAAO,KAAM,CAAU,CACpE,EAEE,CAMA,aAAa,EAAI,EAAM,CACrB,MAAM,EAAI,KAAK,EACT,EAAK,KACX,IAAI,EAAQ,EAAK,SAAW,EAAK,WAAa,KAAK,UAAY,EAAK,SAAW,EAAK,WAAa,EAAK,SAAW,EAAK,WAClH,EAAY,EACZ,EAAiB,EAAK,WAC1B,MAAM,EAAe,EAAK,WACtB,EAAK,iBAAmB,QAAU,EAAK,eAAiB,SAC1D,EAAiB,EAAK,aACtB,EAAY,EAAK,aAAe,EAAK,eAAiB,KAAK,UAAY,EAAK,aAAe,EAAK,eAAiB,EAAK,aAAe,EAAK,gBAExI,EAAK,IAAM,EAAE,OAAO,OAAO,OAAS,IAClC,EAAQ,EAAe,KAAK,UAC9B,EAAK,SAAW,EAAK,UAAY,EAAQ,GAChC,EAAQ,EAAe,KAAK,YACrC,EAAK,SAAW,EAAK,UAAY,KAAK,WAAa,EAAQ,MAG3D,IAAU,KAAK,YAAW,EAAQ,KAAK,UAAY,KACvD,EAAG,WAAW,EAAI,EAAgB,EAAc,EAAO,EAAW,CAAI,CACxE,CASA,WAAW,EAAI,EAAgB,EAAc,EAAO,EAAW,EAAM,CACnE,MAAM,EAAK,KACL,EAAI,KAAK,EACT,EAAa,IAAI,GAAW,KAAK,CAAC,EAClC,EAAO,EAAK,KAClB,IAAI,GACA,MAAM,CAAc,GAAK,MAAM,CAAS,KAC1C,EAAiB,EACjB,EAAY,EACZ,EAAK,IAAM,GAEb,IAAI,EAAY,EACZ,EAAa,EACjB,MAAM,EAAY,EAAiB,EAAe,KAAK,UAAY,EAAiB,EAAe,EAAiB,EAChH,EAAE,QAAQ,aAAe,EAAK,oBAC5B,EAAK,eACP,EAAO,EAAG,WAAW,CACnB,GAAA,EACA,WAAY,EAAK,eACjB,MAAO,EAAK,aAAe,EAAK,eAAiB,KAAK,UAAY,EAAK,aAAe,EAAK,eAAiB,EAAK,aAAe,EAAK,eACrI,KAAA,CACV,CAAS,EACD,EAAG,KAAK,CAAE,EAAG,CAAI,CAAE,GAGnB,EAAK,MAAQ,EACf,EAAG,QAAQ,EAAK,IAAK,EAAK,aAAa,EAAK,CAAC,CAAC,EAAE,MAE9C,UAAW,EACL,EAAG,YAAc,OAAS,EAAG,YAAc,SAAW,EAAG,YAAc,cACzE,KAAK,QACH,EAAE,OAAO,MAAM,WAAW,iBAAiB,KACzD,EAAc,KAAK,CACL,eAAgB,EAAG,WACjC,CAAa,EAEC,EAAK,IAAM,EAAE,OAAO,OAAO,OAAS,GACtC,EAAW,mBAAmB,CAAE,CAEpC,CACR,EAAQ,OAAQ,GAAQ,CAChB,EAAY,GAAa,EAAQ,GAAa,EAC1C,EAAK,qBACP,EAAY,GAAa,EAAQ,GAAa,EAC9C,EAAa,EAAiB,GAAa,GAAgB,EAAiB,IAAc,GAE5F,EAAO,EAAG,WAAW,CACnB,GAAA,EACA,WAAA,EACA,MAAO,EACP,KAAA,CACV,CAAS,EACD,EAAG,KAAK,aAAa,gBAAiB,CAAI,EAC1C,EAAG,KAAK,CACN,EAAG,CACb,CAAS,CACH,CAAC,GAED,EAAO,EAAG,WAAW,CACnB,GAAA,EACA,WAAA,EACA,MAAA,EACA,KAAA,CACR,CAAO,EACI,EAAK,UACR,EAAE,QAAQ,eAAiB,IAE7B,EAAG,KAAK,aAAa,gBAAiB,CAAI,EAC1C,EAAG,KAAK,CACN,EAAG,EACH,eAAgB,EAAG,WAC3B,CAAO,EAEL,CAIA,WAAW,EAAG,CACZ,MAAM,EAAI,KAAK,EACT,EAAK,KACL,EAAO,EAAG,WAAW,CAAC,GAAK,EAAE,OAAO,YAAY,IAAI,cAAgB,EAAI,GACxE,EAAS,EAAE,IAAI,MAAM,QACzB,eAAe,EAAG,UAAU,YAAW,CAAE,UAAU,CAAC,EAC1D,EACI,GAAI,EAAO,KAAK,iBAAiB,IAAM,OAAQ,CAC7C,EAAO,KAAK,CACV,kBAAmB,OAC3B,CAAO,EACD,KAAK,sBAAqB,EAC1B,MAAM,EAAW,EAAO,KAAK,eAAe,EAC5C,EAAO,KAAK,CACV,EAAG,CACX,CAAO,EACD,MACF,KAAO,CACL,MAAM,EAAS,EAAE,IAAI,OAAO,uBAAuB,qBAAqB,EACxE,MAAM,UAAU,QAAQ,KAAK,EAAS,GAAa,CACjD,EAAS,aAAa,kBAAmB,OAAO,EAChD,MAAM,EAAW,EAAS,aAAa,eAAe,EAClD,GACF,EAAS,aAAa,IAAK,CAAQ,CAEvC,CAAC,EACD,EAAE,SAAS,uBAAyB,EACpC,EAAO,KAAK,kBAAmB,MAAM,CACvC,CACA,MAAM,EAAa,SAAS,EAAO,KAAK,iBAAiB,EAAG,EAAE,EACxD,EAAQ,SAAS,EAAO,KAAK,YAAY,EAAG,EAAE,EAC9C,EAAO,EAAG,WAAW,CACzB,GAAA,EACA,WAAA,EACA,MAAA,EACA,KAAA,CACN,CAAK,EACG,IAAU,KACd,EAAO,KAAK,CAAI,CAClB,CAKA,eAAe,EAAgB,EAAc,CAC3C,IAAI,EAAO,GACX,OAAI,KAAK,aAAe,KAAK,EAAE,QAAQ,cACrC,EAAO,KAAK,WAAW,CACrB,GAAI,KACJ,WAAY,EACZ,MAAO,EAAe,EAEtB,KAAM,KAAK,IACnB,CAAO,GAEI,CACT,CAEA,WAAW,CAAE,GAAA,EAAI,WAAA,EAAY,MAAA,EAAO,KAAA,CAAI,EAAI,CAC1C,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,IAAI,EAAW,EACX,EAAS,EAAQ,EACjB,KAAK,KAAK,CAAM,GAAK,KAAK,UAAY,KAAK,EAAE,OAAO,YAAY,IAAI,WAAa,KAAK,YACxF,EAAS,KAAK,UAAY,KAAK,EAAE,OAAO,YAAY,IAAI,WAAa,KAAK,UAAY,KAExF,IAAI,EAAU,EAAS,EACvB,MAAM,EAAc,EAAG,YAAc,OAAS,EAAG,YAAc,SAAW,EAAG,YAAc,YACrF,EAAU,EAAE,OAAO,YAAY,IAAI,QACzC,GAAI,GAAe,EAAU,GAAK,EAAU,EAAG,CAC7C,MAAM,EAAO,EAAG,YAAc,SAAW,EAAO,EAAG,WAAa,EAAI,EAC9D,EAAS,EAAO,EAAI,EAAU,GAAQ,IAAM,KAAK,IAAM,EACvD,EAAQ,KAAK,IAAI,EAAS,EAAG,KAAK,IAAI,EAAG,EAAU,EAAI,EAAG,CAAC,EACjE,GAAY,EACZ,GAAW,EAAI,CACjB,CACA,EAAS,EAAW,EAChB,KAAK,KAAK,CAAM,EAAI,KAAK,YAAW,GAAU,KAAK,WACvD,MAAM,EAAe,KAAK,IAAM,EAAW,IAAM,IAC3C,EAAe,EAAE,OAAO,YAAY,IAAI,aAC9C,GAAI,EAAe,GAAK,EAAa,CACnC,MAAM,EAAc,KAAK,oBAAoB,CAC3C,GAAA,EACA,SAAA,EACA,QAAA,EACA,KAAA,EACA,aAAA,CACR,CAAO,EACD,GAAI,EAAa,OAAO,CAC1B,CACA,MAAM,EAAa,KAAK,IAAM,EAAS,IAAM,IACvC,EAAK,EAAG,QAAU,EAAO,KAAK,IAAI,CAAY,EAC9C,EAAK,EAAG,QAAU,EAAO,KAAK,IAAI,CAAY,EAC9C,EAAK,EAAG,QAAU,EAAO,KAAK,IAAI,CAAU,EAC5C,EAAK,EAAG,QAAU,EAAO,KAAK,IAAI,CAAU,EAC5C,EAAa,EAAQ,iBACzB,EAAG,QACH,EAAG,QACH,EAAG,UACH,CACN,EACU,EAAW,EAAQ,iBACvB,EAAG,QACH,EAAG,QACH,EAAG,UACH,CACN,EACU,EAAW,EAAU,IAAM,EAAI,EAC/B,EAAgB,CAAC,IAAK,EAAI,EAAI,IAAK,EAAM,EAAM,EAAG,EAAU,EAAG,EAAI,CAAE,EAC3E,OAAI,EAAG,YAAc,QACnB,EAAO,CACL,GAAG,EACH,IACA,EAAW,EACX,EAAW,EACX,IACA,EAAG,UACH,EAAG,UACH,EACA,EACA,EACA,EAAS,EACT,EAAS,EACT,IACA,EACA,EACA,GACR,EAAQ,KAAK,GAAG,EACD,EAAG,YAAc,OAAS,EAAG,YAAc,YACpD,EAAO,CAAC,GAAG,EAAe,IAAK,EAAG,QAAS,EAAG,QAAS,IAAK,EAAI,CAAE,EAAE,KAClE,GACR,EAEM,EAAO,CAAC,GAAG,CAAa,EAAE,KAAK,GAAG,EAE7B,EAAS,iBAAiB,EAAM,KAAK,YAAc,CAAC,CAC7D,CAkBA,oBAAoB,CAAE,GAAA,EAAI,SAAA,EAAU,QAAA,EAAS,KAAA,EAAM,aAAA,CAAY,EAAI,CACjE,GAAI,EAAE,EAAU,GAAI,OAAO,KAC3B,MAAM,EAAO,KAAK,GAAK,IACjB,EAAK,EAAG,QACR,EAAK,EAAG,QACR,EAAU,EAAG,YAAc,QAC3B,EAAO,EACP,EAAM,EAAU,EAAG,UAAY,EAC/B,EAAU,EAAU,EAC1B,IAAI,EAAI,EAQR,GAPA,EAAI,KAAK,IAAI,EAAG,EAAU,EAAO,CAAC,EAC9B,GACF,EAAI,KAAK,IAAI,EAAG,EAAU,EAAM,CAAC,EACjC,EAAI,KAAK,IAAI,GAAI,EAAO,GAAO,CAAC,GAEhC,EAAI,KAAK,IAAI,EAAG,EAAO,CAAC,EAEtB,EAAE,EAAI,IAAM,OAAO,KACvB,MAAM,EAAK,EACL,EAAK,EAAW,EACtB,OAAI,EACK,GAAwB,CAAE,GAAA,EAAI,GAAA,EAAI,IAAA,EAAK,KAAA,EAAM,GAAA,EAAI,GAAA,EAAI,EAAA,EAAG,QAAA,CAAO,CAAE,EAEnE,GAAsB,CAAE,GAAA,EAAI,GAAA,EAAI,KAAA,EAAM,GAAA,EAAI,GAAA,EAAI,EAAA,EAAG,QAAA,CAAO,CAAE,CACnE,CAIA,kBAAkB,EAAQ,CACxB,MAAM,EAAI,KAAK,EACT,EAAQ,IAAI,GAAO,KAAK,CAAC,EACzB,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAU,IAAI,GAAsB,KAAK,CAAC,EAC1C,EAAW,EAAS,MAAK,EACzB,EAAS,EAAS,MAAK,EACvB,EAAS,EAAM,UAAU,EAAG,KAAK,KAAK,KAAK,IAAI,EAAG,CAAC,EACnD,EAAS,EAAO,OAAO,QAAO,EAC9B,EAAM,EAAO,OAAO,OAC1B,KAAK,KAAO,EAAO,QACnB,IAAI,EAAa,EAAE,QAAQ,WAC3B,MAAM,EAAO,GAAc,EAAM,GACjC,QAAS,EAAI,EAAG,EAAI,EAAM,EAAG,IAAK,CAChC,MAAM,EAAS,EAAS,WAAW,CAAU,EAQ7C,GAPA,EAAO,KAAK,CACV,GAAI,KAAK,QACT,GAAI,KAAK,QACT,KAAM,OACN,eAAgB,EAAE,OAAO,YAAY,UAAU,MAAM,YACrD,OAAQ,EAAE,OAAO,YAAY,UAAU,MAAM,WACrD,CAAO,EACG,EAAE,OAAO,MAAM,CAAC,EAAE,KAAM,CAC1B,MAAM,EAAS,EAAQ,eACrB,KAAK,QACL,KAAK,QAAU,EAAa,SAAS,EAAE,OAAO,MAAM,CAAC,EAAE,OAAO,MAAM,SAAU,EAAE,EAAI,EACpF,EACA,EAAO,CAAC,CAClB,EACQ,EAAO,IAAI,CAAM,CACnB,CACA,EAAS,IAAI,CAAM,EACnB,EAAa,EAAa,CAC5B,CACA,KAAK,WAAW,CAAM,EACtB,EAAO,IAAI,CAAQ,EACnB,EAAO,IAAI,CAAM,CACnB,CAMA,sBAAsB,EAAiB,EAAkB,EAAM,CAC7D,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAY,EAAiB,MAAM,KACzC,EAAgB,KAAK,UAAY,GACjC,EAAgB,KAAK,MAAM,QAAU,EAAK,QAC1C,MAAM,EAAI,EAAK,QACT,EAAK,KAAK,gBAAgB,MAAM,MAA0C,EAAK,QAAvC,EAAK,QAAU,EAAK,QAAU,EAC5E,IAAI,EAAY,EACZ,EAAiB,KAAK,QAAU,OAClC,EAAa,EAAE,QAAQ,OAAO,CAAC,EAE/B,EAAa,EAAiB,KAAK,MAErC,IAAI,EAAgB,EAAiB,KAAK,SACtC,EAAkB,EAAiB,KAAK,WACxC,EAAkB,EAAiB,KAAK,WACxC,EAAiB,MAAM,QAAU,OACnC,EAAa,EAAE,OAAO,MAAM,UAE5B,EAAa,EAAiB,MAAM,MAEtC,MAAM,EAAc,EAAiB,MAAM,UAC3C,IAAI,EAAM,GACN,EAAQ,GAqBZ,GApBI,GACF,EAAa,EAAiB,MAAM,MACpC,EAAgB,EAAiB,MAAM,SACvC,EAAkB,EAAiB,MAAM,WACzC,EAAkB,EAAiB,MAAM,WACzC,EAAS,KAAK,gBAAgB,MAAM,MAAa,EAAiB,MAAM,MAA5B,GAC5C,EAAM,EAAiB,MAAM,UAAU,CAAC,GAEpC,EAAE,WAAW,OAAO,SAAW,IACjC,EAAM,EAAY,EAAE,WAAW,OAAO,CAAC,EAAG,CAAC,EAC3C,EAAQ,EAAE,WAAW,YAAY,CAAC,GAGlC,IACF,EAAQ,EAAiB,KAAK,UAC5B,EACA,EAAiB,MAAM,KACvB,CACR,GAEQ,EAAiB,KAAK,KAAM,CAC9B,MAAM,EAAU,EAAS,SAAS,CAChC,EAAA,EACA,EAAG,EAAI,WAAW,EAAiB,KAAK,OAAO,EAC/C,KAAM,EACN,WAAY,SACZ,UAAW,EACX,SAAU,EACV,WAAY,EACZ,WAAY,CACpB,CAAO,EACD,EAAQ,KAAK,UAAU,IAAI,4BAA4B,EACvD,EAAgB,IAAI,CAAO,CAC7B,CACA,GAAI,EAAiB,MAAM,KAAM,CAC/B,MAAM,EAAY,EAAiB,KAAK,KAAO,WAAW,EAAiB,MAAM,OAAO,EAAI,GAAK,EAAiB,MAAM,QAClH,EAAU,EAAS,SAAS,CAChC,EAAA,EACA,EAAG,EAAI,EACP,KAAM,EACN,WAAY,SACZ,UAAW,EACX,WAAY,EAAiB,MAAM,WACnC,SAAU,EAAiB,MAAM,SACjC,WAAY,EAAiB,MAAM,UAC3C,CAAO,EACD,EAAQ,KAAK,UAAU,IAAI,4BAA4B,EACvD,EAAgB,IAAI,CAAO,CAC7B,CACA,OAAO,CACT,CAQA,iBAAiB,EAAc,EAAO,EAAK,EAAI,CAC7C,MAAM,EAAI,KAAK,EACf,IAAI,EACA,EACE,EAAa,KAAK,QAAU,OAC9B,EAAa,EAAE,QAAQ,OAAO,SAAS,EAAG,WAAW,aAAa,KAAK,EAAG,EAAE,EAAI,CAAC,EAEjF,EAAa,EAAa,KAAK,MAG7B,EAAE,WAAW,OAAO,OAAS,GAAK,EAAa,MAAM,OACvD,EAAa,EAAa,MAAM,OAGpC,MAAM,EAAU,EAAE,IAAI,OAAO,cAAc,6BAA6B,EAClE,EAAU,EAAE,IAAI,OAAO,cAAc,6BAA6B,EAClE,EAAc,EAAa,MAAM,UACvC,EAAM,EAAY,EAAK,CAAC,EACpB,CAAC,GAAM,OAAO,EAAa,MAAM,WAAc,aACjD,EAAM,EAAa,MAAM,UAAU,CAAC,GAEtC,MAAM,EAAU,IAAU,EAAa,MAAM,MAQ7C,GAPA,EAAS,KAAK,gBAAgB,MAAM,MAAa,EAAa,KAAK,UAAU,EAAO,EAAS,CAAC,EAAlD,GACxC,IAAY,OACd,EAAQ,YAAc,GAEpB,IAAY,OACd,EAAQ,YAAc,GAEpB,IAAY,KAAM,CACpB,MAAM,EAEJ,EAEF,EAAU,MAAM,KAAO,CACzB,CACF,CAKA,qBAAqB,EAAI,EAAkB,CACzC,MAAM,EAAI,KAAK,EACT,EAAM,EAAG,aAAa,YAAY,EAClC,EAAQ,EAAE,WAAW,YAAY,SAAS,EAAG,WAAW,aAAa,KAAK,EAAG,EAAE,EAAI,CAAC,EACtF,EAAE,WAAW,OAAO,OAAS,GAC/B,KAAK,iBAAiB,EAAkB,EAAO,EAAK,CAAE,EAExD,MAAM,EAAkB,EAAE,IAAI,OAAO,cACnC,8BACN,EACI,GAAI,IAAoB,KAAM,CAC5B,MAAM,EAEJ,EAEF,EAAkB,MAAM,QAAU,GACpC,CACF,CAIA,WAAW,EAAQ,CACjB,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAc,EAAE,OAAO,YAAY,UAAU,OACnD,GAAI,EAAY,cAAgB,EAAG,OACnC,MAAM,EAAS,CAAA,EACT,EAAgB,IAAM,EAAE,WAAW,OAAO,OAChD,QAAS,EAAI,EAAG,EAAI,EAAE,WAAW,OAAO,OAAQ,IAC9C,EAAO,KACL,EAAQ,iBACN,KAAK,QACL,KAAK,QACL,EAAE,QAAQ,WACV,EAAE,OAAO,YAAY,IAAI,WAAa,EAAgB,CAChE,CACA,EAEI,EAAO,QAAQ,CAAC,EAAG,IAAM,CACvB,MAAM,EAAO,EAAS,SACpB,EAAE,EACF,EAAE,EACF,KAAK,QACL,KAAK,QACL,MAAM,QAAQ,EAAY,eAAe,EAAI,EAAY,gBAAgB,CAAC,EAAI,EAAY,eAClG,EACM,EAAO,IAAI,CAAI,CACjB,CAAC,CACH,CACA,uBAAwB,CACtB,MAAM,EAAI,KAAK,EACf,GAAI,KAAK,gBAAgB,KAAM,CAC7B,MAAM,EAAkB,EAAE,IAAI,MAAM,QAClC,8BACR,EACY,EAAa,KAAK,sBACtB,EACA,KAAK,gBACL,CACE,WAAY,KAAK,UACjB,QAAS,KAAK,QACd,QAAS,KAAK,QACd,QAAS,KAAK,gBAAgB,IACxC,CACA,EACoB,EAAE,IAAI,MAAM,QACxB,wCACR,EACY,IAAI,CAAU,CACtB,CACF,CACF,CACA,MAAM,EAAM,CAKV,YAAY,EAAG,EAAK,CAClB,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,UAAY,KAAK,EAAE,OAAO,MAAM,KACrC,KAAK,YAAc,KAAK,EAAE,OAAO,MAAM,WAAW,QAClD,KAAK,YAAc,KAAK,aAAe,KAAK,EAAE,OAAO,MAAM,WAAW,iBAAiB,QACvF,KAAK,QAAU,EACf,KAAK,SAAW,IAAI,EAAS,KAAK,CAAC,EACnC,KAAK,aAAe,EAAE,QAAQ,OAAO,SAAW,OAAS,EAAE,QAAQ,OAAO,OAAS,EAAE,QAAQ,OAC7F,KAAK,YAAc,EAAE,QAAQ,UAAY,EAAE,QAAQ,SAAW,EAAE,OAAO,WAAa,EAAE,OAAO,UAC7F,KAAK,MAAQ,EAAE,OAAO,MAAM,CAAC,EAAE,YAC/B,KAAK,QAAU,EAAE,OAAO,MAAM,CAAC,EAAE,QACjC,KAAK,UAAY,IAAI,GAAU,KAAK,CAAC,EACrC,KAAK,SAAW,KAAK,MAAQ,KAAK,UAAU,UAAU,KAAK,QAAS,EAAE,QAAQ,KAAM,CAAC,EAAI,EAAE,QAAQ,KACnG,KAAK,SAAW,KAAK,MAAQ,KAAK,UAAU,UAAU,KAAK,QAAS,KAAK,EAAE,QAAQ,KAAM,CAAC,EAAI,EAAE,QAAQ,KACxG,KAAK,SAAW,EAAE,OAAO,YAAY,MAAM,SAC3C,KAAK,YAAc,EAAE,OAAO,OAAO,KAAO,EAAE,OAAO,OAAO,MAAQ,EAClE,KAAK,KAAO,KAAK,YAAc,IAAM,KAAK,YAAc,EAAE,OAAO,MAAM,WAAW,KAC9E,EAAE,OAAO,MAAM,OAAO,OACxB,KAAK,KAAO,KAAK,KAAO,EAAE,OAAO,iBAAmB,MAElD,EAAE,OAAO,YAAY,MAAM,OAAS,SACtC,KAAK,KAAO,EAAE,OAAO,YAAY,MAAM,MAEzC,KAAK,oBACL,CAAA,EACA,KAAK,WACL,CAAA,EACA,KAAK,SACL,CAAA,EACA,KAAK,cAAgB,EACrB,KAAK,SAAW,EAChB,KAAK,oBAAsB,CAAA,CAC7B,CAIA,KAAK,EAAQ,CACX,MAAM,EAAI,KAAK,EACT,EAAO,IAAI,GAAK,KAAK,CAAC,EACtB,EAAY,CAAA,EACZ,EAAa,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EAC9C,EAAO,SACT,KAAK,cAAgB,EAAO,EAAE,QAAQ,mBAAmB,EAAE,QAE7D,KAAK,SAAW,KAAK,GAAK,EAAI,KAAK,cACnC,MAAM,EAAQ,EAAE,OAAO,UAAY,EAC7B,EAAQ,EAAE,OAAO,WAAa,EAC9B,EAAa,EAAQ,EAAE,OAAO,YAAY,MAAM,QAChD,EAAa,EAAQ,EAAE,OAAO,YAAY,MAAM,QAChD,EAAM,KAAK,SAAS,MAAM,CAC9B,MAAO,iDACP,UAAW,aAAa,GAAc,CAAC,KAAK,GAAc,CAAC,GACjE,CAAK,EACD,IAAI,EAAgB,CAAA,EAChB,EAAe,KACf,EAAmB,KAoJvB,GAnJA,KAAK,YAAc,KAAK,SAAS,MAAM,CACrC,MAAO,kBACb,CAAK,EACD,EAAO,QAAQ,CAAC,EAAG,IAAM,CACvB,MAAM,EAAgB,EAAE,SAAW,EAAE,QAAQ,WACvC,EAAW,KAAK,SAAS,MAAK,EAAG,KAAK,CAC1C,MAAO,oBACP,qBAAsB,EACtB,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAC,CAAC,EAC5D,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EACD,KAAK,oBAAoB,CAAC,EAAI,CAAA,EAC9B,KAAK,WAAW,CAAC,EAAI,CAAA,EACrB,KAAK,SAAS,CAAC,EAAI,CAAA,EACnB,EAAE,QAAQ,CAAC,EAAI,IAAM,CACnB,MAAM,EAAQ,KAAK,IAAI,KAAK,SAAW,KAAK,QAAQ,EACpD,EAAK,EAAK,KAAK,SACX,KAAK,QACP,EAAK,KAAK,UAAU,UAAU,KAAK,QAAS,EAAI,CAAC,GAEnD,KAAK,oBAAoB,CAAC,EAAE,CAAC,EAAI,EAAK,EACtC,KAAK,WAAW,CAAC,EAAE,CAAC,EAAI,KAAK,oBAAoB,CAAC,EAAE,CAAC,EAAI,KAAK,KAC9D,KAAK,SAAS,CAAC,EAAE,CAAC,EAAI,EAAI,KAAK,QACjC,CAAC,EACD,EAAgB,KAAK,iBACnB,KAAK,WAAW,CAAC,EACjB,KAAK,SAAS,CAAC,CACvB,EACM,MAAM,EAAQ,KAAK,YAAY,EAAe,CAC5C,EAAG,EACH,EAAG,CACX,CAAO,EACD,EAAe,KAAK,SAAS,MAAM,CACjC,MAAO,0DACf,CAAO,EACD,EAAmB,KAAK,SAAS,MAAM,CACrC,MAAO,wBACP,iBAAkB,CAC1B,CAAO,EACD,EAAE,QAAQ,gBAAgB,KAAK,CAC7B,GAAI,EAAa,KACjB,MAAO,CACf,CAAO,EACD,MAAM,EAA6B,CACjC,EAAA,EACA,UAAW,EACX,eAAgB,EAChB,aAAc,EAAE,OAAO,MAAM,WAAW,MACxC,gBAAiB,EAAE,OAAO,MAAM,WAAW,iBAAiB,MAC5D,UAAW,mBACX,iBAAkB,GAClB,kBAAmB,GACnB,OAAQ,EAAE,QAAQ,OAAO,OAAO,CAAC,EACjC,cAAe,EAAE,OAAO,OAAO,OACvC,EACM,IAAI,EAAW,KACX,EAAE,QAAQ,cAAc,OAAS,IACnC,EAAW,KAAK,gBAAgB,CAAC,GAEnC,QAAS,EAAI,EAAG,EAAI,EAAM,YAAY,OAAQ,IAAK,CACjD,MAAM,EAAmB,KAAK,SAAS,YAAY,EAAc,EAAe,CAAA,EAAI,CAA0B,EAAG,CAC/G,SAAU,IAAa,KAAO,EAAM,cAAc,CAAC,EAAI,EACvD,OAAQ,EAAM,YAAY,CAAC,EAC3B,YAAa,MAAM,QAAQ,KAAK,WAAW,EAAI,KAAK,YAAY,CAAC,EAAI,KAAK,YAC1E,KAAM,OACN,WAAY,EACtB,CAAS,CAAC,EACF,EAAS,IAAI,CAAgB,EAC7B,MAAM,EAAW,EAAK,SAAS,CAC7B,aAAc,CACxB,CAAS,EACK,EAAmB,KAAK,SAAS,YAAY,EAAc,EAAe,CAAA,EAAI,CAA0B,EAAG,CAC/G,SAAU,IAAa,KAAO,EAAM,cAAc,CAAC,EAAI,EACvD,OAAQ,EAAM,YAAY,CAAC,EAC3B,YAAa,EACb,KAAM,EACN,WAAY,GAGZ,SAAU,CAAE,KAAM,SAAU,GAAI,EAAG,GAAI,EAAG,EAAG,KAAK,IAAI,CAChE,CAAS,CAAC,EACF,GAAI,EAAE,OAAO,MAAM,WAAW,QAAS,CACrC,MAAM,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAS,EAAE,OAAO,MAAM,WAC9B,EAAQ,WACN,EACA,OAAO,OAAO,CAAA,EAAI,EAAQ,CAAE,iBAAkB,EAAI,CAAE,EACpD,CACZ,CACQ,CACA,EAAS,IAAI,CAAgB,CAC/B,CACA,EAAE,QAAQ,CAAC,EAAI,IAAM,CAEnB,MAAM,EADU,IAAI,GAAQ,KAAK,EAAG,KAAK,GAAG,EACvB,gBAAgB,CACnC,SAAU,oBACV,YAAa,EACb,eAAgB,CAC1B,CAAS,EACK,EAAQ,KAAK,SAAS,WAC1B,EAAc,CAAC,EAAE,EACjB,EAAc,CAAC,EAAE,EACjB,CACV,EACQ,EAAM,KAAK,MAAO,CAAC,EACnB,EAAM,KAAK,IAAK,CAAC,EACjB,EAAM,KAAK,QAAS,CAAC,EACrB,EAAM,KAAK,aAAa,sBAAuB,EAAK,KAAK,EACzD,MAAM,EAAe,KAAK,SAAS,MAAM,CACvC,MAAO,2BACjB,CAAS,EACG,GACF,EAAa,IAAI,CAAK,EAExB,EAAa,IAAI,CAAY,EAC7B,EAAS,IAAI,CAAY,EACzB,MAAM,EAAmB,EAAE,OAAO,WAClC,GAAI,EAAiB,QAAS,CAC5B,MAAM,EAAO,EAAiB,UAAU,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAAG,CACjE,YAAa,EACb,eAAgB,EAChB,EAAA,CACZ,CAAW,EACD,EAAW,mBAAmB,CAC5B,EAAG,EAAc,CAAC,EAAE,EACpB,EAAG,EAAc,CAAC,EAAE,EACpB,KAAA,EACA,WAAY,SACZ,EAAA,EACA,EAAG,EAGH,YAAa,EACb,eAAgB,EAChB,OAAQ,EACR,iBAAkB,GAClB,iBAAkB,EAAe,CAAA,EAAI,CAAgB,CACjE,CAAW,CACH,CACA,EAAS,IAAI,CAAgB,CAC/B,CAAC,EACD,EAAU,KAAK,CAAQ,CACzB,CAAC,EACD,KAAK,aAAa,CAChB,OAAQ,CACd,CAAK,EACG,EAAE,OAAO,MAAM,OAAO,KAAM,CAC9B,MAAM,EAAa,KAAK,eAAc,EACtC,EAAI,IAAI,CAAU,CACpB,CACA,OAAA,EAAU,QAAS,GAAQ,CACzB,EAAI,IAAI,CAAG,CACb,CAAC,EACD,EAAI,IAAI,KAAK,WAAW,EACjB,CACT,CAIA,aAAa,EAAM,CACjB,MAAM,EAAI,KAAK,EACT,CAAE,OAAA,CAAM,EAAK,EACb,EAAU,IAAI,GAAsB,KAAK,CAAC,EAC1C,EAAa,EAAE,QAAQ,WAAW,CAAC,EAAE,OAAO,QAAO,EACnD,EAAS,EAAW,OACpB,EAAc,CAAA,EACd,EAAW,KAAK,MAAQ,EAAS,GACvC,QAAS,EAAI,EAAG,EAAI,EAAQ,IAC1B,EAAY,CAAC,EAAI,EAAW,EAE9B,EAAY,QAAO,EACnB,MAAM,EAAiB,CAAA,EACjB,EAAQ,CAAA,EACd,EAAY,QAAQ,CAAC,EAAY,IAAM,CACrC,MAAM,EAAU,EAAQ,cAAc,EAAY,KAAK,aAAa,EACpE,IAAI,EAAS,GACb,EAAQ,QAAQ,CAAC,EAAG,IAAM,CACxB,GAAI,IAAM,EAAG,CACX,MAAM,EAAO,KAAK,SAAS,SACzB,EAAE,EACF,EAAE,EACF,EACA,EACA,MAAM,QAAQ,KAAK,SAAS,eAAe,EAAI,KAAK,SAAS,gBAAgB,CAAC,EAAI,KAAK,SAAS,eAC5G,EACU,EAAM,KAAK,CAAI,CACjB,CACI,IAAM,GACR,KAAK,oBAAoB,KAAK,CAC5B,EAAG,EAAE,EACL,EAAG,EAAE,CACjB,CAAW,EAEH,GAAU,EAAE,EAAI,IAAM,EAAE,EAAI,GAC9B,CAAC,EACD,EAAe,KAAK,CAAM,CAC5B,CAAC,EACD,EAAe,QAAQ,CAAC,EAAG,IAAM,CAC/B,MAAM,EAAe,KAAK,SAAS,aAC7B,EAAc,KAAK,SAAS,YAC5B,EAAU,KAAK,SAAS,YAC5B,EACA,MAAM,QAAQ,CAAY,EAAI,EAAa,CAAC,EAAI,EAChD,MAAM,QAAQ,CAAW,EAAI,EAAY,CAAC,EAAI,EAC9C,EAAE,QAAQ,cAAc,KAAK,OAAO,CAAC,CAC7C,EACM,EAAO,IAAI,CAAO,CACpB,CAAC,EACD,EAAM,QAAS,GAAM,CACnB,EAAO,IAAI,CAAC,CACd,CAAC,EACG,EAAE,OAAO,MAAM,CAAC,EAAE,MACpB,KAAK,oBAAoB,QACvB,CAAC,EAAG,IAAM,CACR,MAAM,EAAQ,EAAQ,eAAe,EAAE,EAAG,EAAE,EAAG,EAAG,EAAW,CAAC,CAAC,EAC/D,KAAK,YAAY,IAAI,CAAK,CAC5B,CACR,CAEE,CACA,gBAAiB,CACf,MAAM,EAAI,KAAK,EACT,EAAoB,EAAE,OAAO,MAAM,OACnC,EAAc,KAAK,SAAS,MAAM,CACtC,MAAO,kBACb,CAAK,EACK,EAAa,EAAQ,cAAc,KAAK,KAAM,KAAK,aAAa,EACtE,OAAA,EAAE,UAAU,OAAO,QAAQ,CAAC,EAAO,IAAM,CACvC,MAAM,EAAY,EAAE,OAAO,MAAM,OAAO,UAClC,EAAa,IAAI,GAAW,KAAK,EAAG,KAAK,GAAG,EAClD,GAAI,EAAW,CAAC,EAAG,CACjB,MAAM,EAAU,KAAK,WAAW,EAAW,CAAC,EAAG,KAAK,IAAI,EAClD,EAAO,EAAU,EAAO,CAC5B,YAAa,GACb,eAAgB,EAChB,EAAA,CACV,CAAS,EACqB,EAAW,mBAAmB,CAClD,EAAG,EAAQ,KACX,EAAG,EAAQ,KACX,KAAA,EACA,WAAY,EAAQ,WACpB,EAAA,EACA,EAAG,EACH,OAAQ,EACR,UAAW,yBACX,MAAO,MAAM,QAAQ,EAAkB,MAAM,MAAM,GAAK,EAAkB,MAAM,OAAO,CAAC,EAAI,EAAkB,MAAM,OAAO,CAAC,EAAI,UAChI,iBAAkB,EAAe,CAC/B,WAAY,EAAQ,WACpB,WAAY,CAAE,QAAS,EAAK,CACxC,EAAa,CAAiB,EACpB,iBAAkB,EAC5B,CAAS,EACa,GAAG,QAAU,GAAM,CAC/B,GAAI,OAAO,EAAE,OAAO,MAAM,OAAO,iBAAoB,WAAY,CAC/D,MAAM,EAAO,OAAO,OAAO,CAAA,EAAI,EAAG,CAChC,WAAY,CAC1B,CAAa,EACD,EAAE,OAAO,MAAM,OAAO,gBAAgB,EAAG,KAAK,IAAK,CAAI,CACzD,CACF,CAAC,CACH,CACF,CAAC,EACM,CACT,CAKA,YAAY,EAAK,EAAQ,CACvB,MAAM,EAAc,CAAA,EACpB,IAAI,EAAgB,CAAA,EACpB,MAAM,EAAc,CAAA,EACpB,IAAI,EAAgB,CAAA,EACpB,GAAI,EAAI,OAAQ,CACd,EAAgB,CAAC,KAAK,SAAS,KAAK,EAAO,EAAG,EAAO,CAAC,CAAC,EACvD,EAAgB,CAAC,KAAK,SAAS,KAAK,EAAO,EAAG,EAAO,CAAC,CAAC,EACvD,IAAI,EAAa,KAAK,SAAS,KAAK,EAAI,CAAC,EAAE,EAAG,EAAI,CAAC,EAAE,CAAC,EAClD,EAAa,KAAK,SAAS,KAAK,EAAI,CAAC,EAAE,EAAG,EAAI,CAAC,EAAE,CAAC,EACtD,EAAI,QAAQ,CAAC,EAAG,IAAM,CACpB,GAAc,KAAK,SAAS,KAAK,EAAE,EAAG,EAAE,CAAC,EACzC,GAAc,KAAK,SAAS,KAAK,EAAE,EAAG,EAAE,CAAC,EACrC,IAAM,EAAI,OAAS,IACrB,GAAc,IACd,GAAc,IAElB,CAAC,EACD,EAAY,KAAK,CAAU,EAC3B,EAAY,KAAK,CAAU,CAC7B,CACA,MAAO,CACL,cAAA,EACA,YAAA,EACA,cAAA,EACA,YAAA,CACN,CACE,CAKA,WAAW,EAAK,EAAa,CAE3B,IAAI,EAAa,SACb,EAAO,EAAI,EACX,EAAO,EAAI,EACf,OAAI,KAAK,IAAI,EAAI,CAAC,GAAK,GACjB,EAAI,EAAI,GACV,EAAa,QACb,GAAQ,IACC,EAAI,EAAI,IACjB,EAAa,MACb,GAAQ,IAGV,EAAa,SAEX,KAAK,IAAI,EAAI,CAAC,GAAK,EAAc,KAC/B,EAAI,EAAI,EACV,GAAQ,GACC,EAAI,EAAI,IACjB,GAAQ,KAGL,CACL,WAAA,EACA,KAAA,EACA,KAAA,CACN,CACE,CAIA,gBAAgB,EAAW,CACzB,MAAM,EAAI,KAAK,EACf,IAAI,EAAW,KACf,QAAS,EAAK,EAAG,EAAK,EAAE,QAAQ,cAAc,OAAQ,IAAM,CAC1D,MAAM,EAAM,EAAE,QAAQ,cAAc,CAAE,EAClC,EAAI,MAAM,OAAS,GAAK,SAAS,EAAI,UAAW,EAAE,IAAM,SAAS,OAAO,CAAS,EAAG,EAAE,GACpF,OAAO,EAAE,QAAQ,cAAc,CAAE,EAAE,MAAM,CAAC,EAAM,MAClD,EAAW,EAAE,QAAQ,cAAc,CAAE,EAAE,MAAM,CAAC,EAAE,EAGtD,CACA,OAAO,CACT,CAKA,iBAAiB,EAAe,EAAU,EAAgB,KAAK,cAAe,CAC5E,EAAgB,GAAiB,CAAA,EACjC,EAAW,GAAY,CAAA,EACvB,MAAM,EAAqB,CAAA,EAC3B,QAAS,EAAI,EAAG,EAAI,EAAe,IAAK,CACtC,MAAM,EAAc,CAAA,EACpB,EAAY,EAAI,EAAc,CAAC,EAAI,KAAK,IAAI,EAAS,CAAC,CAAC,EACvD,EAAY,EAAI,CAAC,EAAc,CAAC,EAAI,KAAK,IAAI,EAAS,CAAC,CAAC,EACxD,EAAmB,KAAK,CAAW,CACrC,CACA,OAAO,CACT,CACF,CACA,MAAM,WAAe,EAAI,CAKvB,YAAY,EAAG,EAAK,CAClB,MAAM,EAAG,CAAG,EACZ,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,aAAe,CAAC,CAAC,EACtB,KAAK,QAAU,EACf,KAAK,WAAa,EAAE,OAAO,YAAY,UAAU,WACjD,KAAK,SAAW,EAAE,OAAO,YAAY,UAAU,SAC/C,KAAK,WAAa,KAAK,IACrB,EAAE,OAAO,YAAY,UAAU,SAAW,EAAE,OAAO,YAAY,UAAU,UAC/E,EACI,KAAK,gBAAkB,EAAE,OAAO,YAAY,UAAU,MAAM,WAC5D,KAAK,cAAgB,EAAE,OAAO,YAAY,UAAU,MAAM,SAC1D,KAAK,UAAY,KAAK,EAAE,OAAO,YAAY,UAAU,UACrD,KAAK,gBAAkB,KAAK,EAAE,OAAO,YAAY,UAAU,WAC3D,KAAK,iBAAmB,KAAK,gBACxB,KAAK,kBAAiB,KAAK,gBAAkB,KAAK,YAClD,KAAK,gBAAe,KAAK,cAAgB,KAAK,UAC/C,KAAK,WAAa,MAAK,KAAK,SAAW,QAC3C,KAAK,OAAS,SAAS,EAAE,OAAO,YAAY,UAAU,MAAM,OAAQ,EAAE,EACtE,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,CACvD,CAIA,KAAK,EAAQ,CACX,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAM,EAAS,MAAM,CACzB,MAAO,sBACb,CAAK,EACD,GAAI,EAAE,QAAQ,OAAQ,OAAO,EAC7B,MAAM,EAAW,EAAS,MAAK,EACzB,EAAU,KAAK,YAAc,EAC7B,EAAU,EAAE,OAAO,UAAY,EACrC,IAAI,EAAO,KAAK,YAAc,KACzB,EAAE,OAAO,MAAM,UAAU,UAC5B,EAAO,EAAO,EAAE,OAAO,OAAO,MAAQ,EAAE,OAAO,MAAM,WAAW,MAElE,MAAM,EAAW,EAAE,QAAQ,KAAK,OAC1B,EAAK,EAAE,OAAO,YAAY,UAC1B,EAAW,MAAM,QAAQ,EAAG,KAAK,GAAK,EAAG,MAAM,OAAS,EACxD,EAAY,GAAY,EAAG,YAAc,EAAG,WAAW,qBACvD,EAAgB,EAAG,QAAU,SACnC,GAAI,EAAG,MAAM,MAAQ,CAAC,EAAW,CAC/B,MAAM,EAAW,KAAK,WAAW,CAC/B,KAAA,EACA,QAAA,EACA,QAAA,EACA,SAAA,EACA,OAAA,CACR,CAAO,EACD,EAAS,IAAI,CAAQ,CACvB,CACA,GAAI,EAAU,CACZ,MAAM,EAAU,KAAK,UAAU,CAC7B,KAAA,EACA,QAAA,EACA,QAAA,EACA,OAAA,CACR,CAAO,EACD,EAAS,IAAI,CAAO,CACtB,CACA,MAAM,EAAM,KAAK,SAAS,CACxB,KAAA,EACA,QAAA,EACA,QAAA,EACA,SAAA,EACA,OAAA,EAKA,aAAc,GAAiB,GAAG,EAAK,EAAG,SAAW,MAAgB,EAAG,aAC9E,CAAK,EACD,GAAI,EAAG,OAAS,EAAG,MAAM,KAAM,CAC7B,MAAM,EAAU,KAAK,UAAU,CAC7B,KAAA,EACA,QAAA,EACA,QAAA,EACA,OAAA,CACR,CAAO,EAED,GADuB,KAAK,aAAe,CAAC,EAAE,QAAQ,aAAe,CAAC,EAAE,QAAQ,SAC1D,EAAY,UAAS,GAAM,EAAE,QAAQ,cAAe,CACxE,MAAM,EAAY,EAAQ,KAC1B,EAAU,MAAM,QAAU,IAC1B,EAAU,MAAM,WAAa,yBAC7B,MAAM,EAAW,EAAE,OAAO,MAAM,WAAW,OAAS,IACpD,WAAW,IAAM,CACf,EAAU,MAAM,QAAU,GAC5B,EAAG,CAAQ,CACb,CACA,EAAS,IAAI,CAAO,CACtB,CACA,GAAI,EAAe,CACjB,MAAM,EAAW,KAAK,WAAW,CAC/B,KAAA,EACA,QAAA,EACA,QAAA,EACA,OAAA,CACR,CAAO,EACD,EAAS,IAAI,CAAQ,CACvB,CACA,IAAI,EAAa,IACb,EAAE,OAAO,YAAY,UAAU,WAAa,IAC9C,EAAa,KAAK,YAEpB,MAAM,GAAc,IAAM,GAAc,IAExC,GADA,EAAE,QAAQ,WAAa,EAAO,EAAO,EACjC,KAAK,iBAAiB,MAAM,KAAM,CACpC,MAAM,EAAS,KAAK,IAClB,KAAK,iBAAiB,MAAM,QAC5B,KAAK,iBAAiB,KAAK,OACnC,EACM,EAAE,QAAQ,YAAc,EAAS,CACnC,CACA,OAAA,EAAS,IAAI,EAAI,CAAC,EACd,EAAE,OAAO,YAAY,UAAU,OAAO,WAAa,UACrD,EAAI,EAAE,IAAI,EAAI,QAAQ,EAClB,EAAI,YACN,EAAI,EAAE,IAAI,EAAI,UAAU,GAG5B,EAAI,IAAI,CAAQ,EACT,CACT,CAIA,WAAW,EAAM,CACf,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAI,EAAS,MAAM,CACvB,MAAO,mBACb,CAAK,EACK,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAO,IAAI,GAAK,KAAK,CAAC,EACtB,EAAc,KAAK,eAAe,CAAI,EAC5C,EAAK,KAAO,EAAK,KAAO,EAAc,EACtC,QAAS,EAAI,EAAG,EAAI,EAAK,OAAO,OAAQ,IAAK,CAC3C,MAAM,EAAmB,EAAS,MAAM,CACtC,MAAO,6CACf,CAAO,EACD,EAAE,IAAI,CAAgB,EACtB,EAAiB,KAAK,CACpB,IAAK,EAAI,CACjB,CAAO,EACD,EAAK,KAAO,EAAK,KAAO,EAAc,KAAK,OAC3C,MAAM,EAAc,EAAE,OAAO,YAAY,UAAU,MAC7C,EAAW,EAAK,SAAS,CAC7B,aAAc,EACd,KAAM,EAAK,KACX,WAAY,MAAM,QAAQ,EAAY,UAAU,EAAI,EAAY,WAAW,CAAC,EAAI,EAAY,WAC5F,MAAO,EACf,CAAO,EACK,EAAa,KAAK,gBACxB,IAAI,EAAW,KAAK,cAChB,KAAK,IAAI,CAAQ,EAAI,KAAK,IAAI,CAAU,GAAK,MAC/C,EAAW,IAAM,KAAK,IAAI,KAAK,UAAU,EAAI,IAC/C,MAAM,EAAS,EAAS,SAAS,CAC/B,EAAG,GACH,OAAQ,EACR,YAAa,EAAc,SAAS,EAAY,YAAa,EAAE,EAAI,IACnE,KAAM,OACN,cAAe,EAAY,QAC3B,QAAS,2BACjB,CAAO,EACD,GAAI,EAAY,WAAW,QAAS,CAClC,MAAM,EAAS,EAAY,WAC3B,EAAQ,WAAW,EAAQ,CAAM,CACnC,CACA,EAAiB,IAAI,CAAM,EAC3B,EAAO,KAAK,KAAM,6BAA+B,CAAC,EAClD,KAAK,aAAa,EAAQ,CACxB,QAAS,EAAK,QACd,QAAS,EAAK,QACd,SAAA,EACA,WAAA,EACA,KAAM,EAAK,KACX,EAAA,EACA,WAAY,EACZ,aAAc,EACd,IAAK,EACL,QAAS,EACjB,CAAO,CACH,CACA,OAAO,CACT,CAIA,SAAS,EAAM,CACb,IAAI,EACJ,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAO,IAAI,GAAK,KAAK,CAAC,EACtB,EAAU,IAAI,GAAQ,KAAK,CAAC,EAC5B,EAAI,EAAS,MAAK,EAClB,EAAc,KAAK,eAAe,CAAI,EAC5C,EAAK,KAAO,EAAK,KAAO,EAAc,EACtC,IAAI,EAAe,EAAE,OAAO,YAAY,UAAU,OAAO,WACzD,MAAM,EAAa,EAAK,KAAO,EAAc,EAAK,OAAO,OAAS,KAAK,OAAS,EAAK,OAAO,OAAS,EAAc,SAAS,EAAE,OAAO,YAAY,UAAU,MAAM,YAAa,EAAE,EAAI,IAAM,EACpL,EAAe,EAAa,EAAE,OAAO,YAAY,UAAU,OAAO,OACpE,EAAE,OAAO,YAAY,UAAU,OAAO,QAAU,SAClD,EAAe,KAAK,gBAAgB,EAAM,EAAG,EAAY,CAAY,GAEvE,MAAM,EAAW,KAAK,WAAW,CAC/B,KAAM,EACN,QAAS,EAAK,QACd,QAAS,EAAK,QACd,KAAM,GAA8B,aAC1C,CAAK,EACD,GAAI,EAAE,OAAO,YAAY,UAAU,OAAO,WAAW,QAAS,CAC5D,MAAM,EAAS,EAAE,OAAO,YAAY,UAAU,OAAO,WACrD,EAAQ,WAAW,EAAU,CAAM,CACrC,CACA,IAAI,EAAQ,EACR,CAAC,KAAK,iBAAiB,MAAM,MAAQ,EAAE,WAAW,OAAO,OAAS,IACpE,EAAQ,GAEV,IAAI,EAAa,KACjB,GAAI,KAAK,iBAAiB,KAAM,CAC9B,MAAM,EAAkB,EAAE,IAAI,MAAM,QAClC,8BACR,EACM,EAAa,KAAK,sBAChB,EACA,KAAK,iBACL,CACE,WAAA,EACA,QAAS,EAAK,QACd,QAAS,EAAK,QACd,QAAS,CACnB,CACA,CACI,CACI,EAAE,OAAO,YAAY,UAAU,OAAO,WAAa,SACrD,EAAE,IAAI,CAAQ,EACV,GACF,EAAE,IAAI,CAAU,GAGpB,IAAI,EAAc,GACd,EAAE,OAAO,YAAY,UAAU,eACjC,EAAc,IAEhB,MAAM,IAAgB,EAAK,KAAK,IAAI,kBAAoB,KAAO,OAAS,EAAG,SAAQ,KAAQ,GAC3F,QAAS,EAAI,EAAc,EAAK,OAAO,OAAS,EAAI,EAAG,EAAc,GAAK,EAAI,EAAI,EAAK,OAAO,OAAQ,EAAc,IAAM,IAAK,CAC7H,MAAM,EAAiB,EAAS,MAAM,CACpC,MAAO,6CACP,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAC,CAAC,CACpE,CAAO,EACD,EAAE,IAAI,CAAc,EACpB,EAAe,KAAK,CAClB,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EACD,GAAO,0BAA0B,KAAK,EAAG,EAAgB,CAAC,EAC1D,EAAK,KAAO,EAAK,KAAO,EAAc,KAAK,OAC3C,MAAM,EAAW,EAAK,SAAS,CAC7B,aAAc,EACd,KAAM,EAAK,KACX,MAAO,EAAK,OAAO,CAAC,CAC5B,CAAO,EACK,EAAa,KAAK,WACxB,IAAI,EACJ,MAAM,EAAK,EAAE,OAAO,YAAY,UAC1B,EAAY,OAAO,EAAG,KAAQ,SAAW,EAAG,IAAM,EAClD,EAAY,OAAO,EAAG,KAAQ,SAAW,EAAG,IAAM,IAClD,EAAa,IAAc,EAAY,EAAI,EAAY,EACvD,EAAmB,GAAM,CAC7B,MAAM,EAAU,KAAK,IAAI,KAAK,IAAI,EAAG,CAAS,EAAG,CAAS,EAC1D,OAAO,KAAK,IAAI,GAAI,EAAU,GAAa,CAAU,CACvD,EACM,EAAY,EAAgB,EAAQ,UAAU,EAAK,OAAO,CAAC,CAAC,CAAC,EACnE,IAAI,EAAW,KAAK,MAAM,KAAK,WAAa,CAAS,EAAI,KAAK,WAC1D,EACA,EAAE,QAAQ,cACZ,EAAiB,KAAK,WACtB,EAAe,KAAK,MAClB,KAAK,WAAa,EAAgB,EAAQ,UAAU,EAAE,QAAQ,cAAc,CAAC,CAAC,CAAC,CACzF,EAAY,GAEgB,KAAK,IAAI,CAAQ,EAAI,KAAK,IAAI,CAAU,EAC1C,MAClB,EAAW,EAAW,KAEF,KAAK,IAAI,CAAY,EAAI,KAAK,IAAI,CAAc,EAClD,MAClB,EAAe,EAAe,KAEhC,MAAM,EAAQ,EAAW,EACnB,EAAY,MAAM,QAAQ,EAAE,OAAO,OAAO,SAAS,EAAI,EAAE,OAAO,OAAO,UAAU,CAAC,EAAI,EAAE,OAAO,OAAO,UACtG,EAAY,EAAc,KAAK,IAAI,gBAAgB,kBAAkB,EAAG,CAAC,EAAI,KAC7E,EAAgB,EAAc,KAAK,IAAI,gBAAgB,YAAW,EAAK,KACvE,EAAkB,CAAC,CAAC,IAAc,IAAkB,OAAS,IAAkB,UAAY,IAAkB,WAAa,IAAkB,OAAS,IAAkB,SAAW,IAAkB,aACpM,EAAS,EAAS,SAAS,CAC/B,EAAG,GAAa,GAChB,OAAQ,GAAkC,EAAK,aAArB,cAAoD,EAC9E,YAAa,GAAsB,EAAK,aAAT,EAA4B,EAC3D,KAAM,EAAkB,EAAW,OACnC,YAAa,EAAE,OAAO,KAAK,QAC3B,QAAS,wDAA0D,EACnE,gBAAiB,CACzB,CAAO,EACK,EAAiB,EAAa,EAAQ,EACtC,EAAkB,EAAQ,iBAC9B,EAAK,QACL,EAAK,QACL,EAAK,KACL,CACR,EAOM,GANA,EAAS,SAAS,EAAO,KAAM,CAC7B,aAAc,EACd,aAAc,EAAK,OAAO,CAAC,EAC3B,UAAW,EAAgB,EAC3B,UAAW,EAAgB,CACnC,CAAO,EACG,EAAE,OAAO,MAAM,WAAW,QAAS,CACrC,MAAM,EAAS,EAAE,OAAO,MAAM,WAC9B,EAAQ,WAAW,EAAQ,EAAQ,CAAC,CACtC,CAQA,GAPA,EAAQ,mBAAmB,EAAQ,EAAG,CAAC,EACvC,KAAK,aAAa,EAAQ,KAAK,gBAAgB,EAC/C,EAAe,IAAI,CAAM,EACzB,EAAO,KAAK,CACV,MAAO,EACP,EAAG,CACX,CAAO,EACG,KAAK,UAAU,QAAS,CAC1B,MAAM,EAAgB,EAAQ,iBAC5B,EAAK,QACL,EAAK,QACL,EAAK,KACL,CACV,EACc,EAAO,KAAK,UAAU,UAAU,EAAE,WAAW,YAAY,CAAC,EAAG,CACjE,YAAa,EACb,EAAA,CACV,CAAS,EACK,EAAU,CAAC,4BAA4B,EACxC,KAAK,UAAU,SAClB,EAAQ,KAAK,qBAAqB,EAEpC,IAAI,GAAY,KAAK,UAAU,gBAAkB,EAAE,QAAQ,OAAO,CAAC,EAAI,EAAE,OAAO,MAAM,UACjF,KACH,GAAY,EAAE,OAAO,MAAM,WAE7B,MAAM,EAAI,EAAc,EAAI,KAAK,UAAU,QACrC,EAAI,EAAc,EAAI,KAAK,UAAU,QACrC,GAAS,EAAS,SAAS,CAC/B,EAAA,EACA,EAAA,EACA,KAAA,EACA,WAAY,MACZ,iBAAkB,SAClB,WAAY,KAAK,UAAU,WAC3B,WAAY,KAAK,UAAU,WAC3B,SAAU,KAAK,UAAU,SACzB,UAAW,GACX,SAAU,EAAQ,KAAK,GAAG,CACpC,CAAS,EACD,GAAO,GAAG,QAAS,KAAK,eAAe,EACvC,GAAO,KAAK,CACV,IAAK,EAAI,CACnB,CAAS,EACG,IAAe,GACjB,GAAO,KAAK,CACV,mBAAoB,GAAG,CAAC,IAAI,CAAC,GAC7B,UAAW,UAAU,CAAU,OAC3C,CAAW,EAEH,EAAe,IAAI,EAAM,CAC3B,CACA,IAAI,EAAM,EASV,GARI,KAAK,aAAe,CAAC,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,cACvD,EAAM,EAAE,OAAO,MAAM,WAAW,OAE9B,EAAE,QAAQ,cACZ,EAAM,EAAE,OAAO,MAAM,WAAW,iBAAiB,OAEnD,KAAK,QAAU,GAAO,EAAK,OAAO,OAAS,KAAO,KAAK,QACvD,KAAK,aAAa,KAAK,KAAK,OAAO,EAC/B,GAAe,EAAW,CAC5B,MAAM,EAAa,KAAK,IAAI,gBAAgB,SAAQ,EAC9C,EAAa,KAAK,WAAW,CACjC,GAAI,KACJ,WAAA,EACA,MAAA,EACA,KAAM,EAAK,IACrB,CAAS,EACD,GAAI,EAAiB,CACnB,MAAM,EAAU,KAAK,IAAI,gBAAgB,qBACvC,EAAK,QACL,EAAK,QACL,EAAK,KACL,EACA,EACA,EAAa,CACzB,EACU,EAAO,QAAQ,CAAU,EAAE,KAAK,EAAS,UAAU,EAAE,MAEnD,UAAW,CACT,KAAK,KAAK,CACR,EAAG,EACH,KAAM,OACN,OAAQ,EAAK,aAAe,cAAgB,EAC5C,eAAgB,EAAK,aAAe,EAAI,CACxD,CAAe,CACH,CACZ,CACQ,MACE,EAAO,QAAQ,CAAU,EAAE,KAAK,EAAY,UAAU,EAAE,KAAK,CAAE,eAAgB,CAAW,CAAE,CAEhG,MACE,KAAK,aAAa,EAAQ,CACxB,QAAS,EAAK,QACd,QAAS,EAAK,QACd,SAAA,EACA,WAAA,EACA,aAAA,EACA,eAAA,EACA,KAAM,EAAK,KACX,EAAA,EACA,WAAY,EACZ,aAAc,KAAK,aACnB,IAAA,EACA,mBAAoB,EAC9B,CAAS,CAEL,CACA,MAAO,CACL,EAAA,EACA,SAAA,EACA,WAAA,CACN,CACE,CASA,cAAc,EAAO,CACnB,MAAM,EAAK,KAAK,EAAE,OAAO,YAAY,UAC/B,EAAM,OAAO,EAAG,KAAQ,SAAW,EAAG,IAAM,EAC5C,EAAM,OAAO,EAAG,KAAQ,SAAW,EAAG,IAAM,IAC5C,EAAU,IAAQ,EAAM,EAAM,EAAI,EAElC,GADU,KAAK,IAAI,EAAK,KAAK,IAAI,EAAS,OAAO,CAAK,CAAC,CAAC,EACzC,IAAQ,EAAU,GACvC,OAAO,KAAK,WAAa,GAAK,KAAK,SAAW,KAAK,WACrD,CAaA,aAAa,EAAI,EAAI,EAAG,EAAY,EAAU,CAC5C,MAAM,EAAQ,EAAQ,iBAAiB,EAAI,EAAI,EAAG,CAAQ,EACpD,EAAM,EAAQ,iBAAiB,EAAI,EAAI,EAAG,CAAU,EACpD,EAAQ,EAAW,EACnB,EAAW,KAAK,IAAI,CAAK,EAAI,IAAM,EAAI,EAC7C,MAAO,KAAK,EAAM,CAAC,IAAI,EAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAQ,MAAM,EAAI,CAAC,IAAI,EAAI,CAAC,EAC9E,CAQA,UAAU,EAAM,CACd,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAK,EAAE,OAAO,YAAY,UAC1B,EAAQ,EAAG,OAAS,CAAA,EACpB,EAAI,EAAS,MAAM,CACvB,MAAO,wBACb,CAAK,EACK,EAAc,KAAK,eAAe,CAAI,EACtC,EAAS,EAAK,KAAO,EAAc,EAAI,EAAc,KAAK,OAC1D,EAAa,EAAc,SAAS,EAAG,WAAW,YAAa,EAAE,EAAI,IACrE,EAAM,OAAO,EAAG,KAAQ,SAAW,EAAG,IAAM,EAC5C,EAAM,OAAO,EAAG,KAAQ,SAAW,EAAG,IAAM,IAC5C,EAAS,IAAQ,EAAM,GAAK,EAAG,WAAW,KAAO,KAAO,KAAK,SAAW,KAAK,aAAe,EAAM,IACxG,QAAS,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,MAAM,EAAO,EAAM,CAAC,EACpB,GAAI,EAAK,OAAS,QAAU,EAAK,KAAO,OAAQ,SAChD,MAAM,EAAK,KAAK,cAAc,EAAK,IAAI,EACjC,EAAK,KAAK,cAAc,EAAK,EAAE,EAC/B,EAAS,KAAK,IAAI,EAAI,CAAE,EAAI,EAAS,EACrC,EAAO,KAAK,IAAI,EAAI,CAAE,EAAI,EAAS,EACzC,GAAI,EAAO,GAAU,EAAG,SACxB,MAAM,EAAS,EAAS,SAAS,CAC/B,EAAG,KAAK,aAAa,EAAK,QAAS,EAAK,QAAS,EAAQ,EAAQ,CAAI,EACrE,OAAQ,EAAK,OAAS,OACtB,YAAa,EACb,KAAM,OACN,cAAe,EAAG,WAAW,SAAW,OACxC,QAAS,uBACjB,CAAO,EACD,EAAO,KAAK,aAAa,kBAAmB,OAAO,CAAC,CAAC,EACrD,EAAE,IAAI,CAAM,CACd,CACA,OAAO,CACT,CAOA,UAAU,EAAM,CACd,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAK,EAAE,OAAO,YAAY,UAC1B,EAAQ,EAAG,MACX,EAAI,EAAS,MAAM,CAAE,MAAO,wBAAwB,CAAE,EACtD,EAAc,KAAK,eAAe,CAAI,EACtC,EAAS,EAAK,KAAO,EAAc,EAAI,EAAc,KAAK,OAC1D,EAAM,OAAO,EAAG,KAAQ,SAAW,EAAG,IAAM,EAC5C,EAAM,OAAO,EAAG,KAAQ,SAAW,EAAG,IAAM,IAC5C,EAAa,KAAK,IAAI,GAAI,GAAM,EAAK,EAAM,QAAU,KAAO,OAAS,EAAG,QAAU,KAAO,EAAK,EAAE,EAChG,EAAa,KAAK,IAAI,GAAI,GAAM,EAAK,EAAM,QAAU,KAAO,OAAS,EAAG,QAAU,KAAO,EAAK,CAAC,EAC/F,EAAa,CAAC,EAAO,EAAK,IAAY,CAC1C,IAAI,EAAK,EAAK,EACd,MAAM,EAAQ,KAAK,cAAc,CAAK,EAChC,GAAU,EAAM,EAAI,SAAW,KAAO,EAAM,EAC5C,EAAQ,EAAI,YAAc,SAAW,EAAS,EAAS,EACvD,EAAQ,EAAI,YAAc,SAAW,EAAS,EAAS,EACvD,EAAK,EAAQ,iBACjB,EAAK,QACL,EAAK,QACL,EACA,CACR,EACY,EAAK,EAAQ,iBACjB,EAAK,QACL,EAAK,QACL,EACA,CACR,EACY,EAAO,EAAS,SACpB,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAI,QAAU,EAAU,OAAS,QACjC,EACA,EAAI,QAAU,EAAU,EAAI,EACpC,EAEM,GADA,EAAE,IAAI,CAAI,EACN,KAAa,EAAM,EAAM,SAAW,MAAgB,EAAI,MAAO,CACjE,MAAM,GAAe,EAAI,YAAc,SAAW,EAAQ,IAAU,EAAI,YAAc,SAAW,GAAK,KAAO,EAAM,EAAM,OAAO,SAAW,KAAO,EAAM,GAClJ,EAAW,EAAQ,iBACvB,EAAK,QACL,EAAK,QACL,EACA,CACV,EACc,EAAY,OAAO,EAAM,OAAO,WAAc,WAAa,EAAM,OAAO,UAAU,CAAK,EAAI,OAAO,CAAK,EACvG,EAAS,EAAS,SAAS,CAC/B,EAAG,EAAS,EACZ,EAAG,EAAS,EACZ,KAAM,EACN,WAAY,SACZ,iBAAkB,SAClB,WAAY,EAAM,OAAO,WACzB,SAAU,EAAM,OAAO,SACvB,WAAY,EAAM,OAAO,WACzB,UAAW,EAAM,OAAO,MACxB,SAAU,6BACpB,CAAS,EACD,EAAE,IAAI,CAAM,CACd,CACF,EACA,QAAS,EAAI,EAAG,EAAI,EAAY,IAAK,CACnC,MAAM,EAAI,GAAK,EAAa,GACtB,EAAQ,EAAM,GAAK,EAAM,GAE/B,GADA,EAAW,EAAO,EAAM,OAAS,CAAA,EAAI,EAAI,EACrC,EAAI,EAAa,GAAK,EAAa,EACrC,QAAS,EAAI,EAAG,GAAK,EAAY,IAAK,CACpC,MAAM,GAAU,EAAI,GAAK,EAAa,KAAO,EAAa,GACpD,EAAa,EAAM,GAAU,EAAM,GACzC,EAAW,EAAY,EAAM,OAAS,CAAA,EAAI,EAAK,CACjD,CAEJ,CACA,OAAO,CACT,CAaA,WAAW,EAAM,CACf,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EAE9B,EADK,EAAE,OAAO,YAAY,UACjB,QAAU,CAAA,EACnB,EAAI,EAAS,MAAM,CAAE,MAAO,yBAAyB,CAAE,EAC7D,GAAI,CAAC,EAAK,QAAU,EAAK,OAAO,SAAW,EAAG,OAAO,EACrD,MAAM,EAAc,KAAK,eAAe,CAAI,EACtC,EAAY,EAAK,KAAO,EAAc,EAAI,EAAc,KAAK,OAC7D,EAAS,OAAO,EAAI,QAAW,UAAY,EAAI,OAAO,SAAS,GAAG,EAAI,EAAY,SAAS,EAAI,OAAQ,EAAE,EAAI,IAAM,OAAO,EAAI,QAAU,EAAY,GAAI,EACxJ,GAAS,EAAK,EAAI,YAAc,KAAO,EAAK,EAC5C,GAAQ,EAAK,EAAI,WAAa,KAAO,EAAK,EAC1C,EAAQ,EAAI,OAAS,OACrB,EAAK,EAAK,QACV,EAAgB,QAAQ,EAAK,EAAI,UAAY,KAAO,EAAK,CAAC,EAC1D,EAAK,EAAK,QAAU,EACpB,EAAO,KAAK,EAAK,EAAQ,CAAC,IAAI,CAAE,MAAM,EAAQ,CAAC,IAAI,EAAQ,CAAC,UAAU,EAAK,EAAQ,CAAC,IAAI,CAAE,MAAM,EAAK,EAAO,CAAC,IAAI,EAAK,CAAM,MAAM,EAAK,EAAO,CAAC,IAAI,EAAK,CAAM,KAC9J,EAAW,EAAS,SAAS,CACjC,EAAG,EACH,OAAQ,EACR,YAAa,EACb,KAAM,EACN,QAAS,+BACf,CAAK,EACD,EAAE,IAAI,CAAQ,EACd,MAAM,EAAQ,OAAO,EAAK,OAAO,CAAC,CAAC,EAC7B,EAAc,KAAK,cAAc,CAAK,EACtC,EAAiB,KAAK,aAAe,CAAC,EAAE,QAAQ,aAAe,CAAC,EAAE,QAAQ,QAC1E,EAEJ,KAAK,IAED,EAAY,OAAO,EAAI,kBAAqB,SAAW,EAAI,iBAAmB,KAAK,WAGzF,GAFA,EAAI,iBAAmB,EACD,EAAY,UAAS,GAAM,EAAE,QAAQ,gBAAkB,GAAkB,EAAE,QAAQ,cACpF,IAAc,EAAa,CAC9C,MAAM,EAAO,EAAE,KACf,EAAK,aAAa,mBAAoB,GAAG,CAAE,IAAI,CAAE,EAAE,EACnD,EAAK,aAAa,YAAa,UAAU,CAAS,GAAG,EACrD,MAAM,IAAU,EAAK,EAAI,YAAc,KAAO,OAAS,EAAG,WAAa,OAAO,EAAI,UAAU,QAAQ,GAAK,EAAI,gBAAkB,OAAO,EAAI,cAAc,KAAO,EAAK,EAAE,OAAO,MAAM,WAAW,mBAAqB,KAAO,OAAS,EAAG,QAAU,EAAE,OAAO,MAAM,WAAW,OAAS,IAC7Q,EAAK,QACL,EAAK,EAAK,EAGV,EAAO,EAFS,GAAM,EAAI,EAAK,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,EAAK,KAAK,IAAI,EAAI,EAAG,CAAC,EACzD,GAAM,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAE9C,EAAE,QAAQ,iBAAmB,OAC/B,EAAY,qBAAqB,EAAE,QAAQ,eAAe,EAC1D,EAAE,QAAQ,gBAAkB,MAE9B,MAAM,EAAU,YAAY,IAAG,EACzB,EAAQ,GAAQ,CACpB,GAAI,KAAK,EAAE,QAAQ,YAAa,CAC9B,EAAE,QAAQ,gBAAkB,KAC5B,MACF,CACA,MAAM,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAM,GAAW,CAAK,CAAC,EACpD,EAAQ,GAAa,EAAc,GAAa,EAAK,CAAC,EAC5D,EAAK,aAAa,YAAa,UAAU,CAAK,GAAG,EAC7C,EAAI,EACN,EAAE,QAAQ,gBAAkB,EAAY,sBAAsB,CAAI,EAElE,EAAE,QAAQ,gBAAkB,IAEhC,EACA,EAAE,QAAQ,gBAAkB,EAAY,sBAAsB,CAAI,CACpE,MACE,EAAE,KAAK,CACL,mBAAoB,GAAG,CAAE,IAAI,CAAE,GAC/B,UAAW,UAAU,CAAW,GACxC,CAAO,EAEH,OAAO,CACT,CAIA,WAAW,EAAM,CACf,IAAI,EACJ,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAS,KAAK,EAAE,OAAO,YAAY,UAAU,OAC7C,EAAS,EAAS,WAAW,EAAK,KAAO,CAAC,EAC1C,EAAQ,CACZ,MAAO,8BACP,GAAI,EAAK,QACT,GAAI,EAAK,QACT,EAAG,EAAK,KACR,KAAM,EAAK,IACjB,EACI,OAAI,EAAO,QAAU,EAAO,mBAC1B,EAAM,OAAS,EAAO,QAAU,cAChC,EAAM,cAAc,GAAK,EAAK,EAAO,cAAgB,KAAO,EAAK,EAC7D,EAAO,kBACT,EAAM,kBAAkB,EAAI,EAAO,kBAGvC,EAAO,KAAK,CAAK,EACV,CACT,CAOA,gBAAgB,EAAM,EAAG,EAAY,EAAc,CACjD,MAAM,EAAI,KAAK,EACT,EAAO,IAAI,GAAK,KAAK,CAAC,EACtB,EAAS,EAAQ,SAAQ,EACzB,EAAgB,EAAE,OAAO,YAAY,UAAU,OAAO,MAC5D,GAAI,EAAE,OAAO,YAAY,UAAU,OAAO,aACxC,EAAK,eAAe,CAClB,MAAO,EACP,OAAQ,EACR,MAAO,EACP,UAAW,UAAU,EAAE,QAAQ,IAAI,GAAG,CAAM,EACpD,CAAO,EACD,EAAe,eAAe,EAAE,QAAQ,IAAI,GAAG,CAAM,QAChD,CACL,MAAM,EAAW,EAAE,OAAO,YAAY,UAAU,OAAO,WACjD,EAAY,EAAE,OAAO,YAAY,UAAU,OAAO,YACxD,GAAI,IAAa,QAAU,IAAc,OAAQ,CAC/C,MAAM,EAAQ,EAAE,IAAI,MAAM,MACxB,EAEA,SAAS,EAAQ,CACf,KAAK,KACH,EAAK,QAAU,EAAO,MAAQ,EAAI,EAAE,OAAO,YAAY,UAAU,OAAO,aACxE,EAAK,QAAU,EAAO,OAAS,EAAI,EAAE,OAAO,YAAY,UAAU,OAAO,YACvF,CACU,CACV,EACQ,EAAE,IAAI,CAAK,CACb,KAAO,CACL,MAAM,EAAQ,EAAE,IAAI,MAAM,MACxB,EAEA,UAAW,CACT,KAAK,KACH,EAAK,QAAU,EAAW,EAAI,EAAE,OAAO,YAAY,UAAU,OAAO,aACpE,EAAK,QAAU,EAAY,EAAI,EAAE,OAAO,YAAY,UAAU,OAAO,YACnF,EACY,KAAK,KAAK,EAAU,CAAS,CAC/B,CACV,EACQ,EAAE,IAAI,CAAK,CACb,CACF,CACA,OAAO,CACT,CAIA,eAAe,EAAM,CACnB,MAAM,EAAI,KAAK,EACf,OAAO,EAAK,MAAQ,IAAM,SAAS,EAAE,OAAO,YAAY,UAAU,OAAO,KAAM,EAAE,GAAK,KAAO,EAAK,OAAO,OAAS,GAAK,KAAK,MAC9H,CAIA,gBAAgB,EAAG,CACjB,IAAI,EACJ,MAAM,EAEJ,EAAE,OAEE,EAAc,UAAU,EAAK,EAAO,aAAa,KAAK,IAAM,KAAO,EAAK,GAAI,EAAE,EAAI,EAClF,EAAc,KAAK,UAAU,QAC7B,EAAI,KAAK,EACX,GACF,EAAY,EAAE,WAAW,YAAY,CAAW,EAAG,CAAE,EAAA,EAAG,YAAA,CAAW,CAAE,CAEzE,CACF,CACA,MAAM,WAAiB,EAAI,CAKzB,KAAK,EAAQ,EAAa,CACxB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACpC,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,KAAK,gBAAkB,KAAK,EAAE,OAAO,YAAY,SACjD,KAAK,OAAS,EACd,KAAK,iBAAmB,EAAE,UAAU,iBACpC,KAAK,eAAiB,EAAE,UAAU,eAClC,KAAK,WAAW,cAAc,CAAM,EACpC,MAAM,EAAM,EAAS,MAAM,CACzB,MAAO,mDACb,CAAK,EACD,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,IAAI,EAAG,EACP,MAAM,EAAY,EAAE,QAAQ,YAE1B,EAAY,CAAC,EACX,EACE,CAAE,iBAAA,CAAgB,EAAK,KAAK,WAAW,cAAc,CAAS,EAC9D,EAAW,EAAS,MAAM,CAC9B,MAAO,oBACP,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAS,CAAC,EACpE,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EACD,GAAO,0BAA0B,KAAK,EAAG,EAAU,CAAS,EACxD,EAAO,CAAC,EAAE,OAAS,IACrB,KAAK,SAAW,KAAK,SAAW,GAElC,IAAI,EAAoB,EACpB,KAAK,OAAO,OAAS,IACvB,KAAK,WACL,EAAE,QAAQ,sBAAsB,CAAS,EAAE,CAAC,EAC5C,EAAoB,GAEtB,MAAM,EAAgB,KAAK,WAAW,iBAAiB,CAAS,EAC1D,CACJ,EAAG,EACH,MAAA,EAEA,EAAG,EACH,MAAA,CAER,EAAU,EACJ,IAAI,GAAY,EAAK,EAAc,WAAa,KAAO,EAAK,EACxD,GAAa,EAAK,EAAc,YAAc,KAAO,EAAK,EAC9D,MAAM,GAAa,EAAK,EAAc,YAAc,KAAO,EAAK,EAC1D,GAAa,EAAK,EAAc,YAAc,KAAO,EAAK,EAChE,EAAI,EACJ,EAAI,EACJ,MAAM,EAAmB,EAAS,MAAM,CACtC,MAAO,wBACP,iBAAkB,CAC1B,CAAO,EACK,EAAiB,EAAS,MAAM,CACpC,MAAO,mCACf,CAAO,EACD,QAAS,EAAI,EAAG,EAAI,EAAE,QAAQ,WAAY,IAAK,CAC7C,MAAM,EAAc,KAAK,WAAW,eAAe,EAAG,EAAG,CAAS,EAC5D,EAAK,KAAK,iBAAiB,CAAC,EAAE,CAAC,EAC/B,EAAK,KAAK,eAAe,CAAC,EAAE,CAAC,EACnC,IAAI,EAEF,KAEE,EAAe,KACf,EAAe,KACnB,MAAM,EAAS,CAAE,EAAG,EAAA,EAAG,YAAA,EAAa,SAAA,CAAQ,EAC5C,IAAI,EAAY,KAAK,UAIrB,GAHI,EAAE,OAAO,YAAY,IAAI,oBAC3B,EAAY,GAEV,QACF,EAAK,EAAE,OAAO,OAAO,CAAC,EAAE,OAAS,KAAO,OAAS,EAAG,CAAC,GAAO,IAC5D,MAEF,GAAI,KAAK,aAAc,CACrB,EAAe,EAAI,EACnB,KAAK,SACL,MAAM,IAAQ,EAAY,EAAY,GAAa,EACnD,IAEG,GAAM,EAAK,EAAE,OAAO,OAAO,CAAC,EAAE,OAAS,KAAO,OAAS,EAAG,CAAC,IAAM,MAAgB,EAAG,EACrF,CACA,MAAM,EAAY,KAAK,sBAAsB,CAC3C,EAAA,EACA,EAAA,EACA,aAAA,EACA,KAAA,GACA,UAAA,EACA,UAAA,EACA,cAAA,CACd,CAAa,EACD,EAAY,EAAU,UACtB,EAAe,EAAU,YAC3B,CACA,EAAQ,KAAK,kBAAkB,EAAe,CAC5C,QAAS,CAAE,EAAA,EAAG,EAAA,EAAG,UAAA,CAAS,EAC1B,UAAA,EACA,aAAA,EACA,MAAA,EACA,UAAA,EACA,GAAA,EACA,GAAA,CACZ,EAAa,CAAM,CAAC,EACV,EAAW,EAAM,QACnB,KAAO,CACD,EAAE,UAAU,aACd,GAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,EAAI,EAAE,QAAQ,MAAQ,KAAK,OAAS,EAAW,GAE/E,EAAe,EAAI,EACnB,KAAK,SACL,MAAM,IAAQ,EAAY,EAAW,GAAa,EAClD,IAEG,GAAM,EAAK,EAAE,OAAO,OAAO,CAAC,EAAE,OAAS,KAAO,OAAS,EAAG,CAAC,IAAM,MAAgB,EAAG,EACrF,CACA,MAAM,EAAY,KAAK,sBAAsB,CAC3C,EAAA,EACA,EAAA,EACA,aAAA,EACA,KAAA,GACA,SAAA,EACA,UAAA,EACA,cAAA,CACd,CAAa,EACD,EAAW,EAAU,SACrB,EAAe,EAAU,YAC3B,CACA,EAAQ,KAAK,qBAAqB,EAAe,CAC/C,QAAS,CAAE,EAAA,EAAG,EAAA,EAAG,UAAA,EAAW,kBAAA,CAAiB,EAC7C,SAAA,EACA,aAAA,EACA,MAAA,EACA,UAAA,CACZ,EAAa,CAAM,CAAC,EACV,EAAY,EAAM,SACpB,CACA,MAAM,EAAc,KAAK,WAAW,aAAa,CAC/C,aAAc,EAAM,aACpB,aAAA,EACA,MAAO,EAAM,MACb,MAAO,EAAM,MACb,UAAA,EACA,SAAA,CACV,CAAS,EACG,GACF,EAAe,IAAI,CAAW,EAEhC,EAAI,EAAM,EACV,EAAI,EAAM,EACV,MAAM,EAAW,KAAK,WAAW,iBAC/B,EACA,EACA,EACA,CACV,EACQ,KAAK,aAAa,CAChB,UAAA,EACA,SAAU,EAAS,MACnB,SAAU,EAAS,cAAgB,EAAS,MAAQ,EAAE,QAAQ,OAAO,OAAO,CAAS,EACrF,EAAA,EACA,EAAA,EACA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,SAAU,EAAM,SAChB,OAAQ,EAAM,OACd,YAAA,EACA,SAAA,EACA,OAAA,EACA,UAAA,EACA,SAAA,EACA,aAAA,EACA,aAAA,EACA,iBAAA,EACA,iBAAA,EACA,eAAA,EACA,cAAe,KAAK,SACpB,KAAM,UAChB,CAAS,CACH,CACA,EAAI,IAAI,CAAQ,CAClB,CACA,OAAO,CACT,CAEA,sBAAsB,CACpB,EAAA,EACA,EAAA,EACA,aAAA,EACA,aAAA,EACA,KAAA,EACA,KAAA,EACA,UAAA,EACA,SAAA,EACA,UAAA,EACA,UAAA,EACA,cAAA,CACJ,EAAK,CACD,IAAI,EAAI,EAAI,EAAI,EAChB,MAAM,EAAI,KAAK,EACf,IAAI,EAAW,CAAA,EACf,MAAM,GAAa,GAAM,EAAK,EAAE,QAAQ,kBAAoB,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,EACpG,GAEH,GAAM,EAAK,EAAE,OAAO,OAAO,CAAC,EAAE,OAAS,KAAO,OAAS,EAAG,CAAC,IAAM,KAAO,OAAS,EAAG,EAEjF,EAAS,MAAM,QAAQ,CAAC,EAAI,EAAE,KAAK,GAAG,EAAI,EAC1C,EAAW,EAAE,UAAU,OAAO,IAAK,GAAM,MAAM,QAAQ,CAAC,EAAI,EAAE,KAAK,GAAG,EAAI,CAAC,EAAE,QAAQ,CAAM,EAC3F,EAAkB,EAAE,UAAU,YAAY,CAAC,EAAE,UAChD,GAAO,CACN,IAAI,EACJ,OAAO,EAAG,IAAM,KAAY,EAAM,EAAG,WAAa,KAAO,OAAS,EAAI,MAAQ,CAChF,CACN,EACI,OAAI,KAAK,cACH,EAAE,OAAO,YAAY,IAAI,kBAC3B,EAAe,EAAO,EAAY,EAElC,EAAe,EAAO,EAAY,KAAK,SAAW,EAAY,EAE5D,EAAkB,IAAM,CAAC,EAAE,OAAO,YAAY,IAAI,kBACpD,EAAW,MAAM,KAEf,EAAE,UAAU,YAAY,CAAC,EAAE,CAAe,EAAE,QACtD,EACY,EAAS,QAAQ,CAAS,EAAI,KAChC,EAAY,EAAc,UAAY,EAAS,OAC/C,EAAe,EAAY,KAAK,SAAW,GAAa,IAAM,SAAS,KAAK,WAAW,UAAW,EAAE,GAAK,IAAM,EAAI,GAAa,KAAK,SAAW,EAAS,QAAQ,CAAS,GAAK,EAAY,MAI3L,EAAW,IAAM,CAAC,EAAE,UAAU,gBAAgB,SAC5C,EAAE,OAAO,YAAY,IAAI,kBAC3B,EAAe,EAAO,EAAY,EAElC,EAAe,EAAO,EAAW,KAAK,SAAW,EAAY,GAG7D,EAAkB,IAAM,CAAC,EAAE,OAAO,YAAY,IAAI,kBACpD,EAAW,MAAM,KAEf,EAAE,UAAU,YAAY,CAAC,EAAE,CAAe,EAAE,QACtD,EACY,EAAS,QAAQ,CAAS,EAAI,KAChC,EAAW,EAAc,SAAW,EAAS,OAC7C,EAAe,EAAW,KAAK,SAAW,GAAa,IAAM,SAAS,KAAK,WAAW,SAAU,EAAE,GAAK,IAAM,EAAI,GAAY,KAAK,SAAW,EAAS,QAAQ,CAAS,GAAK,EAAY,KAIvL,CACL,aAAA,EACA,aAAA,EACA,UAAA,EACA,SAAA,CACN,CACE,CAEA,qBAAqB,CACnB,QAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,EACA,aAAA,EACA,MAAA,CACJ,EAAK,CACD,IAAI,EAAI,EACR,MAAM,EAAI,KAAK,EACT,CAAE,EAAA,EAAG,EAAA,EAAG,UAAA,EAAW,kBAAA,CAAiB,EAAK,EACzC,EAAS,KAAK,OAAO,CAAiB,EACtC,EAAQ,KAAK,cAAc,EAAW,CAAC,EAC7C,IAAI,EAAK,KAAK,IAAI,EAAM,MAAO,EAAM,GAAG,EACpC,EAAK,KAAK,IAAI,EAAM,MAAO,EAAM,GAAG,EACpC,QACF,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,GAAO,OACnD,EAAK,KAAK,OAAO,CAAC,IAAM,KAAO,OAAS,EAAG,CAAC,KAAO,KACnD,EAAK,GAEL,EAAK,EAAQ,EAAK,EAClB,EAAK,EAAQ,EAAK,GAEpB,MAAM,EAAY,KAAK,IAAI,EAAK,CAAE,EAC5B,EAAQ,KAAK,WAAW,eAAe,CAC3C,aAAA,EACA,SAAA,EACA,GAAA,EACA,GAAA,EACA,YAAa,KAAK,YAClB,OAAQ,KAAK,eACb,UAAA,EACA,EAAG,EACH,EAAA,EACA,EAAA,CACN,CAAK,EACD,GAAI,CAAC,EAAE,UAAU,WACf,EAAI,EAAI,MACH,CACL,MAAM,EAAmB,KAAK,uBAAuB,CACnD,EAAA,EACA,EAAA,EACA,UAAA,EACA,SAAA,CACR,CAAO,EACD,EAAI,EAAiB,EACrB,EAAe,EAAiB,YAClC,CACA,MAAO,CACL,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,UAAA,EACA,EAAA,EACA,EAAG,EAAM,MAAQ,GAAK,EAAM,IAAM,EAAI,EAAK,EAC3C,MAAO,KAAK,WAAW,cACrB,IAEA,KACA,EACA,EACA,EACA,CACR,EACM,aAAA,CACN,CACE,CAIA,mBAAmB,EAAK,CACtB,MAAM,EAAI,KAAK,EACf,OAAI,EAAM,IACR,EAAM,GAEJ,EAAM,EAAE,OAAO,YACjB,EAAM,EAAE,OAAO,WAEV,CACT,CAEA,kBAAkB,CAChB,QAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,UAAA,EACA,UAAA,EACA,aAAA,EACA,MAAA,CACJ,EAAK,CACD,MAAM,EAAI,KAAK,EACT,CAAE,UAAA,EAAW,EAAA,CAAC,EAAK,EACnB,EAAK,KAAK,mBAAmB,EAAQ,EAAK,KAAK,cAAc,EAC7D,EAAK,KAAK,mBAAmB,EAAQ,EAAK,KAAK,cAAc,EAC7D,EAAQ,KAAK,cAAc,EAAW,CAAC,EACvC,EAAW,KAAK,IAAI,EAAK,CAAE,EAC3B,EAAQ,KAAK,WAAW,YAAY,CACxC,aAAA,EACA,UAAA,EACA,GAAA,EACA,GAAA,EACA,YAAa,KAAK,YAClB,OAAQ,KAAK,eACb,EAAG,EACH,UAAA,EACA,EAAA,EACA,EAAA,CACN,CAAK,EACD,OAAK,EAAE,UAAU,aACf,EAAI,EAAI,GAEH,CACL,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,SAAA,EACA,EAAG,EAAM,MAAQ,GAAK,EAAM,IAAM,EAAI,EAAK,EAC3C,MAAO,KAAK,WAAW,cACrB,IACA,EAEA,KACA,EACA,EACA,CACR,EACM,EAAA,CACN,CACE,CAKA,cAAc,EAAG,EAAG,CAClB,MAAM,EAAI,KAAK,EACf,MAAO,CACL,MAAO,EAAE,UAAU,iBAAiB,CAAC,EAAE,CAAC,EACxC,IAAK,EAAE,UAAU,eAAe,CAAC,EAAE,CAAC,CAC1C,CACE,CACF,CACA,SAAS,GAAU,EAAM,EAAM,CAC7B,IAAI,EAAM,EACV,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,GAAO,EAAK,CAAC,EAEf,MAAM,EAAa,EAAO,EACpB,EAAS,IAAI,MAAM,EAAK,MAAM,EACpC,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,EAAO,CAAC,EAAI,EAAK,CAAC,EAAI,EAExB,OAAO,CACT,CACA,SAAS,GAAe,EAAQ,EAAQ,EAAQ,EAAQ,CACtD,MAAM,EAAW,EAAS,EACpB,EAAQ,EAAS,EACvB,OAAO,KAAK,IACV,EAAW,EAAS,EACpB,GAAS,EAAW,EACxB,CACA,CACA,SAAS,GAAc,EAAQ,EAAQ,EAAQ,EAAQ,EAAU,EAAQ,CACvE,GAAI,IAAW,EAAG,MAAO,GACzB,MAAM,EAAe,GAAe,EAAQ,EAAQ,EAAQ,CAAM,EAC5D,EAAW,GACf,KAAK,IAAI,EAAQ,CAAQ,EACzB,KAAK,IAAI,EAAQ,CAAQ,EACzB,EAAS,EACT,CACJ,EACE,OAAO,GAAgB,CACzB,CACA,SAAS,GAAgB,EAAQ,EAAK,EAAQ,EAAQ,EAAS,EAAS,EAAO,EAAQ,CACrF,GAAI,GAAS,EAAQ,CACnB,MAAM,EAAY,EAAS,EAC3B,IAAI,EAAO,EACX,QAAS,EAAI,EAAG,EAAI,EAAQ,IAAK,CAC/B,MAAM,EAAI,EAAI,CAAC,EAAI,EACnB,EAAO,KAAK,CAAC,EAAS,EAAM,EAAU,EAAW,EAAO,CAAC,CAAC,EAC1D,GAAQ,CACV,CACF,KAAO,CACL,MAAM,EAAa,EAAS,EAC5B,IAAI,EAAO,EACX,QAAS,EAAI,EAAG,EAAI,EAAQ,IAAK,CAC/B,MAAM,EAAI,EAAI,CAAC,EAAI,EACnB,EAAO,KAAK,CAAC,EAAM,EAAS,EAAO,EAAG,EAAU,CAAU,CAAC,EAC3D,GAAQ,CACV,CACF,CACF,CACA,SAAS,GAAS,EAAM,EAAS,EAAS,EAAO,EAAQ,CACvD,MAAM,EAAS,CAAA,EACT,EAAI,EAAK,OACf,GAAI,IAAM,EAAG,OAAO,EACpB,MAAM,EAAM,IAAI,MAAM,CAAC,EACvB,IAAI,EAAS,EACT,EAAS,EACT,EAAS,IACT,EAAS,KACT,EAAI,EACR,KAAO,EAAI,GAAG,CACZ,MAAM,EAAS,KAAK,IAAI,EAAO,CAAM,EAC/B,EAAM,EAAK,CAAC,EAClB,GAAI,GAAc,EAAQ,EAAQ,EAAQ,EAAQ,EAAK,CAAM,EAC3D,EAAI,CAAM,EAAI,EACd,IACA,GAAU,EACN,EAAM,IAAQ,EAAS,GACvB,EAAM,IAAQ,EAAS,GAC3B,QACK,CAEL,GADA,GAAgB,EAAQ,EAAK,EAAQ,EAAQ,EAAS,EAAS,EAAO,CAAM,EACxE,GAAS,EAAQ,CACnB,MAAM,EAAY,EAAS,EAC3B,GAAW,EACX,GAAS,CACX,KAAO,CACL,MAAM,EAAa,EAAS,EAC5B,GAAW,EACX,GAAU,CACZ,CACA,EAAS,EACT,EAAS,EACT,EAAS,IACT,EAAS,IACX,CACF,CACA,OAAI,EAAS,GACX,GAAgB,EAAQ,EAAK,EAAQ,EAAQ,EAAS,EAAS,EAAO,CAAM,EAEvE,CACT,CACA,SAAS,GAAS,EAAM,EAAO,EAAQ,CACrC,MAAM,EAAI,EAAK,OACT,EAAO,IAAI,MAAM,CAAC,EACxB,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,IAAI,EAAI,EACR,MAAM,EAAS,EAAK,CAAC,EACrB,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IACjC,GAAK,EAAO,CAAC,EAEf,EAAK,CAAC,EAAI,CACZ,CACA,MAAM,EAAc,GAClB,GAAU,EAAM,EAAQ,CAAM,EAC9B,EACA,EACA,EACA,CACJ,EACQ,EAAU,IAAI,MAAM,CAAC,EAC3B,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAO,EAAY,CAAC,EACpB,EAAK,EAAK,CAAC,EACX,EAAK,EAAK,CAAC,EACX,EAAK,EAAK,CAAC,EAAI,EACf,EAAK,EAAK,CAAC,EAAI,EACrB,EAAQ,CAAC,EAAI,GACX,GAAU,EAAK,CAAC,EAAG,EAAK,CAAE,EAC1B,EACA,EACA,EACA,CACN,CACE,CACA,OAAO,CACT,CACA,MAAM,GAAiB,CAAE,SAAA,EAAQ,EACjC,MAAM,EAAa,CAKjB,YAAY,EAAG,EAAK,CAClB,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,YAAc,KAAK,EAAE,OAAO,OAAO,MACxC,KAAK,QAAU,IAAI,GAAe,EAAG,CAAG,EACxC,KAAK,YAAc,KAAK,EAAE,OAAO,MAAM,WAAW,iBAClD,KAAK,OAAS,CAAA,CAChB,CAIA,KAAK,EAAQ,CACX,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,EAAG,KAAK,GAAG,EACxC,EAAO,IAAI,GAAK,KAAK,CAAC,EACtB,EAAM,EAAS,MAAM,CACzB,MAAO,oBACb,CAAK,EACD,GAAI,EAAE,QAAQ,OAAQ,OAAO,EAC7B,MAAM,EAAM,CAAA,EACZ,OAAA,EAAO,QAAS,GAAM,CACpB,MAAM,EAAI,EAAE,IAAK,GACR,KAAK,IAAI,CAAC,CAClB,EACD,EAAI,KAAK,CAAC,CACZ,CAAC,EACD,KAAK,SAAW,KAAK,QAAQ,gBAAe,EAC5C,EAAE,OAAO,OAAO,QAAQ,CAAC,EAAG,IAAM,CAChC,EAAE,KAAK,QAAS,GAAM,CACf,MAAM,QAAQ,KAAK,OAAO,CAAC,CAAC,IAAG,KAAK,OAAO,CAAC,EAAI,CAAA,GACrD,KAAK,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CACzB,CAAC,CACH,CAAC,EACa,GAAe,SAC3B,EACA,EAAE,OAAO,UACT,EAAE,OAAO,UACf,EACU,QAAQ,CAAC,EAAM,IAAM,CACzB,IAAI,EACJ,MAAM,EAAW,EAAS,MAAM,CAC9B,MAAO,8CACP,WAAY,EAAQ,aAAa,EAAE,WAAW,YAAY,CAAC,CAAC,EAC5D,IAAK,EAAI,EACT,iBAAkB,CAC1B,CAAO,EAED,GADA,EAAS,qBAAqB,EAAU,0BAA0B,EAC9D,EAAE,OAAO,MAAM,WAAW,QAAS,CACrC,MAAM,EAAS,EAAE,OAAO,MAAM,WACd,IAAI,GAAQ,KAAK,CAAC,EAC1B,WAAW,EAAK,EAAQ,CAAC,CACnC,CACA,MAAM,EAAkB,EAAS,MAAM,CACrC,MAAO,wBACf,CAAO,EACK,EAAS,CACb,KAAM,IACN,KAAM,IACN,KAAM,KACN,KAAM,IACd,EACY,EAAU,EAAE,OAAO,MAAM,WACzB,EAAU,EAAQ,iBAClB,EAAiB,GAAW,EAAQ,UAAY,GAChD,EAAgB,IAAI,MAAM,EAAK,MAAM,EAAE,KAAK,CAAC,EACnD,GAAI,EAAgB,CAClB,MAAM,EAAY,EAAK,QAAU,EAC3B,EAAY,KAAK,IACrB,EAAQ,OAAS,EACjB,EAAQ,MAAQ,GAAM,CAChC,EACuB,EAAK,IAElB,CAAC,EAAG,KAAO,CAAE,EAAA,EAAG,MAAO,EAAE,CAAC,EAAI,EAAE,CAAC,IAAM,EAAE,CAAC,EAAI,EAAE,CAAC,EAAE,EAC7D,EAAU,KAEA,CAAC,EAAG,IAAM,EAAE,KAAO,EAAE,IAC/B,EACe,QAEL,CAAC,EAAM,IAAS,CACd,EAAc,EAAK,CAAC,EAAI,EAAO,CACjC,CACV,CACM,CACA,EAAK,QAAQ,CAAC,EAAG,IAAM,CACrB,MAAM,EAAK,EAAE,CAAC,EACR,EAAK,EAAE,CAAC,EACR,EAAK,EAAE,CAAC,EACR,EAAK,EAAE,CAAC,EACd,EAAO,KAAO,KAAK,IAAI,EAAO,KAAM,CAAE,EACtC,EAAO,KAAO,KAAK,IAAI,EAAO,KAAM,CAAE,EACtC,EAAO,KAAO,KAAK,IAAI,EAAO,KAAM,CAAE,EACtC,EAAO,KAAO,KAAK,IAAI,EAAO,KAAM,CAAE,EACtC,MAAM,EAAa,KAAK,QAAQ,cAC9B,EAAE,OAAO,MAAM,KACf,EACA,EACA,KAAK,QACf,EACc,EAAQ,EAAW,MACnB,EAAW,EAAK,SAAS,CAC7B,MAAA,EACA,aAAc,EACd,eAAgB,CAC1B,CAAS,EACK,EAAS,EAAS,SACtB,EACA,EACA,EAAK,EACL,EAAK,EACL,EAAE,OAAO,YAAY,QAAQ,aAC7B,OACA,EACA,KAAK,YACL,EAAE,OAAO,YAAY,QAAQ,qBAAuB,EAAQ,EAAE,QAAQ,OAAO,OAAO,CAAC,CAC/F,EACQ,EAAO,KAAK,CACV,GAAI,EACJ,GAAI,EACJ,MAAO,EACP,EAAA,EACA,EAAA,EACA,MAAO,EAAK,EACZ,OAAQ,EAAK,EACb,KAAM,CAChB,CAAS,EACD,EAAO,KAAK,UAAU,IAAI,yBAAyB,EACnD,IAAI,EAAW,CACb,EAAG,GAAM,EAAK,GAAM,EACpB,EAAG,GAAM,EAAK,GAAM,EACpB,MAAO,EACP,OAAQ,CAClB,EACQ,MAAM,EAAS,CACb,EAAG,EACH,EAAG,EACH,MAAO,EAAK,EACZ,OAAQ,EAAK,CACvB,EACQ,GAAI,EAAE,OAAO,MAAM,WAAW,SAAW,CAAC,EAAE,QAAQ,YAAa,CAC/D,IAAI,EAAQ,EACP,EAAE,QAAQ,UACb,EAAQ,EAAE,OAAO,MAAM,WAAW,OAEpC,KAAK,eACH,EACA,EACA,EACA,EACA,EAAc,CAAC,GAAK,CAChC,CACQ,CACA,GAAI,EAAE,QAAQ,YAAa,CACzB,IAAI,EAAQ,EACR,KAAK,YAAY,SAAW,EAAE,QAAQ,gBACxC,EAAQ,KAAK,YAAY,MACrB,EAAE,QAAQ,cAAc,CAAC,GAC7B,EAAE,QAAQ,cAAc,CAAC,EAAE,CAAC,GAC5B,EAAE,QAAQ,cAAc,CAAC,EAAE,CAAC,EAAE,OAC5B,EACA,EAAE,QAAQ,cAAc,CAAC,EAAE,CAAC,EAAE,MAEhC,KAAK,eAAe,EAAQ,EAAU,EAAQ,CAAK,EAEvD,CACA,IAAI,EAAW,KAAK,YAAY,CAAC,EAC7B,EAAgB,EAAE,OAAO,WAAW,UAAU,KAAK,OAAO,CAAC,EAAE,CAAC,EAAG,CACnE,MAAO,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,EAC/B,YAAa,EACb,eAAgB,EAChB,EAAA,CACV,CAAS,EACG,EAAE,OAAO,YAAY,QAAQ,WAAW,SAAW,aACrD,EAAW,SAAS,OAAO,EAAE,OAAO,WAAW,MAAM,QAAQ,EAAG,EAAE,EAClE,EAAgB,KAAK,eACnB,OAAO,CAAa,EACpB,EACA,EACA,EACA,EACA,CACZ,GAEQ,IAAI,EAAa,KACb,EAAE,WAAW,OAAO,CAAC,EAAE,CAAC,IAC1B,EAAa,KAAK,QAAQ,oBAAoB,CAC5C,KAAM,EACN,GAAI,EAAK,GAAM,EACf,GAAI,EAAK,GAAM,EAAI,KAAK,YAAc,EAAI,EAAW,EACrD,EAAA,EACA,EAAA,EACA,WAAA,EACA,SAAA,EACA,OAAA,CACZ,CAAW,GAEC,EAAE,OAAO,WAAW,SAAW,GACjC,KAAK,iBACH,EACA,EACA,EACA,EACA,EACA,EACA,CACZ,EAEQ,EAAS,IAAI,CAAM,EACf,IAAe,MACjB,EAAS,IAAI,CAAU,CAE3B,CAAC,EACD,MAAM,EAAc,EAAE,OAAO,YAAY,QAAQ,YACjD,GAAI,EAAE,OAAO,OAAO,OAAS,GAAK,GAAe,EAAY,KAAM,CACjE,MAAM,EAEJ,EAAE,OAAO,OAAO,CAAC,EAAE,MAAQ,GAE7B,GAAI,GAAS,EAAO,KAAO,KAAY,EAAO,KAAO,IAAU,CAC7D,KAAM,CACJ,QAAA,EACA,QAAA,EACA,YAAA,EACA,YAAA,EACA,aAAA,EACA,MAAA,CACZ,EAAc,EACE,EAAY,EAAM,OAAS,EAAE,OAAO,MAAM,UAC1C,EAAU,CACd,KAAM,EAAM,QAAQ,KACpB,MAAO,EAAM,QAAQ,MACrB,IAAK,EAAM,QAAQ,IACnB,OAAQ,EAAM,QAAQ,MAClC,EACgB,EAAW,EAAS,aACxB,EACA,EAAM,SACN,EAAM,UAClB,EACgB,EAAiB,EAAS,MAAQ,EAAQ,KAAO,EAAQ,MACzD,EAAkB,EAAS,OAAS,EAAQ,IAAM,EAAQ,OAC1D,EAAS,EAAO,MAAQ,GAAW,GACnC,EAAS,EAAO,MAAQ,GAAW,GACnC,EAAc,EAAS,SAC3B,EACA,EACA,EACA,EACA,EACA,EAAM,WACN,EACA,EACA,CACZ,EACgB,EAAc,EAAS,SAAS,CACpC,EAAG,EAAS,EAAQ,KACpB,EAAG,EAAS,EAAQ,MAAQ,EAAiC,GAAS,SAAW,KAAO,EAAK,GAAK,IAClG,KAAM,EACN,SAAU,EAAM,SAChB,WAAY,EAAM,WAClB,WAAY,EAAM,WAClB,UAAW,EACX,SAAU,EAAM,UAAY,EACxC,CAAW,EACD,EAAS,IAAI,CAAW,EACxB,EAAS,IAAI,CAAW,CAC1B,CACF,CACA,EAAS,IAAI,CAAe,EAC5B,EAAI,IAAI,CAAQ,CAClB,CAAC,EACM,CACT,CAMA,YAAY,EAAa,CACvB,MAAM,EAAI,KAAK,EACf,SAAS,EAAiB,EAAK,CAC7B,IAAI,EAAG,EAAQ,EACf,GAAI,MAAM,QAAQ,EAAI,CAAC,CAAC,EACtB,IAAK,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC1B,GAAS,EAAiB,EAAI,CAAC,CAAC,MAGlC,KAAK,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC1B,GAAS,EAAI,CAAC,EAAE,OAGpB,OAAO,CACT,CACA,SAAS,EAAY,EAAK,CACxB,IAAI,EAAG,EAAQ,EACf,GAAI,MAAM,QAAQ,EAAI,CAAC,CAAC,EACtB,IAAK,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC1B,GAAS,EAAY,EAAI,CAAC,CAAC,MAG7B,KAAK,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC1B,GAAS,EAGb,OAAO,CACT,CACA,MAAM,EAAmB,EAAiB,KAAK,MAAM,EAAI,EAAY,KAAK,MAAM,EAChF,SAAS,EAAS,EAAO,EAAQ,CAC/B,MAAM,EAAO,EAAQ,EACf,EAAW,KAAK,IAAI,EAAM,EAAG,EACnC,OAAO,KAAK,IACV,EAAW,EACX,SAAS,EAAE,OAAO,WAAW,MAAM,SAAU,EAAE,CACvD,CACI,CACA,OAAO,EACL,EAAY,CAAC,EAAI,EAAY,CAAC,EAC9B,EAAY,CAAC,EAAI,EAAY,CAAC,CACpC,CACE,CAUA,iBAAiB,EAAQ,EAAU,EAAM,EAAI,EAAI,EAAI,EAAI,CACvD,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAC9B,EAAW,EAAS,aAAa,EAAM,OAAO,CAAQ,CAAC,EAC7D,GAAI,EAAS,MAAQ,KAAK,EAAE,OAAO,OAAO,MAAQ,EAAI,EAAK,GAAM,EAAS,OAAS,EAAK,EAAI,CAC1F,MAAM,EAAsB,EAAS,mBAAmB,EAAO,IAAI,EACnE,EAAO,KAAK,aACV,YACA,cAAc,EAAoB,CAAC,IAAI,EAAoB,CAAC,eAAe,EAAS,OAAS,CAAC,GACtG,CACI,CACF,CAWA,eAAe,EAAM,EAAU,EAAI,EAAI,EAAI,EAAI,CAC7C,MAAM,EAAW,IAAI,EAAS,KAAK,CAAC,EAE9B,EADW,EAAS,aAAa,EAAM,OAAO,CAAQ,CAAC,EAC9B,MAAQ,KAAK,EAAE,OAAO,OAAO,MAAQ,EAAI,EAAK,GAAM,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAChH,EAAgB,EAAS,uBAAuB,CACpD,KAAA,EACA,SAAU,EACV,SAAA,CACN,CAAK,EACD,OAAI,EAAK,SAAW,EAAc,QAAU,EAAgB,EAAW,EAC9D,GAEA,CAEX,CAQA,eAAe,EAAI,EAAU,EAAQ,EAAO,EAAQ,EAAG,CACrD,MAAM,EAAa,IAAI,GAAW,KAAK,CAAC,EACxC,EAAW,YACT,EACA,EACA,EACA,EACA,IAAM,CACJ,EAAW,mBAAmB,CAAE,CAClC,EACA,CACN,CACE,CACF,CACA,MAAM,GAAe,KAAK,IAAM,EAAI,KAAK,KAAK,CAAC,GAC/C,SAAS,GAAa,EAAG,CACvB,MAAO,GAAI,KAAK,IAAI,EAAI,EAAG,CAAC,CAC9B,CACA,SAAS,GAAY,EAAG,CACtB,OAAQ,GAAM,GAAK,EAAI,GAAK,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,CACxE,CACA,SAAS,GAAe,EAAG,CACzB,OAAO,EAAI,GAAM,EAAI,EAAI,EAAI,EAAI,EAAI,KAAK,IAAI,GAAK,EAAI,EAAG,CAAC,EAAI,CACjE,CACA,MAAM,EAAK,CAKT,YAAY,EAAG,EAAK,CAClB,KAAK,IAAM,EACX,KAAK,EAAI,EACT,KAAK,UAAY,EACjB,KAAK,WAAa,KAClB,KAAK,WAAa,EAClB,KAAK,aAAe,IACtB,CAKA,KAAK,EAAQ,CACX,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,EAAG,KAAK,GAAG,EACnC,EAAM,EAAS,MAAM,CAAE,MAAO,iBAAiB,CAAE,EACvD,GAAI,EAAE,QAAQ,QAAU,CAAC,MAAM,QAAQ,CAAM,GAAK,EAAO,SAAW,EAClE,OAAO,EAET,MAAM,EAAO,EAAE,OAAO,YAAY,KAC5B,EAAS,EAAK,SAAW,SAAW,SAAW,EAAK,SAAW,UAAY,UAAY,EAAK,SAAW,OAAS,OAAS,EAAK,SAAW,UAAY,UAAY,EAAK,SAAW,MAAQ,MAAQ,UACjM,EAAa,EAAK,WAClB,EAAO,IAAe,OACtB,EAAW,IAAe,WAC1B,EAAY,EAAK,UAAY,EAAI,EAAK,UAAY,EACxD,IAAI,EAAS,EAAO,IAAK,GAAM,CAC7B,MAAM,EAAI,KAAK,IAAI,EAAQ,YAAY,CAAC,CAAC,EAAI,EAC7C,OAAO,EAAI,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,CAAC,CAAC,EAAI,CAC9C,CAAC,EACD,EAAS,KAAK,eAAe,EAAQ,EAAK,QAAQ,EAClD,MAAM,EAAQ,EAAO,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,EACxC,EAAW,IAAW,SAAW,KAAK,cAAc,EAAQ,CAAI,EAAI,IAAW,UAAY,KAAK,eAAe,EAAQ,CAAI,EAAI,IAAW,OAAS,KAAK,YAAY,EAAQ,CAAI,EAAI,IAAW,UAAY,KAAK,eAAe,CAAI,EAAI,IAAW,MAAQ,KAAK,WAAW,EAAQ,CAAI,EAAI,KAAK,eAAe,EAAQ,CAAI,EAC1T,EAAY,IAAW,QAAU,CAAC,EAAE,EAAK,MAAQ,EAAK,KAAK,OAC7D,GAAW,KAAK,eAAe,EAAK,EAAU,CAAI,EAClD,IAAW,WAAW,KAAK,iBAAiB,EAAK,CAAQ,EAC7D,MAAM,EAAO,KAAK,UACZ,EAAU,KAAK,eAAc,EAC7B,EAAQ,KAAK,KAAO,KAAK,IAAI,gBAC7B,EAAc,GAAW,CAAC,CAAC,GAAS,OAAO,EAAM,UAAa,YAAc,EAAM,SAAQ,GAAM,OAAO,EAAM,qBAAwB,WACrI,EAAO,GAAW,CAAC,GAAe,KAAK,IAAM,KAAK,IAAI,cAAgB,KACtE,EAA2B,IAAI,IAC/B,EAAW,CAAA,EACX,EAAW,EAAE,WAAW,UAAY,CAAA,EACpC,EAAY,KAAK,aAAa,EAAU,EAAM,CAAI,EACxD,IAAI,EAAS,EAsEb,GArEA,EAAS,QAAS,GAAY,CAC5B,MAAM,EAAQ,EAAE,QAAQ,OAAO,EAAQ,CAAC,GAAK,EAAE,QAAQ,OAAO,CAAC,GAAK,UAC9D,EAAW,EAAS,MAAM,CAC9B,MAAO,oBACP,WAAY,EAAQ,aAClB,EAAE,WAAW,YAAY,EAAQ,CAAC,GAAK,UAAU,EAAQ,EAAI,CAAC,EACxE,EACQ,IAAK,EAAQ,EAAI,EACjB,iBAAkB,EAAQ,CAClC,CAAO,EACK,EAAQ,EAAc,EAAM,oBAAoB,EAAQ,CAAC,EAAI,KAC7D,EAAU,EAAS,EAAQ,CAAC,EAoDlC,GAnDA,EAAQ,KAAK,QAAQ,CAAC,EAAG,IAAM,CAC7B,MAAM,EAAQ,EAAU,EAAQ,CAAC,EAAI,OAC/B,EAAU,GAAS,OAAO,GAAU,UAAY,EAAM,UAAY,EAAM,UAAY,EACpF,EAAK,EAAE,GAAK,KAAO,EAAE,EAAI,EAAY,KAAK,gBAAgB,KAAK,aAAa,CAAK,EAAG,CAAS,EAAI,EACjG,EAAK,KAAK,SAAS,EAAU,EAAM,EAAI,EAAS,EAAQ,EAAG,CAAC,EAClE,EAAS,IAAI,CAAE,EACf,IAAI,EACJ,GAAI,EAAU,CACZ,MAAM,EAAK,GAAS,OAAO,GAAU,SAAW,EAAM,IAAM,KAAO,EAAM,GAAK,EAAM,KAAO,OAC3F,EAAM,GAAM,KAAO,MAAM,CAAE,GAAK,KAAK,CAAM,EAC7C,MAAW,EACT,EAAM,OAAO,CAAM,EACV,EAAE,MAAQ,KACnB,EAAM,QAAQ,EAAE,IAAI,GAEpB,EAAM,GAAG,EAAQ,CAAC,IAAI,CAAC,GAIzB,GAFA,IACA,EAAS,IAAI,EAAK,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,EAAG,KAAM,EAAS,EAAG,CAAE,CAAE,EACtD,EAAS,CACX,MAAM,EAAO,GAAQ,EAAK,IAAI,CAAG,EAC3B,EAAS,GAAQ,EACjB,EAAQ,EAAK,QAAU,EAAK,OAAO,OAAS,QAC5C,EAAU,GAAa,IAAU,QAAU,IAAU,OACrD,EAAM,EAAS,EAAO,EAAI,EAAU,EAAE,EAAI,EAAQ,GAClD,EAAM,EAAS,EAAO,EAAI,IAAU,QAAU,CAAC,EAAY,EAAE,EAAI,GAAK,EAAU,EAAE,EAAI,EAAQ,GACpG,EAAG,KAAK,MAAM,QAAU,EAAS,IAAM,IACvC,KAAK,UAAU,EAAG,KAAM,EAAM,EAAK,CAAG,EACtC,EAAS,KAAK,CACZ,KAAM,EAAG,KACT,EAAG,EAAE,EACL,EAAG,EAAE,EACL,IAAA,EACA,IAAA,EAIA,GAAI,GAAQ,EAAK,GAAK,KAAO,EAAK,EAAI,EACtC,GAAI,EAGJ,MAAO,EAAO,EAAK,KAAO,EAC1B,MAAO,EACP,MAAO,EAEP,QAAS,CAAC,CACtB,CAAW,CACH,MACE,KAAK,UAAU,EAAG,KAAM,EAAM,EAAE,EAAG,EAAE,CAAC,CAE1C,CAAC,GACI,IAAW,WAAa,IAAW,WAAa,IAAc,EAAK,eAAiB,EAAK,cAAc,MAAQ,EAAO,EAAQ,CAAC,EAAI,EAAG,CACzI,MAAM,EAAa,EAAY,KAAK,WAAa,EACjD,KAAK,kBAAkB,EAAU,EAAS,EAAO,EAAQ,CAAC,EAAG,EAAY,EAAM,CAAK,CACtF,CACA,EAAI,IAAI,CAAQ,CAClB,CAAC,EACG,EAAM,CACR,MAAM,EAAQ,KAAK,cAAc,EAAM,EAAU,CAAI,EACrD,GAAI,EAAM,OAAQ,CAChB,MAAM,EAAY,EAAS,MAAM,CAAE,MAAO,uBAAuB,CAAE,EACnE,EAAI,IAAI,CAAS,EACjB,KAAK,UAAU,EAAW,EAAO,CAAI,CACvC,CACF,CACA,OAAI,KAAK,MAAK,KAAK,IAAI,cAAgB,GACnC,GAAW,EAAS,QACtB,KAAK,WAAW,CAAQ,EAEnB,CACT,CAQA,eAAe,EAAQ,EAAU,CAC/B,MAAM,EAAQ,EAAO,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,EAC9C,GAAI,CAAC,GAAY,GAAY,GAAK,GAAS,EAAU,OAAO,EAC5D,MAAM,EAAQ,EAAW,EACzB,eAAQ,KACN,4BAA4B,CAAK,2BAA2B,CAAQ,+IAC1E,EACW,EAAO,IAAK,GAAM,EAAI,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,EAAI,CAAK,CAAC,EAAI,CAAC,CACzE,CAQA,eAAe,EAAQ,EAAM,CAC3B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAa,EAAK,eAAiB,EAAK,cAAc,KAAO,GAAK,EAClE,EAAU,EAAO,IAAI,CAAC,EAAG,IAAM,CAAC,EAAE,OAAQ,GAAM,EAAO,CAAC,EAAI,CAAC,EAC7D,EAAK,KAAK,IAAI,EAAG,EAAQ,MAAM,EAC/B,EAAS,IAAI,MAAM,EAAO,MAAM,EAAE,KAAK,EAAE,EAC/C,EAAQ,QAAQ,CAAC,EAAG,IAAM,EAAO,CAAC,EAAI,CAAC,EACvC,MAAM,EAAQ,EAAK,EACb,EAAS,EAAK,EACd,EAAW,KAAK,IAAI,EAAG,GAAG,CAAM,EAChC,EAAM,KAAK,IAAI,EAAO,CAAM,EAAI,IAChC,EAAS,KAAK,IAAI,EAAG,KAAK,IAAI,EAAO,CAAM,EAAI,EAAI,CAAG,EACtD,EAAO,KAAK,aAAa,EAAM,EAAQ,CAAQ,EACrD,KAAK,UAAY,KAAK,mBAAmB,EAAM,CAAI,EACnD,MAAM,EAAO,KAAK,UACZ,EAAK,EAAa,EAAS,EAC3B,EAAU,EAAO,IAAK,GAAM,EAAO,KAAK,KAAK,KAAK,IAAI,EAAG,CAAC,CAAC,EAAI,CAAI,EACnE,EAAc,GAAM,EAAO,CAAC,GAAK,EAAI,GAAS,EAAO,CAAC,EAAI,IAAO,EAAK,EAC5E,IAAI,EAAU,EAAO,IAAI,CAAC,EAAG,IAAM,EAAW,CAAC,CAAC,EAChD,MAAM,EAAW,EAAQ,IAAK,GAAM,EAAQ,CAAC,CAAC,EAC9C,IAAI,EAAU,GACd,QAAS,EAAI,EAAG,EAAI,EAAI,IACtB,GAAI,EAAQ,EAAQ,CAAC,CAAC,EAAI,EAAQ,EAAQ,EAAI,CAAC,CAAC,EAAI,EAAS,CAAC,EAAI,EAAS,EAAI,CAAC,EAAG,CACjF,EAAU,GACV,KACF,CAEF,GAAI,EAAS,CACX,MAAM,EAAM,KAAK,IAAI,EAAI,EAAM,CAAC,EAC1B,EAAS,EAAS,OAAO,CAAC,EAAG,IAAM,EAAI,EAAI,EAAG,CAAC,EAAI,GAAO,EAAK,GACrE,IAAI,EACJ,GAAI,GAAU,EAAI,CAChB,IAAI,GAAK,EAAK,GAAU,EACxB,EAAa,EAAS,IAAK,GAAM,CAC/B,MAAM,EAAI,EAAI,EACd,OAAA,GAAK,EAAI,EAAI,EACN,CACT,CAAC,CACH,SAAW,IAAO,EAChB,EAAa,CAAC,EAAK,CAAC,MACf,CACL,MAAM,EAAK,EAAS,CAAC,EACf,EAAK,EAAK,EAAS,EAAK,CAAC,EAC/B,EAAa,EAAS,IAAI,CAAC,EAAG,IAAM,GAAM,EAAK,GAAM,GAAK,EAAK,EAAE,CACnE,CACA,EAAU,EAAO,IACf,CAAC,EAAG,IAAM,EAAO,CAAC,GAAK,EAAI,EAAW,EAAO,CAAC,CAAC,EAAI,EAAK,CAChE,CACI,CACA,OAAO,EAAO,IAAI,CAAC,EAAG,KAAO,CAC3B,EAAA,EACA,GAAI,EAAQ,CAAC,EACb,GAAA,EACA,OAAQ,EAAQ,CAAC,EACjB,KAAM,KAAK,QAAQ,EAAQ,CAAC,EAAG,EAAI,EAAG,EAAM,CAAC,CACnD,EAAM,CACJ,CAQA,cAAc,EAAQ,EAAM,CAC1B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAa,EACb,EAAQ,KAAK,IAAI,EAAG,EAAO,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,CAAC,EACrD,EAAS,KAAK,IAClB,EACA,KAAK,IAAI,EAAI,EAAK,CAAU,EAAI,EAAI,KAAK,IAAI,EAAI,CAAE,EAAI,GAC7D,EACU,EAAO,KAAK,aAAa,EAAM,EAAQ,CAAK,EAClD,KAAK,UAAY,KAAK,mBAAmB,EAAM,CAAI,EACnD,MAAM,EAAK,EAAK,EACV,EAAK,GAAc,EAAK,GAAc,EACtC,EAAQ,EAAO,IAAI,CAAC,EAAG,IAAM,CAAC,EAChC,EAAK,cAAgB,IACvB,EAAM,KAAK,CAAC,EAAG,IAAM,EAAO,CAAC,EAAI,EAAO,CAAC,CAAC,EAE5C,MAAM,EAAW,EAAO,IAAI,CAAC,EAAG,KAAO,CACrC,EAAA,EACA,GAAA,EACA,GAAA,EACA,OAAQ,EAAO,KAAK,KAAK,CAAK,EAAI,KAAK,UAEvC,KAAM,CAAA,CACZ,EAAM,EACF,IAAI,EAAK,EACT,OAAA,EAAM,QAAS,GAAS,CACtB,QAAS,EAAI,EAAG,EAAI,EAAO,CAAI,EAAG,IAAK,CACrC,MAAM,EAAI,EAAO,KAAK,KAAK,EAAK,EAAG,EAC7B,EAAQ,EAAK,GACnB,EAAS,CAAI,EAAE,KAAK,KAAK,CACvB,EAAG,EAAK,EAAI,KAAK,IAAI,CAAK,EAC1B,EAAG,EAAK,EAAI,KAAK,IAAI,CAAK,EAC1B,KAAM,CAChB,CAAS,EACD,GACF,CACF,CAAC,EACM,CACT,CAaA,WAAW,EAAQ,EAAM,CACvB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAQ,KAAK,IAAI,EAAG,EAAO,OAAO,CAAC,EAAG,IAAO,EAAI,EAAI,CAAC,CAAC,EACvD,EAAO,EAAK,KAAO,CAAA,EACnB,EAAW,OAAO,EAAK,YAAe,SAAW,EAAK,WAAa,IACnE,EAAS,OAAO,EAAK,UAAa,SAAW,EAAK,SAAW,GAC7D,EAAK,EAAW,KAAK,GAAK,IAC1B,EAAK,EAAS,KAAK,GAAK,IACxB,EAAO,EAAK,GAAM,KAAK,GACvB,EAAa,KAAK,IACtB,EACA,KAAK,IAAI,IAAM,OAAO,EAAK,kBAAqB,SAAW,EAAK,iBAAmB,EAAG,CAC5F,EACU,EAAM,GAAM,KAAK,IAAI,CAAC,EACtB,EAAM,GAAM,CAAC,KAAK,IAAI,CAAC,EACvB,EAAI,KAAK,WAAW,EAAI,CAAE,EAC1B,EAAM,KAAK,IAAI,EAAI,CAAE,EAAI,IACzB,EAAO,KAAK,IAAI,KAAM,EAAE,KAAO,EAAE,IAAI,EACrC,EAAO,KAAK,IAAI,KAAM,EAAE,KAAO,EAAE,IAAI,EACrC,EAAK,KAAK,IAAI,EAAG,KAAK,KAAK,EAAK,EAAI,GAAO,GAAO,EAAK,EAAI,GAAO,CAAI,CAAC,EACvE,EAAK,EAAK,EACV,EAAK,EAAK,GAAK,EAAE,KAAO,EAAE,MAAQ,EAAI,EACtC,EAAK,EAAK,GAAK,EAAE,KAAO,EAAE,MAAQ,EAAI,EACtC,EAAQ,KAAK,aAAa,EAAO,EAAI,EAAI,EAAM,CAAI,EACzD,KAAK,UAAY,EAAM,KACvB,MAAM,EAAQ,CAAA,EACd,QAAS,EAAI,EAAG,EAAI,EAAM,EAAG,IAAK,CAChC,MAAM,EAAM,EAAM,MAAM,CAAC,EACnB,EAAI,EAAM,YAAY,CAAC,EAC7B,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,IAAM,GAAK,EAAK,GAAM,EAAI,EAAK,GAAQ,EAAI,IAAO,EAC5D,EAAM,KAAK,CAAE,EAAA,EAAG,EAAG,EAAK,EAAM,EAAG,CAAC,EAAG,EAAG,EAAK,EAAM,EAAG,CAAC,CAAC,CAAE,CAC5D,CACF,CACA,EAAM,KAAK,CAAC,EAAI,IAAO,EAAG,EAAI,EAAG,CAAC,EAClC,MAAM,EAAW,EAAO,IAAI,CAAC,EAAG,KAAO,CACrC,EAAA,EACA,GAAA,EACA,GAAA,EACA,OAAQ,EAER,KAAM,CAAA,CACZ,EAAM,EACF,IAAI,EAAK,EACL,EAAO,EACX,OAAA,EAAM,QAAQ,CAAC,EAAG,IAAS,CACzB,KAAO,EAAK,EAAO,QAAU,GAAQ,EAAO,CAAE,GAC5C,IACA,EAAO,EAEL,GAAM,EAAO,SACjB,EAAS,CAAE,EAAE,KAAK,KAAK,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,EAAG,KAAA,CAAI,CAAE,EAC/C,IACF,CAAC,EACM,CACT,CAQA,WAAW,EAAI,EAAI,CACjB,MAAM,EAAM,GAAM,KAAK,IAAI,CAAC,EACtB,EAAM,GAAM,CAAC,KAAK,IAAI,CAAC,EACvB,EAAK,KAAK,IAAI,EAAI,CAAE,EACpB,EAAK,KAAK,IAAI,EAAI,CAAE,EACpB,EAAK,CAAC,EAAG,EAAG,CAAE,EAAG,EAAG,CAAE,CAAC,EACvB,EAAK,CAAC,EAAG,EAAG,CAAE,EAAG,EAAG,CAAE,CAAC,EACvB,EAAI,KAAK,GAAK,EACpB,QAAS,EAAI,KAAK,KAAK,EAAK,CAAC,EAAG,EAAI,GAAK,EAAI,IAC3C,EAAG,KAAK,EAAG,EAAI,CAAC,CAAC,EACjB,EAAG,KAAK,EAAG,EAAI,CAAC,CAAC,EAEnB,MAAO,CACL,KAAM,KAAK,IAAI,GAAG,CAAE,EACpB,KAAM,KAAK,IAAI,GAAG,CAAE,EACpB,KAAM,KAAK,IAAI,GAAG,CAAE,EACpB,KAAM,KAAK,IAAI,GAAG,CAAE,CAC1B,CACE,CAWA,aAAa,EAAO,EAAI,EAAI,EAAM,EAAM,CACtC,MAAM,EAAU,EAAK,QAAU,EAAI,EAAK,QAAU,KAC5C,EAAU,KAAK,IAAI,CAAI,GAAK,KAAK,GACjC,EAAQ,KAAK,aAAa,CAAI,EAC9B,EAAS,GAAM,CACnB,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,CAAC,CAAC,EAC7B,MAAM,EAAQ,CAAA,EACd,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,EAAM,KAAK,IAAM,GAAK,EAAK,GAAM,EAAI,GAAM,EAAK,IAAO,GAAK,EAAI,GAAG,EAErE,MAAM,EAAY,EAAM,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,GAAK,EAChD,EAAM,EAAM,IAAK,GAAQ,EAAQ,EAAM,CAAS,EAChD,EAAc,EAAI,IAAK,GAAM,KAAK,MAAM,CAAC,CAAC,EAChD,IAAI,EAAO,EAAQ,EAAY,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,EAOxD,IANA,EAAI,IAAI,CAAC,EAAG,KAAS,CAAE,IAAA,EAAK,KAAM,EAAI,KAAK,MAAM,CAAC,CAAC,EAAG,EAAE,KAAK,CAAC,EAAG,IAAO,EAAG,KAAO,EAAE,IAAI,EAAE,QAAS,GAAM,CACnG,EAAO,IACT,EAAY,EAAE,GAAG,IACjB,IAEJ,CAAC,EACM,EAAO,GACZ,EAAY,EAAI,CAAC,IACjB,IAEF,MAAM,EAAc,IAAM,EAAI,EAAK,GAAM,GAAM,EAAK,IAAO,EAAI,GAC/D,IAAI,EAAc,IAClB,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,EAAY,CAAC,EACvB,GAAI,GAAK,EAAG,SACZ,MAAM,EAAW,EAAM,CAAC,EAAI,EAAU,EAClC,EAAW,IAAa,EAAc,EAC5C,CACA,MAAM,EAAQ,KAAK,IAAI,EAAa,CAAW,EAC/C,MAAO,CAAE,EAAA,EAAG,MAAA,EAAO,YAAA,EAAa,KAAM,KAAK,IAAI,EAAG,GAAS,EAAI,EAAQ,CAAC,CAC1E,EACM,EAAU,EAAK,KAAO,EAAK,IAAI,KACrC,IAAI,EACJ,GAAI,OAAO,GAAY,UAAY,GAAW,EAC5C,EAAM,EAAM,CAAO,UACV,EAAO,CAChB,MAAM,EAAQ,EAAI,EAAQ,EAC1B,EAAM,GAAO,EAAK,GAAM,EAAQ,CAAC,CACnC,KAAO,CACL,MAAM,EAAO,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,KAAK,KAAK,KAAK,KAAK,CAAK,CAAC,EAAI,CAAC,CAAC,EACtE,EAAM,EAAM,CAAC,EACb,QAAS,EAAI,EAAG,GAAK,EAAM,IAAK,CAC9B,MAAM,EAAO,EAAM,CAAC,EAChB,EAAK,KAAO,EAAI,OAAM,EAAM,EAClC,CACF,CACA,OAAI,IAAO,EAAI,KAAO,GACf,CACT,CAWA,eAAe,EAAQ,EAAM,CAC3B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAW,CAAC,EAAE,EAAK,eAAiB,EAAK,cAAc,MACvD,EAAc,GAAY,EAAK,cAAc,WAAa,SAC1D,EAAS,GAAY,CAAC,EAAc,GAAK,EACzC,EAAU,EAAO,IAAI,CAAC,EAAG,IAAM,CAAC,EAAE,OAAQ,GAAM,EAAO,CAAC,EAAI,CAAC,EAC7D,EAAK,KAAK,IAAI,EAAG,EAAQ,MAAM,EAC/B,EAAS,IAAI,MAAM,EAAO,MAAM,EAAE,KAAK,EAAE,EAC/C,EAAQ,QAAQ,CAAC,EAAG,IAAM,EAAO,CAAC,EAAI,CAAC,EACvC,MAAM,EAAQ,EAAK,EACb,EAAO,EAAQ,IACf,EAAY,KAAK,IAAI,EAAG,EAAK,GAAI,GAAK,EAAc,GAAK,GACzD,EAAS,KAAK,IAAI,EAAG,EAAK,EAAS,CAAS,EAC5C,EAAW,KAAK,IAAI,EAAG,GAAG,CAAM,EAChC,EAAU,EAAK,QAAU,EAAI,EAAK,QAAU,EAC5C,EAAU,EAAK,QAAU,EAAK,QAAQ,KAAO,OACnD,IAAI,EACA,EAAK,QAAU,SAAW,IAAY,OACxC,EAAQ,KACC,EAAK,QAAU,SAAW,OAAO,GAAY,UAAY,EAAU,EAC5E,EAAQ,EAER,EAAQ,KAAK,aAAa,CAAI,EAEhC,IAAI,EAAO,EACP,EAAQ,EACZ,GAAI,EAAO,CACT,EAAQ,EAAI,EAAQ,EACpB,KAAK,UAAY,EACjB,MAAM,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM,EAAS,CAAK,CAAC,EAChD,EAAiB,KAAK,IAAI,EAAG,KAAK,MAAM,EAAO,CAAK,CAAC,EAC3D,EAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAgB,KAAK,KAAK,EAAW,CAAO,CAAC,CAAC,CAC5E,KAAO,CACL,IAAI,EAAO,EACX,MAAM,EAAU,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,KAAK,MAAM,EAAO,CAAC,CAAC,CAAC,EAC9D,QAAS,EAAI,EAAG,GAAK,EAAS,IAAK,CACjC,MAAM,EAAO,KAAK,KAAK,EAAW,CAAC,EAC7B,EAAI,KAAK,IAAI,EAAO,EAAG,EAAS,CAAI,EACtC,EAAI,IACN,EAAO,EACP,EAAO,EAEX,CACA,EAAQ,EACR,KAAK,UAAY,KAAK,IAAI,EAAG,GAAS,EAAI,EAAQ,CACpD,CACA,MAAM,EAAI,KAAK,UACT,EAAU,KAAK,KAAK,EAAW,CAAI,EACnC,EAAc,KAAK,IAAI,EAAQ,EAAU,CAAK,EAC9C,EAAS,GAAU,EAAS,GAAe,EACjD,OAAO,EAAO,IAAI,CAAC,EAAG,IAAM,CAC1B,MAAM,EAAK,EAAO,CAAC,GAAK,EAAI,GAAS,EAAO,CAAC,EAAI,IAAO,EAAK,EAEvD,EADO,KAAK,KAAK,KAAK,IAAI,EAAG,CAAC,EAAI,CAAI,EACxB,EACd,EAAO,EAAK,EAAO,EAAQ,EAAI,EAAQ,EACvC,EAAO,CAAA,EACb,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAS,KAAK,MAAM,EAAI,CAAI,EAC5B,EAAS,EAAI,EACnB,EAAK,KAAK,CACR,EAAG,EAAO,EAAS,EACnB,EAAG,EAAS,EAAI,EAAS,CACnC,CAAS,CACH,CACA,MAAO,CACL,EAAA,EACA,GAAA,EACA,GAAI,EAAS,EAAO,EACpB,OAAQ,EAAO,EAGf,KAAM,GACN,KAAA,CACR,CACI,CAAC,CACH,CAeA,YAAY,EAAQ,EAAM,CACxB,GAAI,EAAK,MAAQ,EAAK,KAAK,MAAO,OAAO,KAAK,iBAAiB,EAAQ,CAAI,EAC3E,KAAK,WAAa,KAClB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAO,EAAK,MAAQ,CAAA,EACpB,EAAO,KAAK,IAAI,EAAG,KAAK,MAAM,EAAK,QAAU,EAAI,EAAK,QAAU,EAAE,CAAC,EACnE,EAAW,EAAK,WAAa,MAAQ,MAAQ,SAC7C,EAAQ,EAAK,MAAQ,EAAI,KAAK,kBAAkB,EAAQ,KAAK,MAAM,EAAK,KAAK,CAAC,EAAI,EAAO,MAAK,EAC9F,EAAa,EAAM,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,EAC5C,EAAO,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,IAAI,EAAG,CAAU,EAAI,CAAI,CAAC,EAC5D,EAAa,EACb,EAAU,EAAK,QAAU,EAAI,EAAK,QAAU,EAC5C,EAAS,KAAK,IAAI,EAAG,CAAE,EACvB,EAAS,KAAK,IAAI,EAAG,EAAK,CAAU,EACpC,EAAQ,KAAK,aAAa,CAAI,EACpC,IAAI,EAAQ,EACR,GACF,EAAQ,EAAI,EAAQ,EACpB,KAAK,UAAY,IAEjB,EAAQ,KAAK,IAAI,EAAS,EAAM,EAAS,CAAI,EAC7C,KAAK,UAAY,KAAK,IAAI,EAAG,GAAS,EAAI,EAAQ,GAEpD,MAAM,EAAS,EAAO,EAChB,EAAS,EAAO,EAChB,GAAW,EAAK,GAAU,EAAI,EAAQ,EACtC,EAAO,GAAc,EAAS,GAAU,EACxC,EAAQ,GAAW,IAAa,SAAW,EAAO,EAAS,EAAQ,EAAI,EAAS,EAAQ,EAAO,EAAQ,EAAI,EAAS,EACpH,EAAW,EAAO,IAAI,CAAC,EAAG,KAAO,CACrC,EAAA,EACA,GAAI,EAAK,EACT,GAAI,EAAa,EAAS,EAC1B,OAAQ,KAAK,IAAI,EAAQ,CAAM,EAAI,EAEnC,KAAM,CAAA,CACZ,EAAM,EACF,IAAI,EAAI,EACR,QAAS,EAAK,EAAG,EAAK,EAAM,OAAQ,IAClC,QAAS,EAAI,EAAG,EAAI,EAAM,CAAE,EAAG,IAAK,CAClC,MAAM,EAAM,EAAI,EACV,EAAS,KAAK,MAAM,EAAI,CAAI,EAClC,EAAS,CAAE,EAAE,KAAK,KAAK,CACrB,EAAG,EAAU,EAAM,EACnB,EAAG,EAAK,CAAM,EACd,KAAM,CAChB,CAAS,EACD,GACF,CAEF,OAAO,CACT,CAeA,iBAAiB,EAAQ,EAAM,CAC7B,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAO,EAAK,MAAQ,CAAA,EACpB,EAAO,KAAK,IAAI,EAAG,KAAK,MAAM,EAAK,QAAU,EAAI,EAAK,QAAU,EAAE,CAAC,EACnE,EAAW,EAAK,WAAa,MAAQ,MAAQ,SAC7C,EAAe,KAAK,IAAI,EAAG,KAAK,MAAM,EAAK,MAAQ,EAAI,EAAK,MAAQ,GAAG,CAAC,EACxE,EAAc,KAAK,IAAI,EAAG,KAAK,KAAK,EAAe,CAAI,CAAC,EACxD,EAAU,EAAO,IAAI,CAAC,EAAG,IAAM,CAAC,EAAE,OAAQ,GAAM,EAAO,CAAC,EAAI,CAAC,EAC7D,EAAI,KAAK,IAAI,EAAG,EAAQ,MAAM,EAC9B,EAAQ,EAAK,IAAM,EAAI,EAAK,IAAM,KAAK,IAAI,EAAG,GAAG,CAAM,EACvD,EAAW,KAAK,IACpB,EACA,KAAK,MAAM,EAAK,YAAc,EAAI,EAAK,YAAc,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAClF,EACU,EAAW,KAAK,IAAI,EAAG,KAAK,KAAK,EAAI,CAAQ,CAAC,EAC9C,EAAW,EAAE,EAAK,eAAiB,EAAK,cAAc,OAAS,IAC/D,EAAc,GAAY,EAAK,eAAiB,EAAK,cAAc,WAAa,SAChF,EAAU,GAAY,CAAC,EAAc,GAAK,EAC1C,EAAU,GAAY,EAAc,GAAK,EACzC,EAAQ,EAAK,EACb,EAAQ,EAAK,EACb,EAAa,KAAK,IAAI,EAAG,EAAQ,GAAI,EACrC,EAAa,KAAK,IAAI,EAAG,EAAQ,EAAU,CAAO,EAClD,EAAU,EAAK,QAAU,EAAI,EAAK,QAAU,EAC5C,EAAQ,KAAK,aAAa,CAAI,EACpC,IAAI,EAAQ,EACR,GACF,EAAQ,EAAI,EAAQ,EACpB,KAAK,UAAY,IAEjB,EAAQ,KAAK,IAAI,EAAa,EAAM,EAAa,CAAW,EAC5D,KAAK,UAAY,KAAK,IAAI,EAAG,GAAS,EAAI,EAAQ,GAEpD,MAAM,EAAS,EAAO,EAChB,EAAS,EAAc,EACvB,EAAO,CAAC,EAAM,IAAW,IAAa,SAAW,EAAO,EAAS,EAAQ,EAAI,EAAS,EAAQ,EAAO,EAAQ,EAAI,EAAS,EAC1H,EAAQ,CAAA,EACR,EAAW,CAAA,EACjB,OAAA,EAAQ,QAAQ,CAAC,EAAI,IAAM,CACzB,MAAM,EAAK,EAAI,EACT,EAAK,KAAK,MAAM,EAAI,CAAQ,EAC5B,EAAQ,EAAK,EACb,EAAW,EAAK,EAChB,EAAU,GAAS,EAAQ,GAAU,EAAI,EAAQ,EACjD,EAAO,EAAW,GAAW,EAAa,GAAU,EACpD,EAAU,IAAO,CACrB,EAAG,EAAU,EAAI,EAAO,EACxB,EAAG,EAAK,EAAM,KAAK,MAAM,EAAI,CAAI,CAAC,CAC1C,GACM,QAAS,EAAI,EAAG,EAAI,EAAc,IAAK,EAAM,KAAK,EAAO,CAAC,CAAC,EAC3D,MAAM,EAAS,KAAK,IAClB,EACA,KAAK,IAAI,EAAc,KAAK,MAAM,EAAO,CAAE,EAAI,EAAQ,CAAY,CAAC,CAC5E,EACY,EAAO,CAAA,EACb,QAAS,EAAI,EAAG,EAAI,EAAQ,IAAK,CAC/B,MAAM,GAAI,EAAO,CAAC,EAClB,EAAK,KAAK,CAAE,EAAG,GAAE,EAAG,EAAG,GAAE,EAAG,KAAM,EAAI,EAAe,CAAC,CAAE,CAC1D,CACA,EAAS,KAAK,CACZ,EAAG,EACH,GAAI,EAAQ,EAAQ,EACpB,GAAI,EAAO,EAAS,EACpB,OAAQ,EAAS,EAEjB,KAAM,GACN,MAAO,GACP,KAAA,CACR,CAAO,CACH,CAAC,EACD,KAAK,WAAa,EAClB,KAAK,WAAa,CAAE,MAAO,CAAK,EACzB,CACT,CASA,eAAe,EAAK,EAAU,EAAM,CAClC,MAAM,EAAQ,KAAK,WACnB,GAAI,CAAC,GAAS,CAAC,EAAM,OAAS,CAAC,EAAM,MAAM,OAAQ,OACnD,MAAM,EAAI,KAAK,UAET,GADO,EAAK,MAAQ,CAAA,GACF,YAAc,yBAChC,EAAI,EAAS,MAAM,CAAE,MAAO,uBAAuB,CAAE,EAC3D,EAAM,MAAM,QAAS,GAAM,CACzB,IAAI,EACJ,GAAI,EAAK,QAAU,SAAU,CAC3B,MAAM,EAAO,EAAI,EACjB,EAAK,EAAS,SAAS,EAAG,EAAG,EAAM,EAAM,EAAK,cAAgB,EAAG,EAAY,EAAG,EAAG,MAAM,EACzF,EAAG,KAAK,aAAa,OAAQ,CAAU,EACvC,EAAG,KAAK,aAAa,IAAK,OAAO,EAAE,EAAI,CAAC,CAAC,EACzC,EAAG,KAAK,aAAa,IAAK,OAAO,EAAE,EAAI,CAAC,CAAC,CAC3C,MACE,EAAK,EAAS,WAAW,EAAG,CAAE,KAAM,EAAY,eAAgB,EAAG,OAAQ,MAAM,CAAE,EACnF,EAAG,KAAK,aAAa,OAAQ,CAAU,EACvC,EAAG,KAAK,aAAa,KAAM,OAAO,EAAE,CAAC,CAAC,EACtC,EAAG,KAAK,aAAa,KAAM,OAAO,EAAE,CAAC,CAAC,EAExC,EAAG,KAAK,UAAU,IAAI,4BAA4B,EAClD,EAAE,IAAI,CAAE,CACV,CAAC,EACD,EAAI,IAAI,CAAC,CACX,CAYA,eAAe,EAAM,CACnB,MAAM,EAAI,KAAK,EACT,EAAO,EAAK,SAAW,CAAA,EAC7B,GAAI,EAAK,IAAM,QAAS,OAAO,KAAK,iBAAiB,CAAI,EACzD,GAAI,EAAK,cAAgB,WAAY,OAAO,KAAK,uBAAuB,CAAI,EAC5E,MAAM,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAW,EAAE,WAAW,UAAY,CAAA,EACpC,EAAQ,EAAE,WAAW,aAAe,CAAA,EACpC,EAAW,GAAM,KAAK,aAAa,CAAC,EACpC,EAAY,KAAK,kBAAkB,EAAM,CAAQ,EACjD,EAAU,EAAS,IACtB,GAAQ,MAAM,QAAQ,CAAG,EAAI,EAAI,IAAI,CAAO,EAAI,CAAA,CACvD,EACU,EAAU,GAAM,GAAK,MAAQ,SAAS,CAAC,EACvC,EAAU,EAAQ,IAAI,CAAC,EAAG,IAAM,CAAC,EAAE,OAAQ,GAAM,EAAQ,CAAC,EAAE,KAAK,CAAM,CAAC,EACxE,EAAK,KAAK,IAAI,EAAG,EAAQ,MAAM,EACrC,IAAI,EAAO,IACP,EAAO,KACX,EAAQ,QACL,GAAO,EAAG,QAAS,GAAM,CACpB,GAAK,MAAQ,SAAS,CAAC,IACrB,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GAEzB,CAAC,CACP,EACQ,IAAS,MACX,EAAO,EACP,EAAO,GAET,MAAM,EAAa,KAAK,IAAI,EAAG,KAAK,MAAM,EAAK,WAAa,EAAI,EAAK,WAAa,CAAC,CAAC,EAC9E,EAAS,KAAK,oBAAoB,EAAM,EAAM,EAAM,CAAU,EAC9D,EAAO,EAAO,IACd,EAAO,EAAO,IACd,EAAQ,EAAO,GAAQ,EACvB,EAAQ,EAAK,gBAAkB,KAAO,KAAK,IAAI,EAAG,EAAK,cAAc,EAAI,EAAK,EAAI,GAAK,EACvF,EAAe,IAAM,EAAK,OAAS,GAAK,GACxC,EAAQ,EACR,EAAQ,EAAK,EACb,EAAQ,GACR,EAAQ,EAAK,EACb,EAAQ,KAAK,IAAI,EAAG,EAAQ,CAAK,EACjC,EAAQ,KAAK,IAAI,EAAG,EAAQ,CAAK,EACjC,EAAS,GAAM,GAAS,EAAI,GAAQ,EAAQ,EAC5C,EAAQ,EAAQ,EAChB,EAAU,GAAS,EAAQ,GAAS,EAAO,IACjD,IAAI,EAAI,EACR,MAAM,EAAQ,KAAK,aAAa,CAAI,EACpC,GAAI,EACF,EAAI,MACC,CACL,MAAM,EAAU,KAAK,IACnB,EACA,GAAG,EAAQ,IAAK,GAAM,EAAQ,CAAC,EAAE,OAAO,CAAM,EAAE,MAAM,CAC9D,EACM,EAAI,KAAK,IACP,EACA,KAAK,IAAI,EAAG,EAAQ,IAAM,GAAS,IAAM,KAAK,KAAK,CAAO,EAAE,CACpE,CACI,CACA,KAAK,UAAY,EACjB,MAAM,EAAU,EAAK,QAAU,EAAI,EAAK,QAAU,EAC5C,EAAO,KAAK,IAAI,GAAK,EAAI,CAAO,EAChC,EAAS,EAAK,SAAW,SACzB,EAAW,CAAA,EACX,EAAQ,CAAA,EACR,EAAO,EAAY,EAAU,KAAO,EAC1C,EAAQ,QAAQ,CAAC,EAAI,IAAS,CAC5B,MAAM,EAAK,EAAO,CAAI,EACtB,EAAM,KAAK,CAAE,EAAG,EAAI,GAAA,EAAI,KAAM,EAAM,CAAE,GAAK,UAAU,EAAK,CAAC,EAAE,CAAE,EAE/D,MAAM,GADM,EAAS,CAAE,GAAK,CAAA,GACZ,IAAI,CAAC,EAAG,KAAM,CAC5B,MAAM,GAAI,EAAQ,CAAC,EACb,GAAI,CAAE,EAAA,GAAG,GAAI,EAAM,EAAO,EAAC,EAAI,GAAI,CAAI,EAAG,EAAG,CAAE,EACrD,OAAI,IAAW,GAAE,EAAI,KAAK,eAAe,EAAG,EAAW,CAAC,GACjD,EACT,CAAC,EACD,GAAI,EAAQ,CACV,MAAM,EAAW,KAAK,IAAI,EAAM,EAAQ,EAAI,CAAI,EAChD,EAAI,QAAQ,CAAC,GAAG,KAAM,CACpB,MAAM,IAAK,GAAI,KAAO,OAAS,OAAS,OACxC,GAAE,EAAI,GAAM,GAAI,EAAI,GAAK,CAC3B,CAAC,CACH,MACE,KAAK,UAAU,EAAK,EAAI,EAAG,EAAM,CAAI,EAEvC,EAAS,KAAK,CACZ,EAAG,EACH,IAAK,EAAQ,GAAS,EACtB,GAAA,EACA,OAAQ,EAAQ,EAChB,KAAM,EAAI,IAAK,IAAO,CAAE,EAAG,EAAE,GAAI,EAAG,EAAE,EAAG,EAAG,EAAE,CAAC,EAAG,CAC1D,CAAO,CACH,CAAC,EACD,MAAM,EAAQ,EAAO,MACrB,YAAK,aAAe,CAClB,KAAM,KACN,MAAA,EACA,MAAA,EACA,MAAA,EACA,MAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACA,MAAA,EACA,MAAA,EACA,OAAQ,EAAK,OACb,UAAW,OAAO,EAAK,YAAe,WAAa,EAAK,WAAa,KACrE,UAAW,EAAK,YAAc,EACpC,EACW,CACT,CASA,uBAAuB,EAAM,CAC3B,MAAM,EAAI,KAAK,EACT,EAAO,EAAK,SAAW,CAAA,EACvB,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAW,EAAE,WAAW,UAAY,CAAA,EACpC,EAAQ,EAAE,WAAW,aAAe,CAAA,EACpC,EAAW,GAAM,KAAK,aAAa,CAAC,EACpC,EAAY,KAAK,kBAAkB,EAAM,CAAQ,EACjD,EAAU,EAAS,IACtB,GAAQ,MAAM,QAAQ,CAAG,EAAI,EAAI,IAAI,CAAO,EAAI,CAAA,CACvD,EACU,EAAU,GAAM,GAAK,MAAQ,SAAS,CAAC,EACvC,EAAU,EAAQ,IAAI,CAAC,EAAG,IAAM,CAAC,EAAE,OAAQ,GAAM,EAAQ,CAAC,EAAE,KAAK,CAAM,CAAC,EACxE,EAAK,KAAK,IAAI,EAAG,EAAQ,MAAM,EACrC,IAAI,EAAO,IACP,EAAO,KACX,EAAQ,QACL,GAAO,EAAG,QAAS,GAAM,CACpB,GAAK,MAAQ,SAAS,CAAC,IACrB,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GAEzB,CAAC,CACP,EACQ,IAAS,MACX,EAAO,EACP,EAAO,GAET,MAAM,EAAa,KAAK,IAAI,EAAG,KAAK,MAAM,EAAK,WAAa,EAAI,EAAK,WAAa,CAAC,CAAC,EAC9E,EAAS,KAAK,oBAAoB,EAAM,EAAM,EAAM,CAAU,EAC9D,EAAO,EAAO,IACd,EAAO,EAAO,IACd,EAAQ,EAAO,GAAQ,EACvB,EAAa,IAAM,EAAK,OAAS,GAAK,GACtC,EAAe,EAAK,EAAI,GAAK,GAC7B,EAAQ,EACR,EAAQ,EAAK,GACb,EAAQ,GACR,EAAQ,EAAK,EACb,EAAQ,KAAK,IAAI,EAAG,EAAQ,CAAK,EACjC,EAAQ,KAAK,IAAI,EAAG,EAAQ,CAAK,EACjC,EAAS,GAAM,GAAS,EAAI,GAAQ,EAAQ,EAC5C,EAAQ,EAAQ,EAChB,EAAU,GAAS,EAAQ,GAAS,EAAO,IACjD,IAAI,EAAI,EACR,MAAM,EAAQ,KAAK,aAAa,CAAI,EACpC,GAAI,EACF,EAAI,MACC,CACL,MAAM,EAAU,KAAK,IACnB,EACA,GAAG,EAAQ,IAAK,GAAM,EAAQ,CAAC,EAAE,OAAO,CAAM,EAAE,MAAM,CAC9D,EACM,EAAI,KAAK,IACP,EACA,KAAK,IAAI,EAAG,EAAQ,IAAM,GAAS,IAAM,KAAK,KAAK,CAAO,EAAE,CACpE,CACI,CACA,KAAK,UAAY,EACjB,MAAM,EAAU,EAAK,QAAU,EAAI,EAAK,QAAU,EAC5C,EAAO,KAAK,IAAI,GAAK,EAAI,CAAO,EAChC,EAAS,EAAK,SAAW,SACzB,EAAW,CAAA,EACX,EAAQ,CAAA,EACR,EAAO,EAAY,EAAU,KAAO,EAC1C,EAAQ,QAAQ,CAAC,EAAI,IAAS,CAC5B,MAAM,EAAK,EAAO,CAAI,EACtB,EAAM,KAAK,CAAE,EAAG,EAAI,GAAA,EAAI,KAAM,EAAM,CAAE,GAAK,UAAU,EAAK,CAAC,EAAE,CAAE,EAE/D,MAAM,GADM,EAAS,CAAE,GAAK,CAAA,GACZ,IAAI,CAAC,EAAG,KAAM,CAC5B,MAAM,GAAI,EAAQ,CAAC,EACb,GAAI,CAAE,EAAA,GAAG,GAAI,EAAM,EAAO,EAAC,EAAI,GAAI,CAAI,EAAG,EAAG,CAAE,EACrD,OAAI,IAAW,GAAE,EAAI,KAAK,eAAe,EAAG,EAAW,CAAC,GACjD,EACT,CAAC,EACD,GAAI,EAAQ,CACV,MAAM,EAAW,KAAK,IAAI,EAAM,EAAQ,EAAI,CAAI,EAChD,EAAI,QAAQ,CAAC,GAAG,KAAM,CACpB,MAAM,IAAK,GAAI,KAAO,OAAS,OAAS,OACxC,GAAE,EAAI,GAAM,GAAI,EAAI,GAAK,CAC3B,CAAC,CACH,MACE,KAAK,UAAU,EAAK,EAAI,EAAG,EAAM,EAAM,EAAI,EAE7C,EAAS,KAAK,CACZ,EAAG,EACH,GAAA,EACA,IAAK,EAAQ,GAAS,EACtB,OAAQ,EAAQ,EAChB,KAAM,EAAI,IAAK,IAAO,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,GAAI,EAAG,EAAE,CAAC,EAAG,CAC1D,CAAO,CACH,CAAC,EACD,MAAM,EAAQ,EAAO,MACrB,YAAK,aAAe,CAClB,KAAM,KACN,YAAa,WACb,MAAA,EACA,MAAA,EACA,MAAA,EACA,MAAA,EACA,KAAA,EACA,KAAA,EACA,MAAA,EACA,MAAA,EACA,MAAA,EACA,WAAY,EAAK,OACjB,UAAW,OAAO,EAAK,YAAe,WAAa,EAAK,WAAa,KACrE,UAAW,EAAK,YAAc,EACpC,EACW,CACT,CAUA,iBAAiB,EAAM,CACrB,MAAM,EAAI,KAAK,EACT,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WACd,EAAO,EAAK,SAAW,CAAA,EACvB,EAAW,EAAE,WAAW,UAAY,CAAA,EACpC,EAAU,GAAM,OAAO,GAAM,UAAY,SAAS,CAAC,EACnD,EAAO,GAAM,GAAK,OAAO,GAAM,SAAW,EAAE,EAAI,KAChD,EAAO,GAAM,GAAK,OAAO,GAAM,SAAW,EAAE,GAAK,KAAO,EAAE,EAAI,EAAE,MAAQ,KACxE,EAAU,EAAS,IAAI,CAAC,EAAG,IAAM,CAAC,EAAE,OACvC,IAAO,EAAS,CAAC,GAAK,CAAA,GAAI,KAAM,GAAM,EAAO,EAAI,CAAC,CAAC,GAAK,EAAO,EAAI,CAAC,CAAC,CAAC,CAC7E,EACI,IAAI,EAAM,IACN,EAAM,KACN,EAAM,IACN,EAAM,KACV,EAAS,QACN,IAAS,GAAO,CAAA,GAAI,QAAS,GAAM,CAClC,MAAM,EAAI,EAAI,CAAC,EACT,EAAI,EAAI,CAAC,EACX,EAAO,CAAC,GAAK,EAAO,CAAC,IACnB,EAAI,IAAK,EAAM,GACf,EAAI,IAAK,EAAM,GACf,EAAI,IAAK,EAAM,GACf,EAAI,IAAK,EAAM,GAEvB,CAAC,CACP,EACQ,IAAQ,MACV,EAAM,EACN,EAAM,EACN,EAAM,EACN,EAAM,GAER,MAAM,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM,EAAK,WAAa,EAAI,EAAK,WAAa,CAAC,CAAC,EAC3E,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM,EAAK,YAAc,EAAI,EAAK,YAAc,CAAC,CAAC,EAC7E,EAAK,KAAK,WACd,EAAK,MAAQ,KAAO,EAAK,KAAO,EAChC,EAAK,MAAQ,KAAO,EAAK,KAAO,EAChC,CACN,EACU,EAAK,KAAK,WACd,EAAK,MAAQ,KAAO,EAAK,KAAO,EAChC,EAAK,MAAQ,KAAO,EAAK,KAAO,EAChC,CACN,EACU,EAAO,EAAK,MAAQ,KAAO,EAAK,KAAO,EAAG,IAC1C,EAAO,EAAK,MAAQ,KAAO,EAAK,KAAO,EAAG,IAC1C,EAAO,EAAK,MAAQ,KAAO,EAAK,KAAO,EAAG,IAC1C,EAAO,EAAK,MAAQ,KAAO,EAAK,KAAO,EAAG,IAC1C,EAAQ,EAAO,GAAQ,EACvB,EAAQ,EAAO,GAAQ,EACvB,EAAa,IAAM,EAAK,OAAS,GAAK,GACtC,EAAe,IAAM,EAAK,OAAS,GAAK,GACxC,EAAQ,EACR,EAAQ,EAAK,GACb,EAAQ,GACR,EAAQ,EAAK,EACb,EAAQ,KAAK,IAAI,EAAG,EAAQ,CAAK,EACjC,EAAQ,KAAK,IAAI,EAAG,EAAQ,CAAK,EACjC,EAAS,GAAM,GAAS,EAAI,GAAQ,EAAQ,EAC5C,EAAS,GAAM,GAAS,EAAI,GAAQ,EAAQ,EAC5C,EAAY,KAAK,kBAAkB,EAAM,CAAQ,EACjD,EAAQ,KAAK,aAAa,CAAI,GAAK,EACzC,KAAK,UAAY,EACjB,MAAM,EAAW,CAAA,EACjB,EAAQ,QAAS,GAAO,CAEtB,MAAM,GADM,EAAS,CAAE,GAAK,CAAA,GACX,IAAK,GAAM,CAC1B,MAAM,EAAI,EAAI,CAAC,EACT,GAAI,EAAI,CAAC,EACf,MAAO,CACL,EAAG,EAAM,EAAO,CAAC,EAAI,EAAI,CAAI,EAC7B,EAAG,EAAM,EAAO,EAAC,EAAI,GAAI,CAAI,EAC7B,EAAG,EAAY,KAAK,eAAe,EAAG,EAAW,CAAK,EAAI,MACpE,CACM,CAAC,EACD,EAAS,KAAK,CACZ,EAAG,EACH,IAAK,EAAQ,GAAS,EACtB,IAAK,EAAQ,GAAS,EACtB,OAAQ,EAAQ,EAChB,KAAA,CACR,CAAO,CACH,CAAC,EACD,MAAM,EAAU,CAAC,EAAI,EAAI,EAAM,EAAS,EAAQ,KAAM,CACpD,MAAM,EAAM,CAAA,EACZ,GAAI,EACF,QAAS,EAAI,EAAG,EAAI,GAAG,IAAK,EAAI,KAAK,EAAK,EAAO,GAAK,GAAI,EAAE,MACvD,CACL,MAAM,EAAK,GAAW,EAAO,KAAK,IAAI,EAAG,GAAI,CAAC,EAC9C,QAAS,GAAI,EAAI,IAAK,EAAK,EAAK,GAAK,IAAK,EACxC,EAAI,KAAK,KAAK,IAAI,EAAC,EAAI,EAAK,KAAO,EAAI,EAAC,CAE5C,CACA,OAAO,CACT,EACA,YAAK,aAAe,CAClB,KAAM,KACN,MAAA,EACA,MAAA,EACA,MAAA,EACA,MAAA,EACA,MAAA,EACA,MAAA,EACA,OAAQ,EACN,EACA,EACA,EACA,EAAG,QACH,EAAK,MAAQ,MAAQ,EAAK,MAAQ,KAClC,CACR,EACM,OAAQ,EACN,EACA,EACA,EACA,EAAG,QACH,EAAK,MAAQ,MAAQ,EAAK,MAAQ,KAClC,CACR,EACM,OAAQ,EAAK,OACb,OAAQ,EAAK,OACb,WAAY,OAAO,EAAK,YAAe,WAAa,EAAK,WAAa,KACtE,WAAY,OAAO,EAAK,YAAe,WAAa,EAAK,WAAa,KACtE,UAAW,EAAK,YAAc,EACpC,EACW,CACT,CASA,kBAAkB,EAAM,EAAU,CAChC,MAAM,EAAQ,GAAQ,EAAK,UAC3B,GAAI,CAAC,MAAM,QAAQ,CAAK,GAAK,EAAM,OAAS,EAAG,OAAO,KACtD,MAAM,EAAO,KAAK,IAAI,GAAK,CAAC,EAAM,CAAC,CAAC,EAC9B,EAAO,KAAK,IAAI,EAAM,CAAC,EAAM,CAAC,CAAC,EAC/B,EAAQ,EAAK,WAAa,IAChC,IAAI,EAAO,IACP,EAAO,KAUX,OATA,EAAS,QACN,IAAS,GAAO,CAAA,GAAI,QAAS,GAAM,CAClC,MAAM,EAAI,GAAK,OAAO,GAAM,SAAW,EAAE,CAAK,EAAI,KAC9C,OAAO,GAAM,UAAY,SAAS,CAAC,IACjC,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GAEzB,CAAC,CACP,EACQ,IAAS,IAAiB,KACvB,CAAE,KAAA,EAAM,KAAA,EAAM,KAAA,EAAM,KAAA,EAAM,MAAA,CAAK,CACxC,CASA,eAAe,EAAG,EAAI,EAAU,CAC9B,GAAI,CAAC,EAAI,OAAO,EAChB,MAAM,EAAI,GAAK,OAAO,GAAM,SAAW,EAAE,EAAG,KAAK,EAAI,KACrD,GAAI,OAAO,GAAM,UAAY,CAAC,SAAS,CAAC,EAAG,OAAO,EAAG,KACrD,MAAM,EAAI,EAAG,KAAO,EAAG,MAAQ,EAAI,EAAG,OAAS,EAAG,KAAO,EAAG,MAAQ,EAC9D,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,CAAC,CAAC,EAC/B,EAAO,EAAG,KAAO,EAAG,KACpB,EAAO,EAAG,KAAO,EAAG,KAC1B,OAAO,KAAK,KAAK,EAAO,GAAM,EAAO,EAAK,CAC5C,CAmBA,UAAU,EAAK,EAAQ,EAAW,EAAM,EAAM,EAAW,GAAO,CAC9D,MAAM,EAAK,EAAW,KAAO,KACvB,EAAK,EAAW,IAAM,IACtB,EAAQ,EAAI,MAAK,EAAG,KAAK,CAAC,EAAG,IAAM,EAAE,CAAE,EAAI,EAAE,CAAE,CAAC,EAChD,EAAS,CAAA,EACT,EAAO,GAAsB,EACnC,EAAM,QAAS,GAAM,CACnB,MAAM,EAAK,EAAE,GAAK,KAAO,EAAE,EAAI,EAC/B,IAAI,EAAS,EACb,QAAS,EAAI,EAAG,EAAI,IAAK,IAAK,CAC5B,MAAM,EAAM,IAAM,EAAI,EAAI,KAAK,KAAK,EAAI,CAAC,EAAI,GAAQ,EAAI,EAAI,EAAI,IAC3D,EAAI,EAAS,EACnB,IAAI,EAAK,GACT,QAAS,EAAI,EAAO,OAAS,EAAG,GAAK,EAAG,IAAK,CAC3C,MAAM,EAAI,EAAO,CAAC,EACZ,EAAK,EAAE,CAAE,EAAI,EAAE,EACrB,GAAI,EAAK,EAAK,EAAM,MACpB,MAAM,EAAO,EAAK,EAAE,EACd,EAAK,EAAI,EAAE,EACjB,GAAI,EAAK,EAAK,EAAK,EAAK,EAAO,EAAM,CACnC,EAAK,GACL,KACF,CACF,CACA,GAAI,EAAI,CACN,EAAS,EACT,KACF,CACF,CACA,EAAE,CAAE,EAAI,EAAS,EACjB,EAAO,KAAK,CAAE,EAAG,EAAE,CAAE,EAAG,EAAG,EAAE,CAAE,EAAG,EAAG,CAAE,CAAE,CAC3C,CAAC,CACH,CAYA,oBAAoB,EAAM,EAAM,EAAM,EAAY,CAChD,MAAM,EAAa,CAAC,EAAK,EAAK,IAAa,CACzC,MAAM,EAAQ,CAAA,EACd,QAAS,EAAI,EAAK,GAAK,EAAM,EAAW,GAAK,GAAK,EAChD,EAAM,KAAK,KAAK,IAAI,CAAC,EAAI,EAAW,KAAO,EAAI,CAAC,EAElD,OAAO,CACT,EACA,GAAI,EAAK,MAAQ,MAAQ,EAAK,MAAQ,KAAM,CAC1C,IAAI,EAAM,EAAK,MAAQ,KAAO,EAAK,KAAO,EACtC,EAAM,EAAK,MAAQ,KAAO,EAAK,KAAO,EACpC,EAAM,IAAM,EAAM,EAAM,GAC9B,MAAM,GAAY,EAAM,GAAO,KAAK,IAAI,EAAG,EAAa,CAAC,EACzD,OAAI,EAAO,IAAK,GAAO,KAAK,MAAM,EAAM,GAAQ,CAAQ,EAAI,GACxD,EAAO,IAAK,GAAO,KAAK,MAAM,EAAO,GAAO,CAAQ,EAAI,GACrD,CAAE,IAAA,EAAK,IAAA,EAAK,MAAO,EAAW,EAAK,EAAK,CAAQ,CAAC,CAC1D,CACA,MAAM,EAAO,KAAK,WAAW,EAAM,EAAM,CAAU,EAC7C,EAAU,EAAK,UAAY,EAAK,IAAM,EAAK,KAAO,KAAK,IAAI,EAAG,EAAa,CAAC,EAClF,MAAO,CAAE,IAAK,EAAK,IAAK,IAAK,EAAK,IAAK,MAAO,EAAW,EAAK,IAAK,EAAK,IAAK,CAAO,CAAC,CACvF,CAQA,WAAW,EAAS,EAAS,EAAO,CAClC,MAAM,EAAK,EACX,IAAI,EAAK,EACH,EAAK,IAAK,EAAK,EAAK,GAC1B,MAAM,EAAQ,KAAK,SAAS,EAAK,EAAI,EAAK,EACpC,EAAU,KAAK,SAAS,EAAQ,KAAK,IAAI,EAAG,EAAQ,CAAC,EAAG,EAAI,EAClE,MAAO,CACL,IAAK,KAAK,MAAM,EAAK,CAAO,EAAI,EAChC,IAAK,KAAK,KAAK,EAAK,CAAO,EAAI,EAC/B,QAAA,CACN,CACE,CAMA,SAAS,EAAO,EAAO,CACrB,MAAM,EAAM,EAAQ,EAAI,EAAQ,EAC1B,EAAM,KAAK,MAAM,KAAK,IAAI,CAAG,EAAI,KAAK,IAAI,EAC1C,EAAO,EAAM,KAAK,IAAI,GAAI,CAAG,EACnC,IAAI,EACJ,OAAI,EACF,EAAK,EAAO,IAAM,EAAI,EAAO,EAAI,EAAI,EAAO,EAAI,EAAI,GAEpD,EAAK,GAAQ,EAAI,EAAI,GAAQ,EAAI,EAAI,GAAQ,EAAI,EAAI,GAEhD,EAAK,KAAK,IAAI,GAAI,CAAG,CAC9B,CAUA,iBAAiB,EAAK,EAAU,CAC9B,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAY,UAAS,EAAI,OAC9B,MAAM,EAAK,KAAK,aAChB,GAAI,CAAC,EAAI,OACT,MAAM,EAAK,6BACL,EAAI,EAAS,MAAM,CAAE,MAAO,sBAAsB,CAAE,EACpD,EAAY,EAAE,OAAO,MAAQ,EAAE,OAAO,KAAK,aAAe,yBAC1D,EAAY,wBACZ,EAAa,EAAE,OAAO,OAAS,EAAE,OAAO,MAAM,QAAU,EAAE,OAAO,MAAM,OAAO,OAAS,EAAE,OAAO,MAAM,OAAO,MAAM,QAAU,wBAC7H,EAAO,CAAC,EAAI,EAAI,EAAI,EAAI,IAAW,CACvC,MAAM,EAAI,EAAY,gBAAgB,EAAI,MAAM,EAChD,EAAE,aAAa,KAAM,OAAO,CAAE,CAAC,EAC/B,EAAE,aAAa,KAAM,OAAO,CAAE,CAAC,EAC/B,EAAE,aAAa,KAAM,OAAO,CAAE,CAAC,EAC/B,EAAE,aAAa,KAAM,OAAO,CAAE,CAAC,EAC/B,EAAE,aAAa,SAAU,CAAM,EAC/B,EAAE,aAAa,kBAAmB,YAAY,EAC9C,EAAE,KAAK,YAAY,CAAC,CACtB,EACM,EAAO,CAAC,EAAK,EAAG,EAAG,EAAQ,EAAM,EAAM,EAAQ,IAAQ,CAC3D,MAAM,EAAI,EAAY,gBAAgB,EAAI,MAAM,EAChD,EAAE,aAAa,QAAS,CAAG,EAC3B,EAAE,aAAa,IAAK,OAAO,CAAC,CAAC,EAC7B,EAAE,aAAa,IAAK,OAAO,CAAC,CAAC,EAC7B,EAAE,aAAa,cAAe,CAAM,EACpC,EAAE,aAAa,oBAAqB,QAAQ,EAC5C,EAAE,aAAa,YAAa,GAAG,CAAI,IAAI,EACvC,EAAE,aAAa,cAAe,EAAE,OAAO,MAAM,YAAc,SAAS,EACpE,EAAE,aAAa,cAAe,OAAO,CAAM,CAAC,EAC5C,EAAE,aAAa,OAAQ,CAAI,EAC3B,EAAE,YAAc,EAChB,EAAE,KAAK,YAAY,CAAC,CACtB,EACA,GAAI,EAAG,OAAS,KAAM,CA2BpB,GA1BA,EAAG,OAAO,QAAS,GAAM,CACvB,MAAM,EAAI,EAAG,MAAM,CAAC,EAChB,EAAG,WAAW,EAAK,EAAG,MAAO,EAAG,EAAG,MAAO,EAAG,CAAS,EAC1D,MAAM,EAAQ,EAAG,WAAa,OAAO,EAAG,WAAW,CAAC,CAAC,EAAI,KAAK,YAAY,CAAC,EAC3E,EAAK,EAAO,EAAG,MAAQ,EAAG,EAAG,MAAO,EAAY,GAAI,IAAK,sBAAsB,CACjF,CAAC,EACD,EAAG,OAAO,QAAS,GAAM,CACvB,MAAM,EAAI,EAAG,MAAM,CAAC,EAChB,EAAG,WAAW,EAAK,EAAG,EAAG,MAAO,EAAG,EAAG,MAAO,CAAS,EAC1D,MAAM,EAAQ,EAAG,WAAa,OAAO,EAAG,WAAW,CAAC,CAAC,EAAI,KAAK,YAAY,CAAC,EAC3E,EAAK,EAAO,EAAG,EAAG,MAAQ,GAAI,SAAU,EAAY,GAAI,IAAK,sBAAsB,CACrF,CAAC,EACD,EAAK,EAAG,MAAO,EAAG,MAAO,EAAG,MAAO,EAAG,MAAO,CAAS,EACtD,EAAK,EAAG,MAAO,EAAG,MAAO,EAAG,MAAO,EAAG,MAAO,CAAS,EAClD,EAAG,QACL,EACE,OAAO,EAAG,MAAM,GACf,EAAG,MAAQ,EAAG,OAAS,EACxB,EAAG,MAAQ,GACX,SACA,EACA,GACA,IACA,4BACV,EAEU,EAAG,OAAQ,CACb,MAAM,EAAK,EAAY,gBAAgB,EAAI,MAAM,EACjD,EAAG,aAAa,QAAS,4BAA4B,EACrD,MAAM,EAAK,GACL,GAAM,EAAG,MAAQ,EAAG,OAAS,EACnC,EAAG,aAAa,IAAK,OAAO,CAAE,CAAC,EAC/B,EAAG,aAAa,IAAK,OAAO,CAAE,CAAC,EAC/B,EAAG,aAAa,cAAe,QAAQ,EACvC,EAAG,aAAa,YAAa,MAAM,EACnC,EAAG,aAAa,cAAe,EAAE,OAAO,MAAM,YAAc,SAAS,EACrE,EAAG,aAAa,cAAe,KAAK,EACpC,EAAG,aAAa,OAAQ,CAAU,EAClC,EAAG,aAAa,YAAa,cAAc,CAAE,IAAI,CAAE,GAAG,EACtD,EAAG,YAAc,OAAO,EAAG,MAAM,EACjC,EAAE,KAAK,YAAY,CAAE,CACvB,CACA,EAAI,IAAI,CAAC,EACT,MACF,CACA,GAAI,EAAG,cAAgB,WAAY,CAQjC,GAPA,EAAG,MAAM,QAAS,GAAM,CACtB,MAAM,EAAI,EAAG,MAAM,CAAC,EAChB,EAAG,WAAW,EAAK,EAAG,MAAO,EAAG,EAAG,MAAO,EAAG,CAAS,EAC1D,MAAM,EAAQ,EAAG,UAAY,OAAO,EAAG,UAAU,CAAC,CAAC,EAAI,KAAK,YAAY,CAAC,EACzE,EAAK,EAAO,EAAG,MAAQ,EAAG,EAAG,MAAO,EAAY,GAAI,IAAK,sBAAsB,CACjF,CAAC,EACD,EAAK,EAAG,MAAO,EAAG,MAAO,EAAG,MAAO,EAAG,MAAO,CAAS,EAClD,EAAG,WAAY,CACjB,MAAM,EAAK,EAAY,gBAAgB,EAAI,MAAM,EACjD,EAAG,aAAa,QAAS,4BAA4B,EACrD,MAAM,EAAK,GACL,GAAM,EAAG,MAAQ,EAAG,OAAS,EACnC,EAAG,aAAa,IAAK,OAAO,CAAE,CAAC,EAC/B,EAAG,aAAa,IAAK,OAAO,CAAE,CAAC,EAC/B,EAAG,aAAa,cAAe,QAAQ,EACvC,EAAG,aAAa,YAAa,MAAM,EACnC,EAAG,aAAa,cAAe,EAAE,OAAO,MAAM,YAAc,SAAS,EACrE,EAAG,aAAa,cAAe,KAAK,EACpC,EAAG,aAAa,OAAQ,CAAU,EAClC,EAAG,aAAa,YAAa,cAAc,CAAE,IAAI,CAAE,GAAG,EACtD,EAAG,YAAc,OAAO,EAAG,UAAU,EACrC,EAAE,KAAK,YAAY,CAAE,CACvB,CACA,EAAG,MAAM,QAAS,GAAS,CACzB,MAAM,EAAQ,EAAE,QAAQ,OAAO,EAAK,CAAC,GAAK,EAAE,QAAQ,OAAO,CAAC,GAAK,UACjE,EAAK,EAAK,KAAM,EAAK,GAAI,EAAG,MAAQ,GAAI,SAAU,EAAO,GAAI,IAAK,4BAA4B,CAChG,CAAC,EACD,EAAI,IAAI,CAAC,EACT,MACF,CACA,EAAG,MAAM,QAAQ,CAAC,EAAG,IAAQ,CAC3B,MAAM,EAAI,EAAG,MAAM,CAAC,EAChB,EAAG,WAAW,EAAK,EAAG,EAAG,MAAO,EAAG,EAAG,MAAO,CAAS,EAC1D,MAAM,EAAQ,EAAG,UAAY,OAAO,EAAG,UAAU,CAAC,CAAC,EAAI,KAAK,YAAY,CAAC,EACnE,EAAS,IAAQ,EAAI,QAAU,IAAQ,EAAG,MAAM,OAAS,EAAI,MAAQ,SAC3E,EAAK,EAAO,EAAG,EAAG,MAAQ,GAAI,EAAQ,EAAY,GAAI,IAAK,sBAAsB,CACnF,CAAC,EACD,EAAK,EAAG,MAAO,EAAG,MAAO,EAAG,MAAO,EAAG,MAAO,CAAS,EAClD,EAAG,QACL,EACE,OAAO,EAAG,MAAM,GACf,EAAG,MAAQ,EAAG,OAAS,EACxB,EAAG,MAAQ,GACX,SACA,EACA,GACA,IACA,4BACR,EAEQ,EAAG,MAAQ,IACb,EAAG,MAAM,QAAS,GAAS,CACzB,MAAM,EAAQ,EAAE,QAAQ,OAAO,EAAK,CAAC,GAAK,EAAE,QAAQ,OAAO,CAAC,GAAK,UACjE,EAAK,EAAK,KAAM,EAAG,MAAQ,EAAG,EAAK,GAAI,MAAO,EAAO,GAAI,IAAK,4BAA4B,CAC5F,CAAC,EAEH,EAAI,IAAI,CAAC,CACX,CAMA,YAAY,EAAG,CACb,GAAI,CAAC,SAAS,CAAC,EAAG,MAAO,GACzB,MAAM,EAAI,KAAK,IAAI,CAAC,EACpB,OAAI,GAAK,IAAY,GAAG,EAAE,EAAI,KAAK,QAAQ,CAAC,CAAC,IACzC,GAAK,IAAY,GAAG,EAAE,EAAI,KAAK,QAAQ,CAAC,CAAC,IACzC,OAAO,UAAU,CAAC,EAAU,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAC7B,CAOA,kBAAkB,EAAQ,EAAO,CAC/B,MAAM,EAAM,EAAO,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,EAC5C,GAAI,GAAO,GAAK,GAAS,EAAG,OAAO,EAAO,IAAI,IAAM,CAAC,EACrD,MAAM,EAAQ,EAAO,IAAK,GAAM,EAAI,EAAM,CAAK,EACzC,EAAS,EAAM,IAAK,GAAM,KAAK,MAAM,CAAC,CAAC,EACvC,EAAO,EAAO,OAAO,CAAC,EAAG,IAAM,EAAI,EAAG,CAAC,EACvC,EAAY,KAAK,IAAI,EAAG,EAAQ,CAAI,EACpC,EAAS,EAAM,IAAI,CAAC,EAAG,KAAO,CAAE,EAAA,EAAG,KAAM,EAAI,KAAK,MAAM,CAAC,CAAC,EAAG,EAAE,KAAK,CAAC,EAAG,IAAM,EAAE,KAAO,EAAE,IAAI,EAC7F,EAAM,EAAO,MAAK,EACxB,QAAS,EAAI,EAAG,EAAI,GAAa,EAAI,EAAO,OAAQ,IAClD,EAAI,EAAO,CAAC,EAAE,CAAC,IAEjB,OAAO,CACT,CAOA,QAAQ,EAAI,EAAI,EAAG,EAAM,EAAY,CACnC,MAAM,EAAM,CAAA,EACZ,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAM,EAAa,EACnB,EAAI,EAAO,KAAK,KAAK,EAAM,EAAG,EAC9B,EAAQ,EAAM,GACpB,EAAI,KAAK,CAAE,EAAG,EAAK,EAAI,KAAK,IAAI,CAAK,EAAG,EAAG,EAAK,EAAI,KAAK,IAAI,CAAK,CAAC,CAAE,CACvE,CACA,OAAO,CACT,CAOA,aAAa,EAAM,CACjB,OAAI,EAAK,QAAU,SAAW,EAAK,MAC1B,KAAK,IAAI,EAAK,MAAM,OAAS,GAAI,EAAK,MAAM,QAAU,EAAE,EAAI,EAEjE,KAAK,cAAc,CAAI,GAAK,OAAO,EAAK,YAAY,WAAc,SAC7D,EAAK,YAAY,UAAY,EAAI,EAAK,YAAY,UAAY,KAEnE,OAAO,EAAK,MAAS,UAAY,EAAK,KAAO,EAAU,EAAK,KACzD,IACT,CAMA,cAAc,EAAM,CAClB,MAAM,EAAM,EAAK,YACjB,MAAO,CAAC,EAAE,GAAO,EAAI,SAAW,EAAK,QAAU,SAAW,EAAK,QAAU,SAC3E,CAMA,aAAa,EAAG,CACd,GAAI,OAAO,GAAM,SAAU,OAAO,EAClC,GAAI,GAAK,OAAO,GAAM,SAAU,CAC9B,MAAM,EAAI,EAAE,OAAS,KAAO,EAAE,MAAQ,EAAE,EACxC,OAAO,OAAO,GAAM,SAAW,EAAI,IACrC,CACA,OAAO,IACT,CASA,gBAAgB,EAAG,EAAO,CACxB,GAAI,GAAK,MAAQ,CAAC,SAAS,CAAC,EAAG,OAAO,EAAM,KAC5C,MAAM,EAAI,EAAM,IAAM,EAAM,KAAO,EAAI,EAAM,MAAQ,EAAM,IAAM,EAAM,KAAO,EACxE,EAAK,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,CAAC,CAAC,EACrC,GAAI,EAAM,QAAU,SAClB,OAAO,EAAM,KAAO,GAAM,EAAM,KAAO,EAAM,MAE/C,MAAM,EAAO,EAAM,KAAO,EAAM,KAC1B,EAAO,EAAM,KAAO,EAAM,KAChC,OAAO,KAAK,KAAK,EAAO,GAAM,EAAO,EAAK,CAC5C,CASA,aAAa,EAAU,EAAM,EAAM,CACjC,GAAI,CAAC,KAAK,cAAc,CAAI,EAAG,OAAO,KACtC,IAAI,EAAO,IACP,EAAO,KAWX,GAVA,EAAS,QAAS,GAAQ,CACnB,GACL,EAAI,QAAS,GAAM,CACjB,MAAM,EAAI,KAAK,aAAa,CAAC,EACzB,GAAK,MAAQ,SAAS,CAAC,IACrB,EAAI,IAAM,EAAO,GACjB,EAAI,IAAM,EAAO,GAEzB,CAAC,CACH,CAAC,EACG,IAAS,KAAY,EAAO,EAAM,OAAO,KAC7C,MAAM,EAAM,EAAK,YACX,EAAO,EACP,EAAO,KAAK,IAChB,EACA,KAAK,IACH,EACA,OAAO,EAAI,WAAc,SAAW,EAAI,UAAY,EAAO,GACnE,CACA,EACI,MAAO,CACL,IAAK,EACL,IAAK,EACL,KAAA,EACA,KAAA,EACA,MAAO,EAAI,QAAU,SAAW,SAAW,MACjD,CACE,CAOA,aAAa,EAAM,EAAQ,EAAO,CAChC,MAAM,EAAU,EAAK,QAAU,EAAI,EAAK,QAAU,EAC5C,EAAQ,KAAK,aAAa,CAAI,EACpC,OAAI,EAAc,EAAI,EAAQ,EACvB,GAAU,KAAK,KAAK,KAAK,IAAI,EAAG,CAAK,CAAC,EAAI,GACnD,CAKA,mBAAmB,EAAM,EAAM,CAC7B,MAAM,EAAU,EAAK,QAAU,EAAI,EAAK,QAAU,EAC5C,EAAQ,KAAK,aAAa,CAAI,EACpC,OAAI,GACG,KAAK,IAAI,EAAG,GAAQ,EAAI,EAAQ,CACzC,CAMA,UAAU,EAAM,CACd,OAAO,EAAK,QAAU,UAAY,EAAK,QAAU,OACnD,CAKA,YAAY,EAAM,CAChB,GAAI,EAAK,QAAU,SAAW,EAAK,MACjC,MAAO,CAAE,IAAK,EAAK,MAAM,OAAS,IAAM,EAAG,IAAK,EAAK,MAAM,QAAU,IAAM,CAAC,EAE9E,MAAM,EAAI,KAAK,UACf,MAAO,CAAE,GAAI,EAAG,GAAI,CAAC,CACvB,CAQA,SAAS,EAAU,EAAM,EAAM,EAAO,EAAG,EAAG,CAC1C,MAAM,EAAI,KAAK,EACT,EAAU,EAAE,OAAO,OAAO,KAAO,EAAE,OAAO,OAAO,MAAQ,EACzD,EAAc,MAAM,QAAQ,EAAE,QAAQ,OAAO,MAAM,GAAI,EAAE,QAAQ,OAAO,OAAO,CAAC,GAAK,OACrF,EAAc,OAAO,EAAE,OAAO,KAAK,SAAY,SAAW,EAAE,OAAO,KAAK,QAAU,EACxF,IAAI,EACJ,GAAI,EAAK,QAAU,SAAW,EAAK,OAAS,EAAK,MAAM,IAAK,CAC1D,MAAM,EAAK,EAAK,MAAM,OAAS,GACzB,EAAK,EAAK,MAAM,QAAU,GAChC,EAAK,EAAE,IAAI,MAAM,MAAM,EAAK,MAAM,GAAG,EACrC,EAAG,KAAK,aAAa,QAAS,OAAO,CAAE,CAAC,EACxC,EAAG,KAAK,aAAa,SAAU,OAAO,CAAE,CAAC,EACzC,EAAG,KAAK,aAAa,sBAAuB,eAAe,EACvD,EAAK,MAAM,MACb,EAAG,KAAK,aAAa,SAAU,QAAQ,KAAK,YAAY,CAAK,CAAC,GAAG,CAErE,SAAW,EAAK,QAAU,SAAU,CAClC,MAAM,EAAO,EAAO,EACpB,EAAK,EAAS,SAAS,EAAG,EAAG,EAAM,EAAM,EAAK,cAAgB,EAAG,EAAO,EAAG,EAAS,CAAW,EAC/F,EAAG,KAAK,aAAa,OAAQ,CAAK,EAC9B,EAAc,GAAG,EAAG,KAAK,aAAa,eAAgB,OAAO,CAAW,CAAC,CAC/E,MACE,EAAK,EAAS,WAAW,EAAM,CAC7B,KAAM,EACN,eAAgB,EAChB,OAAQ,CAChB,CAAO,EACD,EAAG,KAAK,aAAa,OAAQ,CAAK,EAC9B,EAAc,GAAG,EAAG,KAAK,aAAa,eAAgB,OAAO,CAAW,CAAC,EAE/E,OAAA,EAAG,KAAK,UAAU,IAAI,sBAAsB,EAC5C,EAAG,KAAK,aAAa,IAAK,OAAO,CAAC,CAAC,EACnC,EAAG,KAAK,aAAa,IAAK,OAAO,CAAC,CAAC,EAC5B,CACT,CASA,YAAY,EAAO,CACjB,MAAM,EAAI,KAAK,EACT,EAAK,6BACL,EAAO,OAAO,CAAK,EAAE,QAAQ,gBAAiB,EAAE,EAChD,EAAK,wBAAwB,EAAE,QAAQ,OAAO,IAAI,CAAI,GACtD,EAAM,EAAE,IAAI,MAAM,KACxB,GAAI,EAAI,cAAc,IAAI,CAAE,EAAE,EAAG,OAAO,EACxC,IAAI,EAAO,EAAI,cAAc,MAAM,EAC9B,IACH,EAAO,EAAY,gBAAgB,EAAI,MAAM,EAC7C,EAAI,aAAa,EAAM,EAAI,UAAU,GAEvC,MAAM,EAAS,EAAY,gBAAgB,EAAI,QAAQ,EACvD,EAAO,aAAa,KAAM,CAAE,EAC5B,EAAO,aAAa,IAAK,IAAI,EAC7B,EAAO,aAAa,IAAK,IAAI,EAC7B,EAAO,aAAa,QAAS,MAAM,EACnC,EAAO,aAAa,SAAU,MAAM,EACpC,MAAM,EAAQ,EAAY,gBAAgB,EAAI,SAAS,EACvD,EAAM,aAAa,cAAe,CAAK,EACvC,EAAM,aAAa,SAAU,OAAO,EACpC,MAAM,EAAO,EAAY,gBAAgB,EAAI,aAAa,EAC1D,OAAA,EAAK,aAAa,KAAM,OAAO,EAC/B,EAAK,aAAa,MAAO,aAAa,EACtC,EAAK,aAAa,WAAY,IAAI,EAClC,EAAO,YAAY,CAAK,EACxB,EAAO,YAAY,CAAI,EACvB,EAAK,YAAY,CAAM,EAChB,CACT,CAMA,UAAU,EAAM,EAAM,EAAG,EAAG,CAC1B,GAAI,KAAK,UAAU,CAAI,EAAG,CACxB,KAAM,CAAE,GAAA,EAAI,GAAA,CAAE,EAAK,KAAK,YAAY,CAAI,EACxC,EAAK,aAAa,IAAK,OAAO,EAAI,CAAE,CAAC,EACrC,EAAK,aAAa,IAAK,OAAO,EAAI,CAAE,CAAC,CACvC,MACE,EAAK,aAAa,KAAM,OAAO,CAAC,CAAC,EACjC,EAAK,aAAa,KAAM,OAAO,CAAC,CAAC,CAErC,CAMA,KAAK,EAAK,CACR,GAAI,OAAO,GAAQ,SAAU,OAAO,KACpC,IAAI,EAAI,EAAI,KAAI,EAChB,GAAI,EAAE,CAAC,IAAM,IAAK,CACZ,EAAE,SAAW,IAAG,EAAI,IAAM,EAAE,CAAC,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,EAAI,EAAE,CAAC,GACpE,MAAM,EAAI,SAAS,EAAE,MAAM,EAAG,CAAC,EAAG,EAAE,EACpC,OAAI,MAAM,CAAC,EAAU,KACd,CAAC,GAAK,GAAK,IAAK,GAAK,EAAI,IAAK,EAAI,GAAG,CAC9C,CACA,MAAM,EAAI,EAAE,MAAM,kBAAkB,EACpC,GAAI,EAAG,CACL,MAAM,EAAI,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAK,GAAM,WAAW,CAAC,CAAC,EAClD,GAAI,EAAE,QAAU,GAAK,EAAE,MAAO,GAAM,CAAC,MAAM,CAAC,CAAC,EAAG,MAAO,CAAC,EAAE,CAAC,EAAG,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,CAC1E,CACA,OAAO,IACT,CAaA,gBAAiB,CACf,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,MAAM,WAK5B,MAJI,GAAC,EAAY,UAAS,GACtB,CAAC,GAAQ,EAAK,UAAY,IAC1B,EAAE,QAAQ,gBAAkB,IAC5B,EAAE,QAAQ,SAAW,CAAC,EAAE,QAAQ,aAChC,EAAK,sBAAwB,GAAoB,EAEvD,CAUA,WAAW,EAAM,CACf,MAAM,EAAI,KAAK,EACT,EAAO,EAAE,OAAO,YAAY,KAC5B,EAAQ,KAAK,IAAI,EAAG,EAAE,OAAO,MAAM,WAAW,OAAS,GAAG,EAC1D,EAAS,KAAK,UAAU,CAAI,EAC5B,CAAE,GAAA,EAAI,GAAA,CAAE,EAAK,KAAK,YAAY,CAAI,EAClC,EAAW,KAAK,IAAI,EAAQ,GAAK,GAAG,EACpC,EAAI,EAAK,OACf,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,EAAK,CAAC,EAAE,MAAQ,EAAI,EAAI,GAAK,EAAI,GAAK,EAAW,EAEnD,MAAM,EAAS,EAAS,IAAM,KACxB,EAAS,EAAS,IAAM,KACxB,EAAO,EAAS,EAAK,EACrB,EAAO,EAAS,EAAK,EAC3B,GAAI,EACF,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,EAAK,CAAC,EAAE,KAAK,aAAa,EAAQ,OAAO,EAAK,CAAC,EAAE,IAAM,CAAI,CAAC,EAC5D,EAAK,CAAC,EAAE,KAAK,aAAa,EAAQ,OAAO,EAAK,CAAC,EAAE,IAAM,CAAI,CAAC,EAGhE,GAAI,CAAC,EACH,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,EAAK,CAAC,EACZ,EAAE,IAAM,MAAQ,EAAE,IAAM,MAAQ,EAAE,KAAO,EAAE,IAC7C,EAAE,KAAK,aAAa,IAAK,OAAO,EAAE,EAAE,CAAC,CAEzC,CAEF,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,EAAK,CAAC,EACZ,EAAE,OAAS,EAAE,OAAS,EAAE,QAAU,EAAE,QACtC,EAAE,IAAM,KAAK,KAAK,EAAE,KAAK,EACzB,EAAE,IAAM,KAAK,KAAK,EAAE,KAAK,EAE7B,CACA,MAAM,EAAO,EAAK,QAAU,CAAA,EACtB,EAAU,EAAK,SAAW,UAAY,GAAY,OAAO,EAAK,WAAc,SAAW,EAAK,UAAY,OAAO,EAAI,EAAK,SAAW,aAAe,GAAiB,GACrK,KAAK,EAAE,QAAQ,eAAiB,OAClC,EAAY,qBAAqB,KAAK,EAAE,QAAQ,aAAa,EAC7D,KAAK,EAAE,QAAQ,cAAgB,MAEjC,MAAM,EAAQ,YAAY,IAAG,EACvB,EAAU,GAAQ,CACtB,GAAI,KAAK,EAAE,QAAQ,YAAa,CAC9B,KAAK,EAAE,QAAQ,cAAgB,KAC/B,MACF,CACA,IAAI,EAAO,GACX,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,EAAK,CAAC,EACV,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAM,EAAQ,EAAE,OAAS,CAAK,CAAC,EAC5D,EAAI,EAAQ,CAAC,EACb,EAAK,GAAa,CAAC,EACnB,EAAK,EAAE,KAAO,EAAE,EAAI,EAAE,KAAO,EAC7B,EAAK,EAAE,KAAO,EAAE,EAAI,EAAE,KAAO,EAInC,GAHA,EAAE,KAAK,aAAa,EAAQ,OAAO,EAAK,CAAI,CAAC,EAC7C,EAAE,KAAK,aAAa,EAAQ,OAAO,EAAK,CAAI,CAAC,EACzC,EAAE,UAAS,EAAE,KAAK,MAAM,QAAU,OAAO,KAAK,IAAI,EAAG,EAAI,GAAG,CAAC,GAC7D,EAAE,KAAO,EAAE,IAAK,CAClB,MAAM,EAAK,KAAK,MAAM,EAAE,IAAI,CAAC,GAAK,EAAE,IAAI,CAAC,EAAI,EAAE,IAAI,CAAC,GAAK,CAAE,EACrD,EAAK,KAAK,MAAM,EAAE,IAAI,CAAC,GAAK,EAAE,IAAI,CAAC,EAAI,EAAE,IAAI,CAAC,GAAK,CAAE,EACrD,EAAK,KAAK,MAAM,EAAE,IAAI,CAAC,GAAK,EAAE,IAAI,CAAC,EAAI,EAAE,IAAI,CAAC,GAAK,CAAE,EAC3D,EAAE,KAAK,aAAa,OAAQ,OAAO,CAAE,IAAI,CAAE,IAAI,CAAE,GAAG,CACtD,CACI,CAAC,GAAU,EAAE,IAAM,MAAQ,EAAE,IAAM,MAAQ,EAAE,KAAO,EAAE,IACxD,EAAE,KAAK,aAAa,IAAK,OAAO,EAAE,IAAM,EAAE,GAAK,EAAE,IAAM,CAAE,CAAC,EAExD,EAAI,IAAG,EAAO,GACpB,CACA,GAAI,EAAM,CACR,QAAS,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,MAAM,EAAI,EAAK,CAAC,EAChB,EAAE,KAAK,MAAM,QAAU,GACnB,EAAE,KAAO,EAAE,OAAO,EAAE,KAAK,aAAa,OAAQ,EAAE,KAAK,EACrD,CAAC,GAAU,EAAE,IAAM,MAAQ,EAAE,IAAM,MAAQ,EAAE,KAAO,EAAE,IACxD,EAAE,KAAK,aAAa,IAAK,OAAO,EAAE,EAAE,CAAC,CAEzC,CACA,KAAK,EAAE,QAAQ,cAAgB,IACjC,MACE,KAAK,EAAE,QAAQ,cAAgB,EAAY,sBAAsB,CAAM,CAE3E,EACA,KAAK,EAAE,QAAQ,cAAgB,EAAY,sBAAsB,CAAM,CACzE,CASA,cAAc,EAAM,EAAU,EAAM,CAClC,MAAM,EAAM,KAAK,IAAI,EAAG,EAAK,UAAY,GAAG,EACtC,EAAQ,CAAA,EACd,SAAW,CAAC,EAAK,CAAI,IAAK,EACxB,GAAI,CAAC,EAAS,IAAI,CAAG,IACnB,EAAM,KAAK,CAAI,EACX,EAAM,QAAU,GAAK,MAG7B,OAAO,CACT,CAUA,UAAU,EAAO,EAAO,EAAM,CAC5B,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,EAAG,KAAK,GAAG,EACnC,EAAO,KAAK,UACZ,EAAK,EAAE,OAAO,UAAY,EAC1B,EAAK,EAAE,OAAO,WAAa,EAC3B,EAAQ,EAAK,SAAW,QAAU,EAAK,SAAW,WAAa,EAAK,SAAW,MAAQ,EAAI,IAC3F,EAAS,CAAA,EAQf,GAPA,EAAM,QAAS,GAAS,CACtB,MAAM,EAAK,KAAK,SAAS,EAAU,EAAM,EAAM,EAAK,KAAM,EAAG,CAAC,EAC9D,EAAG,KAAK,UAAU,IAAI,sBAAsB,EAC5C,KAAK,UAAU,EAAG,KAAM,EAAM,EAAK,EAAG,EAAK,CAAC,EAC5C,EAAM,IAAI,CAAE,EACZ,EAAO,KAAK,CAAE,KAAM,EAAG,KAAM,GAAI,EAAK,EAAG,GAAI,EAAK,CAAC,CAAE,CACvD,CAAC,EACG,CAAC,KAAK,eAAc,EAAI,CAC1B,EAAO,QAAS,GAAM,EAAE,KAAK,OAAM,CAAE,EACrC,MACF,CACA,MAAM,EAAQ,KAAK,IAAI,EAAG,EAAE,OAAO,MAAM,WAAW,OAAS,GAAG,EAC1D,EAAS,KAAK,UAAU,CAAI,EAC5B,CAAE,GAAA,EAAI,GAAA,CAAE,EAAK,KAAK,YAAY,CAAI,EAClC,EAAO,EAAS,EAAK,EACrB,EAAO,EAAS,EAAK,EACrB,EAAS,EAAS,IAAM,KACxB,EAAS,EAAS,IAAM,KAC1B,KAAK,EAAE,QAAQ,aAAe,OAChC,EAAY,qBAAqB,KAAK,EAAE,QAAQ,WAAW,EAC3D,KAAK,EAAE,QAAQ,YAAc,MAE/B,MAAM,EAAQ,YAAY,IAAG,EACvB,EAAU,GAAQ,CACtB,GAAI,KAAK,EAAE,QAAQ,YAAa,CAC9B,KAAK,EAAE,QAAQ,YAAc,KAC7B,MACF,CACA,MAAM,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAM,GAAS,CAAK,CAAC,EAClD,EAAI,GAAa,CAAC,EACxB,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,MAAM,EAAI,EAAO,CAAC,EAClB,GAAI,EAAO,CACT,MAAM,EAAI,EAAE,IAAM,EAAK,EAAE,IAAM,EAAI,EAC7B,EAAI,EAAE,IAAM,EAAK,EAAE,IAAM,EAAI,EACnC,EAAE,KAAK,aAAa,EAAQ,OAAO,EAAI,CAAI,CAAC,EAC5C,EAAE,KAAK,aAAa,EAAQ,OAAO,EAAI,CAAI,CAAC,CAC9C,CACA,EAAE,KAAK,MAAM,QAAU,OAAO,EAAI,CAAC,CACrC,CACI,EAAI,EACN,KAAK,EAAE,QAAQ,YAAc,EAAY,sBAAsB,CAAM,GAErE,KAAK,EAAE,QAAQ,YAAc,KAC7B,EAAM,MAAQ,EAAM,KAAK,OAAM,EAEnC,EACA,KAAK,EAAE,QAAQ,YAAc,EAAY,sBAAsB,CAAM,CACvE,CAWA,kBAAkB,EAAU,EAAS,EAAO,EAAO,EAAM,EAAO,CAC9D,MAAM,EAAI,KAAK,EACf,GAAI,CAAC,EAAY,UAAS,EAAI,OAC9B,MAAM,EAAK,6BACL,EAAQ,EAAE,WAAW,YAAY,EAAQ,CAAC,GAAK,UAAU,EAAQ,EAAI,CAAC,GACtE,EAAU,EAAQ,EAAI,EAAQ,EAAQ,IAAM,EAC5C,EAAM,EAAK,cACX,EAAW,WAAW,EAAI,QAAQ,GAAK,GAC7C,IAAI,EACA,OAAO,EAAI,WAAc,WAC3B,EAAO,EAAI,UAAU,EAAO,CAC1B,YAAa,EAAQ,EACrB,MAAA,EACA,QAAA,EACA,EAAA,CACR,CAAO,EAED,EAAO,GAAG,CAAK,KAAK,EAAQ,QAAQ,CAAC,CAAC,KAExC,MAAM,EAAM,OAAO,GAAS,SAAW,EAAO,OAAO,CAAI,EACnD,EAAS,EAAY,gBAAgB,EAAI,MAAM,EACrD,EAAO,aAAa,QAAS,uBAAuB,EACpD,EAAO,aAAa,cAAe,QAAQ,EAC3C,EAAO,aAAa,YAAa,GAAG,CAAQ,IAAI,EAChD,EAAO,aAAa,cAAe,EAAI,YAAc,EAAE,OAAO,MAAM,YAAc,SAAS,EAC3F,EAAO,aAAa,cAAe,OAAO,EAAI,YAAc,GAAG,CAAC,EAChE,EAAO,aAAa,OAAQ,EAAI,OAAS,CAAK,EAC9C,MAAM,EAAS,EAAI,WAAa,SAC1B,EAAI,EAAQ,OAAS,EAAW,GAAM,GAAK,EAAI,SAAW,GAC1D,EAAW,EAAI,OAAS,EAAW,IAEzC,GADe,CAAC,GAAU,CAAC,EAAQ,MAAQ,EAAI,SAAW,IAAS,GAAY,KAAK,GAAK,EAAI,IACjF,CACV,MAAM,EAAO,EAAQ,GACf,EAAK,EAAQ,GAAK,EAClB,EAAK,EAAQ,GAAK,EAClB,EAAI,KAAK,CAAE,IAAI,CAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAE,IAAI,CAAI,GACnD,EAAQ,yBAAyB,EAAE,QAAQ,OAAO,IAAI,EAAQ,CAAC,GAC/D,EAAS,EAAY,gBAAgB,EAAI,MAAM,EACrD,EAAO,aAAa,KAAM,CAAK,EAC/B,EAAO,aAAa,IAAK,CAAC,EAC1B,EAAO,aAAa,OAAQ,MAAM,EAClC,EAAO,aAAa,SAAU,MAAM,EACpC,MAAM,EAAK,EAAY,gBAAgB,EAAI,UAAU,EACrD,EAAG,aAAa,OAAQ,IAAI,CAAK,EAAE,EACnC,EAAG,eAAe,+BAAgC,aAAc,IAAI,CAAK,EAAE,EAC3E,EAAG,aAAa,cAAe,KAAK,EACpC,EAAG,YAAc,EACjB,EAAO,YAAY,CAAE,EACrB,EAAS,KAAK,YAAY,CAAM,CAClC,KAAO,CACL,EAAO,aAAa,IAAK,OAAO,EAAQ,EAAE,CAAC,EAC3C,MAAM,EAAI,EAAS,EAAQ,GAAK,EAAQ,OAAS,EAAW,GAAK,EAAI,SAAW,GAAK,EAAQ,GAAK,EAAQ,OAAS,GAAK,EAAI,SAAW,GACvI,EAAO,aAAa,IAAK,OAAO,CAAC,CAAC,EAClC,EAAO,YAAc,CACvB,CACA,EAAS,KAAK,YAAY,CAAM,CAClC,CACF,CACA,MAAM,GAAM,KAAK,GAAK,IAChB,GAAM,IAAM,KAAK,GACjB,GAAQ,6BACR,GAAQ,+BACR,GAAO,CAAC,EAAG,EAAG,IAAM,GAAK,EAAI,GAAK,EACxC,MAAM,EAAc,CAKlB,YAAY,EAAG,EAAK,CAClB,KAAK,IAAM,EACX,KAAK,EAAI,EACT,MAAM,EAAM,EAAE,OACd,KAAK,IAAM,EAAI,YAAY,SAC3B,KAAK,YAAc,EAAI,OAAO,KAAO,EAAI,OAAO,MAAQ,EACxD,KAAK,YAAc,MAAM,QAAQ,EAAI,OAAO,MAAM,EAAI,EAAI,OAAO,OAAO,CAAC,EAAI,EAAI,OAAO,QAAU,OAClG,KAAK,WAAa,KAAK,IAAI,WAC3B,KAAK,SAAW,KAAK,IAAI,SACzB,KAAK,SAAW,EAChB,KAAK,QAAU,EACf,KAAK,QAAU,EACf,KAAK,UAAY,EACjB,KAAK,MAAQ,EACb,KAAK,eAAiB,EACtB,KAAK,OAAS,KACd,KAAK,SAAW,EAChB,KAAK,OAAS,CAAA,EACd,KAAK,UAAY,CAAA,EACjB,KAAK,QAAU,IAAM,EACrB,KAAK,QAAU,IAAM,EACrB,KAAK,WAAa,KAClB,KAAK,QAAU,EACf,KAAK,UAAY,KACjB,KAAK,QAAU,KACf,KAAK,SAAW,IAClB,CAMA,KAAK,EAAQ,CACX,MAAM,EAAI,KAAK,EACT,EAAW,IAAI,EAAS,KAAK,CAAC,EACpC,KAAK,UAAY,EACjB,MAAM,EAAI,EAAS,MAAM,CAAE,MAAO,qBAAqB,CAAE,EACzD,GAAI,EAAE,QAAQ,QAAU,CAAC,GAAU,CAAC,EAAO,OAAQ,OAAO,EAC1D,MAAM,EAAK,EAAE,OAAO,UACd,EAAK,EAAE,OAAO,WAMpB,GALA,KAAK,QAAU,EAAK,GAAK,KAAK,IAAI,SAAW,GAC7C,KAAK,QAAU,EAAK,GAAK,KAAK,IAAI,SAAW,GAC7C,KAAK,UAAY,KAAK,IAAI,EAAI,CAAE,EAAI,KAAO,KAAK,aAAgB,EAAE,OAAO,MAAM,UAAU,QAA2C,EAAjC,EAAE,OAAO,MAAM,WAAW,MACzH,KAAK,UAAY,IACrB,KAAK,OAAS,KAAK,gBAAe,EAC9B,CAAC,KAAK,OAAO,QAAQ,OAAO,EAChC,KAAK,OAAO,QAAS,GAAM,KAAK,YAAY,CAAC,CAAC,EAC9C,KAAK,gBAAe,EACpB,KAAK,UAAY,CAAA,EACjB,MAAM,EAAS,EAAE,QAAQ,QAAU,CAAA,EACnC,KAAK,OAAO,QAAQ,CAAC,EAAG,IAAM,CAC5B,KAAK,WAAW,EAAG,EAAE,OAAS,EAAO,EAAI,EAAO,MAAM,GAAK,SAAS,CACtE,CAAC,EACD,KAAK,MAAQ,KAAK,OAAO,OAAO,CAAC,EAAG,IAAM,EAAI,KAAK,IAAI,EAAG,EAAE,KAAK,EAAG,CAAC,GAAK,EAC1E,KAAK,QAAU,EAAS,MAAM,CAAE,MAAO,2BAA2B,CAAE,EACpE,KAAK,SAAW,EAAS,MAAM,CAAE,MAAO,4BAA4B,CAAE,EACtE,EAAE,IAAI,KAAK,OAAO,EAClB,EAAE,IAAI,KAAK,QAAQ,EACnB,KAAK,OAAS,KACd,KAAK,UAAU,KAAK,MAAM,EAC1B,MAAM,EAAQ,EAAE,OAAO,MAAM,WAC7B,IAAI,EAAO,OACX,OAAI,EAAM,UACJ,EAAE,QAAQ,YACR,EAAM,iBAAiB,UAAS,EAAO,UACjC,EAAE,QAAQ,UACpB,EAAO,UAGX,KAAK,aAAa,CAAI,EACtB,KAAK,kBAAiB,EACf,CACT,CAOA,iBAAkB,CAChB,MAAM,EAEJ,KAAK,EAAE,OAAO,OAEV,EAAQ,GAAa,EAAU,CAAC,EAChC,EAAO,GAAS,MAAM,QAAQ,EAAM,IAAI,EAAI,EAAM,KAAO,EAC/D,OAAK,MAAM,QAAQ,CAAI,EAChB,EAAK,IACV,CAAC,EAAG,IAAM,KAAK,QAAQ,EAAG,EAAG,KAAM,EAAE,CAC3C,EAHqC,CAAA,CAInC,CASA,QAAQ,EAAG,EAAG,EAAmB,EAAW,EAAU,KAAM,CAC1D,IAAI,EAAI,EAAI,EACZ,MAAM,EAAQ,GAAK,OAAO,GAAM,SAC1B,EAAQ,IAAS,GAAM,EAAK,EAAE,IAAM,KAAO,EAAK,EAAE,OAAS,KAAO,EAAU,GAC5E,EAAgB,OAAR,GAAgB,EAAK,EAAE,IAAM,KAAO,EAAK,EAAE,MAAgB,CAAX,EACxD,EAAO,CACX,KAAM,OAAO,CAAK,EAClB,MAAO,MAAM,CAAK,EAAI,KAAO,EAC7B,MAAO,GAAS,EAAE,MAAQ,EAAE,MAAQ,OAGpC,KAAM,GAAG,CAAS,IAAI,CAAC,IAAI,CAAK,EACtC,EAII,GAHI,GAAqB,CAAC,EAAK,QAC7B,EAAK,MAAQ,EAAkB,EAAI,EAAkB,MAAM,GAEzD,GAAS,MAAM,QAAQ,EAAE,QAAQ,GAAK,EAAE,SAAS,OACnD,EAAK,SAAW,EAAE,SAAS,IACzB,CAAC,EAAG,IAAM,KAAK,QAAQ,EAAG,EAAG,KAAM,EAAK,KAAM,CAAO,CAC7D,UACe,GAAS,EAAE,WAAa,KAAM,CACvC,MAAM,EAAU,GAA2B,IAAI,IAC/C,GAAI,CAAC,EAAQ,IAAI,EAAE,SAAS,EAAG,CAC7B,MAAM,EAAK,KAAK,eAAe,EAAE,SAAS,EAC1C,GAAI,GAAM,MAAM,QAAQ,EAAG,IAAI,GAAK,EAAG,KAAK,OAAQ,CAClD,MAAM,EAAW,IAAI,IAAI,CAAO,EAChC,EAAS,IAAI,EAAE,SAAS,EACxB,MAAM,EAAU,MAAM,QAAQ,EAAG,MAAM,EAAI,EAAG,OAAS,KACvD,EAAK,SAAW,EAAG,KAAK,IACtB,CAAC,EAAG,IAAM,KAAK,QAAQ,EAAG,EAAG,EAAS,EAAK,KAAM,CAAQ,CACrE,CACQ,CACF,CACF,CACA,OAAO,CACT,CAKA,eAAe,EAAI,CACjB,MAAM,EAAK,KAAK,EAAE,OAAO,UAEzB,OADa,GAAM,MAAM,QAAQ,EAAG,MAAM,EAAI,EAAG,OAAS,CAAA,GAC9C,KAAM,GAAM,GAAK,EAAE,KAAO,CAAE,CAC1C,CAKA,YAAY,EAAM,CACZ,EAAK,UAAY,EAAK,SAAS,SACjC,EAAK,SAAS,QAAS,GAAM,KAAK,YAAY,CAAC,CAAC,GAC5C,EAAK,OAAS,MAAQ,MAAM,EAAK,KAAK,KACxC,EAAK,MAAQ,EAAK,SAAS,OACzB,CAAC,EAAG,IAAM,EAAI,KAAK,IAAI,EAAG,EAAE,OAAS,CAAC,EACtC,CACV,KAGQ,EAAK,OAAS,MAAQ,MAAM,EAAK,KAAK,KAAG,EAAK,MAAQ,EAC5D,CAOA,iBAAkB,CAChB,GAAI,KAAK,IAAI,YAAc,SAAU,OACrC,IAAI,EAAS,GACb,MAAM,EAAQ,GAAS,CACrB,GAAI,EAAK,UAAY,EAAK,SAAS,OAAQ,CACzC,MAAM,EAAM,EAAK,SAAS,OACxB,CAAC,EAAG,IAAM,EAAI,KAAK,IAAI,EAAG,EAAE,OAAS,CAAC,EACtC,CACV,EACY,CAAC,GAAU,EAAK,OAAS,MAAQ,KAAK,IAAI,EAAM,EAAK,KAAK,EAAI,KAChE,QAAQ,KACN,gDAAgD,EAAK,IAAI,MAAM,EAAK,KAAK,6BAA6B,CAAG,6CACrH,EACU,EAAS,IAEX,EAAK,SAAS,QAAQ,CAAI,CAC5B,CACF,EACA,KAAK,OAAO,QAAQ,CAAI,CAC1B,CAOA,WAAW,EAAM,EAAO,CACtB,EAAK,OAAS,EAAK,OAAS,EAC5B,KAAK,UAAU,KAAK,CAAI,EACpB,EAAK,UACP,EAAK,SAAS,QACX,GAAM,KAAK,WAAW,EAAG,EAAE,OAAS,KAAK,SAAS,EAAK,OAAQ,KAAK,IAAI,IAAI,CAAC,CACtF,CAEE,CAMA,UAAU,EAAO,CAKf,GAJA,KAAK,UAAU,QAAS,GAAM,CAC5B,EAAE,MAAQ,EACZ,CAAC,EACD,KAAK,eAAiB,EACjB,EASH,KAAK,UAAU,EAAO,EAAG,KAAK,WAAY,KAAK,SAAU,EAAM,OAAO,MAT5D,CACV,MAAM,EAAQ,KAAK,OAAO,OAAO,CAAC,EAAG,IAAM,EAAI,KAAK,IAAI,EAAG,EAAE,KAAK,EAAG,CAAC,GAAK,EAC3E,IAAI,EAAI,KAAK,WACb,KAAK,OAAO,QAAS,GAAM,CACzB,MAAM,GAAQ,KAAK,SAAW,KAAK,YAAc,KAAK,IAAI,EAAG,EAAE,KAAK,EAAI,EACxE,KAAK,UAAU,EAAG,EAAG,EAAG,EAAI,EAAM,IAAI,EACtC,GAAK,CACP,CAAC,CACH,CAGA,MAAM,EAAO,KAAK,WAAW,KAAK,IAAI,UAAW,KAAK,SAAS,EACzD,EAAY,KAAK,eAAiB,EAClC,GAAQ,KAAK,UAAY,GAAQ,EACjC,EAAY,EAAY,EAAI,EAAI,EACtC,KAAK,QAAW,GAAO,EAAO,EAAK,GAAQ,EAAK,EAAI,EAAY,EAAI,GACpE,KAAK,QAAW,GAAO,GAAQ,EAAK,GAAK,EAAO,EAAY,EAC5D,KAAK,UAAU,QAAS,GAAM,CACvB,EAAE,QACP,EAAE,IAAM,KAAK,QAAQ,EAAE,OAAO,EAC9B,EAAE,IAAM,EAAE,OAAS,KAAK,IAAI,OAAS,UAAY,EAAE,QAAU,KAAK,eAAiB,KAAK,UAAY,KAAK,QAAQ,EAAE,OAAO,EAC5H,CAAC,CACH,CAQA,UAAU,EAAM,EAAQ,EAAI,EAAI,EAAQ,CAQtC,GAPA,EAAK,MAAQ,GACb,EAAK,QAAU,EACf,EAAK,IAAM,EACX,EAAK,IAAM,EACX,EAAK,QAAU,EACf,EAAK,MAAQ,EAAE,EAAK,UAAY,EAAK,SAAS,QAC1C,EAAS,KAAK,iBAAgB,KAAK,eAAiB,GACpD,CAAC,EAAK,MAAO,CACf,MAAM,EAAQ,EAAK,SAAS,OAC1B,CAAC,EAAG,IAAM,EAAI,KAAK,IAAI,EAAG,EAAE,KAAK,EACjC,CACR,GAAW,EACL,IAAI,EAAI,EACR,EAAK,SAAS,QAAS,GAAM,CAC3B,MAAM,GAAQ,EAAK,GAAM,KAAK,IAAI,EAAG,EAAE,KAAK,EAAI,EAChD,KAAK,UAAU,EAAG,EAAS,EAAG,EAAG,EAAI,EAAM,CAAI,EAC/C,GAAK,CACP,CAAC,CACH,CACF,CAYA,aAAa,EAAM,CAEjB,MAAM,EADI,KAAK,EACC,OAAO,MAAM,WACvB,EAAO,EAAM,QAAc,IAAS,OAAS,EAAI,IAAS,SAAW,EAAM,iBAAiB,OAAS,IAAM,EAAM,OAAS,IAAnG,EACvB,EAAM,EAAE,KAAK,SACb,EAAO,IAAS,SAEpB,KAAK,IAAI,mBACP,KACJ,KAAK,UAAU,QAAS,GAAS,CAC/B,GAAI,EAAK,MAAO,CACd,MAAM,EAAS,CACb,GAAI,EAAK,IACT,GAAI,EAAK,IACT,GAAI,EAAK,IACT,GAAI,EAAK,GACnB,EAEQ,GADK,EAAK,MAAK,EAAK,IAAM,KAAK,aAAa,CAAI,GAC5C,IAAS,SAAW,EAAM,EAC5B,KAAK,UAAU,EAAM,EAAQ,EAAK,CAAG,MAChC,CACL,IAAI,EACA,EAAQ,GACZ,GAAI,EAAK,KACP,EAAO,EAAK,aACH,GAAQ,EAAK,IAAI,EAAK,IAAI,EACnC,EAAO,EAAK,IAAI,EAAK,IAAI,MACpB,CACL,MAAM,GAAO,EAAO,GAAK,EAAO,IAAM,EACtC,EAAO,CAAE,GAAI,EAAK,GAAI,EAAK,GAAI,EAAO,GAAI,GAAI,EAAO,EAAE,EACvD,EAAQ,EACV,CACA,KAAK,YAAY,EAAM,EAAM,EAAQ,EAAK,GAAO,EAAO,CAAG,CAC7D,CACF,SAAW,EAAK,KAAO,EAAK,KAAM,CAChC,MAAM,GAAO,EAAK,KAAK,GAAK,EAAK,KAAK,IAAM,EACtC,EAAS,CAAE,GAAI,EAAK,GAAI,EAAK,GAAI,EAAK,KAAK,GAAI,GAAI,EAAK,KAAK,EAAE,EACrE,KAAK,YAAY,EAAM,EAAK,KAAM,EAAQ,EAAK,GAAM,GAAO,CAAG,CACjE,CACF,CAAC,EACD,MAAM,EAAwB,IAAI,IAClC,KAAK,UAAU,QAAS,GAAM,CACxB,EAAE,OACJ,EAAM,IAAI,EAAE,KAAM,CAAE,GAAI,EAAE,IAAK,GAAI,EAAE,IAAK,GAAI,EAAE,IAAK,GAAI,EAAE,GAAG,CAAE,CAEpE,CAAC,EACD,KAAK,IAAI,mBAAqB,EAC9B,KAAK,cAAc,CAAG,CACxB,CAUA,UAAU,EAAM,EAAQ,EAAK,EAAK,CAChC,MAAM,EAAK,EAAK,IACV,EAAK,KAAK,IAAI,aACd,EAAK,KAAK,WACV,EAAK,KAAK,SAChB,EAAG,KAAK,MAAM,QAAU,GACxB,EAAG,KAAK,CAAE,EAAG,GAAI,QAAS,CAAC,CAAE,EAC7B,EAAG,QAAQ,CAAG,EAAE,OAAQ,GAAQ,CAC9B,GAAI,KAAK,WAAa,EAAK,OAC3B,MAAM,EAAQ,GAAM,EAAK,GAAM,EAC/B,GAAI,GAAS,EAAO,GAAK,IAAM,CAC7B,EAAG,KAAK,CAAE,EAAG,EAAE,CAAE,EACjB,MACF,CACA,MAAM,EAAK,KAAK,IAAI,EAAO,GAAI,CAAK,EACpC,EAAG,KAAK,CAAE,EAAG,KAAK,SAAS,EAAO,GAAI,EAAO,GAAI,EAAO,GAAI,EAAI,CAAE,CAAC,CAAE,EACrE,EAAK,KAAO,CAAE,GAAI,EAAO,GAAI,GAAA,EAAI,GAAI,EAAO,GAAI,GAAI,EAAO,EAAE,CAC/D,CAAC,EAAE,MAAM,IAAM,CACT,KAAK,WAAa,IACtB,EAAK,KAAO,EACd,CAAC,CACH,CAKA,aAAa,EAAM,CACjB,MAAM,EAAO,KAAK,UAAU,SAAS,CACnC,EAAG,GACH,KAAM,EAAK,OACX,OAAQ,KAAK,YACb,YAAa,KAAK,YAClB,YAAa,EACb,QAAS,yBACf,CAAK,EACK,EAAK,EAAK,KAChB,OAAA,EAAG,aAAa,YAAa,EAAK,IAAI,EACtC,EAAG,aAAa,aAAc,OAAO,EAAK,KAAK,CAAC,EAChD,KAAK,eAAe,EAAI,CAAI,EACxB,EAAY,UAAS,IACvB,EAAG,iBAAiB,QAAS,IAAM,KAAK,QAAQ,CAAI,CAAC,EACrD,EAAG,MAAM,OAAS,WAEpB,KAAK,QAAQ,IAAI,CAAI,EACd,CACT,CAUA,YAAY,EAAM,EAAM,EAAI,EAAK,EAAM,EAAS,EAAK,CACnD,MAAM,EAAK,EAAK,IACV,EAAK,KAAK,IAAI,aAEpB,GADA,EAAG,KAAK,CAAE,KAAM,EAAK,MAAM,CAAE,EACzB,IAAQ,EAAG,CACb,EAAG,KAAK,CAAE,EAAG,KAAK,SAAS,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAE,EAAG,QAAS,EAAO,EAAI,CAAC,CAAE,EACnF,EAAG,KAAK,MAAM,QAAU,EAAO,OAAS,GACxC,EAAK,KAAO,EAAO,KAAO,EAC1B,MACF,CACA,EAAG,KAAK,MAAM,QAAU,GACxB,MAAM,EAAU,EAAO,OAAO,EAAG,KAAK,SAAS,CAAC,GAAK,EAAI,EAAU,EAAI,EACjE,EAAQ,EAAO,EAAI,EACzB,EAAG,KAAK,CAAE,QAAS,CAAO,CAAE,EAC5B,EAAG,QAAQ,CAAG,EAAE,OAAQ,GAAQ,CAC9B,GAAI,KAAK,WAAa,EAAK,OAC3B,MAAM,EAAK,GAAK,EAAK,GAAI,EAAG,GAAI,CAAG,EAC7B,EAAK,GAAK,EAAK,GAAI,EAAG,GAAI,CAAG,EAC7B,EAAK,GAAK,EAAK,GAAI,EAAG,GAAI,CAAG,EAC7B,EAAK,GAAK,EAAK,GAAI,EAAG,GAAI,CAAG,EACnC,EAAG,KAAK,CACN,EAAG,KAAK,SAAS,EAAI,EAAI,EAAI,EAAI,CAAE,EACnC,QAAS,GAAK,EAAS,EAAO,CAAG,CACzC,CAAO,EACD,EAAK,KAAO,CAAE,GAAA,EAAI,GAAA,EAAI,GAAA,EAAI,GAAA,CAAE,CAC9B,CAAC,EAAE,MAAM,IAAM,CACT,KAAK,WAAa,IAClB,GACF,EAAG,KAAK,MAAM,QAAU,OACxB,EAAK,KAAO,MAEZ,EAAK,KAAO,EAEhB,CAAC,CACH,CAOA,cAAc,EAAK,CACjB,MAAM,EAAU,KAAK,SACrB,KAAO,EAAQ,KAAK,YAAY,EAAQ,KAAK,YAAY,EAAQ,KAAK,UAAU,EAC3E,KAAK,IAAI,WAAW,OACzB,KAAK,UAAU,QAAS,GAAS,CAC1B,EAAK,QACN,EAAK,IAAM,EAAK,IAAM,KAAK,IAAI,WAAW,gBAC9C,KAAK,mBAAmB,CAAI,EAC9B,CAAC,EACG,EAAM,GACR,EAAQ,KAAK,CAAE,QAAS,CAAC,CAAE,EAC3B,EAAQ,QAAQ,IAAK,CAAG,EAAE,KAAK,CAAE,QAAS,CAAC,CAAE,GAE7C,EAAQ,KAAK,CAAE,QAAS,CAAC,CAAE,EAE/B,CAMA,mBAAmB,EAAM,CACvB,GAAI,CAAC,EAAY,UAAS,EAAI,OAC9B,MAAM,EAAQ,KAAK,IAAI,WAAW,MAC5B,EAAI,KAAK,EACT,GAAK,EAAK,IAAM,EAAK,KAAO,EAC5B,GAAO,EAAK,IAAM,EAAK,KAAO,EAC9B,EAAO,EAAM,IAAM,EAAM,IACzB,EAAS,KAAK,IAAI,EAAI,EAAI,EAAI,EAAI,GAAM,GAAI,EAAK,IAAM,EAAK,KAAO,CAAC,EACpE,EAAO,EAAO,EAAK,IAAM,EAAS,EAAK,IAAM,EAC7C,EAAK,EAAO,EAAK,IAAM,EAAS,EAAK,IAAM,EAC3C,EAAK,KAAK,MAAM,EAAG,CAAI,EACvB,EAAK,KAAK,MAAM,EAAG,CAAE,EACrB,EAAW,KAAK,IAAI,EAAK,CAAI,EAAI,IAAM,EAAI,EAC3C,EAAQ,EAAO,EAAI,EACnB,EAAK,cAAc,EAAE,QAAQ,IAAI,IAAI,KAAK,SAAS,GACnD,EAAQ,EAAY,gBAAgB,GAAO,MAAM,EACvD,EAAM,aAAa,KAAM,CAAE,EAC3B,EAAM,aACJ,IACA,KAAK,EAAG,CAAC,IAAI,EAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAQ,IAAI,CAAK,IAAI,EAAG,CAAC,IAAI,EAAG,CAAC,EAC1E,EACI,EAAM,aAAa,OAAQ,MAAM,EACjC,EAAM,aAAa,SAAU,MAAM,EACnC,MAAM,EAAS,EAAM,OACf,GAAQ,MAAM,QAAQ,CAAM,EAAI,EAAO,CAAC,EAAI,IAAW,OACvD,EAAO,EAAY,gBAAgB,GAAO,MAAM,EACtD,EAAK,aAAa,YAAa,EAAM,UAAY,MAAM,EACnD,EAAM,YAAY,EAAK,aAAa,cAAe,EAAM,UAAU,EACvE,EAAK,aAAa,cAAe,OAAO,EAAM,YAAc,GAAG,CAAC,EAChE,EAAK,aAAa,OAAQ,CAAI,EAC9B,EAAK,aAAa,oBAAqB,SAAS,EAChD,EAAK,MAAM,cAAgB,OAC3B,MAAM,EAAK,EAAY,gBAAgB,GAAO,UAAU,EACxD,EAAG,aAAa,OAAQ,IAAM,CAAE,EAChC,EAAG,eAAe,+BAAgC,aAAc,IAAM,CAAE,EACxE,EAAG,aAAa,cAAe,KAAK,EACpC,EAAG,aAAa,cAAe,QAAQ,EACvC,EAAG,YAAc,KAAK,UAAU,EAAK,KAAM,EAAG,EAAK,IAAM,EAAK,IAAK,EAAM,QAAQ,EACjF,EAAK,YAAY,CAAE,EACnB,KAAK,SAAS,KAAK,YAAY,CAAK,EACpC,KAAK,SAAS,KAAK,YAAY,CAAI,CACrC,CASA,UAAU,EAAO,EAAG,EAAS,EAAU,CACrC,MAAM,EAAS,EAAI,EAAU,GAAM,EAC7B,GAAS,WAAW,CAAQ,GAAK,IAAM,IACvC,EAAW,KAAK,MAAM,EAAS,CAAK,EAC1C,OAAI,GAAY,EAAM,OAAe,EACjC,GAAY,EAAU,GACnB,EAAM,MAAM,EAAG,KAAK,IAAI,EAAG,EAAW,CAAC,CAAC,EAAI,QACrD,CAOA,QAAQ,EAAM,CACZ,GAAI,KAAK,IAAI,cAAgB,GAAO,OACpC,MAAM,EAAY,IAAS,KAAK,OAAS,EAAK,SAAW,KAAO,EAC5D,IAAc,KAAK,SACvB,KAAK,OAAS,GAAa,EAAE,EAAU,UAAY,EAAU,SAAS,QAAU,EAAU,SAAW,KAAO,EAC5G,KAAK,UAAU,KAAK,MAAM,EAC1B,KAAK,aAAa,MAAM,EACxB,KAAK,kBAAiB,EACxB,CAEA,aAAc,CACZ,MAAM,EAAQ,CAAA,EACd,IAAI,EAAI,KAAK,OACb,KAAO,GACL,EAAM,QAAQ,CAAC,EACf,EAAI,EAAE,QAER,OAAO,CACT,CAKA,mBAAoB,CAClB,GAAI,CAAC,EAAY,UAAS,EAAI,OAE9B,MAAM,EADI,KAAK,EACE,IAAI,OACrB,GAAI,CAAC,EAAQ,OACb,MAAM,EAAW,EAAO,cAAc,wBAAwB,EAE9D,GADI,GAAY,EAAS,YAAY,EAAS,WAAW,YAAY,CAAQ,EACzE,CAAC,KAAK,OAAQ,OAClB,MAAM,EAAM,EAAY,gBAAgB,GAAO,KAAK,EACpD,EAAI,aAAa,QAAS,uBAAuB,EACjD,EAAI,aAAa,aAAc,qBAAqB,EACpD,EAAI,MAAM,SAAW,WACrB,EAAI,MAAM,IAAM,MAChB,EAAI,MAAM,KAAO,MACjB,MAAM,EAAS,CAAC,CAAE,KAAM,MAAO,KAAM,IAAI,CAAE,EAAE,OAC3C,KAAK,YAAW,EAAG,IAAK,IAAO,CAAE,KAAM,EAAE,KAAM,KAAM,CAAC,EAAG,CAC/D,EACI,EAAO,QAAQ,CAAC,EAAO,IAAM,CAC3B,GAAI,EAAI,EAAG,CACT,MAAM,EAAM,EAAY,gBAAgB,GAAO,MAAM,EACrD,EAAI,aAAa,QAAS,iCAAiC,EAC3D,EAAI,YAAc,MAClB,EAAI,YAAY,CAAG,CACrB,CAEA,GADkB,IAAM,EAAO,OAAS,EACzB,CACb,MAAM,EAAM,EAAY,gBAAgB,GAAO,MAAM,EACrD,EAAI,aACF,QACA,0DACV,EACQ,EAAI,YAAc,EAAM,KACxB,EAAI,YAAY,CAAG,CACrB,KAAO,CACL,MAAM,EAAM,EAAY,gBAAgB,GAAO,QAAQ,EAGvD,GAFA,EAAI,aAAa,OAAQ,QAAQ,EACjC,EAAI,aAAa,QAAS,4BAA4B,EAClD,IAAM,EAAG,CACX,MAAM,EAAQ,EAAY,gBAAgB,GAAO,MAAM,EACvD,EAAM,aAAa,QAAS,6BAA6B,EACzD,EAAM,YAAc,SACpB,EAAI,YAAY,CAAK,CACvB,CACA,MAAM,EAAO,EAAY,gBAAgB,GAAO,MAAM,EACtD,EAAK,aAAa,QAAS,6BAA6B,EACxD,EAAK,YAAc,EAAM,KACzB,EAAI,YAAY,CAAI,EACpB,EAAI,iBAAiB,QAAS,IAAM,CAClC,KAAK,OAAS,EAAM,KACpB,KAAK,UAAU,KAAK,MAAM,EAC1B,KAAK,aAAa,MAAM,EACxB,KAAK,kBAAiB,CACxB,CAAC,EACD,EAAI,YAAY,CAAG,CACrB,CACF,CAAC,EACD,EAAO,YAAY,CAAG,EACtB,KAAK,oBAAoB,CAAG,CAC9B,CAQA,oBAAoB,EAAK,CACvB,MAAM,EAAI,KAAK,EACT,EAEJ,CAAC,yBAA0B,2BAA2B,EAAE,IAAK,GAAM,EAAE,IAAI,OAAO,cAAc,CAAC,CAAC,EAAE,OAAQ,GAAO,IAAO,IAAI,EAE9H,GAAI,CAAC,EAAO,OAAQ,OACpB,MAAM,EAAU,EAAE,IAAI,OAAO,sBAAqB,EAAG,IACrD,QAAS,EAAO,EAAG,EAAO,EAAO,OAAS,EAAG,IAAQ,CACnD,MAAM,EAAK,EAAI,sBAAqB,EAC9B,EAAM,EAAO,KAAM,GAAO,CAC9B,MAAM,EAAI,EAAG,sBAAqB,EAClC,OAAO,EAAG,KAAO,EAAE,OAAS,EAAG,MAAQ,EAAE,MAAQ,EAAG,IAAM,EAAE,QAAU,EAAG,OAAS,EAAE,GACtF,CAAC,EACD,GAAI,CAAC,EAAK,MACV,EAAI,MAAM,IAAM,GAAG,EAAI,sBAAqB,EAAG,OAAS,EAAU,CAAC,IACrE,CACF,CAOA,MAAM,EAAG,EAAK,CACZ,MAAO,CACL,EAAG,KAAK,QAAU,EAAI,KAAK,KAAK,EAAM,IAAM,EAAG,EAC/C,EAAG,KAAK,QAAU,EAAI,KAAK,KAAK,EAAM,IAAM,EAAG,CACrD,CACE,CAYA,SAAS,EAAI,EAAI,EAAI,EAAI,EAAc,CACrC,GAAI,GAAM,EAAK,IAAM,MAAO,GAC5B,IAAI,EAAU,EAAK,EACnB,MAAM,EAAU,KAAK,IAAI,QACzB,GAAI,EAAU,GAAK,EAAU,GAAK,EAAK,EAAG,CACxC,MAAM,EAAS,EAAU,EAAK,GACxB,EAAQ,KAAK,IAAI,EAAS,EAAG,KAAK,IAAI,EAAG,EAAU,EAAI,GAAI,CAAC,EAClE,GAAM,EACN,GAAM,EACN,EAAU,EAAK,CACjB,CACA,GAAI,GAAW,EAAG,MAAO,GACzB,MAAM,EAAU,EAAU,GACpB,EAAK,KAAK,QACV,EAAK,KAAK,QAChB,IAAI,EAAI,EAER,OADA,EAAI,KAAK,IAAI,EAAG,EAAU,EAAK,EAAG,EAAU,EAAK,GAAI,EAAK,GAAM,CAAC,EAC3D,EAAI,GAGH,GAAwB,CAAE,GAAA,EAAI,GAAA,EAAI,IAAK,EAAI,KAAM,EAAI,GAAA,EAAI,GAAA,EAAI,EAAA,EAAG,QAAA,CAAO,CAAE,EAFvE,GAAsB,CAAE,GAAA,EAAI,GAAA,EAAI,IAAK,EAAI,KAAM,EAAI,GAAA,EAAI,GAAA,EAAI,QAAA,CAAO,CAAE,CAG/E,CAGA,MAAO,CACL,OAAK,KAAK,aACR,KAAK,WAAa,KAAK,EAAE,IAAI,OAAO,cAAc,qBAAqB,GAElE,KAAK,UACd,CAKA,eAAe,EAAI,EAAM,CACnB,CAAC,KAAK,EAAE,OAAO,QAAQ,SAAW,CAAC,EAAY,UAAS,IAC5D,EAAG,iBACD,aACC,GAAM,KAAK,aAAa,EAAG,CAAI,CACtC,EACI,EAAG,iBACD,YACC,GAAM,KAAK,iBAAiB,CAAC,CACpC,EACI,EAAG,iBAAiB,aAAc,IAAM,KAAK,aAAY,CAAE,EAC7D,CAKA,aAAa,EAAG,EAAM,CACpB,MAAM,EAAI,KAAK,KAAI,EACnB,GAAI,CAAC,EAAG,OACR,MAAM,EAAI,KAAK,EACT,GAAY,EAAK,MAAQ,KAAK,MAAQ,KAAK,QAAQ,CAAC,EACpD,EAAY,EAAK,QAAU,EAAK,QAAQ,MAAQ,KAAK,MACrD,EAAY,EAAY,GAAK,EAAK,MAAQ,EAAY,KAAK,QAAQ,CAAC,EAAI,EACxE,EAAU,EAAE,OAAO,QAAQ,gBAAkB,oBAAoB,EAAK,MAAM,IAAM,GACxF,EAAE,UAAY,sFAAsF,CAAO,qEAAqE,EAAK,MAAM,uIAAuI,EAAK,IAAI,0DAA0D,EAAK,KAAK,KAAK,CAAS,gBAAgB,CAAQ,uCACrb,EAAE,UAAU,IAAI,mBAAmB,EACnC,EAAE,MAAM,QAAU,IAClB,KAAK,iBAAiB,CAAC,CACzB,CAMA,iBAAiB,EAAG,CAClB,MAAM,EAAI,KAAK,KAAI,EACnB,GAAI,CAAC,EAAG,OACR,MAAM,EAAO,KAAK,EAAE,IAAI,OAAO,sBAAqB,EAC9C,EAAK,EAAE,YACP,EAAK,EAAE,aACP,EAAM,GACZ,IAAI,EAAI,EAAE,QAAU,EAAK,KAAO,EAC5B,EAAI,EAAK,EAAK,QAAO,EAAI,EAAE,QAAU,EAAK,KAAO,EAAK,GAC1D,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,EAAK,MAAQ,CAAE,CAAC,EAC5C,IAAI,EAAI,EAAE,QAAU,EAAK,IAAM,EAC3B,EAAI,EAAK,EAAK,SAAQ,EAAI,EAAE,QAAU,EAAK,IAAM,EAAK,GAC1D,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,EAAK,OAAS,CAAE,CAAC,EAC7C,EAAE,MAAM,KAAO,EAAI,KACnB,EAAE,MAAM,IAAM,EAAI,IACpB,CACA,cAAe,CACb,MAAM,EAAI,KAAK,KAAI,EACd,IACL,EAAE,UAAU,OAAO,mBAAmB,EACtC,EAAE,MAAM,QAAU,IACpB,CAOA,WAAW,EAAM,EAAK,CACpB,GAAI,OAAO,GAAS,SAAU,OAAO,EACrC,MAAM,EAAI,OAAO,CAAI,EAAE,KAAI,EAC3B,GAAI,EAAE,SAAS,GAAG,EAAG,OAAO,WAAW,CAAC,EAAI,IAAM,EAClD,MAAM,EAAI,WAAW,CAAC,EACtB,OAAO,MAAM,CAAC,EAAI,IAAO,EAAM,CACjC,CAOA,SAAS,EAAO,EAAQ,CACtB,GAAI,OAAO,GAAU,UAAY,EAAM,CAAC,IAAM,IAAK,OAAO,EAC1D,IAAI,EAAM,EAAM,MAAM,CAAC,EAIvB,GAHI,EAAI,SAAW,IACjB,EAAM,EAAI,MAAM,EAAE,EAAE,IAAK,GAAM,EAAI,CAAC,EAAE,KAAK,EAAE,GAE3C,EAAI,SAAW,EAAG,OAAO,EAC7B,MAAM,EAAM,SAAS,EAAK,EAAE,EAC5B,GAAI,MAAM,CAAG,EAAG,OAAO,EACvB,IAAI,EAAK,GAAO,GAAK,IACjB,EAAK,GAAO,EAAI,IAChB,EAAK,EAAM,IACf,OAAA,EAAK,KAAK,MAAM,GAAM,IAAM,GAAM,CAAM,EACxC,EAAK,KAAK,MAAM,GAAM,IAAM,GAAM,CAAM,EACxC,EAAK,KAAK,MAAM,GAAM,IAAM,GAAM,CAAM,EACjC,MAAQ,GAAK,KAAO,GAAM,KAAO,GAAM,GAAK,GAAI,SAAS,EAAE,EAAE,MAAM,CAAC,CAC7E,CACF,CACA,GAAW,IAAI,CACb,KAAM,GACN,KAAM,GACN,QAAS,GACT,OAAQ,GACR,UAAW,GACX,IAAK,GACL,OAAQ,GACR,WAAY,GACZ,SAAU,GACV,YAAa,GACb,QAAS,GACT,OAAQ,GACR,IAAK,GACL,MAAO,GACP,UAAW,GACX,UAAW,GACX,MAAO,GACP,QAAS,GACT,QAAS,GACT,KAAM,GACN,SAAU,EACZ,CAAC","file":"/npm/apexcharts@6.8.0/dist/apexcharts.esm.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v4.62.2 and esbuild v0.28.1.\n * Original file: /npm/apexcharts@6.8.0/dist/apexcharts.esm.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __async = (__this, __arguments, generator) => {\n  return new Promise((resolve, reject) => {\n    var fulfilled = (value) => {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var rejected = (value) => {\n      try {\n        step(generator.throw(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n    step((generator = generator.apply(__this, __arguments)).next());\n  });\n};\n/*!\n * ApexCharts v6.8.0\n * (c) 2018-2026 ApexCharts\n */\nclass Environment {\n  /**\n   * Check if running in server-side rendering environment (Node.js)\n   * @returns {boolean} True if in SSR/Node.js, false if in browser\n   */\n  static isSSR() {\n    return typeof window === \"undefined\" || typeof document === \"undefined\";\n  }\n  /**\n   * Check if running in browser environment\n   * @returns {boolean} True if in browser, false if in SSR/Node.js\n   */\n  static isBrowser() {\n    return !this.isSSR();\n  }\n  /**\n   * Check if a specific browser API is available\n   * @param {string} api - Name of the API to check (e.g., 'ResizeObserver')\n   * @returns {boolean} True if API is available\n   */\n  static hasAPI(api) {\n    if (this.isSSR()) return false;\n    return typeof /** @type {any} */\n    window[api] !== \"undefined\";\n  }\n  /**\n   * Returns the global Apex config object regardless of environment.\n   * In browser: window.Apex; in SSR/Node.js: global.Apex; fallback: {}.\n   * @returns {any}\n   */\n  static getApex() {\n    if (typeof window !== \"undefined\" && window.Apex) return window.Apex;\n    if (typeof global !== \"undefined\" && global.Apex) return global.Apex;\n    return {};\n  }\n}\nclass SSRElement {\n  /**\n   * @param {string} nodeName\n   * @param {any} namespaceURI\n   */\n  constructor(nodeName, namespaceURI = null) {\n    this.nodeName = nodeName;\n    this.namespaceURI = namespaceURI;\n    this.attributes = /* @__PURE__ */ new Map();\n    this.children = [];\n    this.textContent = \"\";\n    this.style = {};\n    this.classList = new SSRClassList();\n    this.parentNode = /** @type {SSRElement | null} */\n    null;\n    this._ssrWidth = void 0;\n    this._ssrHeight = void 0;\n    this._ssrMode = void 0;\n  }\n  /**\n   * @param {string} name\n   * @param {any} value\n   */\n  setAttribute(name2, value) {\n    this.attributes.set(name2, value);\n  }\n  /**\n   * @param {string} name\n   */\n  getAttribute(name2) {\n    return this.attributes.get(name2);\n  }\n  /**\n   * @param {string} name\n   */\n  removeAttribute(name2) {\n    this.attributes.delete(name2);\n  }\n  /**\n   * @param {string} name\n   */\n  hasAttribute(name2) {\n    return this.attributes.has(name2);\n  }\n  /**\n   * @param {any} child\n   */\n  appendChild(child) {\n    if (child && child !== this) {\n      if (child.parentNode && child.parentNode !== this) {\n        child.parentNode.removeChild(child);\n      } else if (child.parentNode === this) {\n        const index = this.children.indexOf(child);\n        if (index !== -1) this.children.splice(index, 1);\n      }\n      child.parentNode = this;\n      this.children.push(child);\n    }\n    return child;\n  }\n  /**\n   * @param {any} child\n   */\n  removeChild(child) {\n    const index = this.children.indexOf(child);\n    if (index !== -1) {\n      this.children.splice(index, 1);\n      child.parentNode = null;\n    }\n    return child;\n  }\n  /**\n   * @param {any} newNode\n   * @param {any} referenceNode\n   */\n  insertBefore(newNode, referenceNode) {\n    if (!referenceNode) {\n      return this.appendChild(newNode);\n    }\n    if (newNode.parentNode && newNode.parentNode !== this) {\n      newNode.parentNode.removeChild(newNode);\n    } else if (newNode.parentNode === this) {\n      const existingIndex = this.children.indexOf(newNode);\n      if (existingIndex !== -1) this.children.splice(existingIndex, 1);\n    }\n    const index = this.children.indexOf(referenceNode);\n    if (index !== -1) {\n      newNode.parentNode = this;\n      this.children.splice(index, 0, newNode);\n    }\n    return newNode;\n  }\n  cloneNode(deep = false) {\n    const clone = new SSRElement(this.nodeName, this.namespaceURI);\n    clone.textContent = this.textContent;\n    this.attributes.forEach((value, key) => {\n      clone.attributes.set(key, value);\n    });\n    Object.assign(clone.style, this.style);\n    if (deep) {\n      this.children.forEach((child) => {\n        if (child.cloneNode) {\n          clone.appendChild(child.cloneNode(true));\n        }\n      });\n    }\n    return clone;\n  }\n  getBoundingClientRect() {\n    return {\n      width: this._ssrWidth || 0,\n      height: this._ssrHeight || 0,\n      top: 0,\n      left: 0,\n      right: this._ssrWidth || 0,\n      bottom: this._ssrHeight || 0,\n      x: 0,\n      y: 0\n    };\n  }\n  getRootNode() {\n    let root = this;\n    while (root.parentNode) {\n      root = root.parentNode;\n    }\n    return root;\n  }\n  querySelector() {\n    return null;\n  }\n  querySelectorAll() {\n    return [];\n  }\n  getElementsByClassName() {\n    return [];\n  }\n  addEventListener() {\n  }\n  removeEventListener() {\n  }\n  get childNodes() {\n    return this.children;\n  }\n  toString() {\n    let attrs = \"\";\n    this.attributes.forEach((value, key) => {\n      attrs += ` ${key}=\"${value}\"`;\n    });\n    if (this.children.length === 0 && !this.textContent) {\n      return `<${this.nodeName}${attrs}/>`;\n    }\n    const childrenStr = this.children.map((c) => c.toString()).join(\"\");\n    return `<${this.nodeName}${attrs}>${this.textContent}${childrenStr}</${this.nodeName}>`;\n  }\n  // Property getters/setters\n  get innerHTML() {\n    return this.children.map((c) => c.toString()).join(\"\");\n  }\n  set innerHTML(value) {\n    this.children = [];\n    this.textContent = value;\n  }\n  get outerHTML() {\n    return this.toString();\n  }\n  get isConnected() {\n    return true;\n  }\n}\nclass SSRClassList {\n  constructor() {\n    this.classes = /* @__PURE__ */ new Set();\n  }\n  add(...classNames) {\n    classNames.forEach((name2) => this.classes.add(name2));\n  }\n  remove(...classNames) {\n    classNames.forEach((name2) => this.classes.delete(name2));\n  }\n  /**\n   * @param {string} className\n   */\n  contains(className) {\n    return this.classes.has(className);\n  }\n  /**\n   * @param {string} className\n   * @param {any} force\n   */\n  toggle(className, force) {\n    if (force === true) {\n      this.classes.add(className);\n      return true;\n    } else if (force === false) {\n      this.classes.delete(className);\n      return false;\n    } else {\n      if (this.classes.has(className)) {\n        this.classes.delete(className);\n        return false;\n      } else {\n        this.classes.add(className);\n        return true;\n      }\n    }\n  }\n  toString() {\n    return Array.from(this.classes).join(\" \");\n  }\n}\nclass SSRDOMShim {\n  constructor() {\n    this.SVGNS = \"http://www.w3.org/2000/svg\";\n    this.XLINKNS = \"http://www.w3.org/1999/xlink\";\n  }\n  /**\n   * Create SVG element with namespace\n   * @param {string} namespaceURI - Namespace URI\n   * @param {string} qualifiedName - Element tag name\n   * @returns {SSRElement} Mock SVG element\n   */\n  createElementNS(namespaceURI, qualifiedName) {\n    return new SSRElement(qualifiedName, namespaceURI);\n  }\n  /**\n   * Create text node\n   * @param {string} data - Text content\n   * @returns {object} Text node mock\n   */\n  createTextNode(data) {\n    const node = {\n      nodeName: \"#text\",\n      nodeType: 3,\n      textContent: data,\n      toString() {\n        return node.textContent;\n      }\n    };\n    return node;\n  }\n  /**\n   * Query selector (returns null in SSR)\n   * @returns {null}\n   */\n  querySelector() {\n    return null;\n  }\n  /**\n   * Query selector all (returns empty array in SSR)\n   * @returns {any[]}\n   */\n  querySelectorAll() {\n    return [];\n  }\n  /**\n   * Get computed style (returns empty object in SSR)\n   * @returns {object}\n   */\n  getComputedStyle() {\n    return {};\n  }\n  /**\n   * Get bounding client rect for element\n   * @param {SSRElement} element - Element to measure\n   * @returns {object} Mock dimensions\n   */\n  getBoundingClientRect(element) {\n    if (element && element.getBoundingClientRect) {\n      return element.getBoundingClientRect();\n    }\n    return {\n      width: 0,\n      height: 0,\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      x: 0,\n      y: 0\n    };\n  }\n  /**\n   * Create mock XMLSerializer for SSR\n   * @returns {object} XMLSerializer mock\n   */\n  createXMLSerializer() {\n    return {\n      /**\n       * @param {Element} element\n       */\n      serializeToString(element) {\n        return element.toString ? element.toString() : \"\";\n      }\n    };\n  }\n  /**\n   * Create mock DOMParser for SSR\n   * @returns {object} DOMParser mock\n   */\n  createDOMParser() {\n    return {\n      /**\n       * @param {string} str\n       * @param {string} _type\n       */\n      parseFromString(str, _type) {\n        const root = new SSRElement(\"root\");\n        root.innerHTML = str;\n        return {\n          documentElement: root\n        };\n      }\n    };\n  }\n}\nlet shim = null;\nlet xmlSerializerInstance = null;\nlet domParserInstance = null;\nclass BrowserAPIs {\n  /**\n   * Initialize the SSR shim if in SSR environment\n   * Must be called before using other methods\n   */\n  static init() {\n    if (Environment.isSSR() && !shim) {\n      shim = new SSRDOMShim();\n    }\n  }\n  /**\n   * Create an HTML element\n   * @param {string} tagName - Element tag name\n   * @returns {HTMLElement} HTML element\n   */\n  static createElement(tagName) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createElementNS(null, tagName);\n    }\n    return document.createElement(tagName);\n  }\n  /**\n   * Create an SVG element with namespace\n   * @param {string} namespaceURI - Namespace URI\n   * @param {string} qualifiedName - Element tag name\n   * @returns {HTMLElement} created element\n   */\n  static createElementNS(namespaceURI, qualifiedName) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createElementNS(namespaceURI, qualifiedName);\n    }\n    return (\n      /** @type {HTMLElement} */\n      document.createElementNS(namespaceURI, qualifiedName)\n    );\n  }\n  /**\n   * Create a text node\n   * @param {string} data - Text content\n   * @returns {Text|object} Text node\n   */\n  static createTextNode(data) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createTextNode(data);\n    }\n    return document.createTextNode(data);\n  }\n  /**\n   * Query selector\n   * @param {string} selector - CSS selector\n   * @returns {Element|null}\n   */\n  static querySelector(selector) {\n    if (Environment.isSSR()) {\n      return null;\n    }\n    return document.querySelector(selector);\n  }\n  /**\n   * Query selector all\n   * @param {string} selector - CSS selector\n   * @returns {NodeList|any[]}\n   */\n  static querySelectorAll(selector) {\n    if (Environment.isSSR()) {\n      return [];\n    }\n    return document.querySelectorAll(selector);\n  }\n  /**\n   * Get computed style for an element\n   * @param {Element} element - Element to get styles for\n   * @returns {CSSStyleDeclaration|object}\n   */\n  static getComputedStyle(element) {\n    if (Environment.isSSR()) {\n      return {};\n    }\n    return window.getComputedStyle(element);\n  }\n  /**\n   * Evaluate a media query. Returns the live MediaQueryList in a browser (so\n   * callers can attach a `change` listener) or null under SSR / when\n   * unsupported. Facet (#13) uses this for `theme.follow: 'os'`.\n   * @param {string} query\n   * @returns {MediaQueryList|null}\n   */\n  static matchMedia(query) {\n    if (Environment.isSSR() || typeof window.matchMedia !== \"function\") {\n      return null;\n    }\n    try {\n      return window.matchMedia(query);\n    } catch (e) {\n      return null;\n    }\n  }\n  /**\n   * Get bounding client rect for an element\n   * @param {Element} element - Element to measure\n   * @returns {DOMRect|object}\n   */\n  static getBoundingClientRect(element) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.getBoundingClientRect(element);\n    }\n    return element ? element.getBoundingClientRect() : {\n      width: 0,\n      height: 0,\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      x: 0,\n      y: 0\n    };\n  }\n  /**\n   * Get XMLSerializer instance\n   * @returns {XMLSerializer|object}\n   */\n  static getXMLSerializer() {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      if (!xmlSerializerInstance) {\n        xmlSerializerInstance = shim.createXMLSerializer();\n      }\n      return xmlSerializerInstance;\n    }\n    if (!xmlSerializerInstance) {\n      xmlSerializerInstance = new XMLSerializer();\n    }\n    return xmlSerializerInstance;\n  }\n  /**\n   * Get DOMParser instance\n   * @returns {DOMParser|object}\n   */\n  static getDOMParser() {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      if (!domParserInstance) {\n        domParserInstance = shim.createDOMParser();\n      }\n      return domParserInstance;\n    }\n    if (!domParserInstance) {\n      domParserInstance = new DOMParser();\n    }\n    return domParserInstance;\n  }\n  /**\n   * Add event listener to window\n   * @param {string} event - Event name\n   * @param {EventListenerOrEventListenerObject} handler - Event handler\n   * @param {object} options - Event options\n   */\n  static addWindowEventListener(event, handler, options2) {\n    if (Environment.isBrowser()) {\n      window.addEventListener(event, handler, options2);\n    }\n  }\n  /**\n   * Remove event listener from window\n   * @param {string} event - Event name\n   * @param {EventListenerOrEventListenerObject} handler - Event handler\n   * @param {object} options - Event options\n   */\n  static removeWindowEventListener(event, handler, options2) {\n    if (Environment.isBrowser()) {\n      window.removeEventListener(event, handler, options2);\n    }\n  }\n  /**\n   * Request animation frame\n   * @param {FrameRequestCallback} callback - Callback function\n   * @returns {number|null}\n   */\n  static requestAnimationFrame(callback) {\n    if (Environment.isBrowser()) {\n      return window.requestAnimationFrame(callback);\n    }\n    callback(0);\n    return null;\n  }\n  /**\n   * Cancel animation frame\n   * @param {number} id - Animation frame ID\n   */\n  static cancelAnimationFrame(id) {\n    if (Environment.isBrowser() && id) {\n      window.cancelAnimationFrame(id);\n    }\n  }\n  /**\n   * Check if element exists\n   * @param {Element} element - Element to check\n   * @returns {boolean}\n   */\n  static elementExists(element) {\n    if (!element) return false;\n    if (Environment.isSSR()) {\n      return element._ssrMode === true || element.nodeName !== void 0;\n    }\n    return element.getRootNode ? element.getRootNode({ composed: true }) === document || element.isConnected : false;\n  }\n  /**\n   * Get window object (or null in SSR)\n   * @returns {Window|null}\n   */\n  static getWindow() {\n    return Environment.isBrowser() ? window : null;\n  }\n  /**\n   * Get document object (or null in SSR)\n   * @returns {Document|null}\n   */\n  static getDocument() {\n    return Environment.isBrowser() ? document : null;\n  }\n  /**\n   * Get the shim instance (for testing purposes)\n   * @returns {SSRDOMShim|null}\n   */\n  static _getShim() {\n    return shim;\n  }\n  /**\n   * Reset the shim instance (for testing purposes)\n   */\n  static _resetShim() {\n    shim = null;\n    xmlSerializerInstance = null;\n    domParserInstance = null;\n  }\n}\nlet Utils$1 = class Utils {\n  /**\n   * @param {*} item\n   */\n  static isObject(item) {\n    return item && typeof item === \"object\" && !Array.isArray(item);\n  }\n  // Type checking that works across different window objects\n  /**\n   * @param {string} type\n   * @param {string} val\n   */\n  static is(type, val) {\n    return Object.prototype.toString.call(val) === \"[object \" + type + \"]\";\n  }\n  static isSafari() {\n    return Environment.isBrowser() && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  }\n  // to extend defaults with user options\n  // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873\n  /**\n   * @param {any} target\n   * @param {any} source\n   */\n  static extend(target, source) {\n    if (!this.isObject(target) && this.isObject(source)) {\n      return this.clone(source);\n    }\n    const output = Object.assign({}, target);\n    if (this.isObject(target) && this.isObject(source)) {\n      Object.keys(source).forEach((key) => {\n        if (this.isObject(source[key])) {\n          if (!(key in target)) {\n            Object.assign(output, {\n              [key]: source[key]\n            });\n          } else {\n            output[key] = this.extend(target[key], source[key]);\n          }\n        } else {\n          Object.assign(output, {\n            [key]: source[key]\n          });\n        }\n      });\n    }\n    return output;\n  }\n  /**\n   * @param {any[]} arrToExtend\n   * @param {any} resultArr\n   */\n  static extendArray(arrToExtend, resultArr) {\n    const extendedArr = [];\n    arrToExtend.map((item) => {\n      extendedArr.push(Utils.extend(resultArr, item));\n    });\n    arrToExtend = extendedArr;\n    return arrToExtend;\n  }\n  // If month counter exceeds 12, it starts again from 1\n  /**\n   * @param {number} month\n   */\n  static monthMod(month) {\n    return month % 12;\n  }\n  /**\n   * clone object with optional shallow copy for performance\n   * @param {*} source - Source object to clone\n   * @param {WeakMap<any, any>} visited - Circular reference tracker\n   * @param {boolean} shallow - If true, performs shallow copy (default: false)\n   * @returns {*} Cloned object\n   */\n  static clone(source, visited = /* @__PURE__ */ new WeakMap(), shallow = false) {\n    if (source === null || typeof source !== \"object\") {\n      return source;\n    }\n    if (visited.has(source)) {\n      return visited.get(source);\n    }\n    let cloneResult;\n    if (Array.isArray(source)) {\n      if (shallow) {\n        cloneResult = source.slice();\n      } else {\n        cloneResult = [];\n        visited.set(source, cloneResult);\n        for (let i = 0; i < source.length; i++) {\n          cloneResult[i] = this.clone(source[i], visited, false);\n        }\n      }\n    } else if (source instanceof Date) {\n      cloneResult = new Date(source.getTime());\n    } else {\n      if (shallow) {\n        cloneResult = Object.assign({}, source);\n      } else {\n        cloneResult = {};\n        visited.set(source, cloneResult);\n        for (const prop in source) {\n          if (Object.prototype.hasOwnProperty.call(source, prop)) {\n            cloneResult[prop] = this.clone(\n              /** @type {Record<string,any>} */\n              source[prop],\n              visited,\n              false\n            );\n          }\n        }\n      }\n    }\n    return cloneResult;\n  }\n  /**\n   * Shallow clone for performance when deep clone isn't needed\n   * @param {*} source - Source to clone\n   * @returns {*} Shallow cloned object\n   */\n  static shallowClone(source) {\n    if (source === null || typeof source !== \"object\") {\n      return source;\n    }\n    if (Array.isArray(source)) {\n      return source.slice();\n    }\n    return Object.assign({}, source);\n  }\n  /**\n   * Fast shallow equality check for objects\n   * @param {Object} obj1 - First object\n   * @param {Object} obj2 - Second object\n   * @returns {boolean} True if shallowly equal\n   */\n  static shallowEqual(obj1, obj2) {\n    if (obj1 === obj2) return true;\n    if (!obj1 || !obj2) return false;\n    if (typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n      return obj1 === obj2;\n    }\n    const keys1 = Object.keys(obj1);\n    const keys2 = Object.keys(obj2);\n    if (keys1.length !== keys2.length) return false;\n    for (const key of keys1) {\n      if (\n        /** @type {Record<string,any>} */\n        obj1[key] !== /** @type {Record<string,any>} */\n        obj2[key]\n      )\n        return false;\n    }\n    return true;\n  }\n  /**\n   * @param {number} x\n   */\n  static log10(x) {\n    return Math.log(x) / Math.LN10;\n  }\n  /**\n   * @param {number} x\n   */\n  static roundToBase10(x) {\n    return Math.pow(10, Math.floor(Math.log10(x)));\n  }\n  /**\n   * @param {number} x\n   * @param {number} base\n   */\n  static roundToBase(x, base) {\n    return Math.pow(base, Math.floor(Math.log(x) / Math.log(base)));\n  }\n  /**\n   * @param {any} val\n   */\n  static parseNumber(val) {\n    if (typeof val === \"number\" || val === null) return val;\n    return parseFloat(val);\n  }\n  /**\n   * @param {number} num\n   */\n  static stripNumber(num, precision = 2) {\n    return Number.isInteger(num) ? num : parseFloat(num.toPrecision(precision));\n  }\n  static randomId() {\n    return (Math.random() + 1).toString(36).substring(4);\n  }\n  /**\n   * @param {number} num\n   */\n  static noExponents(num) {\n    if (num.toString().includes(\"e\")) {\n      return Math.round(num);\n    }\n    return num;\n  }\n  /**\n   * @param {any} element\n   */\n  static elementExists(element) {\n    if (!element || !element.isConnected) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * @param {any} el\n   */\n  static getDimensions(el) {\n    if (!el) return [0, 0];\n    if (Environment.isSSR()) {\n      return [el._ssrWidth || 400, el._ssrHeight || 300];\n    }\n    let computedStyle;\n    try {\n      computedStyle = getComputedStyle(el, null);\n    } catch (e) {\n      return [el.clientWidth || 0, el.clientHeight || 0];\n    }\n    let elementWidth = el.clientWidth;\n    let elementHeight = el.clientHeight;\n    if (!elementWidth || !elementHeight) {\n      const rect = el.getBoundingClientRect();\n      elementWidth = elementWidth || rect.width;\n      elementHeight = elementHeight || rect.height;\n    }\n    elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom);\n    elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight);\n    return [elementWidth, elementHeight];\n  }\n  /**\n   * @returns {any}\n   * @param {any} element\n   */\n  static getBoundingClientRect(element) {\n    if (!element) {\n      return {\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0,\n        width: 0,\n        height: 0,\n        x: 0,\n        y: 0\n      };\n    }\n    if (Environment.isSSR()) {\n      return BrowserAPIs.getBoundingClientRect(element);\n    }\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      width: element.clientWidth,\n      height: element.clientHeight,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n  /**\n   * @param {any[]} arr\n   */\n  static getLargestStringFromArr(arr) {\n    return arr.reduce((a, b) => {\n      if (Array.isArray(b)) {\n        b = b.reduce((aa, bb) => aa.length > bb.length ? aa : bb);\n      }\n      return a.length > b.length ? a : b;\n    }, 0);\n  }\n  // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275\n  static hexToRgba(hex = \"#999999\", opacity = 0.6) {\n    if (hex.substring(0, 1) !== \"#\") {\n      hex = \"#999999\";\n    }\n    const hexStr = hex.replace(\"#\", \"\");\n    const h = hexStr.match(new RegExp(\"(.{\" + hexStr.length / 3 + \"})\", \"g\")) || [];\n    for (let i = 0; i < h.length; i++) {\n      h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16);\n    }\n    if (typeof opacity !== \"undefined\") h.push(opacity);\n    return \"rgba(\" + h.join(\",\") + \")\";\n  }\n  /**\n   * @param {string} rgba\n   */\n  static getOpacityFromRGBA(rgba) {\n    return parseFloat(rgba.replace(/^.*,(.+)\\)/, \"$1\"));\n  }\n  /**\n   * Parse a #RGB or #RRGGBB hex colour string into [r,g,b] in 0–255.\n   * Returns null for invalid input. Used by getContrastRatio.\n   * @param {string} hex\n   * @returns {[number, number, number] | null}\n   */\n  static parseHex(hex) {\n    if (typeof hex !== \"string\") return null;\n    let h = hex.trim().replace(\"#\", \"\");\n    if (h.length === 3) {\n      h = h.split(\"\").map((c) => c + c).join(\"\");\n    }\n    if (!/^[0-9a-fA-F]{6}$/.test(h)) return null;\n    return [\n      parseInt(h.slice(0, 2), 16),\n      parseInt(h.slice(2, 4), 16),\n      parseInt(h.slice(4, 6), 16)\n    ];\n  }\n  /**\n   * Relative luminance per WCAG 2.x (https://www.w3.org/TR/WCAG22/#dfn-relative-luminance).\n   * @param {[number, number, number]} rgb 0–255 sRGB triplet\n   * @returns {number} 0.0–1.0\n   */\n  static relativeLuminance([r, g, b]) {\n    const channel = (c) => {\n      const v = c / 255;\n      return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n    };\n    return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);\n  }\n  /**\n   * WCAG contrast ratio between two hex colours. Returns 0 for invalid input.\n   * Range: 1 (identical) … 21 (#000 vs #fff).\n   * WCAG AA requires ≥ 4.5 for normal text and ≥ 3.0 for large text / UI components.\n   * @param {string} hex1\n   * @param {string} hex2\n   * @returns {number}\n   */\n  static getContrastRatio(hex1, hex2) {\n    const rgb1 = Utils.parseHex(hex1);\n    const rgb2 = Utils.parseHex(hex2);\n    if (!rgb1 || !rgb2) return 0;\n    const l1 = Utils.relativeLuminance(rgb1);\n    const l2 = Utils.relativeLuminance(rgb2);\n    const lighter = Math.max(l1, l2);\n    const darker = Math.min(l1, l2);\n    return (lighter + 0.05) / (darker + 0.05);\n  }\n  /**\n   * @param {any} rgb\n   */\n  static rgb2hex(rgb) {\n    rgb = rgb.match(\n      /^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i\n    );\n    return rgb && rgb.length === 4 ? \"#\" + (\"0\" + parseInt(rgb[1], 10).toString(16)).slice(-2) + (\"0\" + parseInt(rgb[2], 10).toString(16)).slice(-2) + (\"0\" + parseInt(rgb[3], 10).toString(16)).slice(-2) : \"\";\n  }\n  /**\n   * @param {number} percent\n   * @param {string} color\n   */\n  shadeRGBColor(percent, color) {\n    const f = color.split(\",\"), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = parseInt(f[0].slice(4), 10), G = parseInt(f[1], 10), B = parseInt(f[2], 10);\n    return \"rgb(\" + (Math.round((t - R) * p) + R) + \",\" + (Math.round((t - G) * p) + G) + \",\" + (Math.round((t - B) * p) + B) + \")\";\n  }\n  /**\n   * @param {number} percent\n   * @param {string} color\n   */\n  shadeHexColor(percent, color) {\n    const f = parseInt(color.slice(1), 16), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = f >> 16, G = f >> 8 & 255, B = f & 255;\n    return \"#\" + (16777216 + (Math.round((t - R) * p) + R) * 65536 + (Math.round((t - G) * p) + G) * 256 + (Math.round((t - B) * p) + B)).toString(16).slice(1);\n  }\n  // beautiful color shading blending code\n  // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors\n  /**\n   * @param {number} p\n   * @param {string} color\n   */\n  shadeColor(p, color) {\n    if (Utils.isColorHex(color)) {\n      return this.shadeHexColor(p, color);\n    } else {\n      return this.shadeRGBColor(p, color);\n    }\n  }\n  /**\n   * @param {string} color\n   */\n  static isColorHex(color) {\n    return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(color);\n  }\n  /**\n   * @param {string} color\n   */\n  static isCSSVariable(color) {\n    if (typeof color !== \"string\") return false;\n    const value = color.trim();\n    return value.startsWith(\"var(\") && value.endsWith(\")\");\n  }\n  /**\n   * @param {string} color\n   */\n  static getThemeColor(color) {\n    if (!Utils.isCSSVariable(color)) return color;\n    if (Environment.isSSR()) return color;\n    const tempElem = document.createElement(\"div\");\n    tempElem.style.cssText = \"position:fixed; left: -9999px; visibility:hidden;\";\n    tempElem.style.color = color;\n    document.body.appendChild(tempElem);\n    let computedColor;\n    try {\n      computedColor = window.getComputedStyle(tempElem).color;\n    } finally {\n      if (tempElem.parentNode) {\n        tempElem.parentNode.removeChild(tempElem);\n      }\n    }\n    return computedColor;\n  }\n  /**\n   * @param {string} color\n   * @param {number} opacity\n   */\n  static applyOpacityToColor(color, opacity) {\n    const value = Number(opacity);\n    if (!Number.isFinite(value)) return color;\n    if (value <= 0) return \"transparent\";\n    if (value >= 1) return color;\n    const percent = Math.round(value * 100);\n    return `color-mix(in srgb, ${color} ${percent}%, transparent)`;\n  }\n  /**\n   * @param {number} size\n   * @param {number} dataPointsLen\n   */\n  static getPolygonPos(size, dataPointsLen) {\n    const dotsArray = [];\n    const angle = Math.PI * 2 / dataPointsLen;\n    for (let i = 0; i < dataPointsLen; i++) {\n      const curPos = {};\n      curPos.x = size * Math.sin(i * angle);\n      curPos.y = -size * Math.cos(i * angle);\n      dotsArray.push(curPos);\n    }\n    return dotsArray;\n  }\n  /**\n   * @param {number} centerX\n   * @param {number} centerY\n   * @param {number} radius\n   * @param {number} angleInDegrees\n   */\n  static polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n    const angleInRadians = (angleInDegrees - 90) * Math.PI / 180;\n    return {\n      x: centerX + radius * Math.cos(angleInRadians),\n      y: centerY + radius * Math.sin(angleInRadians)\n    };\n  }\n  /**\n   * @param {string} str\n   */\n  static escapeString(str, escapeWith = \"x\") {\n    let newStr = str.toString().slice();\n    newStr = newStr.replace(/[` ~!@#$%^&*()|+=?;:'\",.<>{}[\\]\\\\/]/gi, escapeWith);\n    return newStr;\n  }\n  /**\n   * @param {number} val\n   */\n  static negToZero(val) {\n    return val < 0 ? 0 : val;\n  }\n  /**\n   * @param {any[]} arr\n   * @param {number} old_index\n   * @param {number} new_index\n   */\n  static moveIndexInArray(arr, old_index, new_index) {\n    if (new_index >= arr.length) {\n      let k = new_index - arr.length + 1;\n      while (k--) {\n        arr.push(void 0);\n      }\n    }\n    arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);\n    return arr;\n  }\n  /**\n   * @param {string} s\n   */\n  static extractNumber(s) {\n    return parseFloat(s.replace(/[^\\d.]*/g, \"\"));\n  }\n  /**\n   * @param {any} el\n   * @param {string} cls\n   */\n  static findAncestor(el, cls) {\n    while ((el = el.parentElement) && !el.classList.contains(cls)) ;\n    return el;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} styles\n   */\n  static setELstyles(el, styles) {\n    for (const key in styles) {\n      if (Object.prototype.hasOwnProperty.call(styles, key)) {\n        el.style[key] = styles[key];\n      }\n    }\n  }\n  // prevents JS prevision errors when adding\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static preciseAddition(a, b) {\n    const aDecimals = (String(a).split(\".\")[1] || \"\").length;\n    const bDecimals = (String(b).split(\".\")[1] || \"\").length;\n    const factor = Math.pow(10, Math.max(aDecimals, bDecimals));\n    return (Math.round(a * factor) + Math.round(b * factor)) / factor;\n  }\n  /**\n   * @param {any} value\n   */\n  static isNumber(value) {\n    return !isNaN(value) && parseFloat(String(Number(value))) === value && !isNaN(parseInt(value, 10));\n  }\n  /**\n   * @param {number} n\n   */\n  static isFloat(n) {\n    return Number(n) === n && n % 1 !== 0;\n  }\n  static isMsEdge() {\n    if (Environment.isSSR()) return false;\n    const ua = window.navigator.userAgent;\n    const edge = ua.indexOf(\"Edge/\");\n    if (edge > 0) {\n      return parseInt(ua.substring(edge + 5, ua.indexOf(\".\", edge)), 10);\n    }\n    return false;\n  }\n  //\n  // Find the Greatest Common Divisor of two numbers\n  //\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static getGCD(a, b, p = 7) {\n    let factor = Math.pow(10, p - Math.floor(Math.log10(Math.max(a, b))));\n    if (factor > 1) {\n      a = Math.round(Math.abs(a) * factor);\n      b = Math.round(Math.abs(b) * factor);\n    } else {\n      factor = 1;\n    }\n    while (b) {\n      const t = b;\n      b = a % b;\n      a = t;\n    }\n    return a / factor;\n  }\n  /**\n   * @param {number} n\n   */\n  static getPrimeFactors(n) {\n    const factors = [];\n    let divisor = 2;\n    while (n >= 2) {\n      if (n % divisor == 0) {\n        factors.push(divisor);\n        n = n / divisor;\n      } else {\n        divisor++;\n      }\n    }\n    return factors;\n  }\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static mod(a, b, p = 7) {\n    const big = Math.pow(10, p - Math.floor(Math.log10(Math.max(a, b))));\n    a = Math.round(Math.abs(a) * big);\n    b = Math.round(Math.abs(b) * big);\n    return a % b / big;\n  }\n};\nclass DateTime {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.months31 = [1, 3, 5, 7, 8, 10, 12];\n    this.months30 = [2, 4, 6, 9, 11];\n    this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n  }\n  /**\n   * @param {any} date\n   */\n  isValidDate(date) {\n    if (typeof date === \"number\") {\n      return false;\n    }\n    return !isNaN(this.parseDate(date));\n  }\n  /**\n   * @param {any} dateStr\n   */\n  getTimeStamp(dateStr) {\n    if (isNaN(Date.parse(dateStr))) {\n      return dateStr;\n    }\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    return !utc ? new Date(dateStr).getTime() : new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime();\n  }\n  /**\n   * @param {any} timestamp\n   */\n  getDate(timestamp) {\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    return utc ? new Date(new Date(timestamp).toUTCString()) : new Date(timestamp);\n  }\n  /**\n   * @param {string} dateStr\n   */\n  parseDate(dateStr) {\n    const parsed = Date.parse(dateStr);\n    if (!isNaN(parsed)) {\n      return this.getTimeStamp(dateStr);\n    }\n    let output = Date.parse(dateStr.replace(/-/g, \"/\").replace(/[a-z]+/gi, \" \"));\n    output = this.getTimeStamp(output);\n    return output;\n  }\n  // This fixes the difference of x-axis labels between chrome/safari\n  // Fixes #1726, #1544, #1485, #1255\n  /**\n   * @param {string} dateStr\n   */\n  parseDateWithTimezone(dateStr) {\n    return Date.parse(dateStr.replace(/-/g, \"/\").replace(/[a-z]+/gi, \" \"));\n  }\n  // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191\n  /**\n   * @param {Date} date\n   * @param {string} format\n   */\n  formatDate(date, format) {\n    const locale = this.w.globals.locale;\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    const MMMM = [\"\\0\", ...locale.months];\n    const MMM = [\"\u0001\", ...locale.shortMonths];\n    const dddd = [\"\u0002\", ...locale.days];\n    const ddd = [\"\u0003\", ...locale.shortDays];\n    function ii(i, len = 2) {\n      let s2 = i + \"\";\n      while (s2.length < len) s2 = \"0\" + s2;\n      return s2;\n    }\n    const y = utc ? date.getUTCFullYear() : date.getFullYear();\n    format = format.replace(/(^|[^\\\\])yyyy+/g, \"$1\" + y);\n    format = format.replace(/(^|[^\\\\])yy/g, \"$1\" + y.toString().substr(2, 2));\n    format = format.replace(/(^|[^\\\\])y/g, \"$1\" + y);\n    const M = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n    format = format.replace(/(^|[^\\\\])MMMM+/g, \"$1\" + MMMM[0]);\n    format = format.replace(/(^|[^\\\\])MMM/g, \"$1\" + MMM[0]);\n    format = format.replace(/(^|[^\\\\])MM/g, \"$1\" + ii(M));\n    format = format.replace(/(^|[^\\\\])M/g, \"$1\" + M);\n    const d = utc ? date.getUTCDate() : date.getDate();\n    format = format.replace(/(^|[^\\\\])dddd+/g, \"$1\" + dddd[0]);\n    format = format.replace(/(^|[^\\\\])ddd/g, \"$1\" + ddd[0]);\n    format = format.replace(/(^|[^\\\\])dd/g, \"$1\" + ii(d));\n    format = format.replace(/(^|[^\\\\])d/g, \"$1\" + d);\n    const H = utc ? date.getUTCHours() : date.getHours();\n    format = format.replace(/(^|[^\\\\])HH+/g, \"$1\" + ii(H));\n    format = format.replace(/(^|[^\\\\])H/g, \"$1\" + H);\n    const h = H > 12 ? H - 12 : H === 0 ? 12 : H;\n    format = format.replace(/(^|[^\\\\])hh+/g, \"$1\" + ii(h));\n    format = format.replace(/(^|[^\\\\])h/g, \"$1\" + h);\n    const m = utc ? date.getUTCMinutes() : date.getMinutes();\n    format = format.replace(/(^|[^\\\\])mm+/g, \"$1\" + ii(m));\n    format = format.replace(/(^|[^\\\\])m/g, \"$1\" + m);\n    const s = utc ? date.getUTCSeconds() : date.getSeconds();\n    format = format.replace(/(^|[^\\\\])ss+/g, \"$1\" + ii(s));\n    format = format.replace(/(^|[^\\\\])s/g, \"$1\" + s);\n    let f = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n    format = format.replace(/(^|[^\\\\])fff+/g, \"$1\" + ii(f, 3));\n    f = Math.round(f / 10);\n    format = format.replace(/(^|[^\\\\])ff/g, \"$1\" + ii(f));\n    f = Math.round(f / 10);\n    format = format.replace(/(^|[^\\\\])f/g, \"$1\" + f);\n    const T = H < 12 ? \"AM\" : \"PM\";\n    format = format.replace(/(^|[^\\\\])TT+/g, \"$1\" + T);\n    format = format.replace(/(^|[^\\\\])T/g, \"$1\" + T.charAt(0));\n    const t = T.toLowerCase();\n    format = format.replace(/(^|[^\\\\])tt+/g, \"$1\" + t);\n    format = format.replace(/(^|[^\\\\])t/g, \"$1\" + t.charAt(0));\n    let tz = -date.getTimezoneOffset();\n    let K = utc || !tz ? \"Z\" : tz > 0 ? \"+\" : \"-\";\n    if (!utc) {\n      tz = Math.abs(tz);\n      const tzHrs = Math.floor(tz / 60);\n      const tzMin = tz % 60;\n      K += ii(tzHrs) + \":\" + ii(tzMin);\n    }\n    format = format.replace(/(^|[^\\\\])K/g, \"$1\" + K);\n    const day = (utc ? date.getUTCDay() : date.getDay()) + 1;\n    format = format.replace(new RegExp(dddd[0], \"g\"), dddd[day]);\n    format = format.replace(new RegExp(ddd[0], \"g\"), ddd[day]);\n    format = format.replace(new RegExp(MMMM[0], \"g\"), MMMM[M]);\n    format = format.replace(new RegExp(MMM[0], \"g\"), MMM[M]);\n    format = format.replace(/\\\\(.)/g, \"$1\");\n    return format;\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  getTimeUnitsfromTimestamp(minX, maxX) {\n    const w = this.w;\n    if (w.config.xaxis.min !== void 0) {\n      minX = w.config.xaxis.min;\n    }\n    if (w.config.xaxis.max !== void 0) {\n      maxX = w.config.xaxis.max;\n    }\n    const tsMin = this.getDate(minX);\n    const tsMax = this.getDate(maxX);\n    const minD = this.formatDate(tsMin, \"yyyy MM dd HH mm ss fff\").split(\" \");\n    const maxD = this.formatDate(tsMax, \"yyyy MM dd HH mm ss fff\").split(\" \");\n    return {\n      minMillisecond: parseInt(minD[6], 10),\n      maxMillisecond: parseInt(maxD[6], 10),\n      minSecond: parseInt(minD[5], 10),\n      maxSecond: parseInt(maxD[5], 10),\n      minMinute: parseInt(minD[4], 10),\n      maxMinute: parseInt(maxD[4], 10),\n      minHour: parseInt(minD[3], 10),\n      maxHour: parseInt(maxD[3], 10),\n      minDate: parseInt(minD[2], 10),\n      maxDate: parseInt(maxD[2], 10),\n      minMonth: parseInt(minD[1], 10) - 1,\n      maxMonth: parseInt(maxD[1], 10) - 1,\n      minYear: parseInt(minD[0], 10),\n      maxYear: parseInt(maxD[0], 10)\n    };\n  }\n  /**\n   * @param {number} year\n   */\n  isLeapYear(year) {\n    return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n  }\n  /**\n   * @param {number} month\n   * @param {number} year\n   * @param {number} subtract\n   */\n  calculcateLastDaysOfMonth(month, year, subtract) {\n    const days = this.determineDaysOfMonths(month, year);\n    return days - subtract;\n  }\n  /**\n   * @param {number} year\n   */\n  determineDaysOfYear(year) {\n    let days = 365;\n    if (this.isLeapYear(year)) {\n      days = 366;\n    }\n    return days;\n  }\n  /**\n   * @param {number} year\n   * @param {number} month\n   * @param {number} date\n   */\n  determineRemainingDaysOfYear(year, month, date) {\n    let dayOfYear = this.daysCntOfYear[month] + date;\n    if (month > 1 && this.isLeapYear(year)) dayOfYear++;\n    return dayOfYear;\n  }\n  /**\n   * @param {number} month\n   * @param {number} year\n   */\n  determineDaysOfMonths(month, year) {\n    let days = 30;\n    month = Utils$1.monthMod(month);\n    switch (true) {\n      case this.months30.indexOf(month) > -1:\n        if (month === 2) {\n          if (this.isLeapYear(year)) {\n            days = 29;\n          } else {\n            days = 28;\n          }\n        }\n        break;\n      case this.months31.indexOf(month) > -1:\n        days = 31;\n        break;\n      default:\n        days = 31;\n        break;\n    }\n    return days;\n  }\n  // ───────────────────────────────────────────────────────────────────────────\n  // Pure date helpers used by the v6 single-interval TimeScale.\n  // Native Date setters/getters do all rollover work (leap years, month\n  // length, year crossings), eliminating the manual rollover code that was\n  // the source of the historical TimeScale boundary bugs.\n  // ───────────────────────────────────────────────────────────────────────────\n  /**\n   * Extract calendar fields from a timestamp. Month is 0-indexed (matches\n   * Date.getMonth / getUTCMonth).\n   *\n   * @param {number} timestamp\n   * @param {boolean} isUTC\n   * @returns {{ year: number, month: number, date: number, hour: number, minute: number, second: number, ms: number, weekday: number }}\n   */\n  getDateFields(timestamp, isUTC) {\n    const d = new Date(timestamp);\n    return isUTC ? {\n      year: d.getUTCFullYear(),\n      month: d.getUTCMonth(),\n      date: d.getUTCDate(),\n      hour: d.getUTCHours(),\n      minute: d.getUTCMinutes(),\n      second: d.getUTCSeconds(),\n      ms: d.getUTCMilliseconds(),\n      weekday: d.getUTCDay()\n    } : {\n      year: d.getFullYear(),\n      month: d.getMonth(),\n      date: d.getDate(),\n      hour: d.getHours(),\n      minute: d.getMinutes(),\n      second: d.getSeconds(),\n      ms: d.getMilliseconds(),\n      weekday: d.getDay()\n    };\n  }\n  /**\n   * Advance a timestamp by `count` units. Native setters handle cross-month,\n   * cross-year, leap-year, and DST rollover correctly.\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'week'|'day'|'hour'|'minute'|'second'} unit\n   * @param {number} count  may be negative\n   * @param {boolean} isUTC\n   * @returns {number}\n   */\n  addInterval(timestamp, unit, count, isUTC) {\n    const d = new Date(timestamp);\n    if (isUTC) {\n      switch (unit) {\n        case \"year\":\n          d.setUTCFullYear(d.getUTCFullYear() + count);\n          break;\n        case \"month\":\n          d.setUTCMonth(d.getUTCMonth() + count);\n          break;\n        case \"week\":\n          d.setUTCDate(d.getUTCDate() + count * 7);\n          break;\n        case \"day\":\n          d.setUTCDate(d.getUTCDate() + count);\n          break;\n        case \"hour\":\n          d.setUTCHours(d.getUTCHours() + count);\n          break;\n        case \"minute\":\n          d.setUTCMinutes(d.getUTCMinutes() + count);\n          break;\n        case \"second\":\n          d.setUTCSeconds(d.getUTCSeconds() + count);\n          break;\n      }\n    } else {\n      switch (unit) {\n        case \"year\":\n          d.setFullYear(d.getFullYear() + count);\n          break;\n        case \"month\":\n          d.setMonth(d.getMonth() + count);\n          break;\n        case \"week\":\n          d.setDate(d.getDate() + count * 7);\n          break;\n        case \"day\":\n          d.setDate(d.getDate() + count);\n          break;\n        case \"hour\":\n          d.setHours(d.getHours() + count);\n          break;\n        case \"minute\":\n          d.setMinutes(d.getMinutes() + count);\n          break;\n        case \"second\":\n          d.setSeconds(d.getSeconds() + count);\n          break;\n      }\n    }\n    return d.getTime();\n  }\n  /**\n   * Snap a timestamp UP to the next boundary aligned with `step` units of\n   * `unit`. Returns the input unchanged if already on a boundary. Alignment\n   * rules per unit:\n   *   - second: 0/step/2*step/... seconds within a minute (step must divide 60)\n   *   - minute: 0/step/2*step/... minutes within an hour (step must divide 60)\n   *   - hour:   0/step/... hours within a day (step must divide 24)\n   *   - day:    every day (step always 1)\n   *   - week:   next Monday on a `step`-week stride from a fixed epoch Monday\n   *   - month:  Jan/Apr/Jul/Oct for step=3, Jan/Jul for step=6 (step must divide 12)\n   *   - year:   year % step === 0\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'week'|'day'|'hour'|'minute'|'second'} unit\n   * @param {number} step\n   * @param {boolean} isUTC\n   * @returns {number}\n   */\n  ceilToBoundary(timestamp, unit, step, isUTC) {\n    const d = new Date(timestamp);\n    if (isUTC) {\n      switch (unit) {\n        case \"second\": {\n          const s = d.getUTCSeconds();\n          const aligned = Math.ceil(s / step) * step;\n          if (aligned === s && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(aligned);\n          return d.getTime();\n        }\n        case \"minute\": {\n          const m = d.getUTCMinutes();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(aligned);\n          return d.getTime();\n        }\n        case \"hour\": {\n          const h = d.getUTCHours();\n          const aligned = Math.ceil(h / step) * step;\n          if (aligned === h && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(aligned);\n          return d.getTime();\n        }\n        case \"day\": {\n          if (d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          d.setUTCDate(d.getUTCDate() + 1);\n          return d.getTime();\n        }\n        case \"week\": {\n          const MS_PER_WEEK = 7 * 24 * 60 * 60 * 1e3;\n          const REF_MONDAY_UTC = Date.UTC(1970, 0, 5);\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          const startOfDay = d.getTime();\n          const weeksSinceRef = Math.ceil(\n            (startOfDay - REF_MONDAY_UTC) / MS_PER_WEEK\n          );\n          const alignedWeeks = Math.ceil(weeksSinceRef / step) * step;\n          const aligned = REF_MONDAY_UTC + alignedWeeks * MS_PER_WEEK;\n          if (aligned >= timestamp) return aligned;\n          return aligned + step * MS_PER_WEEK;\n        }\n        case \"month\": {\n          const m = d.getUTCMonth();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getUTCDate() === 1 && d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          d.setUTCDate(1);\n          d.setUTCMonth(aligned);\n          return d.getTime();\n        }\n        case \"year\": {\n          const y = d.getUTCFullYear();\n          const aligned = Math.ceil(y / step) * step;\n          if (aligned === y && d.getUTCMonth() === 0 && d.getUTCDate() === 1 && d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          return Date.UTC(aligned, 0, 1);\n        }\n      }\n    } else {\n      switch (unit) {\n        case \"second\": {\n          const s = d.getSeconds();\n          const aligned = Math.ceil(s / step) * step;\n          if (aligned === s && d.getMilliseconds() === 0) return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(aligned);\n          return d.getTime();\n        }\n        case \"minute\": {\n          const m = d.getMinutes();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(aligned);\n          return d.getTime();\n        }\n        case \"hour\": {\n          const h = d.getHours();\n          const aligned = Math.ceil(h / step) * step;\n          if (aligned === h && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(aligned);\n          return d.getTime();\n        }\n        case \"day\": {\n          if (d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          d.setDate(d.getDate() + 1);\n          return d.getTime();\n        }\n        case \"week\": {\n          const MS_PER_WEEK = 7 * 24 * 60 * 60 * 1e3;\n          const REF_MONDAY_LOCAL = new Date(1970, 0, 5).getTime();\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          const startOfDay = d.getTime();\n          const weeksSinceRef = Math.ceil(\n            (startOfDay - REF_MONDAY_LOCAL) / MS_PER_WEEK\n          );\n          const alignedWeeks = Math.ceil(weeksSinceRef / step) * step;\n          const aligned = REF_MONDAY_LOCAL + alignedWeeks * MS_PER_WEEK;\n          if (aligned >= timestamp) return aligned;\n          return aligned + step * MS_PER_WEEK;\n        }\n        case \"month\": {\n          const m = d.getMonth();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getDate() === 1 && d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          d.setDate(1);\n          d.setMonth(aligned);\n          return d.getTime();\n        }\n        case \"year\": {\n          const y = d.getFullYear();\n          const aligned = Math.ceil(y / step) * step;\n          if (aligned === y && d.getMonth() === 0 && d.getDate() === 1 && d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          return new Date(aligned, 0, 1).getTime();\n        }\n      }\n    }\n    return timestamp;\n  }\n  /**\n   * Test whether a timestamp falls exactly on a unit boundary (start of year,\n   * start of month, start of day, etc.). Used by the multi-resolution\n   * formatter to upgrade a tick's display unit to a coarser scale.\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'day'|'hour'|'minute'|'second'} unit\n   * @param {boolean} isUTC\n   * @returns {boolean}\n   */\n  isAtBoundary(timestamp, unit, isUTC) {\n    const f = this.getDateFields(timestamp, isUTC);\n    switch (unit) {\n      case \"year\":\n        return f.month === 0 && f.date === 1 && f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"month\":\n        return f.date === 1 && f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"day\":\n        return f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"hour\":\n        return f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"minute\":\n        return f.second === 0 && f.ms === 0;\n      case \"second\":\n        return f.ms === 0;\n    }\n    return false;\n  }\n}\nclass Formatters {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.tooltipKeyFormat = \"dd MMM\";\n  }\n  /**\n   * @param {Function} fn\n   * @param {any} val\n   * @param {any} timestamp\n   * @param {any} _opts\n   */\n  xLabelFormat(fn, val, timestamp, _opts) {\n    const w = this.w;\n    if (w.config.xaxis.type === \"datetime\") {\n      if (w.config.xaxis.labels.formatter === void 0) {\n        if (w.config.tooltip.x.formatter === void 0) {\n          const datetimeObj = new DateTime(this.w);\n          return datetimeObj.formatDate(\n            datetimeObj.getDate(val),\n            w.config.tooltip.x.format\n          );\n        }\n      }\n    }\n    return fn(val, timestamp, _opts);\n  }\n  /**\n   * @param {any} val\n   */\n  defaultGeneralFormatter(val) {\n    if (Array.isArray(val)) {\n      return val.map((v) => {\n        return v;\n      });\n    } else {\n      return val;\n    }\n  }\n  /**\n   * @param {any} v\n   * @param {ApexYAxis} yaxe\n   */\n  defaultYFormatter(v, yaxe) {\n    const w = this.w;\n    if (Utils$1.isNumber(v)) {\n      if (w.globals.yValueDecimal !== 0) {\n        v = v.toFixed(\n          yaxe.decimalsInFloat !== void 0 ? yaxe.decimalsInFloat : w.globals.yValueDecimal\n        );\n      } else {\n        const f = v.toFixed(0);\n        v = Number(f) === v ? f : v.toFixed(1);\n      }\n    }\n    return v;\n  }\n  setLabelFormatters() {\n    const w = this.w;\n    const fmt = w.formatters;\n    fmt.xaxisTooltipFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    fmt.ttKeyFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    fmt.ttZFormatter = (val) => {\n      return val;\n    };\n    fmt.legendFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    if (w.config.xaxis.labels.formatter !== void 0) {\n      fmt.xLabelFormatter = w.config.xaxis.labels.formatter;\n    } else {\n      fmt.xLabelFormatter = (val) => {\n        if (Utils$1.isNumber(val)) {\n          if (!w.config.xaxis.convertedCatToNumeric && w.config.xaxis.type === \"numeric\") {\n            if (Utils$1.isNumber(w.config.xaxis.decimalsInFloat)) {\n              return val.toFixed(w.config.xaxis.decimalsInFloat);\n            } else {\n              const diff = w.globals.maxX - w.globals.minX;\n              if (diff > 0) {\n                const step = diff / 10;\n                const decimals = Math.max(0, -Math.floor(Math.log10(step)));\n                return val.toFixed(decimals);\n              }\n              return val.toFixed(0);\n            }\n          }\n          if (w.globals.isBarHorizontal) {\n            const range = w.globals.maxY - w.globals.minY;\n            if (range < 4) {\n              return val.toFixed(1);\n            }\n          }\n          return val.toFixed(0);\n        }\n        return val;\n      };\n    }\n    if (typeof w.config.tooltip.x.formatter === \"function\") {\n      fmt.ttKeyFormatter = w.config.tooltip.x.formatter;\n    } else {\n      fmt.ttKeyFormatter = fmt.xLabelFormatter;\n    }\n    if (typeof w.config.xaxis.tooltip.formatter === \"function\") {\n      fmt.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter;\n    }\n    if (Array.isArray(w.config.tooltip.y)) {\n      fmt.ttVal = w.config.tooltip.y;\n    } else {\n      if (w.config.tooltip.y.formatter !== void 0) {\n        fmt.ttVal = w.config.tooltip.y;\n      }\n    }\n    if (w.config.tooltip.z.formatter !== void 0) {\n      fmt.ttZFormatter = w.config.tooltip.z.formatter;\n    }\n    if (w.config.legend.formatter !== void 0) {\n      fmt.legendFormatter = w.config.legend.formatter;\n    }\n    fmt.yLabelFormatters = [];\n    w.config.yaxis.forEach((yaxe, i) => {\n      if (yaxe.labels.formatter !== void 0) {\n        fmt.yLabelFormatters[i] = yaxe.labels.formatter;\n      } else if (w.config.chart.type === \"violin\") {\n        const round = (v) => typeof v === \"number\" && isFinite(v) ? `${Math.round(v * 100) / 100}` : v;\n        fmt.yLabelFormatters[i] = (val) => {\n          if (!w.globals.xyCharts) return val;\n          return Array.isArray(val) ? val.map(round) : round(val);\n        };\n      } else {\n        fmt.yLabelFormatters[i] = (val) => {\n          if (!w.globals.xyCharts) return val;\n          if (Array.isArray(val)) {\n            return val.map((v) => {\n              return this.defaultYFormatter(v, yaxe);\n            });\n          } else {\n            return this.defaultYFormatter(val, yaxe);\n          }\n        };\n      }\n    });\n    return w.globals;\n  }\n  heatmapLabelFormatters() {\n    const w = this.w;\n    if (w.config.chart.type === \"heatmap\") {\n      w.globals.yAxisScale[0].result = /** @type {any} */\n      w.seriesData.seriesNames.slice();\n      const longest = (\n        /** @type {any} */\n        w.seriesData.seriesNames.reduce(\n          (a, b) => a.length > b.length ? a : b,\n          0\n        )\n      );\n      w.globals.yAxisScale[0].niceMax = longest;\n      w.globals.yAxisScale[0].niceMin = longest;\n    }\n  }\n}\nconst getRangeValues = ({\n  isTimeline,\n  seriesIndex,\n  dataPointIndex,\n  y1,\n  y2,\n  w\n}) => {\n  var _a;\n  let start = w.rangeData.seriesRangeStart[seriesIndex][dataPointIndex];\n  let end = w.rangeData.seriesRangeEnd[seriesIndex][dataPointIndex];\n  let ylabel = w.labelData.labels[dataPointIndex];\n  let seriesName = w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : \"\";\n  const yLbFormatter = w.formatters.ttKeyFormatter;\n  const yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n  const opts = {\n    w,\n    seriesIndex,\n    dataPointIndex,\n    start,\n    end\n  };\n  if (typeof yLbTitleFormatter === \"function\") {\n    seriesName = yLbTitleFormatter(seriesName, opts);\n  }\n  if ((_a = w.config.series[seriesIndex].data[dataPointIndex]) == null ? void 0 : _a.x) {\n    ylabel = w.config.series[seriesIndex].data[dataPointIndex].x;\n  }\n  if (!isTimeline) {\n    if (w.config.xaxis.type === \"datetime\") {\n      const xFormat = new Formatters(w);\n      ylabel = xFormat.xLabelFormat(\n        w.formatters.ttKeyFormatter,\n        ylabel,\n        ylabel,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(w).formatDate,\n          w\n        }\n      );\n    }\n  }\n  if (typeof yLbFormatter === \"function\") {\n    ylabel = yLbFormatter(ylabel, opts);\n  }\n  if (Number.isFinite(y1) && Number.isFinite(y2)) {\n    start = y1;\n    end = y2;\n  }\n  let startVal = \"\";\n  let endVal = \"\";\n  const color = w.globals.colors[seriesIndex];\n  if (w.config.tooltip.x.formatter === void 0) {\n    if (w.config.xaxis.type === \"datetime\") {\n      const datetimeObj = new DateTime(w);\n      startVal = datetimeObj.formatDate(\n        datetimeObj.getDate(start),\n        w.config.tooltip.x.format\n      );\n      endVal = datetimeObj.formatDate(\n        datetimeObj.getDate(end),\n        w.config.tooltip.x.format\n      );\n    } else {\n      startVal = start;\n      endVal = end;\n    }\n  } else {\n    startVal = w.config.tooltip.x.formatter(start);\n    endVal = w.config.tooltip.x.formatter(end);\n  }\n  return { start, end, startVal, endVal, ylabel, color, seriesName };\n};\nconst buildRangeTooltipHTML = (opts) => {\n  let { color, seriesName, ylabel, start, end, seriesIndex, dataPointIndex } = opts;\n  const formatter = opts.w.globals.tooltip.tooltipLabels.getFormatters(seriesIndex);\n  start = formatter.yLbFormatter(start);\n  end = formatter.yLbFormatter(end);\n  const val = formatter.yLbFormatter(\n    opts.w.seriesData.series[seriesIndex][dataPointIndex]\n  );\n  let valueHTML = \"\";\n  const rangeValues = `<span class=\"value start-value\">\n  ${start}\n  </span> <span class=\"separator\">-</span> <span class=\"value end-value\">\n  ${end}\n  </span>`;\n  if (opts.w.globals.comboCharts) {\n    if (opts.w.config.series[seriesIndex].type === \"rangeArea\" || opts.w.config.series[seriesIndex].type === \"rangeBar\") {\n      valueHTML = rangeValues;\n    } else {\n      valueHTML = `<span>${val}</span>`;\n    }\n  } else {\n    valueHTML = rangeValues;\n  }\n  return '<div class=\"apexcharts-tooltip-rangebar\"><div> <span class=\"series-name\" style=\"color: ' + color + '\">' + (seriesName ? seriesName : \"\") + '</span></div><div> <span class=\"category\">' + ylabel + \": </span> \" + valueHTML + \" </div></div>\";\n};\nclass Defaults {\n  /**\n   * @param {Record<string, any>} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  hideYAxis() {\n    this.opts.yaxis[0].show = false;\n    this.opts.yaxis[0].title.text = \"\";\n    this.opts.yaxis[0].axisBorder.show = false;\n    this.opts.yaxis[0].axisTicks.show = false;\n    this.opts.yaxis[0].floating = true;\n  }\n  line() {\n    return {\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        width: 5,\n        curve: \"straight\"\n      },\n      markers: {\n        size: 0,\n        hover: {\n          sizeOffset: 6\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} defaults\n   */\n  sparkline(defaults) {\n    this.hideYAxis();\n    const ret = {\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      },\n      legend: {\n        show: false\n      },\n      xaxis: {\n        labels: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        },\n        axisBorder: {\n          show: false\n        },\n        axisTicks: {\n          show: false\n        }\n      },\n      chart: {\n        toolbar: {\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: false\n      }\n    };\n    return Utils$1.extend(defaults, ret);\n  }\n  slope() {\n    this.hideYAxis();\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: true,\n        /**\n         * @param {any} val\n         * @param {Record<string, any>} opts\n         */\n        formatter(val, opts) {\n          const seriesName = opts.w.config.series[opts.seriesIndex].name;\n          return val !== null ? seriesName + \": \" + val : \"\";\n        },\n        background: {\n          enabled: false\n        },\n        offsetX: -5\n      },\n      grid: {\n        xaxis: {\n          lines: {\n            show: true\n          }\n        },\n        yaxis: {\n          lines: {\n            show: false\n          }\n        }\n      },\n      xaxis: {\n        position: \"top\",\n        labels: {\n          style: {\n            fontSize: 14,\n            fontWeight: 900\n          }\n        },\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          show: false\n        }\n      },\n      markers: {\n        size: 8,\n        hover: {\n          sizeOffset: 1\n        }\n      },\n      legend: {\n        show: false\n      },\n      tooltip: {\n        shared: false,\n        intersect: true,\n        followCursor: true\n      },\n      stroke: {\n        width: 5,\n        curve: \"straight\"\n      }\n    };\n  }\n  bar() {\n    return {\n      chart: {\n        stacked: false\n      },\n      plotOptions: {\n        bar: {\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        }\n      },\n      stroke: {\n        width: 0,\n        lineCap: \"square\"\n      },\n      fill: {\n        opacity: 0.85\n      },\n      legend: {\n        markers: {\n          shape: \"square\"\n        }\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      xaxis: {\n        tooltip: {\n          enabled: false\n        },\n        tickPlacement: \"between\",\n        crosshairs: {\n          width: \"barWidth\",\n          position: \"back\",\n          fill: {\n            type: \"gradient\"\n          },\n          dropShadow: {\n            enabled: false\n          },\n          stroke: {\n            width: 0\n          }\n        }\n      }\n    };\n  }\n  funnel() {\n    this.hideYAxis();\n    return __spreadProps(__spreadValues({}, this.bar()), {\n      chart: {\n        animations: {\n          speed: 800,\n          animateGradually: {\n            enabled: false\n          }\n        }\n      },\n      plotOptions: {\n        bar: {\n          horizontal: true,\n          borderRadiusApplication: \"around\",\n          borderRadius: 0,\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n      xaxis: {\n        labels: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        },\n        axisBorder: {\n          show: false\n        },\n        axisTicks: {\n          show: false\n        }\n      }\n    });\n  }\n  pyramid() {\n    return this.funnel();\n  }\n  gauge() {\n    const base = this.radialBar();\n    return __spreadProps(__spreadValues({}, base), {\n      plotOptions: {\n        radialBar: {\n          startAngle: -135,\n          endAngle: 135,\n          hollow: {\n            margin: 0,\n            size: \"60%\"\n          },\n          track: {\n            background: \"#e7e7e7\",\n            strokeWidth: \"100%\",\n            margin: 5\n          },\n          dataLabels: {\n            name: {\n              show: false\n            },\n            value: {\n              show: true,\n              fontSize: \"32px\",\n              fontWeight: 600,\n              offsetY: 8\n            }\n          }\n        }\n      }\n    });\n  }\n  candlestick() {\n    return {\n      stroke: {\n        width: 1\n      },\n      fill: {\n        opacity: 1\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getBoxTooltip(\n            w,\n            seriesIndex,\n            dataPointIndex,\n            [\"Open\", \"High\", \"\", \"Low\", \"Close\"],\n            \"candlestick\"\n          );\n        }\n      },\n      states: {\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  boxPlot() {\n    return {\n      chart: {\n        animations: {\n          dynamicAnimation: {\n            enabled: false\n          }\n        }\n      },\n      stroke: {\n        width: 1,\n        colors: [\"#24292e\"]\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getBoxTooltip(\n            w,\n            seriesIndex,\n            dataPointIndex,\n            [\"Minimum\", \"Q1\", \"Median\", \"Q3\", \"Maximum\"],\n            \"boxPlot\"\n          );\n        }\n      },\n      markers: {\n        size: 7,\n        strokeWidth: 1,\n        strokeColors: \"#111\"\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  violin() {\n    return {\n      chart: {\n        // Violins are a per-category distribution plot (discrete category\n        // x-axis), so range zooming/panning is meaningless — off by default.\n        zoom: {\n          enabled: false\n        },\n        animations: {\n          dynamicAnimation: {\n            enabled: false\n          }\n        }\n      },\n      stroke: {\n        width: 1,\n        colors: [\"#24292e\"]\n      },\n      fill: {\n        opacity: 0.7\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getViolinTooltip(w, seriesIndex, dataPointIndex);\n        }\n      },\n      states: {\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  rangeBar() {\n    const handleTimelineTooltip = (opts) => {\n      const { color, seriesName, ylabel, startVal, endVal } = getRangeValues(__spreadProps(__spreadValues({}, opts), {\n        isTimeline: true\n      }));\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start: startVal,\n        end: endVal\n      }));\n    };\n    const handleRangeColumnTooltip = (opts) => {\n      const { color, seriesName, ylabel, start, end } = getRangeValues(opts);\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start,\n        end\n      }));\n    };\n    return {\n      chart: {\n        animations: {\n          animateGradually: false\n        }\n      },\n      stroke: {\n        width: 0,\n        lineCap: \"square\"\n      },\n      plotOptions: {\n        bar: {\n          borderRadius: 0,\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      dataLabels: {\n        enabled: false,\n        /**\n         * @param {any} val\n         */\n        formatter(val, { seriesIndex, dataPointIndex, w }) {\n          const getVal = () => {\n            const start = w.rangeData.seriesRangeStart[seriesIndex][dataPointIndex];\n            const end = w.rangeData.seriesRangeEnd[seriesIndex][dataPointIndex];\n            return end - start;\n          };\n          if (w.globals.comboCharts) {\n            if (w.config.series[seriesIndex].type === \"rangeBar\" || w.config.series[seriesIndex].type === \"rangeArea\") {\n              return getVal();\n            } else {\n              return val;\n            }\n          } else {\n            return getVal();\n          }\n        },\n        background: {\n          enabled: false\n        },\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      markers: {\n        size: 10\n      },\n      tooltip: {\n        shared: false,\n        followCursor: true,\n        /**\n         * @param {Record<string, any>} opts\n         */\n        custom(opts) {\n          if (opts.w.config.plotOptions && opts.w.config.plotOptions.bar && opts.w.config.plotOptions.bar.horizontal) {\n            return handleTimelineTooltip(opts);\n          } else {\n            return handleRangeColumnTooltip(opts);\n          }\n        }\n      },\n      xaxis: {\n        tickPlacement: \"between\",\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          stroke: {\n            width: 0\n          }\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  dumbbell(opts) {\n    var _a, _b;\n    if (!((_a = opts.plotOptions.bar) == null ? void 0 : _a.barHeight)) {\n      opts.plotOptions.bar.barHeight = 2;\n    }\n    if (!((_b = opts.plotOptions.bar) == null ? void 0 : _b.columnWidth)) {\n      opts.plotOptions.bar.columnWidth = 2;\n    }\n    return opts;\n  }\n  area() {\n    return {\n      stroke: {\n        width: 4,\n        fill: {\n          type: \"solid\",\n          gradient: {\n            inverseColors: false,\n            shade: \"light\",\n            type: \"vertical\",\n            opacityFrom: 0.65,\n            opacityTo: 0.5,\n            stops: [0, 100, 100]\n          }\n        }\n      },\n      fill: {\n        type: \"gradient\",\n        gradient: {\n          inverseColors: false,\n          shade: \"light\",\n          type: \"vertical\",\n          opacityFrom: 0.65,\n          opacityTo: 0.5,\n          stops: [0, 100, 100]\n        }\n      },\n      markers: {\n        size: 0,\n        hover: {\n          sizeOffset: 6\n        }\n      },\n      tooltip: {\n        followCursor: false\n      }\n    };\n  }\n  rangeArea() {\n    const handleRangeAreaTooltip = (opts) => {\n      const { color, seriesName, ylabel, start, end } = getRangeValues(opts);\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start,\n        end\n      }));\n    };\n    return {\n      stroke: {\n        curve: \"straight\",\n        width: 0\n      },\n      fill: {\n        type: \"solid\",\n        opacity: 0.6\n      },\n      markers: {\n        size: 0\n      },\n      states: {\n        hover: {\n          filter: {\n            type: \"none\"\n          }\n        },\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      tooltip: {\n        intersect: false,\n        shared: true,\n        followCursor: true,\n        /**\n         * @param {Record<string, any>} opts\n         */\n        custom(opts) {\n          return handleRangeAreaTooltip(opts);\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} defaults\n   */\n  brush(defaults) {\n    const ret = {\n      chart: {\n        toolbar: {\n          autoSelected: \"selection\",\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        width: 1\n      },\n      tooltip: {\n        enabled: false\n      },\n      xaxis: {\n        tooltip: {\n          enabled: false\n        }\n      }\n    };\n    return Utils$1.extend(defaults, ret);\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  stacked100(opts) {\n    opts.dataLabels = opts.dataLabels || {};\n    opts.dataLabels.formatter = opts.dataLabels.formatter || void 0;\n    const existingDataLabelFormatter = opts.dataLabels.formatter;\n    opts.yaxis.forEach((yaxe, index) => {\n      opts.yaxis[index].min = 0;\n      opts.yaxis[index].max = 100;\n    });\n    const isBar = opts.chart.type === \"bar\";\n    if (isBar) {\n      opts.dataLabels.formatter = existingDataLabelFormatter || /**\n       * @param {any} val\n       */\n      function(val) {\n        if (typeof val === \"number\") {\n          return val ? val.toFixed(0) + \"%\" : val;\n        }\n        return val;\n      };\n    }\n    return opts;\n  }\n  stackedBars() {\n    const barDefaults = this.bar();\n    return __spreadProps(__spreadValues({}, barDefaults), {\n      plotOptions: __spreadProps(__spreadValues({}, barDefaults.plotOptions), {\n        bar: __spreadProps(__spreadValues({}, barDefaults.plotOptions.bar), {\n          borderRadiusApplication: \"end\",\n          borderRadiusWhenStacked: \"last\"\n        })\n      })\n    });\n  }\n  // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area\n  /**\n   * @param {Record<string, any>} opts\n   */\n  convertCatToNumeric(opts) {\n    opts.xaxis.convertedCatToNumeric = true;\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {any} cats\n   */\n  convertCatToNumericXaxis(opts, cats) {\n    opts.xaxis.type = \"numeric\";\n    opts.xaxis.labels = opts.xaxis.labels || {};\n    opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || /**\n     * @param {any} val\n     */\n    function(val) {\n      return Utils$1.isNumber(val) ? Math.floor(val) : val;\n    };\n    const defaultFormatter = opts.xaxis.labels.formatter;\n    let labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels;\n    if (cats && cats.length) {\n      labels = cats.map((c) => {\n        return Array.isArray(c) ? c : String(c);\n      });\n    }\n    if (labels && labels.length) {\n      opts.xaxis.labels.formatter = function(val) {\n        return Utils$1.isNumber(val) ? defaultFormatter(labels[Math.floor(val) - 1]) : defaultFormatter(val);\n      };\n    }\n    opts.xaxis.categories = [];\n    opts.labels = [];\n    opts.xaxis.tickAmount = opts.xaxis.tickAmount || \"dataPoints\";\n    return opts;\n  }\n  bubble() {\n    return {\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      xaxis: {\n        crosshairs: {\n          width: 0\n        }\n      },\n      fill: {\n        type: \"solid\",\n        gradient: {\n          shade: \"light\",\n          inverse: true,\n          shadeIntensity: 0.55,\n          opacityFrom: 0.4,\n          opacityTo: 0.8\n        }\n      }\n    };\n  }\n  scatter() {\n    return {\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      markers: {\n        size: 6,\n        strokeWidth: 1,\n        hover: {\n          sizeOffset: 2\n        }\n      }\n    };\n  }\n  heatmap() {\n    return {\n      chart: {\n        stacked: false,\n        // A heatmap is a fixed grid: zooming/panning only distorts the cells\n        // and (on a datetime axis) collapses the month labels to repeats, so\n        // it is off by default, mirroring treemap. Users can opt back in with\n        // chart.zoom.enabled: true.\n        zoom: {\n          enabled: false\n        }\n      },\n      fill: {\n        opacity: 1\n      },\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      tooltip: {\n        // Anchor the tooltip above the hovered cell with a downward arrow\n        // (flipping below near the top edge), the same treatment horizontal\n        // bars get, rather than trailing the cursor. Opt back into the old\n        // behavior with tooltip.followCursor: true.\n        followCursor: false,\n        marker: {\n          show: false\n        },\n        x: {\n          show: false\n        }\n      },\n      legend: {\n        position: \"top\",\n        markers: {\n          shape: \"square\"\n        }\n      },\n      grid: {\n        padding: {\n          right: 20\n        }\n      }\n    };\n  }\n  treemap() {\n    return {\n      chart: {\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        style: {\n          fontSize: 14,\n          fontWeight: 600,\n          colors: [\"#fff\"]\n        }\n      },\n      stroke: {\n        show: true,\n        width: 2,\n        colors: [\"#fff\"]\n      },\n      legend: {\n        show: false\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          stops: [0, 100]\n        }\n      },\n      tooltip: {\n        followCursor: true,\n        x: {\n          show: false\n        }\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        }\n      }\n    };\n  }\n  unit() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        show: false,\n        width: 0\n      },\n      fill: {\n        opacity: 1\n      },\n      tooltip: {\n        followCursor: true,\n        x: {\n          show: false\n        }\n      },\n      legend: {\n        show: true,\n        position: \"bottom\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  sunburst() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        },\n        dropShadow: {\n          enabled: true\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      fill: {\n        opacity: 1\n      },\n      // Unlike pie, sunburst keeps the STANDARD themed tooltip (light/dark).\n      // Slice-coloured tooltips (fillSeriesColor) wash out here because child\n      // arcs are tinted toward white per depth; users can still opt in.\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  pie() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      plotOptions: {\n        pie: {\n          donut: {\n            labels: {\n              show: false\n            }\n          }\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        },\n        dropShadow: {\n          enabled: true\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          shade: \"light\",\n          stops: [0, 100]\n        }\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  donut() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        },\n        dropShadow: {\n          enabled: true\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          shade: \"light\",\n          shadeIntensity: 0.35,\n          stops: [80, 100],\n          opacityFrom: 1,\n          opacityTo: 1\n        }\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  polarArea() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        enabled: false\n      },\n      stroke: {\n        show: true,\n        width: 2\n      },\n      fill: {\n        opacity: 0.7\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  radar() {\n    this.opts.yaxis[0].labels.offsetY = this.opts.yaxis[0].labels.offsetY ? this.opts.yaxis[0].labels.offsetY : 6;\n    return {\n      dataLabels: {\n        enabled: false,\n        style: {\n          fontSize: \"11px\"\n        }\n      },\n      stroke: {\n        width: 2\n      },\n      markers: {\n        size: 5,\n        strokeWidth: 1,\n        strokeOpacity: 1\n      },\n      fill: {\n        opacity: 0.2\n      },\n      tooltip: {\n        shared: false,\n        intersect: true,\n        followCursor: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      },\n      xaxis: {\n        labels: {\n          formatter: (val) => val,\n          style: {\n            colors: [\"#a8a8a8\"],\n            fontSize: \"11px\"\n          }\n        },\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          show: false\n        }\n      }\n    };\n  }\n  radialBar() {\n    return {\n      chart: {\n        animations: {\n          dynamicAnimation: {\n            enabled: true,\n            speed: 800\n          }\n        },\n        toolbar: {\n          show: false\n        }\n      },\n      stroke: {\n        // Radial value arcs are stroked open arcs; square/round caps would\n        // extend the stroke half a stroke-width past each endpoint, making\n        // the \"starting edge\" visibly stick out past the geometric arc.\n        // Butt cap is the only one that aligns with the arc's true angular\n        // span. Without this, a chart that previously was a bar (whose\n        // defaults set lineCap='square') would carry that cap across into\n        // the radial render after a type morph.\n        lineCap: \"butt\"\n      },\n      fill: {\n        gradient: {\n          shade: \"dark\",\n          shadeIntensity: 0.4,\n          inverseColors: false,\n          type: \"diagonal2\",\n          opacityFrom: 1,\n          opacityTo: 1,\n          stops: [70, 98, 100]\n        }\n      },\n      legend: {\n        show: false,\n        position: \"right\"\n      },\n      tooltip: {\n        enabled: false,\n        fillSeriesColor: true\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   * @param {any[]} labels\n   * @param {string} chartType\n   */\n  _getBoxTooltip(w, seriesIndex, dataPointIndex, labels, chartType) {\n    const o = w.candleData.seriesCandleO[seriesIndex][dataPointIndex];\n    const h = w.candleData.seriesCandleH[seriesIndex][dataPointIndex];\n    const m = w.candleData.seriesCandleM[seriesIndex][dataPointIndex];\n    const l = w.candleData.seriesCandleL[seriesIndex][dataPointIndex];\n    const c = w.candleData.seriesCandleC[seriesIndex][dataPointIndex];\n    const _si = (\n      /** @type {Record<string,any>} */\n      w.config.series[seriesIndex]\n    );\n    if (_si.type && _si.type !== chartType) {\n      return `<div class=\"apexcharts-custom-tooltip\">\n          ${_si.name ? _si.name : \"series-\" + (seriesIndex + 1)}: <strong>${w.seriesData.series[seriesIndex][dataPointIndex]}</strong>\n        </div>`;\n    } else {\n      return `<div class=\"apexcharts-tooltip-box apexcharts-tooltip-${w.config.chart.type}\"><div>${labels[0]}: <span class=\"value\">` + o + `</span></div><div>${labels[1]}: <span class=\"value\">` + h + \"</span></div>\" + (m ? `<div>${labels[2]}: <span class=\"value\">` + m + \"</span></div>\" : \"\") + `<div>${labels[3]}: <span class=\"value\">` + l + `</span></div><div>${labels[4]}: <span class=\"value\">` + c + \"</span></div></div>\";\n    }\n  }\n  /**\n   * Shared tooltip for a violin: distribution value range and observation\n   * count. Per-point hover is intentionally unsupported (jitter renders as a\n   * single path), so the tooltip summarizes the violin as a whole.\n   *\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  _getViolinTooltip(w, seriesIndex, dataPointIndex) {\n    var _a, _b, _c;\n    const minV = (_a = w.violinData.seriesViolinMin[seriesIndex]) == null ? void 0 : _a[dataPointIndex];\n    const maxV = (_b = w.violinData.seriesViolinMax[seriesIndex]) == null ? void 0 : _b[dataPointIndex];\n    const pts = ((_c = w.violinData.seriesViolinPoints[seriesIndex]) == null ? void 0 : _c[dataPointIndex]) || [];\n    const name2 = (\n      /** @type {Record<string,any>} */\n      w.config.series[seriesIndex].name || \"series-\" + (seriesIndex + 1)\n    );\n    return `<div class=\"apexcharts-tooltip-box apexcharts-tooltip-${w.config.chart.type}\"><div class=\"apexcharts-tooltip-violin-name\">${name2}</div><div>Min: <span class=\"value\">${minV}</span></div><div>Max: <span class=\"value\">${maxV}</span></div><div>Observations: <span class=\"value\">${pts.length}</span></div></div>`;\n  }\n}\nconst name = \"en\";\nconst options = { \"months\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"], \"shortMonths\": [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], \"days\": [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], \"shortDays\": [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], \"toolbar\": { \"exportToSVG\": \"Download SVG\", \"exportToPNG\": \"Download PNG\", \"exportToCSV\": \"Download CSV\", \"menu\": \"Menu\", \"selection\": \"Selection\", \"selectionZoom\": \"Selection Zoom\", \"zoomIn\": \"Zoom In\", \"zoomOut\": \"Zoom Out\", \"pan\": \"Panning\", \"reset\": \"Reset Zoom\", \"measure\": \"Measure\" } };\nconst en = {\n  name,\n  options\n};\nclass Options {\n  constructor() {\n    this.yAxis = {\n      show: true,\n      showAlways: false,\n      showForNullSeries: true,\n      seriesName: void 0,\n      opposite: false,\n      reversed: false,\n      logarithmic: false,\n      logBase: 10,\n      tickAmount: void 0,\n      stepSize: void 0,\n      forceNiceScale: false,\n      alignZero: false,\n      max: void 0,\n      min: void 0,\n      floating: false,\n      decimalsInFloat: void 0,\n      labels: {\n        show: true,\n        showDuplicates: false,\n        minWidth: 0,\n        maxWidth: 160,\n        offsetX: 0,\n        offsetY: 0,\n        align: void 0,\n        rotate: 0,\n        padding: 20,\n        style: {\n          colors: [],\n          fontSize: \"11px\",\n          fontWeight: 400,\n          fontFamily: void 0,\n          cssClass: \"\"\n        },\n        formatter: void 0\n      },\n      axisBorder: {\n        show: false,\n        color: \"#e0e0e0\",\n        width: 1,\n        offsetX: 0,\n        offsetY: 0\n      },\n      axisTicks: {\n        show: false,\n        color: \"#e0e0e0\",\n        width: 6,\n        offsetX: 0,\n        offsetY: 0\n      },\n      title: {\n        text: void 0,\n        rotate: -90,\n        offsetY: 0,\n        offsetX: 0,\n        style: {\n          color: void 0,\n          fontSize: \"11px\",\n          fontWeight: 900,\n          fontFamily: void 0,\n          cssClass: \"\"\n        }\n      },\n      tooltip: {\n        enabled: false,\n        offsetX: 0\n      },\n      crosshairs: {\n        show: true,\n        position: \"front\",\n        stroke: {\n          color: \"#b6b6b6\",\n          width: 1,\n          dashArray: 0\n        }\n      }\n    };\n    this.pointAnnotation = {\n      id: void 0,\n      x: 0,\n      y: null,\n      yAxisIndex: 0,\n      seriesIndex: void 0,\n      mouseEnter: void 0,\n      mouseLeave: void 0,\n      click: void 0,\n      marker: {\n        size: 4,\n        fillColor: \"#fff\",\n        strokeWidth: 2,\n        strokeColor: \"#333\",\n        shape: \"circle\",\n        offsetX: 0,\n        offsetY: 0,\n        // radius: 2, // DEPRECATED\n        cssClass: \"\"\n      },\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"middle\",\n        offsetX: 0,\n        offsetY: 0,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      },\n      customSVG: {\n        // this will be deprecated in the next major version as it is going to be replaced with a better alternative below (image)\n        SVG: void 0,\n        cssClass: void 0,\n        offsetX: 0,\n        offsetY: 0\n      },\n      image: {\n        path: void 0,\n        width: 20,\n        height: 20,\n        offsetX: 0,\n        offsetY: 0\n      },\n      tooltip: {\n        // Show a hover tooltip over the annotation marker, like a regular\n        // data point. Lets you surface richer detail than fits in the label.\n        enabled: false,\n        // Static tooltip content (HTML allowed; array joined with <br/>).\n        // Falls back to label.text when omitted.\n        text: void 0,\n        // formatter({ annotation, seriesIndex, id, w }) => string (HTML).\n        // Takes precedence over `text` when provided.\n        formatter: void 0,\n        // 'light' | 'dark'. Falls back to the global tooltip.theme.\n        theme: void 0,\n        offsetX: 0,\n        offsetY: 0\n      }\n    };\n    this.yAxisAnnotation = {\n      id: void 0,\n      y: 0,\n      y2: null,\n      strokeDashArray: 1,\n      fillColor: \"#c2c2c2\",\n      borderColor: \"#c2c2c2\",\n      borderWidth: 1,\n      opacity: 0.3,\n      offsetX: 0,\n      offsetY: 0,\n      width: \"100%\",\n      yAxisIndex: 0,\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"end\",\n        position: \"right\",\n        offsetX: 0,\n        offsetY: -3,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      }\n    };\n    this.xAxisAnnotation = {\n      id: void 0,\n      x: 0,\n      x2: null,\n      strokeDashArray: 1,\n      fillColor: \"#c2c2c2\",\n      borderColor: \"#c2c2c2\",\n      borderWidth: 1,\n      opacity: 0.3,\n      offsetX: 0,\n      offsetY: 0,\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"middle\",\n        orientation: \"vertical\",\n        position: \"top\",\n        offsetX: 0,\n        offsetY: 0,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      }\n    };\n    this.text = {\n      x: 0,\n      y: 0,\n      text: \"\",\n      textAnchor: \"start\",\n      foreColor: void 0,\n      fontSize: \"13px\",\n      fontFamily: void 0,\n      fontWeight: 400,\n      appendTo: \".apexcharts-annotations\",\n      backgroundColor: \"transparent\",\n      borderColor: \"#c2c2c2\",\n      borderRadius: 0,\n      borderWidth: 0,\n      paddingLeft: 4,\n      paddingRight: 4,\n      paddingTop: 2,\n      paddingBottom: 2\n    };\n  }\n  init() {\n    return {\n      annotations: {\n        yaxis: [this.yAxisAnnotation],\n        xaxis: [this.xAxisAnnotation],\n        points: [this.pointAnnotation],\n        texts: [],\n        images: [],\n        shapes: []\n      },\n      // Weave (#1): public plugin platform. Per-chart activation list:\n      // { name, options?, order? }. Requires the Weave host to be bundled\n      // (`import 'apexcharts/features/weave'`, included in the full bundle) and\n      // the plugin registered via ApexCharts.registerPlugin().\n      plugins: [],\n      chart: {\n        animations: {\n          // Master switch — set false to render charts without any animation.\n          // Each chart type gets a tailored initial-mount animation by default:\n          //   line/area/rangeArea/radar: pen-stroke draw + radial fill bloom\n          //   bar/stacked/range/funnel:  grow from baseline (+ stagger)\n          //   scatter/bubble:            scale-up pop with overshoot\n          //   heatmap:                   diagonal-wave cell reveal\n          //   treemap:                   largest-tile-first cascade\n          //   pie/donut/polar/gauge:     arc sweep + needle settle\n          // Speed is controlled by `speed`; per-element stagger by\n          // `animateGradually.enabled` / `animateGradually.delay`.\n          enabled: true,\n          speed: 800,\n          // Cadence (#6): easing for the generic tweens (data-update value\n          // transitions, path morphs, marker animate). A registered name, a\n          // cubic-bezier [x1,y1,x2,y2] array, or a function (t in [0,1]).\n          // 'easeInOutSine' is the historical curve, so the default is\n          // behavior-neutral. The tuned initial-draw pen/pop easings are fixed.\n          easing: \"easeInOutSine\",\n          animateGradually: {\n            // Drives per-element stagger across all chart types. When enabled,\n            // bars/heatmap-cells/scatter-points/treemap-tiles reveal in\n            // sequence; line/area markers fade in progressively along the\n            // draw. `delay` is the requested step in ms (auto-capped per\n            // chart so total stagger ≤ ~half the animation duration).\n            delay: 150,\n            enabled: true\n          },\n          dynamicAnimation: {\n            // Data-change (updateSeries) animation. Independent from the\n            // initial-mount animations above.\n            enabled: true,\n            speed: 350,\n            // Easing for data-change morphs only (same accepted forms as\n            // `animations.easing`). Unset -> inherit the chart-wide easing,\n            // except detected streaming scrolls (rolling window / append\n            // under xaxis.range) which default to 'linear' so the window\n            // slides at constant velocity instead of pulsing each tick.\n            easing: void 0\n          },\n          chartTypeMorph: {\n            // Cross-type morph (updateOptions changing chart.type). Bridges\n            // the destroy+recreate flicker by sampling source + target paths\n            // into N evenly-spaced perimeter points and tweening point-by-point\n            // with rotation-search alignment, so the transition is always smooth\n            // and non-self-intersecting even between very different shapes (bar\n            // rect ↔ pie wedge / radial arc). Supported pairs include bar ↔\n            // pie / donut / radialBar / polarArea / funnel / pyramid (plus the\n            // trivial pie ↔ donut ↔ polarArea cases). Falls back to instant\n            // snap when types or data shape are incompatible.\n            enabled: true,\n            speed: 600\n          },\n          // Honor the OS-level prefers-reduced-motion setting. When true (default)\n          // and the user has the accessibility preference enabled, all initial-mount\n          // animations are skipped and the chart renders instantly.\n          respectReducedMotion: true,\n          // Above this many data points, per-element morph + stagger (which\n          // spins up one JS-driven animation timeline per path — three chained\n          // tweens each in morphSVG) is replaced by a single GPU-composited\n          // opacity fade of the whole series. Thousands of candlesticks/bars\n          // otherwise jank the main thread on initial render and on every zoom.\n          // The fade reuses the existing delayedElements reveal so the result\n          // still animates in, just at O(1) cost instead of O(n). Set to 0 to\n          // always animate per-element regardless of dataset size.\n          largeDatasetThreshold: 1e3\n        },\n        background: \"\",\n        locales: [en],\n        defaultLocale: \"en\",\n        // Perspectives (#10): serializable/shareable view state. Passive:\n        // requires `import 'apexcharts/features/perspectives'`. serializeOptions\n        // is the whitelist of function-free option paths stored in a token.\n        perspectives: {\n          serializeOptions: [\"theme\", \"xaxis\", \"yaxis\", \"title\", \"subtitle\"]\n        },\n        // Rewind (#3): undo/redo history. Opt-in (bundle + behavior): requires\n        // `import 'apexcharts/features/history'` AND chart.history.enabled.\n        history: {\n          enabled: false,\n          maxDepth: 100,\n          coalesceMs: 250,\n          keyboard: true\n        },\n        // Strata (#2): hybrid SVG+canvas series renderer. 'svg' (default) |\n        // 'canvas' | 'auto'. 'auto'/'canvas' need the canvas renderer feature\n        // (`import 'apexcharts/features/renderer-canvas'`); without it, or with\n        // a canvas-unsupported feature (pattern/image fill, color-matrix state\n        // filters), selection falls back to 'svg'. Only the series layer is\n        // canvas-capable in v1; chrome stays SVG.\n        renderer: \"svg\",\n        rendererThreshold: 8e3,\n        layers: {\n          series: \"auto\",\n          grid: \"svg\",\n          annotations: \"svg\",\n          dataLabels: \"svg\"\n        },\n        dropShadow: {\n          enabled: false,\n          enabledOnSeries: void 0,\n          top: 2,\n          left: 2,\n          blur: 4,\n          color: \"#000\",\n          opacity: 0.7\n        },\n        events: {\n          animationEnd: void 0,\n          beforeMount: void 0,\n          mounted: void 0,\n          updated: void 0,\n          click: void 0,\n          mouseMove: void 0,\n          mouseLeave: void 0,\n          xAxisLabelClick: void 0,\n          legendClick: void 0,\n          markerClick: void 0,\n          selection: void 0,\n          dataPointSelection: void 0,\n          dataPointMouseEnter: void 0,\n          dataPointMouseLeave: void 0,\n          beforeZoom: void 0,\n          beforeResetZoom: void 0,\n          zoomed: void 0,\n          scrolled: void 0,\n          brushScrolled: void 0,\n          crossFilter: void 0,\n          filterChange: void 0,\n          annotationDragged: void 0,\n          annotationEdited: void 0,\n          annotationCreated: void 0,\n          annotationStyled: void 0,\n          annotationDeleted: void 0,\n          measured: void 0,\n          keyDown: void 0,\n          keyUp: void 0\n        },\n        foreColor: \"#373d3f\",\n        fontFamily: \"Helvetica, Arial, sans-serif\",\n        height: \"auto\",\n        parentHeightOffset: 15,\n        redrawOnParentResize: true,\n        redrawOnWindowResize: true,\n        id: void 0,\n        group: void 0,\n        nonce: void 0,\n        // Per-chart license key override for the gated premium features\n        // (storyboard, link/crossfilter, ink, measure, contextMenu,\n        // perspectives, history). Most specific wins: chart.license ->\n        // ApexCharts.setLicense() -> window.Apex.license -> unlicensed (trial\n        // watermark). Shared across the ApexCharts family. See setLicense().\n        license: void 0,\n        offsetX: 0,\n        offsetY: 0,\n        injectStyleSheet: true,\n        selection: {\n          enabled: false,\n          type: \"x\",\n          // selectedPoints: undefined, // default datapoints that should be selected automatically\n          fill: {\n            color: \"#24292e\",\n            opacity: 0.1\n          },\n          stroke: {\n            width: 1,\n            color: \"#24292e\",\n            opacity: 0.4,\n            dashArray: 3\n          },\n          xaxis: {\n            min: void 0,\n            max: void 0\n          },\n          yaxis: {\n            min: void 0,\n            max: void 0\n          }\n        },\n        sparkline: {\n          enabled: false\n        },\n        brush: {\n          enabled: false,\n          autoScaleYaxis: true,\n          target: void 0,\n          targets: void 0\n        },\n        // Linked Views (#4): crossfilter / linked highlighting. Requires the\n        // `link` feature. Two modes:\n        //   HIGHLIGHT (P1): `enabled` with no `dimension`. Charts sharing a\n        //   `chart.group` form a set; brushing a range (needs\n        //   `chart.selection.enabled`) dims out-of-range marks in place.\n        //   FILTER (P2): set `dimension` (its presence selects this path). Each\n        //   chart declares a dimension + reduction over a shared record set\n        //   registered with ApexCharts.crossfilter({ id, records }); clicking a\n        //   bucket re-aggregates the other charts. See docs/spec.\n        link: {\n          enabled: false,\n          mode: \"highlight\",\n          dimOpacity: 0.2,\n          // FILTER-mode config (all optional except dimension):\n          id: void 0,\n          // crossfilter coordinator id (defaults to chart.group)\n          dimension: void 0,\n          // (row) => key; presence selects filter mode\n          reduce: void 0,\n          // 'count' | { sum|avg|min|max: field } | (rows)=>n\n          type: void 0,\n          // 'category' | 'range' (else inferred from bins)\n          bins: void 0,\n          // range dims: { width } | { count } | { thresholds }\n          order: void 0,\n          // category order: 'first-seen' | 'asc' | 'desc' | fn\n          seriesName: void 0\n          // axis-chart series name (default 'Count')\n        },\n        // Ink Layer (#7): direct-manipulation annotations. When enabled, every\n        // point annotation is draggable (unless it sets draggable:false); or opt\n        // in per annotation with annotations.points[].draggable. Clicking an\n        // ink-managed annotation opens a floating editor card: rename inline,\n        // recolor, toggle bold, step the font size, size/reshape the marker, or\n        // delete the note. Axis-line annotations get separate Label and Line\n        // color rows, so restyling the label chip never touches the stroke.\n        // Requires the `ink` feature. Fires annotationDragged,\n        // annotationEdited, annotationStyled and annotationDeleted.\n        ink: {\n          enabled: false,\n          // Show a minimal \"add note\" tool palette; clicking it arms create\n          // mode (the next plot click drops an editable, draggable annotation).\n          palette: false,\n          // Snap a dragged point / axis-line annotation to the nearest gridline\n          // (numeric x + linear y). Undo/redo of ink edits is automatic when the\n          // history (Rewind) feature is enabled.\n          snap: false,\n          // Accent swatches offered by the floating note editor; defaults to a\n          // built-in 6-color palette when undefined.\n          noteColors: void 0\n        },\n        // Measure ruler (#18): a measure/delta ruler. Requires the `measure`\n        // feature. Hold `key` (default 'm') and drag A->B on the plot, or call\n        // chart.startMeasure()/chart.stopMeasure() to arm it. The live ruler\n        // reads dx, dy, %change and slope; on release it pins as a data-anchored\n        // overlay that re-projects on zoom/resize. Fires `measured`.\n        measure: {\n          enabled: false,\n          // 'span' (default): finance-style vertical band between two x-points\n          // with a \"change (%) + range\" readout, endpoints snapped to the first\n          // series. 'free': a diagonal ruler between two arbitrary points.\n          mode: \"span\",\n          key: \"m\",\n          pinOnRelease: true,\n          // Styling tokens. Every element also carries a stable CSS class\n          // (apexcharts-measure-band / -vline / -line / -label-bg / -label,\n          // group gets apexcharts-measure-up|down|flat). Colors are left\n          // undefined so they resolve config -> `--apx-measure-*` CSS custom\n          // property -> built-in default; set them here to force a color from JS.\n          colors: {\n            up: void 0,\n            down: void 0,\n            neutral: void 0,\n            guide: void 0\n          },\n          band: true,\n          // span mode: shaded band between the two x-positions\n          guides: true,\n          // span mode: vertical dashed reference lines\n          markers: true,\n          // endpoint dots on the series line\n          // Content: value formatters and a full readout override. `label`\n          // receives { from, to, dx, dy, percentChange, slope, mode } and\n          // returns a string or string[] (lines).\n          format: { x: void 0, y: void 0, percent: void 0 },\n          label: void 0\n        },\n        // Radial Actions (#chrome): right-click / long-press context menu.\n        // Requires the `contextMenu` feature. Each action receives the clicked\n        // data coordinates, so verbs act at the point (not chart-wide like a\n        // toolbar button). `items` is an ordered list of built-in ids\n        // ('annotate' | 'xline' | 'yline' | 'measure') and/or custom\n        // { id, label, icon, onClick(ctx, { x, y, seriesIndex, dataPointIndex,\n        // clientX, clientY }) }. 'measure' is shown only when the measure tool\n        // is enabled. `labels` overrides built-in text; `noteText` is the label\n        // dropped by 'annotate'.\n        contextMenu: {\n          enabled: false,\n          items: [\"annotate\", \"xline\", \"yline\", \"measure\"],\n          labels: {\n            annotate: void 0,\n            xline: void 0,\n            yline: void 0,\n            measure: void 0\n          },\n          noteText: \"Note\",\n          // 'xline' (\"Annotate here\") drops a dashed vertical LINE at the\n          // clicked x; 'yline' (\"Mark this level\") a dashed horizontal line at\n          // the clicked y. Lines only, never a range rectangle. Like the note,\n          // a line is ink-managed when the ink feature is bundled: it opens\n          // the floating editor (rename; separate Label and Line color rows,\n          // so restyling the chip cannot blank the stroke; delete), drags\n          // along its axis, and undoes via Rewind. `line` styles both items.\n          line: {\n            text: \"\",\n            // label drawn on the line; empty for no label\n            strokeDashArray: 4,\n            color: void 0\n            // undefined keeps the annotation default color\n          }\n        },\n        stacked: false,\n        stackOnlyBar: true,\n        // mixed chart with stacked bars and line series - incorrect line draw #907\n        stackType: \"normal\",\n        // Real-time streaming mode. When enabled, appendData() bounds memory\n        // automatically: each series is trimmed to `maxPoints` (when set) or\n        // to the visible `xaxis.range` window plus a two-point off-screen\n        // runway (so exiting segments slide off the left edge instead of\n        // popping). The scroll animation itself needs no opt-in; updates\n        // that continue the previous window (appendData, or updateSeries with\n        // a shifted fixed-length window) always translate at constant\n        // velocity; see modules/animations/StreamScroll.\n        streaming: {\n          enabled: false,\n          maxPoints: void 0\n        },\n        toolbar: {\n          show: true,\n          offsetX: 0,\n          offsetY: 0,\n          tools: {\n            download: true,\n            selection: true,\n            zoom: true,\n            zoomin: true,\n            zoomout: true,\n            pan: true,\n            reset: true,\n            // Shown only when the measure ruler is active (chart.measure.enabled\n            // and the `measure` feature bundled). Toggles the measure tool; set\n            // false to keep the ruler key-driven only. See chart.measure.\n            measure: true,\n            customIcons: []\n          },\n          export: {\n            csv: {\n              filename: void 0,\n              columnDelimiter: \",\",\n              headerCategory: \"category\",\n              headerValue: \"value\",\n              categoryFormatter: void 0,\n              valueFormatter: void 0\n            },\n            png: {\n              filename: void 0\n            },\n            svg: {\n              filename: void 0\n            },\n            scale: void 0,\n            width: void 0\n          },\n          autoSelected: \"zoom\"\n          // accepts -> zoom, pan, selection, measure\n        },\n        type: \"line\",\n        width: \"100%\",\n        zoom: {\n          enabled: true,\n          type: \"x\",\n          autoScaleYaxis: false,\n          allowMouseWheelZoom: true,\n          // Momentum: two-finger pinch-zoom on touch devices. Zooms the x-axis\n          // around the pinch centroid (matching the x-only wheel/toolbar zoom),\n          // frame-by-frame rather than the 400ms wheel throttle.\n          pinch: true,\n          zoomedArea: {\n            fill: {\n              color: \"#90CAF9\",\n              opacity: 0.4\n            },\n            stroke: {\n              color: \"#0D47A1\",\n              opacity: 0.4,\n              width: 1\n            }\n          }\n        },\n        // Momentum: kinetic panning on touch. When a one-finger pan is released\n        // with velocity, the chart keeps gliding and decelerates by `friction`\n        // each frame, clamping (no elastic overshoot) at the data edges.\n        pan: {\n          inertia: true,\n          friction: 0.92\n        },\n        accessibility: {\n          enabled: true,\n          description: void 0,\n          announcements: {\n            enabled: true\n          },\n          keyboard: {\n            enabled: true,\n            navigation: {\n              enabled: true,\n              wrapAround: false\n            }\n          }\n        },\n        dataReducer: {\n          enabled: false,\n          algorithm: \"lttb\",\n          targetPoints: 250,\n          threshold: 500\n        }\n      },\n      parsing: {\n        x: void 0,\n        y: void 0\n      },\n      plotOptions: {\n        line: {\n          isSlopeChart: false,\n          colors: {\n            threshold: 0,\n            colorAboveThreshold: void 0,\n            colorBelowThreshold: void 0\n          }\n        },\n        area: {\n          fillTo: \"origin\"\n        },\n        bar: {\n          horizontal: false,\n          columnWidth: \"70%\",\n          // should be in percent 0 - 100\n          barHeight: \"70%\",\n          // should be in percent 0 - 100\n          distributed: false,\n          borderRadius: 0,\n          borderRadiusApplication: \"around\",\n          // [around, end]\n          borderRadiusWhenStacked: \"last\",\n          // [all, last]\n          rangeBarOverlap: true,\n          rangeBarGroupRows: false,\n          hideZeroBarsWhenGrouped: false,\n          isDumbbell: false,\n          dumbbellColors: void 0,\n          isFunnel: false,\n          isFunnel3d: true,\n          colors: {\n            ranges: [],\n            backgroundBarColors: [],\n            backgroundBarOpacity: 1,\n            backgroundBarRadius: 0\n          },\n          dataLabels: {\n            position: \"top\",\n            // top, center, bottom\n            maxItems: 100,\n            hideOverflowingLabels: true,\n            orientation: \"horizontal\",\n            total: {\n              enabled: false,\n              formatter: void 0,\n              offsetX: 0,\n              offsetY: 0,\n              style: {\n                color: \"#373d3f\",\n                fontSize: \"12px\",\n                fontFamily: void 0,\n                fontWeight: 600\n              }\n            }\n          }\n        },\n        bubble: {\n          zScaling: true,\n          minBubbleRadius: void 0,\n          maxBubbleRadius: void 0\n        },\n        scatter: {\n          // Spread overlapping points apart (\"jitter\"). Two uses, one engine:\n          //  - Strip plot: supply data as { x: 'Category', y: [v1, v2, ...] }.\n          //    Each category becomes a band and the values are scattered\n          //    horizontally within it. Marker styling comes from the standard\n          //    `markers` / `colors` config.\n          //  - Overplotting: ordinary { x, y } points get a small random offset\n          //    so dense clusters fan out. The underlying data (and tooltip\n          //    values) stay exact — only the drawn position moves.\n          // Offsets are in axis units (x: 1 = one category step) and are\n          // deterministic (stable across re-renders, SSR-safe).\n          jitter: {\n            enabled: false,\n            x: 0,\n            // max ± horizontal offset, in x-axis units\n            y: 0,\n            // max ± vertical offset, in y-axis units\n            distributed: false,\n            // single series: colour each band differently\n            maxPoints: 5e3\n            // per band; excess values are stride-thinned\n          }\n        },\n        candlestick: {\n          colors: {\n            upward: \"#00B746\",\n            downward: \"#EF403C\"\n          },\n          wick: {\n            useFillColor: true\n          }\n        },\n        boxPlot: {\n          colors: {\n            upper: \"#00E396\",\n            lower: \"#008FFB\"\n          },\n          // Optional individual observations (\"jitter\") overlaid on each box.\n          // Inert unless a data point supplies a `points: number[]` array; off\n          // by default so existing boxPlot charts are unchanged.\n          points: {\n            show: false,\n            shape: \"circle\",\n            // 'circle' | 'square'\n            size: 2.5,\n            // radius (px)\n            jitter: 0.5,\n            // 0..1 fraction of the box half-width to scatter within\n            maxPoints: 3e3,\n            // cap per box; excess is stride-thinned\n            opacity: 0.9,\n            // 'series-dark' (default) → a darker shade of the series colour,\n            // 'series' → the series colour, or any literal colour string.\n            fillColor: \"series-dark\",\n            strokeColor: \"#fff\",\n            strokeWidth: 1\n            // Optional `colorScale` (undeclared so a user object merges cleanly)\n            // colours each dot by its value: { colors, min, max, steps }\n          }\n        },\n        violin: {\n          // Multiply the density-derived half-width. 1 = density's own maxWeight\n          // maps to half the category slot.\n          bandwidthScale: 1,\n          // 'individual' → every violin uses the full slot width (scaled to its\n          // own peak). 'group' → all violins share one scale (the densest in the\n          // series), so widths stay proportional to density across categories.\n          normalize: \"individual\",\n          // Individual observations (\"jitter\") overlaid on the violin shape.\n          points: {\n            show: true,\n            shape: \"circle\",\n            // 'circle' | 'square'\n            size: 2.5,\n            // radius (px)\n            jitter: 0.5,\n            // 0..1 fraction of the half-width to scatter within\n            constrainToViolin: true,\n            // clamp jitter to the density width at each value\n            maxPoints: 3e3,\n            // cap per violin; excess is stride-thinned\n            opacity: 0.9,\n            // Default: a darker shade of each violin's own colour, with a white\n            // outline. fillColor accepts 'series-dark' (default), 'series' (the\n            // violin's colour as-is), or any literal colour string.\n            fillColor: \"series-dark\",\n            strokeColor: \"#fff\",\n            strokeWidth: 1\n            // Optional `colorScale` (left undeclared so a user object merges\n            // cleanly) colours each dot by its value along a ramp:\n            //   { colors: ['#0d0887', … '#f0f921'], min, max, steps }\n          }\n        },\n        heatmap: {\n          radius: 2,\n          enableShades: true,\n          shadeIntensity: 0.5,\n          reverseNegativeShade: false,\n          distributed: false,\n          useFillColorAsStroke: false,\n          colorScale: {\n            inverse: false,\n            ranges: [],\n            min: void 0,\n            max: void 0,\n            // Replaces the default categorical legend with a continuous\n            // gradient stripe + a hover indicator arrow. Honors\n            // `chart.legend.position` (top / right / bottom / left).\n            gradientLegend: {\n              enabled: false,\n              // Strip length along the legend's long axis. Accepts a number\n              // (pixels) or a percentage string. For top/bottom placement the\n              // percentage is resolved against the chart's SVG width; for\n              // left/right placement, against the SVG height.\n              width: \"70%\",\n              height: \"70%\",\n              thickness: 12,\n              // Alignment of the strip within the legend area:\n              //  - top/bottom: 'start' = left, 'center', 'end' = right\n              //  - left/right: 'start' = top,  'center', 'end' = bottom\n              align: \"center\",\n              // Number of gradient stops sampled from the shade function when\n              // no explicit `ranges` are provided.\n              stops: 16,\n              // Show min/max labels at the ends of the strip.\n              showLabels: true,\n              // Show a value tooltip next to the arrow when hovering a cell.\n              showHoverValue: true,\n              labelStyle: {\n                fontSize: \"11px\",\n                fontFamily: void 0,\n                colors: void 0\n              },\n              arrow: {\n                size: 8,\n                color: void 0\n                // falls back to chart.foreColor\n              },\n              formatter: void 0\n              // (val) => string, for min/max + hover value\n            }\n          }\n        },\n        funnel: {\n          // 'rectangle' preserves the existing centered-rectangle funnel\n          // geometry. 'trapezoid' produces continuous sloped sides between\n          // consecutive stages (each stage's bottom width matches the next\n          // stage's top width).\n          shape: \"rectangle\",\n          // For shape: 'trapezoid' only — what to do with the last stage's\n          // bottom edge: 'flat' (parallel sides) or 'taper' (taper to a point).\n          lastShape: \"flat\"\n        },\n        treemap: {\n          enableShades: true,\n          shadeIntensity: 0.5,\n          distributed: false,\n          reverseNegativeShade: false,\n          useFillColorAsStroke: false,\n          borderRadius: 4,\n          dataLabels: {\n            format: \"scale\"\n            // scale | truncate\n          },\n          colorScale: {\n            inverse: false,\n            ranges: [],\n            min: void 0,\n            max: void 0\n          },\n          seriesTitle: {\n            show: true,\n            offsetY: 1,\n            offsetX: 1,\n            borderColor: \"#000\",\n            borderWidth: 1,\n            borderRadius: 2,\n            style: {\n              background: \"rgba(0, 0, 0, 0.6)\",\n              color: \"#fff\",\n              fontSize: \"12px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              cssClass: \"\",\n              padding: {\n                left: 6,\n                right: 6,\n                top: 2,\n                bottom: 2\n              }\n            }\n          }\n        },\n        unit: {\n          // 'grouped' (each category is its own cluster, laid out in a row) |\n          // 'packed' (one blob; categories coloured + sorted, minority centred) |\n          // 'columns' (each category is a vertical bar built from stacked dots) |\n          // 'grid' (one lattice of cells filled in category order - a waffle /\n          // part-to-whole square \"pie\"; `chart.type:'waffle'` presets this).\n          layout: \"grouped\",\n          // Update transition, controlling which previous dot each new dot\n          // tweens from. 'group' (default): keyed per category, so dots stay in\n          // their group and category-level enters/exits fade. 'flow': keyed by\n          // global order, so the anonymous crowd migrates across a regroup (the\n          // circles-to-bars effect). 'identity': keyed by each datum's id/name,\n          // so a SPECIFIC unit migrates across any regroup/relayout keeping its\n          // colour and size (needs the object form with unique ids/names).\n          transition: \"group\",\n          // 'circle' | 'square' | 'image' (isotype pictogram).\n          shape: \"circle\",\n          // Icon used when shape:'image'. Each unit renders this icon at the\n          // given size. Set `tint:true` to recolour a monochrome icon to the\n          // category colour (or a per-unit fillColor) so the pictogram matches\n          // the legend; leave it off for multi-colour icons that should keep\n          // their own colours.\n          image: {\n            src: void 0,\n            width: 20,\n            height: 20,\n            tint: false\n          },\n          // dot radius in px, or 'auto' to size dots so the largest cluster\n          // fits its allotted box.\n          size: \"auto\",\n          // The 'columns' layout can size its dots independently of `size`\n          // (which the circle layouts / storyboard beats often pin to a\n          // constant so dots do not resize while migrating). 'inherit' uses\n          // `size`; 'auto' sizes the dots to fill the plot height; a number\n          // pins a columns-only size. Circle / square only (image icons keep\n          // their intrinsic size).\n          columns: {\n            size: \"inherit\"\n          },\n          // The 'grid' (waffle) layout: one lattice of cells filled in category\n          // order. `columns` = cells per row. `total` (optional) fixes the cell\n          // budget - e.g. 100 for a percentage waffle - and largest-remainder\n          // allocates the cells to categories; leave it undefined for one cell\n          // per unit (respects unitValue / maxUnits). `fillFrom` picks the first\n          // row: 'bottom' (default) or 'top'.\n          //\n          // `split:true` switches to SMALL MULTIPLES: one mini-waffle per\n          // category, arranged in a near-square trellis (or `tileColumns` per\n          // row). Each tile then has `total` cells (default 100) and fills a\n          // fraction equal to the category's value over `max` (default = the\n          // largest count, so the leader fills its tile; set `max:100` with\n          // percentage data for true \"of 100\" tiles). The unfilled cells show as\n          // a faint `trackColor` backdrop, and each tile gets its own label.\n          grid: {\n            columns: 10,\n            total: void 0,\n            fillFrom: \"bottom\",\n            // small-multiple (one waffle per category) mode + its knobs:\n            split: false,\n            // tiles per row; undefined = auto (near-square).\n            tileColumns: void 0,\n            // value -> filled-cell denominator; undefined = the largest count.\n            max: void 0,\n            // colour of the empty \"track\" cells; undefined = a neutral grey.\n            trackColor: void 0\n          },\n          // The 'scatter' layout places each unit on real value axes (needs the\n          // object-form data). Two modes via `y`:\n          //  - `y:'lanes'` (default): a BEESWARM. X is the per-unit value axis,\n          //    Y is a category lane. `spread:'swarm'` packs dots off the centre\n          //    line so equal values do not overlap; 'jitter' scatters randomly.\n          //  - `y:'value'`: a 2D value-value scatter. X = each datum's `x`, Y =\n          //    each datum's `y`, on two numeric axes; category = colour.\n          // `sizeRange:[min,max]` turns dots into BUBBLES scaled (by area) from\n          // each datum's `sizeField` (default 'z') - a bubble scatter / bubble\n          // beeswarm. `tickAmount`/`xMin`/`xMax`/`xTitle`/`xFormatter` control the\n          // X axis; the `y*` twins the Y axis (2D only); `laneLabelWidth` the\n          // lane-label gutter (lanes mode); `gridlines` the grid.\n          scatter: {\n            y: \"lanes\",\n            spread: \"swarm\",\n            // Beeswarm orientation (1D lanes mode only): 'horizontal' lays the\n            // value on the X axis with category lanes stacked on Y (default);\n            // 'vertical' lays the value on the Y axis with category lanes as\n            // columns across X. Ignored for the 2D value-value scatter (y:'value').\n            orientation: \"horizontal\",\n            tickAmount: 5,\n            xMin: void 0,\n            xMax: void 0,\n            xTitle: void 0,\n            // (value) => string\n            xFormatter: void 0,\n            yTickAmount: 5,\n            yMin: void 0,\n            yMax: void 0,\n            yTitle: void 0,\n            // (value) => string\n            yFormatter: void 0,\n            // bubble sizing: datum key for the size value + [minR, maxR] in px.\n            sizeField: \"z\",\n            sizeRange: void 0,\n            laneLabelWidth: void 0,\n            gridlines: true\n          },\n          // Opt-in bubble sizing: scale each dot's radius by its per-unit value\n          // (needs the object-form data). Circle shape only; the lattice is\n          // spaced for the largest bubble so dots never overlap.\n          sizeByValue: {\n            enabled: false,\n            // radius (px) for the largest value, or 'auto' to fit the largest\n            // bubble to the plot like uniform auto-sizing.\n            maxRadius: \"auto\",\n            // radius (px) for the smallest value; defaults to ~35% of maxRadius.\n            minRadius: void 0,\n            // 'area' (bubble AREA proportional to value) | 'linear'.\n            scale: \"area\"\n          },\n          // packing gap factor between spiral shells (1 = dots touch).\n          spacing: 1.05,\n          // corner radius for shape:'square'.\n          borderRadius: 0,\n          // The gather tween that moves marks between layouts on an update, and\n          // where entering marks come from. `easing`: 'outCubic' (default:\n          // decelerate to a stop) | 'inOutCubic' (accelerate gently out of rest,\n          // weighted travel) | 'outBack' (overshoot each mark past its slot and\n          // spring back - a per-mark settle), with `overshoot` tuning the spring\n          // strength. `enter`: where a fresh / appearing mark animates FROM -\n          // 'burst' (default: fly out from the cluster centre) | 'fade'\n          // (materialise in place) | 'rise' (fade in while drifting gently up\n          // into the slot). Colour, radius and opacity always stay on the\n          // out-cubic (a back ease overshoots past 1, which would push RGB\n          // channels / radii out of range).\n          gather: {\n            easing: \"outCubic\",\n            overshoot: 1.70158,\n            enter: \"burst\"\n          },\n          // The 'arc' layout arranges marks as a PARLIAMENT / hemicycle: seats in\n          // concentric arced rows across an annulus, filled in category order so\n          // each category is a contiguous wedge (the classic seating chart). Angles\n          // use the radialBar convention (0 = top, clockwise); the default sweep is\n          // a top semicircle (a full circle = startAngle 0, endAngle 360).\n          // `innerRadiusRatio` is the donut hole (inner radius / outer); `rows`\n          // fixes the number of seat rows, or 'auto' to size the dots as large as\n          // fit. Like 'packed' the legend carries the category names (no per-wedge\n          // labels).\n          arc: {\n            startAngle: -90,\n            endAngle: 90,\n            innerRadiusRatio: 0.4,\n            rows: \"auto\"\n          },\n          // 1 dot represents this many units of value (waffle scaling).\n          unitValue: 1,\n          // safety cap on total dots; counts scale down proportionally above it.\n          maxUnits: 5e3,\n          // packed layout: order categories smallest-first so the minority\n          // group nests in the centre of the blob.\n          sortByGroup: true,\n          clusterLabels: {\n            show: true,\n            // Label placement relative to the cluster/bar: 'top' (default) or\n            // 'bottom'. A 'bottom' label is always straight; the curved arc\n            // (below) rides the top crown only.\n            position: \"top\",\n            curved: true,\n            fontSize: \"13px\",\n            fontFamily: void 0,\n            fontWeight: 600,\n            // defaults to the cluster's own colour when undefined.\n            color: void 0,\n            offsetY: 0,\n            // (name, { seriesIndex, value, percent, w }) => string\n            formatter: void 0\n          },\n          tooltip: {\n            // Per-unit tooltip body. Each dot carries its category (seriesIndex)\n            // and its index within that category (dataPointIndex), so the\n            // formatter can look up per-unit data and return a string/HTML.\n            // ({ seriesName, seriesIndex, dataPointIndex, count, unitValue,\n            //    color, w }) => string\n            // Default: \"#<dataPointIndex+1> of <count>\".\n            formatter: void 0\n          }\n        },\n        radialBar: {\n          inverseOrder: false,\n          startAngle: 0,\n          endAngle: 360,\n          offsetX: 0,\n          offsetY: 0,\n          // Gauge sub-shape. 'arc' (default) renders the existing filled\n          // value-arc gauge; 'needle' replaces the value-arc with a rotating\n          // pointer/needle. Bands and ticks are independent and work for both\n          // shapes.\n          shape: \"arc\",\n          // Value-to-angle mapping. Defaults to the existing 0..100 range\n          // used by radialBar. Override for gauges that need a custom domain\n          // (e.g. min: 0, max: 240 for a speedometer).\n          min: 0,\n          max: 100,\n          // Threshold bands rendered as colored arc segments along the gauge\n          // arc (e.g. [{from:0,to:30,color:'#FF4560'}, ...]). Bands draw\n          // behind the value-arc and tick marks. Set to [] (default) to\n          // disable.\n          bands: [],\n          bandsStyle: {\n            // % of arc radius. Slightly less than the value-arc stroke so\n            // the value-arc reads on top by default.\n            strokeWidth: \"40%\",\n            // px gap between consecutive bands.\n            gap: 0,\n            // Hide the track when bands cover the full range; the bands\n            // themselves act as the visual backdrop.\n            hideTrackWhenPresent: true\n          },\n          // Tick marks rendered along (outside) the gauge arc.\n          ticks: {\n            show: false,\n            major: {\n              count: 11,\n              length: 10,\n              width: 2,\n              color: \"#666\",\n              // 'inside' draws ticks from `radius - length` to `radius`;\n              // 'outside' draws from `radius` to `radius + length`.\n              placement: \"outside\"\n            },\n            minor: {\n              count: 4,\n              // minor ticks BETWEEN each pair of major ticks\n              length: 5,\n              width: 1,\n              color: \"#999\",\n              placement: \"outside\"\n            },\n            labels: {\n              show: false,\n              offset: 6,\n              fontSize: \"11px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              color: \"#666\",\n              /** @param {number} v */\n              formatter(v) {\n                return String(v);\n              }\n            }\n          },\n          // Needle/dial configuration. Only applies when `shape: 'needle'`.\n          needle: {\n            color: \"#333\",\n            // Needle length as a % of the gauge radius (string like '85%')\n            // or as an absolute px number.\n            length: \"85%\",\n            // px width of the needle line at the base.\n            baseWidth: 4,\n            // px width of the needle tip (tapered if smaller than baseWidth).\n            tipWidth: 1,\n            // px offset from the geometric arc center on Y. Positive values\n            // push the needle base down (toward the chord midpoint of a\n            // ∩-shape gauge); negative pushes up. The needle rotates around\n            // this shifted point.\n            offsetY: 0,\n            // When true, also render the filled value-arc alongside the\n            // needle. Default false preserves the previous needle-only\n            // behavior. Useful for gauges that want a progress ring plus a\n            // pointer indicator.\n            showValueArc: false,\n            animation: {\n              enabled: true,\n              duration: 800,\n              easing: \"ease-out\"\n            }\n          },\n          hollow: {\n            margin: 5,\n            size: \"50%\",\n            background: \"transparent\",\n            image: void 0,\n            imageWidth: 150,\n            imageHeight: 150,\n            imageOffsetX: 0,\n            imageOffsetY: 0,\n            imageClipped: true,\n            position: \"front\",\n            // Optional stroke around the hollow ring. Combined with\n            // `strokeDasharray` this produces a dashed indicator circle\n            // around the value text — useful for gauge designs where the\n            // value sits inside its own boundary.\n            stroke: void 0,\n            strokeWidth: 1,\n            strokeDasharray: void 0,\n            dropShadow: {\n              enabled: false,\n              top: 0,\n              left: 0,\n              blur: 3,\n              color: \"#000\",\n              opacity: 0.5\n            }\n          },\n          track: {\n            show: true,\n            startAngle: void 0,\n            endAngle: void 0,\n            background: \"#f2f2f2\",\n            strokeWidth: \"97%\",\n            opacity: 1,\n            margin: 5,\n            // margin is in pixels\n            dropShadow: {\n              enabled: false,\n              top: 0,\n              left: 0,\n              blur: 3,\n              color: \"#000\",\n              opacity: 0.5\n            }\n          },\n          dataLabels: {\n            show: true,\n            name: {\n              show: true,\n              fontSize: \"16px\",\n              fontFamily: void 0,\n              fontWeight: 600,\n              color: void 0,\n              offsetY: 0,\n              /**\n               * @param {any} val\n               */\n              formatter(val) {\n                return val;\n              }\n            },\n            value: {\n              show: true,\n              fontSize: \"14px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              color: void 0,\n              offsetY: 16,\n              /**\n               * @param {any} val\n               */\n              formatter(val) {\n                return val + \"%\";\n              }\n            },\n            total: {\n              show: false,\n              label: \"Total\",\n              fontSize: \"16px\",\n              fontWeight: 600,\n              fontFamily: void 0,\n              color: void 0,\n              /**\n               * @param {import('../../types/internal').ChartStateW} w\n               */\n              formatter(w) {\n                return (\n                  /**\n                   * @param {number} a\n                   * @param {number} b\n                   */\n                  w.globals.seriesTotals.reduce((a, b) => a + b, 0) / w.seriesData.series.length + \"%\"\n                );\n              }\n            }\n          },\n          barLabels: {\n            enabled: false,\n            offsetX: 0,\n            offsetY: 0,\n            useSeriesColors: true,\n            fontFamily: void 0,\n            fontWeight: 600,\n            fontSize: \"16px\",\n            /**\n             * @param {any} val\n             */\n            formatter(val) {\n              return val;\n            },\n            onClick: void 0\n          }\n        },\n        pie: {\n          customScale: 1,\n          offsetX: 0,\n          offsetY: 0,\n          startAngle: 0,\n          endAngle: 360,\n          expandOnClick: true,\n          // Rounds the corners of each slice (in px). Applies to pie, donut and\n          // polarArea (all rendered by the Pie module). 0 = sharp corners\n          // (default, unchanged behavior). The value is clamped per slice so\n          // opposing corner fillets never cross on thin/narrow slices.\n          borderRadius: 0,\n          // Gap between adjacent slices (in px). Applies to pie, donut and\n          // polarArea. 0 = slices touch (default). Each slice is inset\n          // symmetrically, so its mid-angle (data label + hit region) is kept.\n          spacing: 0,\n          dataLabels: {\n            // These are the percentage values which are displayed on slice\n            offset: 0,\n            // offset by which labels will move outside\n            minAngleToShowLabel: 10,\n            // External (outer) labels: render the category/series name outside\n            // the slice, joined to it by a leader (connector) line, so users\n            // don't have to map legend colors back to slices. The percentage\n            // keeps rendering inside the slice (governed by dataLabels.enabled).\n            // Pie + donut only; ignored for polarArea (radial length already\n            // encodes the value there).\n            external: {\n              show: false,\n              // master switch for the external (outer) labels\n              offsetX: 0,\n              offsetY: 0,\n              fontSize: void 0,\n              // falls back to dataLabels.style.fontSize\n              fontFamily: void 0,\n              // falls back to dataLabels.style.fontFamily\n              fontWeight: void 0,\n              // falls back to dataLabels.style.fontWeight\n              color: void 0,\n              // defaults to chart.foreColor (readable text)\n              /**\n               * Return a string (single line) or an array of strings (stacked\n               * lines, e.g. [name, percent + '%']).\n               * @param {string} name\n               * @param {{ seriesIndex: number, percent: number, value: number, w: any }} opts\n               * @returns {string | string[]}\n               */\n              formatter: void 0,\n              connector: {\n                show: true,\n                width: 1,\n                color: void 0,\n                // defaults to the slice color\n                length: 16,\n                // horizontal run after the radial elbow (px)\n                gap: 6\n                // radial gap from slice edge to the elbow point (px)\n              }\n            }\n          },\n          donut: {\n            size: \"65%\",\n            background: \"transparent\",\n            labels: {\n              // These are the inner labels appearing inside donut\n              show: false,\n              name: {\n                show: true,\n                fontSize: \"16px\",\n                fontFamily: void 0,\n                fontWeight: 600,\n                color: void 0,\n                offsetY: -10,\n                /**\n                 * @param {any} val\n                 */\n                formatter(val) {\n                  return val;\n                }\n              },\n              value: {\n                show: true,\n                fontSize: \"20px\",\n                fontFamily: void 0,\n                fontWeight: 400,\n                color: void 0,\n                offsetY: 10,\n                /**\n                 * @param {any} val\n                 */\n                formatter(val) {\n                  return val;\n                }\n              },\n              total: {\n                show: false,\n                showAlways: false,\n                label: \"Total\",\n                fontSize: \"16px\",\n                fontWeight: 400,\n                fontFamily: void 0,\n                color: void 0,\n                /**\n                 * @param {import('../../types/internal').ChartStateW} w\n                 */\n                formatter(w) {\n                  return w.globals.seriesTotals.reduce((a, b) => a + b, 0);\n                }\n              }\n            }\n          }\n        },\n        polarArea: {\n          rings: {\n            strokeWidth: 1,\n            strokeColor: \"#e8e8e8\"\n          },\n          spokes: {\n            strokeWidth: 1,\n            connectorColors: \"#e8e8e8\"\n          }\n        },\n        sunburst: {\n          // Sunburst / nested pie-donut (hierarchical radial). Rings go from the\n          // centre hole outward, one per hierarchy level; each child arc is\n          // nested inside its parent's angular wedge.\n          offsetX: 0,\n          offsetY: 0,\n          startAngle: 0,\n          endAngle: 360,\n          // Centre hole radius, as a % of the max radius (like donut size).\n          innerSize: \"15%\",\n          // Corner rounding + inter-arc gap (px), same semantics as the pie\n          // family (see plotOptions.pie.borderRadius / .spacing).\n          borderRadius: 0,\n          spacing: 1,\n          // How a branch that bottoms out before the deepest level is drawn:\n          // 'extend' stretches the leaf arc out to the rim (default, matches\n          // d3); 'stop' leaves the outer rings empty behind it.\n          leaf: \"extend\",\n          // Angular partition of a parent's wedge among its children:\n          // 'normalize' splits by each child's share of its siblings (safe for\n          // any data); 'strict' expects children to sum to the parent's value.\n          partition: \"normalize\",\n          // Each depth level is tinted this much lighter than its parent colour\n          // (0 = keep parent colour, 1 = white). A per-node `color` overrides.\n          tint: 0.14,\n          // Click a wedge to zoom into that branch (its subtree fills the\n          // chart; a breadcrumb walks back). Click the focused inner ring to\n          // zoom out. Set false to disable.\n          zoomOnClick: true,\n          dataLabels: {\n            show: true,\n            // Hide the label on any arc narrower than this (degrees), so tiny\n            // wedges do not overflow with text.\n            minAngleToShow: 8,\n            style: {\n              fontSize: \"12px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              colors: void 0\n            }\n          }\n        },\n        radar: {\n          size: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          polygons: {\n            // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2\n            strokeWidth: 1,\n            strokeColors: \"#e8e8e8\",\n            connectorColors: \"#e8e8e8\",\n            fill: {\n              colors: void 0\n            }\n          }\n        }\n      },\n      colors: void 0,\n      dataLabels: {\n        enabled: true,\n        enabledOnSeries: void 0,\n        /**\n         * @param {any} val\n         */\n        formatter(val) {\n          return val !== null ? val : \"\";\n        },\n        textAnchor: \"middle\",\n        distributed: false,\n        offsetX: 0,\n        offsetY: 0,\n        style: {\n          fontSize: \"12px\",\n          fontFamily: void 0,\n          fontWeight: 600,\n          colors: void 0\n        },\n        background: {\n          enabled: true,\n          foreColor: \"#fff\",\n          backgroundColor: void 0,\n          borderRadius: 2,\n          padding: 4,\n          opacity: 0.9,\n          borderWidth: 1,\n          borderColor: \"#fff\",\n          dropShadow: {\n            enabled: false,\n            top: 1,\n            left: 1,\n            blur: 1,\n            color: \"#000\",\n            opacity: 0.8\n          }\n        },\n        dropShadow: {\n          enabled: false,\n          top: 1,\n          left: 1,\n          blur: 1,\n          color: \"#000\",\n          opacity: 0.8\n        },\n        // Ride data labels to their new position on a data-change update\n        // (e.g. a bar chart race), instead of snapping. Off by default so\n        // existing charts are unchanged. Speed/easing follow\n        // chart.animations.dynamicAnimation. Bar/column only.\n        animate: {\n          enabled: false\n        },\n        // Count the numeric value up/down from its previous value on update,\n        // like countUp.js. Off by default. The dataLabels.formatter runs each\n        // frame, so number formatting (decimals, separators, prefixes) is\n        // preserved. Bar/column only.\n        countUp: {\n          enabled: false\n        }\n      },\n      fill: {\n        type: \"solid\",\n        colors: void 0,\n        // array of colors\n        opacity: 0.85,\n        gradient: {\n          shade: \"dark\",\n          type: \"horizontal\",\n          shadeIntensity: 0.5,\n          gradientToColors: void 0,\n          inverseColors: true,\n          opacityFrom: 1,\n          opacityTo: 1,\n          stops: [0, 50, 100],\n          colorStops: []\n        },\n        image: {\n          src: [],\n          width: void 0,\n          // optional\n          height: void 0\n          // optional\n        },\n        pattern: {\n          style: \"squares\",\n          // String | Array of Strings\n          width: 6,\n          height: 6,\n          strokeWidth: 2\n        }\n      },\n      forecastDataPoints: {\n        count: 0,\n        fillOpacity: 0.5,\n        strokeWidth: void 0,\n        dashArray: 4\n      },\n      grid: {\n        show: true,\n        borderColor: \"#e0e0e0\",\n        strokeDashArray: 0,\n        position: \"back\",\n        xaxis: {\n          lines: {\n            show: false\n          }\n        },\n        yaxis: {\n          lines: {\n            show: true\n          }\n        },\n        row: {\n          colors: void 0,\n          // takes as array which will be repeated on rows\n          opacity: 0.5\n        },\n        column: {\n          colors: void 0,\n          // takes an array which will be repeated on columns\n          opacity: 0.5\n        },\n        padding: {\n          top: 0,\n          right: 10,\n          bottom: 0,\n          left: 12\n        }\n      },\n      labels: [],\n      drilldown: {\n        // Opt-in. When false, the Drilldown feature module stays inert even if\n        // it was imported. Requires `import 'apexcharts/features/drilldown'`.\n        enabled: false,\n        // Child levels referenced by a data point's `drilldown: '<id>'` field.\n        // Each: { id, name?, data, chart?, xaxis?, yaxis?, colors?, plotOptions? }\n        series: [],\n        breadcrumb: {\n          show: true,\n          position: \"top-left\",\n          // 'top-left' | 'top-right'\n          separator: \" / \",\n          rootLabel: \"All\",\n          offsetX: 0,\n          offsetY: 0\n          // formatter: (label, { index, depth }) => label,\n        },\n        // Animation is delegated to the chart's update pipeline; `enabled`\n        // gates whether the drill transition animates at all.\n        animation: {\n          enabled: true,\n          // Anchor the drill transition at the clicked point: the child unfolds\n          // outward from it (and settles back on drill-up) instead of the chart\n          // simply re-rendering. A gentle scale layered on the SVG; opt-in.\n          zoomFromPoint: false,\n          // Base duration (ms) of the transition, used only when zoomFromPoint\n          // is true. The fade-out phase runs a little shorter than this.\n          speed: 260\n        }\n        // Optional async resolver, called when a drillable point has no inline\n        // match in `series`: ({ point, seriesIndex, dataPointIndex }) => childSeries\n        // onDrillDown: undefined,\n      },\n      legend: {\n        show: true,\n        showForSingleSeries: false,\n        showForNullSeries: true,\n        showForZeroSeries: true,\n        floating: false,\n        position: \"bottom\",\n        // whether to position legends in 1 of 4\n        // direction - top, bottom, left, right\n        horizontalAlign: \"center\",\n        // when position top/bottom, you can specify whether to align legends left, right or center\n        inverseOrder: false,\n        fontSize: \"12px\",\n        fontFamily: void 0,\n        fontWeight: 400,\n        width: void 0,\n        height: void 0,\n        formatter: void 0,\n        tooltipHoverFormatter: void 0,\n        offsetX: -20,\n        offsetY: 4,\n        customLegendItems: [],\n        clusterGroupedSeries: true,\n        clusterGroupedSeriesOrientation: \"vertical\",\n        labels: {\n          colors: void 0,\n          useSeriesColors: false\n        },\n        markers: {\n          size: 7,\n          fillColors: void 0,\n          strokeWidth: 1,\n          shape: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          customHTML: void 0,\n          onClick: void 0\n        },\n        itemMargin: {\n          horizontal: 5,\n          vertical: 4\n        },\n        onItemClick: {\n          toggleDataSeries: true\n        },\n        onItemHover: {\n          highlightDataSeries: true\n        }\n      },\n      markers: {\n        discrete: [],\n        size: 0,\n        colors: void 0,\n        strokeColors: \"#fff\",\n        strokeWidth: 2,\n        strokeOpacity: 0.9,\n        strokeDashArray: 0,\n        fillOpacity: 1,\n        shape: \"circle\",\n        offsetX: 0,\n        offsetY: 0,\n        showNullDataPoints: true,\n        onClick: void 0,\n        onDblClick: void 0,\n        hover: {\n          size: void 0,\n          sizeOffset: 3\n        }\n      },\n      noData: {\n        text: void 0,\n        align: \"center\",\n        offsetX: 0,\n        offsetY: 0,\n        style: {\n          color: void 0,\n          fontSize: \"14px\",\n          fontFamily: void 0\n        }\n      },\n      responsive: [],\n      // breakpoints should follow ascending order 400, then 700, then 1000\n      series: void 0,\n      states: {\n        hover: {\n          filter: {\n            type: \"lighten\",\n            value: 0.15\n          }\n        },\n        active: {\n          allowMultipleDataPointsSelection: false,\n          filter: {\n            type: \"darken\",\n            value: 0.35\n          }\n        }\n      },\n      title: {\n        text: void 0,\n        align: \"left\",\n        margin: 5,\n        offsetX: 0,\n        offsetY: 0,\n        floating: false,\n        style: {\n          fontSize: \"14px\",\n          fontWeight: 900,\n          fontFamily: void 0,\n          color: void 0\n        }\n      },\n      subtitle: {\n        text: void 0,\n        align: \"left\",\n        margin: 5,\n        offsetX: 0,\n        offsetY: 30,\n        floating: false,\n        style: {\n          fontSize: \"12px\",\n          fontWeight: 400,\n          fontFamily: void 0,\n          color: void 0\n        }\n      },\n      stroke: {\n        show: true,\n        curve: \"smooth\",\n        // \"smooth\" / \"straight\" / \"monotoneCubic\" / \"stepline\" / \"linestep\"\n        lineCap: \"butt\",\n        // round, butt , square\n        width: 2,\n        colors: void 0,\n        // array of colors\n        dashArray: 0,\n        // single value or array of values\n        fill: {\n          type: \"solid\",\n          colors: void 0,\n          // array of colors\n          opacity: 0.85,\n          gradient: {\n            shade: \"dark\",\n            type: \"horizontal\",\n            shadeIntensity: 0.5,\n            gradientToColors: void 0,\n            inverseColors: true,\n            opacityFrom: 1,\n            opacityTo: 1,\n            stops: [0, 50, 100],\n            colorStops: []\n          }\n        }\n      },\n      tooltip: {\n        enabled: true,\n        enabledOnSeries: void 0,\n        shared: true,\n        hideEmptySeries: false,\n        followCursor: false,\n        // when disabled, the tooltip will show on top of the series instead of mouse position\n        intersect: false,\n        // when enabled, tooltip will only show when user directly hovers over point\n        inverseOrder: false,\n        arrow: true,\n        custom: void 0,\n        fillSeriesColor: false,\n        theme: \"light\",\n        cssClass: \"\",\n        style: {\n          fontSize: \"12px\",\n          fontFamily: void 0,\n          background: void 0\n        },\n        onDatasetHover: {\n          highlightDataSeries: false\n        },\n        x: {\n          // x value\n          show: true,\n          format: \"dd MMM\",\n          // dd/MM, dd MMM yy, dd MMM yyyy\n          formatter: void 0\n          // a custom user supplied formatter function\n        },\n        y: {\n          formatter: void 0,\n          title: {\n            /**\n             * @param {string} seriesName\n             */\n            formatter(seriesName) {\n              return seriesName ? seriesName + \": \" : \"\";\n            }\n          }\n        },\n        z: {\n          formatter: void 0,\n          title: \"Size: \"\n        },\n        marker: {\n          show: true,\n          fillColors: void 0\n        },\n        items: {\n          display: \"flex\"\n        },\n        fixed: {\n          enabled: false,\n          position: \"topRight\",\n          // topRight, topLeft, bottomRight, bottomLeft\n          offsetX: 0,\n          offsetY: 0\n        }\n      },\n      xaxis: {\n        type: \"category\",\n        categories: [],\n        convertedCatToNumeric: false,\n        // internal property which should not be altered outside\n        offsetX: 0,\n        offsetY: 0,\n        overwriteCategories: void 0,\n        labels: {\n          show: true,\n          rotate: -45,\n          rotateAlways: false,\n          hideOverlappingLabels: true,\n          trim: false,\n          minHeight: void 0,\n          maxHeight: 120,\n          showDuplicates: true,\n          style: {\n            colors: [],\n            fontSize: \"12px\",\n            fontWeight: 400,\n            fontFamily: void 0,\n            cssClass: \"\"\n          },\n          offsetX: 0,\n          offsetY: 0,\n          format: void 0,\n          formatter: void 0,\n          // custom formatter function which will override format\n          datetimeUTC: true,\n          datetimeFormatter: {\n            // Base format per interval unit. TimeScale.formatDates folds in\n            // coarser context automatically when the data range spans it\n            // (e.g. month-scale across years → 'MMM yyyy', hour-scale across\n            // days → 'dd MMM HH:mm'). Customizing a base format that already\n            // includes the higher-unit token disables the auto-expansion for\n            // that level.\n            year: \"yyyy\",\n            month: \"MMM\",\n            day: \"dd MMM\",\n            hour: \"HH:mm\",\n            minute: \"HH:mm\",\n            second: \"HH:mm:ss\"\n          }\n        },\n        group: {\n          groups: [],\n          style: {\n            colors: [],\n            fontSize: \"12px\",\n            fontWeight: 400,\n            fontFamily: void 0,\n            cssClass: \"\"\n          }\n        },\n        axisBorder: {\n          show: true,\n          color: \"#e0e0e0\",\n          width: \"100%\",\n          height: 1,\n          offsetX: 0,\n          offsetY: 0\n        },\n        axisTicks: {\n          show: true,\n          color: \"#e0e0e0\",\n          height: 6,\n          offsetX: 0,\n          offsetY: 0\n        },\n        stepSize: void 0,\n        tickAmount: void 0,\n        tickPlacement: \"on\",\n        min: void 0,\n        max: void 0,\n        range: void 0,\n        floating: false,\n        decimalsInFloat: void 0,\n        position: \"bottom\",\n        title: {\n          text: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          style: {\n            color: void 0,\n            fontSize: \"12px\",\n            fontWeight: 900,\n            fontFamily: void 0,\n            cssClass: \"\"\n          }\n        },\n        crosshairs: {\n          show: true,\n          width: 1,\n          // tickWidth/barWidth or an integer\n          position: \"back\",\n          opacity: 0.9,\n          stroke: {\n            color: \"#b6b6b6\",\n            width: 1,\n            dashArray: 3\n          },\n          fill: {\n            type: \"solid\",\n            // solid, gradient\n            color: \"#B1B9C4\",\n            gradient: {\n              colorFrom: \"#D8E3F0\",\n              colorTo: \"#BED1E6\",\n              stops: [0, 100],\n              opacityFrom: 0.4,\n              opacityTo: 0.5\n            }\n          },\n          dropShadow: {\n            enabled: false,\n            left: 0,\n            top: 0,\n            blur: 1,\n            opacity: 0.8\n          }\n        },\n        tooltip: {\n          enabled: false,\n          offsetY: 0,\n          formatter: void 0,\n          style: {\n            fontSize: \"12px\",\n            fontFamily: void 0\n          }\n        }\n      },\n      yaxis: this.yAxis,\n      theme: {\n        mode: \"\",\n        palette: \"palette1\",\n        // If defined, it will overwrite globals.colors variable\n        // Facet (#13): read `--apx-*` CSS design tokens from the cascade\n        // (accent/fore/grid/surface + series-1..N). true (default) reads any\n        // present (absence is a no-op); false disables. Tokens top the\n        // resolution chain below explicit config. Tokens are re-read on every\n        // render; call chart.refreshTokens() to pick up a runtime CSS change\n        // that does not itself trigger a render.\n        tokens: true,\n        // Facet (#13): 'os' follows prefers-color-scheme + prefers-contrast\n        // reactively (SSR-safe, cleaned up on destroy). false disables.\n        follow: false,\n        // 'os' | false\n        // Facet (#13): a theme registered via ApexCharts.registerTheme(name, def)\n        name: \"\",\n        // '' | registered theme name\n        monochrome: {\n          // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected)\n          enabled: false,\n          color: \"#008FFB\",\n          shadeTo: \"light\",\n          shadeIntensity: 0.65\n        },\n        accessibility: {\n          colorBlindMode: \"\"\n          // '' | 'deuteranopia' | 'protanopia' | 'tritanopia' | 'highContrast'\n        }\n      }\n    };\n  }\n}\nclass Config {\n  /**\n   * @param {Record<string, any>} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  /** @param {{responsiveOverride: any}} opts */\n  init({ responsiveOverride }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n    let opts = this.opts;\n    const options2 = new Options();\n    const defaults = new Defaults(opts);\n    opts = this.normalizeAliasedChartType(opts);\n    this.chartType = opts.chart.type;\n    opts = this.extendYAxis(opts);\n    opts = this.extendAnnotations(opts);\n    let config = options2.init();\n    let newDefaults = {};\n    if (opts && typeof opts === \"object\") {\n      let chartDefaults = {};\n      const chartTypes = [\n        \"line\",\n        \"area\",\n        \"bar\",\n        \"candlestick\",\n        \"boxPlot\",\n        \"violin\",\n        \"rangeBar\",\n        \"rangeArea\",\n        \"bubble\",\n        \"scatter\",\n        \"heatmap\",\n        \"treemap\",\n        \"unit\",\n        \"sunburst\",\n        \"pie\",\n        \"polarArea\",\n        \"donut\",\n        \"radar\",\n        \"radialBar\"\n      ];\n      const requestedType = opts.chart.requestedType;\n      if (requestedType === \"funnel\" || requestedType === \"pyramid\") {\n        chartDefaults = /** @type {any} */\n        defaults[requestedType]();\n      } else if (requestedType === \"gauge\") {\n        chartDefaults = defaults.gauge();\n      } else if (chartTypes.indexOf(opts.chart.type) !== -1) {\n        chartDefaults = /** @type {any} */\n        defaults[opts.chart.type]();\n      } else {\n        chartDefaults = defaults.line();\n      }\n      if ((_b = (_a = opts.plotOptions) == null ? void 0 : _a.bar) == null ? void 0 : _b.isFunnel) {\n        chartDefaults = defaults.funnel();\n      }\n      if (opts.chart.stacked && opts.chart.type === \"bar\") {\n        chartDefaults = defaults.stackedBars();\n      }\n      if ((_c = opts.chart.brush) == null ? void 0 : _c.enabled) {\n        chartDefaults = defaults.brush(chartDefaults);\n      }\n      if ((_e = (_d = opts.plotOptions) == null ? void 0 : _d.line) == null ? void 0 : _e.isSlopeChart) {\n        chartDefaults = defaults.slope();\n      }\n      if (opts.chart.stacked && opts.chart.stackType === \"100%\") {\n        opts = defaults.stacked100(opts);\n      }\n      if ((_g = (_f = opts.plotOptions) == null ? void 0 : _f.bar) == null ? void 0 : _g.isDumbbell) {\n        opts = defaults.dumbbell(opts);\n      }\n      this.checkForDarkTheme(Environment.getApex());\n      this.checkForDarkTheme(opts);\n      opts.xaxis = opts.xaxis || Environment.getApex().xaxis || {};\n      if (!responsiveOverride) {\n        opts.xaxis.convertedCatToNumeric = false;\n      }\n      opts = this.checkForCatToNumericXAxis(this.chartType, chartDefaults, opts);\n      if (((_h = opts.chart.sparkline) == null ? void 0 : _h.enabled) || ((_j = (_i = Environment.getApex().chart) == null ? void 0 : _i.sparkline) == null ? void 0 : _j.enabled)) {\n        chartDefaults = defaults.sparkline(chartDefaults);\n      }\n      newDefaults = Utils$1.extend(config, chartDefaults);\n    }\n    const mergedWithDefaultConfig = Utils$1.extend(\n      newDefaults,\n      Environment.getApex()\n    );\n    config = Utils$1.extend(mergedWithDefaultConfig, opts);\n    config = this.handleUserInputErrors(config);\n    return config;\n  }\n  /**\n   * Promoted chart-type aliases — `funnel`, `pyramid`, `gauge` — render via\n   * the existing `bar` (with `isFunnel`) and `radialBar` pathways. To keep\n   * the ~20 internal `chart.type === 'bar' | 'radialBar'` checks working\n   * unchanged, we normalize `chart.type` to the base renderer name here and\n   * preserve the user-facing name on `chart.requestedType` for the public\n   * API and for default selection.\n   *\n   * @param {Record<string, any>} opts\n   * @returns {Record<string, any>}\n   */\n  normalizeAliasedChartType(opts) {\n    if (!opts || !opts.chart) return opts;\n    const requested = opts.chart.type;\n    if (requested !== \"funnel\" && requested !== \"pyramid\" && requested !== \"gauge\" && requested !== \"waffle\") {\n      return opts;\n    }\n    opts.chart.requestedType = requested;\n    if (requested === \"waffle\") {\n      opts.plotOptions = opts.plotOptions || {};\n      opts.plotOptions.unit = opts.plotOptions.unit || {};\n      if (opts.plotOptions.unit.layout == null) {\n        opts.plotOptions.unit.layout = \"grid\";\n      }\n      if (opts.plotOptions.unit.shape == null) {\n        opts.plotOptions.unit.shape = \"square\";\n      }\n      opts.chart.type = \"unit\";\n    } else if (requested === \"funnel\" || requested === \"pyramid\") {\n      opts.plotOptions = opts.plotOptions || {};\n      opts.plotOptions.bar = opts.plotOptions.bar || {};\n      opts.plotOptions.bar.isFunnel = true;\n      opts.plotOptions.bar.horizontal = true;\n      opts.chart.type = \"bar\";\n      if (requested === \"pyramid\") {\n        opts.plotOptions.bar.isPyramid = true;\n      } else {\n        opts.plotOptions.bar.isPyramid = false;\n      }\n    } else if (requested === \"gauge\") {\n      opts.chart.type = \"radialBar\";\n    }\n    return opts;\n  }\n  /**\n   * @param {string} chartType\n   * @param {Record<string, any>} chartDefaults\n   * @param {Record<string, any>} opts\n   */\n  checkForCatToNumericXAxis(chartType, chartDefaults, opts) {\n    var _a, _b, _c, _d, _e;\n    const defaults = new Defaults(opts);\n    const isBarHorizontal = (chartType === \"bar\" || chartType === \"boxPlot\" || chartType === \"violin\") && ((_b = (_a = opts.plotOptions) == null ? void 0 : _a.bar) == null ? void 0 : _b.horizontal);\n    const unsupportedZoom = chartType === \"pie\" || chartType === \"polarArea\" || chartType === \"donut\" || chartType === \"radar\" || chartType === \"radialBar\" || chartType === \"heatmap\" || chartType === \"unit\" || chartType === \"sunburst\";\n    const notNumericXAxis = opts.xaxis.type !== \"datetime\" && opts.xaxis.type !== \"numeric\";\n    const isScatterJitter = (chartType === \"scatter\" || chartType === \"bubble\") && ((_e = (_d = (_c = opts.plotOptions) == null ? void 0 : _c.scatter) == null ? void 0 : _d.jitter) == null ? void 0 : _e.enabled);\n    const tickPlacement = opts.xaxis.tickPlacement ? opts.xaxis.tickPlacement : chartDefaults.xaxis && chartDefaults.xaxis.tickPlacement;\n    if (!isBarHorizontal && !unsupportedZoom && !isScatterJitter && notNumericXAxis && tickPlacement !== \"between\") {\n      opts = defaults.convertCatToNumeric(opts);\n    }\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {import('../../types/internal').ChartStateW} [w]\n   */\n  extendYAxis(opts, w) {\n    const options2 = new Options();\n    if (typeof opts.yaxis === \"undefined\" || !opts.yaxis || Array.isArray(opts.yaxis) && opts.yaxis.length === 0) {\n      opts.yaxis = {};\n    }\n    const globalApex = Environment.getApex();\n    if (opts.yaxis.constructor !== Array && globalApex.yaxis && globalApex.yaxis.constructor !== Array) {\n      opts.yaxis = Utils$1.extend(opts.yaxis, globalApex.yaxis);\n    }\n    if (opts.yaxis.constructor !== Array) {\n      opts.yaxis = [Utils$1.extend(options2.yAxis, opts.yaxis)];\n    } else {\n      opts.yaxis = Utils$1.extendArray(opts.yaxis, options2.yAxis);\n    }\n    let isLogY = false;\n    opts.yaxis.forEach((y) => {\n      if (y.logarithmic) {\n        isLogY = true;\n      }\n    });\n    let series = opts.series;\n    if (w && !series) {\n      series = w.config.series;\n    }\n    if (isLogY && series.length !== opts.yaxis.length && series.length) {\n      opts.yaxis = series.map((s, i) => {\n        if (!s.name) {\n          series[i].name = `series-${i + 1}`;\n        }\n        if (opts.yaxis[i]) {\n          opts.yaxis[i].seriesName = series[i].name;\n          return opts.yaxis[i];\n        } else {\n          const newYaxis = Utils$1.extend(options2.yAxis, opts.yaxis[0]);\n          newYaxis.show = false;\n          return newYaxis;\n        }\n      });\n    }\n    if (isLogY && series.length > 1 && series.length !== opts.yaxis.length) {\n      console.warn(\n        \"A multi-series logarithmic chart should have equal number of series and y-axes\"\n      );\n    }\n    return opts;\n  }\n  // annotations also accepts array, so we need to extend them manually\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendAnnotations(opts) {\n    if (typeof opts.annotations === \"undefined\") {\n      opts.annotations = {};\n      opts.annotations.yaxis = [];\n      opts.annotations.xaxis = [];\n      opts.annotations.points = [];\n    }\n    opts = this.extendYAxisAnnotations(opts);\n    opts = this.extendXAxisAnnotations(opts);\n    opts = this.extendPointAnnotations(opts);\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendYAxisAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.yaxis = Utils$1.extendArray(\n      typeof opts.annotations.yaxis !== \"undefined\" ? opts.annotations.yaxis : [],\n      options2.yAxisAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendXAxisAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.xaxis = Utils$1.extendArray(\n      typeof opts.annotations.xaxis !== \"undefined\" ? opts.annotations.xaxis : [],\n      options2.xAxisAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendPointAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.points = Utils$1.extendArray(\n      typeof opts.annotations.points !== \"undefined\" ? opts.annotations.points : [],\n      options2.pointAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  checkForDarkTheme(opts) {\n    if (opts.theme && opts.theme.mode === \"dark\") {\n      if (!opts.tooltip) {\n        opts.tooltip = {};\n      }\n      if (opts.tooltip.theme !== \"light\") {\n        opts.tooltip.theme = \"dark\";\n      }\n      if (!opts.chart.foreColor) {\n        opts.chart.foreColor = \"#f6f7f8\";\n      }\n      if (!opts.theme.palette) {\n        opts.theme.palette = \"palette4\";\n      }\n    }\n  }\n  /**\n   * @param {any} opts\n   */\n  handleUserInputErrors(opts) {\n    const config = opts;\n    if (config.tooltip.shared && config.tooltip.intersect) {\n      throw new Error(\n        \"tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.\"\n      );\n    }\n    if (config.chart.type === \"bar\" && config.plotOptions.bar.horizontal) {\n      if (config.yaxis.length > 1) {\n        throw new Error(\n          \"Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false\"\n        );\n      }\n      if (config.yaxis[0].reversed) {\n        config.yaxis[0].opposite = true;\n      }\n      config.xaxis.tooltip.enabled = false;\n      config.yaxis[0].tooltip.enabled = false;\n      config.chart.zoom.enabled = false;\n    }\n    if (config.chart.type === \"bar\" || config.chart.type === \"rangeBar\") {\n      if (config.tooltip.shared) {\n        if (config.xaxis.crosshairs.width === \"barWidth\" && config.series.length > 1) {\n          config.xaxis.crosshairs.width = \"tickWidth\";\n        }\n      }\n    }\n    if (config.chart.type === \"candlestick\" || config.chart.type === \"boxPlot\") {\n      if (config.yaxis[0].reversed) {\n        console.warn(\n          `Reversed y-axis in ${config.chart.type} chart is not supported.`\n        );\n        config.yaxis[0].reversed = false;\n      }\n    }\n    return config;\n  }\n}\nconst LINE_HEIGHT_RATIO = 1.618;\nconst NICE_SCALE_ALLOWED_MAG_MSD = [\n  [1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10],\n  [1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10]\n];\nconst NICE_SCALE_DEFAULT_TICKS = [\n  1,\n  2,\n  4,\n  4,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  24\n];\nclass Globals {\n  /**\n   * @param {any} gl\n   */\n  initGlobalVars(gl) {\n    gl.series = [];\n    gl.seriesCandleO = [];\n    gl.seriesCandleH = [];\n    gl.seriesCandleM = [];\n    gl.seriesCandleL = [];\n    gl.seriesCandleC = [];\n    gl.seriesRangeStart = [];\n    gl.seriesRangeEnd = [];\n    gl.seriesRange = [];\n    gl.seriesPercent = [];\n    gl.seriesGoals = [];\n    gl.seriesX = [];\n    gl.seriesZ = [];\n    gl.seriesNames = [];\n    gl.seriesTotals = [];\n    gl.seriesLog = [];\n    gl.seriesColors = [];\n    gl.stackedSeriesTotals = [];\n    gl.seriesXvalues = [];\n    gl.seriesYvalues = [];\n    gl.dataWasParsed = false;\n    gl.originalSeries = null;\n    gl.maxValsInArrayIndex = 0;\n    gl.yValueDecimal = 0;\n    gl.allSeriesHasEqualX = true;\n    gl.hasNullValues = false;\n    gl.invalidLogScale = false;\n    gl.seriesRangeName = {};\n    gl.labels = [];\n    gl.hasXaxisGroups = false;\n    gl.groups = [];\n    gl.barGroups = [];\n    gl.lineGroups = [];\n    gl.areaGroups = [];\n    gl.hasSeriesGroups = false;\n    gl.seriesGroups = [];\n    gl.categoryLabels = [];\n    gl.timescaleLabels = [];\n    gl.noLabelsProvided = false;\n    gl.isXNumeric = false;\n    gl.skipLastTimelinelabel = false;\n    gl.skipFirstTimelinelabel = false;\n    gl.isDataXYZ = false;\n    gl.isMultiLineX = false;\n    gl.isMultipleYAxis = false;\n    gl.maxY = -Number.MAX_VALUE;\n    gl.minY = Number.MIN_VALUE;\n    gl.minYArr = [];\n    gl.maxYArr = [];\n    gl.maxX = -Number.MAX_VALUE;\n    gl.minX = Number.MAX_VALUE;\n    gl.initialMaxX = -Number.MAX_VALUE;\n    gl.initialMinX = Number.MAX_VALUE;\n    gl.maxDate = 0;\n    gl.minDate = Number.MAX_VALUE;\n    gl.minZ = Number.MAX_VALUE;\n    gl.maxZ = -Number.MAX_VALUE;\n    gl.minXDiff = Number.MAX_VALUE;\n    gl.yAxisScale = [];\n    gl.xAxisScale = null;\n    gl.xAxisTicksPositions = [];\n    gl.xRange = 0;\n    gl.yRange = [];\n    gl.zRange = 0;\n    gl.dataPoints = 0;\n    gl.xTickAmount = 0;\n    gl.multiAxisTickAmount = 0;\n    gl.disableZoomIn = false;\n    gl.disableZoomOut = false;\n    gl.yLabelsCoords = [];\n    gl.yTitleCoords = [];\n    gl.barPadForNumericAxis = 0;\n    gl.padHorizontal = 0;\n    gl.rotateXLabels = false;\n    gl.overlappingXLabels = false;\n    gl.radialSize = 0;\n    gl.barHeight = 0;\n    gl.barWidth = 0;\n    gl.animationEnded = false;\n    gl.isDestroyed = false;\n    gl.bulkRevealScheduled = false;\n    gl.resizeTimer = null;\n    gl.selectionResizeTimer = null;\n    gl.delayedElements = [];\n    gl.pointsArray = [];\n    gl.barCanvasCoords = null;\n    gl.activeRenderer = null;\n    gl.dataLabelsRects = [];\n    gl.lastDrawnDataLabelsIndexes = [];\n    gl.textRectsCache = /* @__PURE__ */ new Map();\n    gl.domCache = /* @__PURE__ */ new Map();\n    gl.dimensionCache = {};\n    gl.cachedSelectors = {};\n    if (!gl.seriesNS) {\n      this._attachNamespaces(gl);\n    }\n  }\n  /**\n   * Attach domain-grouped namespace sub-objects onto gl.\n   * Each sub-object is a plain object whose properties are defined as\n   * getters/setters that read/write the canonical flat properties on gl.\n   * This means there is exactly ONE storage location per value — no copies,\n   * no sync needed.\n   *\n   * Namespaces:\n   *   gl.series  — parsed series data and chart-type-specific arrays\n   *   gl.axes    — axis bounds, scales, ranges, tick state\n   *   gl.layout  — SVG/grid dimensions, translations, label sizes\n   *   gl.cache   — DOM caches, timers, observers, drawing scratch space\n   *\n   * Note: interact state lives on w.interact (not gl) — see Base.js.\n   * @param {any} gl\n   */\n  _attachNamespaces(gl) {\n    const proxy = (ns, key, nsKey = key) => {\n      Object.defineProperty(ns, nsKey, {\n        get() {\n          return gl[key];\n        },\n        set(v) {\n          gl[key] = v;\n        },\n        enumerable: true,\n        configurable: true\n      });\n    };\n    const seriesNS = {};\n    proxy(seriesNS, \"series\", \"data\");\n    for (const key of [\n      \"seriesNames\",\n      \"seriesX\",\n      \"seriesZ\",\n      \"seriesXvalues\",\n      \"seriesYvalues\",\n      \"seriesGoals\",\n      \"seriesLog\",\n      \"seriesColors\",\n      \"seriesPercent\",\n      \"seriesTotals\",\n      \"stackedSeriesTotals\",\n      \"seriesCandleO\",\n      \"seriesCandleH\",\n      \"seriesCandleM\",\n      \"seriesCandleL\",\n      \"seriesCandleC\",\n      \"seriesRangeStart\",\n      \"seriesRangeEnd\",\n      \"seriesRange\",\n      \"seriesYAxisMap\",\n      \"seriesYAxisReverseMap\",\n      \"seriesGroups\",\n      \"barGroups\",\n      \"lineGroups\",\n      \"areaGroups\",\n      \"originalSeries\",\n      \"collapsedSeries\",\n      \"collapsedSeriesIndices\",\n      \"ancillaryCollapsedSeries\",\n      \"ancillaryCollapsedSeriesIndices\",\n      \"allSeriesCollapsed\",\n      \"risingSeries\",\n      \"previousPaths\",\n      \"ignoreYAxisIndexes\",\n      \"labels\",\n      \"categoryLabels\",\n      \"timescaleLabels\",\n      \"groups\"\n    ]) {\n      proxy(seriesNS, key);\n    }\n    Object.defineProperty(gl, \"seriesNS\", {\n      value: seriesNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const axesNS = {};\n    for (const key of [\n      \"minX\",\n      \"maxX\",\n      \"initialMinX\",\n      \"initialMaxX\",\n      \"minY\",\n      \"maxY\",\n      \"minYArr\",\n      \"maxYArr\",\n      \"minZ\",\n      \"maxZ\",\n      \"minDate\",\n      \"maxDate\",\n      \"minXDiff\",\n      \"xRange\",\n      \"yRange\",\n      \"zRange\",\n      \"xAxisScale\",\n      \"yAxisScale\",\n      \"xAxisTicksPositions\",\n      \"xTickAmount\",\n      \"multiAxisTickAmount\",\n      \"dataPoints\",\n      \"maxValsInArrayIndex\",\n      \"isXNumeric\",\n      \"isMultipleYAxis\",\n      \"isMultiLineX\",\n      \"isDataXYZ\",\n      \"dataFormatXNumeric\",\n      \"allSeriesHasEqualX\",\n      \"hasNullValues\",\n      \"dataWasParsed\",\n      \"hasXaxisGroups\",\n      \"hasSeriesGroups\",\n      \"skipFirstTimelinelabel\",\n      \"skipLastTimelinelabel\",\n      \"yValueDecimal\",\n      \"invalidLogScale\",\n      \"noLabelsProvided\"\n    ]) {\n      proxy(axesNS, key);\n    }\n    Object.defineProperty(gl, \"axes\", {\n      value: axesNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const layoutNS = {};\n    for (const key of [\n      \"svgWidth\",\n      \"svgHeight\",\n      \"gridWidth\",\n      \"gridHeight\",\n      \"translateX\",\n      \"translateY\",\n      \"translateXAxisX\",\n      \"translateXAxisY\",\n      \"translateYAxisX\",\n      \"xAxisLabelsHeight\",\n      \"xAxisGroupLabelsHeight\",\n      \"xAxisLabelsWidth\",\n      \"yAxisLabelsWidth\",\n      \"yAxisWidths\",\n      \"yLabelsCoords\",\n      \"yTitleCoords\",\n      \"padHorizontal\",\n      \"barPadForNumericAxis\",\n      \"rotateXLabels\",\n      \"scaleX\",\n      \"scaleY\",\n      \"radialSize\",\n      \"defaultLabels\",\n      \"overlappingXLabels\"\n    ]) {\n      proxy(layoutNS, key);\n    }\n    Object.defineProperty(gl, \"layout\", {\n      value: layoutNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const cacheNS = {};\n    for (const key of [\n      \"domCache\",\n      \"dimensionCache\",\n      \"cachedSelectors\",\n      \"textRectsCache\",\n      \"pointsArray\",\n      \"dataLabelsRects\",\n      \"lastDrawnDataLabelsIndexes\",\n      \"delayedElements\",\n      \"resizeTimer\",\n      \"selectionResizeTimer\",\n      \"resizeObserver\"\n    ]) {\n      proxy(cacheNS, key);\n    }\n    Object.defineProperty(gl, \"cache\", {\n      value: cacheNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n  }\n  /**\n   * Persistent chart state — set ONCE at chart construction and intentionally NOT\n   * reset by initGlobalVars.  These values must survive updateSeries / re-render.\n   *\n   * Rule: if a value is recalculated fresh on every render it belongs in\n   * initGlobalVars instead, not here.\n   * @returns {import('../../types/internal').ChartGlobals}\n   * @param {Record<string, any>} config\n   */\n  globalVars(config) {\n    const globals = {\n      // ── Identity (set once, never changes) ───────────────────────────────────\n      chartID: null,\n      // full chart ID: \"apexcharts-<cuid>\"\n      cuid: null,\n      // random suffix only\n      // ── Event registry (accumulates listeners, never reset) ───────────────────\n      events: {\n        beforeMount: [],\n        mounted: [],\n        updated: [],\n        clicked: [],\n        selection: [],\n        dataPointSelection: [],\n        zoomed: [],\n        scrolled: []\n      },\n      // ── Theme colors (set by Theme module after config merge) ─────────────────\n      colors: [],\n      fill: { colors: [] },\n      // ── Animation-frame handles cancellable across re-renders ─────────────────\n      // The chart-type instances that own these loops (Radial needle, Unit\n      // gather/exit) are recreated every render, so the handle lives here: a new\n      // render cancels the previous render's loop before starting its own,\n      // instead of leaving it to animate detached nodes. NOT reset per render.\n      radialNeedleRAF: null,\n      unitGatherRAF: null,\n      unitExitRAF: null,\n      stroke: { colors: [] },\n      dataLabels: { style: { colors: [] } },\n      radarPolygons: { fill: { colors: [] } },\n      markers: {\n        colors: [],\n        size: config.markers.size,\n        largestSize: 0\n      },\n      // ── Device / environment detected once at startup ─────────────────────────\n      // Note: isTouchDevice lives on w.interact — see Base.js. Shim installed there.\n      LINE_HEIGHT_RATIO,\n      // ── Chart-type flags (derived from config, set during Core.mount) ─────────\n      axisCharts: true,\n      // false for pie/radial/treemap etc.\n      isSlopeChart: config.plotOptions.line.isSlopeChart,\n      comboCharts: false,\n      // true when mixing line + column series\n      // ── Config snapshots (backups for zoom-reset / updateOptions) ────────────\n      initialConfig: null,\n      // deep clone of the original user config\n      initialSeries: [],\n      lastXAxis: [],\n      lastYAxis: [],\n      // ── User interaction state (must survive re-renders) ──────────────────────\n      // Note: zoomEnabled, panEnabled, selectionEnabled, zoomed, selection,\n      //       visibleXRange, selectedDataPoints, mousedown, clientX, clientY,\n      //       lastClientPosition, capturedSeriesIndex, capturedDataPointIndex,\n      //       disableZoomIn, disableZoomOut, isTouchDevice\n      //       live on w.interact — see Base.js. Backward-compat shims installed there.\n      // Series collapse state (user-driven, must persist across re-renders)\n      allSeriesCollapsed: false,\n      collapsedSeries: [],\n      collapsedSeriesIndices: [],\n      ancillaryCollapsedSeries: [],\n      ancillaryCollapsedSeriesIndices: [],\n      risingSeries: [],\n      // series being re-shown after collapse\n      ignoreYAxisIndexes: [],\n      // y-axis indices excluded during series collapse\n      // ── Lifecycle / update flags ──────────────────────────────────────────────\n      isDirty: false,\n      // true when user called an update method manually\n      isExecCalled: false,\n      // true when update came via exec()\n      dataChanged: false,\n      // true when series data was changed dynamically\n      resized: false,\n      // true after a container resize\n      // ── Data format flags (derived from config/series, stable between renders) ─\n      // Note: dataFormatXNumeric lives on w.axisFlags — see Base.js. Shim installed there.\n      // hasNullValues / invalidLogScale are recomputed every render and reset in\n      // initGlobalVars (they are NOT stable between renders).\n      // Persistent data tracking\n      columnSeries: null,\n      // tracks which series are rendered as bars/columns\n      yaxis: null,\n      // resolved yaxis config array\n      total: 0,\n      // running total (used by pie/radial)\n      // ── Animation control ─────────────────────────────────────────────────────\n      shouldAnimate: true,\n      previousPaths: [],\n      // paths from previous render — source for enter animation\n      // Streaming scroll: previous frame's parsed rows + pixel positions,\n      // captured by Series.getPreviousPaths(). Consulted (like previousPaths)\n      // only while a data-change morph renders. See StreamScroll.\n      prevStreamFrame: null,\n      // Axis-chrome snapshot (tick label texts/positions + gridline positions)\n      // captured alongside prevStreamFrame; consumed once by AxisTransition\n      // after a variable-length re-render mounts.\n      prevChromeFrame: null,\n      // ── SVG viewport (set by Dimensions, but persistent as layout anchor) ─────\n      svgWidth: 0,\n      svgHeight: 0,\n      // Fingerprint of the container inputs that fed the last rendered size, so\n      // the window-resize handler can skip a redraw (and the animation teardown\n      // it causes) when a resize does not change the chart's drawing box.\n      lastResizeSignature: null,\n      // Note: gridWidth, gridHeight, translateX, translateY, translateXAxisX,\n      // translateXAxisY, xAxisLabelsHeight, xAxisGroupLabelsHeight, xAxisLabelsWidth,\n      // rotateXLabels, xAxisHeight, yLabelsCoords, yTitleCoords live on w.layout —\n      // see Base.js. Backward-compat shims installed there.\n      defaultLabels: false,\n      // Note: formatter properties (xLabelFormatter, yLabelFormatters, etc.) live on\n      // w.formatters — see Base.js. Backward-compat shims installed there.\n      yAxisLabelsWidth: 0,\n      scaleX: 1,\n      scaleY: 1,\n      translateYAxisX: [],\n      yAxisWidths: [],\n      // ── Instances (created once, replaced only on full re-init) ──────────────\n      tooltip: null,\n      resizeObserver: null,\n      // ── Locale (loaded once; changes only via setLocale()) ───────────────────\n      locale: {},\n      // ── Method queue (deferred calls during async operations) ────────────────\n      memory: {\n        methodsToExec: []\n      },\n      // ── Scale configuration constants — imported from utils/Constants.js ──────\n      niceScaleAllowedMagMsd: NICE_SCALE_ALLOWED_MAG_MSD,\n      niceScaleDefaultTicks: NICE_SCALE_DEFAULT_TICKS,\n      // ── Multi-axis series mapping ─────────────────────────────────────────────\n      seriesYAxisMap: [],\n      // yAxis index → series indices[]\n      seriesYAxisReverseMap: [],\n      // series index → yAxis index\n      noData: false\n      // true when there is nothing to render\n    };\n    return (\n      /** @type {import('../../types/internal').ChartGlobals} */\n      /** @type {unknown} */\n      globals\n    );\n  }\n  /**\n   * Lazy initial-series snapshot. Capturing `initialSeries` used to deep-clone\n   * the entire series on every parse and every update: the single largest CPU\n   * bucket at 50k+ points (profiled at ~23ms per 50k update). The setter now\n   * stores a cheap per-series shallow copy (series OBJECTS copied, data arrays\n   * shared) and the deep snapshot materializes only when something actually\n   * reads it (resetSeries, toolbar reset-home, tooltip same-length check).\n   *\n   * Why sharing the data arrays is safe: internal \"mutations\" of a series'\n   * data are property REPLACEMENTS (`series[i].data = []` on legend collapse),\n   * which cannot reach the captured copies because each series object was\n   * copied at capture time. The one in-place mutator (appendData's push loop)\n   * re-captures immediately after mutating, so the pending snapshot never\n   * spans the mutation.\n   *\n   * @param {Record<string, any>} globals\n   */\n  defineLazyInitialSeries(globals) {\n    let src = [];\n    let snap = null;\n    Object.defineProperty(globals, \"initialSeries\", {\n      configurable: true,\n      enumerable: true,\n      get() {\n        if (snap === null) {\n          snap = Utils$1.clone(src);\n        }\n        return snap;\n      },\n      set(value) {\n        src = Array.isArray(value) ? value.map(\n          (s) => s && typeof s === \"object\" && !Array.isArray(s) ? __spreadValues({}, s) : s\n        ) : value;\n        snap = null;\n        globals._initialSeriesPeek = src;\n      }\n    });\n    globals._initialSeriesPeek = src;\n  }\n  /**\n   * @param {Record<string, any>} config\n   */\n  init(config) {\n    const globals = this.globalVars(config);\n    this.initGlobalVars(globals);\n    this.defineLazyInitialSeries(globals);\n    globals.initialConfig = Utils$1.extend({}, config);\n    globals.initialSeries = config.series;\n    globals.lastXAxis = Utils$1.clone(\n      /** @type {NonNullable<typeof globals.initialConfig>} */\n      globals.initialConfig.xaxis\n    );\n    globals.lastYAxis = Utils$1.clone(\n      /** @type {NonNullable<typeof globals.initialConfig>} */\n      globals.initialConfig.yaxis\n    );\n    return globals;\n  }\n}\nclass Base {\n  /**\n   * @param {object} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  /**\n   * Build and return the full chart state object `w`.\n   * @returns {import('../types/internal').ChartStateW}\n   */\n  init() {\n    const config = new Config(this.opts).init({ responsiveOverride: false });\n    const globals = new Globals().init(config);\n    const w = {\n      config,\n      globals,\n      dom: {},\n      // DOM node cache — lives here, not inside globals\n      interact: {\n        // Tool mode (derived from toolbar config at construction, updated by Toolbar)\n        zoomEnabled: config.chart.toolbar.autoSelected === \"zoom\" && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled,\n        panEnabled: config.chart.toolbar.autoSelected === \"pan\" && config.chart.toolbar.tools.pan,\n        selectionEnabled: config.chart.toolbar.autoSelected === \"selection\" && config.chart.toolbar.tools.selection,\n        // Measure tool pre-selected via toolbar.autoSelected: 'measure'. Armed by\n        // the Measure module (self-arms on mount) and the toolbar button.\n        measureEnabled: config.chart.toolbar.autoSelected === \"measure\" && !!config.chart.toolbar.tools.measure && !!(config.chart.measure && config.chart.measure.enabled),\n        // Zoom / pan state (user-driven, must persist across re-renders)\n        zoomed: false,\n        selection: void 0,\n        visibleXRange: void 0,\n        selectedDataPoints: [],\n        // Mouse / pointer state\n        mousedown: false,\n        clientX: null,\n        clientY: null,\n        lastClientPosition: {},\n        // Tooltip capture state\n        capturedSeriesIndex: -1,\n        capturedDataPointIndex: -1,\n        // Timescale zoom bounds (reset per render by TimeScale)\n        disableZoomIn: false,\n        disableZoomOut: false,\n        // Device detection (set once at construction)\n        isTouchDevice: Environment.isBrowser() ? \"ontouchstart\" in window || navigator.maxTouchPoints > 0 : false\n      },\n      formatters: {\n        // Populated by Formatters.setLabelFormatters() each render\n        xLabelFormatter: void 0,\n        yLabelFormatters: [],\n        xaxisTooltipFormatter: void 0,\n        ttKeyFormatter: void 0,\n        ttVal: void 0,\n        ttZFormatter: void 0,\n        legendFormatter: void 0\n      },\n      // Candlestick / boxplot OHLC arrays — written by Data.handleCandleStickBoxData()\n      // each render; empty for all other chart types.\n      candleData: {\n        seriesCandleO: [],\n        seriesCandleH: [],\n        seriesCandleM: [],\n        seriesCandleL: [],\n        seriesCandleC: [],\n        // Optional raw observations per boxPlot data point ([i][j] = number[]),\n        // rendered as jitter dots. Empty unless boxPlot points are supplied.\n        seriesBoxPoints: []\n      },\n      // Range chart arrays — written by Data.handleRangeData() each render;\n      // empty for all other chart types.\n      rangeData: {\n        seriesRangeStart: [],\n        seriesRangeEnd: [],\n        seriesRange: []\n      },\n      // Violin distribution arrays — written by Data.handleViolinData() each\n      // render; empty for all other chart types.\n      //   seriesViolinDensity[i][j] = { values:number[], weights:number[], maxWeight:number }\n      //   seriesViolinPoints[i][j]  = number[] (raw observations, value-axis units)\n      //   seriesViolinMin/Max[i][j] = number (extent of density + points — drives Range.js)\n      violinData: {\n        seriesViolinDensity: [],\n        seriesViolinPoints: [],\n        seriesViolinMin: [],\n        seriesViolinMax: []\n      },\n      // Label / category data — written by Data.parseData() and TimeScale each render.\n      labelData: {\n        labels: [],\n        categoryLabels: [],\n        timescaleLabels: [],\n        // written by TimeScale.calculateTimeScaleMinMax()\n        hasXaxisGroups: false,\n        groups: [],\n        seriesGroups: []\n      },\n      // Axis / parsing behaviour flags — written by Data.parseData() each render.\n      axisFlags: {\n        isXNumeric: false,\n        dataFormatXNumeric: false,\n        isDataXYZ: false,\n        isRangeData: false,\n        isRangeBar: false,\n        isMultiLineX: false,\n        noLabelsProvided: false,\n        dataWasParsed: false\n      },\n      // Parsed series data — written by Data.parseData() each render.\n      // Note: initialSeries and originalSeries are intentionally excluded —\n      // they are persistent (survive re-renders) and remain on w.globals.\n      seriesData: {\n        series: [],\n        // main y-values array\n        seriesNames: [],\n        seriesX: [],\n        seriesZ: [],\n        seriesColors: [],\n        seriesGoals: [],\n        stackedSeriesTotals: [],\n        stackedSeriesTotalsByGroups: [],\n        unitData: []\n        // per-unit data for the `unit` chart (see SeriesData)\n      },\n      // Grid / axis layout computed by Dimensions.plotCoords() each render.\n      // gridWidth/gridHeight/translateX/translateY are also used as starting\n      // points by Dimensions on the next render (accumulated values), so the\n      // shim must be bidirectional — reads and writes both route correctly.\n      layout: {\n        gridHeight: 0,\n        gridWidth: 0,\n        translateX: 0,\n        translateY: 0,\n        translateXAxisX: 0,\n        translateXAxisY: 0,\n        rotateXLabels: false,\n        xAxisHeight: 0,\n        xAxisLabelsHeight: 0,\n        xAxisGroupLabelsHeight: 0,\n        xAxisLabelsWidth: 0,\n        yLabelsCoords: [],\n        yTitleCoords: [],\n        gridPad: { top: 0, right: 0, bottom: 0, left: 0 }\n      }\n    };\n    Object.defineProperty(globals, \"dom\", {\n      get() {\n        return w.dom;\n      },\n      set(v) {\n        w.dom = v;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    for (const key of [\n      \"xLabelFormatter\",\n      \"yLabelFormatters\",\n      \"xaxisTooltipFormatter\",\n      \"ttKeyFormatter\",\n      \"ttVal\",\n      \"ttZFormatter\",\n      \"legendFormatter\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.formatters[key]\n          );\n        },\n        set(v) {\n          w.formatters[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"zoomEnabled\",\n      \"panEnabled\",\n      \"selectionEnabled\",\n      \"zoomed\",\n      \"selection\",\n      \"visibleXRange\",\n      \"selectedDataPoints\",\n      \"mousedown\",\n      \"clientX\",\n      \"clientY\",\n      \"lastClientPosition\",\n      \"capturedSeriesIndex\",\n      \"capturedDataPointIndex\",\n      \"disableZoomIn\",\n      \"disableZoomOut\",\n      \"isTouchDevice\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.interact[key]\n          );\n        },\n        set(v) {\n          w.interact[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"gridHeight\",\n      \"gridWidth\",\n      \"translateX\",\n      \"translateY\",\n      \"translateXAxisX\",\n      \"translateXAxisY\",\n      \"rotateXLabels\",\n      \"xAxisHeight\",\n      \"xAxisLabelsHeight\",\n      \"xAxisGroupLabelsHeight\",\n      \"xAxisLabelsWidth\",\n      \"yLabelsCoords\",\n      \"yTitleCoords\",\n      \"gridPad\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.layout[key]\n          );\n        },\n        set(v) {\n          w.layout[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"series\",\n      \"seriesNames\",\n      \"seriesX\",\n      \"seriesZ\",\n      \"seriesColors\",\n      \"seriesGoals\",\n      \"stackedSeriesTotals\",\n      \"stackedSeriesTotalsByGroups\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.seriesData[key]\n          );\n        },\n        set(v) {\n          w.seriesData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"isXNumeric\",\n      \"dataFormatXNumeric\",\n      \"isDataXYZ\",\n      \"isRangeData\",\n      \"isRangeBar\",\n      \"isMultiLineX\",\n      \"noLabelsProvided\",\n      \"dataWasParsed\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.axisFlags[key]\n          );\n        },\n        set(v) {\n          w.axisFlags[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"labels\",\n      \"categoryLabels\",\n      \"timescaleLabels\",\n      \"hasXaxisGroups\",\n      \"groups\",\n      \"seriesGroups\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.labelData[key]\n          );\n        },\n        set(v) {\n          w.labelData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\"seriesRangeStart\", \"seriesRangeEnd\", \"seriesRange\"]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.rangeData[key]\n          );\n        },\n        set(v) {\n          w.rangeData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"seriesCandleO\",\n      \"seriesCandleH\",\n      \"seriesCandleM\",\n      \"seriesCandleL\",\n      \"seriesCandleC\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.candleData[key]\n          );\n        },\n        set(v) {\n          w.candleData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"seriesViolinDensity\",\n      \"seriesViolinPoints\",\n      \"seriesViolinMin\",\n      \"seriesViolinMax\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.violinData[key]\n          );\n        },\n        set(v) {\n          w.violinData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    return (\n      /** @type {import('../types/internal').ChartStateW} */\n      /** @type {unknown} */\n      w\n    );\n  }\n}\nclass CoreUtils {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {any[]} series\n   * @param {string} chartType\n   */\n  static checkComboSeries(series, chartType) {\n    let comboCharts = false;\n    let comboBarCount = 0;\n    let comboCount = 0;\n    if (chartType === void 0) {\n      chartType = \"line\";\n    }\n    if (series.length && typeof series[0].type !== \"undefined\") {\n      series.forEach((s) => {\n        if (s.type === \"bar\" || s.type === \"column\" || s.type === \"candlestick\" || s.type === \"boxPlot\" || s.type === \"violin\") {\n          comboBarCount++;\n        }\n        if (typeof s.type !== \"undefined\" && s.type !== chartType) {\n          comboCount++;\n        }\n      });\n    }\n    if (comboCount > 0) {\n      comboCharts = true;\n    }\n    return {\n      comboBarCount,\n      comboCharts\n    };\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the sum of all individual values in a multiple stacked series\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1]]\n   *  @return [34,36,48,13]\n   * @param {number[]} excludedSeriesIndices\n   **/\n  getStackedSeriesTotals(excludedSeriesIndices = []) {\n    const w = this.w;\n    const total = [];\n    if (w.seriesData.series.length === 0) return total;\n    for (let i = 0; i < w.seriesData.series[w.globals.maxValsInArrayIndex].length; i++) {\n      let t = 0;\n      for (let j = 0; j < w.seriesData.series.length; j++) {\n        if (typeof w.seriesData.series[j][i] !== \"undefined\" && excludedSeriesIndices.indexOf(j) === -1) {\n          t += w.seriesData.series[j][i];\n        }\n      }\n      total.push(t);\n    }\n    return total;\n  }\n  // get total of the all values inside all series\n  /**\n   * @param {number | null} [index]\n   */\n  getSeriesTotalByIndex(index = null) {\n    if (index === null) {\n      return (\n        /** @type {any[]} */\n        this.w.config.series.reduce(\n          (acc, cur) => acc + cur,\n          0\n        )\n      );\n    } else {\n      const seriesAtIndex = this.w.seriesData.series[index];\n      if (!Array.isArray(seriesAtIndex)) {\n        return seriesAtIndex != null ? seriesAtIndex : 0;\n      }\n      return seriesAtIndex.reduce(\n        (acc, cur) => acc + cur,\n        0\n      );\n    }\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the sum of values in a multiple stacked grouped charts\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1], [43, 23, 34, 22]]\n   * series 1 and 2 are in a group, while series 3 is in another group\n   *  @return [[34, 36, 48, 12], [43, 23, 34, 22]]\n   **/\n  getStackedSeriesTotalsByGroups() {\n    const w = this.w;\n    const total = [];\n    w.labelData.seriesGroups.forEach((sg) => {\n      const includedIndexes = [];\n      w.config.series.forEach((s, si) => {\n        if (sg.indexOf(w.seriesData.seriesNames[si]) > -1) {\n          includedIndexes.push(si);\n        }\n      });\n      const excludedIndices = w.seriesData.series.map((_, fi) => includedIndexes.indexOf(fi) === -1 ? fi : -1).filter((f) => f !== -1);\n      total.push(this.getStackedSeriesTotals(excludedIndices));\n    });\n    return total;\n  }\n  setSeriesYAxisMappings() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    let axisSeriesMap = [];\n    const seriesYAxisReverseMap = [];\n    const unassignedSeriesIndices = [];\n    const seriesNameArrayStyle = this.w.seriesData.series.length > cnf.yaxis.length || /**\n     * @param {ApexYAxis} a\n     */\n    cnf.yaxis.some((a) => Array.isArray(a.seriesName));\n    cnf.series.forEach((_s, i) => {\n      unassignedSeriesIndices.push(i);\n      seriesYAxisReverseMap.push(null);\n    });\n    cnf.yaxis.forEach(\n      (_yaxe, yi) => {\n        axisSeriesMap[yi] = [];\n      }\n    );\n    const unassignedYAxisIndices = [];\n    cnf.yaxis.forEach((yaxe, yi) => {\n      let assigned = false;\n      if (yaxe.seriesName) {\n        let seriesNames = [];\n        if (Array.isArray(yaxe.seriesName)) {\n          seriesNames = yaxe.seriesName;\n        } else {\n          seriesNames.push(yaxe.seriesName);\n        }\n        seriesNames.forEach((name2) => {\n          cnf.series.forEach((s, si) => {\n            if (\n              /** @type {any} */\n              s.name === name2\n            ) {\n              let remove = si;\n              if (yi === si || seriesNameArrayStyle) {\n                if (!seriesNameArrayStyle || unassignedSeriesIndices.indexOf(si) > -1) {\n                  axisSeriesMap[yi].push([yi, si]);\n                } else {\n                  console.warn(\n                    \"Series '\" + /** @type {any} */\n                    s.name + \"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes.\"\n                  );\n                }\n              } else {\n                axisSeriesMap[si].push([si, yi]);\n                remove = yi;\n              }\n              assigned = true;\n              remove = unassignedSeriesIndices.indexOf(remove);\n              if (remove !== -1) {\n                unassignedSeriesIndices.splice(remove, 1);\n              }\n            }\n          });\n        });\n      }\n      if (!assigned) {\n        unassignedYAxisIndices.push(yi);\n      }\n    });\n    axisSeriesMap = axisSeriesMap.map((yaxe) => {\n      const ra = [];\n      yaxe.forEach((sa) => {\n        seriesYAxisReverseMap[sa[1]] = sa[0];\n        ra.push(sa[1]);\n      });\n      return ra;\n    });\n    let lastUnassignedYAxis = cnf.yaxis.length - 1;\n    for (let i = 0; i < unassignedYAxisIndices.length; i++) {\n      lastUnassignedYAxis = unassignedYAxisIndices[i];\n      axisSeriesMap[lastUnassignedYAxis] = [];\n      if (unassignedSeriesIndices) {\n        const si = unassignedSeriesIndices[0];\n        unassignedSeriesIndices.shift();\n        axisSeriesMap[lastUnassignedYAxis].push(si);\n        seriesYAxisReverseMap[si] = lastUnassignedYAxis;\n      } else {\n        break;\n      }\n    }\n    unassignedSeriesIndices.forEach((i) => {\n      axisSeriesMap[lastUnassignedYAxis].push(i);\n      seriesYAxisReverseMap[i] = lastUnassignedYAxis;\n    });\n    gl.seriesYAxisMap = axisSeriesMap.map((x) => x);\n    gl.seriesYAxisReverseMap = seriesYAxisReverseMap.map((x) => x);\n    gl.seriesYAxisMap.forEach((axisSeries, ai) => {\n      axisSeries.forEach((si) => {\n        if (\n          /** @type {any} */\n          cnf.series[si] && /** @type {any} */\n          cnf.series[si].group === void 0\n        ) {\n          const _series = (\n            /** @type {any} */\n            cnf.series[si]\n          );\n          _series.group = \"apexcharts-axis-\".concat(ai.toString());\n        }\n      });\n    });\n  }\n  /**\n   * @param {number | null} [index]\n   */\n  isSeriesNull(index = null) {\n    let r = [];\n    const series = (\n      /** @type {any[]} */\n      this.w.config.series\n    );\n    if (index === null) {\n      r = series.filter((d) => d !== null);\n    } else if (series[index] && Array.isArray(series[index].data)) {\n      r = series[index].data.filter((d) => d !== null);\n    } else {\n      r = series[index] !== null && series[index] !== void 0 ? [series[index]] : [];\n    }\n    return r.length === 0;\n  }\n  /**\n   * @param {number} index\n   */\n  seriesHaveSameValues(index) {\n    const seriesAtIndex = this.w.seriesData.series[index];\n    if (!Array.isArray(seriesAtIndex)) {\n      return true;\n    }\n    return seriesAtIndex.every(\n      (val, i, arr) => val === arr[0]\n    );\n  }\n  /**\n   * @param {any[]} labels\n   */\n  getCategoryLabels(labels) {\n    const w = this.w;\n    let catLabels = labels.slice();\n    if (w.config.xaxis.convertedCatToNumeric) {\n      catLabels = labels.map((i) => {\n        return w.config.xaxis.labels.formatter(i - w.globals.minX + 1);\n      });\n    }\n    return catLabels;\n  }\n  // maxValsInArrayIndex is the index of series[] which has the largest number of items\n  getLargestSeries() {\n    const w = this.w;\n    w.globals.maxValsInArrayIndex = w.seriesData.series.map((a) => a.length).indexOf(\n      Math.max.apply(\n        Math,\n        /**\n         * @param {number[]} a\n         */\n        w.seriesData.series.map((a) => a.length)\n      )\n    );\n  }\n  getLargestMarkerSize() {\n    const w = this.w;\n    let size = 0;\n    w.globals.markers.size.forEach((m) => {\n      size = Math.max(size, m);\n    });\n    if (w.config.markers.discrete && w.config.markers.discrete.length) {\n      w.config.markers.discrete.forEach((m) => {\n        size = Math.max(size, m.size);\n      });\n    }\n    if (size > 0) {\n      if (w.config.markers.hover.size > 0) {\n        size = w.config.markers.hover.size;\n      } else {\n        size += w.config.markers.hover.sizeOffset;\n      }\n    }\n    w.globals.markers.largestSize = size;\n    return size;\n  }\n  /**\n   * @memberof Core\n   * returns the sum of all values in a series\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1]]\n   *  @return [120, 11]\n   **/\n  getSeriesTotals() {\n    const w = this.w;\n    w.globals.seriesTotals = w.seriesData.series.map((ser) => {\n      let total = 0;\n      if (Array.isArray(ser)) {\n        for (let j = 0; j < ser.length; j++) {\n          total += ser[j];\n        }\n      } else {\n        total += ser;\n      }\n      return total;\n    });\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  getSeriesTotalsXRange(minX, maxX) {\n    const w = this.w;\n    const seriesTotalsXRange = w.seriesData.series.map((ser, index) => {\n      let total = 0;\n      for (let j = 0; j < ser.length; j++) {\n        if (w.seriesData.seriesX[index][j] > minX && w.seriesData.seriesX[index][j] < maxX) {\n          total += ser[j];\n        }\n      }\n      return total;\n    });\n    return seriesTotalsXRange;\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the percentage value of all individual values which can be used in a 100% stacked series\n   * Eg. w.seriesData.series = [[32, 33, 43, 12], [2, 3, 5, 1]]\n   *  @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]]\n   **/\n  getPercentSeries() {\n    const w = this.w;\n    w.globals.seriesPercent = w.seriesData.series.map((ser) => {\n      const seriesPercent = [];\n      if (Array.isArray(ser)) {\n        for (let j = 0; j < ser.length; j++) {\n          const total = w.seriesData.stackedSeriesTotals[j];\n          let percent = 0;\n          if (total) {\n            percent = 100 * ser[j] / total;\n          }\n          seriesPercent.push(percent);\n        }\n      } else {\n        const total = w.globals.seriesTotals.reduce((acc, val) => acc + val, 0);\n        const percent = 100 * ser / total;\n        seriesPercent.push(percent);\n      }\n      return seriesPercent;\n    });\n  }\n  getCalculatedRatios() {\n    const w = this.w;\n    const gl = w.globals;\n    const yRatio = [];\n    let invertedYRatio = 0;\n    let xRatio = 0;\n    let invertedXRatio = 0;\n    let zRatio = 0;\n    let baseLineY = [];\n    let baseLineInvertedY = 0.1;\n    let baseLineX = 0;\n    gl.yRange = [];\n    if (gl.isMultipleYAxis) {\n      for (let i = 0; i < gl.minYArr.length; i++) {\n        gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i]));\n        baseLineY.push(0);\n      }\n    } else {\n      gl.yRange.push(Math.abs(gl.minY - gl.maxY));\n    }\n    gl.xRange = Math.abs(gl.maxX - gl.minX);\n    gl.zRange = Math.abs(gl.maxZ - gl.minZ);\n    for (let i = 0; i < gl.yRange.length; i++) {\n      yRatio.push(gl.yRange[i] / this.w.layout.gridHeight);\n    }\n    xRatio = gl.xRange / this.w.layout.gridWidth;\n    invertedYRatio = /** @type {any} */\n    gl.yRange / this.w.layout.gridWidth;\n    invertedXRatio = gl.xRange / this.w.layout.gridHeight;\n    zRatio = gl.zRange / this.w.layout.gridHeight * 16;\n    if (!zRatio) {\n      zRatio = 1;\n    }\n    if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n      const _hasNegsGl = (\n        /** @type {any} */\n        gl\n      );\n      _hasNegsGl.hasNegs = true;\n    }\n    if (w.globals.seriesYAxisReverseMap.length > 0) {\n      const scaleBaseLineYScale = (y, i) => {\n        const yAxis = w.config.yaxis[w.globals.seriesYAxisReverseMap[i]];\n        if (!yAxis) return 0;\n        const sign = y < 0 ? -1 : 1;\n        y = Math.abs(y);\n        if (yAxis.logarithmic) {\n          y = this.getBaseLog(yAxis.logBase, y);\n        }\n        return -sign * y / yRatio[i];\n      };\n      if (gl.isMultipleYAxis) {\n        baseLineY = [];\n        for (let i = 0; i < yRatio.length; i++) {\n          baseLineY.push(scaleBaseLineYScale(gl.minYArr[i], i));\n        }\n      } else {\n        baseLineY = [];\n        baseLineY.push(scaleBaseLineYScale(gl.minY, 0));\n        if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n          baseLineInvertedY = -gl.minY / invertedYRatio;\n          baseLineX = gl.minX / xRatio;\n        }\n      }\n    } else {\n      baseLineY = [];\n      baseLineY.push(0);\n      baseLineInvertedY = 0;\n      baseLineX = 0;\n    }\n    return {\n      yRatio,\n      invertedYRatio,\n      zRatio,\n      xRatio,\n      invertedXRatio,\n      baseLineInvertedY,\n      baseLineY,\n      baseLineX\n    };\n  }\n  /**\n   * @param {any[]} series\n   */\n  getLogSeries(series) {\n    const w = this.w;\n    w.globals.seriesLog = series.map((s, i) => {\n      const yAxisIndex = w.globals.seriesYAxisReverseMap[i];\n      if (w.config.yaxis[yAxisIndex] && w.config.yaxis[yAxisIndex].logarithmic) {\n        return s.map((d) => {\n          if (d === null) return null;\n          return this.getLogVal(w.config.yaxis[yAxisIndex].logBase, d, i);\n        });\n      } else {\n        return s;\n      }\n    });\n    return w.globals.invalidLogScale ? series : w.globals.seriesLog;\n  }\n  /**\n   * @param {number} val\n   * @param {number} seriesIndex\n   * @returns {number}\n   */\n  getLogValAtSeriesIndex(val, seriesIndex) {\n    if (val === null) return (\n      /** @type {any} */\n      null\n    );\n    const w = this.w;\n    const yAxisIndex = w.globals.seriesYAxisReverseMap[seriesIndex];\n    if (w.config.yaxis[yAxisIndex] && w.config.yaxis[yAxisIndex].logarithmic) {\n      return this.getLogVal(\n        w.config.yaxis[yAxisIndex].logBase,\n        val,\n        seriesIndex\n      );\n    }\n    return val;\n  }\n  /**\n   * @param {number} base\n   * @param {number} value\n   */\n  getBaseLog(base, value) {\n    return Math.log(value) / Math.log(base);\n  }\n  /**\n   * @param {number} b\n   * @param {number} d\n   * @param {number} seriesIndex\n   */\n  getLogVal(b, d, seriesIndex) {\n    if (d <= 0) {\n      return 0;\n    }\n    const w = this.w;\n    const min_log_val = w.globals.minYArr[seriesIndex] === 0 ? -1 : this.getBaseLog(b, w.globals.minYArr[seriesIndex]);\n    const max_log_val = w.globals.maxYArr[seriesIndex] === 0 ? 0 : this.getBaseLog(b, w.globals.maxYArr[seriesIndex]);\n    const number_of_height_levels = max_log_val - min_log_val;\n    if (d < 1) return d / number_of_height_levels;\n    const log_height_value = this.getBaseLog(b, d) - min_log_val;\n    return log_height_value / number_of_height_levels;\n  }\n  /**\n   * @param {number[]} yRatio\n   */\n  getLogYRatios(yRatio) {\n    const w = this.w;\n    const gl = this.w.globals;\n    const _gl = (\n      /** @type {any} */\n      gl\n    );\n    _gl.yLogRatio = yRatio.slice();\n    _gl.logYRange = /** @type {any[]} */\n    gl.yRange.map(\n      (_, i) => {\n        const yAxisIndex = w.globals.seriesYAxisReverseMap[i];\n        if (w.config.yaxis[yAxisIndex] && this.w.config.yaxis[yAxisIndex].logarithmic) {\n          let maxY = -Number.MAX_VALUE;\n          let minY = Number.MIN_VALUE;\n          let range = 1;\n          gl.seriesLog.forEach(\n            (s, si) => {\n              s.forEach((v) => {\n                if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) {\n                  maxY = Math.max(v, maxY);\n                  minY = Math.min(v, minY);\n                }\n              });\n            }\n          );\n          range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]);\n          _gl.yLogRatio[i] = range / this.w.layout.gridHeight;\n          return range;\n        }\n      }\n    );\n    return _gl.invalidLogScale ? yRatio.slice() : _gl.yLogRatio;\n  }\n  // Some config objects can be array - and we need to extend them correctly\n  /**\n   * @param {any} configInstance\n   * @param {Record<string, any>} options\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  static extendArrayProps(configInstance, options2, w) {\n    var _a, _b;\n    if (options2 == null ? void 0 : options2.yaxis) {\n      options2 = configInstance.extendYAxis(options2, w);\n    }\n    if (options2 == null ? void 0 : options2.annotations) {\n      if (options2.annotations.yaxis) {\n        options2 = configInstance.extendYAxisAnnotations(options2);\n      }\n      if ((_a = options2 == null ? void 0 : options2.annotations) == null ? void 0 : _a.xaxis) {\n        options2 = configInstance.extendXAxisAnnotations(options2);\n      }\n      if ((_b = options2 == null ? void 0 : options2.annotations) == null ? void 0 : _b.points) {\n        options2 = configInstance.extendPointAnnotations(options2);\n      }\n    }\n    return options2;\n  }\n  // Series of the same group and type can be stacked together distinct from\n  // other series of the same type on the same axis.\n  /**\n   * @param {Record<string, any>} typeSeries\n   * @param {string[]} typeGroups\n   * @param {string} type\n   * @param {string} chartClass\n   */\n  drawSeriesByGroup(typeSeries, typeGroups, type, chartClass) {\n    const w = this.w;\n    const graph = [];\n    if (typeSeries.series.length > 0) {\n      typeGroups.forEach((gn) => {\n        const gs = [];\n        const gi = [];\n        typeSeries.i.forEach((i, ii) => {\n          if (\n            /** @type {Record<string,any>} */\n            w.config.series[i].group === gn\n          ) {\n            gs.push(typeSeries.series[ii]);\n            gi.push(i);\n          }\n        });\n        gs.length > 0 && graph.push(\n          /** @type {any} */\n          chartClass.draw(gs, type, gi)\n        );\n      });\n    }\n    return graph;\n  }\n}\nconst SVGNS$2 = \"http://www.w3.org/2000/svg\";\nclass Point {\n  /**\n   * @param {number|{x:number,y:number}} x\n   * @param {number} [y]\n   */\n  constructor(x, y) {\n    if (typeof x === \"object\") {\n      this.x = x.x;\n      this.y = x.y;\n    } else {\n      this.x = x || 0;\n      this.y = y || 0;\n    }\n  }\n  /**\n   * @param {Matrix} matrix\n   */\n  transform(matrix) {\n    return matrix.apply(this);\n  }\n  clone() {\n    return new Point(this.x, this.y);\n  }\n}\nclass Matrix {\n  /**\n   * Defaults to the identity matrix when called with no args.\n   * @param {number} [a]\n   * @param {number} [b]\n   * @param {number} [c]\n   * @param {number} [d]\n   * @param {number} [e]\n   * @param {number} [f]\n   */\n  constructor(a, b, c, d, e, f) {\n    this.a = a != null ? a : 1;\n    this.b = b != null ? b : 0;\n    this.c = c != null ? c : 0;\n    this.d = d != null ? d : 1;\n    this.e = e != null ? e : 0;\n    this.f = f != null ? f : 0;\n  }\n  /**\n   * @param {number} deg\n   */\n  rotate(deg) {\n    const rad = deg * Math.PI / 180;\n    const cos = Math.cos(rad);\n    const sin = Math.sin(rad);\n    return this.multiply(new Matrix(cos, sin, -sin, cos, 0, 0));\n  }\n  /**\n   * @param {number} sx\n   * @param {number} sy\n   */\n  scale(sx, sy) {\n    return this.multiply(new Matrix(sx, 0, 0, sy != null ? sy : sx, 0, 0));\n  }\n  /**\n   * @param {Matrix} m\n   */\n  multiply(m) {\n    return new Matrix(\n      this.a * m.a + this.c * m.b,\n      this.b * m.a + this.d * m.b,\n      this.a * m.c + this.c * m.d,\n      this.b * m.c + this.d * m.d,\n      this.a * m.e + this.c * m.f + this.e,\n      this.b * m.e + this.d * m.f + this.f\n    );\n  }\n  /**\n   * @param {Point} point\n   */\n  apply(point) {\n    return new Point(\n      this.a * point.x + this.c * point.y + this.e,\n      this.b * point.x + this.d * point.y + this.f\n    );\n  }\n}\nclass Box {\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} w\n   * @param {number} h\n   */\n  constructor(x, y, w, h) {\n    this.x = x;\n    this.y = y;\n    this.w = w;\n    this.h = h;\n    this.width = w;\n    this.height = h;\n    this.x2 = x + w;\n    this.y2 = y + h;\n  }\n}\n/*!\n * Path morphing for SVG path animations\n * Based on svg.pathmorphing.js by Ulrich-Matthias Schäfer (MIT License)\n * Refactored to be standalone (no SVG.js dependency)\n *\n * Two algorithms are exported:\n *   - morphPaths()    — command-level interpolation; preserves curves but can\n *                       produce \"wings/flips\" when two shapes have very\n *                       different topology (e.g. bar rect → pie arc).\n *   - morphPolygons() — resamples both shapes into N evenly-spaced perimeter\n *                       points and tweens point-by-point with rotation-search\n *                       alignment; always smooth and non-self-intersecting,\n *                       at the cost of throwing away curve smoothness.\n */\nfunction parsePath(d) {\n  if (!d || typeof d !== \"string\") return [[\"M\", 0, 0]];\n  const commands = [];\n  const re = /([MmLlHhVvCcSsQqTtAaZz])\\s*/g;\n  const numRe = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?/gi;\n  let match;\n  const letters = [];\n  const positions = [];\n  while ((match = re.exec(d)) !== null) {\n    letters.push(match[1]);\n    positions.push(match.index);\n  }\n  for (let i = 0; i < letters.length; i++) {\n    const start = positions[i] + letters[i].length;\n    const end = i + 1 < positions.length ? positions[i + 1] : d.length;\n    const paramStr = d.substring(start, end);\n    const nums = [];\n    let numMatch;\n    numRe.lastIndex = 0;\n    while ((numMatch = numRe.exec(paramStr)) !== null) {\n      nums.push(parseFloat(numMatch[0]));\n    }\n    const cmd = letters[i].toUpperCase();\n    if (cmd === \"Z\") {\n      commands.push([\"Z\"]);\n    } else if (cmd === \"M\" || cmd === \"L\" || cmd === \"T\") {\n      for (let j = 0; j < nums.length; j += 2) {\n        commands.push([cmd, nums[j], nums[j + 1]]);\n      }\n    } else if (cmd === \"H\") {\n      for (let j = 0; j < nums.length; j++) {\n        commands.push([cmd, nums[j]]);\n      }\n    } else if (cmd === \"V\") {\n      for (let j = 0; j < nums.length; j++) {\n        commands.push([cmd, nums[j]]);\n      }\n    } else if (cmd === \"C\") {\n      for (let j = 0; j < nums.length; j += 6) {\n        commands.push([\n          cmd,\n          nums[j],\n          nums[j + 1],\n          nums[j + 2],\n          nums[j + 3],\n          nums[j + 4],\n          nums[j + 5]\n        ]);\n      }\n    } else if (cmd === \"S\" || cmd === \"Q\") {\n      for (let j = 0; j < nums.length; j += 4) {\n        commands.push([cmd, nums[j], nums[j + 1], nums[j + 2], nums[j + 3]]);\n      }\n    } else if (cmd === \"A\") {\n      for (let j = 0; j < nums.length; j += 7) {\n        commands.push([\n          cmd,\n          nums[j],\n          nums[j + 1],\n          nums[j + 2],\n          nums[j + 3],\n          nums[j + 4],\n          nums[j + 5],\n          nums[j + 6]\n        ]);\n      }\n    }\n  }\n  if (commands.length === 0) {\n    commands.push([\"M\", 0, 0]);\n  }\n  return commands;\n}\nfunction pathBbox(arr) {\n  let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n  arr.forEach((cmd) => {\n    for (let i = 1; i < cmd.length; i += 2) {\n      if (i + 1 <= cmd.length) {\n        const x = cmd[i];\n        const y = cmd[i + 1];\n        if (typeof x === \"number\" && typeof y === \"number\") {\n          if (x < minX) minX = x;\n          if (x > maxX) maxX = x;\n          if (y < minY) minY = y;\n          if (y > maxY) maxY = y;\n        }\n      }\n    }\n  });\n  if (minX === Infinity) {\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n  return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\nfunction arrayToPath(arr) {\n  return arr.map((cmd) => cmd.join(\" \")).join(\" \");\n}\nfunction simplify(val) {\n  switch (val[0]) {\n    case \"z\":\n    case \"Z\":\n      val[0] = \"L\";\n      val[1] = this.start[0];\n      val[2] = this.start[1];\n      break;\n    case \"H\":\n      val[0] = \"L\";\n      val[2] = this.pos[1];\n      break;\n    case \"V\":\n      val[0] = \"L\";\n      val[2] = val[1];\n      val[1] = this.pos[0];\n      break;\n    case \"T\":\n      val[0] = \"Q\";\n      val[3] = val[1];\n      val[4] = val[2];\n      val[1] = this.reflection[1];\n      val[2] = this.reflection[0];\n      break;\n    case \"S\":\n      val[0] = \"C\";\n      val[6] = val[4];\n      val[5] = val[3];\n      val[4] = val[2];\n      val[3] = val[1];\n      val[2] = this.reflection[1];\n      val[1] = this.reflection[0];\n      break;\n  }\n  return val;\n}\nfunction setPosAndReflection(val) {\n  var len = val.length;\n  this.pos = [val[len - 2], val[len - 1]];\n  if (\"SCQT\".indexOf(val[0]) != -1) {\n    this.reflection = [\n      2 * this.pos[0] - val[len - 4],\n      2 * this.pos[1] - val[len - 3]\n    ];\n  }\n  return val;\n}\nfunction toBezier(val) {\n  var _a;\n  var retVal = [val];\n  switch (val[0]) {\n    case \"M\":\n      this.pos = this.start = [val[1], val[2]];\n      return retVal;\n    case \"L\":\n      val[5] = val[3] = val[1];\n      val[6] = val[4] = val[2];\n      val[1] = this.pos[0];\n      val[2] = this.pos[1];\n      break;\n    case \"Q\":\n      val[6] = val[4];\n      val[5] = val[3];\n      val[4] = val[4] * 1 / 3 + val[2] * 2 / 3;\n      val[3] = val[3] * 1 / 3 + val[1] * 2 / 3;\n      val[2] = this.pos[1] * 1 / 3 + val[2] * 2 / 3;\n      val[1] = this.pos[0] * 1 / 3 + val[1] * 2 / 3;\n      break;\n    case \"A\":\n      retVal = arcToBezier((_a = this.pos) != null ? _a : [], val);\n      val = retVal[0];\n      break;\n  }\n  val[0] = \"C\";\n  this.pos = [val[5], val[6]];\n  this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]];\n  return retVal;\n}\nfunction findNextM(arr, offset) {\n  if (offset === false) return false;\n  for (var i = offset, len = arr.length; i < len; ++i) {\n    if (arr[i][0] == \"M\") return i;\n  }\n  return false;\n}\nfunction arcToBezier(pos, val) {\n  var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360, largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7], A = new Point(pos[0], pos[1]), B = new Point(x, y), primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd, deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il, retVal = [], x1, y1, x2, y2;\n  if (rx === 0 || ry === 0 || A.x === B.x && A.y === B.y) {\n    return [[\"C\", A.x, A.y, B.x, B.y, B.x, B.y]];\n  }\n  primedCoord = new Point((A.x - B.x) / 2, (A.y - B.y) / 2).transform(\n    // Start with the identity matrix (no args → Matrix defaults a=d=1, others 0).\n    // Passing all-zero args here would produce a degenerate zero matrix, since\n    // `0 ?? 1` is `0`, not `1` — every subsequent transform then yields (0,0)\n    // and the arc-to-bezier conversion crashes on a NaN cascade.\n    /** @type {any} */\n    new Matrix().rotate(xAxisRotation)\n  );\n  lambda = primedCoord.x * primedCoord.x / (rx * rx) + primedCoord.y * primedCoord.y / (ry * ry);\n  if (lambda > 1) {\n    lambda = Math.sqrt(lambda);\n    rx = lambda * rx;\n    ry = lambda * ry;\n  }\n  mat = /** @type {any} */\n  new Matrix().rotate(xAxisRotation).scale(1 / rx, 1 / ry).rotate(-xAxisRotation);\n  A = A.transform(mat);\n  B = B.transform(mat);\n  k = [B.x - A.x, B.y - A.y];\n  cSquare = k[0] * k[0] + k[1] * k[1];\n  c = Math.sqrt(cSquare);\n  k[0] /= c;\n  k[1] /= c;\n  t = cSquare < 4 ? Math.sqrt(1 - cSquare / 4) : 0;\n  if (largeArcFlag === sweepFlag) {\n    t *= -1;\n  }\n  O = new Point((B.x + A.x) / 2 + t * -k[1], (B.y + A.y) / 2 + t * k[0]);\n  OA = new Point(A.x - O.x, A.y - O.y);\n  OB = new Point(B.x - O.x, B.y - O.y);\n  tetaStart = Math.acos(OA.x / Math.sqrt(OA.x * OA.x + OA.y * OA.y));\n  if (OA.y < 0) tetaStart *= -1;\n  tetaEnd = Math.acos(OB.x / Math.sqrt(OB.x * OB.x + OB.y * OB.y));\n  if (OB.y < 0) tetaEnd *= -1;\n  if (sweepFlag && tetaStart > tetaEnd) {\n    tetaEnd += 2 * Math.PI;\n  }\n  if (!sweepFlag && tetaStart < tetaEnd) {\n    tetaEnd -= 2 * Math.PI;\n  }\n  nbSectors = Math.ceil(Math.abs(tetaStart - tetaEnd) * 2 / Math.PI);\n  arcSegPoints = [];\n  angle = tetaStart;\n  deltaTeta = (tetaEnd - tetaStart) / nbSectors;\n  f = 4 * Math.tan(deltaTeta / 4) / 3;\n  for (i = 0; i <= nbSectors; i++) {\n    cosAngle = Math.cos(angle);\n    sinAngle = Math.sin(angle);\n    pt = new Point(O.x + cosAngle, O.y + sinAngle);\n    arcSegPoints[i] = [\n      new Point(pt.x + f * sinAngle, pt.y - f * cosAngle),\n      pt,\n      new Point(pt.x - f * sinAngle, pt.y + f * cosAngle)\n    ];\n    angle += deltaTeta;\n  }\n  arcSegPoints[0][0] = arcSegPoints[0][1].clone();\n  arcSegPoints[arcSegPoints.length - 1][2] = arcSegPoints[arcSegPoints.length - 1][1].clone();\n  mat = /** @type {any} */\n  new Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation);\n  for (i = 0, il = arcSegPoints.length; i < il; i++) {\n    arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat);\n    arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat);\n    arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat);\n  }\n  for (i = 1, il = arcSegPoints.length; i < il; i++) {\n    pt = arcSegPoints[i - 1][2];\n    x1 = pt.x;\n    y1 = pt.y;\n    pt = arcSegPoints[i][0];\n    x2 = pt.x;\n    y2 = pt.y;\n    pt = arcSegPoints[i][1];\n    x = pt.x;\n    y = pt.y;\n    retVal.push([\"C\", x1, y1, x2, y2, x, y]);\n  }\n  return retVal;\n}\nfunction handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM) {\n  var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || void 0);\n  var destArrTemp = destArr.slice(destOffsetM, destOffsetNextM || void 0);\n  var i = 0, posStart = { pos: [0, 0], start: [0, 0] }, posDest = { pos: [0, 0], start: [0, 0] };\n  while (true) {\n    startArrTemp[i] = simplify.call(posStart, startArrTemp[i]);\n    destArrTemp[i] = simplify.call(posDest, destArrTemp[i]);\n    if (startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == \"M\" || startArrTemp[i][0] == \"A\" && (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5])) {\n      Array.prototype.splice.apply(\n        startArrTemp,\n        /** @type {[number, number, ...any[]]} */\n        [i, 1].concat(\n          /** @type {any} */\n          toBezier.call(posStart, startArrTemp[i])\n        )\n      );\n      Array.prototype.splice.apply(\n        destArrTemp,\n        /** @type {[number, number, ...any[]]} */\n        [i, 1].concat(\n          /** @type {any} */\n          toBezier.call(posDest, destArrTemp[i])\n        )\n      );\n    } else {\n      startArrTemp[i] = /** @type {any} */\n      setPosAndReflection.call(\n        posStart,\n        startArrTemp[i]\n      );\n      destArrTemp[i] = /** @type {any} */\n      setPosAndReflection.call(\n        posDest,\n        destArrTemp[i]\n      );\n    }\n    if (++i == startArrTemp.length && i == destArrTemp.length) break;\n    if (i == startArrTemp.length) {\n      startArrTemp.push([\n        \"C\",\n        posStart.pos[0],\n        posStart.pos[1],\n        posStart.pos[0],\n        posStart.pos[1],\n        posStart.pos[0],\n        posStart.pos[1]\n      ]);\n    }\n    if (i == destArrTemp.length) {\n      destArrTemp.push([\n        \"C\",\n        posDest.pos[0],\n        posDest.pos[1],\n        posDest.pos[0],\n        posDest.pos[1],\n        posDest.pos[0],\n        posDest.pos[1]\n      ]);\n    }\n  }\n  return { start: startArrTemp, dest: destArrTemp };\n}\nfunction synchronizePaths(fromD, toD) {\n  var startArr = parsePath(fromD);\n  var destArr = parsePath(toD);\n  var startOffsetM = 0;\n  var destOffsetM = 0;\n  var startOffsetNextM = false;\n  var destOffsetNextM = false;\n  var result;\n  while (true) {\n    if (startOffsetM === false && destOffsetM === false) break;\n    startOffsetNextM = findNextM(\n      startArr,\n      startOffsetM === false ? false : startOffsetM + 1\n    );\n    destOffsetNextM = findNextM(\n      destArr,\n      destOffsetM === false ? false : destOffsetM + 1\n    );\n    if (startOffsetM === false) {\n      const bbox = pathBbox(\n        /** @type {any} */\n        result.start\n      );\n      if (bbox.height == 0 || bbox.width == 0) {\n        startOffsetM = startArr.push(startArr[0]) - 1;\n      } else {\n        startOffsetM = startArr.push([\n          \"M\",\n          bbox.x + bbox.width / 2,\n          bbox.y + bbox.height / 2\n        ]) - 1;\n      }\n    }\n    if (destOffsetM === false) {\n      const bbox = pathBbox(\n        /** @type {any} */\n        result.dest\n      );\n      if (bbox.height == 0 || bbox.width == 0) {\n        destOffsetM = destArr.push(destArr[0]) - 1;\n      } else {\n        destOffsetM = destArr.push([\n          \"M\",\n          bbox.x + bbox.width / 2,\n          bbox.y + bbox.height / 2\n        ]) - 1;\n      }\n    }\n    result = handleBlock(\n      startArr,\n      startOffsetM,\n      startOffsetNextM,\n      destArr,\n      destOffsetM,\n      destOffsetNextM\n    );\n    startArr = startArr.slice(0, startOffsetM).concat(\n      result.start,\n      startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM)\n    );\n    destArr = destArr.slice(0, destOffsetM).concat(\n      result.dest,\n      destOffsetNextM === false ? [] : destArr.slice(destOffsetNextM)\n    );\n    startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length;\n    destOffsetM = destOffsetNextM === false ? false : destOffsetM + result.dest.length;\n  }\n  return { start: startArr, dest: destArr };\n}\nfunction morphPaths(fromD, toD) {\n  var synced = synchronizePaths(fromD, toD);\n  var startArr = synced.start;\n  var destArr = synced.dest;\n  return function(pos) {\n    var result = startArr.map(function(from, idx) {\n      return destArr[idx].map(function(to, toIdx) {\n        if (toIdx === 0) return to;\n        return from[toIdx] + (destArr[idx][toIdx] - from[toIdx]) * pos;\n      });\n    });\n    return arrayToPath(result);\n  };\n}\nlet _measureSvg = null;\nlet _measurePath = null;\nfunction samplePathPoints(d, n) {\n  const pts = new Array(n);\n  if (!Environment.isBrowser()) {\n    const arr = parsePath(d);\n    const bbox = pathBbox(arr);\n    const cx = bbox.x + bbox.width / 2;\n    const cy = bbox.y + bbox.height / 2;\n    for (let i = 0; i < n; i++) pts[i] = { x: cx, y: cy };\n    return pts;\n  }\n  if (!_measureSvg) {\n    _measureSvg = /** @type {SVGSVGElement} */\n    document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    _measureSvg.setAttribute(\"width\", \"0\");\n    _measureSvg.setAttribute(\"height\", \"0\");\n    _measureSvg.setAttribute(\n      \"style\",\n      \"position:absolute;width:0;height:0;visibility:hidden;pointer-events:none;\"\n    );\n    _measurePath = /** @type {SVGPathElement} */\n    document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    _measureSvg.appendChild(_measurePath);\n    document.body.appendChild(_measureSvg);\n  }\n  _measurePath.setAttribute(\"d\", d || \"M0 0\");\n  let len = 0;\n  try {\n    len = _measurePath.getTotalLength();\n  } catch (e) {\n    len = 0;\n  }\n  if (!len || !isFinite(len)) {\n    const arr = parsePath(d);\n    const bbox = pathBbox(arr);\n    const cx = bbox.x + bbox.width / 2;\n    const cy = bbox.y + bbox.height / 2;\n    for (let i = 0; i < n; i++) pts[i] = { x: cx, y: cy };\n    return pts;\n  }\n  for (let i = 0; i < n; i++) {\n    try {\n      const p = _measurePath.getPointAtLength(i / n * len);\n      pts[i] = { x: p.x, y: p.y };\n    } catch (e) {\n      pts[i] = { x: 0, y: 0 };\n    }\n  }\n  return pts;\n}\nfunction morphPolygons(fromD, toD, n = 96) {\n  const fromPts = samplePathPoints(fromD, n);\n  const toPts = samplePathPoints(toD, n);\n  let bestOffset = 0;\n  let bestDist = Infinity;\n  for (let off = 0; off < n; off++) {\n    let dist = 0;\n    for (let i = 0; i < n; i++) {\n      const a = fromPts[(i + off) % n];\n      const b = toPts[i];\n      const dx = a.x - b.x;\n      const dy = a.y - b.y;\n      dist += dx * dx + dy * dy;\n      if (dist >= bestDist) break;\n    }\n    if (dist < bestDist) {\n      bestDist = dist;\n      bestOffset = off;\n    }\n  }\n  const aligned = new Array(n);\n  for (let i = 0; i < n; i++) {\n    aligned[i] = fromPts[(i + bestOffset) % n];\n  }\n  return function(pos) {\n    let out = \"\";\n    for (let i = 0; i < n; i++) {\n      const a = aligned[i];\n      const b = toPts[i];\n      const x = a.x + (b.x - a.x) * pos;\n      const y = a.y + (b.y - a.y) * pos;\n      out += (i === 0 ? \"M\" : \"L\") + x.toFixed(3) + \" \" + y.toFixed(3) + \" \";\n    }\n    return out + \"Z\";\n  };\n}\nfunction easeInOut(t) {\n  return -Math.cos(t * Math.PI) / 2 + 0.5;\n}\nlet _defaultEasing = easeInOut;\nfunction setDefaultEasing(fn) {\n  _defaultEasing = typeof fn === \"function\" ? fn : easeInOut;\n}\nfunction parseColor(str) {\n  if (!str || typeof str !== \"string\") return null;\n  if (str[0] === \"#\") {\n    let hex = str.slice(1);\n    if (hex.length === 3)\n      hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n    const n = parseInt(hex, 16);\n    return [n >> 16 & 255, n >> 8 & 255, n & 255, 1];\n  }\n  const m = str.match(\n    /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+))?\\s*\\)/\n  );\n  if (m) return [+m[1], +m[2], +m[3], m[4] !== void 0 ? +m[4] : 1];\n  return null;\n}\nfunction interpolateColor(from, to, pos) {\n  return `rgba(${Math.round(from[0] + (to[0] - from[0]) * pos)},${Math.round(from[1] + (to[1] - from[1]) * pos)},${Math.round(from[2] + (to[2] - from[2]) * pos)},${from[3] + (to[3] - from[3]) * pos})`;\n}\nclass SVGAnimationRunner {\n  /**\n   * @param {any} element\n   * @param {number} duration\n   * @param {number} delay\n   */\n  constructor(element, duration, delay) {\n    this.el = element;\n    this.duration = duration != null ? duration : 300;\n    this.delay = delay || 0;\n    this._attrTarget = null;\n    this._plotTarget = null;\n    this._plotSnap = null;\n    this._plotAlgorithm = \"commands\";\n    this._afterCb = null;\n    this._duringCb = null;\n    this._easing = null;\n    this._next = null;\n    this._root = null;\n    this._scheduled = false;\n  }\n  /**\n   * Override the easing for this runner (else the module default is used).\n   * @param {(t:number)=>number} fn\n   */\n  ease(fn) {\n    if (typeof fn === \"function\") this._easing = fn;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {Record<string, any>} to\n   */\n  attr(to) {\n    this._attrTarget = to;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {string} d\n   * @param {'commands' | 'polygons'} [algorithm] - morph engine to use for\n   *   the d→d interpolation. 'commands' (default) is the legacy\n   *   per-command lerp; 'polygons' resamples both paths into N evenly\n   *   spaced points and tweens point-by-point (smoother for shapes with\n   *   very different anchor-point counts).\n   * @param {string} [snapTo] - final d to land on when it differs from the\n   *   interpolation target. Used by reconciled length-change morphs: the\n   *   tween runs against a padded path (extra anchors lying exactly on the\n   *   final geometry) but the element must end with the renderer's clean,\n   *   un-padded d so later captures and morphs stay stable.\n   */\n  plot(d, algorithm, snapTo) {\n    this._plotTarget = d;\n    if (algorithm) this._plotAlgorithm = algorithm;\n    this._plotSnap = snapTo || null;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {Function} fn\n   */\n  after(fn) {\n    this._afterCb = fn;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {Function} fn\n   */\n  during(fn) {\n    this._duringCb = fn;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {number} duration\n   * @param {number} delay\n   */\n  animate(duration, delay) {\n    const next = new SVGAnimationRunner(this.el, duration, delay);\n    this._next = next;\n    next._root = this._root || this;\n    return next;\n  }\n  _schedule() {\n    const root = this._root || this;\n    if (!root._scheduled) {\n      root._scheduled = true;\n      queueMicrotask(() => root._executeChain());\n    }\n  }\n  _executeChain() {\n    const chain = [];\n    let r = this;\n    while (r) {\n      chain.push(r);\n      r = r._next;\n    }\n    let cumulativeDelay = 0;\n    chain.forEach((runner) => {\n      cumulativeDelay += runner.delay;\n      runner._execute(cumulativeDelay);\n      cumulativeDelay += runner.duration;\n    });\n  }\n  /**\n   * @param {number} startDelay\n   */\n  _execute(startDelay) {\n    const el = this.el;\n    const duration = this.duration;\n    if (duration <= 1) {\n      const apply = () => {\n        if (this._attrTarget) el.attr(this._attrTarget);\n        if (this._plotTarget) el.plot(this._plotSnap || this._plotTarget);\n        if (this._afterCb) this._afterCb.call(el);\n      };\n      if (startDelay > 0) {\n        setTimeout(apply, startDelay);\n      } else {\n        apply();\n      }\n      return;\n    }\n    const run = () => {\n      const fromAttrs = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      const fromColors = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      const toColors = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      if (this._attrTarget) {\n        for (const key of Object.keys(this._attrTarget)) {\n          const fromVal = el.attr(key);\n          fromAttrs[key] = fromVal;\n          const fc = parseColor(fromVal);\n          const tc = parseColor(String(this._attrTarget[key]));\n          if (fc && tc) {\n            fromColors[key] = fc;\n            toColors[key] = tc;\n          }\n        }\n      }\n      let morphFn = null;\n      if (this._plotTarget) {\n        const fromPath = el.attr(\"d\") || \"\";\n        try {\n          morphFn = this._plotAlgorithm === \"polygons\" ? morphPolygons(fromPath, this._plotTarget) : morphPaths(fromPath, this._plotTarget);\n        } catch (e) {\n          morphFn = null;\n        }\n      }\n      const start = performance.now();\n      const easing = this._easing || _defaultEasing;\n      const tick = (now) => {\n        const elapsed = now - start;\n        const rawPos = Math.min(elapsed / duration, 1);\n        const pos = easing(rawPos);\n        if (this._attrTarget) {\n          if (rawPos >= 1) {\n            el.attr(this._attrTarget);\n          } else {\n            const current = (\n              /** @type {Record<string, any>} */\n              {}\n            );\n            for (const key of Object.keys(this._attrTarget)) {\n              if (fromColors[key] && toColors[key]) {\n                current[key] = interpolateColor(\n                  fromColors[key],\n                  toColors[key],\n                  pos\n                );\n              } else {\n                const from = parseFloat(fromAttrs[key]);\n                const to = parseFloat(this._attrTarget[key]);\n                if (!isNaN(from) && !isNaN(to)) {\n                  current[key] = from + (to - from) * pos;\n                }\n              }\n            }\n            el.attr(current);\n          }\n        }\n        if (morphFn && rawPos < 1) {\n          el.attr(\n            \"d\",\n            /** @type {any} */\n            morphFn(pos)\n          );\n        }\n        if (this._duringCb) this._duringCb(pos);\n        if (rawPos < 1) {\n          BrowserAPIs.requestAnimationFrame(tick);\n        } else {\n          if (this._plotTarget) {\n            el.attr(\"d\", this._plotSnap || this._plotTarget);\n          }\n          if (this._afterCb) this._afterCb.call(el);\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(tick);\n    };\n    if (startDelay > 0) {\n      setTimeout(run, startDelay);\n    } else {\n      run();\n    }\n  }\n}\nfunction installAnimationMethods(ElementClass) {\n  ElementClass.prototype.animate = function(duration, delay) {\n    return new SVGAnimationRunner(this, duration, delay);\n  };\n}\nfunction easeInOutSine(t) {\n  return -Math.cos(t * Math.PI) / 2 + 0.5;\n}\nfunction cubicBezier(x1, y1, x2, y2) {\n  x1 = Math.min(Math.max(x1, 0), 1);\n  x2 = Math.min(Math.max(x2, 0), 1);\n  const cx = 3 * x1;\n  const bx = 3 * (x2 - x1) - cx;\n  const ax = 1 - cx - bx;\n  const cy = 3 * y1;\n  const by = 3 * (y2 - y1) - cy;\n  const ay = 1 - cy - by;\n  const sampleX = (t) => ((ax * t + bx) * t + cx) * t;\n  const sampleY = (t) => ((ay * t + by) * t + cy) * t;\n  const solveT = (x) => {\n    let lo = 0;\n    let hi = 1;\n    let t = x;\n    if (t < lo) return lo;\n    if (t > hi) return hi;\n    while (lo < hi) {\n      const xt = sampleX(t);\n      if (Math.abs(xt - x) < 1e-4) return t;\n      if (x > xt) lo = t;\n      else hi = t;\n      t = (lo + hi) / 2;\n    }\n    return t;\n  };\n  return (t) => t <= 0 ? 0 : t >= 1 ? 1 : sampleY(solveT(t));\n}\nconst REGISTRY = /* @__PURE__ */ new Map();\nconst linear = (t) => t;\nREGISTRY.set(\"linear\", linear);\nREGISTRY.set(\"easeInOutSine\", easeInOutSine);\nREGISTRY.set(\"easeInSine\", (t) => 1 - Math.cos(t * Math.PI / 2));\nREGISTRY.set(\"easeOutSine\", (t) => Math.sin(t * Math.PI / 2));\nREGISTRY.set(\"easeInQuad\", (t) => t * t);\nREGISTRY.set(\"easeOutQuad\", (t) => 1 - (1 - t) * (1 - t));\nREGISTRY.set(\n  \"easeInOutQuad\",\n  (t) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2\n);\nREGISTRY.set(\"easeInCubic\", (t) => t * t * t);\nREGISTRY.set(\"easeOutCubic\", (t) => 1 - Math.pow(1 - t, 3));\nREGISTRY.set(\n  \"easeInOutCubic\",\n  (t) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2\n);\nREGISTRY.set(\"easeOutBack\", (t) => {\n  const c1 = 1.70158;\n  const c3 = c1 + 1;\n  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n});\nREGISTRY.set(\"easeInOutBack\", (t) => {\n  const c1 = 1.70158;\n  const c2 = c1 * 1.525;\n  return t < 0.5 ? Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2) / 2 : (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;\n});\nfunction registerEasing(name2, fn) {\n  if (typeof name2 === \"string\" && name2 && typeof fn === \"function\") {\n    REGISTRY.set(name2, fn);\n  }\n}\nfunction isBezierArray(v) {\n  return Array.isArray(v) && v.length === 4 && v.every((n) => typeof n === \"number\");\n}\nfunction resolveEasing(value) {\n  if (typeof value === \"function\") return guardEasing(value);\n  if (isBezierArray(value))\n    return cubicBezier(value[0], value[1], value[2], value[3]);\n  if (typeof value === \"string\" && REGISTRY.has(value)) {\n    return guardEasing(\n      /** @type {(t:number)=>number} */\n      REGISTRY.get(value)\n    );\n  }\n  return easeInOutSine;\n}\nfunction guardEasing(fn) {\n  return (t) => {\n    const y = fn(t);\n    return typeof y === \"number\" && isFinite(y) ? y : t;\n  };\n}\nconst SVGNS$1 = \"http://www.w3.org/2000/svg\";\nfunction easeOutCubic$1(t) {\n  return 1 - Math.pow(1 - t, 3);\n}\nfunction easeOutBack$1(t) {\n  const c1 = 1.70158;\n  const c3 = c1 + 1;\n  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n}\nlet _reducedMotionMql = null;\nfunction prefersReducedMotion() {\n  if (!Environment.isBrowser()) return false;\n  try {\n    if (!_reducedMotionMql) {\n      _reducedMotionMql = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    }\n    return !!_reducedMotionMql.matches;\n  } catch (_) {\n    return false;\n  }\n}\nfunction applyProgressiveReveal(el, x, w) {\n  if (!Environment.isBrowser()) return false;\n  if (w.globals.dataChanged || w.globals.resized) return false;\n  const animCfg = w.config.chart.animations;\n  if (!animCfg || animCfg.enabled === false) return false;\n  const chartType = w.config.chart.type;\n  if (chartType !== \"line\" && chartType !== \"area\" && chartType !== \"rangeArea\") {\n    return false;\n  }\n  if (!(w.layout.gridWidth > 0)) return false;\n  const drawSpeed = (animCfg.speed || 800) * 2;\n  const xRatio = Math.max(0, Math.min(1, x / w.layout.gridWidth));\n  const easedT = 1 - Math.cbrt(1 - xRatio);\n  const revealDelay = easedT * drawSpeed;\n  const node = el.node;\n  const style = node.style;\n  style.opacity = \"0\";\n  let startAnchor = null;\n  const tick = (now) => {\n    if (startAnchor === null) startAnchor = now;\n    if (now - startAnchor >= revealDelay) {\n      style.opacity = \"\";\n    } else {\n      BrowserAPIs.requestAnimationFrame(tick);\n    }\n  };\n  BrowserAPIs.requestAnimationFrame(tick);\n  return true;\n}\nfunction applyAnimationPolicy(w) {\n  const anim = w.config.chart.animations;\n  if (!anim) return;\n  if (anim.respectReducedMotion !== false && prefersReducedMotion()) {\n    anim.enabled = false;\n    if (anim.dynamicAnimation) anim.dynamicAnimation.enabled = false;\n  }\n  setDefaultEasing(resolveEasing(anim.easing));\n}\nfunction computeStagger(opts) {\n  const style = opts.style;\n  const index = opts.index || 0;\n  const baseDelay = typeof opts.baseDelay === \"number\" ? opts.baseDelay : 40;\n  const row = opts.row || 0;\n  const col = opts.col || 0;\n  const groupIndex = opts.groupIndex || 0;\n  const perGroup = opts.perGroup || 1;\n  const centerDistance = opts.centerDistance || 0;\n  switch (style) {\n    case \"none\":\n      return 0;\n    case \"diagonal\":\n      return (row + col) * baseDelay;\n    case \"group\":\n      return groupIndex * baseDelay + index % perGroup * (baseDelay / 4);\n    case \"centroid\":\n      return centerDistance * baseDelay * (index + 1);\n    case \"sequential\":\n    default:\n      return index * baseDelay;\n  }\n}\nclass Animations {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} [ctx]\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} from\n   * @param {Record<string, any>} to\n   * @param {object} speed\n   */\n  animateLine(el, from, to, speed) {\n    el.attr(from).animate(speed).attr(to);\n  }\n  /*\n   ** Animate radius of a circle element\n   * @param {any} el\n   * @param {number} speed\n   * @param {string} easing\n   * @param {Function} cb\n   */\n  /** @param {any} el @param {any} speed @param {any} easing @param {any} cb */\n  animateMarker(el, speed, easing, cb) {\n    el.attr({\n      opacity: 0\n    }).animate(speed).attr({\n      opacity: 1\n    }).after(() => {\n      cb();\n    });\n  }\n  /**\n   * Scale-up \"pop\" effect for scatter/bubble markers. Animates\n   * `transform: scale(0 → 1)` (with `easeOutBack` overshoot) plus opacity,\n   * around the marker's own center via `transform-box: fill-box`.\n   *\n   * Falls back to instant render in SSR / when shouldAnimate is false.\n   *\n   * @param {any} el\n   * @param {{ speed: number, delay?: number, onComplete?: () => void }} params\n   */\n  animatePop(el, { speed, delay = 0, onComplete }) {\n    const w = this.w;\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate || speed < 1) {\n      if (onComplete) onComplete();\n      return;\n    }\n    const node = el.node;\n    const style = node.style;\n    style.transformBox = \"fill-box\";\n    style.transformOrigin = \"center\";\n    style.transform = \"scale(0)\";\n    style.opacity = \"0\";\n    const startAt = performance.now() + delay;\n    const step = (now) => {\n      if (w.globals.isDestroyed) return;\n      const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n      style.transform = `scale(${easeOutBack$1(t)})`;\n      style.opacity = String(Math.min(1, t * 2));\n      if (t < 1) {\n        BrowserAPIs.requestAnimationFrame(step);\n      } else {\n        style.transform = \"\";\n        style.transformOrigin = \"\";\n        style.transformBox = \"\";\n        style.opacity = \"\";\n        if (onComplete) onComplete();\n      }\n    };\n    BrowserAPIs.requestAnimationFrame(step);\n  }\n  /*\n   ** Animate rect properties\n   * @param {any} el\n   * @param {any} from\n   * @param {any} to\n   * @param {number} speed\n   * @param {Function} fn\n   */\n  /** @param {any} el @param {any} from @param {any} to @param {any} speed @param {any} fn @param {number} [delay] */\n  animateRect(el, from, to, speed, fn, delay = 0) {\n    el.attr(from).animate(speed, delay).attr(to).after(() => fn());\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  animatePathsGradually(params) {\n    const {\n      el,\n      realIndex,\n      j,\n      fill,\n      pathFrom,\n      pathTo,\n      pathToInterp,\n      speed,\n      delay,\n      scrollMorph\n    } = params;\n    const me = this;\n    const w = this.w;\n    let delayFactor = 0;\n    if (w.config.chart.animations.animateGradually.enabled) {\n      delayFactor = w.config.chart.animations.animateGradually.delay;\n    }\n    if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged && w.config.chart.type !== \"bar\") {\n      delayFactor = 0;\n    }\n    me.morphSVG(\n      el,\n      realIndex,\n      j,\n      w.config.chart.type === \"line\" && !w.globals.comboCharts ? \"stroke\" : fill,\n      pathFrom,\n      pathTo,\n      speed,\n      delay * delayFactor,\n      scrollMorph,\n      pathToInterp\n    );\n  }\n  /**\n   * Opacity-fade reveal (see Graphics.renderPaths `revealViaFade`): hide this\n   * path immediately, then reveal the whole series in a single CSS opacity fade\n   * once the synchronous draw pass has finished. Used for two cases that both\n   * want to avoid per-path morphs: the large-dataset bulk render (>\n   * largeDatasetThreshold) and candlestick/boxPlot data-change updates (where an\n   * index-based morph would slide candles around on zoom). Every faded path is\n   * pushed to delayedElements, but only the first one schedules the reveal — a\n   * lone requestAnimationFrame fires after all paths are in the DOM, so N paths\n   * cost one frame callback instead of N morph timelines. The guard flag is\n   * reset inside the callback (and in initGlobalVars) so subsequent renders\n   * re-arm it.\n   * @param {any} el\n   */\n  revealBulk(el) {\n    const w = this.w;\n    el.node.classList.add(\"apexcharts-element-hidden\");\n    w.globals.delayedElements.push({ el: el.node });\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate) {\n      this.animationCompleted(el);\n      return;\n    }\n    if (!w.globals.bulkRevealScheduled) {\n      w.globals.bulkRevealScheduled = true;\n      BrowserAPIs.requestAnimationFrame(() => {\n        if (w.globals.isDestroyed) return;\n        w.globals.bulkRevealScheduled = false;\n        this.animationCompleted(el);\n      });\n    }\n  }\n  showDelayedElements() {\n    this.w.globals.delayedElements.forEach((d) => {\n      if (d.holdUntilComplete && !this.w.globals.animationEnded) return;\n      const ele = d.el;\n      ele.classList.remove(\"apexcharts-element-hidden\");\n      ele.classList.add(\"apexcharts-hidden-element-shown\");\n    });\n  }\n  /**\n   * @param {any} el\n   */\n  animationCompleted(el) {\n    const w = this.w;\n    if (w.globals.animationEnded) return;\n    w.globals.animationEnded = true;\n    this.showDelayedElements();\n    if (typeof w.config.chart.events.animationEnd === \"function\") {\n      w.config.chart.events.animationEnd(this.ctx, { el, w });\n    }\n  }\n  /**\n   * Initial-mount \"pen-stroke\" draw effect for line / area / rangeArea paths.\n   *\n   * Stroke paths animate `stroke-dashoffset` from total length → 0.\n   * Fill paths animate the width of a per-series SVG `<mask>` rect from 0 → gridWidth,\n   * which coexists with the existing `clip-path: gridRectMask` (mask + clip-path\n   * are independent SVG attributes).\n   *\n   * For radar / radial shapes, pass `mask: { type: 'radial', cx, cy, r }` to\n   * use a circular mask that blooms from center outward instead of the default\n   * left-to-right rect wipe.\n   *\n   * @param {any} el            - SVG.js path element\n   * @param {{realIndex: number, j?: number, isFill: boolean, isLast: boolean, speed: number, delay: number, mask?: {type: 'rect'|'radial', cx?: number, cy?: number, r?: number}}} params\n   */\n  animateDraw(el, { realIndex, j, isFill, isLast, speed, delay, mask: maskShape }) {\n    const w = this.w;\n    const me = this;\n    const finalize = () => {\n      if (isLast && w.globals.shouldAnimate) {\n        me.animationCompleted(el);\n      }\n      me.showDelayedElements();\n    };\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate || speed < 1) {\n      finalize();\n      return;\n    }\n    const node = el.node;\n    const runMaskReveal = () => {\n      const pad = 4;\n      const isRadial = maskShape && maskShape.type === \"radial\";\n      const targetWidth = w.layout.gridWidth + pad * 2;\n      const radialCx = maskShape && maskShape.cx || 0;\n      const radialCy = maskShape && maskShape.cy || 0;\n      const targetRadius = (maskShape && maskShape.r || w.layout.gridWidth / 2) + pad;\n      const maskId = `apexDrawMask${w.globals.cuid}-${realIndex}-${j != null ? j : 0}-${isFill ? \"f\" : \"s\"}`;\n      const mask = BrowserAPIs.createElementNS(SVGNS$1, \"mask\");\n      mask.setAttribute(\"id\", maskId);\n      mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n      let revealEl;\n      if (isRadial) {\n        const region = targetRadius;\n        mask.setAttribute(\"x\", String(radialCx - region));\n        mask.setAttribute(\"y\", String(radialCy - region));\n        mask.setAttribute(\"width\", String(region * 2));\n        mask.setAttribute(\"height\", String(region * 2));\n        revealEl = BrowserAPIs.createElementNS(SVGNS$1, \"circle\");\n        revealEl.setAttribute(\"cx\", String(radialCx));\n        revealEl.setAttribute(\"cy\", String(radialCy));\n        revealEl.setAttribute(\"r\", \"0\");\n        revealEl.setAttribute(\"fill\", \"#fff\");\n      } else {\n        mask.setAttribute(\"x\", String(-pad));\n        mask.setAttribute(\"y\", String(-pad));\n        mask.setAttribute(\"width\", String(targetWidth));\n        mask.setAttribute(\"height\", String(w.layout.gridHeight + pad * 2));\n        revealEl = BrowserAPIs.createElementNS(SVGNS$1, \"rect\");\n        revealEl.setAttribute(\"x\", String(-pad));\n        revealEl.setAttribute(\"y\", String(-pad));\n        revealEl.setAttribute(\"width\", \"0\");\n        revealEl.setAttribute(\"height\", String(w.layout.gridHeight + pad * 2));\n        revealEl.setAttribute(\"fill\", \"#fff\");\n      }\n      mask.appendChild(revealEl);\n      w.dom.elDefs.node.appendChild(mask);\n      node.setAttribute(\"mask\", `url(#${maskId})`);\n      const startAt = performance.now() + (delay || 0);\n      const step = (now) => {\n        if (w.globals.isDestroyed) return;\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        const eased = easeOutCubic$1(t);\n        if (isRadial) {\n          revealEl.setAttribute(\"r\", String(eased * targetRadius));\n        } else {\n          revealEl.setAttribute(\"width\", String(eased * targetWidth));\n        }\n        if (t < 1) {\n          BrowserAPIs.requestAnimationFrame(step);\n        } else {\n          node.removeAttribute(\"mask\");\n          if (mask.parentNode) mask.parentNode.removeChild(mask);\n          finalize();\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(step);\n    };\n    const runStrokeDraw = (len) => {\n      node.setAttribute(\"stroke-dasharray\", String(len));\n      node.setAttribute(\"stroke-dashoffset\", String(len));\n      const startAt = performance.now() + (delay || 0);\n      const step = (now) => {\n        if (w.globals.isDestroyed) return;\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        node.setAttribute(\"stroke-dashoffset\", String(len * (1 - easeOutCubic$1(t))));\n        if (t < 1) {\n          BrowserAPIs.requestAnimationFrame(step);\n        } else {\n          node.removeAttribute(\"stroke-dasharray\");\n          node.removeAttribute(\"stroke-dashoffset\");\n          finalize();\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(step);\n    };\n    BrowserAPIs.requestAnimationFrame(() => {\n      if (w.globals.isDestroyed) return;\n      if (isFill) {\n        runMaskReveal();\n        return;\n      }\n      const existingDash = node.getAttribute(\"stroke-dasharray\");\n      const hasCustomDash = !!existingDash && existingDash !== \"0\" && existingDash !== \"\";\n      if (hasCustomDash) {\n        runMaskReveal();\n        return;\n      }\n      let len = 0;\n      try {\n        if (typeof node.getTotalLength === \"function\") {\n          len = node.getTotalLength();\n        }\n      } catch (_) {\n        len = 0;\n      }\n      if (!len) {\n        finalize();\n        return;\n      }\n      runStrokeDraw(len);\n    });\n  }\n  // SVG.js animation for morphing one path to another\n  /**\n   * @param {any} el\n   * @param {number} realIndex\n   * @param {number} j\n   * @param {string} fill\n   * @param {string} pathFrom\n   * @param {string} pathTo\n   * @param {number} speed\n   * @param {number} delay\n   * @param {boolean} [scrollMorph] - this morph is a streaming scroll (StreamScroll)\n   * @param {string} [pathToInterp] - interpolation target that differs from the\n   *   final path. Reconciled length-change morphs tween toward a padded copy of\n   *   pathTo (extra anchors sitting exactly on the final geometry) and snap to\n   *   the clean pathTo at the end.\n   */\n  morphSVG(el, realIndex, j, fill, pathFrom, pathTo, speed, delay, scrollMorph, pathToInterp) {\n    var _a, _b;\n    const w = this.w;\n    if (!pathFrom) {\n      pathFrom = el.attr(\"pathFrom\");\n    }\n    if (!pathTo) {\n      pathTo = el.attr(\"pathTo\");\n    }\n    const disableAnimationForCorrupPath = () => {\n      if (w.config.chart.type === \"radar\") {\n        speed = 1;\n      }\n      return `M 0 ${w.layout.gridHeight}`;\n    };\n    if (!pathFrom || pathFrom.indexOf(\"undefined\") > -1 || pathFrom.indexOf(\"NaN\") > -1) {\n      pathFrom = disableAnimationForCorrupPath();\n    }\n    if (!pathTo.trim() || pathTo.indexOf(\"undefined\") > -1 || pathTo.indexOf(\"NaN\") > -1) {\n      pathTo = disableAnimationForCorrupPath();\n      pathToInterp = void 0;\n    }\n    if (pathToInterp && (!pathToInterp.trim() || pathToInterp.indexOf(\"undefined\") > -1 || pathToInterp.indexOf(\"NaN\") > -1)) {\n      pathToInterp = void 0;\n    }\n    if (!w.globals.shouldAnimate) {\n      speed = 1;\n    }\n    const crossTypeMorph = ((_b = (_a = this.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.isActive()) === true;\n    const morphAlgo = crossTypeMorph ? \"polygons\" : \"commands\";\n    let morphEase = null;\n    if (w.globals.dataChanged) {\n      const dynEasing = w.config.chart.animations.dynamicAnimation.easing;\n      if (dynEasing != null) {\n        morphEase = resolveEasing(dynEasing);\n      } else if (scrollMorph) {\n        morphEase = resolveEasing(\"linear\");\n      }\n    }\n    const runner = el.plot(pathFrom).animate(1, delay).plot(pathFrom).animate(speed, delay);\n    if (morphEase) {\n      runner.ease(morphEase);\n    }\n    runner.plot(\n      pathToInterp || pathTo,\n      morphAlgo,\n      pathToInterp ? pathTo : void 0\n    ).after(() => {\n      if (Utils$1.isNumber(j)) {\n        const maxSeries = w.seriesData.series[w.globals.maxValsInArrayIndex];\n        if (maxSeries && j === maxSeries.length - 2 && w.globals.shouldAnimate) {\n          this.animationCompleted(el);\n        }\n      } else if (fill !== \"none\" && w.globals.shouldAnimate) {\n        if (!w.globals.comboCharts && realIndex === w.seriesData.series.length - 1 || w.globals.comboCharts) {\n          this.animationCompleted(el);\n        }\n      }\n      this.showDelayedElements();\n    });\n  }\n}\nconst DEFAULT_INTENSITY = { lighten: 0.15, darken: 0.35 };\nclass Filters {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  // create a re-usable filter which can be appended other filter effects and applied to multiple elements\n  /**\n   * @param {any} el\n   * @param {number} i\n   */\n  getDefaultFilter(el, i) {\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (w.config.chart.dropShadow.enabled) {\n      this.dropShadow(el, w.config.chart.dropShadow, i);\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {number} i\n   * @param {string} filterType\n   * @param {number} [intensity] Blend strength (0 to 1). Defaults per type.\n   */\n  applyFilter(el, i, filterType, intensity) {\n    var _a, _b, _c;\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (filterType === \"none\") {\n      this.getDefaultFilter(el, i);\n      return;\n    }\n    const shadowAttr = w.config.chart.dropShadow;\n    const fallback = filterType === \"lighten\" ? DEFAULT_INTENSITY.lighten : DEFAULT_INTENSITY.darken;\n    const t = Math.max(\n      0,\n      Math.min(1, typeof intensity === \"number\" ? intensity : fallback)\n    );\n    const diag = 1 - t;\n    const offset = filterType === \"lighten\" ? t : 0;\n    if (el.filterWith) {\n      el.filterWith((add) => {\n        add.colorMatrix({\n          type: \"matrix\",\n          values: `\n            ${diag} 0 0 0 ${offset}\n            0 ${diag} 0 0 ${offset}\n            0 0 ${diag} 0 ${offset}\n            0 0 0 1 0\n          `,\n          in: \"SourceGraphic\",\n          result: \"brightness\"\n        });\n        if (shadowAttr.enabled) {\n          this.addShadow(add, i, shadowAttr, \"brightness\");\n        }\n      });\n      if (!shadowAttr.noUserSpaceOnUse) {\n        (_b = (_a = el.filterer()) == null ? void 0 : _a.node) == null ? void 0 : _b.setAttribute(\"filterUnits\", \"userSpaceOnUse\");\n      }\n      this._scaleFilterSize((_c = el.filterer()) == null ? void 0 : _c.node);\n    }\n  }\n  // appends dropShadow to the filter object which can be chained with other filter effects\n  /**\n   * @param {any} add\n   * @param {number} i\n   * @param {Record<string, any>} attrs\n   * @param {string} source\n   */\n  addShadow(add, i, attrs, source) {\n    var _a;\n    const w = this.w;\n    let { blur, top, left, color, opacity } = attrs;\n    color = Array.isArray(color) ? color[i] : color;\n    if (((_a = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _a.length) > 0) {\n      if (w.config.chart.dropShadow.enabledOnSeries.indexOf(i) === -1) {\n        return add;\n      }\n    }\n    add.offset({\n      in: source,\n      dx: left,\n      dy: top,\n      result: \"offset\"\n    });\n    add.gaussianBlur({\n      in: \"offset\",\n      stdDeviation: blur,\n      result: \"blur\"\n    });\n    add.flood({\n      \"flood-color\": color,\n      \"flood-opacity\": opacity,\n      result: \"flood\"\n    });\n    add.composite({\n      in: \"flood\",\n      in2: \"blur\",\n      operator: \"in\",\n      result: \"shadow\"\n    });\n    add.merge([\"shadow\", source]);\n  }\n  // directly adds dropShadow to the element and returns the same element.\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} attrs\n   */\n  dropShadow(el, attrs, i = 0) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (Utils$1.isMsEdge() && w.config.chart.type === \"radialBar\") {\n      return el;\n    }\n    if (((_a = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _a.length) > 0) {\n      if (((_b = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _b.indexOf(i)) === -1) {\n        return el;\n      }\n    }\n    if (el.filterWith) {\n      el.filterWith((add) => {\n        this.addShadow(add, i, attrs, \"SourceGraphic\");\n      });\n      if (!attrs.noUserSpaceOnUse) {\n        (_d = (_c = el.filterer()) == null ? void 0 : _c.node) == null ? void 0 : _d.setAttribute(\"filterUnits\", \"userSpaceOnUse\");\n      }\n      this._scaleFilterSize((_e = el.filterer()) == null ? void 0 : _e.node);\n    }\n    return el;\n  }\n  /**\n   * @param {any} el\n   * @param {number} realIndex\n   * @param {number} dataPointIndex\n   */\n  setSelectionFilter(el, realIndex, dataPointIndex) {\n    const w = this.w;\n    if (typeof w.interact.selectedDataPoints[realIndex] !== \"undefined\") {\n      if (w.interact.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) {\n        el.node.setAttribute(\"selected\", true);\n        const activeFilter = w.config.states.active.filter;\n        if (activeFilter.type !== \"none\") {\n          this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value);\n        }\n      }\n    }\n  }\n  /**\n   * @param {any} el\n   */\n  _scaleFilterSize(el) {\n    if (!el) return;\n    const setAttributes = (attrs) => {\n      for (const key in attrs) {\n        if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n          el.setAttribute(key, attrs[key]);\n        }\n      }\n    };\n    setAttributes({\n      width: \"200%\",\n      height: \"200%\",\n      x: \"-50%\",\n      y: \"-50%\"\n    });\n  }\n}\nclass Graphics {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext | null} ctx\n   */\n  constructor(w, ctx = null) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /*****************************************************************************\n   *                                                                            *\n   *  SVG Path Rounding Function                                                *\n   *  Copyright (C) 2014 Yona Appletree                                         *\n   *                                                                            *\n   *  Licensed under the Apache License, Version 2.0 (the \"License\");           *\n   *  you may not use this file except in compliance with the License.          *\n   *  You may obtain a copy of the License at                                   *\n   *                                                                            *\n   *      http://www.apache.org/licenses/LICENSE-2.0                            *\n   *                                                                            *\n   *  Unless required by applicable law or agreed to in writing, software       *\n   *  distributed under the License is distributed on an \"AS IS\" BASIS,         *\n   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *\n   *  See the License for the specific language governing permissions and       *\n   *  limitations under the License.                                            *\n   *                                                                            *\n   *****************************************************************************/\n  /**\n   * SVG Path rounding function. Takes an input path string and outputs a path\n   * string where all line-line corners have been rounded. Only supports absolute\n   * commands at the moment.\n   *\n   * @param pathString The SVG input path\n   * @param radius The amount to round the corners, either a value in the SVG\n   *               coordinate space, or, if useFractionalRadius is true, a value\n   *               from 0 to 1.\n   * @returns A new SVG path string with the rounding\n   * @param {string} pathString\n   * @param {number} radius\n   */\n  roundPathCorners(pathString, radius) {\n    if (pathString.indexOf(\"NaN\") > -1) pathString = \"\";\n    function moveTowardsLength(movingPoint, targetPoint, amount) {\n      var width = targetPoint.x - movingPoint.x;\n      var height = targetPoint.y - movingPoint.y;\n      var distance = Math.sqrt(width * width + height * height);\n      return moveTowardsFractional(\n        movingPoint,\n        targetPoint,\n        Math.min(1, amount / distance)\n      );\n    }\n    function moveTowardsFractional(movingPoint, targetPoint, fraction) {\n      return {\n        x: movingPoint.x + (targetPoint.x - movingPoint.x) * fraction,\n        y: movingPoint.y + (targetPoint.y - movingPoint.y) * fraction\n      };\n    }\n    function adjustCommand(cmd, newPoint) {\n      if (cmd.length > 2) {\n        cmd[cmd.length - 2] = newPoint.x;\n        cmd[cmd.length - 1] = newPoint.y;\n      }\n    }\n    function pointForCommand(cmd) {\n      return {\n        x: parseFloat(cmd[cmd.length - 2]),\n        y: parseFloat(cmd[cmd.length - 1])\n      };\n    }\n    var pathParts = pathString.split(/[,\\s]/).reduce(function(parts, part) {\n      var match = part.match(/^([a-zA-Z])(.+)/);\n      if (match) {\n        parts.push(match[1]);\n        parts.push(match[2]);\n      } else {\n        parts.push(part);\n      }\n      return parts;\n    }, []);\n    var commands = pathParts.reduce(function(commands2, part) {\n      if (parseFloat(part) == part && commands2.length) {\n        commands2[commands2.length - 1].push(part);\n      } else {\n        commands2.push([part]);\n      }\n      return commands2;\n    }, []);\n    var resultCommands = [];\n    if (commands.length > 1) {\n      var startPoint = pointForCommand(commands[0]);\n      var virtualCloseLine = null;\n      if (commands[commands.length - 1][0] == \"Z\" && commands[0].length > 2) {\n        virtualCloseLine = [\"L\", startPoint.x, startPoint.y];\n        commands[commands.length - 1] = virtualCloseLine;\n      }\n      resultCommands.push(commands[0]);\n      for (var cmdIndex = 1; cmdIndex < commands.length; cmdIndex++) {\n        var prevCmd = resultCommands[resultCommands.length - 1];\n        var curCmd = commands[cmdIndex];\n        var nextCmd = curCmd == virtualCloseLine ? commands[1] : commands[cmdIndex + 1];\n        if (nextCmd && prevCmd && prevCmd.length > 2 && curCmd[0] == \"L\" && nextCmd.length > 2 && nextCmd[0] == \"L\") {\n          var prevPoint = pointForCommand(prevCmd);\n          var curPoint = pointForCommand(curCmd);\n          var nextPoint = pointForCommand(nextCmd);\n          var curveStart, curveEnd;\n          curveStart = moveTowardsLength(curPoint, prevPoint, radius);\n          curveEnd = moveTowardsLength(curPoint, nextPoint, radius);\n          adjustCommand(curCmd, curveStart);\n          curCmd.origPoint = curPoint;\n          resultCommands.push(curCmd);\n          var startControl = moveTowardsFractional(curveStart, curPoint, 0.5);\n          var endControl = moveTowardsFractional(curPoint, curveEnd, 0.5);\n          var curveCmd = [\n            \"C\",\n            startControl.x,\n            startControl.y,\n            endControl.x,\n            endControl.y,\n            curveEnd.x,\n            curveEnd.y\n          ];\n          curveCmd.origPoint = curPoint;\n          resultCommands.push(curveCmd);\n        } else {\n          resultCommands.push(curCmd);\n        }\n      }\n      if (virtualCloseLine) {\n        var newStartPoint = pointForCommand(\n          resultCommands[resultCommands.length - 1]\n        );\n        resultCommands.push([\"Z\"]);\n        adjustCommand(resultCommands[0], newStartPoint);\n      }\n    } else {\n      resultCommands = commands;\n    }\n    return resultCommands.reduce(function(str, c) {\n      return str + c.join(\" \") + \" \";\n    }, \"\");\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number | null} [strokeWidth]\n   */\n  drawLine(x1, y1, x2, y2, lineColor = \"#a8a8a8\", dashArray = 0, strokeWidth = null, strokeLineCap = \"butt\") {\n    const w = this.w;\n    const line = w.dom.Paper.line().attr({\n      x1,\n      y1,\n      x2,\n      y2,\n      stroke: lineColor,\n      \"stroke-dasharray\": dashArray,\n      \"stroke-width\": strokeWidth,\n      \"stroke-linecap\": strokeLineCap\n    });\n    return line;\n  }\n  /**\n   * @param {number | null} [strokeWidth]\n   * @param {string | null} [strokeColor]\n   */\n  drawRect(x1 = 0, y1 = 0, x2 = 0, y2 = 0, radius = 0, color = \"#fefefe\", opacity = 1, strokeWidth = null, strokeColor = null, strokeDashArray = 0) {\n    const w = this.w;\n    const rect = w.dom.Paper.rect();\n    rect.attr({\n      x: x1,\n      y: y1,\n      width: x2 > 0 ? x2 : 0,\n      height: y2 > 0 ? y2 : 0,\n      rx: radius,\n      ry: radius,\n      opacity,\n      \"stroke-width\": strokeWidth !== null ? strokeWidth : 0,\n      stroke: strokeColor !== null ? strokeColor : \"none\",\n      \"stroke-dasharray\": strokeDashArray\n    });\n    rect.node.setAttribute(\"fill\", color);\n    return rect;\n  }\n  /**\n   * @param {string} polygonString\n   */\n  drawPolygon(polygonString, stroke = \"#e1e1e1\", strokeWidth = 1, fill = \"none\") {\n    const w = this.w;\n    const polygon = w.dom.Paper.polygon(polygonString).attr({\n      fill,\n      stroke,\n      \"stroke-width\": strokeWidth\n    });\n    return polygon;\n  }\n  /**\n   * @param {number} radius\n   * @param {Record<string, any> | null} attrs\n   */\n  drawCircle(radius, attrs = null) {\n    const w = this.w;\n    if (radius < 0) radius = 0;\n    const c = w.dom.Paper.circle(radius * 2);\n    if (attrs !== null) {\n      c.attr(attrs);\n    }\n    return c;\n  }\n  /** @param {{ d?: string, stroke?: string, strokeWidth?: number, fill: any, fillOpacity?: number, strokeOpacity?: number, classes?: any, strokeLinecap?: any, strokeDashArray?: number }} opts */\n  drawPath({\n    d = \"\",\n    stroke = \"#a8a8a8\",\n    strokeWidth = 1,\n    fill,\n    fillOpacity = 1,\n    strokeOpacity = 1,\n    classes,\n    strokeLinecap = null,\n    strokeDashArray = 0\n  }) {\n    const w = this.w;\n    if (strokeLinecap === null) {\n      strokeLinecap = w.config.stroke.lineCap;\n    }\n    if (d.indexOf(\"undefined\") > -1 || d.indexOf(\"NaN\") > -1) {\n      d = `M 0 ${w.layout.gridHeight}`;\n    }\n    const p = w.dom.Paper.path(d).attr({\n      fill,\n      \"fill-opacity\": fillOpacity,\n      stroke,\n      \"stroke-opacity\": strokeOpacity,\n      \"stroke-linecap\": strokeLinecap,\n      \"stroke-width\": strokeWidth,\n      \"stroke-dasharray\": strokeDashArray,\n      class: classes\n    });\n    return p;\n  }\n  /**\n   * @param {Record<string, any> | null} attrs\n   */\n  group(attrs = null) {\n    const w = this.w;\n    const g = w.dom.Paper.group();\n    if (attrs !== null) {\n      g.attr(attrs);\n    }\n    return g;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  move(x, y) {\n    const move = [\"M\", x, y].join(\" \");\n    return move;\n  }\n  /**\n   * @param {number | null} x\n   * @param {number | null} y\n   * @param {string | null} hORv\n   * @returns {string}\n   */\n  line(x, y, hORv = null) {\n    if (hORv === \"H\") return [\" H\", x].join(\" \");\n    if (hORv === \"V\") return [\" V\", y].join(\" \");\n    return [\" L\", x, y].join(\" \");\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number} x\n   * @param {number} y\n   */\n  curve(x1, y1, x2, y2, x, y) {\n    const curve = [\"C\", x1, y1, x2, y2, x, y].join(\" \");\n    return curve;\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x\n   * @param {number} y\n   */\n  quadraticCurve(x1, y1, x, y) {\n    const curve = [\"Q\", x1, y1, x, y].join(\" \");\n    return curve;\n  }\n  /**\n   * @param {number} rx\n   * @param {number} ry\n   * @param {number} axisRotation\n   * @param {number} largeArcFlag\n   * @param {number} sweepFlag\n   * @param {number} x\n   * @param {number} y\n   */\n  arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y, relative = false) {\n    let coord = \"A\";\n    if (relative) coord = \"a\";\n    const arc = [\n      coord,\n      rx,\n      ry,\n      axisRotation,\n      largeArcFlag,\n      sweepFlag,\n      x,\n      y\n    ].join(\" \");\n    return arc;\n  }\n  /**\n   * @memberof Graphics\n   * @param {Record<string, any>} opts\n   *  i = series's index\n   *  realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating \"i\" may change in loops, but realIndex doesn't\n   *  pathFrom = existing pathFrom to animateTo\n   *  pathTo = new Path to which d attr will be animated from pathFrom to pathTo\n   *  stroke = line Color\n   *  strokeWidth = width of path Line\n   *  fill = it can be gradient, single color, pattern or image\n   *  animationDelay = how much to delay when starting animation (in milliseconds)\n   *  dataChangeSpeed = for dynamic animations, when data changes\n   *  className = class attribute to add\n   *  scrollMorph = this data-change morph is a streaming scroll (see StreamScroll);\n   *                defaults the morph easing to linear so the slide is constant-velocity\n   * @return {any} svg.js path object\n   **/\n  renderPaths({\n    j,\n    realIndex,\n    pathFrom,\n    pathTo,\n    pathToInterp,\n    stroke,\n    strokeWidth,\n    strokeLinecap,\n    fill,\n    animationDelay,\n    initialSpeed,\n    dataChangeSpeed,\n    className,\n    chartType,\n    shouldClipToGrid = true,\n    bindEventsOnPaths = true,\n    drawShadow = true,\n    drawMask = null,\n    scrollMorph = false\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const anim = new Animations(this.w, (_a = this.ctx) != null ? _a : void 0);\n    const initialAnim = this.w.config.chart.animations.enabled;\n    const dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    if (pathFrom && pathFrom.startsWith(\"M 0 0 \") && pathTo) {\n      const moveCommand = pathTo.match(/^M\\s+[\\d.-]+\\s+[\\d.-]+/);\n      if (moveCommand) {\n        pathFrom = pathFrom.replace(/^M\\s+0\\s+0/, moveCommand[0]);\n      }\n    }\n    let d;\n    const shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate);\n    const isDrawableSeries = typeof className === \"string\" && (className.indexOf(\"apexcharts-line\") > -1 || className.indexOf(\"apexcharts-area\") > -1 || className.indexOf(\"apexcharts-rangeArea\") > -1 || className.indexOf(\"apexcharts-radar\") > -1);\n    const useDrawMode = !!(initialAnim && !w.globals.resized && !w.globals.dataChanged && isDrawableSeries);\n    const largeThreshold = (_b = w.config.chart.animations.largeDatasetThreshold) != null ? _b : 0;\n    const bulkRender = !!(shouldAnimate && !useDrawMode && largeThreshold > 0 && w.globals.dataPoints > largeThreshold);\n    const isCandleOrBox = chartType === \"candlestick\" || chartType === \"boxPlot\";\n    const fadeOnDataChange = !!(isCandleOrBox && shouldAnimate && !useDrawMode && w.globals.dataChanged);\n    const revealViaFade = bulkRender || fadeOnDataChange;\n    if (shouldAnimate && !useDrawMode && !revealViaFade) {\n      d = pathFrom;\n    } else {\n      d = pathTo;\n      if (!shouldAnimate) {\n        w.globals.animationEnded = true;\n      }\n    }\n    const strokeDashArrayOpt = w.config.stroke.dashArray;\n    let strokeDashArray = 0;\n    if (Array.isArray(strokeDashArrayOpt)) {\n      strokeDashArray = strokeDashArrayOpt[realIndex];\n    } else {\n      strokeDashArray = w.config.stroke.dashArray;\n    }\n    const el = this.drawPath({\n      d,\n      stroke,\n      strokeWidth,\n      fill,\n      fillOpacity: 1,\n      classes: className,\n      strokeLinecap,\n      strokeDashArray\n    });\n    el.attr(\"index\", realIndex);\n    if (shouldClipToGrid) {\n      if (chartType === \"bar\" && !w.globals.isBarHorizontal || w.globals.comboCharts) {\n        el.attr({\n          \"clip-path\": `url(#gridRectBarMask${w.globals.cuid})`\n        });\n      } else {\n        el.attr({\n          \"clip-path\": `url(#gridRectMask${w.globals.cuid})`\n        });\n      }\n    }\n    if (w.config.chart.dropShadow.enabled && drawShadow) {\n      filters.dropShadow(el, w.config.chart.dropShadow, realIndex);\n    }\n    if (bindEventsOnPaths) {\n      el.node.addEventListener(\"mouseenter\", this.pathMouseEnter.bind(this, el));\n      el.node.addEventListener(\"mouseleave\", this.pathMouseLeave.bind(this, el));\n      el.node.addEventListener(\"mousedown\", this.pathMouseDown.bind(this, el));\n    }\n    el.attr({\n      pathTo,\n      pathFrom\n    });\n    const defaultAnimateOpts = {\n      el,\n      j,\n      realIndex,\n      pathFrom,\n      pathTo,\n      pathToInterp,\n      fill,\n      strokeWidth,\n      delay: animationDelay,\n      scrollMorph\n    };\n    if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n      if (useDrawMode) {\n        const drawSpeed = initialSpeed * 2;\n        const isFill = stroke === \"none\" || strokeWidth === 0;\n        const seriesCount = w.seriesData.series.length;\n        const isLast = w.globals.comboCharts ? true : realIndex === seriesCount - 1;\n        anim.animateDraw(el, {\n          realIndex,\n          j,\n          isFill,\n          isLast,\n          speed: drawSpeed,\n          delay: 0,\n          mask: drawMask\n        });\n      } else if (!revealViaFade) {\n        anim.animatePathsGradually(__spreadProps(__spreadValues({}, defaultAnimateOpts), {\n          speed: initialSpeed\n        }));\n      }\n    } else {\n      if ((w.globals.resized || !w.globals.dataChanged) && !revealViaFade) {\n        anim.showDelayedElements();\n      }\n    }\n    if (w.globals.dataChanged && dynamicAnim && shouldAnimate && !revealViaFade) {\n      anim.animatePathsGradually(__spreadProps(__spreadValues({}, defaultAnimateOpts), {\n        speed: dataChangeSpeed\n      }));\n    }\n    if (revealViaFade) {\n      anim.revealBulk(el);\n    }\n    return el;\n  }\n  /**\n   * @param {string} style\n   * @param {number} width\n   * @param {number} height\n   */\n  drawPattern(style, width, height, stroke = \"#a8a8a8\", strokeWidth = 0) {\n    const w = this.w;\n    const p = w.dom.Paper.pattern(width, height, (add) => {\n      if (style === \"horizontalLines\") {\n        add.line(0, 0, height, 0).stroke({ color: stroke, width: strokeWidth + 1 });\n      } else if (style === \"verticalLines\") {\n        add.line(0, 0, 0, width).stroke({ color: stroke, width: strokeWidth + 1 });\n      } else if (style === \"slantedLines\") {\n        add.line(0, 0, width, height).stroke({ color: stroke, width: strokeWidth });\n      } else if (style === \"squares\") {\n        add.rect(width, height).fill(\"none\").stroke({ color: stroke, width: strokeWidth });\n      } else if (style === \"circles\") {\n        add.circle(width).fill(\"none\").stroke({ color: stroke, width: strokeWidth });\n      }\n    });\n    return p;\n  }\n  /**\n   * @param {string} style\n   * @param {string} gfrom\n   * @param {string} gto\n   * @param {number} opacityFrom\n   * @param {number} opacityTo\n   * @param {number | null} [size]\n   * @param {number[] | null} stops\n   * @param {any[]} colorStops\n   * @param {number} [i]\n   * @param {boolean} [verticalUserSpace] anchor a vertical gradient to the plot\n   *   area rather than to each path's own bounding box. Needed when one series\n   *   is drawn as several path elements (nulls split it into segments): with\n   *   the default objectBoundingBox each segment resolves the same offset\n   *   against a different bbox, so the color transition lands on a different\n   *   value in every segment.\n   */\n  drawGradient(style, gfrom, gto, opacityFrom, opacityTo, size = null, stops = null, colorStops = [], i = 0, verticalUserSpace = false) {\n    const w = this.w;\n    let g;\n    if (gfrom.length < 9 && gfrom.indexOf(\"#\") === 0) {\n      gfrom = Utils$1.hexToRgba(gfrom, opacityFrom);\n    }\n    if (gto.length < 9 && gto.indexOf(\"#\") === 0) {\n      gto = Utils$1.hexToRgba(gto, opacityTo);\n    }\n    let stop1 = 0;\n    let stop2 = 1;\n    let stop3 = 1;\n    let stop4 = null;\n    if (stops !== null) {\n      stop1 = typeof stops[0] !== \"undefined\" ? stops[0] / 100 : 0;\n      stop2 = typeof stops[1] !== \"undefined\" ? stops[1] / 100 : 1;\n      stop3 = typeof stops[2] !== \"undefined\" ? stops[2] / 100 : 1;\n      stop4 = typeof stops[3] !== \"undefined\" ? stops[3] / 100 : null;\n    }\n    const radial = !!(w.config.chart.type === \"donut\" || w.config.chart.type === \"pie\" || w.config.chart.type === \"polarArea\" || w.config.chart.type === \"bubble\");\n    if (!colorStops || colorStops.length === 0) {\n      g = w.dom.Paper.gradient(\n        radial ? \"radial\" : \"linear\",\n        (add) => {\n          add.stop(stop1, gfrom, opacityFrom);\n          add.stop(stop2, gto, opacityTo);\n          add.stop(stop3, gto, opacityTo);\n          if (stop4 !== null) {\n            add.stop(stop4, gfrom, opacityFrom);\n          }\n        }\n      );\n    } else {\n      g = w.dom.Paper.gradient(\n        radial ? \"radial\" : \"linear\",\n        (add) => {\n          const gradientStops = Array.isArray(colorStops[i]) ? colorStops[i] : Array.isArray(colorStops[0]) ? colorStops[0] || [] : colorStops;\n          gradientStops.forEach((s) => {\n            add.stop(s.offset / 100, s.color, s.opacity);\n          });\n        }\n      );\n    }\n    if (!radial) {\n      if (style === \"vertical\") {\n        if (verticalUserSpace) {\n          g.attr({ gradientUnits: \"userSpaceOnUse\" });\n          g.from(0, 0).to(0, w.layout.gridHeight);\n        } else {\n          g.from(0, 0).to(0, 1);\n        }\n      } else if (style === \"diagonal\") {\n        g.from(0, 0).to(1, 1);\n      } else if (style === \"horizontal\") {\n        g.from(0, 1).to(1, 1);\n      } else if (style === \"diagonal2\") {\n        g.from(1, 0).to(0, 1);\n      }\n    } else {\n      const offx = w.layout.gridWidth / 2;\n      const offy = w.layout.gridHeight / 2;\n      if (w.config.chart.type !== \"bubble\") {\n        g.attr({\n          gradientUnits: \"userSpaceOnUse\",\n          cx: offx,\n          cy: offy,\n          r: size\n        });\n      } else {\n        g.attr({\n          cx: 0.5,\n          cy: 0.5,\n          r: 0.8,\n          fx: 0.2,\n          fy: 0.2\n        });\n      }\n    }\n    return g;\n  }\n  /** @param {{ text: any, maxWidth: any, fontSize: any, fontFamily?: any }} opts */\n  getTextBasedOnMaxWidth({ text, maxWidth, fontSize, fontFamily }) {\n    const tRects = this.getTextRects(text, fontSize, fontFamily, \"\");\n    const wordWidth = tRects.width / text.length;\n    const wordsBasedOnWidth = Math.floor(maxWidth / wordWidth);\n    if (maxWidth < tRects.width) {\n      return text.slice(0, wordsBasedOnWidth - 3) + \"...\";\n    }\n    return text;\n  }\n  /**\n   * @param {{ x: any, y: any, text: any, textAnchor?: any, fontSize?: any, fontFamily?: any, fontWeight?: any, foreColor?: any, opacity?: any, maxWidth?: any, cssClass?: string, isPlainText?: boolean, dominantBaseline?: string }} opts\n   */\n  drawText({\n    x,\n    y,\n    text,\n    textAnchor,\n    fontSize,\n    fontFamily,\n    fontWeight,\n    foreColor,\n    opacity,\n    maxWidth,\n    cssClass = \"\",\n    isPlainText = true,\n    dominantBaseline = \"auto\"\n  }) {\n    const w = this.w;\n    if (typeof text === \"undefined\") text = \"\";\n    let truncatedText = text;\n    if (!textAnchor) {\n      textAnchor = \"start\";\n    }\n    if (!foreColor || !foreColor.length) {\n      foreColor = w.config.chart.foreColor;\n    }\n    fontFamily = fontFamily || w.config.chart.fontFamily;\n    fontSize = fontSize || \"11px\";\n    fontWeight = fontWeight || \"regular\";\n    const commonProps = {\n      maxWidth,\n      fontSize,\n      fontFamily\n    };\n    let elText;\n    if (Array.isArray(text)) {\n      elText = w.dom.Paper.text((add) => {\n        for (let i = 0; i < text.length; i++) {\n          truncatedText = text[i];\n          if (maxWidth) {\n            truncatedText = this.getTextBasedOnMaxWidth(__spreadValues({\n              text: text[i]\n            }, commonProps));\n          }\n          i === 0 ? add.tspan(truncatedText) : add.tspan(truncatedText).newLine();\n        }\n      });\n    } else {\n      if (maxWidth) {\n        truncatedText = this.getTextBasedOnMaxWidth(__spreadValues({\n          text\n        }, commonProps));\n      }\n      elText = isPlainText ? w.dom.Paper.plain(text) : (\n        /**\n         * @param {any} add\n         */\n        w.dom.Paper.text((add) => add.tspan(truncatedText))\n      );\n    }\n    elText.attr({\n      x,\n      y,\n      \"text-anchor\": textAnchor,\n      \"dominant-baseline\": dominantBaseline,\n      \"font-size\": fontSize,\n      \"font-family\": fontFamily,\n      \"font-weight\": fontWeight,\n      fill: foreColor,\n      class: \"apexcharts-text \" + cssClass\n    });\n    elText.node.style.fontFamily = fontFamily;\n    elText.node.style.opacity = opacity;\n    return elText;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {string} type\n   * @param {number} size\n   */\n  getMarkerPath(x, y, type, size) {\n    const CROSS_SHRINK = 1.4;\n    const PLUS_SHRINK = 1.12;\n    const STAR_GROW = 1.15;\n    const SPARKLE_SHRINK = 1.1;\n    const SQUARE_SHRINK = 1.125;\n    const DIAMOND_GROW = 1.05;\n    const LINE_SHRINK = 1.1;\n    const CIRCLE_DIAMETER = 2;\n    let d = \"\";\n    switch (type) {\n      case \"cross\":\n        size = size / CROSS_SHRINK;\n        d = `M ${x - size} ${y - size} L ${x + size} ${y + size}  M ${x - size} ${y + size} L ${x + size} ${y - size}`;\n        break;\n      case \"plus\":\n        size = size / PLUS_SHRINK;\n        d = `M ${x - size} ${y} L ${x + size} ${y}  M ${x} ${y - size} L ${x} ${y + size}`;\n        break;\n      case \"star\":\n      case \"sparkle\": {\n        let points = 5;\n        size = size * STAR_GROW;\n        if (type === \"sparkle\") {\n          size = size / SPARKLE_SHRINK;\n          points = 4;\n        }\n        const step = Math.PI / points;\n        for (let i = 0; i <= 2 * points; i++) {\n          const angle = i * step;\n          const radius = i % 2 === 0 ? size : size / 2;\n          const xPos = x + radius * Math.sin(angle);\n          const yPos = y - radius * Math.cos(angle);\n          d += (i === 0 ? \"M\" : \"L\") + xPos + \",\" + yPos;\n        }\n        d += \"Z\";\n        break;\n      }\n      case \"triangle\":\n        d = `M ${x} ${y - size} \n             L ${x + size} ${y + size} \n             L ${x - size} ${y + size} \n             Z`;\n        break;\n      case \"square\":\n      case \"rect\":\n        size = size / SQUARE_SHRINK;\n        d = `M ${x - size} ${y - size} \n           L ${x + size} ${y - size} \n           L ${x + size} ${y + size} \n           L ${x - size} ${y + size} \n           Z`;\n        break;\n      case \"diamond\":\n        size = size * DIAMOND_GROW;\n        d = `M ${x} ${y - size} \n             L ${x + size} ${y} \n             L ${x} ${y + size} \n             L ${x - size} ${y} \n            Z`;\n        break;\n      case \"line\":\n        size = size / LINE_SHRINK;\n        d = `M ${x - size} ${y} \n           L ${x + size} ${y}`;\n        break;\n      case \"circle\":\n      default:\n        size = size * CIRCLE_DIAMETER;\n        d = `M ${x}, ${y} \n           m -${size / 2}, 0 \n           a ${size / 2},${size / 2} 0 1,0 ${size},0 \n           a ${size / 2},${size / 2} 0 1,0 -${size},0`;\n        break;\n    }\n    return d;\n  }\n  /**\n   * @param {number} x - The x-coordinate of the marker\n   * @param {number} y - The y-coordinate of the marker\n   * @param {string} type - Marker shape type\n   * @param {number} size - The size of the marker\n   * @param {Record<string, any>} opts - The options for the marker\n   * @returns {any} The created marker.\n   */\n  drawMarkerShape(x, y, type, size, opts) {\n    const path = this.drawPath({\n      d: this.getMarkerPath(x, y, type, size),\n      stroke: opts.pointStrokeColor,\n      strokeDashArray: opts.pointStrokeDashArray,\n      strokeWidth: opts.pointStrokeWidth,\n      fill: opts.pointFillColor,\n      fillOpacity: opts.pointFillOpacity,\n      strokeOpacity: opts.pointStrokeOpacity\n    });\n    path.attr({\n      cx: x,\n      cy: y,\n      shape: opts.shape,\n      class: opts.class ? opts.class : \"\"\n    });\n    return path;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {Record<string, any>} opts\n   */\n  drawMarker(x, y, opts) {\n    x = x || 0;\n    let size = opts.pSize || 0;\n    if (!Utils$1.isNumber(y)) {\n      size = 0;\n      y = 0;\n    }\n    return this.drawMarkerShape(x, y, opts == null ? void 0 : opts.shape, size, __spreadValues(__spreadValues({}, opts), opts.shape === \"line\" || opts.shape === \"plus\" || opts.shape === \"cross\" ? {\n      pointStrokeColor: opts.pointFillColor,\n      pointStrokeOpacity: opts.pointFillOpacity\n    } : {}));\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} [e]\n   */\n  pathMouseEnter(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    if (typeof w.config.chart.events.dataPointMouseEnter === \"function\") {\n      w.config.chart.events.dataPointMouseEnter(e, this.ctx, {\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    Graphics._fireEvent(w, \"dataPointMouseEnter\", [\n      e,\n      this.ctx,\n      { seriesIndex: i, dataPointIndex: j, w }\n    ]);\n    if (w.config.states.active.filter.type !== \"none\") {\n      if (path.node.getAttribute(\"selected\") === \"true\") {\n        return;\n      }\n    }\n    if (w.config.states.hover.filter.type !== \"none\") {\n      if (!w.interact.isTouchDevice) {\n        const hoverFilter = w.config.states.hover.filter;\n        filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value);\n      }\n    }\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} [e]\n   */\n  pathMouseLeave(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    if (typeof w.config.chart.events.dataPointMouseLeave === \"function\") {\n      w.config.chart.events.dataPointMouseLeave(e, this.ctx, {\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    Graphics._fireEvent(w, \"dataPointMouseLeave\", [\n      e,\n      this.ctx,\n      { seriesIndex: i, dataPointIndex: j, w }\n    ]);\n    if (w.config.states.active.filter.type !== \"none\") {\n      if (path.node.getAttribute(\"selected\") === \"true\") {\n        return;\n      }\n    }\n    if (w.config.states.hover.filter.type !== \"none\") {\n      filters.getDefaultFilter(path, i);\n    }\n  }\n  /**\n   * Clear every selected data point (single-select mode): reset the selection\n   * array and restore the default filter on all series path/circle/rect nodes.\n   * NOTE: preserves the original behavior of passing the clicked series index\n   * `i` to getDefaultFilter for every element (not each element's own index).\n   * @param {any} filters @param {number} i\n   */\n  _clearAllDataPointSelections(filters, i) {\n    const w = this.w;\n    w.interact.selectedDataPoints = [];\n    const elPaths = w.dom.Paper.find(\n      \".apexcharts-series path:not(.apexcharts-decoration-element)\"\n    );\n    const elCircles = w.dom.Paper.find(\n      \".apexcharts-series circle:not(.apexcharts-decoration-element), .apexcharts-series rect:not(.apexcharts-decoration-element)\"\n    );\n    const deSelect = (els) => {\n      Array.prototype.forEach.call(els, (el) => {\n        el.node.setAttribute(\"selected\", \"false\");\n        filters.getDefaultFilter(el, i);\n      });\n    };\n    deSelect(elPaths);\n    deSelect(elCircles);\n  }\n  /**\n   * Toggle the selected state of a single data point. Mutates\n   * `w.interact.selectedDataPoints` and the path's `selected` attribute,\n   * honoring single- vs multi-select mode. Returns the new selected flag.\n   * @param {any} path @param {any} filters @param {number} i @param {number} j\n   * @returns {'true' | 'false'}\n   */\n  _togglePointSelection(path, filters, i, j) {\n    const w = this.w;\n    if (path.node.getAttribute(\"selected\") === \"true\") {\n      path.node.setAttribute(\"selected\", \"false\");\n      const index = w.interact.selectedDataPoints[i].indexOf(j);\n      if (index > -1) {\n        w.interact.selectedDataPoints[i].splice(index, 1);\n      }\n      return \"false\";\n    }\n    if (!w.config.states.active.allowMultipleDataPointsSelection && w.interact.selectedDataPoints.length > 0) {\n      this._clearAllDataPointSelections(filters, i);\n    }\n    path.node.setAttribute(\"selected\", \"true\");\n    if (typeof w.interact.selectedDataPoints[i] === \"undefined\") {\n      w.interact.selectedDataPoints[i] = [];\n    }\n    w.interact.selectedDataPoints[i].push(j);\n    return \"true\";\n  }\n  /**\n   * Apply the active / hover / default state filter after a selection toggle,\n   * matching the original inline branching.\n   * @param {any} path @param {any} filters @param {number} i\n   * @param {'true' | 'false'} selected\n   */\n  _applyPointSelectionFilter(path, filters, i, selected) {\n    const w = this.w;\n    if (selected === \"true\") {\n      const activeFilter = w.config.states.active.filter;\n      if (activeFilter !== \"none\") {\n        filters.applyFilter(path, i, activeFilter.type, activeFilter.value);\n      } else {\n        if (w.config.states.hover.filter !== \"none\") {\n          if (!w.interact.isTouchDevice) {\n            const hoverFilter = w.config.states.hover.filter;\n            filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value);\n          }\n        }\n      }\n    } else {\n      if (w.config.states.active.filter.type !== \"none\") {\n        if (w.config.states.hover.filter.type !== \"none\" && !w.interact.isTouchDevice) {\n          const hoverFilter = w.config.states.hover.filter;\n          filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value);\n        } else {\n          filters.getDefaultFilter(path, i);\n        }\n      }\n    }\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} e\n   */\n  pathMouseDown(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    const link = w.config.chart.link;\n    const crossfilterClick = !!(link && (typeof link.dimension === \"function\" || link.enabled));\n    if (!crossfilterClick) {\n      const selected = this._togglePointSelection(path, filters, i, j);\n      this._applyPointSelectionFilter(path, filters, i, selected);\n    }\n    if (typeof w.config.chart.events.dataPointSelection === \"function\") {\n      w.config.chart.events.dataPointSelection(e, this.ctx, {\n        selectedDataPoints: w.interact.selectedDataPoints,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    if (e) {\n      Graphics._fireEvent(w, \"dataPointSelection\", [\n        e,\n        this.ctx,\n        {\n          selectedDataPoints: w.interact.selectedDataPoints,\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        }\n      ]);\n    }\n  }\n  /**\n   * @param {any} el\n   * @returns {{ x: number, y: number }}\n   */\n  rotateAroundCenter(el) {\n    let coord = (\n      /** @type {any} */\n      {}\n    );\n    if (el && typeof el.getBBox === \"function\") {\n      coord = el.getBBox();\n    }\n    const x = coord.x + coord.width / 2;\n    const y = coord.y + coord.height / 2;\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * Sets up event delegation on a parent group element.\n   * Uses mouseover/mouseout (which bubble) to simulate mouseenter/mouseleave\n   * on matching child elements, reducing per-element listener overhead.\n   * @param {any} parentGroup\n   * @param {string} targetSelector\n   */\n  setupEventDelegation(parentGroup, targetSelector) {\n    let currentHovered = null;\n    parentGroup.node.addEventListener(\"mouseover\", (e) => {\n      const targetNode = Graphics._findDelegateTarget(\n        e.target,\n        parentGroup.node,\n        targetSelector\n      );\n      if (!targetNode || targetNode === currentHovered) return;\n      if (currentHovered && /** @type {any} */\n      currentHovered.instance) {\n        this.pathMouseLeave(\n          /** @type {any} */\n          currentHovered.instance,\n          e\n        );\n      }\n      currentHovered = targetNode;\n      if (targetNode.instance) {\n        this.pathMouseEnter(targetNode.instance, e);\n      }\n    });\n    parentGroup.node.addEventListener(\"mouseout\", (e) => {\n      if (!currentHovered) return;\n      const relatedNode = e.relatedTarget ? Graphics._findDelegateTarget(\n        e.relatedTarget,\n        parentGroup.node,\n        targetSelector\n      ) : null;\n      if (relatedNode !== currentHovered) {\n        if (currentHovered && /** @type {any} */\n        currentHovered.instance) {\n          this.pathMouseLeave(\n            /** @type {any} */\n            currentHovered.instance,\n            e\n          );\n        }\n        currentHovered = null;\n      }\n    });\n    parentGroup.node.addEventListener(\"mousedown\", (e) => {\n      const targetNode = Graphics._findDelegateTarget(\n        e.target,\n        parentGroup.node,\n        targetSelector\n      );\n      if (targetNode && targetNode.instance) {\n        this.pathMouseDown(targetNode.instance, e);\n      }\n    });\n  }\n  // Fire a named event from w.globals.events without requiring a ctx reference.\n  // Mirrors Events.fireEvent() but reads the registry directly from w so that\n  // pathMouseEnter/Leave/Down work even when this.ctx is null (Graphics instances\n  // created without a ctx arg for drawing-only use cases).\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {string} name\n   * @param {any[]} args\n   */\n  static _fireEvent(w, name2, args) {\n    const evs = w.globals.events;\n    if (!evs || !Object.prototype.hasOwnProperty.call(evs, name2)) return;\n    const handlers = (\n      /** @type {Record<string,any>} */\n      evs[name2]\n    );\n    for (let i = 0; i < handlers.length; i++) {\n      handlers[i].apply(null, args);\n    }\n  }\n  /**\n   * @param {any} node\n   * @param {Record<string, any>} boundary\n   * @param {string} selector\n   */\n  static _findDelegateTarget(node, boundary, selector) {\n    while (node && node !== boundary && node !== document) {\n      if (node.matches && node.matches(selector)) return node;\n      node = node.parentNode;\n    }\n    return null;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} attrs\n   */\n  static setAttrs(el, attrs) {\n    for (const key in attrs) {\n      if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n        el.setAttribute(key, attrs[key]);\n      }\n    }\n  }\n  /**\n   * @param {string} text\n   * @param {string} fontSize\n   * @param {string | null | undefined} [fontFamily]\n   * @param {string} [transform]\n   * @returns {{ width: number, height: number }}\n   */\n  getTextRects(text, fontSize, fontFamily, transform, useBBox = true) {\n    const w = this.w;\n    const cacheKey = [text, fontSize, fontFamily, transform, useBBox].join(\"\\0\");\n    const cache = w.globals.textRectsCache;\n    if (cache && cache.has(cacheKey)) {\n      return (\n        /** @type {{ width: number, height: number }} */\n        cache.get(cacheKey)\n      );\n    }\n    const virtualText = this.drawText({\n      x: -200,\n      y: -200,\n      text,\n      textAnchor: \"start\",\n      fontSize,\n      fontFamily,\n      foreColor: \"#fff\",\n      opacity: 0\n    });\n    if (transform) {\n      virtualText.attr(\"transform\", transform);\n    }\n    w.dom.Paper.add(virtualText);\n    let rect = virtualText.bbox();\n    const bboxY = rect.y;\n    if (!useBBox) {\n      rect = virtualText.node.getBoundingClientRect();\n    }\n    virtualText.remove();\n    const result = {\n      width: rect.width,\n      height: rect.height,\n      // Offset from the text element's `y` (alphabetic baseline) to the\n      // bbox vertical center. For most fonts this is NEGATIVE (bbox center\n      // sits above the baseline because the ascender is taller than the\n      // descender). Use as: `text_y = desired_visual_center_y - centerOffset`.\n      // Only populated when useBBox=true (the default).\n      centerOffset: useBBox ? bboxY + rect.height / 2 - -200 : 0\n    };\n    if (cache) {\n      cache.set(cacheKey, result);\n    }\n    return result;\n  }\n  /**\n   * append ... to long text\n   * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg\n   * @memberof Graphics\n   * @param {Record<string, any>} textObj\n   * @param {string} textString\n   * @param {number} width\n   **/\n  placeTextWithEllipsis(textObj, textString, width) {\n    if (typeof textObj.getComputedTextLength !== \"function\") return;\n    textObj.textContent = textString;\n    if (textString.length > 0) {\n      if (textObj.getComputedTextLength() >= width / 1.1) {\n        for (let x = textString.length - 3; x > 0; x -= 3) {\n          if (textObj.getSubStringLength(0, x) <= width / 1.1) {\n            textObj.textContent = textString.substring(0, x) + \"...\";\n            return;\n          }\n        }\n        textObj.textContent = \".\";\n      }\n    }\n  }\n}\nclass Fill {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.opts = null;\n    this.seriesIndex = 0;\n    this.patternIDs = [];\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  clippedImgArea(params) {\n    const w = this.w;\n    const cnf = w.config;\n    const svgW = parseInt(String(w.layout.gridWidth), 10);\n    const svgH = parseInt(String(w.layout.gridHeight), 10);\n    const size = svgW > svgH ? svgW : svgH;\n    const fillImg = params.image;\n    let imgWidth = 0;\n    let imgHeight = 0;\n    if (typeof params.width === \"undefined\" && typeof params.height === \"undefined\") {\n      if (cnf.fill.image.width !== void 0 && cnf.fill.image.height !== void 0) {\n        imgWidth = cnf.fill.image.width + 1;\n        imgHeight = cnf.fill.image.height;\n      } else {\n        imgWidth = size + 1;\n        imgHeight = size;\n      }\n    } else {\n      imgWidth = params.width;\n      imgHeight = params.height;\n    }\n    const elPattern = BrowserAPIs.createElementNS(SVGNS$2, \"pattern\");\n    Graphics.setAttrs(elPattern, {\n      id: params.patternID,\n      patternUnits: params.patternUnits ? params.patternUnits : \"userSpaceOnUse\",\n      width: imgWidth + \"px\",\n      height: imgHeight + \"px\"\n    });\n    const elImage = BrowserAPIs.createElementNS(SVGNS$2, \"image\");\n    elPattern.appendChild(elImage);\n    const SVGLib = Environment.isBrowser() ? (\n      /** @type {any} */\n      window.SVG\n    ) : (\n      /** @type {any} */\n      global.SVG\n    );\n    elImage.setAttributeNS(SVGLib.xlink, \"href\", fillImg);\n    Graphics.setAttrs(elImage, {\n      x: 0,\n      y: 0,\n      preserveAspectRatio: \"none\",\n      width: imgWidth + \"px\",\n      height: imgHeight + \"px\"\n    });\n    elImage.style.opacity = params.opacity;\n    w.dom.elDefs.node.appendChild(elPattern);\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  getSeriesIndex(opts) {\n    const w = this.w;\n    const cType = w.config.chart.type;\n    if ((cType === \"bar\" || cType === \"rangeBar\") && w.config.plotOptions.bar.distributed || cType === \"heatmap\" || cType === \"treemap\") {\n      this.seriesIndex = opts.seriesNumber;\n    } else {\n      this.seriesIndex = opts.seriesNumber % w.seriesData.series.length;\n    }\n    return this.seriesIndex;\n  }\n  /**\n   * The y-axis window a series is plotted against. This is the space the\n   * threshold gradient is measured in, since that gradient spans the plot area.\n   *\n   * @param {number} realIndex\n   */\n  getSeriesAxisRange(realIndex) {\n    var _a, _b, _c;\n    const w = this.w;\n    const yaxisIndex = (_b = (_a = w.globals.seriesYAxisReverseMap) == null ? void 0 : _a[realIndex]) != null ? _b : 0;\n    return {\n      minY: Utils$1.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY,\n      maxY: Utils$1.isNumber(w.globals.maxYArr[realIndex]) ? w.globals.maxYArr[realIndex] : w.globals.maxY,\n      reversed: !!((_c = w.config.yaxis[yaxisIndex]) == null ? void 0 : _c.reversed)\n    };\n  }\n  /**\n   * Builds the two stops that split a series into an above- and a\n   * below-threshold color.\n   *\n   * The stops are painted into a vertical gradient anchored to the plot area\n   * (see Graphics.drawGradient's verticalUserSpace branch), so the boundary is\n   * positioned over the *axis* range. Deriving it from the data range instead\n   * puts the transition on the wrong value whenever the axis extends past the\n   * data, which is the common case: an explicit yaxis.min/max, a nice scale, or\n   * an axis shared with another series.\n   *\n   * @param {{ minY: number, maxY: number, reversed?: boolean }} axisRange\n   * @param {Record<string, any>} multiColorConfig\n   */\n  computeColorStops(axisRange, multiColorConfig) {\n    const w = this.w;\n    const { threshold, colorAboveThreshold, colorBelowThreshold } = multiColorConfig;\n    const { minY, maxY } = axisRange;\n    const span = maxY - minY;\n    let offset = span === 0 ? threshold > maxY ? 0 : 100 : (maxY - threshold) / span * 100;\n    if (axisRange.reversed) {\n      offset = 100 - offset;\n    }\n    offset = Math.max(0, Math.min(offset, 100));\n    const fillOpacity = Array.isArray(w.config.fill.opacity) ? w.config.fill.opacity[this.seriesIndex] : w.config.fill.opacity;\n    const above = {\n      offset,\n      color: colorAboveThreshold,\n      opacity: fillOpacity\n    };\n    const below = {\n      offset,\n      color: colorBelowThreshold,\n      opacity: fillOpacity\n    };\n    return axisRange.reversed ? [below, above] : [above, below];\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  fillPath(opts) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    this.opts = opts;\n    const cnf = this.w.config;\n    let pathFill;\n    let patternFill, gradientFill;\n    this.seriesIndex = this.getSeriesIndex(opts);\n    const drawMultiColorLine = cnf.plotOptions.line.colors.colorAboveThreshold && cnf.plotOptions.line.colors.colorBelowThreshold;\n    const fillColors = this.getFillColors();\n    let fillColor = fillColors[this.seriesIndex];\n    if (w.seriesData.seriesColors[this.seriesIndex] !== void 0) {\n      fillColor = w.seriesData.seriesColors[this.seriesIndex];\n    }\n    if (typeof fillColor === \"function\") {\n      fillColor = fillColor({\n        seriesIndex: this.seriesIndex,\n        dataPointIndex: opts.dataPointIndex,\n        value: opts.value,\n        w\n      });\n    }\n    const fillType = opts.fillType ? opts.fillType : this.getFillType(this.seriesIndex);\n    let fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity;\n    const useGradient = fillType === \"gradient\" || drawMultiColorLine;\n    if (opts.color) {\n      fillColor = opts.color;\n    }\n    const seriesItem = (\n      /** @type {Record<string,any>} */\n      w.config.series[this.seriesIndex]\n    );\n    if ((_b = (_a = seriesItem == null ? void 0 : seriesItem.data) == null ? void 0 : _a[opts.dataPointIndex]) == null ? void 0 : _b.fillColor) {\n      fillColor = (_d = (_c = seriesItem == null ? void 0 : seriesItem.data) == null ? void 0 : _c[opts.dataPointIndex]) == null ? void 0 : _d.fillColor;\n    }\n    if (!fillColor) {\n      fillColor = \"#fff\";\n      console.warn(\"undefined color - ApexCharts\");\n    }\n    if (opts.opacity !== void 0 && opts.opacity !== null) fillOpacity = opts.opacity;\n    let defaultColor = fillColor;\n    if (Utils$1.isCSSVariable(fillColor)) {\n      defaultColor = Utils$1.applyOpacityToColor(fillColor, fillOpacity);\n    } else if (fillColor.indexOf(\"rgb\") === -1) {\n      if (fillColor.indexOf(\"#\") === -1) {\n        defaultColor = fillColor;\n      } else if (fillColor.length < 9) {\n        defaultColor = Utils$1.hexToRgba(fillColor, fillOpacity);\n      }\n    } else {\n      if (fillColor.indexOf(\"rgba\") > -1) {\n        fillOpacity = Utils$1.getOpacityFromRGBA(fillColor);\n      } else {\n        defaultColor = Utils$1.hexToRgba(Utils$1.rgb2hex(fillColor), fillOpacity);\n      }\n    }\n    const resolvedFillColor = Utils$1.isCSSVariable(fillColor) ? Utils$1.getThemeColor(fillColor) : fillColor;\n    if (fillType === \"pattern\") {\n      patternFill = this.handlePatternFill({\n        fillConfig: opts.fillConfig,\n        patternFill,\n        fillColor: resolvedFillColor,\n        defaultColor\n      });\n    }\n    if (useGradient) {\n      const colorStops = cnf.fill.gradient.colorStops ? [...cnf.fill.gradient.colorStops] : [];\n      let type = cnf.fill.gradient.type;\n      if (drawMultiColorLine) {\n        colorStops[this.seriesIndex] = this.computeColorStops(\n          this.getSeriesAxisRange(this.seriesIndex),\n          cnf.plotOptions.line.colors\n        );\n        type = \"vertical\";\n      }\n      gradientFill = this.handleGradientFill({\n        type,\n        fillConfig: opts.fillConfig,\n        fillColor: resolvedFillColor,\n        fillOpacity,\n        colorStops,\n        i: this.seriesIndex,\n        // Threshold stops are positioned over the axis range, so the gradient\n        // has to be anchored to the plot area to match. This also keeps every\n        // segment of a null-split series on one shared coordinate space.\n        verticalUserSpace: drawMultiColorLine\n      });\n    }\n    if (fillType === \"image\") {\n      const imgSrc = cnf.fill.image.src;\n      const patternID = opts.patternID ? opts.patternID : \"\";\n      const patternKey = `pattern${w.globals.cuid}${opts.seriesNumber + 1}${patternID}`;\n      if (this.patternIDs.indexOf(patternKey) === -1) {\n        this.clippedImgArea({\n          opacity: fillOpacity,\n          image: Array.isArray(imgSrc) ? opts.seriesNumber < imgSrc.length ? imgSrc[opts.seriesNumber] : imgSrc[0] : imgSrc,\n          width: opts.width ? opts.width : void 0,\n          height: opts.height ? opts.height : void 0,\n          patternUnits: opts.patternUnits,\n          patternID: patternKey\n        });\n        this.patternIDs.push(patternKey);\n      }\n      pathFill = `url(#${patternKey})`;\n    } else if (useGradient) {\n      pathFill = gradientFill;\n    } else if (fillType === \"pattern\") {\n      pathFill = patternFill;\n    } else {\n      pathFill = defaultColor;\n    }\n    if (opts.solid) {\n      pathFill = defaultColor;\n    }\n    return pathFill;\n  }\n  /**\n   * @param {number} seriesIndex\n   */\n  getFillType(seriesIndex) {\n    const w = this.w;\n    if (Array.isArray(w.config.fill.type)) {\n      return w.config.fill.type[seriesIndex];\n    } else {\n      return w.config.fill.type;\n    }\n  }\n  getFillColors() {\n    const w = this.w;\n    const cnf = w.config;\n    const opts = this.opts;\n    let fillColors = [];\n    if (w.globals.comboCharts) {\n      if (\n        /** @type {Record<string,any>} */\n        w.config.series[this.seriesIndex].type === \"line\"\n      ) {\n        if (Array.isArray(w.globals.stroke.colors)) {\n          fillColors = w.globals.stroke.colors;\n        } else {\n          fillColors.push(w.globals.stroke.colors);\n        }\n      } else {\n        if (Array.isArray(w.globals.fill.colors)) {\n          fillColors = w.globals.fill.colors;\n        } else {\n          fillColors.push(w.globals.fill.colors);\n        }\n      }\n    } else {\n      if (cnf.chart.type === \"line\") {\n        if (Array.isArray(w.globals.stroke.colors)) {\n          fillColors = w.globals.stroke.colors;\n        } else {\n          fillColors.push(w.globals.stroke.colors);\n        }\n      } else {\n        if (Array.isArray(w.globals.fill.colors)) {\n          fillColors = w.globals.fill.colors;\n        } else {\n          fillColors.push(w.globals.fill.colors);\n        }\n      }\n    }\n    if (typeof opts.fillColors !== \"undefined\") {\n      fillColors = [];\n      if (Array.isArray(opts.fillColors)) {\n        fillColors = opts.fillColors.slice();\n      } else {\n        fillColors.push(opts.fillColors);\n      }\n    }\n    return fillColors;\n  }\n  /** @param {{fillConfig: any, patternFill: any, fillColor: any, defaultColor: any}} opts */\n  handlePatternFill({ fillConfig, patternFill, fillColor, defaultColor }) {\n    let fillCnf = this.w.config.fill;\n    if (fillConfig) {\n      fillCnf = fillConfig;\n    }\n    const opts = this.opts;\n    const graphics = new Graphics(this.w);\n    const patternStrokeWidth = Array.isArray(fillCnf.pattern.strokeWidth) ? fillCnf.pattern.strokeWidth[this.seriesIndex] : fillCnf.pattern.strokeWidth;\n    const patternLineColor = fillColor;\n    if (Array.isArray(fillCnf.pattern.style)) {\n      if (typeof fillCnf.pattern.style[opts.seriesNumber] !== \"undefined\") {\n        const pf = graphics.drawPattern(\n          fillCnf.pattern.style[opts.seriesNumber],\n          fillCnf.pattern.width,\n          fillCnf.pattern.height,\n          patternLineColor,\n          patternStrokeWidth\n        );\n        patternFill = pf;\n      } else {\n        patternFill = defaultColor;\n      }\n    } else {\n      patternFill = graphics.drawPattern(\n        fillCnf.pattern.style,\n        fillCnf.pattern.width,\n        fillCnf.pattern.height,\n        patternLineColor,\n        patternStrokeWidth\n      );\n    }\n    return patternFill;\n  }\n  handleGradientFill({\n    type,\n    fillColor,\n    fillOpacity,\n    fillConfig,\n    colorStops,\n    i,\n    verticalUserSpace = false\n  }) {\n    let fillCnf = this.w.config.fill;\n    if (fillConfig) {\n      fillCnf = __spreadValues(__spreadValues({}, fillCnf), fillConfig);\n    }\n    const opts = this.opts;\n    const graphics = new Graphics(this.w);\n    const utils = new Utils$1();\n    type = type || fillCnf.gradient.type;\n    let gradientFrom = fillColor;\n    let gradientTo;\n    let opacityFrom = fillCnf.gradient.opacityFrom === void 0 ? fillOpacity : Array.isArray(fillCnf.gradient.opacityFrom) ? fillCnf.gradient.opacityFrom[i] : fillCnf.gradient.opacityFrom;\n    if (gradientFrom.indexOf(\"rgba\") > -1) {\n      opacityFrom = Utils$1.getOpacityFromRGBA(gradientFrom);\n    }\n    let opacityTo = fillCnf.gradient.opacityTo === void 0 ? fillOpacity : Array.isArray(fillCnf.gradient.opacityTo) ? fillCnf.gradient.opacityTo[i] : fillCnf.gradient.opacityTo;\n    if (fillCnf.gradient.gradientToColors === void 0 || fillCnf.gradient.gradientToColors.length === 0) {\n      if (fillCnf.gradient.shade === \"dark\") {\n        gradientTo = utils.shadeColor(\n          parseFloat(fillCnf.gradient.shadeIntensity) * -1,\n          fillColor.indexOf(\"rgb\") > -1 ? Utils$1.rgb2hex(fillColor) : fillColor\n        );\n      } else {\n        gradientTo = utils.shadeColor(\n          parseFloat(fillCnf.gradient.shadeIntensity),\n          fillColor.indexOf(\"rgb\") > -1 ? Utils$1.rgb2hex(fillColor) : fillColor\n        );\n      }\n    } else {\n      if (fillCnf.gradient.gradientToColors[opts.seriesNumber]) {\n        const gToColor = fillCnf.gradient.gradientToColors[opts.seriesNumber];\n        gradientTo = gToColor;\n        if (gToColor.indexOf(\"rgba\") > -1) {\n          opacityTo = Utils$1.getOpacityFromRGBA(gToColor);\n        }\n      } else {\n        gradientTo = fillColor;\n      }\n    }\n    if (fillCnf.gradient.gradientFrom) {\n      gradientFrom = fillCnf.gradient.gradientFrom;\n    }\n    if (fillCnf.gradient.gradientTo) {\n      gradientTo = fillCnf.gradient.gradientTo;\n    }\n    if (fillCnf.gradient.inverseColors) {\n      const t = gradientFrom;\n      gradientFrom = gradientTo;\n      gradientTo = t;\n    }\n    if (gradientFrom.indexOf(\"rgb\") > -1) {\n      gradientFrom = Utils$1.rgb2hex(gradientFrom);\n    }\n    if (gradientTo.indexOf(\"rgb\") > -1) {\n      gradientTo = Utils$1.rgb2hex(gradientTo);\n    }\n    return graphics.drawGradient(\n      type,\n      gradientFrom,\n      gradientTo,\n      opacityFrom,\n      opacityTo,\n      opts.size,\n      fillCnf.gradient.stops,\n      colorStops,\n      i,\n      verticalUserSpace\n    );\n  }\n}\nconst OK_FILTER_TYPES = [\"none\", \"lighten\", \"darken\"];\nfunction seriesEmitter(ctx, graphics) {\n  const r = ctx && ctx.renderer;\n  return r && r.kind && r.kind !== \"svg\" ? r : graphics;\n}\nfunction computeMarkCount(w) {\n  const series = w.config.series || [];\n  const type = w.config.chart.type;\n  const scatterish = type === \"scatter\" || type === \"bubble\";\n  const markerSize = w.config.markers && w.config.markers.size;\n  const markersOn = Array.isArray(markerSize) ? markerSize.some((s) => s > 0) : (markerSize || 0) > 0;\n  const labelsOn = !!(w.config.dataLabels && w.config.dataLabels.enabled);\n  const isHeatmap = type === \"heatmap\";\n  let total = 0;\n  let maxLen = 0;\n  series.forEach((s) => {\n    const n = Array.isArray(s.data) ? s.data.length : 0;\n    if (n > maxLen) maxLen = n;\n    if (scatterish || markersOn || isHeatmap) total += n;\n    if (labelsOn) total += n;\n  });\n  const LARGE_D = 5e4;\n  if (maxLen >= LARGE_D) total = Math.max(total, maxLen);\n  return total;\n}\nfunction hasCanvasUnsupportedFeature(w) {\n  var _a, _b;\n  const fillType = w.config.fill && w.config.fill.type;\n  const isUnsupportedFill = (t) => t === \"pattern\" || t === \"image\" || t === \"gradient\";\n  if (Array.isArray(fillType) ? fillType.some(isUnsupportedFill) : isUnsupportedFill(fillType)) {\n    return true;\n  }\n  const lineColors = (_b = (_a = w.config.plotOptions) == null ? void 0 : _a.line) == null ? void 0 : _b.colors;\n  if (lineColors && lineColors.colorAboveThreshold && lineColors.colorBelowThreshold) {\n    return true;\n  }\n  const states = w.config.states || {};\n  const hoverFilter = states.hover && states.hover.filter && states.hover.filter.type;\n  const activeFilter = states.active && states.active.filter && states.active.filter.type;\n  if (hoverFilter && !OK_FILTER_TYPES.includes(hoverFilter)) return true;\n  if (activeFilter && !OK_FILTER_TYPES.includes(activeFilter)) return true;\n  return false;\n}\nclass Markers {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._filters = new Filters(this.w);\n    this._graphics = new Graphics(this.w, this.ctx);\n    this._seriesWrap = null;\n    this._seriesWrapIndex = -1;\n  }\n  /**\n   * Invalidate the cached per-series wrap group. Callers that drive\n   * plotChartMarkers point-by-point (Line) must call this when a series'\n   * element tree is (re)created, so a later render never appends markers to a\n   * detached group from the previous pass.\n   */\n  resetSeriesWrapCache() {\n    this._seriesWrap = null;\n    this._seriesWrapIndex = -1;\n  }\n  setGlobalMarkerSize() {\n    const w = this.w;\n    w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size];\n    if (w.globals.markers.size.length > 0) {\n      if (w.globals.markers.size.length < w.seriesData.series.length + 1) {\n        for (let i = 0; i <= w.seriesData.series.length; i++) {\n          if (typeof w.globals.markers.size[i] === \"undefined\") {\n            w.globals.markers.size.push(w.globals.markers.size[0]);\n          }\n        }\n      }\n    } else {\n      w.globals.markers.size = w.config.series.map(\n        () => (\n          /** @type {number} */\n          w.config.markers.size\n        )\n      );\n    }\n  }\n  /** @param {{ pointsPos?: any, seriesIndex?: any, j?: any, pSize?: any, alwaysDrawMarker?: boolean, isVirtualPoint?: boolean }} opts */\n  plotChartMarkers({\n    pointsPos,\n    seriesIndex,\n    j,\n    pSize,\n    alwaysDrawMarker = false,\n    isVirtualPoint = false\n  }) {\n    const w = this.w;\n    const i = seriesIndex;\n    const p = pointsPos;\n    let elMarkersWrap = null;\n    const graphics = new Graphics(this.w);\n    const emit = seriesEmitter(this.ctx, graphics);\n    const hasDiscreteMarkers = w.config.markers.discrete && w.config.markers.discrete.length;\n    if (Array.isArray(p.x)) {\n      for (let q = 0; q < p.x.length; q++) {\n        let markerElement;\n        let dataPointIndex = j;\n        let invalidMarker = !Utils$1.isNumber(p.y[q]);\n        if (w.globals.markers.largestSize === 0 && w.globals.hasNullValues && w.seriesData.series[i][j + 1] !== null && !isVirtualPoint) {\n          invalidMarker = true;\n        }\n        if (j === 1 && q === 0) dataPointIndex = 0;\n        if (j === 1 && q === 1) dataPointIndex = 1;\n        let markerClasses = \"apexcharts-marker\";\n        if ((w.config.chart.type === \"line\" || w.config.chart.type === \"area\") && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n          markerClasses += \" no-pointer-events\";\n        }\n        const shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0;\n        if (shouldMarkerDraw || alwaysDrawMarker || hasDiscreteMarkers) {\n          if (emit.kind === \"canvas\") {\n            if (typeof w.globals.pointsArray[seriesIndex] === \"undefined\") {\n              w.globals.pointsArray[seriesIndex] = [];\n            }\n            w.globals.pointsArray[seriesIndex][dataPointIndex] = [p.x[q], p.y[q]];\n          }\n          if (!invalidMarker) {\n            markerClasses += ` w${Utils$1.randomId()}`;\n          }\n          const opts = this.getMarkerConfig({\n            cssClass: markerClasses,\n            seriesIndex,\n            dataPointIndex\n          });\n          const _si = (\n            /** @type {Record<string,any>} */\n            w.config.series[i]\n          );\n          if (_si.data[dataPointIndex]) {\n            if (_si.data[dataPointIndex].fillColor) {\n              opts.pointFillColor = _si.data[dataPointIndex].fillColor;\n            }\n            if (_si.data[dataPointIndex].strokeColor) {\n              opts.pointStrokeColor = _si.data[dataPointIndex].strokeColor;\n            }\n          }\n          if (typeof pSize !== \"undefined\") {\n            opts.pSize = pSize;\n          }\n          if (p.x[q] < -w.globals.markers.largestSize || p.x[q] > w.layout.gridWidth + w.globals.markers.largestSize || p.y[q] < -w.globals.markers.largestSize || p.y[q] > w.layout.gridHeight + w.globals.markers.largestSize) {\n            opts.pSize = 0;\n          }\n          if (!invalidMarker) {\n            const shouldCreateMarkerWrap = w.globals.markers.size[seriesIndex] > 0 || alwaysDrawMarker || hasDiscreteMarkers;\n            if (shouldCreateMarkerWrap && !elMarkersWrap) {\n              const standardWrap = !alwaysDrawMarker && !hasDiscreteMarkers;\n              if (standardWrap && this._seriesWrap && this._seriesWrapIndex === seriesIndex) {\n                elMarkersWrap = this._seriesWrap;\n              } else {\n                elMarkersWrap = emit.group({\n                  class: standardWrap ? \"apexcharts-series-markers\" : \"\"\n                });\n                elMarkersWrap.attr(\n                  \"clip-path\",\n                  `url(#gridRectMarkerMask${w.globals.cuid})`\n                );\n                this.setupMarkerDelegation(elMarkersWrap);\n                if (standardWrap) {\n                  this._seriesWrap = elMarkersWrap;\n                  this._seriesWrapIndex = seriesIndex;\n                }\n              }\n            }\n            markerElement = emit.drawMarker(p.x[q], p.y[q], opts);\n            markerElement.attr(\"rel\", dataPointIndex);\n            markerElement.attr(\"j\", dataPointIndex);\n            markerElement.attr(\"index\", seriesIndex);\n            markerElement.node.setAttribute(\"default-marker-size\", opts.pSize);\n            applyProgressiveReveal(markerElement, p.x[q], w);\n            this._filters.setSelectionFilter(\n              markerElement,\n              seriesIndex,\n              dataPointIndex\n            );\n            if (elMarkersWrap) {\n              elMarkersWrap.add(markerElement);\n            }\n          }\n        } else {\n          if (typeof w.globals.pointsArray[seriesIndex] === \"undefined\")\n            w.globals.pointsArray[seriesIndex] = [];\n          w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]);\n        }\n      }\n    }\n    return elMarkersWrap;\n  }\n  /** @param {{cssClass: any, seriesIndex: any, dataPointIndex?: any, radius?: any, size?: any, strokeWidth?: any}} opts */\n  getMarkerConfig({\n    cssClass,\n    seriesIndex,\n    dataPointIndex = null,\n    radius = null,\n    size = null,\n    strokeWidth = null\n  }) {\n    const w = this.w;\n    const pStyle = this.getMarkerStyle(seriesIndex);\n    let pSize = size === null ? w.globals.markers.size[seriesIndex] : size;\n    const m = w.config.markers;\n    if (dataPointIndex !== null && m.discrete.length) {\n      m.discrete.map((marker) => {\n        if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) {\n          pStyle.pointStrokeColor = marker.strokeColor;\n          pStyle.pointFillColor = marker.fillColor;\n          pSize = marker.size;\n          pStyle.pointShape = marker.shape;\n        }\n      });\n    }\n    return {\n      pSize: radius === null ? pSize : radius,\n      pRadius: radius !== null ? radius : m.radius,\n      pointStrokeWidth: strokeWidth !== null ? strokeWidth : Array.isArray(m.strokeWidth) ? m.strokeWidth[seriesIndex] : m.strokeWidth,\n      pointStrokeColor: pStyle.pointStrokeColor,\n      pointFillColor: pStyle.pointFillColor,\n      shape: pStyle.pointShape || (Array.isArray(m.shape) ? m.shape[seriesIndex] : m.shape),\n      class: cssClass,\n      pointStrokeOpacity: Array.isArray(m.strokeOpacity) ? m.strokeOpacity[seriesIndex] : m.strokeOpacity,\n      pointStrokeDashArray: Array.isArray(m.strokeDashArray) ? m.strokeDashArray[seriesIndex] : m.strokeDashArray,\n      pointFillOpacity: Array.isArray(m.fillOpacity) ? m.fillOpacity[seriesIndex] : m.fillOpacity,\n      seriesIndex\n    };\n  }\n  /**\n   * @param {any} parentGroup\n   */\n  setupMarkerDelegation(parentGroup) {\n    const w = this.w;\n    const selector = \".apexcharts-marker\";\n    this._graphics.setupEventDelegation(parentGroup, selector);\n    parentGroup.node.addEventListener(\"click\", (e) => {\n      if (w.config.markers.onClick) {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode) w.config.markers.onClick(e);\n      }\n    });\n    parentGroup.node.addEventListener(\"dblclick\", (e) => {\n      if (w.config.markers.onDblClick) {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode) w.config.markers.onDblClick(e);\n      }\n    });\n    parentGroup.node.addEventListener(\n      \"touchstart\",\n      (e) => {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode && targetNode.instance) {\n          this._graphics.pathMouseDown(targetNode.instance, e);\n        }\n      },\n      { passive: true }\n    );\n  }\n  /**\n   * @returns {any}\n   * @param {number} seriesIndex\n   */\n  getMarkerStyle(seriesIndex) {\n    const w = this.w;\n    const colors = w.globals.markers.colors;\n    const strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors;\n    const pointStrokeColor = Array.isArray(strokeColors) ? strokeColors[seriesIndex] : strokeColors;\n    const pointFillColor = Array.isArray(colors) ? colors[seriesIndex] : colors;\n    return {\n      pointStrokeColor,\n      pointFillColor\n    };\n  }\n}\nclass Scatter {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.anim = new Animations(this.w);\n    this.filters = new Filters(this.w);\n    this.fill = new Fill(this.w);\n    this.markers = new Markers(this.w, this.ctx);\n    this.graphics = new Graphics(this.w);\n    this._elPointsWrap = null;\n    this._elPointsWrapParent = null;\n    this._perSeries = null;\n  }\n  /**\n   * @param {Element} elSeries\n   * @param {number} j\n   * @param {Record<string, any>} opts\n   */\n  draw(elSeries, j, opts) {\n    const w = this.w;\n    const graphics = this.graphics;\n    const emit = seriesEmitter(this.ctx, graphics);\n    const realIndex = opts.realIndex;\n    const pointsPos = opts.pointsPos;\n    const zRatio = opts.zRatio;\n    const elPointsMain = opts.elParent;\n    let elPointsWrap = this._elPointsWrap;\n    if (!elPointsWrap || this._elPointsWrapParent !== elPointsMain) {\n      elPointsWrap = emit.group({\n        class: `apexcharts-series-markers apexcharts-series-${w.config.chart.type}`\n      });\n      elPointsWrap.attr(\n        \"clip-path\",\n        `url(#gridRectMarkerMask${w.globals.cuid})`\n      );\n      this.markers.setupMarkerDelegation(elPointsWrap);\n      elPointsMain.add(elPointsWrap);\n      this._elPointsWrap = elPointsWrap;\n      this._elPointsWrapParent = elPointsMain;\n      this._perSeries = this._buildPerSeriesCache(realIndex, emit);\n    }\n    if (Array.isArray(pointsPos.x)) {\n      for (let q = 0; q < pointsPos.x.length; q++) {\n        let dataPointIndex = j + 1;\n        let shouldDraw = true;\n        if (j === 0 && q === 0) dataPointIndex = 0;\n        if (j === 0 && q === 1) dataPointIndex = 1;\n        let radius = w.globals.markers.size[realIndex];\n        if (zRatio !== Infinity) {\n          const bubble = w.config.plotOptions.bubble;\n          radius = w.seriesData.seriesZ[realIndex][dataPointIndex];\n          if (bubble.zScaling) {\n            radius /= zRatio;\n          }\n          if (bubble.minBubbleRadius && radius < bubble.minBubbleRadius) {\n            radius = bubble.minBubbleRadius;\n          }\n          if (bubble.maxBubbleRadius && radius > bubble.maxBubbleRadius) {\n            radius = bubble.maxBubbleRadius;\n          }\n        }\n        const x = pointsPos.x[q];\n        const y = pointsPos.y[q];\n        radius = radius || 0;\n        if (y === null || typeof w.seriesData.series[realIndex][dataPointIndex] === \"undefined\") {\n          shouldDraw = false;\n        }\n        if (shouldDraw) {\n          const point = this.drawPoint(\n            x,\n            y,\n            radius,\n            realIndex,\n            dataPointIndex,\n            j\n          );\n          elPointsWrap.add(point);\n          if (emit.kind === \"canvas\") {\n            if (typeof w.globals.pointsArray[realIndex] === \"undefined\") {\n              w.globals.pointsArray[realIndex] = [];\n            }\n            w.globals.pointsArray[realIndex][dataPointIndex] = [x, y];\n          }\n        }\n      }\n    }\n  }\n  /**\n   * Per-series constants for drawPoint's hot path. Everything here is uniform\n   * across the points of one series; computing or allocating it per point is\n   * measurable overhead at 20k-50k points.\n   * @param {number} realIndex\n   * @param {any} emit\n   */\n  _buildPerSeriesCache(realIndex, emit) {\n    var _a;\n    const w = this.w;\n    return {\n      realIndex,\n      emit,\n      isBubble: w.config.chart.type === \"bubble\" || w.globals.comboCharts && w.config.series[realIndex] && /** @type {Record<string,any>} */\n      w.config.series[realIndex].type === \"bubble\",\n      // discrete markers vary per point; they disable both caches below\n      canCacheConfig: !w.config.markers.discrete.length,\n      /** @type {any} lazily built shared marker config (first point) */\n      markerConfig: null,\n      /** @type {boolean|undefined} lazily resolved on the first fillPath call */\n      fillCacheable: void 0,\n      /** @type {any} cached fillPath result (undefined = not cached yet) */\n      fillCircle: void 0,\n      dropShadowEnabled: w.config.chart.dropShadow.enabled,\n      doInitialAnim: this.initialAnim && !w.globals.dataChanged && !w.globals.resized,\n      jitter: (_a = w.config.plotOptions.scatter) == null ? void 0 : _a.jitter,\n      /** @type {any} lazily built pop-animation constants */\n      anim: null\n    };\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} radius\n   * @param {number} realIndex\n   * @param {number} dataPointIndex\n   * @param {number} j\n   */\n  drawPoint(x, y, radius, realIndex, dataPointIndex, j) {\n    var _a;\n    const w = this.w;\n    const i = realIndex;\n    const anim = this.anim;\n    const filters = this.filters;\n    const fill = this.fill;\n    const markers = this.markers;\n    let ps = this._perSeries;\n    if (!ps || ps.realIndex !== realIndex) {\n      ps = this._perSeries = this._buildPerSeriesCache(\n        realIndex,\n        seriesEmitter(this.ctx, this.graphics)\n      );\n    }\n    const emit = ps.emit;\n    let markerConfig;\n    if (ps.canCacheConfig) {\n      if (!ps.markerConfig) {\n        ps.markerConfig = markers.getMarkerConfig({\n          cssClass: \"apexcharts-marker\",\n          seriesIndex: i,\n          dataPointIndex,\n          radius: ps.isBubble ? radius : null\n        });\n      }\n      markerConfig = ps.markerConfig;\n      if (ps.isBubble) {\n        markerConfig.pSize = radius;\n        markerConfig.pRadius = radius;\n      }\n    } else {\n      markerConfig = markers.getMarkerConfig({\n        cssClass: \"apexcharts-marker\",\n        seriesIndex: i,\n        dataPointIndex,\n        radius: ps.isBubble ? radius : null\n      });\n    }\n    const _si = (\n      /** @type {Record<string,any>} */\n      w.config.series[i]\n    );\n    const dataItem = _si.data[dataPointIndex];\n    let pathFillCircle;\n    if (ps.fillCircle !== void 0) {\n      pathFillCircle = ps.fillCircle;\n    } else {\n      pathFillCircle = fill.fillPath({\n        seriesNumber: realIndex,\n        dataPointIndex,\n        color: markerConfig.pointFillColor,\n        patternUnits: \"objectBoundingBox\",\n        value: w.seriesData.series[realIndex][j]\n      });\n      if (ps.fillCacheable === void 0) {\n        ps.fillCacheable = ps.canCacheConfig && fill.getFillType(realIndex) === \"solid\" && typeof markerConfig.pointFillColor === \"string\" && !!markerConfig.pointFillColor;\n      }\n      if (ps.fillCacheable && !(dataItem == null ? void 0 : dataItem.fillColor)) {\n        ps.fillCircle = pathFillCircle;\n      }\n    }\n    const el = emit.drawMarker(x, y, markerConfig);\n    if (dataItem == null ? void 0 : dataItem.fillColor) {\n      pathFillCircle = dataItem.fillColor;\n    }\n    const jt = ps.jitter;\n    if ((jt == null ? void 0 : jt.enabled) && jt.distributed && w.globals.colors.length) {\n      const bandIdx = Math.round(\n        (_a = w.seriesData.seriesX[realIndex]) == null ? void 0 : _a[dataPointIndex]\n      );\n      if (!isNaN(bandIdx)) {\n        pathFillCircle = w.globals.colors[bandIdx % w.globals.colors.length];\n      }\n    }\n    el.attr({\n      fill: pathFillCircle\n    });\n    if (ps.dropShadowEnabled) {\n      const dropShadow = w.config.chart.dropShadow;\n      filters.dropShadow(el, dropShadow, realIndex);\n    }\n    if (ps.doInitialAnim) {\n      if (!ps.anim) {\n        const animCfg = w.config.chart.animations;\n        const totalPoints = w.globals.dataPoints || 1;\n        const gradCfg = animCfg.animateGradually;\n        const gradEnabled = gradCfg && gradCfg.enabled !== false;\n        ps.anim = {\n          popSpeed: animCfg.speed,\n          baseDelay: gradEnabled ? Math.min(20, animCfg.speed * 0.5 / Math.max(1, totalPoints)) : 0\n        };\n      }\n      const delay = computeStagger({\n        style: ps.anim.baseDelay > 0 ? \"sequential\" : \"none\",\n        index: dataPointIndex,\n        baseDelay: ps.anim.baseDelay\n      });\n      anim.animatePop(el, {\n        speed: ps.anim.popSpeed,\n        delay,\n        onComplete: () => anim.animationCompleted(el)\n      });\n    } else {\n      w.globals.animationEnded = true;\n    }\n    el.attr({\n      rel: dataPointIndex,\n      j: dataPointIndex,\n      index: realIndex,\n      \"default-marker-size\": markerConfig.pSize\n    });\n    filters.setSelectionFilter(el, realIndex, dataPointIndex);\n    return el;\n  }\n  /**\n   * @param {number} y\n   */\n  centerTextInBubble(y) {\n    const w = this.w;\n    y = y + parseInt(w.config.dataLabels.style.fontSize, 10) / 4;\n    return {\n      y\n    };\n  }\n}\nconst resolveDataLabelOffset = (value, w, seriesIndex, dataPointIndex) => {\n  if (typeof value !== \"function\") return value;\n  const resolved = value({\n    series: w.seriesData.series,\n    seriesIndex,\n    dataPointIndex,\n    w\n  });\n  return Number.isFinite(resolved) ? resolved : 0;\n};\nclass DataLabels {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext | null} ctx\n   */\n  constructor(w, ctx = null) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that\n  // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} val\n   * @param {number} i\n   * @param {number} dataPointIndex\n   * @param {boolean} alwaysDrawDataLabel\n   * @param {string} fontSize\n   */\n  dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let drawnextLabel = false;\n    const textRects = (\n      /** @type {any} */\n      graphics.getTextRects(val, fontSize)\n    );\n    const width = textRects.width;\n    const height = textRects.height;\n    if (y < 0) y = 0;\n    if (y > w.layout.gridHeight + height) y = w.layout.gridHeight + height / 2;\n    if (typeof /** @type {any} */\n    w.globals.dataLabelsRects[i] === \"undefined\") {\n      w.globals.dataLabelsRects[i] = [];\n    }\n    w.globals.dataLabelsRects[i].push({\n      x,\n      y,\n      width,\n      height\n    });\n    const len = (\n      /** @type {any} */\n      w.globals.dataLabelsRects[i].length - 2\n    );\n    const lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== \"undefined\" ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0;\n    if (typeof /** @type {any} */\n    w.globals.dataLabelsRects[i][len] !== \"undefined\") {\n      const lastDataLabelRect = (\n        /** @type {any} */\n        w.globals.dataLabelsRects[i][lastDrawnIndex]\n      );\n      if (\n        // next label forward and x not intersecting\n        x > lastDataLabelRect.x + lastDataLabelRect.width || y > lastDataLabelRect.y + lastDataLabelRect.height || y + height < lastDataLabelRect.y || x + width < lastDataLabelRect.x\n      ) {\n        drawnextLabel = true;\n      }\n    }\n    if (dataPointIndex === 0 || alwaysDrawDataLabel) {\n      drawnextLabel = true;\n    }\n    return {\n      x,\n      y,\n      textRects,\n      drawnextLabel\n    };\n  }\n  /** @param {{type: any, pos: any, i: any, j: any, isRangeStart: any, strokeWidth?: any}} opts */\n  drawDataLabel({ type, pos, i, j, isRangeStart, strokeWidth = 2 }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const dataLabelsConfig = w.config.dataLabels;\n    let x = 0;\n    let y = 0;\n    let dataPointIndex = j;\n    let elDataLabelsWrap = null;\n    const seriesCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) !== -1;\n    if (seriesCollapsed || !dataLabelsConfig.enabled || !Array.isArray(pos.x)) {\n      return elDataLabelsWrap;\n    }\n    elDataLabelsWrap = graphics.group({\n      class: \"apexcharts-data-labels\"\n    });\n    for (let q = 0; q < pos.x.length; q++) {\n      if (j === 1 && q === 0) dataPointIndex = 0;\n      if (j === 1 && q === 1) dataPointIndex = 1;\n      x = pos.x[q] + resolveDataLabelOffset(dataLabelsConfig.offsetX, w, i, dataPointIndex);\n      y = pos.y[q] + resolveDataLabelOffset(dataLabelsConfig.offsetY, w, i, dataPointIndex) + strokeWidth;\n      if (!isNaN(x)) {\n        let val = w.seriesData.series[i][dataPointIndex];\n        if (type === \"rangeArea\") {\n          if (isRangeStart) {\n            val = w.rangeData.seriesRangeStart[i][dataPointIndex];\n          } else {\n            val = w.rangeData.seriesRangeEnd[i][dataPointIndex];\n          }\n        }\n        let text = \"\";\n        const getText = (v) => {\n          return w.config.dataLabels.formatter(v, {\n            seriesIndex: i,\n            dataPointIndex,\n            w\n          });\n        };\n        if (w.config.chart.type === \"bubble\") {\n          val = w.seriesData.seriesZ[i][dataPointIndex];\n          text = getText(val);\n          y = pos.y[q];\n          const scatter = new Scatter(\n            this.w,\n            /** @type {import('../types/internal').ChartContext} */\n            this.ctx\n          );\n          const centerTextInBubbleCoords = scatter.centerTextInBubble(y);\n          y = centerTextInBubbleCoords.y;\n        } else {\n          if (typeof val !== \"undefined\") {\n            text = getText(val);\n          }\n        }\n        let textAnchor = w.config.dataLabels.textAnchor;\n        if (w.globals.isSlopeChart) {\n          if (dataPointIndex === 0) {\n            textAnchor = \"end\";\n          } else if (dataPointIndex === /** @type {Record<string,any>} */\n          w.config.series[i].data.length - 1) {\n            textAnchor = \"start\";\n          } else {\n            textAnchor = \"middle\";\n          }\n        }\n        this.plotDataLabelsText({\n          x,\n          y,\n          text,\n          i,\n          j: dataPointIndex,\n          parent: elDataLabelsWrap,\n          offsetCorrection: true,\n          dataLabelsConfig: w.config.dataLabels,\n          textAnchor\n        });\n      }\n    }\n    return elDataLabelsWrap;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  plotDataLabelsText(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let {\n      x,\n      y,\n      i,\n      j,\n      text,\n      textAnchor,\n      fontSize,\n      parent,\n      dataLabelsConfig,\n      color,\n      alwaysDrawDataLabel,\n      offsetCorrection,\n      className,\n      // some callers (radar) reuse `j` for something other than the data point\n      // index, so per-point offsets take these explicit indices when supplied\n      seriesIndex = i,\n      dataPointIndex = j\n    } = opts;\n    let dataLabelText = null;\n    if (Array.isArray(w.config.dataLabels.enabledOnSeries)) {\n      if (w.config.dataLabels.enabledOnSeries.indexOf(i) < 0) {\n        return dataLabelText;\n      }\n    }\n    let correctedLabels = {\n      x,\n      y,\n      drawnextLabel: true,\n      textRects: null\n    };\n    if (offsetCorrection) {\n      correctedLabels = this.dataLabelsCorrection(\n        x,\n        y,\n        text,\n        i,\n        j,\n        alwaysDrawDataLabel,\n        parseInt(\n          /** @type {any} */\n          dataLabelsConfig.style.fontSize,\n          10\n        ).toString()\n      );\n    }\n    if (!w.interact.zoomed) {\n      x = correctedLabels.x;\n      y = correctedLabels.y;\n    }\n    if (correctedLabels.textRects) {\n      const barPad = w.globals.barPadForNumericAxis || 0;\n      if (x < -(barPad + 20) - /** @type {any} */\n      correctedLabels.textRects.width || x > w.layout.gridWidth + /** @type {any} */\n      correctedLabels.textRects.width + barPad + 30) {\n        text = \"\";\n      }\n    }\n    let dataLabelColor = w.globals.dataLabels.style.colors[i];\n    if ((w.config.chart.type === \"bar\" || w.config.chart.type === \"rangeBar\") && w.config.plotOptions.bar.distributed || w.config.dataLabels.distributed) {\n      dataLabelColor = w.globals.dataLabels.style.colors[j];\n    }\n    if (typeof dataLabelColor === \"function\") {\n      dataLabelColor = /** @type {any} */\n      dataLabelColor({\n        series: w.seriesData.series,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    if (color) {\n      dataLabelColor = color;\n    }\n    const offsetsHandledElsewhere = w.config.chart.type === \"bar\" || w.config.chart.type === \"rangeBar\";\n    const resolvedOffX = offsetsHandledElsewhere ? 0 : resolveDataLabelOffset(\n      dataLabelsConfig.offsetX,\n      w,\n      seriesIndex,\n      dataPointIndex\n    );\n    const resolvedOffY = offsetsHandledElsewhere ? 0 : resolveDataLabelOffset(\n      dataLabelsConfig.offsetY,\n      w,\n      seriesIndex,\n      dataPointIndex\n    );\n    let offX = resolvedOffX;\n    const offY = resolvedOffY;\n    if (w.globals.isSlopeChart) {\n      if (j !== 0) {\n        offX = resolvedOffX * -2 + 5;\n      }\n      if (j !== 0 && j !== /** @type {Record<string,any>} */\n      w.config.series[i].data.length - 1) {\n        offX = 0;\n      }\n    }\n    if (correctedLabels.drawnextLabel) {\n      if (textAnchor === \"middle\") {\n        if (x === w.layout.gridWidth) {\n          textAnchor = \"end\";\n        }\n      }\n      dataLabelText = graphics.drawText({\n        x: x + offX,\n        y: y + offY,\n        foreColor: dataLabelColor,\n        textAnchor: textAnchor || dataLabelsConfig.textAnchor,\n        text,\n        fontSize: fontSize || dataLabelsConfig.style.fontSize,\n        fontFamily: dataLabelsConfig.style.fontFamily,\n        fontWeight: dataLabelsConfig.style.fontWeight || \"normal\"\n      });\n      dataLabelText.attr({\n        class: className || \"apexcharts-datalabel\",\n        cx: x,\n        cy: y\n      });\n      if (dataLabelsConfig.dropShadow.enabled) {\n        const textShadow = dataLabelsConfig.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(dataLabelText, textShadow);\n      }\n      parent.add(dataLabelText);\n      applyProgressiveReveal(dataLabelText, x, w);\n      if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === \"undefined\") {\n        w.globals.lastDrawnDataLabelsIndexes[i] = [];\n      }\n      w.globals.lastDrawnDataLabelsIndexes[i].push(j);\n    }\n    return dataLabelText;\n  }\n  /**\n   * @param {Element} el\n   * @param {{x: number, y: number, width: number, height: number}} coords\n   */\n  addBackgroundToDataLabel(el, coords) {\n    const w = this.w;\n    const bCnf = w.config.dataLabels.background;\n    const paddingH = bCnf.padding;\n    const paddingV = bCnf.padding / 2;\n    const width = coords.width;\n    const height = coords.height;\n    const graphics = new Graphics(this.w);\n    const elRect = graphics.drawRect(\n      coords.x - paddingH,\n      coords.y - paddingV / 2,\n      width + paddingH * 2,\n      height + paddingV,\n      bCnf.borderRadius,\n      w.config.chart.background === \"transparent\" || !w.config.chart.background ? \"#fff\" : w.config.chart.background,\n      bCnf.opacity,\n      bCnf.borderWidth,\n      bCnf.borderColor\n    );\n    if (bCnf.dropShadow.enabled) {\n      const filters = new Filters(this.w);\n      filters.dropShadow(elRect, bCnf.dropShadow);\n    }\n    return elRect;\n  }\n  dataLabelsBackground() {\n    var _a;\n    const w = this.w;\n    if (w.config.chart.type === \"bubble\") return;\n    const elDataLabels = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-datalabels text\"\n    );\n    for (let i = 0; i < elDataLabels.length; i++) {\n      const el = elDataLabels[i];\n      const coords = (\n        /** @type {SVGGraphicsElement} */\n        el.getBBox()\n      );\n      let elRect = null;\n      if (coords.width && coords.height) {\n        elRect = this.addBackgroundToDataLabel(el, coords);\n      }\n      if (elRect) {\n        (_a = el.parentNode) == null ? void 0 : _a.insertBefore(elRect.node, el);\n        const background = w.config.dataLabels.background.backgroundColor || el.getAttribute(\"fill\");\n        const shouldAnim = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged;\n        if (shouldAnim) {\n          elRect.animate().attr({ fill: background });\n        } else {\n          elRect.attr({ fill: background });\n        }\n        el.setAttribute(\"fill\", w.config.dataLabels.background.foreColor);\n        const cxAttr = el.getAttribute(\"cx\");\n        if (cxAttr !== null) {\n          applyProgressiveReveal(elRect, parseFloat(cxAttr), w);\n        }\n      }\n    }\n  }\n  bringForward() {\n    const w = this.w;\n    const elDataLabelsNodes = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-datalabels\"\n    );\n    const elSeries = w.dom.baseEl.querySelector(\n      \".apexcharts-plot-series:last-child\"\n    );\n    for (let i = 0; i < elDataLabelsNodes.length; i++) {\n      if (elSeries) {\n        elSeries.insertBefore(elDataLabelsNodes[i], elSeries.nextSibling);\n      }\n    }\n  }\n}\nclass PerformanceCache {\n  /**\n   * Invalidate all caches\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateAll(w) {\n    if (!w || !w.globals) return;\n    if (w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n    if (w.globals.domCache) {\n      w.globals.domCache.clear();\n    }\n    w.globals.dimensionCache = {};\n  }\n  /**\n   * Invalidate dimension cache only\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateDimensions(w) {\n    if (!w || !w.globals) return;\n    w.globals.dimensionCache = {};\n  }\n  /**\n   * Invalidate selector cache only\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateSelectors(w) {\n    if (!w || !w.globals) return;\n    if (w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n  }\n  /**\n   * Get cached selector result or compute and cache it\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Function} queryFn - Function to execute if not cached\n   * @returns {*} Cached or newly computed result\n   */\n  static getCachedSelector(w, key, queryFn) {\n    if (!w || !w.globals) return queryFn();\n    if (!w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n    if (!w.globals.cachedSelectors[key]) {\n      w.globals.cachedSelectors[key] = queryFn();\n    }\n    return w.globals.cachedSelectors[key];\n  }\n  /**\n   * Get cached dimension or compute and cache it\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Function} computeFn - Function to compute dimensions\n   * @param {number} maxAge - Maximum cache age in milliseconds (default: 1000ms)\n   * @returns {*} Cached or newly computed dimensions\n   */\n  static getCachedDimension(w, key, computeFn, maxAge = 1e3) {\n    if (!w || !w.globals) return computeFn();\n    if (!w.globals.dimensionCache) {\n      w.globals.dimensionCache = {};\n    }\n    const cache = w.globals.dimensionCache[key];\n    const now = Date.now();\n    if (cache && cache.lastUpdate && now - cache.lastUpdate < maxAge) {\n      return cache.value;\n    }\n    const value = computeFn();\n    w.globals.dimensionCache[key] = {\n      value,\n      lastUpdate: now\n    };\n    return value;\n  }\n  /**\n   * Cache a DOM element reference\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Element} element - DOM element to cache\n   */\n  static cacheDOMElement(w, key, element) {\n    if (!w || !w.globals) return;\n    if (!w.globals.domCache) {\n      w.globals.domCache = /* @__PURE__ */ new Map();\n    }\n    w.globals.domCache.set(key, element);\n  }\n  /**\n   * Get cached DOM element\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @returns {Element|null} Cached element or null\n   */\n  static getCachedDOMElement(w, key) {\n    if (!w || !w.globals || !w.globals.domCache) return null;\n    return w.globals.domCache.get(key) || null;\n  }\n}\nclass AxesUtils {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w, { theme = null, timeScale = null } = {}) {\n    this.w = w;\n    this.theme = theme;\n    this.timeScale = timeScale;\n  }\n  // Based on the formatter function, get the label text and position\n  /**\n   * @param {any[]} labels\n   * @param {Array<Record<string, any>>} timescaleLabels\n   * @param {number} x\n   * @param {number} i\n   * @param {any[]} drawnLabels\n   */\n  getLabel(labels, timescaleLabels, x, i, drawnLabels = [], fontSize = \"12px\", isLeafGroup = true) {\n    const w = this.w;\n    const rawLabel = typeof labels[i] === \"undefined\" ? \"\" : labels[i];\n    let label = rawLabel;\n    const xlbFormatter = w.formatters.xLabelFormatter;\n    const customFormatter = w.config.xaxis.labels.formatter;\n    const xFormat = new Formatters(this.w);\n    const timestamp = rawLabel;\n    if (isLeafGroup) {\n      label = /** @type {any} */\n      xFormat.xLabelFormat(\n        xlbFormatter,\n        rawLabel,\n        timestamp,\n        {\n          i,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      if (customFormatter !== void 0) {\n        label = customFormatter(rawLabel, labels[i], {\n          i,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        });\n      }\n    }\n    if (timescaleLabels.length > 0) {\n      x = timescaleLabels[i].position;\n      label = timescaleLabels[i].value;\n    } else {\n      if (w.config.xaxis.type === \"datetime\" && customFormatter === void 0) {\n        label = \"\";\n      }\n    }\n    if (typeof label === \"undefined\") label = \"\";\n    label = Array.isArray(label) ? label : label.toString();\n    const graphics = new Graphics(this.w);\n    let textRect = {};\n    if (w.layout.rotateXLabels && isLeafGroup) {\n      textRect = graphics.getTextRects(\n        label,\n        parseInt(fontSize, 10).toString(),\n        null,\n        `rotate(${w.config.xaxis.labels.rotate} 0 0)`,\n        false\n      );\n    } else {\n      textRect = graphics.getTextRects(label, parseInt(fontSize, 10).toString());\n    }\n    const allowDuplicatesInTimeScale = !w.config.xaxis.labels.showDuplicates && this.timeScale;\n    if (!Array.isArray(label) && (String(label) === \"NaN\" || drawnLabels.indexOf(label) >= 0 && allowDuplicatesInTimeScale)) {\n      label = \"\";\n    }\n    return {\n      x,\n      text: label,\n      textRect\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {any} label\n   * @param {number} labelsLen\n   */\n  checkLabelBasedOnTickamount(i, label, labelsLen) {\n    const w = this.w;\n    let ticks = w.config.xaxis.tickAmount;\n    if (ticks === \"dataPoints\") ticks = Math.round(w.layout.gridWidth / 120);\n    if (ticks > labelsLen) return label;\n    const tickMultiple = Math.round(labelsLen / (ticks + 1));\n    if (i % tickMultiple === 0) {\n      return label;\n    } else {\n      label.text = \"\";\n    }\n    return label;\n  }\n  /**\n   * @param {number} i\n   * @param {any} label\n   * @param {number} labelsLen\n   * @param {any[]} drawnLabels\n   * @param {Array<Record<string, any>>} drawnLabelsRects\n   */\n  checkForOverflowingLabels(i, label, labelsLen, drawnLabels, drawnLabelsRects) {\n    const w = this.w;\n    if (i === 0) {\n      if (w.globals.skipFirstTimelinelabel) {\n        label.text = \"\";\n      }\n    }\n    if (i === labelsLen - 1) {\n      if (w.globals.skipLastTimelinelabel) {\n        label.text = \"\";\n      }\n    }\n    if (w.config.xaxis.labels.hideOverlappingLabels && drawnLabels.length > 0) {\n      const prev = drawnLabelsRects[drawnLabelsRects.length - 1];\n      if (w.config.xaxis.labels.trim && w.config.xaxis.type !== \"datetime\") {\n        return label;\n      }\n      if (\n        /** @type {any} */\n        label.x < prev.textRect.width / (w.layout.rotateXLabels ? (\n          // Floor the rotation at 1deg: rotateAlways:true forces\n          // rotateXLabels even with rotate:0, and a 0 divisor here makes the\n          // spread Infinity, blanking every label after the first.\n          Math.max(Math.abs(w.config.xaxis.labels.rotate), 1) / 12\n        ) : 1.01) + prev.x\n      ) {\n        label.text = \"\";\n      }\n    }\n    return label;\n  }\n  /**\n   * @param {number} i\n   * @param {any[]} labels\n   */\n  checkForReversedLabels(i, labels) {\n    const w = this.w;\n    if (w.config.yaxis[i] && w.config.yaxis[i].reversed) {\n      labels.reverse();\n    }\n    return labels;\n  }\n  /**\n   * @param {number} index\n   */\n  yAxisAllSeriesCollapsed(index) {\n    const gl = this.w.globals;\n    return !gl.seriesYAxisMap[index].some((si) => {\n      return gl.collapsedSeriesIndices.indexOf(si) === -1;\n    });\n  }\n  // Method to translate annotation.yAxisIndex values from\n  // seriesName-as-a-string values to seriesName-as-an-array values (old style\n  // series mapping to new style).\n  /**\n   * @param {number} index\n   */\n  translateYAxisIndex(index) {\n    const w = this.w;\n    const gl = w.globals;\n    const yaxis = w.config.yaxis;\n    const newStyle = w.seriesData.series.length > yaxis.length || /**\n     * @param {Record<string, any>} a\n     */\n    yaxis.some((a) => Array.isArray(a.seriesName));\n    if (newStyle) {\n      return index;\n    } else {\n      return gl.seriesYAxisReverseMap[index];\n    }\n  }\n  /**\n   * @param {number} index\n   */\n  isYAxisHidden(index) {\n    const w = this.w;\n    const yaxis = w.config.yaxis[index];\n    if (!yaxis.show || this.yAxisAllSeriesCollapsed(index)) {\n      return true;\n    }\n    if (!yaxis.showForNullSeries) {\n      const seriesIndices = w.globals.seriesYAxisMap[index];\n      const coreUtils = new CoreUtils(this.w);\n      return seriesIndices.every((si) => coreUtils.isSeriesNull(si));\n    }\n    return false;\n  }\n  // get the label color for y-axis\n  // realIndex is the actual series index, while i is the tick Index\n  /**\n   * @param {string[]} yColors\n   * @param {number} realIndex\n   */\n  getYAxisForeColor(yColors, realIndex) {\n    var _a;\n    const w = this.w;\n    if (Array.isArray(yColors) && w.globals.yAxisScale[realIndex]) {\n      (_a = this.theme) == null ? void 0 : _a.pushExtraColors(\n        yColors,\n        w.globals.yAxisScale[realIndex].result.length,\n        false\n      );\n    }\n    return yColors;\n  }\n  /**\n   * @param {number} x\n   * @param {number} tickAmount\n   * @param {Record<string, any>} axisBorder\n   * @param {Record<string, any>} axisTicks\n   * @param {number} realIndex\n   * @param {any} labelsDivider\n   * @param {any} elYaxis\n   */\n  drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let tY = w.layout.translateY + w.config.yaxis[realIndex].labels.offsetY;\n    if (w.globals.isBarHorizontal) {\n      tY = 0;\n    } else if (w.config.chart.type === \"heatmap\") {\n      tY += labelsDivider / 2;\n    }\n    if (axisTicks.show && tickAmount > 0) {\n      if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width;\n      for (let i = tickAmount; i >= 0; i--) {\n        const elTick = graphics.drawLine(\n          x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX,\n          tY + axisTicks.offsetY,\n          x + axisBorder.offsetX + axisTicks.offsetX,\n          tY + axisTicks.offsetY,\n          axisTicks.color\n        );\n        elYaxis.add(elTick);\n        tY += labelsDivider;\n      }\n    }\n  }\n}\nclass XAxis {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {any} [elgrid]\n   */\n  constructor(w, ctx, elgrid) {\n    this.w = w;\n    this.ctx = ctx;\n    this.elgrid = elgrid;\n    this.axesUtils = new AxesUtils(w, {\n      theme: ctx.theme,\n      timeScale: ctx.timeScale\n    });\n    this.xaxisLabels = w.labelData.labels.slice();\n    if (w.labelData.timescaleLabels.length > 0 && !w.globals.isBarHorizontal) {\n      this.xaxisLabels = w.labelData.timescaleLabels.slice();\n    }\n    if (w.config.xaxis.overwriteCategories) {\n      this.xaxisLabels = w.config.xaxis.overwriteCategories;\n    }\n    this.drawnLabels = [];\n    this.drawnLabelsRects = [];\n    if (w.config.xaxis.position === \"top\") {\n      this.offY = 0;\n    } else {\n      this.offY = w.layout.gridHeight;\n    }\n    this.offY = this.offY + w.config.xaxis.axisBorder.offsetY;\n    this.isCategoryBarHorizontal = w.config.chart.type === \"bar\" && w.config.plotOptions.bar.horizontal;\n    this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n    this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily;\n    this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n    this.xaxisBorderWidth = w.config.xaxis.axisBorder.width;\n    if (this.isCategoryBarHorizontal) {\n      this.xaxisBorderWidth = w.config.yaxis[0].axisBorder.width.toString();\n    }\n    if (String(this.xaxisBorderWidth).indexOf(\"%\") > -1) {\n      this.xaxisBorderWidth = w.layout.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100;\n    } else {\n      this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10);\n    }\n    this.xaxisBorderHeight = w.config.xaxis.axisBorder.height;\n    this.yaxis = w.config.yaxis[0];\n  }\n  drawXaxis() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elXaxis = graphics.group({\n      class: \"apexcharts-xaxis\",\n      transform: `translate(${w.config.xaxis.offsetX}, ${w.config.xaxis.offsetY})`\n    });\n    const elXaxisTexts = graphics.group({\n      class: \"apexcharts-xaxis-texts-g\",\n      transform: `translate(${w.layout.translateXAxisX}, ${w.layout.translateXAxisY})`\n    });\n    elXaxis.add(elXaxisTexts);\n    let labels = [];\n    for (let i = 0; i < this.xaxisLabels.length; i++) {\n      labels.push(this.xaxisLabels[i]);\n    }\n    this.drawXAxisLabelAndGroup(\n      true,\n      graphics,\n      elXaxisTexts,\n      labels,\n      w.axisFlags.isXNumeric,\n      (i, colWidth) => colWidth\n    );\n    if (w.labelData.hasXaxisGroups) {\n      const labelsGroup = w.labelData.groups;\n      labels = [];\n      for (let i = 0; i < labelsGroup.length; i++) {\n        labels.push(labelsGroup[i].title);\n      }\n      const overwriteStyles = (\n        /** @type {any} */\n        {}\n      );\n      if (w.config.xaxis.group.style) {\n        overwriteStyles.xaxisFontSize = w.config.xaxis.group.style.fontSize;\n        overwriteStyles.xaxisFontFamily = w.config.xaxis.group.style.fontFamily;\n        overwriteStyles.xaxisForeColors = w.config.xaxis.group.style.colors;\n        overwriteStyles.fontWeight = w.config.xaxis.group.style.fontWeight;\n        overwriteStyles.cssClass = w.config.xaxis.group.style.cssClass;\n      }\n      this.drawXAxisLabelAndGroup(\n        false,\n        graphics,\n        elXaxisTexts,\n        labels,\n        false,\n        (i, colWidth) => labelsGroup[i].cols * colWidth,\n        overwriteStyles\n      );\n    }\n    if (w.config.xaxis.title.text !== void 0) {\n      const elXaxisTitle = graphics.group({\n        class: \"apexcharts-xaxis-title\"\n      });\n      const elXAxisTitleText = graphics.drawText({\n        x: w.layout.gridWidth / 2 + w.config.xaxis.title.offsetX,\n        y: this.offY + parseFloat(this.xaxisFontSize) + (w.config.xaxis.position === \"bottom\" ? w.layout.xAxisLabelsHeight : -w.layout.xAxisLabelsHeight - 10) + w.config.xaxis.title.offsetY,\n        text: w.config.xaxis.title.text,\n        textAnchor: \"middle\",\n        fontSize: w.config.xaxis.title.style.fontSize,\n        fontFamily: w.config.xaxis.title.style.fontFamily,\n        fontWeight: w.config.xaxis.title.style.fontWeight,\n        foreColor: w.config.xaxis.title.style.color,\n        cssClass: \"apexcharts-xaxis-title-text \" + w.config.xaxis.title.style.cssClass\n      });\n      elXaxisTitle.add(elXAxisTitleText);\n      elXaxis.add(elXaxisTitle);\n    }\n    if (w.config.xaxis.axisBorder.show) {\n      const offX = w.globals.barPadForNumericAxis;\n      const elHorzLine = graphics.drawLine(\n        w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX - offX,\n        this.offY,\n        this.xaxisBorderWidth + offX,\n        this.offY,\n        w.config.xaxis.axisBorder.color,\n        0,\n        this.xaxisBorderHeight\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elHorzLine);\n      } else {\n        elXaxis.add(elHorzLine);\n      }\n    }\n    return elXaxis;\n  }\n  /**\n   * @param {Record<string, any>} [overwriteStyles]\n   * @param {boolean} isLeafGroup\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elXaxisTexts\n   * @param {any[]} labels\n   * @param {boolean} isXNumeric\n   * @param {any} colWidthCb\n   */\n  drawXAxisLabelAndGroup(isLeafGroup, graphics, elXaxisTexts, labels, isXNumeric, colWidthCb, overwriteStyles = {}) {\n    var _a, _b;\n    const drawnLabels = [];\n    const drawnLabelsRects = [];\n    const w = this.w;\n    const xaxisFontSize = overwriteStyles.xaxisFontSize || this.xaxisFontSize;\n    const xaxisFontFamily = overwriteStyles.xaxisFontFamily || this.xaxisFontFamily;\n    const xaxisForeColors = overwriteStyles.xaxisForeColors || this.xaxisForeColors;\n    const fontWeight = overwriteStyles.fontWeight || w.config.xaxis.labels.style.fontWeight;\n    const cssClass = overwriteStyles.cssClass || w.config.xaxis.labels.style.cssClass;\n    let colWidth;\n    let xPos = w.globals.padHorizontal;\n    const labelsLen = labels.length;\n    let dataPoints = w.config.xaxis.type === \"category\" ? w.globals.dataPoints : labelsLen;\n    if (dataPoints === 0 && labelsLen > dataPoints) dataPoints = labelsLen;\n    if (isXNumeric) {\n      const len = Math.max(\n        Number(w.config.xaxis.tickAmount) || 1,\n        dataPoints > 1 ? dataPoints - 1 : dataPoints\n      );\n      colWidth = w.layout.gridWidth / Math.min(len, labelsLen - 1);\n      xPos = xPos + colWidthCb(0, colWidth) / 2 + w.config.xaxis.labels.offsetX;\n    } else {\n      colWidth = w.layout.gridWidth / dataPoints;\n      xPos = xPos + colWidthCb(0, colWidth) + w.config.xaxis.labels.offsetX;\n    }\n    for (let i = 0; i <= labelsLen - 1; i++) {\n      let x = xPos - colWidthCb(i, colWidth) / 2 + w.config.xaxis.labels.offsetX;\n      if (i === 0 && labelsLen === 1 && colWidth / 2 === xPos && dataPoints === 1) {\n        x = w.layout.gridWidth / 2;\n      }\n      let label = this.axesUtils.getLabel(\n        labels,\n        w.labelData.timescaleLabels,\n        x,\n        i,\n        drawnLabels,\n        xaxisFontSize,\n        isLeafGroup\n      );\n      let offsetYCorrection = 28;\n      if (w.layout.rotateXLabels && isLeafGroup) {\n        offsetYCorrection = 22;\n      }\n      if (w.config.xaxis.title.text && w.config.xaxis.position === \"top\") {\n        offsetYCorrection += parseFloat(w.config.xaxis.title.style.fontSize) + 2;\n      }\n      if (!isLeafGroup) {\n        offsetYCorrection = offsetYCorrection + parseFloat(xaxisFontSize) + (w.layout.xAxisLabelsHeight - w.layout.xAxisGroupLabelsHeight) + (w.layout.rotateXLabels ? 10 : 0);\n      }\n      const isCategoryTickAmounts = typeof w.config.xaxis.tickAmount !== \"undefined\" && w.config.xaxis.tickAmount !== \"dataPoints\" && w.config.xaxis.type !== \"datetime\";\n      if (isCategoryTickAmounts) {\n        label = this.axesUtils.checkLabelBasedOnTickamount(i, label, labelsLen);\n      } else {\n        label = this.axesUtils.checkForOverflowingLabels(\n          i,\n          label,\n          labelsLen,\n          drawnLabels,\n          drawnLabelsRects\n        );\n      }\n      const getCatForeColor = () => {\n        return isLeafGroup && w.config.xaxis.convertedCatToNumeric ? xaxisForeColors[w.globals.minX + i - 1] : xaxisForeColors[i];\n      };\n      const labelRectWidth = (\n        /** @type {any} */\n        (_b = (_a = label.textRect) == null ? void 0 : _a.width) != null ? _b : 0\n      );\n      const halfWidth = labelRectWidth / 2;\n      const fullyOutsideGrid = label.x + halfWidth < 0;\n      if (w.config.xaxis.labels.show && !fullyOutsideGrid) {\n        const elText = graphics.drawText({\n          x: label.x,\n          y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection - (w.config.xaxis.position === \"top\" ? w.layout.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0),\n          text: label.text,\n          textAnchor: \"middle\",\n          fontWeight,\n          fontSize: xaxisFontSize,\n          fontFamily: xaxisFontFamily,\n          foreColor: Array.isArray(xaxisForeColors) ? getCatForeColor() : xaxisForeColors,\n          isPlainText: false,\n          cssClass: (isLeafGroup ? \"apexcharts-xaxis-label \" : \"apexcharts-xaxis-group-label \") + cssClass\n        });\n        elXaxisTexts.add(elText);\n        elText.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n        if (isLeafGroup) {\n          const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS$2, \"title\");\n          elTooltipTitle.textContent = Array.isArray(label.text) ? label.text.join(\" \") : label.text;\n          elText.node.appendChild(elTooltipTitle);\n          if (label.text !== \"\") {\n            drawnLabels.push(label.text);\n            drawnLabelsRects.push(label);\n          }\n        }\n      }\n      if (i < labelsLen - 1) {\n        xPos = xPos + colWidthCb(i + 1, colWidth);\n      }\n    }\n  }\n  // this actually becomes the vertical axis (for bar charts)\n  /**\n   * @param {number} realIndex\n   */\n  drawXaxisInversed(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0;\n    const elYaxis = graphics.group({\n      class: \"apexcharts-yaxis apexcharts-xaxis-inversed\",\n      rel: realIndex\n    });\n    const elYaxisTexts = graphics.group({\n      class: \"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g\",\n      transform: \"translate(\" + translateYAxisX + \", 0)\"\n    });\n    elYaxis.add(elYaxisTexts);\n    const labels = [];\n    if (w.config.yaxis[realIndex].show) {\n      for (let i = 0; i < this.xaxisLabels.length; i++) {\n        labels.push(this.xaxisLabels[i]);\n      }\n    }\n    const colHeight = w.layout.gridHeight / labels.length;\n    let yPos = -(colHeight / 2.2);\n    const lbFormatter = w.formatters.yLabelFormatters[0];\n    const ylabels = w.config.yaxis[0].labels;\n    if (ylabels.show) {\n      for (let i = 0; i <= labels.length - 1; i++) {\n        let label = typeof labels[i] === \"undefined\" ? \"\" : labels[i];\n        label = lbFormatter(label, {\n          seriesIndex: realIndex,\n          dataPointIndex: i,\n          w\n        });\n        const yColors = this.axesUtils.getYAxisForeColor(\n          ylabels.style.colors,\n          realIndex\n        );\n        const getForeColor = () => {\n          return Array.isArray(yColors) ? yColors[i] : yColors;\n        };\n        let multiY = 0;\n        if (Array.isArray(label)) {\n          multiY = label.length / 2 * parseInt(ylabels.style.fontSize, 10);\n        }\n        let offsetX = ylabels.offsetX - 15;\n        let textAnchor = \"end\";\n        if (this.yaxis.opposite) {\n          textAnchor = \"start\";\n        }\n        if (w.config.yaxis[0].labels.align === \"left\") {\n          offsetX = ylabels.offsetX;\n          textAnchor = \"start\";\n        } else if (w.config.yaxis[0].labels.align === \"center\") {\n          offsetX = ylabels.offsetX;\n          textAnchor = \"middle\";\n        } else if (w.config.yaxis[0].labels.align === \"right\") {\n          textAnchor = \"end\";\n        }\n        const elLabel = graphics.drawText({\n          x: offsetX,\n          y: yPos + colHeight + ylabels.offsetY - multiY,\n          text: label,\n          textAnchor,\n          foreColor: getForeColor(),\n          fontSize: ylabels.style.fontSize,\n          fontFamily: ylabels.style.fontFamily,\n          fontWeight: ylabels.style.fontWeight,\n          isPlainText: false,\n          cssClass: \"apexcharts-yaxis-label \" + ylabels.style.cssClass,\n          maxWidth: ylabels.maxWidth\n        });\n        elYaxisTexts.add(elLabel);\n        elLabel.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n        const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS$2, \"title\");\n        elTooltipTitle.textContent = Array.isArray(label) ? label.join(\" \") : label;\n        elLabel.node.appendChild(elTooltipTitle);\n        if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n          const labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node);\n          elLabel.node.setAttribute(\n            \"transform\",\n            `rotate(${w.config.yaxis[realIndex].labels.rotate} 0 ${labelRotatingCenter.y})`\n          );\n        }\n        yPos = yPos + colHeight;\n      }\n    }\n    if (w.config.yaxis[0].title.text !== void 0) {\n      const elXaxisTitle = graphics.group({\n        class: \"apexcharts-yaxis-title apexcharts-xaxis-title-inversed\",\n        transform: \"translate(\" + translateYAxisX + \", 0)\"\n      });\n      const elXAxisTitleText = graphics.drawText({\n        x: w.config.yaxis[0].title.offsetX,\n        y: w.layout.gridHeight / 2 + w.config.yaxis[0].title.offsetY,\n        text: w.config.yaxis[0].title.text,\n        textAnchor: \"middle\",\n        foreColor: w.config.yaxis[0].title.style.color,\n        fontSize: w.config.yaxis[0].title.style.fontSize,\n        fontWeight: w.config.yaxis[0].title.style.fontWeight,\n        fontFamily: w.config.yaxis[0].title.style.fontFamily,\n        cssClass: \"apexcharts-yaxis-title-text \" + w.config.yaxis[0].title.style.cssClass\n      });\n      elXaxisTitle.add(elXAxisTitleText);\n      elYaxis.add(elXaxisTitle);\n    }\n    let offX = 0;\n    if (this.isCategoryBarHorizontal && w.config.yaxis[0].opposite) {\n      offX = w.layout.gridWidth;\n    }\n    const axisBorder = w.config.xaxis.axisBorder;\n    if (axisBorder.show) {\n      const elVerticalLine = graphics.drawLine(\n        w.globals.padHorizontal + axisBorder.offsetX + offX,\n        1 + axisBorder.offsetY,\n        w.globals.padHorizontal + axisBorder.offsetX + offX,\n        w.layout.gridHeight + axisBorder.offsetY,\n        axisBorder.color,\n        0\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elVerticalLine);\n      } else {\n        elYaxis.add(elVerticalLine);\n      }\n    }\n    if (w.config.yaxis[0].axisTicks.show) {\n      this.axesUtils.drawYAxisTicks(\n        offX,\n        labels.length,\n        w.config.yaxis[0].axisBorder,\n        w.config.yaxis[0].axisTicks,\n        0,\n        colHeight,\n        elYaxis\n      );\n    }\n    return elYaxis;\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y2\n   * @param {any} appendToElement\n   */\n  drawXaxisTicks(x1, y2, appendToElement) {\n    const w = this.w;\n    const x2 = x1;\n    if (x1 < 0 || x1 - 2 > w.layout.gridWidth) return;\n    const y1 = this.offY + w.config.xaxis.axisTicks.offsetY;\n    y2 = y2 + y1 + w.config.xaxis.axisTicks.height;\n    if (w.config.xaxis.position === \"top\") {\n      y2 = y1 - w.config.xaxis.axisTicks.height;\n    }\n    if (w.config.xaxis.axisTicks.show) {\n      const graphics = new Graphics(this.w);\n      const line = graphics.drawLine(\n        x1 + w.config.xaxis.axisTicks.offsetX,\n        y1 + w.config.xaxis.offsetY,\n        x2 + w.config.xaxis.axisTicks.offsetX,\n        y2 + w.config.xaxis.offsetY,\n        w.config.xaxis.axisTicks.color\n      );\n      appendToElement.add(line);\n      line.node.classList.add(\"apexcharts-xaxis-tick\");\n    }\n  }\n  getXAxisTicksPositions() {\n    const w = this.w;\n    const xAxisTicksPositions = [];\n    const xCount = this.xaxisLabels.length;\n    let x1 = w.globals.padHorizontal;\n    if (w.labelData.timescaleLabels.length > 0) {\n      for (let i = 0; i < xCount; i++) {\n        x1 = this.xaxisLabels[i].position;\n        xAxisTicksPositions.push(x1);\n      }\n    } else {\n      const xCountForCategoryCharts = xCount;\n      for (let i = 0; i < xCountForCategoryCharts; i++) {\n        let x1Count = xCountForCategoryCharts;\n        if (w.axisFlags.isXNumeric && w.config.chart.type !== \"bar\") {\n          x1Count -= 1;\n        }\n        x1 = x1 + w.layout.gridWidth / x1Count;\n        xAxisTicksPositions.push(x1);\n      }\n    }\n    return xAxisTicksPositions;\n  }\n  // to rotate x-axis labels or to put ... for longer text in xaxis\n  xAxisLabelCorrections() {\n    var _a, _b, _c;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const xAxis = w.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g\");\n    const xAxisTexts = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)\"\n    );\n    const yAxisTextsInversed = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-yaxis-inversed text\"\n    );\n    const xAxisTextsInversed = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-xaxis-inversed-texts-g text tspan\"\n    );\n    if (w.layout.rotateXLabels || w.config.xaxis.labels.rotateAlways) {\n      for (let xat = 0; xat < xAxisTexts.length; xat++) {\n        const textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]);\n        textRotatingCenter.y = textRotatingCenter.y - 1;\n        textRotatingCenter.x = textRotatingCenter.x + 1;\n        xAxisTexts[xat].setAttribute(\n          \"transform\",\n          `rotate(${w.config.xaxis.labels.rotate} ${textRotatingCenter.x} ${textRotatingCenter.y})`\n        );\n        xAxisTexts[xat].setAttribute(\"text-anchor\", `end`);\n        xAxis == null ? void 0 : xAxis.setAttribute(\"transform\", `translate(0, ${-10})`);\n        const tSpan = xAxisTexts[xat].childNodes;\n        if (w.config.xaxis.labels.trim) {\n          Array.prototype.forEach.call(tSpan, (ts) => {\n            graphics.placeTextWithEllipsis(\n              ts,\n              ts.textContent,\n              w.layout.xAxisLabelsHeight - (w.config.legend.position === \"bottom\" ? 20 : 10)\n            );\n          });\n        }\n      }\n    } else {\n      const width = w.layout.gridWidth / (w.labelData.labels.length + 1);\n      for (let xat = 0; xat < xAxisTexts.length; xat++) {\n        const tSpan = xAxisTexts[xat].childNodes;\n        if (w.config.xaxis.labels.trim && w.config.xaxis.type !== \"datetime\") {\n          Array.prototype.forEach.call(tSpan, (ts) => {\n            graphics.placeTextWithEllipsis(ts, ts.textContent, width);\n          });\n        }\n      }\n    }\n    if (yAxisTextsInversed.length > 0) {\n      const firstLabelPosX = (\n        /** @type {SVGGraphicsElement} */\n        yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox()\n      );\n      const lastLabelPosX = (\n        /** @type {SVGGraphicsElement} */\n        yAxisTextsInversed[0].getBBox()\n      );\n      if (firstLabelPosX.x < -20) {\n        (_a = yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode) == null ? void 0 : _a.removeChild(\n          yAxisTextsInversed[yAxisTextsInversed.length - 1]\n        );\n      }\n      if (lastLabelPosX.x + lastLabelPosX.width > w.layout.gridWidth && !w.globals.isBarHorizontal) {\n        (_b = yAxisTextsInversed[0].parentNode) == null ? void 0 : _b.removeChild(yAxisTextsInversed[0]);\n      }\n      for (let xat = 0; xat < xAxisTextsInversed.length; xat++) {\n        graphics.placeTextWithEllipsis(\n          xAxisTextsInversed[xat],\n          (_c = xAxisTextsInversed[xat].textContent) != null ? _c : \"\",\n          w.config.yaxis[0].labels.maxWidth - (w.config.yaxis[0].title.text ? parseFloat(w.config.yaxis[0].title.style.fontSize) * 2 : 0) - 15\n        );\n      }\n    }\n  }\n  // renderXAxisBands() {\n  //   let w = this.w;\n  //   let plotBand = document.createElementNS(SVGNS, 'rect')\n  //   w.dom.elGraphical.add(plotBand)\n  // }\n}\nclass Grid {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.xaxisLabels = w.labelData.labels.slice();\n    this.axesUtils = new AxesUtils(ctx.w, {\n      theme: ctx.theme,\n      timeScale: ctx.timeScale\n    });\n    this.isRangeBar = w.rangeData.seriesRange.length && w.globals.isBarHorizontal;\n    if (w.labelData.timescaleLabels.length > 0) {\n      this.xaxisLabels = w.labelData.timescaleLabels.slice();\n    }\n  }\n  /**\n   * @param {any} elGrid\n   */\n  drawGridArea(elGrid = null) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    if (!elGrid) {\n      elGrid = graphics.group({ class: \"apexcharts-grid\" });\n    }\n    const elVerticalLine = graphics.drawLine(\n      w.globals.padHorizontal,\n      1,\n      w.globals.padHorizontal,\n      w.layout.gridHeight,\n      \"transparent\"\n    );\n    const elHorzLine = graphics.drawLine(\n      w.globals.padHorizontal,\n      w.layout.gridHeight,\n      w.layout.gridWidth,\n      w.layout.gridHeight,\n      \"transparent\"\n    );\n    elGrid.add(elHorzLine);\n    elGrid.add(elVerticalLine);\n    return elGrid;\n  }\n  drawGrid() {\n    const gl = this.w.globals;\n    if (gl.axisCharts) {\n      const elgrid = this.renderGrid();\n      this.drawGridArea(elgrid.el);\n      return elgrid;\n    }\n    return null;\n  }\n  createGridMask() {\n    const w = this.w;\n    const gl = w.globals;\n    const graphics = new Graphics(this.w);\n    const strokeSize = Array.isArray(w.config.stroke.width) ? Math.max(...w.config.stroke.width) : w.config.stroke.width;\n    const createClipPath = (id) => {\n      const clipPath = BrowserAPIs.createElementNS(SVGNS$2, \"clipPath\");\n      clipPath.setAttribute(\"id\", id);\n      return clipPath;\n    };\n    w.dom.elGridRectMask = createClipPath(`gridRectMask${gl.cuid}`);\n    w.dom.elGridRectBarMask = createClipPath(`gridRectBarMask${gl.cuid}`);\n    w.dom.elGridRectMarkerMask = createClipPath(`gridRectMarkerMask${gl.cuid}`);\n    w.dom.elForecastMask = createClipPath(`forecastMask${gl.cuid}`);\n    w.dom.elNonForecastMask = createClipPath(`nonForecastMask${gl.cuid}`);\n    const hasBar = [\"bar\", \"rangeBar\", \"candlestick\", \"boxPlot\", \"violin\"].includes(\n      w.config.chart.type\n    ) || w.globals.comboBarCount > 0;\n    let barWidthLeft = 0;\n    let barWidthRight = 0;\n    if (hasBar && w.axisFlags.isXNumeric && !w.globals.isBarHorizontal) {\n      barWidthLeft = Math.max(w.layout.gridPad.left, gl.barPadForNumericAxis);\n      barWidthRight = Math.max(w.layout.gridPad.right, gl.barPadForNumericAxis);\n    }\n    w.dom.elGridRect = graphics.drawRect(\n      -strokeSize / 2 - 2,\n      -strokeSize / 2 - 2,\n      w.layout.gridWidth + strokeSize + 4,\n      w.layout.gridHeight + strokeSize + 4,\n      0,\n      \"#fff\"\n    );\n    w.dom.elGridRectBar = graphics.drawRect(\n      -strokeSize / 2 - barWidthLeft - 2,\n      -strokeSize / 2 - 2,\n      w.layout.gridWidth + strokeSize + barWidthRight + barWidthLeft + 4,\n      w.layout.gridHeight + strokeSize + 4,\n      0,\n      \"#fff\"\n    );\n    const markerSize = w.globals.markers.largestSize;\n    w.dom.elGridRectMarker = graphics.drawRect(\n      Math.min(-strokeSize / 2 - barWidthLeft - 2, -markerSize),\n      -markerSize,\n      w.layout.gridWidth + Math.max(strokeSize + barWidthRight + barWidthLeft + 4, markerSize * 2),\n      w.layout.gridHeight + markerSize * 2,\n      0,\n      \"#fff\"\n    );\n    w.dom.elGridRectMask.appendChild(w.dom.elGridRect.node);\n    w.dom.elGridRectBarMask.appendChild(w.dom.elGridRectBar.node);\n    w.dom.elGridRectMarkerMask.appendChild(w.dom.elGridRectMarker.node);\n    const defs = w.dom.elDefs.node;\n    defs.appendChild(w.dom.elGridRectMask);\n    defs.appendChild(w.dom.elGridRectBarMask);\n    defs.appendChild(w.dom.elGridRectMarkerMask);\n    defs.appendChild(w.dom.elForecastMask);\n    defs.appendChild(w.dom.elNonForecastMask);\n  }\n  /** @param {{i: any, x1: any, y1: any, x2: any, y2: any, xCount: any, parent: any}} opts */\n  _drawGridLines({ i, x1, y1, x2, y2, xCount, parent }) {\n    const w = this.w;\n    const shouldDraw = () => {\n      if (i === 0 && w.globals.skipFirstTimelinelabel) return false;\n      if (i === xCount - 1 && w.globals.skipLastTimelinelabel && !w.config.xaxis.labels.formatter)\n        return false;\n      if (w.config.chart.type === \"radar\") return false;\n      return true;\n    };\n    if (shouldDraw()) {\n      if (w.config.grid.xaxis.lines.show) {\n        this._drawGridLine({ i, x1, y1, x2, y2, xCount, parent });\n      }\n      let y_2 = 0;\n      if (w.labelData.hasXaxisGroups && w.config.xaxis.tickPlacement === \"between\") {\n        const groups = w.labelData.groups;\n        if (groups) {\n          let gacc = 0;\n          for (let gi = 0; gacc < i && gi < groups.length; gi++) {\n            gacc += groups[gi].cols;\n          }\n          if (gacc === i) {\n            y_2 = w.layout.xAxisLabelsHeight * 0.6;\n          }\n        }\n      }\n      const xAxis = new XAxis(this.w, this.ctx);\n      xAxis.drawXaxisTicks(x1, y_2, w.dom.elGraphical);\n    }\n  }\n  /** @param {{i: any, x1: any, y1: any, x2: any, y2: any, xCount: any, parent: any}} opts */\n  _drawGridLine({ i, x1, y1, x2, y2, xCount, parent }) {\n    const w = this.w;\n    const isHorzLine = parent.node.classList.contains(\n      \"apexcharts-gridlines-horizontal\"\n    );\n    const offX = w.globals.barPadForNumericAxis;\n    const excludeBorders = y1 === 0 && y2 === 0 || x1 === 0 && x2 === 0 || y1 === w.layout.gridHeight && y2 === w.layout.gridHeight || w.globals.isBarHorizontal && (i === 0 || i === xCount - 1);\n    const graphics = new Graphics(this.w);\n    const line = graphics.drawLine(\n      x1 - (isHorzLine ? offX : 0),\n      y1,\n      x2 + (isHorzLine ? offX : 0),\n      y2,\n      w.config.grid.borderColor,\n      w.config.grid.strokeDashArray\n    );\n    line.node.classList.add(\"apexcharts-gridline\");\n    if (excludeBorders && w.config.grid.show) {\n      this.elGridBorders.add(line);\n    } else {\n      parent.add(line);\n    }\n  }\n  /** @param {{c: any, x1: any, y1: any, x2: any, y2: any, type: any}} opts */\n  _drawGridBandRect({ c, x1, y1, x2, y2, type }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const offX = w.globals.barPadForNumericAxis;\n    const color = w.config.grid[type].colors[c];\n    const rect = graphics.drawRect(\n      x1 - (type === \"row\" ? offX : 0),\n      y1,\n      x2 + (type === \"row\" ? offX * 2 : 0),\n      y2,\n      0,\n      color,\n      w.config.grid[type].opacity\n    );\n    this.elg.add(rect);\n    rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n    rect.node.classList.add(`apexcharts-grid-${type}`);\n  }\n  /** @param {{xCount: any, tickAmount: any}} opts */\n  _drawXYLines({ xCount, tickAmount }) {\n    var _a;\n    const w = this.w;\n    const datetimeLines = ({ xC, x1, y1, x2, y2 }) => {\n      for (let i = 0; i < xC; i++) {\n        x1 = /** @type {any} */\n        this.xaxisLabels[i].position;\n        x2 = /** @type {any} */\n        this.xaxisLabels[i].position;\n        this._drawGridLines({\n          i,\n          x1,\n          y1,\n          x2,\n          y2,\n          xCount,\n          parent: this.elgridLinesV\n        });\n      }\n    };\n    const categoryLines = ({ xC, x1, y1, x2, y2 }) => {\n      for (let i = 0; i < xC + (w.axisFlags.isXNumeric ? 0 : 1); i++) {\n        if (i === 0 && xC === 1 && w.globals.dataPoints === 1) {\n          x1 = w.layout.gridWidth / 2;\n          x2 = x1;\n        }\n        this._drawGridLines({\n          i,\n          x1,\n          y1,\n          x2,\n          y2,\n          xCount,\n          parent: this.elgridLinesV\n        });\n        x1 += w.layout.gridWidth / (w.axisFlags.isXNumeric ? xC - 1 : xC);\n        x2 = x1;\n      }\n    };\n    if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n      const x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2;\n      const y2 = w.layout.gridHeight;\n      if (w.labelData.timescaleLabels.length) {\n        datetimeLines({ xC: xCount, x1, y1, x2, y2 });\n      } else {\n        if (w.axisFlags.isXNumeric) {\n          xCount = (_a = w.globals.xAxisScale) == null ? void 0 : _a.result.length;\n        }\n        categoryLines({ xC: xCount, x1, y1, x2, y2 });\n      }\n    }\n    if (w.config.grid.yaxis.lines.show) {\n      const x1 = 0;\n      let y1 = 0;\n      let y2 = 0;\n      const x2 = w.layout.gridWidth;\n      let tA = tickAmount + 1;\n      if (this.isRangeBar) {\n        tA = w.labelData.labels.length;\n      }\n      for (let i = 0; i < tA + (this.isRangeBar ? 1 : 0); i++) {\n        this._drawGridLine({\n          i,\n          xCount: tA + (this.isRangeBar ? 1 : 0),\n          x1,\n          y1,\n          x2,\n          y2,\n          parent: this.elgridLinesH\n        });\n        y1 += w.layout.gridHeight / (this.isRangeBar ? tA : tickAmount);\n        y2 = y1;\n      }\n    }\n  }\n  /** @param {{ xCount?: any, tickAmount?: any }} opts */\n  _drawInvertedXYLines({ xCount }) {\n    const w = this.w;\n    if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n      let x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2;\n      const y2 = w.layout.gridHeight;\n      for (let i = 0; i < xCount + 1; i++) {\n        if (w.config.grid.xaxis.lines.show) {\n          this._drawGridLine({\n            i,\n            xCount: xCount + 1,\n            x1,\n            y1,\n            x2,\n            y2,\n            parent: this.elgridLinesV\n          });\n        }\n        const xAxis = new XAxis(this.w, this.ctx);\n        xAxis.drawXaxisTicks(x1, 0, w.dom.elGraphical);\n        x1 += w.layout.gridWidth / xCount;\n        x2 = x1;\n      }\n    }\n    if (w.config.grid.yaxis.lines.show) {\n      const x1 = 0;\n      let y1 = 0;\n      let y2 = 0;\n      const x2 = w.layout.gridWidth;\n      for (let i = 0; i < w.globals.dataPoints + 1; i++) {\n        this._drawGridLine({\n          i,\n          xCount: w.globals.dataPoints + 1,\n          x1,\n          y1,\n          x2,\n          y2,\n          parent: this.elgridLinesH\n        });\n        y1 += w.layout.gridHeight / w.globals.dataPoints;\n        y2 = y1;\n      }\n    }\n  }\n  renderGrid() {\n    var _a, _b, _c;\n    const w = this.w;\n    const gl = w.globals;\n    const graphics = new Graphics(this.w);\n    this.elg = graphics.group({ class: \"apexcharts-grid\" });\n    this.elgridLinesH = graphics.group({\n      class: \"apexcharts-gridlines-horizontal\"\n    });\n    this.elgridLinesV = graphics.group({\n      class: \"apexcharts-gridlines-vertical\"\n    });\n    this.elGridBorders = graphics.group({ class: \"apexcharts-grid-borders\" });\n    this.elg.add(this.elgridLinesH);\n    this.elg.add(this.elgridLinesV);\n    if (!w.config.grid.show) {\n      this.elgridLinesV.hide();\n      this.elgridLinesH.hide();\n      this.elGridBorders.hide();\n    }\n    let gridAxisIndex = 0;\n    while (gridAxisIndex < gl.seriesYAxisMap.length && gl.ignoreYAxisIndexes.includes(gridAxisIndex)) {\n      gridAxisIndex++;\n    }\n    if (gridAxisIndex === gl.seriesYAxisMap.length) {\n      gridAxisIndex = 0;\n    }\n    let yTickAmount = gl.yAxisScale[gridAxisIndex].result.length - 1;\n    let xCount;\n    if (!gl.isBarHorizontal || this.isRangeBar) {\n      xCount = this.xaxisLabels.length;\n      if (this.isRangeBar) {\n        yTickAmount = w.labelData.labels.length;\n        if (w.config.xaxis.tickAmount && w.config.xaxis.labels.formatter) {\n          xCount = w.config.xaxis.tickAmount;\n        }\n        if (((_c = (_b = (_a = gl.yAxisScale) == null ? void 0 : _a[gridAxisIndex]) == null ? void 0 : _b.result) == null ? void 0 : _c.length) > 0 && w.config.xaxis.type !== \"datetime\") {\n          xCount = gl.yAxisScale[gridAxisIndex].result.length - 1;\n        }\n      }\n      this._drawXYLines({ xCount, tickAmount: yTickAmount });\n    } else {\n      xCount = yTickAmount;\n      yTickAmount = gl.xTickAmount;\n      this._drawInvertedXYLines({ xCount, tickAmount: yTickAmount });\n    }\n    this.drawGridBands(xCount, yTickAmount);\n    return {\n      el: this.elg,\n      elGridBorders: this.elGridBorders,\n      xAxisTickWidth: w.layout.gridWidth / xCount\n    };\n  }\n  /**\n   * @param {number} xCount\n   * @param {number} tickAmount\n   */\n  drawGridBands(xCount, tickAmount) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const drawBands = (type, count, x1, y1, x2, y2) => {\n      for (let i = 0, c = 0; i < count; i++, c++) {\n        if (c >= w.config.grid[type].colors.length) {\n          c = 0;\n        }\n        this._drawGridBandRect({ c, x1, y1, x2, y2, type });\n        y1 += w.layout.gridHeight / tickAmount;\n      }\n    };\n    if (((_a = w.config.grid.row.colors) == null ? void 0 : _a.length) > 0) {\n      drawBands(\n        \"row\",\n        tickAmount,\n        0,\n        0,\n        w.layout.gridWidth,\n        w.layout.gridHeight / tickAmount\n      );\n    }\n    if (((_b = w.config.grid.column.colors) == null ? void 0 : _b.length) > 0) {\n      let xc = !w.globals.isBarHorizontal && w.config.xaxis.tickPlacement === \"on\" && (w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) ? xCount - 1 : xCount;\n      if (w.axisFlags.isXNumeric) {\n        xc = ((_d = (_c = w.globals.xAxisScale) == null ? void 0 : _c.result.length) != null ? _d : 1) - 1;\n      }\n      let x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2 = w.globals.padHorizontal + w.layout.gridWidth / xc;\n      const y2 = w.layout.gridHeight;\n      for (let i = 0, c = 0; i < xCount; i++, c++) {\n        if (c >= w.config.grid.column.colors.length) {\n          c = 0;\n        }\n        if (w.config.xaxis.type === \"datetime\") {\n          x1 = /** @type {any} */\n          this.xaxisLabels[i].position;\n          x2 = /** @type {any} */\n          (((_e = this.xaxisLabels[i + 1]) == null ? void 0 : _e.position) || w.layout.gridWidth) - /** @type {any} */\n          this.xaxisLabels[i].position;\n        }\n        this._drawGridBandRect({ c, x1, y1, x2, y2, type: \"column\" });\n        x1 += w.layout.gridWidth / xc;\n      }\n    }\n  }\n}\nclass Scales {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.coreUtils = new CoreUtils(this.w);\n  }\n  // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axis\n  // This routine creates the Y axis values for a graph.\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   */\n  niceScale(yMin, yMax, index = 0) {\n    const jsPrecision = 1e-11;\n    const w = this.w;\n    const gl = w.globals;\n    let axisCnf;\n    let maxTicks;\n    let gotMin;\n    let gotMax;\n    if (gl.isBarHorizontal) {\n      axisCnf = w.config.xaxis;\n      maxTicks = Math.max((gl.svgWidth - 100) / 25, 2);\n    } else {\n      axisCnf = w.config.yaxis[index];\n      maxTicks = Math.max((gl.svgHeight - 100) / 15, 2);\n    }\n    if (!Utils$1.isNumber(maxTicks)) {\n      maxTicks = 10;\n    }\n    gotMin = axisCnf.min !== void 0 && axisCnf.min !== null;\n    gotMax = axisCnf.max !== void 0 && axisCnf.max !== null;\n    let gotStepSize = axisCnf.stepSize !== void 0 && axisCnf.stepSize !== null;\n    let gotTickAmount = axisCnf.tickAmount !== void 0 && axisCnf.tickAmount !== null;\n    let ticks = gotTickAmount ? axisCnf.tickAmount : NICE_SCALE_DEFAULT_TICKS[Math.min(\n      Math.round(maxTicks / 2),\n      NICE_SCALE_DEFAULT_TICKS.length - 1\n    )];\n    if (gl.isMultipleYAxis && !gotTickAmount && gl.multiAxisTickAmount > 0) {\n      ticks = gl.multiAxisTickAmount;\n      gotTickAmount = true;\n    }\n    if (ticks === \"dataPoints\") {\n      ticks = gl.dataPoints - 1;\n    } else {\n      ticks = Math.abs(Math.round(ticks));\n    }\n    if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils$1.isNumber(yMin) && !Utils$1.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) {\n      yMin = Utils$1.isNumber(axisCnf.min) ? axisCnf.min : 0;\n      yMax = Utils$1.isNumber(axisCnf.max) ? axisCnf.max : yMin + ticks;\n      gl.allSeriesCollapsed = false;\n    }\n    if (yMin > yMax) {\n      console.warn(\n        \"axis.min cannot be greater than axis.max: swapping min and max\"\n      );\n      const temp = yMax;\n      yMax = yMin;\n      yMin = temp;\n    } else if (yMin === yMax) {\n      yMin = yMin === 0 ? 0 : yMin - 1;\n      yMax = yMax === 0 ? 2 : yMax + 1;\n    }\n    const result = [];\n    if (ticks < 1) {\n      ticks = 1;\n    }\n    let tiks = ticks;\n    let range = Math.abs(yMax - yMin);\n    const proximityRatio = 0.15;\n    if (!gotMin && yMin > 0 && yMin / range < proximityRatio) {\n      yMin = 0;\n      gotMin = true;\n    }\n    if (!gotMax && yMax < 0 && -yMax / range < proximityRatio) {\n      yMax = 0;\n      gotMax = true;\n    }\n    range = Math.abs(yMax - yMin);\n    let stepSize = range / tiks;\n    let niceStep = stepSize;\n    const mag = Math.floor(Math.log10(niceStep));\n    const magPow = Math.pow(10, mag);\n    let magMsd = Math.ceil(niceStep / magPow);\n    magMsd = NICE_SCALE_ALLOWED_MAG_MSD[gl.yValueDecimal === 0 ? 0 : 1][magMsd];\n    niceStep = magMsd * magPow;\n    stepSize = niceStep;\n    if (gl.isBarHorizontal && axisCnf.stepSize && axisCnf.type !== \"datetime\") {\n      stepSize = axisCnf.stepSize;\n      gotStepSize = true;\n    } else if (gotStepSize) {\n      stepSize = axisCnf.stepSize;\n    }\n    if (gotStepSize) {\n      if (axisCnf.forceNiceScale) {\n        const stepMag = Math.floor(Math.log10(stepSize));\n        stepSize *= Math.pow(10, mag - stepMag);\n      }\n    }\n    if (gotMin && gotMax) {\n      let crudeStep = range / tiks;\n      if (gotTickAmount) {\n        if (gotStepSize) {\n          if (Utils$1.mod(range, stepSize) != 0) {\n            const gcdStep = Utils$1.getGCD(stepSize, crudeStep);\n            if (crudeStep / gcdStep < 10) {\n              stepSize = gcdStep;\n            } else {\n              stepSize = crudeStep;\n            }\n          } else {\n            if (Utils$1.mod(stepSize, crudeStep) == 0) {\n              stepSize = crudeStep;\n            } else {\n              crudeStep = stepSize;\n              gotTickAmount = false;\n            }\n          }\n        } else {\n          stepSize = crudeStep;\n        }\n      } else {\n        if (gotStepSize) {\n          if (Utils$1.mod(range, stepSize) == 0) {\n            crudeStep = stepSize;\n          } else {\n            stepSize = crudeStep;\n          }\n        } else {\n          if (Utils$1.mod(range, stepSize) == 0) {\n            crudeStep = stepSize;\n          } else {\n            tiks = Math.ceil(range / stepSize);\n            crudeStep = range / tiks;\n            const gcdStep = Utils$1.getGCD(range, stepSize);\n            if (range / gcdStep < maxTicks) {\n              crudeStep = gcdStep;\n            }\n            stepSize = crudeStep;\n          }\n        }\n      }\n      tiks = Math.round(range / stepSize);\n    } else {\n      if (!gotMin && !gotMax) {\n        if (gl.isMultipleYAxis && gotTickAmount) {\n          const tMin = stepSize * Math.floor(yMin / stepSize);\n          let tMax = tMin + stepSize * tiks;\n          if (tMax < yMax) {\n            stepSize *= 2;\n          }\n          yMin = tMin;\n          tMax = yMax;\n          yMax = yMin + stepSize * tiks;\n          range = Math.abs(yMax - yMin);\n          if (yMin > 0 && yMin < Math.abs(tMax - yMax)) {\n            yMin = 0;\n            yMax = stepSize * tiks;\n          }\n          if (yMax < 0 && -yMax < Math.abs(tMin - yMin)) {\n            yMax = 0;\n            yMin = -stepSize * tiks;\n          }\n        } else {\n          yMin = stepSize * Math.floor(yMin / stepSize);\n          yMax = stepSize * Math.ceil(yMax / stepSize);\n        }\n      } else if (gotMax) {\n        if (gotTickAmount) {\n          yMin = yMax - stepSize * tiks;\n        } else {\n          const yMinPrev = yMin;\n          yMin = stepSize * Math.floor(yMin / stepSize);\n          if (Math.abs(yMax - yMin) / Utils$1.getGCD(range, stepSize) > maxTicks) {\n            yMin = yMax - stepSize * ticks;\n            yMin += stepSize * Math.floor((yMinPrev - yMin) / stepSize);\n          }\n        }\n      } else if (gotMin) {\n        if (gotTickAmount) {\n          yMax = yMin + stepSize * tiks;\n        } else {\n          const yMaxPrev = yMax;\n          yMax = stepSize * Math.ceil(yMax / stepSize);\n          if (Math.abs(yMax - yMin) / Utils$1.getGCD(range, stepSize) > maxTicks) {\n            yMax = yMin + stepSize * ticks;\n            yMax += stepSize * Math.ceil((yMaxPrev - yMax) / stepSize);\n          }\n        }\n      }\n      range = Math.abs(yMax - yMin);\n      stepSize = Utils$1.getGCD(range, stepSize);\n      tiks = Math.round(range / stepSize);\n    }\n    if (!gotTickAmount && !(gotMin || gotMax)) {\n      tiks = Math.ceil((range - jsPrecision) / (stepSize + jsPrecision));\n      if (tiks > 16 && Utils$1.getPrimeFactors(tiks).length < 2) {\n        tiks++;\n      }\n    }\n    if (!gotTickAmount && axisCnf.forceNiceScale && gl.yValueDecimal === 0 && tiks > range) {\n      tiks = range;\n      stepSize = Math.round(range / tiks);\n    }\n    if (tiks > maxTicks && (!(gotTickAmount || gotStepSize) || axisCnf.forceNiceScale)) {\n      const pf = Utils$1.getPrimeFactors(tiks);\n      const last = pf.length - 1;\n      let tt = tiks;\n      reduceLoop: for (var xFactors = 0; xFactors < last; xFactors++) {\n        for (var lowest = 0; lowest <= last - xFactors; lowest++) {\n          const stop = Math.min(lowest + xFactors, last);\n          let t = tt;\n          let div = 1;\n          for (var next = lowest; next <= stop; next++) {\n            div *= pf[next];\n          }\n          t /= div;\n          if (t < maxTicks) {\n            tt = t;\n            break reduceLoop;\n          }\n        }\n      }\n      if (tt === tiks) {\n        stepSize = range;\n      } else {\n        stepSize = range / tt;\n      }\n      tiks = Math.round(range / stepSize);\n    }\n    if (gl.isMultipleYAxis && gl.multiAxisTickAmount == 0 && gl.ignoreYAxisIndexes.indexOf(index) < 0) {\n      gl.multiAxisTickAmount = tiks;\n    }\n    let val = yMin - stepSize;\n    const err = stepSize * jsPrecision;\n    do {\n      val += stepSize;\n      result.push(Utils$1.stripNumber(val, 7));\n    } while (yMax - val > err);\n    return {\n      result,\n      niceMin: result[0],\n      niceMax: result[result.length - 1]\n    };\n  }\n  /** @param {number} yMin @param {number} yMax @param {number|string} ticks @param {number} index @param {number|undefined} step */\n  linearScale(yMin, yMax, ticks = 10, index = 0, step = void 0) {\n    const range = Math.abs(yMax - yMin);\n    let result = [];\n    if (yMin === yMax) {\n      result = [yMin];\n      return {\n        result,\n        niceMin: result[0],\n        niceMax: result[result.length - 1]\n      };\n    }\n    ticks = this._adjustTicksForSmallRange(ticks, index, range);\n    if (\n      /** @type {any} */\n      ticks === \"dataPoints\"\n    ) {\n      ticks = this.w.globals.dataPoints - 1;\n    }\n    const ticksNum = (\n      /** @type {number} */\n      ticks\n    );\n    if (!step) {\n      step = range / ticksNum;\n    }\n    const MIN_PRECISION = 2;\n    if (step !== 0 && isFinite(step)) {\n      const magnitude = Math.floor(Math.log10(Math.abs(step)));\n      const precision = Math.max(MIN_PRECISION, -magnitude + MIN_PRECISION);\n      const multiplier = Math.pow(10, precision);\n      step = Math.round((step + Number.EPSILON) * multiplier) / multiplier;\n    }\n    let tickCount = ticks === Number.MAX_VALUE ? 5 : ticksNum;\n    if (ticks === Number.MAX_VALUE) {\n      step = 1;\n    }\n    let v = yMin;\n    while (tickCount >= 0) {\n      result.push(v);\n      v = Utils$1.preciseAddition(v, step);\n      tickCount -= 1;\n    }\n    return {\n      result,\n      niceMin: result[0],\n      niceMax: result[result.length - 1]\n    };\n  }\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   * @param {number} base\n   */\n  logarithmicScaleNice(yMin, yMax, base) {\n    if (yMax <= 0) yMax = Math.max(yMin, base);\n    if (yMin <= 0) yMin = Math.min(yMax, base);\n    const logs = [];\n    const logMax = Math.ceil(Math.log(yMax) / Math.log(base) + 1);\n    const logMin = Math.floor(Math.log(yMin) / Math.log(base));\n    for (let i = logMin; i < logMax; i++) {\n      logs.push(Math.pow(base, i));\n    }\n    return {\n      result: logs,\n      niceMin: logs[0],\n      niceMax: logs[logs.length - 1]\n    };\n  }\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   * @param {number} base\n   */\n  logarithmicScale(yMin, yMax, base) {\n    if (yMax <= 0) yMax = Math.max(yMin, base);\n    if (yMin <= 0) yMin = Math.min(yMax, base);\n    const logs = [];\n    const logMax = Math.log(yMax) / Math.log(base);\n    const logMin = Math.log(yMin) / Math.log(base);\n    const logRange = logMax - logMin;\n    const ticks = Math.round(logRange);\n    const logTickSpacing = logRange / ticks;\n    for (let i = 0, logTick = logMin; i < ticks; i++, logTick += logTickSpacing) {\n      logs.push(Math.pow(base, logTick));\n    }\n    logs.push(Math.pow(base, logMax));\n    return {\n      result: logs,\n      niceMin: yMin,\n      niceMax: yMax\n    };\n  }\n  /**\n   * @param {number | string} ticks\n   * @param {number} index\n   * @param {number} range\n   */\n  _adjustTicksForSmallRange(ticks, index, range) {\n    let newTicks = ticks;\n    if (typeof index !== \"undefined\" && this.w.config.yaxis[index].labels.formatter && this.w.config.yaxis[index].tickAmount === void 0) {\n      const formattedVal = Number(\n        this.w.config.yaxis[index].labels.formatter(1)\n      );\n      if (Utils$1.isNumber(formattedVal) && this.w.globals.yValueDecimal === 0) {\n        newTicks = Math.ceil(range);\n      }\n    }\n    return newTicks < ticks ? newTicks : ticks;\n  }\n  /**\n   * @param {number} index\n   * @param {number} minY\n   * @param {number} maxY\n   */\n  setYScaleForIndex(index, minY, maxY) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index];\n    if (typeof gl.yAxisScale[index] === \"undefined\") {\n      gl.yAxisScale[index] = [];\n    }\n    const range = Math.abs(maxY - minY);\n    if (y.logarithmic && range <= 5) {\n      gl.invalidLogScale = true;\n    }\n    if (y.logarithmic && range > 5) {\n      gl.allSeriesCollapsed = false;\n      gl.yAxisScale[index] = y.forceNiceScale ? this.logarithmicScaleNice(minY, maxY, y.logBase) : this.logarithmicScale(minY, maxY, y.logBase);\n    } else {\n      if (maxY === -Number.MAX_VALUE || !Utils$1.isNumber(maxY) || minY === Number.MAX_VALUE || !Utils$1.isNumber(minY)) {\n        gl.yAxisScale[index] = this.niceScale(\n          Number.MIN_VALUE,\n          0,\n          index\n        );\n      } else {\n        gl.allSeriesCollapsed = false;\n        gl.yAxisScale[index] = this.niceScale(\n          minY,\n          maxY,\n          index\n        );\n      }\n    }\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  setXScale(minX, maxX) {\n    const w = this.w;\n    const gl = w.globals;\n    if (maxX === -Number.MAX_VALUE || !Utils$1.isNumber(maxX)) {\n      gl.xAxisScale = this.linearScale(0, 10, 10);\n    } else {\n      const ticks = gl.xTickAmount;\n      gl.xAxisScale = this.linearScale(\n        minX,\n        maxX,\n        ticks,\n        0,\n        w.config.xaxis.max === void 0 ? w.config.xaxis.stepSize : void 0\n      );\n    }\n    return gl.xAxisScale;\n  }\n  scaleMultipleYAxes() {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    this.coreUtils.setSeriesYAxisMappings();\n    const axisSeriesMap = gl.seriesYAxisMap;\n    const minYArr = gl.minYArr;\n    const maxYArr = gl.maxYArr;\n    const alignZeroParticipants = [];\n    const canAlignZero = !gl.isBarHorizontal;\n    gl.allSeriesCollapsed = true;\n    gl.barGroups = [];\n    axisSeriesMap.forEach((axisSeries, ai) => {\n      const groupNames = [];\n      axisSeries.forEach((as) => {\n        var _a;\n        const group = (\n          /** @type {Record<string,any>} */\n          (_a = cnf.series[as]) == null ? void 0 : _a.group\n        );\n        if (groupNames.indexOf(group) < 0) {\n          groupNames.push(group);\n        }\n      });\n      if (axisSeries.length > 0) {\n        let minY = Number.MAX_VALUE;\n        let maxY = -Number.MAX_VALUE;\n        let lowestY = minY;\n        let highestY = maxY;\n        let seriesType;\n        let seriesGroupName;\n        if (cnf.chart.stacked) {\n          const mapSeries = new Array(gl.dataPoints).fill(0);\n          const sumSeries = [];\n          const posSeries = [];\n          const negSeries = [];\n          groupNames.forEach(() => {\n            sumSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n            posSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n            negSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n          });\n          for (let i = 0; i < axisSeries.length; i++) {\n            if (!seriesType && /** @type {Record<string,any>} */\n            cnf.series[axisSeries[i]].type) {\n              seriesType = /** @type {Record<string,any>} */\n              cnf.series[axisSeries[i]].type;\n            }\n            const si = axisSeries[i];\n            if (\n              /** @type {Record<string,any>} */\n              cnf.series[si].group\n            ) {\n              seriesGroupName = /** @type {Record<string,any>} */\n              cnf.series[si].group;\n            } else {\n              seriesGroupName = \"axis-\".concat(ai.toString());\n            }\n            const collapsed = !(gl.collapsedSeriesIndices.indexOf(si) < 0 && gl.ancillaryCollapsedSeriesIndices.indexOf(si) < 0);\n            if (!collapsed) {\n              gl.allSeriesCollapsed = false;\n              groupNames.forEach((gn, gni) => {\n                if (\n                  /** @type {Record<string,any>} */\n                  cnf.series[si].group === gn\n                ) {\n                  for (let j = 0; j < this.w.seriesData.series[si].length; j++) {\n                    const val = this.w.seriesData.series[si][j];\n                    if (val >= 0) {\n                      posSeries[gni][j] += val;\n                    } else {\n                      negSeries[gni][j] += val;\n                    }\n                    sumSeries[gni][j] += val;\n                    lowestY = Math.min(lowestY, val);\n                    highestY = Math.max(highestY, val);\n                  }\n                }\n              });\n            }\n            if (seriesType === \"bar\" || seriesType === \"column\") {\n              gl.barGroups.push(seriesGroupName);\n            }\n          }\n          if (!seriesType) {\n            seriesType = cnf.chart.type;\n          }\n          if (seriesType === \"bar\" || seriesType === \"column\") {\n            groupNames.forEach((gn, gni) => {\n              minY = Math.min(minY, Math.min.apply(null, negSeries[gni]));\n              maxY = Math.max(maxY, Math.max.apply(null, posSeries[gni]));\n            });\n          } else {\n            groupNames.forEach((gn, gni) => {\n              lowestY = Math.min(lowestY, Math.min.apply(null, sumSeries[gni]));\n              highestY = Math.max(\n                highestY,\n                Math.max.apply(null, sumSeries[gni])\n              );\n            });\n            minY = lowestY;\n            maxY = highestY;\n          }\n          if (minY === Number.MIN_VALUE && maxY === Number.MIN_VALUE) {\n            maxY = -Number.MAX_VALUE;\n          }\n        } else {\n          for (let i = 0; i < axisSeries.length; i++) {\n            const si = axisSeries[i];\n            minY = Math.min(minY, minYArr[si]);\n            maxY = Math.max(maxY, maxYArr[si]);\n            const collapsed = !(gl.collapsedSeriesIndices.indexOf(si) < 0 && gl.ancillaryCollapsedSeriesIndices.indexOf(si) < 0);\n            if (!collapsed) {\n              gl.allSeriesCollapsed = false;\n            }\n          }\n        }\n        if (cnf.yaxis[ai].min !== void 0) {\n          if (typeof cnf.yaxis[ai].min === \"function\") {\n            minY = cnf.yaxis[ai].min(minY);\n          } else {\n            minY = cnf.yaxis[ai].min;\n          }\n        }\n        if (cnf.yaxis[ai].max !== void 0) {\n          if (typeof cnf.yaxis[ai].max === \"function\") {\n            maxY = cnf.yaxis[ai].max(maxY);\n          } else {\n            maxY = cnf.yaxis[ai].max;\n          }\n        }\n        gl.barGroups = gl.barGroups.filter((v, i, a) => a.indexOf(v) === i);\n        const yaxe = cnf.yaxis[ai];\n        const participates = canAlignZero && yaxe.alignZero === true && !yaxe.logarithmic && yaxe.min === void 0 && yaxe.max === void 0 && gl.ignoreYAxisIndexes.indexOf(ai) < 0 && Utils$1.isNumber(minY) && Utils$1.isNumber(maxY);\n        if (participates) {\n          alignZeroParticipants.push({ ai, minY, maxY });\n        } else {\n          this.setYScaleForIndex(ai, minY, maxY);\n          axisSeries.forEach((si) => {\n            minYArr[si] = gl.yAxisScale[ai].niceMin;\n            maxYArr[si] = gl.yAxisScale[ai].niceMax;\n          });\n        }\n      } else {\n        this.setYScaleForIndex(ai, 0, -Number.MAX_VALUE);\n      }\n    });\n    if (alignZeroParticipants.length >= 2) {\n      alignZeroParticipants.forEach((p) => {\n        this.setYScaleForIndex(p.ai, p.minY, p.maxY);\n        axisSeriesMap[p.ai].forEach((si) => {\n          minYArr[si] = gl.yAxisScale[p.ai].niceMin;\n          maxYArr[si] = gl.yAxisScale[p.ai].niceMax;\n        });\n      });\n      let targetRatio = 0;\n      alignZeroParticipants.forEach((p) => {\n        const scale = gl.yAxisScale[p.ai];\n        const range = scale.niceMax - scale.niceMin;\n        if (range > 0) {\n          const r = -scale.niceMin / range;\n          if (r > targetRatio) targetRatio = r;\n        }\n      });\n      if (targetRatio > 1) targetRatio = 1;\n      if (targetRatio < 0) targetRatio = 0;\n      const niceRoundUp = (raw) => {\n        if (raw <= 0) return 1;\n        const mag = Math.floor(Math.log10(raw));\n        const magPow = Math.pow(10, mag);\n        const msd = raw / magPow;\n        let mult;\n        if (msd <= 1 + 1e-9) mult = 1;\n        else if (msd <= 2 + 1e-9) mult = 2;\n        else if (msd <= 2.5 + 1e-9) mult = 2.5;\n        else if (msd <= 5 + 1e-9) mult = 5;\n        else mult = 10;\n        return mult * magPow;\n      };\n      alignZeroParticipants.forEach((p) => {\n        const scale = gl.yAxisScale[p.ai];\n        if (!scale.result || scale.result.length < 2) return;\n        const range = scale.niceMax - scale.niceMin;\n        if (range <= 0) return;\n        const r = -scale.niceMin / range;\n        if (Math.abs(r - targetRatio) <= 1e-9) return;\n        const extendMin = r < targetRatio && targetRatio < 1 - 1e-9;\n        const extendMaxOnly = !extendMin && r > targetRatio && targetRatio > 1e-9;\n        if (!extendMin && !extendMaxOnly) return;\n        const targetNiceMin = extendMin ? -targetRatio * scale.niceMax / (1 - targetRatio) : scale.niceMin;\n        const targetNiceMax = extendMaxOnly ? -scale.niceMin * (1 - targetRatio) / targetRatio : scale.niceMax;\n        const newRange = targetNiceMax - targetNiceMin;\n        if (newRange <= 0) return;\n        const desiredTicks = Math.max(scale.result.length, 5);\n        const newStep = niceRoundUp(newRange / Math.max(desiredTicks - 1, 1));\n        if (newStep <= 0) return;\n        let newNiceMin;\n        let newNiceMax;\n        if (extendMin) {\n          newNiceMin = Math.floor(targetNiceMin / newStep + 1e-9) * newStep;\n          const requiredMax = targetRatio > 1e-9 ? newNiceMin * (targetRatio - 1) / targetRatio : scale.niceMax;\n          const maxNeeded = Math.max(requiredMax, scale.niceMax);\n          newNiceMax = Math.ceil(maxNeeded / newStep - 1e-9) * newStep;\n        } else {\n          newNiceMax = Math.ceil(targetNiceMax / newStep - 1e-9) * newStep;\n          const requiredMin = targetRatio < 1 - 1e-9 ? -targetRatio * newNiceMax / (1 - targetRatio) : scale.niceMin;\n          const minNeeded = Math.min(requiredMin, scale.niceMin);\n          newNiceMin = Math.floor(minNeeded / newStep + 1e-9) * newStep;\n        }\n        scale.result = [];\n        for (let v = newNiceMin; v <= newNiceMax + newStep * 1e-9; v = Utils$1.preciseAddition(v, newStep)) {\n          scale.result.push(Utils$1.stripNumber(v, 7));\n        }\n        scale.niceMin = newNiceMin;\n        scale.niceMax = newNiceMax;\n        axisSeriesMap[p.ai].forEach((si) => {\n          minYArr[si] = scale.niceMin;\n          maxYArr[si] = scale.niceMax;\n        });\n      });\n    } else if (alignZeroParticipants.length === 1) {\n      const p = alignZeroParticipants[0];\n      this.setYScaleForIndex(p.ai, p.minY, p.maxY);\n      axisSeriesMap[p.ai].forEach((si) => {\n        minYArr[si] = gl.yAxisScale[p.ai].niceMin;\n        maxYArr[si] = gl.yAxisScale[p.ai].niceMax;\n      });\n    }\n  }\n}\nclass Range {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.scales = new Scales(this.w);\n  }\n  init() {\n    this.setYRange();\n    this.setXRange();\n    this.setZRange();\n  }\n  /**\n   * One rendered x-pixel expressed in data units, used to widen the\n   * autoScaleYaxis window so a boundary point that is still drawn inside the\n   * plot survives a sub-pixel rounding error in `xaxis.min`/`xaxis.max`.\n   *\n   * The window is taken from the configured bounds (that is what maps onto the\n   * grid) and falls back to the series' own x-extent for whichever bound is\n   * unset. Returns 0 when there is nothing to scale against: `gridWidth` is\n   * still 0 before the first `plotCoords()` run, and a first render has no\n   * pixel round-trip to compensate for anyway.\n   *\n   * @param {number[] | undefined} seriesX\n   * @returns {number}\n   */\n  _xPixelTolerance(seriesX) {\n    const gridWidth = this.w.layout.gridWidth;\n    if (!gridWidth || !seriesX || !seriesX.length) return 0;\n    const cnfX = this.w.config.xaxis;\n    const lo = typeof cnfX.min === \"number\" ? cnfX.min : seriesX[0];\n    const hi = typeof cnfX.max === \"number\" ? cnfX.max : seriesX[seriesX.length - 1];\n    if (!(hi > lo)) return 0;\n    return (hi - lo) / gridWidth;\n  }\n  /**\n   * @param {number} startingSeriesIndex\n   * @param {number | null} [endingSeriesIndex]\n   */\n  getMinYMaxY(startingSeriesIndex, lowestY = Number.MAX_VALUE, highestY = -Number.MAX_VALUE, endingSeriesIndex = null) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    let maxY = -Number.MAX_VALUE;\n    let minY = Number.MIN_VALUE;\n    if (endingSeriesIndex === null) {\n      endingSeriesIndex = startingSeriesIndex + 1;\n    }\n    const series = this.w.seriesData.series;\n    let seriesMin = series;\n    let seriesMax = series;\n    if (cnf.chart.type === \"candlestick\") {\n      seriesMin = this.w.candleData.seriesCandleL;\n      seriesMax = this.w.candleData.seriesCandleH;\n    } else if (cnf.chart.type === \"boxPlot\") {\n      seriesMin = this.w.candleData.seriesCandleO;\n      seriesMax = this.w.candleData.seriesCandleC;\n    } else if (cnf.chart.type === \"violin\") {\n      seriesMin = this.w.violinData.seriesViolinMin;\n      seriesMax = this.w.violinData.seriesViolinMax;\n    } else if (this.w.axisFlags.isRangeData) {\n      seriesMin = this.w.rangeData.seriesRangeStart;\n      seriesMax = this.w.rangeData.seriesRangeEnd;\n    }\n    let autoScaleYaxis = false;\n    if (this.w.seriesData.seriesX.length >= endingSeriesIndex) {\n      const brush = (\n        /** @type {any} */\n        (_a = gl.brushSource) == null ? void 0 : _a.w.config.chart.brush\n      );\n      if (cnf.chart.zoom.enabled && cnf.chart.zoom.autoScaleYaxis || (brush == null ? void 0 : brush.enabled) && (brush == null ? void 0 : brush.autoScaleYaxis)) {\n        autoScaleYaxis = true;\n      }\n    }\n    for (let i = startingSeriesIndex; i < endingSeriesIndex; i++) {\n      gl.dataPoints = Math.max(gl.dataPoints, series[i].length);\n      const seriesType = (\n        /** @type {Record<string,any>} */\n        cnf.series[i].type\n      );\n      if (this.w.labelData.categoryLabels.length) {\n        gl.dataPoints = this.w.labelData.categoryLabels.filter(\n          (label) => typeof label !== \"undefined\"\n        ).length;\n      }\n      if (this.w.labelData.labels.length && cnf.xaxis.type !== \"datetime\" && /**\n       * @param {number} a\n       * @param {number[]} c\n       */\n      this.w.seriesData.series.reduce((a, c) => a + c.length, 0) !== 0) {\n        gl.dataPoints = Math.max(gl.dataPoints, this.w.labelData.labels.length);\n      }\n      let firstXIndex = 0;\n      let lastXIndex = series[i].length - 1;\n      if (autoScaleYaxis) {\n        const xTolerance = this._xPixelTolerance(this.w.seriesData.seriesX[i]);\n        if (cnf.xaxis.min) {\n          const lowerBound = cnf.xaxis.min - xTolerance;\n          for (; firstXIndex < lastXIndex && this.w.seriesData.seriesX[i][firstXIndex] < lowerBound; firstXIndex++) {\n          }\n        }\n        if (cnf.xaxis.max) {\n          const upperBound = cnf.xaxis.max + xTolerance;\n          for (; lastXIndex > firstXIndex && this.w.seriesData.seriesX[i][lastXIndex] > upperBound; lastXIndex--) {\n          }\n        }\n      }\n      const plainNumeric = seriesMin === series && seriesMax === series && cnf.chart.type !== \"boxPlot\" && seriesType !== \"candlestick\" && seriesType !== \"boxPlot\" && seriesType !== \"violin\" && seriesType !== \"rangeArea\" && seriesType !== \"rangeBar\" && !(this.w.seriesData.seriesGoals[i] && this.w.seriesData.seriesGoals[i].length);\n      if (plainNumeric) {\n        const arr = series[i];\n        const jEnd = Math.min(lastXIndex, arr.length - 1);\n        const pe = (_b = this.w.seriesData._parsedExtrema) == null ? void 0 : _b[i];\n        if (pe && pe.ref === arr && pe.len === arr.length && firstXIndex === 0 && jEnd === arr.length - 1) {\n          if (pe.maxY > maxY) maxY = pe.maxY;\n          if (pe.lowestY < lowestY) lowestY = pe.lowestY;\n          if (pe.negMinY < 0 && pe.negMinY < minY) minY = pe.negMinY;\n          if (pe.yDec > gl.yValueDecimal) gl.yValueDecimal = pe.yDec;\n          if (pe.hasNulls) gl.hasNullValues = true;\n        } else {\n          let yDec = gl.yValueDecimal;\n          let hasNulls = false;\n          for (let j = firstXIndex; j <= jEnd; j++) {\n            const val = arr[j];\n            if (val !== null && typeof val === \"number\" && val === val && val !== Infinity && val !== -Infinity) {\n              if (val > maxY) maxY = val;\n              if (val < lowestY) lowestY = val;\n              if (minY > val && val < 0) minY = val;\n              if (!Number.isInteger(val)) {\n                const av = val < 0 ? -val : val;\n                if (av >= 1e-6 && av < 1e21) {\n                  const str = \"\" + val;\n                  const dot = str.indexOf(\".\");\n                  const dec = dot === -1 ? 0 : str.length - dot - 1;\n                  if (dec > yDec) yDec = dec;\n                } else {\n                  const nv = Utils$1.noExponents(val);\n                  if (Utils$1.isFloat(nv)) {\n                    yDec = Math.max(yDec, nv.toString().split(\".\")[1].length);\n                  }\n                }\n              }\n            } else {\n              hasNulls = true;\n            }\n          }\n          gl.yValueDecimal = yDec;\n          if (hasNulls) gl.hasNullValues = true;\n        }\n        highestY = maxY;\n        if (seriesType === \"bar\" || seriesType === \"column\") {\n          if (minY < 0 && maxY < 0) {\n            maxY = 0;\n            highestY = Math.max(highestY, 0);\n          }\n          if (minY === Number.MIN_VALUE) {\n            minY = 0;\n            lowestY = Math.min(lowestY, 0);\n          }\n        }\n        continue;\n      }\n      for (let j = firstXIndex; j <= lastXIndex && j < this.w.seriesData.series[i].length; j++) {\n        let val = series[i][j];\n        if (val !== null && Utils$1.isNumber(val)) {\n          if (typeof ((_c = seriesMax[i]) == null ? void 0 : _c[j]) !== \"undefined\") {\n            maxY = Math.max(maxY, seriesMax[i][j]);\n            lowestY = Math.min(lowestY, seriesMax[i][j]);\n          }\n          if (typeof ((_d = seriesMin[i]) == null ? void 0 : _d[j]) !== \"undefined\") {\n            lowestY = Math.min(lowestY, seriesMin[i][j]);\n            highestY = Math.max(highestY, seriesMin[i][j]);\n          }\n          switch (seriesType) {\n            case \"candlestick\":\n              {\n                if (typeof this.w.candleData.seriesCandleC[i][j] !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.candleData.seriesCandleH[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.candleData.seriesCandleL[i][j]\n                  );\n                }\n              }\n              break;\n            case \"boxPlot\":\n              {\n                if (typeof this.w.candleData.seriesCandleC[i][j] !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.candleData.seriesCandleC[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.candleData.seriesCandleO[i][j]\n                  );\n                }\n              }\n              break;\n            case \"violin\":\n              {\n                if (typeof ((_e = this.w.violinData.seriesViolinMax[i]) == null ? void 0 : _e[j]) !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.violinData.seriesViolinMax[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.violinData.seriesViolinMin[i][j]\n                  );\n                }\n              }\n              break;\n          }\n          if (seriesType && seriesType !== \"candlestick\" && seriesType !== \"boxPlot\" && seriesType !== \"violin\" && seriesType !== \"rangeArea\" && seriesType !== \"rangeBar\") {\n            maxY = Math.max(maxY, this.w.seriesData.series[i][j]);\n            lowestY = Math.min(lowestY, this.w.seriesData.series[i][j]);\n          }\n          if (this.w.seriesData.seriesGoals[i] && this.w.seriesData.seriesGoals[i][j] && Array.isArray(this.w.seriesData.seriesGoals[i][j])) {\n            this.w.seriesData.seriesGoals[i][j].forEach(\n              (g) => {\n                maxY = Math.max(maxY, g.value);\n                lowestY = Math.min(lowestY, g.value);\n              }\n            );\n          }\n          if (this.w.config.chart.type === \"boxPlot\" || seriesType === \"boxPlot\") {\n            const boxPts = (_g = (_f = this.w.candleData.seriesBoxPoints) == null ? void 0 : _f[i]) == null ? void 0 : _g[j];\n            if (boxPts) {\n              for (let p = 0; p < boxPts.length; p++) {\n                const pv = boxPts[p];\n                if (typeof pv === \"number\") {\n                  maxY = Math.max(maxY, pv);\n                  lowestY = Math.min(lowestY, pv);\n                }\n              }\n            }\n          }\n          highestY = maxY;\n          val = Utils$1.noExponents(val);\n          if (Utils$1.isFloat(val)) {\n            gl.yValueDecimal = Math.max(\n              gl.yValueDecimal,\n              val.toString().split(\".\")[1].length\n            );\n          }\n          if (minY > ((_h = seriesMin[i]) == null ? void 0 : _h[j]) && ((_i = seriesMin[i]) == null ? void 0 : _i[j]) < 0) {\n            minY = seriesMin[i][j];\n          }\n        } else {\n          gl.hasNullValues = true;\n        }\n      }\n      if (seriesType === \"bar\" || seriesType === \"column\") {\n        if (minY < 0 && maxY < 0) {\n          maxY = 0;\n          highestY = Math.max(highestY, 0);\n        }\n        if (minY === Number.MIN_VALUE) {\n          minY = 0;\n          lowestY = Math.min(lowestY, 0);\n        }\n      }\n    }\n    if (cnf.chart.type === \"rangeBar\" && this.w.rangeData.seriesRangeStart.length && gl.isBarHorizontal) {\n      minY = lowestY;\n    }\n    if (cnf.chart.type === \"bar\") {\n      if (minY < 0 && maxY < 0) {\n        maxY = 0;\n      }\n      if (minY === Number.MIN_VALUE) {\n        minY = 0;\n      }\n    }\n    return {\n      minY,\n      maxY,\n      lowestY,\n      highestY\n    };\n  }\n  setYRange() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    gl.maxY = -Number.MAX_VALUE;\n    gl.minY = Number.MIN_VALUE;\n    let lowestYInAllSeries = Number.MAX_VALUE;\n    let minYMaxY;\n    if (gl.isMultipleYAxis) {\n      lowestYInAllSeries = Number.MAX_VALUE;\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        minYMaxY = this.getMinYMaxY(i);\n        gl.minYArr[i] = minYMaxY.lowestY;\n        gl.maxYArr[i] = minYMaxY.highestY;\n        lowestYInAllSeries = Math.min(lowestYInAllSeries, minYMaxY.lowestY);\n      }\n    }\n    minYMaxY = this.getMinYMaxY(\n      0,\n      lowestYInAllSeries,\n      void 0,\n      this.w.seriesData.series.length\n    );\n    if (cnf.chart.type === \"bar\") {\n      gl.minY = minYMaxY.minY;\n      gl.maxY = minYMaxY.maxY;\n    } else {\n      gl.minY = minYMaxY.lowestY;\n      gl.maxY = minYMaxY.highestY;\n    }\n    lowestYInAllSeries = minYMaxY.lowestY;\n    if (cnf.chart.stacked) {\n      this._setStackedMinMax();\n    }\n    if (cnf.chart.type === \"line\" || cnf.chart.type === \"area\" || cnf.chart.type === \"scatter\" || cnf.chart.type === \"candlestick\" || cnf.chart.type === \"boxPlot\" || cnf.chart.type === \"violin\" || cnf.chart.type === \"rangeBar\" && !gl.isBarHorizontal) {\n      if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY) {\n        gl.minY = lowestYInAllSeries;\n      }\n    } else {\n      gl.minY = gl.minY !== Number.MIN_VALUE ? Math.min(minYMaxY.minY, gl.minY) : minYMaxY.minY;\n    }\n    cnf.yaxis.forEach((yaxe, index) => {\n      if (yaxe.max !== void 0) {\n        if (typeof yaxe.max === \"number\") {\n          gl.maxYArr[index] = yaxe.max;\n        } else if (typeof yaxe.max === \"function\") {\n          gl.maxYArr[index] = yaxe.max(\n            gl.isMultipleYAxis ? gl.maxYArr[index] : gl.maxY\n          );\n        }\n        gl.maxY = gl.maxYArr[index];\n      }\n      if (yaxe.min !== void 0) {\n        if (typeof yaxe.min === \"number\") {\n          gl.minYArr[index] = yaxe.min;\n        } else if (typeof yaxe.min === \"function\") {\n          gl.minYArr[index] = yaxe.min(\n            gl.isMultipleYAxis ? gl.minYArr[index] === Number.MIN_VALUE ? 0 : gl.minYArr[index] : gl.minY\n          );\n        }\n        gl.minY = gl.minYArr[index];\n      }\n    });\n    if (gl.isBarHorizontal) {\n      const minmax = [\"min\", \"max\"];\n      minmax.forEach((m) => {\n        if (cnf.xaxis[m] !== void 0 && typeof cnf.xaxis[m] === \"number\") {\n          m === \"min\" ? gl.minY = cnf.xaxis[m] : gl.maxY = cnf.xaxis[m];\n        }\n      });\n    }\n    if (gl.isMultipleYAxis) {\n      this.scales.scaleMultipleYAxes();\n      gl.minY = lowestYInAllSeries;\n    } else {\n      this.scales.setYScaleForIndex(0, gl.minY, gl.maxY);\n      gl.minY = gl.yAxisScale[0].niceMin;\n      gl.maxY = gl.yAxisScale[0].niceMax;\n      gl.minYArr[0] = gl.minY;\n      gl.maxYArr[0] = gl.maxY;\n    }\n    gl.barGroups = [];\n    gl.lineGroups = [];\n    gl.areaGroups = [];\n    cnf.series.forEach((s) => {\n      const _s = (\n        /** @type {any} */\n        s\n      );\n      const type = _s.type || cnf.chart.type;\n      switch (type) {\n        case \"bar\":\n        case \"column\":\n          gl.barGroups.push(_s.group);\n          break;\n        case \"line\":\n          gl.lineGroups.push(_s.group);\n          break;\n        case \"area\":\n          gl.areaGroups.push(_s.group);\n          break;\n      }\n    });\n    gl.barGroups = gl.barGroups.filter((v, i, a) => a.indexOf(v) === i);\n    gl.lineGroups = gl.lineGroups.filter((v, i, a) => a.indexOf(v) === i);\n    gl.areaGroups = gl.areaGroups.filter((v, i, a) => a.indexOf(v) === i);\n    return {\n      minY: gl.minY,\n      maxY: gl.maxY,\n      minYArr: gl.minYArr,\n      maxYArr: gl.maxYArr,\n      yAxisScale: gl.yAxisScale\n    };\n  }\n  setXRange() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const isXNumeric = cnf.xaxis.type === \"numeric\" || cnf.xaxis.type === \"datetime\" || cnf.xaxis.type === \"category\" && !this.w.axisFlags.noLabelsProvided || this.w.axisFlags.noLabelsProvided || this.w.axisFlags.isXNumeric;\n    const getInitialMinXMaxX = () => {\n      var _a;\n      let minX = gl.minX;\n      let maxX = gl.maxX;\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        const lbls = (\n          /** @type {any} */\n          this.w.labelData.labels[i]\n        );\n        if (!lbls) continue;\n        const pe = (_a = this.w.seriesData._parsedExtrema) == null ? void 0 : _a[i];\n        if (pe && pe.xNumeric && pe.xref === lbls && pe.len === lbls.length) {\n          if (pe.maxX > maxX) maxX = pe.maxX;\n          if (pe.minX < minX) minX = pe.minX;\n          continue;\n        }\n        for (let j = 0; j < lbls.length; j++) {\n          const v = lbls[j];\n          if (v !== null && typeof v === \"number\" && v === v) {\n            if (v > maxX) maxX = v;\n            if (v < minX) minX = v;\n          }\n        }\n      }\n      gl.maxX = maxX;\n      gl.initialMaxX = maxX;\n      gl.minX = minX;\n      gl.initialMinX = minX;\n    };\n    if (this.w.axisFlags.isXNumeric) {\n      getInitialMinXMaxX();\n    }\n    if (this.w.axisFlags.noLabelsProvided) {\n      if (cnf.xaxis.categories.length === 0) {\n        gl.maxX = /** @type {any} */\n        this.w.labelData.labels[this.w.labelData.labels.length - 1];\n        gl.initialMaxX = /** @type {any} */\n        this.w.labelData.labels[this.w.labelData.labels.length - 1];\n        gl.minX = 1;\n        gl.initialMinX = 1;\n      }\n    }\n    if (this.w.axisFlags.isXNumeric || this.w.axisFlags.noLabelsProvided || this.w.axisFlags.dataFormatXNumeric) {\n      let ticks = 10;\n      if (cnf.xaxis.tickAmount === void 0) {\n        ticks = Math.round(gl.svgWidth / 150);\n        if (cnf.xaxis.type === \"numeric\" && gl.dataPoints < 30) {\n          ticks = gl.dataPoints - 1;\n        }\n        if (ticks > gl.dataPoints && gl.dataPoints !== 0) {\n          ticks = gl.dataPoints - 1;\n        }\n      } else if (cnf.xaxis.tickAmount === \"dataPoints\") {\n        if (this.w.seriesData.series.length > 1) {\n          ticks = this.w.seriesData.series[gl.maxValsInArrayIndex].length - 1;\n        }\n        if (this.w.axisFlags.isXNumeric) {\n          const diff = Math.round(gl.maxX - gl.minX);\n          if (diff < 30) {\n            ticks = diff;\n          }\n        }\n      } else {\n        ticks = cnf.xaxis.tickAmount;\n      }\n      gl.xTickAmount = ticks;\n      if (cnf.xaxis.max !== void 0 && typeof cnf.xaxis.max === \"number\") {\n        gl.maxX = cnf.xaxis.max;\n      }\n      if (cnf.xaxis.min !== void 0 && typeof cnf.xaxis.min === \"number\") {\n        gl.minX = cnf.xaxis.min;\n      }\n      if (cnf.xaxis.range !== void 0) {\n        gl.minX = gl.maxX - cnf.xaxis.range;\n      }\n      if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) {\n        if (cnf.xaxis.convertedCatToNumeric && !this.w.axisFlags.dataFormatXNumeric) {\n          const catScale = [];\n          for (let i = gl.minX - 1; i < gl.maxX; i++) {\n            catScale.push(i + 1);\n          }\n          gl.xAxisScale = {\n            result: catScale,\n            niceMin: catScale[0],\n            niceMax: catScale[catScale.length - 1]\n          };\n        } else {\n          gl.xAxisScale = this.scales.setXScale(gl.minX, gl.maxX);\n        }\n      } else {\n        gl.xAxisScale = this.scales.linearScale(\n          0,\n          ticks,\n          ticks,\n          0,\n          cnf.xaxis.stepSize\n        );\n        if (this.w.axisFlags.noLabelsProvided && this.w.labelData.labels.length > 0) {\n          gl.xAxisScale = this.scales.linearScale(\n            1,\n            this.w.labelData.labels.length,\n            ticks - 1,\n            0,\n            cnf.xaxis.stepSize\n          );\n          this.w.seriesData.seriesX = /** @type {any} */\n          this.w.labelData.labels.slice();\n        }\n      }\n      if (isXNumeric) {\n        this.w.labelData.labels = /** @type {any} */\n        gl.xAxisScale.result.slice();\n      }\n    }\n    if (gl.isBarHorizontal && this.w.labelData.labels.length) {\n      gl.xTickAmount = this.w.labelData.labels.length;\n    }\n    this._handleSingleDataPoint();\n    this._getMinXDiff();\n    return {\n      minX: gl.minX,\n      maxX: gl.maxX\n    };\n  }\n  setZRange() {\n    const gl = this.w.globals;\n    if (!this.w.axisFlags.isDataXYZ) return;\n    for (let i = 0; i < this.w.seriesData.series.length; i++) {\n      if (typeof this.w.seriesData.seriesZ[i] !== \"undefined\") {\n        for (let j = 0; j < this.w.seriesData.seriesZ[i].length; j++) {\n          if (this.w.seriesData.seriesZ[i][j] !== null && Utils$1.isNumber(this.w.seriesData.seriesZ[i][j])) {\n            gl.maxZ = Math.max(gl.maxZ, this.w.seriesData.seriesZ[i][j]);\n            gl.minZ = Math.min(gl.minZ, this.w.seriesData.seriesZ[i][j]);\n          }\n        }\n      }\n    }\n  }\n  _handleSingleDataPoint() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    if (gl.minX === gl.maxX) {\n      const datetimeObj = new DateTime(this.w);\n      if (cnf.xaxis.type === \"datetime\") {\n        const newMinX = datetimeObj.getDate(gl.minX);\n        if (cnf.xaxis.labels.datetimeUTC) {\n          newMinX.setUTCDate(newMinX.getUTCDate() - 2);\n        } else {\n          newMinX.setDate(newMinX.getDate() - 2);\n        }\n        gl.minX = new Date(newMinX).getTime();\n        const newMaxX = datetimeObj.getDate(gl.maxX);\n        if (cnf.xaxis.labels.datetimeUTC) {\n          newMaxX.setUTCDate(newMaxX.getUTCDate() + 2);\n        } else {\n          newMaxX.setDate(newMaxX.getDate() + 2);\n        }\n        gl.maxX = new Date(newMaxX).getTime();\n      } else if (cnf.xaxis.type === \"numeric\" || cnf.xaxis.type === \"category\" && !this.w.axisFlags.noLabelsProvided) {\n        gl.minX = gl.minX - 2;\n        gl.initialMinX = gl.minX;\n        gl.maxX = gl.maxX + 2;\n        gl.initialMaxX = gl.maxX;\n      }\n    }\n  }\n  _getMinXDiff() {\n    const gl = this.w.globals;\n    if (this.w.axisFlags.isXNumeric) {\n      this.w.seriesData.seriesX.forEach((sX, si) => {\n        var _a;\n        if (sX.length) {\n          if (sX.length === 1) {\n            sX.push(\n              this.w.seriesData.seriesX[gl.maxValsInArrayIndex][this.w.seriesData.seriesX[gl.maxValsInArrayIndex].length - 1]\n            );\n          }\n          const pe = (_a = this.w.seriesData._parsedExtrema) == null ? void 0 : _a[si];\n          if (pe && pe.xNumeric && pe.xSorted && pe.xref === sX && pe.len === sX.length) {\n            if (pe.minXDiff < gl.minXDiff) gl.minXDiff = pe.minXDiff;\n            if (gl.dataPoints === 1 || gl.minXDiff === Number.MAX_VALUE) {\n              gl.minXDiff = 0.5;\n            }\n            return;\n          }\n          let presorted = true;\n          let minDiff = gl.minXDiff;\n          for (let j = 1; j < sX.length; j++) {\n            const d = sX[j] - sX[j - 1];\n            if (d > 0) {\n              if (d < minDiff) minDiff = d;\n            } else if (d < 0) {\n              presorted = false;\n              break;\n            }\n          }\n          if (presorted) {\n            gl.minXDiff = minDiff;\n            if (gl.dataPoints === 1 || gl.minXDiff === Number.MAX_VALUE) {\n              gl.minXDiff = 0.5;\n            }\n            return;\n          }\n          const seriesX = sX.slice();\n          seriesX.sort((a, b) => a - b);\n          seriesX.forEach((s, j) => {\n            if (j > 0) {\n              const xDiff = s - seriesX[j - 1];\n              if (xDiff > 0) {\n                gl.minXDiff = Math.min(xDiff, gl.minXDiff);\n              }\n            }\n          });\n          if (gl.dataPoints === 1 || gl.minXDiff === Number.MAX_VALUE) {\n            gl.minXDiff = 0.5;\n          }\n        }\n      });\n    }\n  }\n  _setStackedMinMax() {\n    const gl = this.w.globals;\n    if (!this.w.seriesData.series.length) return;\n    let seriesGroups = this.w.labelData.seriesGroups;\n    if (!seriesGroups.length) {\n      seriesGroups = [this.w.seriesData.seriesNames.map((name2) => name2)];\n    }\n    const stackedPoss = {};\n    const stackedNegs = {};\n    seriesGroups.forEach((group) => {\n      stackedPoss[group] = [];\n      stackedNegs[group] = [];\n      const indicesOfSeriesInGroup = this.w.config.series.map(\n        (serie, si) => group.indexOf(this.w.seriesData.seriesNames[si]) > -1 ? si : null\n      ).filter((f) => f !== null);\n      indicesOfSeriesInGroup.forEach((i) => {\n        var _a, _b, _c, _d;\n        for (let j = 0; j < this.w.seriesData.series[gl.maxValsInArrayIndex].length; j++) {\n          if (typeof stackedPoss[group][j] === \"undefined\") {\n            stackedPoss[group][j] = 0;\n            stackedNegs[group][j] = 0;\n          }\n          const stackSeries = this.w.config.chart.stacked && !gl.comboCharts || this.w.config.chart.stacked && gl.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {Record<string,any>} */\n          ((_b = (_a = this.w.config.series) == null ? void 0 : _a[i]) == null ? void 0 : _b.type) === \"bar\" || /** @type {Record<string,any>} */\n          ((_d = (_c = this.w.config.series) == null ? void 0 : _c[i]) == null ? void 0 : _d.type) === \"column\");\n          if (stackSeries) {\n            if (this.w.seriesData.series[i][j] !== null && Utils$1.isNumber(this.w.seriesData.series[i][j])) {\n              this.w.seriesData.series[i][j] > 0 ? stackedPoss[group][j] += parseFloat(String(this.w.seriesData.series[i][j])) + 1e-4 : stackedNegs[group][j] += parseFloat(\n                String(this.w.seriesData.series[i][j])\n              );\n            }\n          }\n        }\n      });\n    });\n    Object.entries(stackedPoss).forEach(([key]) => {\n      stackedPoss[key].forEach(\n        (_, stgi) => {\n          gl.maxY = Math.max(gl.maxY, stackedPoss[key][stgi]);\n          gl.minY = Math.min(gl.minY, stackedNegs[key][stgi]);\n        }\n      );\n    });\n  }\n}\nfunction getThemePalettes() {\n  return {\n    // All colours pass WCAG 1.4.11 non-text contrast (≥ 3:1) against the\n    // default light (#fff) and dark (#293450) theme backgrounds.\n    palette1: [\"#008FFB\", \"#00A86F\", \"#CA8501\", \"#FF4560\", \"#846DD5\"],\n    palette2: [\"#6978CB\", \"#039DE2\", \"#49A84D\", \"#B39105\", \"#D68000\"],\n    palette3: [\"#209FCC\", \"#648291\", \"#D4526E\", \"#0FA783\", \"#A19285\"],\n    palette4: [\"#2FA59D\", \"#73A20B\", \"#099DE1\", \"#FD5D5D\", \"#648291\"],\n    palette5: [\"#2B908F\", \"#F56566\", \"#2EAB16\", \"#FA4443\", \"#1EA2BD\"],\n    palette6: [\"#449DD1\", \"#F86624\", \"#EA3A4A\", \"#9C63D1\", \"#899E2A\"],\n    palette7: [\"#DF475B\", \"#1B998B\", \"#7E75B7\", \"#F46036\", \"#B1911B\"],\n    palette8: [\"#9C63D1\", \"#F86624\", \"#B38F04\", \"#EA3A4A\", \"#2FA2B3\"],\n    palette9: [\"#98776F\", \"#A19285\", \"#A8705E\", \"#BA6560\", \"#A0927F\"],\n    palette10: [\"#C91EFF\", \"#A94BFD\", \"#6C6AFE\", \"#2983FF\", \"#009ED8\"],\n    // CVD-safe palettes (Wong 2011 / IBM design)\n    cvdDeuteranopia: [\n      \"#0072B2\",\n      \"#E69F00\",\n      \"#56B4E9\",\n      \"#009E73\",\n      \"#F0E442\",\n      \"#D55E00\",\n      \"#CC79A7\"\n    ],\n    cvdProtanopia: [\n      \"#0077BB\",\n      \"#EE7733\",\n      \"#009988\",\n      \"#EE3377\",\n      \"#BBBBBB\",\n      \"#33BBEE\",\n      \"#CC3311\"\n    ],\n    cvdTritanopia: [\n      \"#CC3311\",\n      \"#009988\",\n      \"#EE7733\",\n      \"#0077BB\",\n      \"#EE3377\",\n      \"#BBBBBB\",\n      \"#33BBEE\"\n    ],\n    highContrast: [\n      \"#005A9C\",\n      \"#C00000\",\n      \"#007A33\",\n      \"#6C3483\",\n      \"#7B3F00\",\n      \"#0097A7\",\n      \"#4A235A\"\n    ]\n  };\n}\nclass YAxis {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {any} [elgrid]\n   */\n  constructor(w, { theme = null, timeScale = null } = {}, elgrid) {\n    this.w = w;\n    this.elgrid = elgrid;\n    this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n    this.axisFontFamily = w.config.xaxis.labels.style.fontFamily;\n    this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n    this.isCategoryBarHorizontal = w.config.chart.type === \"bar\" && w.config.plotOptions.bar.horizontal;\n    this.xAxisoffX = w.config.xaxis.position === \"bottom\" ? w.layout.gridHeight : 0;\n    this.drawnLabels = [];\n    this.axesUtils = new AxesUtils(w, { theme, timeScale });\n  }\n  /**\n   * @param {number} realIndex\n   */\n  drawYaxis(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const yaxisStyle = w.config.yaxis[realIndex].labels.style;\n    const {\n      fontSize: yaxisFontSize,\n      fontFamily: yaxisFontFamily,\n      fontWeight: yaxisFontWeight\n    } = yaxisStyle;\n    const elYaxis = graphics.group({\n      class: \"apexcharts-yaxis\",\n      rel: realIndex,\n      transform: `translate(${w.globals.translateYAxisX[realIndex]}, 0)`\n    });\n    if (this.axesUtils.isYAxisHidden(realIndex)) return elYaxis;\n    const elYaxisTexts = graphics.group({ class: \"apexcharts-yaxis-texts-g\" });\n    elYaxis.add(elYaxisTexts);\n    const tickAmount = w.globals.yAxisScale[realIndex].result.length - 1;\n    const labelsDivider = w.layout.gridHeight / tickAmount;\n    const lbFormatter = w.formatters.yLabelFormatters[realIndex];\n    const labels = this.axesUtils.checkForReversedLabels(\n      realIndex,\n      w.globals.yAxisScale[realIndex].result.slice()\n    );\n    let labelStep = 1;\n    if (w.config.chart.type === \"heatmap\" && !w.config.yaxis[realIndex].labels.formatter) {\n      const fs = parseInt(yaxisFontSize, 10) || 11;\n      const maxLabels = Math.max(1, Math.floor(w.layout.gridHeight / (fs * 1.4)));\n      const count = tickAmount + 1;\n      if (count > maxLabels) labelStep = Math.ceil(count / maxLabels);\n    }\n    if (w.config.yaxis[realIndex].labels.show) {\n      let lY = w.layout.translateY + w.config.yaxis[realIndex].labels.offsetY;\n      if (w.globals.isBarHorizontal) lY = 0;\n      else if (w.config.chart.type === \"heatmap\") lY -= labelsDivider / 2;\n      lY += parseInt(yaxisFontSize, 10) / 3;\n      let firstLabel = null;\n      for (let i = tickAmount; i >= 0; i--) {\n        const thinned = labelStep > 1 && i % labelStep !== 0;\n        const val = thinned ? \"\" : lbFormatter(labels[i], i, w);\n        let xPad = w.config.yaxis[realIndex].labels.padding;\n        if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0)\n          xPad *= -1;\n        const textAnchor = this.getTextAnchor(\n          w.config.yaxis[realIndex].labels.align,\n          w.config.yaxis[realIndex].opposite\n        );\n        const yColors = this.axesUtils.getYAxisForeColor(\n          yaxisStyle.colors,\n          realIndex\n        );\n        const foreColor = Array.isArray(yColors) ? yColors[i] : yColors;\n        const existingYLabels = Array.from(\n          w.dom.baseEl.querySelectorAll(\n            `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-label tspan`\n          )\n        ).map((label2) => label2.textContent);\n        const label = graphics.drawText({\n          x: xPad,\n          y: lY,\n          text: existingYLabels.includes(val) && !w.config.yaxis[realIndex].labels.showDuplicates ? \"\" : val,\n          textAnchor,\n          fontSize: yaxisFontSize,\n          fontFamily: yaxisFontFamily,\n          fontWeight: yaxisFontWeight,\n          maxWidth: w.config.yaxis[realIndex].labels.maxWidth,\n          foreColor,\n          isPlainText: false,\n          cssClass: `apexcharts-yaxis-label ${yaxisStyle.cssClass}`\n        });\n        elYaxisTexts.add(label);\n        this.addTooltip(label, val);\n        if (firstLabel === null) {\n          firstLabel = label;\n        }\n        if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n          this.rotateLabel(\n            graphics,\n            label,\n            firstLabel,\n            w.config.yaxis[realIndex].labels.rotate\n          );\n        }\n        lY += labelsDivider;\n      }\n    }\n    this.addYAxisTitle(graphics, elYaxis, realIndex);\n    this.addAxisBorder(graphics, elYaxis, realIndex, tickAmount, labelsDivider);\n    return elYaxis;\n  }\n  /**\n   * @param {string} align\n   * @param {boolean} opposite\n   */\n  getTextAnchor(align, opposite) {\n    if (align === \"left\") return \"start\";\n    if (align === \"center\") return \"middle\";\n    if (align === \"right\") return \"end\";\n    return opposite ? \"start\" : \"end\";\n  }\n  /**\n   * @param {any} label\n   * @param {any} val\n   */\n  addTooltip(label, val) {\n    const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS$2, \"title\");\n    elTooltipTitle.textContent = Array.isArray(val) ? val.join(\" \") : val;\n    label.node.appendChild(elTooltipTitle);\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} label\n   * @param {any} firstLabel\n   * @param {number} rotate\n   */\n  rotateLabel(graphics, label, firstLabel, rotate) {\n    const firstLabelCenter = graphics.rotateAroundCenter(firstLabel.node);\n    const labelCenter = graphics.rotateAroundCenter(label.node);\n    label.node.setAttribute(\n      \"transform\",\n      `rotate(${rotate} ${firstLabelCenter.x} ${labelCenter.y})`\n    );\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elYaxis\n   * @param {number} realIndex\n   */\n  addYAxisTitle(graphics, elYaxis, realIndex) {\n    const w = this.w;\n    if (w.config.yaxis[realIndex].title.text !== void 0) {\n      const elYaxisTitle = graphics.group({ class: \"apexcharts-yaxis-title\" });\n      const x = w.config.yaxis[realIndex].opposite ? w.globals.translateYAxisX[realIndex] : 0;\n      const elYAxisTitleText = graphics.drawText({\n        x,\n        y: w.layout.gridHeight / 2 + w.layout.translateY + w.config.yaxis[realIndex].title.offsetY,\n        text: w.config.yaxis[realIndex].title.text,\n        textAnchor: \"end\",\n        foreColor: w.config.yaxis[realIndex].title.style.color,\n        fontSize: w.config.yaxis[realIndex].title.style.fontSize,\n        fontWeight: w.config.yaxis[realIndex].title.style.fontWeight,\n        fontFamily: w.config.yaxis[realIndex].title.style.fontFamily,\n        cssClass: `apexcharts-yaxis-title-text ${w.config.yaxis[realIndex].title.style.cssClass}`\n      });\n      elYaxisTitle.add(elYAxisTitleText);\n      elYaxis.add(elYaxisTitle);\n    }\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elYaxis\n   * @param {number} realIndex\n   * @param {number} tickAmount\n   * @param {number} labelsDivider\n   */\n  addAxisBorder(graphics, elYaxis, realIndex, tickAmount, labelsDivider) {\n    const w = this.w;\n    const axisBorder = w.config.yaxis[realIndex].axisBorder;\n    let x = 31 + axisBorder.offsetX;\n    if (w.config.yaxis[realIndex].opposite) x = -31 - axisBorder.offsetX;\n    if (axisBorder.show) {\n      const elVerticalLine = graphics.drawLine(\n        x,\n        w.layout.translateY + axisBorder.offsetY - 2,\n        x,\n        w.layout.gridHeight + w.layout.translateY + axisBorder.offsetY + 2,\n        axisBorder.color,\n        0,\n        axisBorder.width\n      );\n      elYaxis.add(elVerticalLine);\n    }\n    if (w.config.yaxis[realIndex].axisTicks.show) {\n      this.axesUtils.drawYAxisTicks(\n        x,\n        tickAmount,\n        axisBorder,\n        w.config.yaxis[realIndex].axisTicks,\n        realIndex,\n        labelsDivider,\n        elYaxis\n      );\n    }\n  }\n  /**\n   * @param {number} realIndex\n   */\n  drawYaxisInversed(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elXaxis = graphics.group({\n      class: \"apexcharts-xaxis apexcharts-yaxis-inversed\"\n    });\n    const elXaxisTexts = graphics.group({\n      class: \"apexcharts-xaxis-texts-g\",\n      transform: `translate(${w.layout.translateXAxisX}, ${w.layout.translateXAxisY})`\n    });\n    elXaxis.add(elXaxisTexts);\n    let tickAmount = w.globals.yAxisScale[realIndex].result.length - 1;\n    const labelsDivider = w.layout.gridWidth / tickAmount + 0.1;\n    let l = labelsDivider + w.config.xaxis.labels.offsetX;\n    const lbFormatter = w.formatters.xLabelFormatter;\n    let labels = this.axesUtils.checkForReversedLabels(\n      realIndex,\n      w.globals.yAxisScale[realIndex].result.slice()\n    );\n    const timescaleLabels = w.labelData.timescaleLabels;\n    if (timescaleLabels.length > 0) {\n      this.xaxisLabels = timescaleLabels.slice();\n      labels = timescaleLabels.slice();\n      tickAmount = labels.length;\n    }\n    if (w.config.xaxis.labels.show) {\n      for (let i = timescaleLabels.length ? 0 : tickAmount; timescaleLabels.length ? i < timescaleLabels.length : i >= 0; timescaleLabels.length ? i++ : i--) {\n        let val = lbFormatter == null ? void 0 : lbFormatter(labels[i], i, w);\n        let x = w.layout.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX);\n        if (timescaleLabels.length) {\n          const label = this.axesUtils.getLabel(\n            labels,\n            timescaleLabels,\n            x,\n            i,\n            this.drawnLabels,\n            this.xaxisFontSize\n          );\n          x = label.x;\n          val = label.text;\n          this.drawnLabels.push(label.text);\n          if (i === 0 && w.globals.skipFirstTimelinelabel) val = \"\";\n          if (i === labels.length - 1 && w.globals.skipLastTimelinelabel)\n            val = \"\";\n        }\n        const elTick = graphics.drawText({\n          x,\n          y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30 - (w.config.xaxis.position === \"top\" ? w.layout.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0),\n          text: val,\n          textAnchor: \"middle\",\n          foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors,\n          fontSize: this.xaxisFontSize,\n          fontFamily: this.axisFontFamily,\n          fontWeight: w.config.xaxis.labels.style.fontWeight,\n          isPlainText: false,\n          cssClass: `apexcharts-xaxis-label ${w.config.xaxis.labels.style.cssClass}`\n        });\n        elXaxisTexts.add(elTick);\n        this.addTooltip(elTick, val);\n        l += labelsDivider;\n      }\n    }\n    this.inversedYAxisTitleText(elXaxis);\n    this.inversedYAxisBorder(elXaxis);\n    return elXaxis;\n  }\n  /**\n   * @param {any} parent\n   */\n  inversedYAxisBorder(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const axisBorder = w.config.xaxis.axisBorder;\n    if (axisBorder.show) {\n      let lineCorrection = 0;\n      if (w.config.chart.type === \"bar\" && w.axisFlags.isXNumeric)\n        lineCorrection -= 15;\n      const elHorzLine = graphics.drawLine(\n        w.globals.padHorizontal + lineCorrection + axisBorder.offsetX,\n        this.xAxisoffX,\n        w.layout.gridWidth,\n        this.xAxisoffX,\n        axisBorder.color,\n        0,\n        axisBorder.height\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elHorzLine);\n      } else {\n        parent.add(elHorzLine);\n      }\n    }\n  }\n  /**\n   * @param {any} parent\n   */\n  inversedYAxisTitleText(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    if (w.config.xaxis.title.text !== void 0) {\n      const elYaxisTitle = graphics.group({\n        class: \"apexcharts-xaxis-title apexcharts-yaxis-title-inversed\"\n      });\n      const elYAxisTitleText = graphics.drawText({\n        x: w.layout.gridWidth / 2 + w.config.xaxis.title.offsetX,\n        y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(w.config.xaxis.title.style.fontSize) + w.config.xaxis.title.offsetY + 20,\n        text: w.config.xaxis.title.text,\n        textAnchor: \"middle\",\n        fontSize: w.config.xaxis.title.style.fontSize,\n        fontFamily: w.config.xaxis.title.style.fontFamily,\n        fontWeight: w.config.xaxis.title.style.fontWeight,\n        foreColor: w.config.xaxis.title.style.color,\n        cssClass: `apexcharts-xaxis-title-text ${w.config.xaxis.title.style.cssClass}`\n      });\n      elYaxisTitle.add(elYAxisTitleText);\n      parent.add(elYaxisTitle);\n    }\n  }\n  /**\n   * @param {number} realIndex\n   * @param {boolean} yAxisOpposite\n   */\n  yAxisTitleRotate(realIndex, yAxisOpposite) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elYAxisLabelsWrap = w.dom.baseEl.querySelector(\n      `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-texts-g`\n    );\n    const yAxisLabelsCoord = elYAxisLabelsWrap ? elYAxisLabelsWrap.getBoundingClientRect() : { width: 0, height: 0 };\n    const yAxisTitle = w.dom.baseEl.querySelector(\n      `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-title text`\n    );\n    const yAxisTitleCoord = yAxisTitle ? yAxisTitle.getBoundingClientRect() : { width: 0, height: 0 };\n    if (yAxisTitle) {\n      const x = this.xPaddingForYAxisTitle(\n        realIndex,\n        yAxisLabelsCoord,\n        yAxisTitleCoord,\n        yAxisOpposite\n      );\n      yAxisTitle.setAttribute(\"x\", String(x.xPos - (yAxisOpposite ? 10 : 0)));\n      const titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle);\n      yAxisTitle.setAttribute(\n        \"transform\",\n        `rotate(${yAxisOpposite ? w.config.yaxis[realIndex].title.rotate * -1 : w.config.yaxis[realIndex].title.rotate} ${titleRotatingCenter.x} ${titleRotatingCenter.y})`\n      );\n    }\n  }\n  /**\n   * @param {number} realIndex\n   * @param {{width: number, height: number}} yAxisLabelsCoord\n   * @param {{width: number, height: number}} yAxisTitleCoord\n   * @param {boolean} yAxisOpposite\n   */\n  xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) {\n    const w = this.w;\n    let x = 0;\n    let padd = 10;\n    if (w.config.yaxis[realIndex].title.text === void 0 || realIndex < 0) {\n      return { xPos: x, padd: 0 };\n    }\n    if (yAxisOpposite) {\n      x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2;\n    } else {\n      x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2;\n      if (w.globals.isBarHorizontal) {\n        padd = 25;\n        x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd;\n      }\n    }\n    return { xPos: x, padd };\n  }\n  /**\n   * @param {Array<{width: number, height: number}>} yaxisLabelCoords\n   * @param {Array<{width: number, height: number}>} yTitleCoords\n   */\n  setYAxisXPosition(yaxisLabelCoords, yTitleCoords) {\n    const w = this.w;\n    let xLeft = 0;\n    let xRight = 0;\n    let leftOffsetX = 18;\n    let rightOffsetX = 1;\n    if (w.config.yaxis.length > 1) this.multipleYs = true;\n    w.config.yaxis.forEach((yaxe, index) => {\n      const shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.includes(index) || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0;\n      const axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width;\n      if (!yaxe.opposite) {\n        xLeft = w.layout.translateX - leftOffsetX;\n        if (!shouldNotDrawAxis) leftOffsetX += axisWidth + 20;\n        w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX;\n      } else {\n        if (w.globals.isBarHorizontal) {\n          xRight = w.layout.gridWidth + w.layout.translateX - 1;\n          w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX;\n        } else {\n          xRight = w.layout.gridWidth + w.layout.translateX + rightOffsetX;\n          if (!shouldNotDrawAxis) rightOffsetX += axisWidth + 20;\n          w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20;\n        }\n      }\n    });\n  }\n  setYAxisTextAlignments() {\n    const w = this.w;\n    const yaxis = Array.from(\n      w.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\")\n    );\n    yaxis.forEach((y, index) => {\n      const yaxe = w.config.yaxis[index];\n      if (yaxe && !yaxe.floating && yaxe.labels.align !== void 0) {\n        const yAxisInner = w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-texts-g`\n        );\n        const yAxisTexts = Array.from(\n          w.dom.baseEl.querySelectorAll(\n            `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-label`\n          )\n        );\n        const rect = (\n          /** @type {Element} */\n          yAxisInner.getBoundingClientRect()\n        );\n        yAxisTexts.forEach((label) => {\n          label.setAttribute(\"text-anchor\", yaxe.labels.align);\n        });\n        if (yaxe.labels.align === \"left\" && !yaxe.opposite) {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(-${rect.width}, 0)`\n          );\n        } else if (yaxe.labels.align === \"center\") {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(${rect.width / 2 * (!yaxe.opposite ? -1 : 1)}, 0)`\n          );\n        } else if (yaxe.labels.align === \"right\" && yaxe.opposite) {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(${rect.width}, 0)`\n          );\n        }\n      }\n    });\n  }\n}\nclass Events {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.documentEvent = this.documentEvent.bind(this);\n  }\n  /**\n   * @param {string} name\n   * @param {Function} handler\n   */\n  addEventListener(name2, handler) {\n    const w = this.w;\n    if (Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      w.globals.events[name2].push(handler);\n    } else {\n      w.globals.events[name2] = [handler];\n    }\n  }\n  /**\n   * @param {string} name\n   * @param {Function} handler\n   */\n  removeEventListener(name2, handler) {\n    const w = this.w;\n    if (!Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      return;\n    }\n    const index = (\n      /** @type {Record<string,any>} */\n      w.globals.events[name2].indexOf(handler)\n    );\n    if (index !== -1) {\n      w.globals.events[name2].splice(\n        index,\n        1\n      );\n    }\n  }\n  /**\n   * @param {string} name\n   * @param {any[]} args\n   */\n  fireEvent(name2, args) {\n    const w = this.w;\n    if (!Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      return;\n    }\n    if (!args || !args.length) {\n      args = [];\n    }\n    const evs = (\n      /** @type {Record<string,any>} */\n      w.globals.events[name2]\n    );\n    const l = evs.length;\n    for (let i = 0; i < l; i++) {\n      evs[i].apply(null, args);\n    }\n  }\n  setupEventHandlers() {\n    const w = this.w;\n    const me = this.ctx;\n    const clickableArea = w.dom.baseEl.querySelector(w.globals.chartClass);\n    this.ctx.eventList.forEach((event) => {\n      clickableArea == null ? void 0 : clickableArea.addEventListener(\n        event,\n        (e) => {\n          const capturedSeriesIndex = e.target.getAttribute(\"i\") === null && w.interact.capturedSeriesIndex !== -1 ? w.interact.capturedSeriesIndex : e.target.getAttribute(\"i\");\n          const capturedDataPointIndex = e.target.getAttribute(\"j\") === null && w.interact.capturedDataPointIndex !== -1 ? w.interact.capturedDataPointIndex : e.target.getAttribute(\"j\");\n          const opts = Object.assign({}, w, {\n            seriesIndex: w.globals.axisCharts ? capturedSeriesIndex : 0,\n            dataPointIndex: capturedDataPointIndex\n          });\n          if (e.type === \"keydown\") {\n            if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n              if (me.ctx.keyboardNavigation) {\n                me.ctx.keyboardNavigation.handleKey(e);\n              }\n              if (typeof w.config.chart.events.keyDown === \"function\") {\n                w.config.chart.events.keyDown(e, me, opts);\n              }\n              me.ctx.events.fireEvent(\"keydown\", [e, me, opts]);\n            }\n          } else if (e.type === \"keyup\") {\n            if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n              if (typeof w.config.chart.events.keyUp === \"function\") {\n                w.config.chart.events.keyUp(e, me, opts);\n              }\n              me.ctx.events.fireEvent(\"keyup\", [e, me, opts]);\n            }\n          } else if (e.type === \"mousemove\" || e.type === \"touchmove\") {\n            if (typeof w.config.chart.events.mouseMove === \"function\") {\n              w.config.chart.events.mouseMove(e, me, opts);\n            }\n          } else if (e.type === \"mouseleave\" || e.type === \"touchleave\") {\n            if (typeof w.config.chart.events.mouseLeave === \"function\") {\n              w.config.chart.events.mouseLeave(e, me, opts);\n            }\n          } else if (e.type === \"mouseup\" && e.which === 1 || e.type === \"touchend\") {\n            if (typeof w.config.chart.events.click === \"function\") {\n              w.config.chart.events.click(e, me, opts);\n            }\n            me.ctx.events.fireEvent(\"click\", [e, me, opts]);\n          }\n        },\n        { capture: false, passive: true }\n      );\n    });\n    this.ctx.eventList.forEach((event) => {\n      w.dom.baseEl.addEventListener(event, this.documentEvent, {\n        passive: true\n      });\n    });\n    this.ctx.core.setupBrushHandler();\n  }\n  /**\n   * @param {any} e\n   */\n  documentEvent(e) {\n    const w = this.w;\n    const target = e.target.className;\n    if (e.type === \"click\") {\n      const elMenu = w.dom.baseEl.querySelector(\".apexcharts-menu\");\n      if (elMenu && elMenu.classList.contains(\"apexcharts-menu-open\") && target !== \"apexcharts-menu-icon\") {\n        elMenu.classList.remove(\"apexcharts-menu-open\");\n      }\n    }\n    w.interact.clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n    w.interact.clientY = e.type === \"touchmove\" ? e.touches[0].clientY : e.clientY;\n  }\n}\nclass Localization {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {string} localeName\n   */\n  setCurrentLocaleValues(localeName) {\n    let locales = this.w.config.chart.locales;\n    const globalApex = Environment.getApex();\n    if (globalApex.chart && globalApex.chart.locales && globalApex.chart.locales.length > 0) {\n      locales = this.w.config.chart.locales.concat(globalApex.chart.locales);\n    }\n    const selectedLocale = locales.filter(\n      (c) => c.name === localeName\n    )[0];\n    if (selectedLocale) {\n      const ret = Utils$1.extend(en, selectedLocale);\n      this.w.globals.locale = ret.options;\n    } else {\n      throw new Error(\n        \"Wrong locale name provided. Please make sure you set the correct locale name in options\"\n      );\n    }\n  }\n}\nclass Axes {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {string} type\n   * @param {any} elgrid\n   */\n  drawAxis(type, elgrid) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const xAxis = new XAxis(this.w, this.ctx, elgrid);\n    const yAxis = new YAxis(this.w, { theme: this.ctx.theme, timeScale: this.ctx.timeScale }, elgrid);\n    if (gl.axisCharts && type !== \"radar\") {\n      let elXaxis, elYaxis;\n      if (gl.isBarHorizontal) {\n        elYaxis = yAxis.drawYaxisInversed(0);\n        elXaxis = xAxis.drawXaxisInversed(0);\n        this.w.dom.elGraphical.add(elXaxis);\n        this.w.dom.elGraphical.add(elYaxis);\n      } else {\n        elXaxis = xAxis.drawXaxis();\n        this.w.dom.elGraphical.add(elXaxis);\n        cnf.yaxis.map((yaxe, index) => {\n          if (gl.ignoreYAxisIndexes.indexOf(index) === -1) {\n            elYaxis = yAxis.drawYaxis(index);\n            this.w.dom.Paper.add(elYaxis);\n            if (this.w.config.grid.position === \"back\") {\n              const inner = this.w.dom.Paper.children()[1];\n              if (inner) {\n                inner.remove();\n                this.w.dom.Paper.add(inner);\n              }\n            }\n          }\n        });\n      }\n    }\n  }\n}\nclass Crosshairs {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  drawXCrosshairs() {\n    const w = this.w;\n    w.dom.elGraphical.node.querySelectorAll(\":scope > .apexcharts-xcrosshairs\").forEach((el) => el.remove());\n    const graphics = new Graphics(this.w);\n    const filters = new Filters(this.w);\n    const crosshairGradient = w.config.xaxis.crosshairs.fill.gradient;\n    const crosshairShadow = w.config.xaxis.crosshairs.dropShadow;\n    const fillType = w.config.xaxis.crosshairs.fill.type;\n    const gradientFrom = crosshairGradient.colorFrom;\n    const gradientTo = crosshairGradient.colorTo;\n    const opacityFrom = crosshairGradient.opacityFrom;\n    const opacityTo = crosshairGradient.opacityTo;\n    const stops = crosshairGradient.stops;\n    const shadow = \"none\";\n    const dropShadow = crosshairShadow.enabled;\n    const shadowLeft = crosshairShadow.left;\n    const shadowTop = crosshairShadow.top;\n    const shadowBlur = crosshairShadow.blur;\n    const shadowColor = crosshairShadow.color;\n    const shadowOpacity = crosshairShadow.opacity;\n    let xcrosshairsFill = w.config.xaxis.crosshairs.fill.color;\n    if (w.config.xaxis.crosshairs.show) {\n      if (fillType === \"gradient\") {\n        xcrosshairsFill = graphics.drawGradient(\n          \"vertical\",\n          gradientFrom,\n          gradientTo,\n          opacityFrom,\n          opacityTo,\n          null,\n          stops,\n          []\n        );\n      }\n      let xcrosshairs = w.config.xaxis.crosshairs.width === 1 ? graphics.drawLine(0, 0, 0, 0) : graphics.drawRect();\n      let gridHeight = w.layout.gridHeight;\n      if (!Utils$1.isNumber(gridHeight) || gridHeight < 0) {\n        gridHeight = 0;\n      }\n      let crosshairsWidth = w.config.xaxis.crosshairs.width;\n      if (!Utils$1.isNumber(crosshairsWidth) || Number(crosshairsWidth) < 0) {\n        crosshairsWidth = 0;\n      }\n      xcrosshairs.attr({\n        class: \"apexcharts-xcrosshairs\",\n        x: 0,\n        y: 0,\n        y2: gridHeight,\n        width: crosshairsWidth,\n        height: gridHeight,\n        fill: xcrosshairsFill,\n        filter: shadow,\n        \"fill-opacity\": w.config.xaxis.crosshairs.opacity,\n        stroke: w.config.xaxis.crosshairs.stroke.color,\n        \"stroke-width\": w.config.xaxis.crosshairs.stroke.width,\n        \"stroke-dasharray\": w.config.xaxis.crosshairs.stroke.dashArray\n      });\n      if (dropShadow) {\n        xcrosshairs = filters.dropShadow(xcrosshairs, {\n          left: shadowLeft,\n          top: shadowTop,\n          blur: shadowBlur,\n          color: shadowColor,\n          opacity: shadowOpacity\n        });\n      }\n      w.dom.elGraphical.add(xcrosshairs);\n    }\n  }\n  drawYCrosshairs() {\n    const w = this.w;\n    w.dom.elGraphical.node.querySelectorAll(\n      \":scope > .apexcharts-ycrosshairs, :scope > .apexcharts-ycrosshairs-hidden\"\n    ).forEach((el) => el.remove());\n    const graphics = new Graphics(this.w);\n    const crosshair = (\n      /** @type {any[]} */\n      w.config.yaxis[0].crosshairs\n    );\n    const offX = w.globals.barPadForNumericAxis;\n    if (\n      /** @type {any[]} */\n      w.config.yaxis[0].crosshairs.show\n    ) {\n      const ycrosshairs = graphics.drawLine(\n        -offX,\n        0,\n        w.layout.gridWidth + offX,\n        0,\n        crosshair.stroke.color,\n        crosshair.stroke.dashArray,\n        crosshair.stroke.width\n      );\n      ycrosshairs.attr({\n        class: \"apexcharts-ycrosshairs\"\n      });\n      w.dom.elGraphical.add(ycrosshairs);\n    }\n    const ycrosshairsHidden = graphics.drawLine(\n      -offX,\n      0,\n      w.layout.gridWidth + offX,\n      0,\n      crosshair.stroke.color,\n      0,\n      0\n    );\n    ycrosshairsHidden.attr({\n      class: \"apexcharts-ycrosshairs-hidden\"\n    });\n    w.dom.elGraphical.add(ycrosshairsHidden);\n  }\n}\nfunction mergeYaxisOverride(base, override) {\n  if (!Utils$1.isObject(base) || !Utils$1.isObject(override)) {\n    return override !== void 0 ? override : base;\n  }\n  const out = __spreadValues({}, base);\n  for (const key of Object.keys(override)) {\n    const v = override[key];\n    if (v === void 0) continue;\n    if (Utils$1.isObject(v) && Utils$1.isObject(base[key])) {\n      out[key] = mergeYaxisOverride(base[key], v);\n    } else {\n      out[key] = v;\n    }\n  }\n  return out;\n}\nclass Responsive {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this._activeBreakpoint = null;\n  }\n  // the opts parameter if not null has to be set overriding everything\n  // as the opts is set by user externally\n  /**\n   * @param {object} opts\n   */\n  checkResponsiveConfig(opts) {\n    const w = this.w;\n    const cnf = w.config;\n    if (cnf.responsive.length === 0) return;\n    const res = cnf.responsive.slice();\n    res.sort(\n      (a, b) => a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0\n    ).reverse();\n    const config = new Config({});\n    const iterateResponsiveOptions = (newOptions = {}) => {\n      var _a;\n      const largestBreakpoint = res[0].breakpoint;\n      const width = Environment.isBrowser() ? window.innerWidth > 0 ? window.innerWidth : screen.width : 0;\n      if (width > largestBreakpoint) {\n        if (this._activeBreakpoint !== null) {\n          if (!w.globals.initialConfig) return;\n          const initialConfig = Utils$1.clone(w.globals.initialConfig);\n          initialConfig.series = Utils$1.clone(w.config.series);\n          const options2 = CoreUtils.extendArrayProps(config, initialConfig, w);\n          newOptions = Utils$1.extend(options2, newOptions);\n          this.overrideResponsiveOptions(newOptions);\n          this._activeBreakpoint = null;\n        }\n      } else {\n        for (let i = 0; i < res.length; i++) {\n          if (width < res[i].breakpoint) {\n            const originalUserYaxis = ((_a = res[i].options) == null ? void 0 : _a.yaxis) ? Utils$1.clone(res[i].options.yaxis) : null;\n            newOptions = CoreUtils.extendArrayProps(config, res[i].options, w);\n            newOptions = Utils$1.extend(w.config, newOptions);\n            if (Array.isArray(w.config.yaxis) && originalUserYaxis) {\n              const userYaxis = Array.isArray(originalUserYaxis) ? originalUserYaxis : [originalUserYaxis];\n              newOptions = __spreadProps(__spreadValues({}, newOptions), {\n                yaxis: w.config.yaxis.map(\n                  (baseAxis, idx) => mergeYaxisOverride(baseAxis, userYaxis[idx])\n                )\n              });\n            }\n            this.overrideResponsiveOptions(newOptions);\n            this._activeBreakpoint = res[i].breakpoint;\n          }\n        }\n      }\n    };\n    if (opts) {\n      let options2 = CoreUtils.extendArrayProps(config, opts, w);\n      options2 = Utils$1.extend(w.config, options2);\n      options2 = Utils$1.extend(options2, opts);\n      iterateResponsiveOptions(options2);\n    } else {\n      iterateResponsiveOptions({});\n    }\n  }\n  /**\n   * @param {Record<string, any>} newOptions\n   */\n  overrideResponsiveOptions(newOptions) {\n    const newConfig = new Config(newOptions).init({ responsiveOverride: true });\n    this.w.config = /** @type {any} */\n    newConfig;\n  }\n}\nfunction captureStreamFrame(w) {\n  var _a, _b, _c;\n  const gl = w.globals;\n  if (!gl.axisCharts || !w.seriesData || !Array.isArray(w.seriesData.series) || w.seriesData.series.length === 0) {\n    gl.prevStreamFrame = null;\n    return;\n  }\n  const rPixels = [];\n  if ((_b = (_a = w.dom) == null ? void 0 : _a.baseEl) == null ? void 0 : _b.querySelectorAll) {\n    w.dom.baseEl.querySelectorAll(\".apexcharts-marker\").forEach((node) => {\n      var _a2, _b2, _c2, _d, _e;\n      const ri = parseInt((_a2 = node.getAttribute(\"index\")) != null ? _a2 : \"\", 10);\n      const j = parseInt(\n        (_c2 = (_b2 = node.getAttribute(\"j\")) != null ? _b2 : node.getAttribute(\"rel\")) != null ? _c2 : \"\",\n        10\n      );\n      const r = parseFloat(\n        (_e = (_d = node.getAttribute(\"r\")) != null ? _d : node.getAttribute(\"default-marker-size\")) != null ? _e : \"\"\n      );\n      if (isFinite(ri) && isFinite(j) && isFinite(r)) {\n        (rPixels[ri] = rPixels[ri] || [])[j] = r;\n      }\n    });\n  }\n  gl.prevStreamFrame = {\n    seriesX: (w.seriesData.seriesX || []).slice(),\n    seriesY: w.seriesData.series.slice(),\n    xPixels: (gl.seriesXvalues || []).slice(),\n    yPixels: (gl.seriesYvalues || []).slice(),\n    rPixels,\n    labels: (gl.labels || []).slice(),\n    isXNumeric: !!((_c = w.axisFlags) == null ? void 0 : _c.isXNumeric)\n  };\n}\nfunction detectStreamScroll(w, realIndex, newXPixels, newYPixels) {\n  var _a;\n  const gl = w.globals;\n  const frame = gl.prevStreamFrame;\n  if (!frame || !gl.dataChanged || !((_a = w.axisFlags) == null ? void 0 : _a.isXNumeric)) return null;\n  const oldX = frame.seriesX[realIndex];\n  const oldY = frame.seriesY[realIndex];\n  const newX = w.seriesData.seriesX[realIndex];\n  const newY = w.seriesData.series[realIndex];\n  if (!oldX || !oldY || !newX || !newY) return null;\n  if (oldX.length < 3 || newX.length < 3) return null;\n  let k = -1;\n  for (let i = 0; i < oldX.length; i++) {\n    if (oldX[i] === newX[0]) {\n      k = i;\n      break;\n    }\n  }\n  if (k === -1) return null;\n  const overlap = Math.min(oldX.length - k, newX.length);\n  if (overlap < 2) return null;\n  const appended = newX.length - overlap;\n  if (k === 0 && appended === 0) return null;\n  for (let i = 0; i < overlap; i++) {\n    if (oldX[k + i] !== newX[i]) return null;\n    const oy = oldY[k + i];\n    const ny = newY[i];\n    if (oy !== ny && !(oy == null && ny == null)) return null;\n  }\n  const oldXP = frame.xPixels[realIndex];\n  const oldYP = frame.yPixels[realIndex];\n  if (!oldXP || !oldYP) return null;\n  let a = -1;\n  let b = -1;\n  for (let i = 0; i < overlap; i++) {\n    if (oldXP[k + i] == null || oldYP[k + i] == null || newXPixels[i] == null || newYPixels[i] == null) {\n      continue;\n    }\n    if (a === -1) a = i;\n    b = i;\n  }\n  if (a === -1 || b <= a) return null;\n  const nxA = (\n    /** @type {number} */\n    newXPixels[a]\n  );\n  const nxB = (\n    /** @type {number} */\n    newXPixels[b]\n  );\n  const oxA = (\n    /** @type {number} */\n    oldXP[k + a]\n  );\n  const oxB = (\n    /** @type {number} */\n    oldXP[k + b]\n  );\n  if (Math.abs(nxB - nxA) < 1e-6) return null;\n  const ax = (oxB - oxA) / (nxB - nxA);\n  const bx = oxA - ax * nxA;\n  if (!isFinite(ax) || !isFinite(bx)) return null;\n  if (Math.abs(ax - 1) > 0.02) return null;\n  if (Math.abs(bx) < 0.5) return null;\n  let yLo = a;\n  let yHi = a;\n  for (let i = a; i <= b; i++) {\n    const ny = newYPixels[i];\n    if (ny == null || oldYP[k + i] == null) continue;\n    if (ny < /** @type {number} */\n    newYPixels[yLo]) yLo = i;\n    if (ny > /** @type {number} */\n    newYPixels[yHi]) yHi = i;\n  }\n  let ay = 1;\n  let by = 0;\n  const nyLo = (\n    /** @type {number} */\n    newYPixels[yLo]\n  );\n  const nyHi = (\n    /** @type {number} */\n    newYPixels[yHi]\n  );\n  if (Math.abs(nyHi - nyLo) > 1e-6) {\n    ay = /** @type {number} */\n    (oldYP[k + yHi] - /** @type {number} */\n    oldYP[k + yLo]) / (nyHi - nyLo);\n    by = /** @type {number} */\n    oldYP[k + yLo] - ay * nyLo;\n  } else {\n    by = /** @type {number} */\n    oldYP[k + yLo] - nyLo;\n  }\n  if (!isFinite(ay) || !isFinite(by) || ay < 0.2 || ay > 5) return null;\n  const m = Math.floor((a + b) / 2);\n  if (m !== a && m !== b && newXPixels[m] != null && oldXP[k + m] != null) {\n    const predX = ax * /** @type {number} */\n    newXPixels[m] + bx;\n    if (Math.abs(predX - /** @type {number} */\n    oldXP[k + m]) > 1.5) {\n      return null;\n    }\n    if (newYPixels[m] != null && oldYP[k + m] != null) {\n      const predY = ay * /** @type {number} */\n      newYPixels[m] + by;\n      if (Math.abs(predY - /** @type {number} */\n      oldYP[k + m]) > 1.5) {\n        return null;\n      }\n    }\n  }\n  return { ax, bx, ay, by };\n}\nconst NUM_RE = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?/gi;\nfunction projectPathToPrevFrame(d, t) {\n  const { ax, bx, ay, by } = t;\n  const out = [];\n  const re = /([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g;\n  let match;\n  while ((match = re.exec(d)) !== null) {\n    const cmd = match[1].toUpperCase();\n    const nums = (match[2].match(NUM_RE) || []).map(parseFloat);\n    if (cmd === \"Z\") {\n      out.push(\"z\");\n      continue;\n    }\n    if (cmd === \"H\") {\n      for (const x of nums) out.push(`H ${ax * x + bx}`);\n      continue;\n    }\n    if (cmd === \"V\") {\n      for (const y of nums) out.push(`V ${ay * y + by}`);\n      continue;\n    }\n    if (cmd === \"A\") {\n      for (let i = 0; i + 6 < nums.length; i += 7) {\n        out.push(\n          `A ${nums[i]} ${nums[i + 1]} ${nums[i + 2]} ${nums[i + 3]} ${nums[i + 4]} ${ax * nums[i + 5] + bx} ${ay * nums[i + 6] + by}`\n        );\n      }\n      continue;\n    }\n    const coords = [];\n    for (let i = 0; i + 1 < nums.length; i += 2) {\n      coords.push(`${ax * nums[i] + bx} ${ay * nums[i + 1] + by}`);\n    }\n    if (coords.length) out.push(`${cmd} ${coords.join(\" \")}`);\n  }\n  return out.join(\" \");\n}\nfunction trimStreamingSeries(newSeries, w) {\n  const cfg = w.config.chart.streaming;\n  if (!cfg || !cfg.enabled) return;\n  const maxPoints = cfg.maxPoints;\n  const range = w.config.xaxis.range;\n  const xOf = (p) => {\n    if (p == null) return null;\n    if (Array.isArray(p)) return typeof p[0] === \"number\" ? p[0] : null;\n    if (typeof p === \"object\") return typeof p.x === \"number\" ? p.x : null;\n    return null;\n  };\n  newSeries.forEach((s) => {\n    var _a;\n    const data = s == null ? void 0 : s.data;\n    if (!Array.isArray(data) || data.length < 2) return;\n    if (typeof maxPoints === \"number\" && maxPoints > 0) {\n      if (data.length > maxPoints) s.data = data.slice(data.length - maxPoints);\n      return;\n    }\n    if (!range) return;\n    const lastX = xOf(data[data.length - 1]);\n    const firstX = xOf(data[0]);\n    if (lastX == null || firstX == null || lastX <= firstX) return;\n    const avgSpacing = (lastX - firstX) / (data.length - 1);\n    const cutoff = lastX - range - 2 * avgSpacing;\n    let idx = 0;\n    while (idx < data.length && ((_a = xOf(data[idx])) != null ? _a : cutoff) < cutoff) idx++;\n    if (idx > 0) s.data = data.slice(idx);\n  });\n}\nfunction buildUnionEntries(join, oldN) {\n  const exitSet = new Set(join.exits);\n  const entries = [];\n  let oi = 0;\n  for (let nj = 0; nj < join.toOld.length; nj++) {\n    const oj = join.toOld[nj];\n    if (oj !== -1) {\n      while (oi < oj) {\n        if (exitSet.has(oi)) entries.push({ oldJ: oi, newJ: -1 });\n        oi++;\n      }\n      entries.push({ oldJ: oj, newJ: nj });\n      oi = oj + 1;\n    } else {\n      entries.push({ oldJ: -1, newJ: nj });\n    }\n  }\n  while (oi < oldN) {\n    if (exitSet.has(oi)) entries.push({ oldJ: oi, newJ: -1 });\n    oi++;\n  }\n  return entries;\n}\nfunction analyzeSeriesPath(d, expectedAnchors, isArea) {\n  if (!d || typeof d !== \"string\") return null;\n  const cmds = parsePath(d);\n  if (!cmds.length || cmds[0][0] !== \"M\") return null;\n  for (let i = 1; i < cmds.length; i++) {\n    if (cmds[i][0] === \"M\") return null;\n  }\n  let body = cmds;\n  let closing = null;\n  if (isArea) {\n    if (cmds.length < 5) return null;\n    closing = cmds.slice(-3);\n    body = cmds.slice(0, -3);\n    if (closing[2][0] !== \"Z\") return null;\n    if (closing[1][0] !== \"L\") return null;\n    if (closing[0][0] !== \"L\" && closing[0][0] !== \"C\") return null;\n  } else if (cmds[cmds.length - 1][0] === \"Z\") {\n    return null;\n  }\n  if (body.length !== expectedAnchors || body.length < 2) return null;\n  const segType = body[1][0];\n  if (segType !== \"L\" && segType !== \"C\") return null;\n  for (let i = 2; i < body.length; i++) {\n    if (body[i][0] !== segType) return null;\n  }\n  const anchors = body.map(\n    (c) => c[0] === \"C\" ? [Number(c[5]), Number(c[6])] : [Number(c[1]), Number(c[2])]\n  );\n  for (const a of anchors) {\n    if (!isFinite(a[0]) || !isFinite(a[1])) return null;\n  }\n  return { body, closing, segType, anchors };\n}\nfunction lerpPt(a, b, t) {\n  return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t];\n}\nfunction splitCubic(s, cmd, t) {\n  const p0 = s;\n  const p1 = [cmd[1], cmd[2]];\n  const p2 = [cmd[3], cmd[4]];\n  const p3 = [cmd[5], cmd[6]];\n  const p01 = lerpPt(p0, p1, t);\n  const p12 = lerpPt(p1, p2, t);\n  const p23 = lerpPt(p2, p3, t);\n  const p012 = lerpPt(p01, p12, t);\n  const p123 = lerpPt(p12, p23, t);\n  const mid = lerpPt(p012, p123, t);\n  return {\n    first: [\"C\", p01[0], p01[1], p012[0], p012[1], mid[0], mid[1]],\n    second: [\"C\", p123[0], p123[1], p23[0], p23[1], p3[0], p3[1]],\n    mid\n  };\n}\nfunction splitLine(s, cmd, t) {\n  const e = [cmd[1], cmd[2]];\n  const mid = lerpPt(s, e, t);\n  return {\n    first: [\"L\", mid[0], mid[1]],\n    second: [\"L\", e[0], e[1]],\n    mid\n  };\n}\nfunction expandPath(analysis, ownIdx) {\n  const { body, closing, segType, anchors } = analysis;\n  const n = anchors.length;\n  const m = ownIdx.length;\n  const degen = (p) => segType === \"C\" ? [\"C\", p[0], p[1], p[0], p[1], p[0], p[1]] : [\"L\", p[0], p[1]];\n  const out = [[\"M\", anchors[0][0], anchors[0][1]]];\n  let firstOwn = 0;\n  while (firstOwn < m && ownIdx[firstOwn] !== 0) firstOwn++;\n  for (let q = 1; q <= firstOwn; q++) out.push(degen(anchors[0]));\n  let entry = firstOwn + 1;\n  for (let s = 0; s < n - 1; s++) {\n    let interior = 0;\n    while (entry + interior < m && ownIdx[entry + interior] === -1) interior++;\n    const cmd = body[s + 1];\n    if (!interior) {\n      out.push(cmd.slice());\n    } else {\n      const totalParts = interior + 1;\n      let start = anchors[s];\n      let rest = cmd;\n      for (let q = 0; q < interior; q++) {\n        const t = 1 / (totalParts - q);\n        const sp = segType === \"C\" ? splitCubic(start, rest, t) : splitLine(start, rest, t);\n        out.push(sp.first);\n        start = sp.mid;\n        rest = sp.second;\n      }\n      out.push(rest);\n    }\n    entry += interior + 1;\n  }\n  while (entry < m) {\n    out.push(degen(anchors[n - 1]));\n    entry++;\n  }\n  if (closing) closing.forEach((c) => out.push(c.slice()));\n  return out;\n}\nfunction reconcilePathPair(fromD, toD, entries, oldN, newN, isArea) {\n  const fromAnalysis = analyzeSeriesPath(fromD, oldN, isArea);\n  if (!fromAnalysis) return null;\n  const toAnalysis = analyzeSeriesPath(toD, newN, isArea);\n  if (!toAnalysis) return null;\n  if (fromAnalysis.segType !== toAnalysis.segType) return null;\n  if ((fromAnalysis.closing || toAnalysis.closing) && (!fromAnalysis.closing || !toAnalysis.closing || fromAnalysis.closing[0][0] !== toAnalysis.closing[0][0])) {\n    return null;\n  }\n  const fromOwn = entries.map((e) => e.oldJ);\n  const toOwn = entries.map((e) => e.newJ);\n  return {\n    from: arrayToPath(expandPath(fromAnalysis, fromOwn)),\n    toInterp: arrayToPath(expandPath(toAnalysis, toOwn))\n  };\n}\nfunction lengthTransitionEnabled(w) {\n  var _a;\n  const anim = w.config.chart.animations;\n  if (!anim || anim.enabled === false) return false;\n  if (!anim.dynamicAnimation || anim.dynamicAnimation.enabled === false) {\n    return false;\n  }\n  const largeThreshold = (_a = anim.largeDatasetThreshold) != null ? _a : 0;\n  if (largeThreshold > 0 && w.globals.dataPoints > largeThreshold) return false;\n  return !!(Environment.isBrowser() && w.globals.dataChanged && w.globals.shouldAnimate);\n}\nfunction datumKey(w, realIndex, j) {\n  var _a, _b, _c, _d;\n  if ((_a = w.axisFlags) == null ? void 0 : _a.isXNumeric) {\n    const sx = (_c = (_b = w.seriesData) == null ? void 0 : _b.seriesX) == null ? void 0 : _c[realIndex];\n    if (sx && sx.length && sx[j] != null) return \"x:\" + sx[j];\n  }\n  const lbl = (_d = w.globals.labels) == null ? void 0 : _d[j];\n  if (lbl != null && String(lbl) !== \"\") {\n    return \"c:\" + (Array.isArray(lbl) ? lbl.join(\" \") : String(lbl));\n  }\n  return \"j:\" + j;\n}\nfunction frameDatumKey(frame, realIndex, j) {\n  var _a, _b;\n  if (frame.isXNumeric) {\n    const sx = (_a = frame.seriesX) == null ? void 0 : _a[realIndex];\n    if (sx && sx.length && sx[j] != null) return \"x:\" + sx[j];\n  }\n  const lbl = (_b = frame.labels) == null ? void 0 : _b[j];\n  if (lbl != null && String(lbl) !== \"\") {\n    return \"c:\" + (Array.isArray(lbl) ? lbl.join(\" \") : String(lbl));\n  }\n  return \"j:\" + j;\n}\nfunction joinKeys(oldKeys, newKeys) {\n  const oldIndex = /* @__PURE__ */ new Map();\n  oldKeys.forEach((k, i) => {\n    if (!oldIndex.has(k)) oldIndex.set(k, i);\n  });\n  const toOld = new Array(newKeys.length);\n  const usedOld = /* @__PURE__ */ new Set();\n  let prev = -1;\n  let ordered = true;\n  let identity = oldKeys.length === newKeys.length;\n  newKeys.forEach((k, i) => {\n    const oi = oldIndex.has(k) && !usedOld.has(oldIndex.get(k)) ? oldIndex.get(k) : -1;\n    toOld[i] = oi;\n    if (oi !== -1) {\n      usedOld.add(oi);\n      if (oi < prev) ordered = false;\n      prev = oi;\n    }\n    if (oi !== i) identity = false;\n  });\n  const exits = [];\n  for (let i = 0; i < oldKeys.length; i++) {\n    if (!usedOld.has(i)) exits.push(i);\n  }\n  return { toOld, exits, ordered, changed: !identity };\n}\nfunction uniquifyKeys(keys) {\n  const seen = /* @__PURE__ */ new Map();\n  return keys.map((k) => {\n    const count = seen.get(k) || 0;\n    seen.set(k, count + 1);\n    return count === 0 ? k : `${k}#${count}`;\n  });\n}\nfunction seriesJoin(w, realIndex, includeIdentity = false, allowReorder = false) {\n  var _a, _b;\n  if (!lengthTransitionEnabled(w)) return null;\n  const frame = w.globals.prevStreamFrame;\n  if (!frame) return null;\n  const oldY = (_a = frame.seriesY) == null ? void 0 : _a[realIndex];\n  const newY = (_b = w.seriesData.series) == null ? void 0 : _b[realIndex];\n  if (!Array.isArray(oldY) || !Array.isArray(newY)) return null;\n  if (!oldY.length || !newY.length) return null;\n  const oldKeys = uniquifyKeys(\n    oldY.map((_, j) => frameDatumKey(frame, realIndex, j))\n  );\n  const newKeys = uniquifyKeys(newY.map((_, j) => datumKey(w, realIndex, j)));\n  const join = joinKeys(oldKeys, newKeys);\n  if (!join.ordered && !allowReorder) return null;\n  if (!join.changed && !includeIdentity) return null;\n  return { join, oldKeys, newKeys };\n}\nfunction morphEasing(w) {\n  var _a, _b;\n  const anim = w.config.chart.animations;\n  return resolveEasing((_b = (_a = anim.dynamicAnimation) == null ? void 0 : _a.easing) != null ? _b : anim.easing);\n}\nfunction rafTween(w, duration, ease, onFrame, onDone) {\n  const startAt = performance.now();\n  const step = (now) => {\n    if (w.globals.isDestroyed) return;\n    const raw = Math.max(0, Math.min(1, (now - startAt) / duration));\n    onFrame(ease(raw), raw);\n    if (raw < 1) {\n      BrowserAPIs.requestAnimationFrame(step);\n    } else if (onDone) {\n      onDone();\n    }\n  };\n  BrowserAPIs.requestAnimationFrame(step);\n}\nfunction tweenSeriesMarkers(w, { elPointsMain, realIndex, speed }) {\n  var _a, _b, _c, _d;\n  if (!(elPointsMain == null ? void 0 : elPointsMain.node)) return false;\n  const sj = seriesJoin(w, realIndex, true);\n  if (!sj) return false;\n  const frame = w.globals.prevStreamFrame;\n  if (!frame) return false;\n  const oldXP = (_a = frame.xPixels) == null ? void 0 : _a[realIndex];\n  const oldYP = (_b = frame.yPixels) == null ? void 0 : _b[realIndex];\n  if (!oldXP || !oldYP) return false;\n  const markers = elPointsMain.node.querySelectorAll(\".apexcharts-marker\");\n  if (!markers.length) return false;\n  const newXP = ((_c = w.globals.seriesXvalues) == null ? void 0 : _c[realIndex]) || [];\n  const newYP = ((_d = w.globals.seriesYvalues) == null ? void 0 : _d[realIndex]) || [];\n  const ease = morphEasing(w);\n  const duration = Math.max(1, speed || 1);\n  elPointsMain.node.classList.remove(\"apexcharts-element-hidden\");\n  markers.forEach((node) => {\n    var _a2, _b2, _c2, _d2, _e, _f, _g, _h, _i;\n    const j = parseInt(\n      (_b2 = (_a2 = node.getAttribute(\"j\")) != null ? _a2 : node.getAttribute(\"rel\")) != null ? _b2 : \"\",\n      10\n    );\n    if (!isFinite(j) || j < 0 || j >= sj.join.toOld.length) return;\n    const oldJ = sj.join.toOld[j];\n    const to = newXP[j] != null && newYP[j] != null ? [newXP[j], newYP[j]] : null;\n    if (oldJ === -1 || !to) {\n      const style = (\n        /** @type {any} */\n        node.style\n      );\n      style.opacity = \"0\";\n      rafTween(\n        w,\n        duration,\n        ease,\n        (eased) => {\n          style.opacity = String(eased);\n        },\n        () => {\n          style.opacity = \"\";\n        }\n      );\n      return;\n    }\n    const dx = ((_c2 = oldXP[oldJ]) != null ? _c2 : NaN) - to[0];\n    const dy = ((_d2 = oldYP[oldJ]) != null ? _d2 : NaN) - to[1];\n    if (!isFinite(dx) || !isFinite(dy)) return;\n    const rFrom = (_g = (_f = (_e = frame.rPixels) == null ? void 0 : _e[realIndex]) == null ? void 0 : _f[oldJ]) != null ? _g : NaN;\n    const rTo = parseFloat(\n      (_i = (_h = node.getAttribute(\"r\")) != null ? _h : node.getAttribute(\"default-marker-size\")) != null ? _i : \"\"\n    );\n    const scales = isFinite(rFrom) && isFinite(rTo) && rTo > 0 && Math.abs(rFrom - rTo) > 0.25;\n    const moves = Math.abs(dx) >= 0.5 || Math.abs(dy) >= 0.5;\n    if (!moves && !scales) return;\n    const apply = (eased) => {\n      const offX = dx * (1 - eased);\n      const offY = dy * (1 - eased);\n      if (scales) {\n        const s = (rFrom + (rTo - rFrom) * eased) / rTo;\n        node.setAttribute(\n          \"transform\",\n          `translate(${offX + to[0] * (1 - s)}, ${offY + to[1] * (1 - s)}) scale(${s})`\n        );\n      } else {\n        node.setAttribute(\"transform\", `translate(${offX}, ${offY})`);\n      }\n    };\n    apply(0);\n    rafTween(w, duration, ease, apply, () => {\n      node.removeAttribute(\"transform\");\n    });\n  });\n  return true;\n}\nfunction reconcileSeriesPaths(w, { type, realIndex, pathFromLine, pathFromArea, linePaths, areaPaths }) {\n  var _a, _b;\n  const sj = seriesJoin(w, realIndex);\n  if (!sj) return null;\n  const { join, oldKeys, newKeys } = sj;\n  const frame = w.globals.prevStreamFrame;\n  if (!frame) return null;\n  const oldY = (_a = frame.seriesY) == null ? void 0 : _a[realIndex];\n  const newY = (_b = w.seriesData.series) == null ? void 0 : _b[realIndex];\n  if (oldY.length < 2 || newY.length < 2) return null;\n  if (oldY.some((v) => v === null) || newY.some((v) => v === null)) return null;\n  const entries = buildUnionEntries(join, oldKeys.length);\n  const out = {};\n  if (Array.isArray(linePaths) && linePaths.length === 1 && pathFromLine) {\n    out.line = reconcilePathPair(\n      pathFromLine,\n      linePaths[0],\n      entries,\n      oldKeys.length,\n      newKeys.length,\n      false\n    );\n  }\n  if (type === \"area\" && Array.isArray(areaPaths) && areaPaths.length === 1 && pathFromArea) {\n    out.area = reconcilePathPair(\n      pathFromArea,\n      areaPaths[0],\n      entries,\n      oldKeys.length,\n      newKeys.length,\n      true\n    );\n  }\n  if (!out.line && !out.area) return null;\n  return out;\n}\nfunction firstMove(d) {\n  const m = /^M\\s*([+-]?[\\d.eE]+)[\\s,]+([+-]?[\\d.eE]+)/.exec(d || \"\");\n  if (!m) return null;\n  const x = parseFloat(m[1]);\n  const y = parseFloat(m[2]);\n  return isFinite(x) && isFinite(y) ? { x, y } : null;\n}\nfunction renderBarExitGhosts({\n  w,\n  elSeries,\n  record,\n  newKeys,\n  isHorizontal,\n  speed\n}) {\n  var _a;\n  if (!lengthTransitionEnabled(w)) return;\n  if (!record || !Array.isArray(record.paths) || !(elSeries == null ? void 0 : elSeries.node)) return;\n  const newKeySet = new Set(newKeys);\n  const exits = record.paths.filter(\n    (p) => p && p.d && p.key != null && !newKeySet.has(p.key)\n  );\n  if (!exits.length) return;\n  const graphics = new Graphics(w);\n  const fallbackFill = (_a = w.globals.colors) == null ? void 0 : _a[parseInt(String(record.realIndex), 10)];\n  exits.forEach((p) => {\n    let fill = p.fill || fallbackFill || \"#c8c8c8\";\n    if (String(fill).indexOf(\"url(\") === 0) fill = fallbackFill || \"#c8c8c8\";\n    const ghost = graphics.drawPath({\n      d: p.d,\n      stroke: \"none\",\n      strokeWidth: 0,\n      fill,\n      fillOpacity: 1,\n      classes: \"apexcharts-bar-ghost\"\n    });\n    const node = ghost.node;\n    node.setAttribute(\"pointer-events\", \"none\");\n    ghost.attr(\n      \"clip-path\",\n      `url(#gridRectBarMask${w.globals.cuid})`\n    );\n    elSeries.node.insertBefore(node, elSeries.node.firstChild);\n    const start = firstMove(p.d);\n    let origin = isHorizontal ? \"left center\" : \"center bottom\";\n    try {\n      const bb = node.getBBox();\n      if (start && bb) {\n        if (isHorizontal) {\n          origin = Math.abs(start.x - bb.x) <= Math.abs(start.x - (bb.x + bb.width)) ? \"left center\" : \"right center\";\n        } else {\n          origin = Math.abs(start.y - (bb.y + bb.height)) <= Math.abs(start.y - bb.y) ? \"center bottom\" : \"center top\";\n        }\n      }\n    } catch (_) {\n    }\n    const style = node.style;\n    style.transformBox = \"fill-box\";\n    style.transformOrigin = origin;\n    const duration = Math.max(1, speed || 1);\n    const startAt = performance.now();\n    const step = (now) => {\n      if (w.globals.isDestroyed || !node.parentNode) return;\n      const t = Math.max(0, Math.min(1, (now - startAt) / duration));\n      const eased = 1 - Math.pow(1 - t, 3);\n      const scale = 1 - eased;\n      style.transform = isHorizontal ? `scaleX(${scale})` : `scaleY(${scale})`;\n      style.opacity = String(1 - eased);\n      if (t < 1) {\n        BrowserAPIs.requestAnimationFrame(step);\n      } else {\n        node.parentNode.removeChild(node);\n      }\n    };\n    BrowserAPIs.requestAnimationFrame(step);\n  });\n}\nfunction grabLabels(root, sel, posAttr) {\n  return [...root.querySelectorAll(sel)].map((el) => {\n    var _a, _b, _c;\n    return {\n      // `text` is the matching KEY (textContent, which doubles tspan + title\n      // but does so consistently on both sides); `display` is the visible\n      // string, used when rendering an exit ghost.\n      text: el.textContent || \"\",\n      display: (_c = (_b = (_a = el.querySelector(\"tspan\")) == null ? void 0 : _a.textContent) != null ? _b : el.textContent) != null ? _c : \"\",\n      pos: parseFloat(el.getAttribute(posAttr) || \"\"),\n      transform: el.getAttribute(\"transform\")\n    };\n  });\n}\nfunction grabLines(root, sel, posAttr) {\n  return [...root.querySelectorAll(sel)].map(\n    (el) => parseFloat(el.getAttribute(posAttr) || \"\")\n  );\n}\nconst NO_GHOST = \":not(.apexcharts-tick-ghost)\";\nconst X_LABELS_SEL = `.apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)${NO_GHOST}`;\nconst Y_LABELS_SEL = `.apexcharts-yaxis-texts-g text${NO_GHOST}`;\nconst V_GRID_SEL = `.apexcharts-gridlines-vertical line${NO_GHOST}`;\nconst H_GRID_SEL = `.apexcharts-gridlines-horizontal line${NO_GHOST}`;\nfunction currentXScale(w) {\n  var _a, _b;\n  const gl = w.globals;\n  if (!((_a = w.axisFlags) == null ? void 0 : _a.isXNumeric) || gl.isBarHorizontal) return null;\n  if ((_b = w.config.xaxis) == null ? void 0 : _b.reversed) return null;\n  const min = gl.minX;\n  const max = gl.maxX;\n  const width = w.layout.gridWidth;\n  if (!isFinite(min) || !isFinite(max) || !(max > min) || !(width > 0)) {\n    return null;\n  }\n  return { min, max, width };\n}\nfunction currentYAnchors(w, labels) {\n  var _a;\n  const gl = w.globals;\n  if (gl.isBarHorizontal) return null;\n  if (!Array.isArray(w.config.yaxis) || w.config.yaxis.length !== 1) return null;\n  if ((_a = w.config.yaxis[0]) == null ? void 0 : _a.logarithmic) return null;\n  const min = gl.minY;\n  const max = gl.maxY;\n  if (!isFinite(min) || !isFinite(max) || !(max > min)) return null;\n  const ps = labels.map((l) => l.pos).filter((p) => isFinite(p));\n  if (ps.length < 2) return null;\n  return { min, max, pLo: Math.max(...ps), pHi: Math.min(...ps) };\n}\nfunction composeXMap(o, n) {\n  if (!o || !n) return null;\n  const os = o.max - o.min;\n  const ns = n.max - n.min;\n  if (!(os > 0) || !(ns > 0) || !(o.width > 0) || !(n.width > 0)) return null;\n  return {\n    toNew: (p) => (o.min + p / o.width * os - n.min) / ns * n.width,\n    toOld: (p) => (n.min + p / n.width * ns - o.min) / os * o.width\n  };\n}\nfunction composeYMap(o, n) {\n  if (!o || !n) return null;\n  const oSpanP = o.pHi - o.pLo;\n  const nSpanP = n.pHi - n.pLo;\n  const oSpanV = o.max - o.min;\n  const nSpanV = n.max - n.min;\n  if (!oSpanP || !nSpanP || !(oSpanV > 0) || !(nSpanV > 0)) return null;\n  const oldVal = (p) => o.min + (p - o.pLo) / oSpanP * oSpanV;\n  const newVal = (p) => n.min + (p - n.pLo) / nSpanP * nSpanV;\n  return {\n    toNew: (p) => n.pLo + (oldVal(p) - n.min) / nSpanV * nSpanP,\n    toOld: (p) => o.pLo + (newVal(p) - o.min) / oSpanV * oSpanP\n  };\n}\nfunction captureAxisChrome(w) {\n  const gl = w.globals;\n  gl.prevChromeFrame = null;\n  if (!gl.axisCharts || !Environment.isBrowser()) return;\n  const root = w.dom.baseEl;\n  if (!Utils$1.elementExists(root)) return;\n  try {\n    const yLabels = grabLabels(root, Y_LABELS_SEL, \"y\");\n    gl.prevChromeFrame = {\n      xLabels: grabLabels(root, X_LABELS_SEL, \"x\"),\n      yLabels,\n      vGrid: grabLines(root, V_GRID_SEL, \"x1\"),\n      hGrid: grabLines(root, H_GRID_SEL, \"y1\"),\n      // Value scales of the outgoing render, so ticks whose TEXT has no\n      // counterpart (e.g. a zoom across datetime granularities) can still be\n      // re-projected: new ticks slide in from where their value sat, old\n      // ticks ghost out to where their value lands.\n      xScale: currentXScale(w),\n      yAnchors: currentYAnchors(w, yLabels)\n    };\n  } catch (_) {\n    gl.prevChromeFrame = null;\n  }\n}\nfunction fadeIn$1(w, node, duration, ease) {\n  const style = (\n    /** @type {any} */\n    node.style\n  );\n  style.opacity = \"0\";\n  rafTween(\n    w,\n    duration,\n    ease,\n    (eased) => {\n      style.opacity = String(eased);\n    },\n    () => {\n      style.opacity = \"\";\n    }\n  );\n}\nfunction tweenPos(w, node, attrs, from, to, duration, ease) {\n  attrs.forEach((a) => node.setAttribute(a, String(from)));\n  rafTween(\n    w,\n    duration,\n    ease,\n    (eased) => {\n      const v = String(from + (to - from) * eased);\n      attrs.forEach((a) => node.setAttribute(a, v));\n    },\n    () => {\n      attrs.forEach((a) => node.setAttribute(a, String(to)));\n    }\n  );\n}\nfunction spawnGhost(w, { template, display, attrs, from, to, duration, ease }) {\n  const parent = template.parentNode;\n  if (!parent) return;\n  const ghost = (\n    /** @type {Element} */\n    template.cloneNode(true)\n  );\n  ghost.classList.add(\"apexcharts-tick-ghost\");\n  ghost.setAttribute(\"pointer-events\", \"none\");\n  ghost.removeAttribute(\"id\");\n  if (display !== void 0) {\n    const tspan = ghost.querySelector(\"tspan\");\n    if (tspan) tspan.textContent = display;\n    else ghost.textContent = display;\n    const title = ghost.querySelector(\"title\");\n    if (title) title.textContent = display;\n  }\n  attrs.forEach((a) => ghost.setAttribute(a, String(from)));\n  const style = (\n    /** @type {any} */\n    ghost.style\n  );\n  style.opacity = \"1\";\n  parent.appendChild(ghost);\n  rafTween(\n    w,\n    duration,\n    ease,\n    (eased) => {\n      const v = String(from + (to - from) * eased);\n      attrs.forEach((a) => ghost.setAttribute(a, v));\n      style.opacity = String(1 - eased);\n    },\n    () => {\n      if (ghost.parentNode) ghost.parentNode.removeChild(ghost);\n    }\n  );\n}\nconst MAX_GHOSTS = 20;\nfunction transitionAxis(w, {\n  newLabels,\n  oldLabels,\n  posAttr,\n  newLines,\n  oldLines,\n  lineAttrs,\n  duration,\n  ease,\n  project\n}) {\n  const oldByText = /* @__PURE__ */ new Map();\n  oldLabels.forEach((l, i) => {\n    if (!oldByText.has(l.text)) oldByText.set(l.text, __spreadProps(__spreadValues({}, l), { i }));\n  });\n  const matchedOld = /* @__PURE__ */ new Set();\n  const newLinesAligned = newLines.length === newLabels.length;\n  const oldLinesAligned = oldLines.length === oldLabels.length;\n  const spanPs = oldLabels.map((l) => l.pos).concat(\n    newLabels.map((l) => parseFloat(l.getAttribute(posAttr) || \"\"))\n  ).filter((p) => isFinite(p));\n  const spanLo = Math.min(...spanPs);\n  const spanHi = Math.max(...spanPs);\n  const margin = Math.max(40, (spanHi - spanLo) * 0.25);\n  const clamp = (p) => Math.max(spanLo - margin, Math.min(spanHi + margin, p));\n  const tweenPairedLine = (line, old) => {\n    if (!line) return;\n    const lineTo = parseFloat(line.getAttribute(lineAttrs[0]) || \"\");\n    const lineFrom = oldLines[old.i];\n    if (isFinite(lineTo) && isFinite(lineFrom)) {\n      tweenPos(w, line, lineAttrs, lineFrom, lineTo, duration, ease);\n    }\n  };\n  newLabels.forEach((label, i) => {\n    const to = parseFloat(label.getAttribute(posAttr) || \"\");\n    const old = oldByText.get(label.textContent || \"\");\n    const line = newLinesAligned ? newLines[i] : null;\n    if (old) matchedOld.add(old.i);\n    const labelTransform = label.getAttribute(\"transform\");\n    if (!old || !isFinite(old.pos)) {\n      if (!old) {\n        if (project && isFinite(to) && !labelTransform) {\n          const from = isFinite(project.toOld(to)) ? clamp(project.toOld(to)) : NaN;\n          if (isFinite(from) && Math.abs(from - to) > 0.5) {\n            tweenPos(w, label, [posAttr], from, to, duration, ease);\n            if (line) tweenPos(w, line, lineAttrs, from, to, duration, ease);\n          }\n        }\n        fadeIn$1(w, label, duration, ease);\n        if (line) fadeIn$1(w, line, duration, ease);\n      }\n      return;\n    }\n    if (!isFinite(to) || Math.abs(old.pos - to) < 0.5) return;\n    if (labelTransform || old.transform) {\n      const delta = old.pos - to;\n      if (isFinite(delta)) {\n        const base = labelTransform || \"\";\n        rafTween(\n          w,\n          duration,\n          ease,\n          (eased) => {\n            const v = delta * (1 - eased);\n            const t = posAttr === \"x\" ? `translate(${v} 0)` : `translate(0 ${v})`;\n            label.setAttribute(\"transform\", `${t} ${base}`.trim());\n          },\n          () => {\n            if (base) label.setAttribute(\"transform\", base);\n            else label.removeAttribute(\"transform\");\n          }\n        );\n      }\n      tweenPairedLine(line, old);\n      return;\n    }\n    tweenPos(w, label, [posAttr], old.pos, to, duration, ease);\n    tweenPairedLine(line, old);\n  });\n  if (!project || !newLabels.length) return;\n  let ghosts = 0;\n  oldLabels.forEach((old, i) => {\n    if (matchedOld.has(i)) return;\n    if (!isFinite(old.pos) || old.transform) return;\n    if (ghosts >= MAX_GHOSTS) return;\n    const rawTo = project.toNew(old.pos);\n    if (!isFinite(rawTo) || Math.abs(rawTo - old.pos) < 0.5) return;\n    ghosts++;\n    spawnGhost(w, {\n      template: newLabels[0],\n      display: old.display,\n      attrs: [posAttr],\n      from: old.pos,\n      to: clamp(rawTo),\n      duration,\n      ease\n    });\n    if (oldLinesAligned && newLines.length && isFinite(oldLines[i])) {\n      spawnGhost(w, {\n        template: newLines[0],\n        attrs: lineAttrs,\n        from: oldLines[i],\n        to: clamp(project.toNew(oldLines[i])),\n        duration,\n        ease\n      });\n    }\n  });\n}\nfunction applyAxisTransition(w) {\n  const gl = w.globals;\n  const chrome = gl.prevChromeFrame;\n  gl.prevChromeFrame = null;\n  if (!chrome || !gl.axisCharts || !Environment.isBrowser()) return;\n  if (!lengthTransitionEnabled(w)) return;\n  const anyMotion = (w.seriesData.series || []).some(\n    (_, i) => seriesJoin(w, i, true, true) !== null\n  );\n  if (!anyMotion) return;\n  const root = w.dom.baseEl;\n  if (!Utils$1.elementExists(root)) return;\n  const duration = Math.max(1, w.config.chart.animations.dynamicAnimation.speed || 1);\n  const ease = morphEasing(w);\n  try {\n    const newYLabels = [...root.querySelectorAll(Y_LABELS_SEL)];\n    const projX = composeXMap(chrome.xScale, currentXScale(w));\n    const projY = composeYMap(\n      chrome.yAnchors,\n      currentYAnchors(\n        w,\n        newYLabels.map((el) => ({\n          pos: parseFloat(el.getAttribute(\"y\") || \"\")\n        }))\n      )\n    );\n    transitionAxis(w, {\n      newLabels: [...root.querySelectorAll(X_LABELS_SEL)],\n      oldLabels: chrome.xLabels,\n      posAttr: \"x\",\n      newLines: [...root.querySelectorAll(V_GRID_SEL)],\n      oldLines: chrome.vGrid,\n      lineAttrs: [\"x1\", \"x2\"],\n      duration,\n      ease,\n      project: projX\n    });\n    transitionAxis(w, {\n      newLabels: newYLabels,\n      oldLabels: chrome.yLabels,\n      posAttr: \"y\",\n      newLines: [...root.querySelectorAll(H_GRID_SEL)],\n      oldLines: chrome.hGrid,\n      lineAttrs: [\"y1\", \"y2\"],\n      duration,\n      ease,\n      project: projY\n    });\n  } catch (_) {\n  }\n}\nconst DL_GROUP_SEL = \".apexcharts-data-labels[data\\\\:dlKey]\";\nconst DL_TEXT_SEL = \".apexcharts-datalabel\";\nfunction dataLabelMotionEnabled(w) {\n  var _a, _b;\n  const dl = w.config.dataLabels;\n  return !!(((_a = dl == null ? void 0 : dl.animate) == null ? void 0 : _a.enabled) || ((_b = dl == null ? void 0 : dl.countUp) == null ? void 0 : _b.enabled));\n}\nfunction decimalsOf(n) {\n  if (!isFinite(n)) return 0;\n  const s = String(Math.abs(n));\n  const e = s.indexOf(\"e\");\n  if (e !== -1) {\n    const mantissa = s.slice(0, e);\n    const exp = parseInt(s.slice(e + 1), 10);\n    const dot2 = mantissa.indexOf(\".\");\n    const mantissaDec = dot2 === -1 ? 0 : mantissa.length - dot2 - 1;\n    return Math.min(6, Math.max(0, mantissaDec - exp));\n  }\n  const dot = s.indexOf(\".\");\n  return dot === -1 ? 0 : Math.min(6, s.length - dot - 1);\n}\nfunction writeLabel(textEl, s) {\n  const tspan = textEl.querySelector(\"tspan\");\n  if (tspan) tspan.textContent = s;\n  else textEl.textContent = s;\n}\nfunction captureDataLabels(w) {\n  const gl = w.globals;\n  gl.prevDataLabels = null;\n  if (!gl.axisCharts || !Environment.isBrowser()) return;\n  if (!dataLabelMotionEnabled(w)) return;\n  const root = w.dom.baseEl;\n  if (!Utils$1.elementExists(root)) return;\n  try {\n    const map = /* @__PURE__ */ new Map();\n    root.querySelectorAll(DL_GROUP_SEL).forEach((group) => {\n      const key = group.getAttribute(\"data:dlKey\");\n      if (!key) return;\n      const textEl = group.querySelector(DL_TEXT_SEL);\n      if (!textEl) return;\n      map.set(key, {\n        cx: parseFloat(textEl.getAttribute(\"cx\") || \"\"),\n        cy: parseFloat(textEl.getAttribute(\"cy\") || \"\"),\n        val: parseFloat(group.getAttribute(\"data:dlVal\") || \"\")\n      });\n    });\n    gl.prevDataLabels = map.size ? map : null;\n  } catch (_) {\n    gl.prevDataLabels = null;\n  }\n}\nfunction fadeIn(w, node, duration, ease) {\n  const style = (\n    /** @type {any} */\n    node.style\n  );\n  style.opacity = \"0\";\n  rafTween(\n    w,\n    duration,\n    ease,\n    (eased) => {\n      style.opacity = String(eased);\n    },\n    () => {\n      style.opacity = \"\";\n    }\n  );\n}\nfunction applyDataLabelTransition(w) {\n  var _a, _b;\n  const gl = w.globals;\n  const prev = gl.prevDataLabels;\n  gl.prevDataLabels = null;\n  if (!prev || !gl.axisCharts || !Environment.isBrowser()) return;\n  if (!dataLabelMotionEnabled(w)) return;\n  if (!lengthTransitionEnabled(w)) return;\n  const root = w.dom.baseEl;\n  if (!Utils$1.elementExists(root)) return;\n  const dl = w.config.dataLabels;\n  const ride = !!((_a = dl.animate) == null ? void 0 : _a.enabled);\n  const countUp = !!((_b = dl.countUp) == null ? void 0 : _b.enabled);\n  const formatter = dl.formatter;\n  const duration = Math.max(1, w.config.chart.animations.dynamicAnimation.speed || 1);\n  const ease = morphEasing(w);\n  try {\n    root.querySelectorAll(DL_GROUP_SEL).forEach((group) => {\n      const key = group.getAttribute(\"data:dlKey\");\n      if (!key) return;\n      const textEl = group.querySelector(DL_TEXT_SEL);\n      if (!textEl) return;\n      const old = prev.get(key);\n      if (ride) {\n        if (old && isFinite(old.cx) && isFinite(old.cy)) {\n          const newCx = parseFloat(textEl.getAttribute(\"cx\") || \"\");\n          const newCy = parseFloat(textEl.getAttribute(\"cy\") || \"\");\n          const dx = old.cx - newCx;\n          const dy = old.cy - newCy;\n          if (isFinite(dx) && isFinite(dy) && Math.abs(dx) + Math.abs(dy) > 0.5) {\n            const base = group.getAttribute(\"transform\") || \"\";\n            rafTween(\n              w,\n              duration,\n              ease,\n              (eased) => {\n                const t = 1 - eased;\n                group.setAttribute(\n                  \"transform\",\n                  `translate(${dx * t} ${dy * t}) ${base}`.trim()\n                );\n              },\n              () => {\n                group.setAttribute(\"transform\", base);\n              }\n            );\n          }\n        } else if (!old) {\n          fadeIn(w, group, duration, ease);\n        }\n      }\n      if (countUp && old && isFinite(old.val)) {\n        const newVal = parseFloat(group.getAttribute(\"data:dlVal\") || \"\");\n        if (isFinite(newVal) && Math.abs(newVal - old.val) > 1e-9) {\n          const from = old.val;\n          const dec = Math.max(decimalsOf(from), decimalsOf(newVal));\n          const realIndex = parseInt(key, 10);\n          const j = parseInt(group.getAttribute(\"data:dlJ\") || \"\", 10);\n          const fmtOpts = __spreadProps(__spreadValues({}, w), {\n            seriesIndex: realIndex,\n            dataPointIndex: isFinite(j) ? j : 0,\n            w\n          });\n          const format = (v) => {\n            const rounded = Number(v.toFixed(dec));\n            let out = rounded;\n            if (typeof formatter === \"function\") {\n              try {\n                out = formatter(rounded, fmtOpts);\n              } catch (_) {\n                out = rounded;\n              }\n            }\n            return String(out);\n          };\n          rafTween(\n            w,\n            duration,\n            ease,\n            (eased) => {\n              writeLabel(textEl, format(from + (newVal - from) * eased));\n            },\n            () => {\n              writeLabel(textEl, format(newVal));\n            }\n          );\n        }\n      }\n    });\n  } catch (_) {\n  }\n}\nclass Series {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {{ toggleDataSeries?: Function, revertDefaultAxisMinMax?: Function, updateSeries?: Function }} [callbacks]\n   */\n  constructor(w, {\n    toggleDataSeries = void 0,\n    revertDefaultAxisMinMax = void 0,\n    updateSeries = void 0\n  } = {}) {\n    this.w = w;\n    this._toggleDataSeries = toggleDataSeries || null;\n    this._revertDefaultAxisMinMax = revertDefaultAxisMinMax || null;\n    this._updateSeries = updateSeries || null;\n    this.legendInactiveClass = \"legend-mouseover-inactive\";\n  }\n  clearSeriesCache() {\n    const w = this.w;\n    if (w.globals.cachedSelectors) {\n      delete w.globals.cachedSelectors.allSeriesEls;\n      delete w.globals.cachedSelectors.highlightSeriesEls;\n    }\n  }\n  getAllSeriesEls() {\n    const w = this.w;\n    const cacheKey = \"allSeriesEls\";\n    if (!w.globals.cachedSelectors[cacheKey]) {\n      w.globals.cachedSelectors[cacheKey] = /** @type {any} */\n      w.dom.baseEl.getElementsByClassName(`apexcharts-series`);\n    }\n    return w.globals.cachedSelectors[cacheKey];\n  }\n  /**\n   * @param {string} seriesName\n   */\n  getSeriesByName(seriesName) {\n    return this.w.dom.baseEl.querySelector(\n      `.apexcharts-inner .apexcharts-series[seriesName='${Utils$1.escapeString(\n        seriesName\n      )}']`\n    );\n  }\n  /**\n   * @param {string} seriesName\n   */\n  isSeriesHidden(seriesName) {\n    var _a;\n    const targetElement = this.getSeriesByName(seriesName);\n    const el = (\n      /** @type {Element} */\n      targetElement\n    );\n    const realIndex = parseInt((_a = el.getAttribute(\"data:realIndex\")) != null ? _a : \"0\", 10);\n    const isHidden = el.classList.contains(\"apexcharts-series-collapsed\");\n    return { isHidden, realIndex };\n  }\n  /**\n   * @param {any} elSeries\n   * @param {number} index\n   */\n  addCollapsedClassToSeries(elSeries, index) {\n    Series.addCollapsedClassToSeries(this.w, elSeries, index);\n  }\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {any} elSeries\n   * @param {number} index\n   */\n  static addCollapsedClassToSeries(w, elSeries, index) {\n    function iterateOnAllCollapsedSeries(series) {\n      for (let cs = 0; cs < series.length; cs++) {\n        if (series[cs].index === index) {\n          elSeries.node.classList.add(\"apexcharts-series-collapsed\");\n        }\n      }\n    }\n    iterateOnAllCollapsedSeries(w.globals.collapsedSeries);\n    iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries);\n  }\n  /**\n   * @param {string} seriesName\n   */\n  toggleSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, isSeriesHidden.isHidden);\n    return isSeriesHidden.isHidden;\n  }\n  /**\n   * @param {string} seriesName\n   */\n  showSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    if (isSeriesHidden.isHidden) {\n      (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, true);\n    }\n  }\n  /**\n   * @param {string} seriesName\n   */\n  hideSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    if (!isSeriesHidden.isHidden) {\n      (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, false);\n    }\n  }\n  /**\n   * Cheap pre-update reset for the data-replacement paths (updateSeries /\n   * appendSeries). Clears the same bookkeeping resetSeries() clears (series\n   * cache, previous paths, collapsed-series state) WITHOUT restoring\n   * config.series from the initialSeries snapshot: the caller is about to\n   * replace the series anyway (parseData assigns config.series = newSeries),\n   * so materializing and cloning the snapshot per update is pure waste (two\n   * O(n) deep clones per streaming tick at 50k points).\n   */\n  prepareDataUpdate() {\n    const w = this.w;\n    this.clearSeriesCache();\n    w.globals.previousPaths = [];\n    w.globals.collapsedSeries = [];\n    w.globals.ancillaryCollapsedSeries = [];\n    w.globals.collapsedSeriesIndices = [];\n    w.globals.ancillaryCollapsedSeriesIndices = [];\n  }\n  resetSeries(shouldUpdateChart = true, shouldResetZoom = true, shouldResetCollapsed = true) {\n    var _a, _b;\n    const w = this.w;\n    this.clearSeriesCache();\n    let series = Utils$1.clone(w.globals.initialSeries);\n    w.globals.previousPaths = [];\n    if (shouldResetCollapsed) {\n      w.globals.collapsedSeries = [];\n      w.globals.ancillaryCollapsedSeries = [];\n      w.globals.collapsedSeriesIndices = [];\n      w.globals.ancillaryCollapsedSeriesIndices = [];\n    } else {\n      series = this.emptyCollapsedSeries(series);\n    }\n    w.config.series = series;\n    if (shouldUpdateChart) {\n      if (shouldResetZoom) {\n        w.interact.zoomed = false;\n        (_a = this._revertDefaultAxisMinMax) == null ? void 0 : _a.call(this);\n      }\n      (_b = this._updateSeries) == null ? void 0 : _b.call(\n        this,\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n    }\n  }\n  /**\n   * @param {any[]} series\n   */\n  emptyCollapsedSeries(series) {\n    const w = this.w;\n    for (let i = 0; i < series.length; i++) {\n      if (w.globals.collapsedSeriesIndices.indexOf(i) > -1) {\n        if (series[i] && typeof series[i] === \"object\") {\n          series[i].data = [];\n        } else {\n          series[i] = 0;\n        }\n      }\n    }\n    return series;\n  }\n  /**\n   * Series display names for the CURRENT `w.config` (post-merge), derived the\n   * same way the parser does: an object series' own `name`, else the matching\n   * `labels` entry (non-axis / pie / unit), else a generated `series-N`.\n   * @returns {string[]}\n   */\n  _deriveSeriesNames() {\n    const w = this.w;\n    const series = w.config.series || [];\n    const labels = w.config.labels || [];\n    return series.map((s, i) => {\n      if (s && typeof s === \"object\" && s.name != null) return String(s.name);\n      return labels[i] != null ? String(labels[i]) : `series-${i + 1}`;\n    });\n  }\n  /**\n   * Re-apply legend-hidden (collapsed) series to a freshly-updated\n   * `w.config.series`, matching BY CATEGORY NAME rather than index. This keeps a\n   * hide alive across a data update that reorders or regroups categories - most\n   * visibly a storyboard beat that supplies new series each scroll:\n   *   - a category still present stays hidden (at its possibly-new index);\n   *   - a category the update dropped/regrouped away is un-hidden (it no longer\n   *     exists, so it must reappear as part of the new grouping).\n   * Records without a stored name (older collapses) fall back to their index.\n   */\n  reconcileCollapsedByName() {\n    const w = this.w;\n    const gl = w.globals;\n    const newNames = this._deriveSeriesNames();\n    const reconcile = (records) => {\n      const nextRecords = [];\n      const nextIndices = [];\n      records.forEach((rec) => {\n        const j = rec && rec.name != null ? newNames.indexOf(rec.name) : rec.index;\n        if (j == null || j < 0 || j >= w.config.series.length) return;\n        const s = (\n          /** @type {any} */\n          w.config.series[j]\n        );\n        rec.index = j;\n        rec.data = gl.axisCharts ? s && s.data ? s.data.slice() : [] : s;\n        nextRecords.push(rec);\n        nextIndices.push(j);\n      });\n      return { records: nextRecords, indices: nextIndices };\n    };\n    const main = reconcile(gl.collapsedSeries);\n    gl.collapsedSeries = main.records;\n    gl.collapsedSeriesIndices = main.indices;\n    const anc = reconcile(gl.ancillaryCollapsedSeries);\n    gl.ancillaryCollapsedSeries = anc.records;\n    gl.ancillaryCollapsedSeriesIndices = anc.indices;\n    gl.allSeriesCollapsed = gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === w.config.series.length;\n    this.emptyCollapsedSeries(w.config.series);\n  }\n  /**\n   * @param {string} seriesName\n   */\n  /**\n   * Bridge SVG series-dim state to the canvas renderer: SVG opacity classes\n   * (legend-mouseover-inactive) don't touch the painted canvas series layer, so\n   * repaint it with a matching per-series opacity. No-op unless the canvas\n   * renderer is active. The renderer is mirrored on globals by RendererController\n   * (Series has no ctx handle).\n   * @param {{active:number, opacity:number}|null} dim\n   */\n  canvasRestyle(dim) {\n    const r = this.w.globals.activeRenderer;\n    if (r && r.kind === \"canvas\" && typeof r.restyle === \"function\") {\n      r.restyle(dim);\n    }\n  }\n  /**\n   * @param {string} seriesName\n   */\n  highlightSeries(seriesName) {\n    var _a;\n    const w = this.w;\n    const targetElement = this.getSeriesByName(seriesName);\n    const realIndex = parseInt(\n      (_a = targetElement == null ? void 0 : targetElement.getAttribute(\"data:realIndex\")) != null ? _a : \"\",\n      10\n    );\n    const cacheKey = \"highlightSeriesEls\";\n    let allSeriesEls = w.globals.cachedSelectors[cacheKey];\n    if (!allSeriesEls) {\n      allSeriesEls = w.dom.baseEl.querySelectorAll(\n        `.apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis`\n      );\n      w.globals.cachedSelectors[cacheKey] = allSeriesEls;\n    }\n    let seriesEl = null;\n    let dataLabelEl = null;\n    let yaxisEl = null;\n    if (w.globals.axisCharts || w.config.chart.type === \"radialBar\") {\n      if (w.globals.axisCharts) {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[data\\\\:realIndex='${realIndex}']`\n        );\n        dataLabelEl = w.dom.baseEl.querySelector(\n          `.apexcharts-datalabels[data\\\\:realIndex='${realIndex}']`\n        );\n        const yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n        yaxisEl = w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${yaxisIndex}']`\n        );\n      } else {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[rel='${realIndex + 1}']`\n        );\n      }\n    } else {\n      seriesEl = w.dom.baseEl.querySelector(\n        `.apexcharts-series[rel='${realIndex + 1}'] path`\n      );\n    }\n    for (let se = 0; se < allSeriesEls.length; se++) {\n      const serEl = (\n        /** @type {Element} */\n        allSeriesEls[se]\n      );\n      serEl.classList.add(this.legendInactiveClass);\n    }\n    if (seriesEl) {\n      if (!w.globals.axisCharts) {\n        const parentEl = (\n          /** @type {Element} */\n          seriesEl.parentNode\n        );\n        parentEl == null ? void 0 : parentEl.classList.remove(this.legendInactiveClass);\n      }\n      seriesEl.classList.remove(this.legendInactiveClass);\n      if (dataLabelEl !== null) {\n        dataLabelEl.classList.remove(this.legendInactiveClass);\n      }\n      if (yaxisEl !== null) {\n        yaxisEl.classList.remove(this.legendInactiveClass);\n      }\n    } else {\n      for (let se = 0; se < allSeriesEls.length; se++) {\n        const serEl = (\n          /** @type {Element} */\n          allSeriesEls[se]\n        );\n        serEl.classList.remove(this.legendInactiveClass);\n      }\n    }\n    this.canvasRestyle(\n      seriesEl && !Number.isNaN(realIndex) ? { active: realIndex, opacity: 0.2 } : null\n    );\n  }\n  /**\n   * @param {Event} e\n   * @param {any} targetElement\n   */\n  toggleSeriesOnHover(e, targetElement) {\n    const w = this.w;\n    if (!targetElement) targetElement = e.target;\n    const allSeriesEls = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis`\n    );\n    if (e.type === \"mousemove\") {\n      const realIndex = parseInt(targetElement.getAttribute(\"rel\"), 10) - 1;\n      this.highlightSeries(w.seriesData.seriesNames[realIndex]);\n    } else if (e.type === \"mouseout\") {\n      for (let se = 0; se < allSeriesEls.length; se++) {\n        allSeriesEls[se].classList.remove(this.legendInactiveClass);\n      }\n      this.canvasRestyle(null);\n    }\n  }\n  /**\n   * Dim every heatmap cell except those whose value falls inside the color\n   * range at `rangeIndex`. Shared by the categorical legend (hover a legend\n   * item) and the gradient legend (hover a band) — both supply an index into\n   * `colorScale.ranges` plus an action, decoupling the highlight from any\n   * particular DOM element / event shape.\n   *\n   * @param {number} rangeIndex index into `colorScale.ranges`\n   * @param {'highlight'|'reset'} action\n   */\n  highlightRangeInSeries(rangeIndex, action) {\n    const w = this.w;\n    const allHeatMapElements = w.dom.baseEl.getElementsByClassName(\n      \"apexcharts-heatmap-rect\"\n    );\n    const toggleAllInactive = (op) => {\n      for (let i = 0; i < allHeatMapElements.length; i++) {\n        const classList = (\n          /** @type {any} */\n          allHeatMapElements[i].classList\n        );\n        if (typeof classList[op] === \"function\") {\n          classList[op](this.legendInactiveClass);\n        }\n      }\n    };\n    if (action === \"reset\") {\n      toggleAllInactive(\"remove\");\n      return;\n    }\n    const ranges = w.config.plotOptions.heatmap.colorScale.ranges;\n    const range = ranges && ranges[rangeIndex];\n    if (!range) return;\n    toggleAllInactive(\"add\");\n    for (let i = 0; i < allHeatMapElements.length; i++) {\n      const val = Number(allHeatMapElements[i].getAttribute(\"val\"));\n      if (val >= range.from && val <= range.to) {\n        allHeatMapElements[i].classList.remove(this.legendInactiveClass);\n      }\n    }\n  }\n  /**\n   * @param {string[]} chartTypes\n   */\n  getActiveConfigSeriesIndex(order = \"asc\", chartTypes = []) {\n    const w = this.w;\n    let activeIndex = 0;\n    if (w.config.series.length > 1) {\n      const activeSeriesIndex = w.config.series.map((s, index) => {\n        const checkChartType = () => {\n          if (w.globals.comboCharts) {\n            return chartTypes.length === 0 || chartTypes.length && chartTypes.indexOf(\n              /** @type {Record<string,any>} */\n              w.config.series[index].type\n            ) > -1;\n          }\n          return true;\n        };\n        const hasData = (\n          /** @type {any} */\n          s.data && /** @type {any} */\n          s.data.length > 0 && w.globals.collapsedSeriesIndices.indexOf(index) === -1\n        );\n        return hasData && checkChartType() ? index : -1;\n      });\n      for (let a = order === \"asc\" ? 0 : activeSeriesIndex.length - 1; order === \"asc\" ? a < activeSeriesIndex.length : a >= 0; order === \"asc\" ? a++ : a--) {\n        if (activeSeriesIndex[a] !== -1) {\n          activeIndex = activeSeriesIndex[a];\n          break;\n        }\n      }\n    }\n    return activeIndex;\n  }\n  getBarSeriesIndices() {\n    const w = this.w;\n    if (w.globals.comboCharts) {\n      return this.w.config.series.map((s, i) => {\n        return s.type === \"bar\" || s.type === \"column\" ? i : -1;\n      }).filter((i) => {\n        return i !== -1;\n      });\n    }\n    return this.w.config.series.map((s, i) => {\n      return i;\n    });\n  }\n  getPreviousPaths() {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    captureStreamFrame(w);\n    captureAxisChrome(w);\n    captureDataLabels(w);\n    if (!w.globals.axisCharts) {\n      w.globals.previousPaths = w.seriesData.series;\n      return;\n    }\n    if (!Utils$1.elementExists(w.dom.baseEl)) {\n      w.globals.previousPaths = [];\n      return;\n    }\n    w.globals.previousPaths = [];\n    function pushPaths(seriesEls, i, type) {\n      const paths = seriesEls[i].childNodes;\n      const dArr = {\n        type,\n        paths: (\n          /** @type {any[]} */\n          []\n        ),\n        realIndex: seriesEls[i].getAttribute(\"data:realIndex\")\n      };\n      for (let j = 0; j < paths.length; j++) {\n        if (paths[j].hasAttribute(\"pathTo\")) {\n          const d = paths[j].getAttribute(\"pathTo\");\n          dArr.paths.push({\n            d,\n            key: paths[j].getAttribute(\"data:pathKey\"),\n            fill: paths[j].getAttribute(\"fill\")\n          });\n        }\n      }\n      w.globals.previousPaths.push(dArr);\n    }\n    const getPaths = (chartType) => {\n      return w.dom.baseEl.querySelectorAll(\n        `.apexcharts-${chartType}-series .apexcharts-series`\n      );\n    };\n    const chartTypes = [\n      \"line\",\n      \"area\",\n      \"bar\",\n      \"rangebar\",\n      \"rangeArea\",\n      \"candlestick\",\n      \"radar\"\n    ];\n    chartTypes.forEach((type) => {\n      const paths = getPaths(type);\n      for (let p = 0; p < paths.length; p++) {\n        pushPaths(paths, p, type);\n      }\n    });\n    const heatTreeSeries = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-${w.config.chart.type} .apexcharts-series`\n    );\n    if (heatTreeSeries.length > 0) {\n      for (let h = 0; h < heatTreeSeries.length; h++) {\n        const seriesEls = w.dom.baseEl.querySelectorAll(\n          `.apexcharts-${w.config.chart.type} .apexcharts-series[data\\\\:realIndex='${h}'] rect`\n        );\n        const dArr = [];\n        for (let i = 0; i < seriesEls.length; i++) {\n          const getAttr = (x) => {\n            return (\n              /** @type {Element} */\n              seriesEls[i].getAttribute(x)\n            );\n          };\n          const rect = {\n            x: parseFloat((_a = getAttr(\"x\")) != null ? _a : \"0\"),\n            y: parseFloat((_b = getAttr(\"y\")) != null ? _b : \"0\"),\n            width: parseFloat((_c = getAttr(\"width\")) != null ? _c : \"0\"),\n            height: parseFloat((_d = getAttr(\"height\")) != null ? _d : \"0\")\n          };\n          dArr.push({\n            rect,\n            color: seriesEls[i].getAttribute(\"color\")\n          });\n        }\n        w.globals.previousPaths.push(dArr);\n      }\n    }\n  }\n  clearPreviousPaths() {\n    const w = this.w;\n    w.globals.previousPaths = [];\n    w.globals.allSeriesCollapsed = false;\n  }\n  handleNoData() {\n    const w = this.w;\n    const me = this;\n    const noDataOpts = w.config.noData;\n    const graphics = new Graphics(me.w);\n    let x = w.globals.svgWidth / 2;\n    let y = w.globals.svgHeight / 2;\n    let textAnchor = \"middle\";\n    w.globals.noData = true;\n    w.globals.animationEnded = true;\n    if (noDataOpts.align === \"left\") {\n      x = 10;\n      textAnchor = \"start\";\n    } else if (noDataOpts.align === \"right\") {\n      x = w.globals.svgWidth - 10;\n      textAnchor = \"end\";\n    }\n    if (noDataOpts.verticalAlign === \"top\") {\n      y = 50;\n    } else if (noDataOpts.verticalAlign === \"bottom\") {\n      y = w.globals.svgHeight - 50;\n    }\n    x = x + noDataOpts.offsetX;\n    y = y + parseInt(noDataOpts.style.fontSize, 10) + 2 + noDataOpts.offsetY;\n    if (noDataOpts.text !== void 0 && noDataOpts.text !== \"\") {\n      const titleText = graphics.drawText({\n        x,\n        y,\n        text: noDataOpts.text,\n        textAnchor,\n        fontSize: noDataOpts.style.fontSize,\n        fontFamily: noDataOpts.style.fontFamily,\n        foreColor: noDataOpts.style.color,\n        opacity: 1,\n        cssClass: \"apexcharts-text-nodata\"\n      });\n      w.dom.Paper.add(titleText);\n    }\n  }\n  // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0]\n  // This is because we don't want to alter the series' length as it is used at many places\n  /**\n   * @param {any[]} series\n   */\n  setNullSeriesToZeroValues(series) {\n    const w = this.w;\n    for (let sl = 0; sl < series.length; sl++) {\n      if (series[sl].length === 0) {\n        for (let j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) {\n          series[sl].push(0);\n        }\n      }\n    }\n    return series;\n  }\n  hasAllSeriesEqualX() {\n    let equalLen = true;\n    const w = this.w;\n    const filteredSerX = this.filteredSeriesX();\n    for (let i = 0; i < filteredSerX.length - 1; i++) {\n      if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) {\n        equalLen = false;\n        break;\n      }\n    }\n    w.globals.allSeriesHasEqualX = equalLen;\n    return equalLen;\n  }\n  filteredSeriesX() {\n    const w = this.w;\n    const filteredSeriesX = w.seriesData.seriesX.map(\n      (ser) => ser.length > 0 ? ser : []\n    );\n    return filteredSeriesX;\n  }\n}\nconst TOKEN_MAP = {\n  accent: \"--apx-accent\",\n  fore: \"--apx-fore\",\n  grid: \"--apx-grid\",\n  surface: \"--apx-surface\"\n};\nconst MAX_SERIES_TOKENS = 24;\nfunction readTokens(w) {\n  if (!Environment.isBrowser()) return {};\n  const el = w.dom && (w.dom.elWrap || w.dom.baseEl) || null;\n  if (!el) return {};\n  const cs = BrowserAPIs.getComputedStyle(el);\n  if (!cs || typeof /** @type {any} */\n  cs.getPropertyValue !== \"function\") {\n    return {};\n  }\n  const read = (name2) => {\n    const v = (\n      /** @type {any} */\n      cs.getPropertyValue(name2)\n    );\n    return v ? String(v).trim() : \"\";\n  };\n  const out = {};\n  for (const key in TOKEN_MAP) {\n    const v = read(\n      /** @type {any} */\n      TOKEN_MAP[key]\n    );\n    if (v) out[key] = v;\n  }\n  const series = [];\n  for (let i = 1; i <= MAX_SERIES_TOKENS; i++) {\n    const v = read(`--apx-series-${i}`);\n    if (!v) break;\n    series.push(v);\n  }\n  if (series.length) out.series = series;\n  return out;\n}\nconst THEME_KEY = \"__apexcharts_themes__\";\nif (!/** @type {any} */\nglobalThis[THEME_KEY]) {\n  globalThis[THEME_KEY] = {};\n}\nfunction getThemes() {\n  return (\n    /** @type {any} */\n    globalThis[THEME_KEY]\n  );\n}\nfunction registerTheme(name2, def) {\n  if (!name2 || typeof name2 !== \"string\") {\n    console.warn(\"ApexCharts: registerTheme requires a non-empty name.\");\n    return;\n  }\n  if (def != null && (typeof def !== \"object\" || Array.isArray(def))) {\n    console.warn(\n      `ApexCharts: registerTheme(\"${name2}\") expects an object like { mode, palette, tokens, monochrome, accessibility }.`\n    );\n    return;\n  }\n  getThemes()[name2] = def || {};\n}\nfunction getTheme(name2) {\n  if (!name2) return null;\n  return getThemes()[name2] || null;\n}\nfunction unregisterTheme(name2) {\n  if (!name2) return;\n  delete getThemes()[name2];\n}\nconst DEFAULT_FORECOLOR_LIGHT = \"#373d3f\";\nconst DEFAULT_FORECOLOR_DARK = \"#f6f7f8\";\nconst DEFAULT_AXIS_GRID = \"#e0e0e0\";\nclass Theme {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.colors = [];\n    this.isColorFn = false;\n    this.isHeatmapDistributed = this.checkHeatmapDistributed();\n    this.isBarDistributed = this.checkBarDistributed();\n    this._tokens = {};\n    this._namedTheme = null;\n  }\n  checkHeatmapDistributed() {\n    const { chart, plotOptions } = this.w.config;\n    return chart.type === \"treemap\" && plotOptions.treemap && plotOptions.treemap.distributed || chart.type === \"heatmap\" && plotOptions.heatmap && plotOptions.heatmap.distributed;\n  }\n  checkBarDistributed() {\n    const { chart, plotOptions } = this.w.config;\n    return plotOptions.bar && plotOptions.bar.distributed && (chart.type === \"bar\" || chart.type === \"rangeBar\");\n  }\n  init() {\n    this.setDefaultColors();\n  }\n  setDefaultColors() {\n    var _a;\n    const w = this.w;\n    const utils = new Utils$1();\n    this._namedTheme = getTheme(w.config.theme.name);\n    this._applyNamedThemeMode();\n    w.dom.elWrap.classList.add(\n      `apexcharts-theme-${w.config.theme.mode || \"light\"}`\n    );\n    this._applyModeDefaults();\n    this._tokens = this._resolveTokens();\n    this.applyTokenChrome(this._tokens);\n    const colorBlindMode = (_a = w.config.theme.accessibility) == null ? void 0 : _a.colorBlindMode;\n    if (colorBlindMode) {\n      w.globals.colors = this.getColorBlindColors(colorBlindMode);\n      this.applySeriesColors(w.seriesData.seriesColors, w.globals.colors);\n      const defaultColors2 = w.globals.colors.slice();\n      this.pushExtraColors(w.globals.colors);\n      this.applyColorTypes([\"fill\", \"stroke\"], defaultColors2);\n      this.applyDataLabelsColors(defaultColors2);\n      this.applyRadarPolygonsColors();\n      this.applyMarkersColors(defaultColors2);\n      if (colorBlindMode === \"highContrast\") {\n        w.dom.elWrap.classList.add(\"apexcharts-high-contrast\");\n      }\n      return;\n    }\n    const configColors = [...w.config.colors || w.config.fill.colors || []];\n    w.globals.colors = this.getColors(configColors);\n    this.applySeriesColors(w.seriesData.seriesColors, w.globals.colors);\n    if (w.config.theme.monochrome.enabled) {\n      w.globals.colors = this.getMonochromeColors(\n        w.config.theme.monochrome,\n        w.seriesData.series,\n        utils\n      );\n    }\n    const defaultColors = w.globals.colors.slice();\n    this.pushExtraColors(w.globals.colors);\n    this.applyColorTypes([\"fill\", \"stroke\"], defaultColors);\n    this.applyDataLabelsColors(defaultColors);\n    this.applyRadarPolygonsColors();\n    this.applyMarkersColors(defaultColors);\n  }\n  /**\n   * Facet (#13): normalize the mode's concrete defaults (foreColor + palette +\n   * tooltip theme) at render time. Only overwrites a value still at its\n   * opposite-mode default sentinel, so an explicit user value or a value\n   * already normalized by checkForDarkTheme/updateThemeOptions is untouched.\n   */\n  _applyModeDefaults() {\n    const w = this.w;\n    const mode = w.config.theme.mode;\n    if (mode === \"dark\") {\n      if (w.config.chart.foreColor === DEFAULT_FORECOLOR_LIGHT) {\n        w.config.chart.foreColor = DEFAULT_FORECOLOR_DARK;\n      }\n      if (w.config.theme.palette === \"palette1\") {\n        w.config.theme.palette = \"palette4\";\n      }\n      if (w.config.tooltip && w.config.tooltip.theme !== \"light\") {\n        w.config.tooltip.theme = \"dark\";\n      }\n    } else if (mode === \"light\") {\n      if (w.config.chart.foreColor === DEFAULT_FORECOLOR_DARK) {\n        w.config.chart.foreColor = DEFAULT_FORECOLOR_LIGHT;\n      }\n      if (w.config.theme.palette === \"palette4\") {\n        w.config.theme.palette = \"palette1\";\n      }\n    }\n  }\n  /**\n   * Facet (#13): apply a registered named theme's mode / accessibility /\n   * monochrome, each only when the user (or the OS watcher) has not set it, so\n   * explicit config and `follow:'os'` both win over the named theme.\n   */\n  _applyNamedThemeMode() {\n    const named = this._namedTheme;\n    if (!named) return;\n    const theme = this.w.config.theme;\n    if (named.mode && !theme.mode) {\n      theme.mode = named.mode;\n    }\n    if (named.accessibility && named.accessibility.colorBlindMode && !(theme.accessibility && theme.accessibility.colorBlindMode)) {\n      theme.accessibility = theme.accessibility || {};\n      theme.accessibility.colorBlindMode = named.accessibility.colorBlindMode;\n    }\n    if (named.monochrome && named.monochrome.enabled && !theme.monochrome.enabled) {\n      theme.monochrome = __spreadValues(__spreadValues({}, theme.monochrome), named.monochrome);\n    }\n  }\n  /**\n   * Facet (#13): the effective token set. CSS `--apx-*` tokens (when enabled)\n   * layer over the named theme's `tokens`, so a page-level token overrides a\n   * registered brand default.\n   * @returns {{accent?:string, fore?:string, grid?:string, surface?:string, series?:string[]}}\n   */\n  _resolveTokens() {\n    const named = this._namedTheme && this._namedTheme.tokens || {};\n    const css = this._shouldUseTokens() ? readTokens(this.w) : {};\n    return __spreadValues(__spreadValues({}, named), css);\n  }\n  /**\n   * Facet (#13): tokens are on unless explicitly disabled (`theme.tokens:false`).\n   * `true` is the default (the legacy `'auto'` value is accepted and means the\n   * same); `readTokens` returns only the tokens actually present, so absence\n   * is a no-op.\n   * @returns {boolean}\n   */\n  _shouldUseTokens() {\n    return this.w.config.theme.tokens !== false;\n  }\n  /**\n   * Facet (#13): overwrite chrome defaults with `--apx-*` tokens, but only where\n   * the value still equals its built-in default (so explicit config wins).\n   * @param {{fore?:string, grid?:string, surface?:string}} tokens\n   */\n  applyTokenChrome(tokens) {\n    if (!tokens) return;\n    const w = this.w;\n    if (tokens.fore && (w.config.chart.foreColor === DEFAULT_FORECOLOR_LIGHT || w.config.chart.foreColor === DEFAULT_FORECOLOR_DARK)) {\n      w.config.chart.foreColor = tokens.fore;\n    }\n    if (tokens.grid) {\n      if (w.config.grid.borderColor === DEFAULT_AXIS_GRID) {\n        w.config.grid.borderColor = tokens.grid;\n      }\n      const applyAxis = (axis) => {\n        if (!axis) return;\n        if (axis.axisBorder && axis.axisBorder.color === DEFAULT_AXIS_GRID) {\n          axis.axisBorder.color = tokens.grid;\n        }\n        if (axis.axisTicks && axis.axisTicks.color === DEFAULT_AXIS_GRID) {\n          axis.axisTicks.color = tokens.grid;\n        }\n      };\n      applyAxis(w.config.xaxis);\n      if (Array.isArray(w.config.yaxis)) {\n        w.config.yaxis.forEach(applyAxis);\n      } else {\n        applyAxis(w.config.yaxis);\n      }\n    }\n    if (tokens.surface && !w.config.chart.background) {\n      w.config.chart.background = tokens.surface;\n      const paperNode = w.dom.Paper && w.dom.Paper.node;\n      if (paperNode && paperNode.style) {\n        paperNode.style.background = tokens.surface;\n      }\n    }\n  }\n  /**\n   * @param {any[]} configColors\n   */\n  getColors(configColors) {\n    const w = this.w;\n    if (!configColors || configColors.length === 0) {\n      return this.predefined();\n    }\n    if (Array.isArray(configColors) && configColors.length > 0 && typeof configColors[0] === \"function\") {\n      this.isColorFn = true;\n      return w.config.series.map((s, i) => {\n        const c = configColors[i] || configColors[0];\n        return typeof c === \"function\" ? c({\n          value: w.globals.axisCharts ? w.seriesData.series[i][0] || 0 : w.seriesData.series[i],\n          seriesIndex: i,\n          dataPointIndex: i,\n          w: this.w\n        }) : c;\n      });\n    }\n    return configColors;\n  }\n  /**\n   * @param {any[]} seriesColors\n   * @param {any[]} globalsColors\n   */\n  applySeriesColors(seriesColors, globalsColors) {\n    seriesColors.forEach((c, i) => {\n      if (c) {\n        globalsColors[i] = c;\n      }\n    });\n  }\n  /**\n   * @param {Record<string, any>} monochrome\n   * @param {any[]} series\n   * @param {any} utils\n   */\n  getMonochromeColors(monochrome, series, utils) {\n    const { color, shadeIntensity, shadeTo } = monochrome;\n    const glsCnt = this.isBarDistributed || this.isHeatmapDistributed ? series[0].length * series.length : series.length;\n    const part = 1 / (glsCnt / shadeIntensity);\n    let percent = 0;\n    return Array.from({ length: glsCnt }, () => {\n      const newColor = shadeTo === \"dark\" ? utils.shadeColor(percent * -1, color) : utils.shadeColor(percent, color);\n      percent += part;\n      return newColor;\n    });\n  }\n  /**\n   * @param {string[]} colorTypes\n   * @param {string[]} defaultColors\n   */\n  applyColorTypes(colorTypes, defaultColors) {\n    const w = this.w;\n    colorTypes.forEach((c) => {\n      w.globals[c].colors = w.config[c].colors === void 0 ? this.isColorFn ? w.config.colors : defaultColors : w.config[c].colors.slice();\n      this.pushExtraColors(\n        /** @type {Record<string,any>} */\n        w.globals[c].colors\n      );\n    });\n  }\n  /**\n   * @param {string[]} defaultColors\n   */\n  applyDataLabelsColors(defaultColors) {\n    const w = this.w;\n    w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors === void 0 ? defaultColors : w.config.dataLabels.style.colors.slice();\n    this.pushExtraColors(w.globals.dataLabels.style.colors, 50);\n  }\n  applyRadarPolygonsColors() {\n    const w = this.w;\n    w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors === void 0 ? [w.config.theme.mode === \"dark\" ? \"#343A3F\" : \"none\"] : w.config.plotOptions.radar.polygons.fill.colors.slice();\n    this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20);\n  }\n  /**\n   * @param {string[]} defaultColors\n   */\n  applyMarkersColors(defaultColors) {\n    const w = this.w;\n    w.globals.markers.colors = w.config.markers.colors === void 0 ? defaultColors : w.config.markers.colors.slice();\n    this.pushExtraColors(w.globals.markers.colors);\n  }\n  /**\n   * @param {any} colorSeries\n   * @param {number} [length]\n   * @param {boolean | null} [distributed]\n   */\n  pushExtraColors(colorSeries, length, distributed = null) {\n    const w = this.w;\n    let len = length || w.seriesData.series.length;\n    if (distributed === null) {\n      distributed = this.isBarDistributed || this.isHeatmapDistributed || w.config.chart.type === \"heatmap\" && w.config.plotOptions.heatmap && w.config.plotOptions.heatmap.colorScale.inverse;\n    }\n    if (distributed && w.seriesData.series.length) {\n      len = w.seriesData.series[w.globals.maxValsInArrayIndex].length * w.seriesData.series.length;\n    }\n    if (colorSeries.length < len) {\n      const diff = len - colorSeries.length;\n      for (let i = 0; i < diff; i++) {\n        colorSeries.push(colorSeries[i]);\n      }\n    }\n  }\n  /**\n   * @param {'light' | 'dark'} mode\n   */\n  getColorBlindColors(mode) {\n    const palettes = getThemePalettes();\n    const map = {\n      deuteranopia: palettes.cvdDeuteranopia,\n      protanopia: palettes.cvdProtanopia,\n      tritanopia: palettes.cvdTritanopia,\n      highContrast: palettes.highContrast\n    };\n    return (\n      /** @type {Record<string,any>} */\n      /** @type {any} */\n      (map[mode] || palettes.palette1).slice()\n    );\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  updateThemeOptions(options2) {\n    options2.chart = options2.chart || {};\n    options2.tooltip = options2.tooltip || {};\n    const mode = options2.theme.mode;\n    const palette = mode === \"dark\" ? \"palette4\" : mode === \"light\" ? \"palette1\" : options2.theme.palette || \"palette1\";\n    const foreColor = mode === \"dark\" ? \"#f6f7f8\" : mode === \"light\" ? \"#373d3f\" : options2.chart.foreColor || \"#373d3f\";\n    options2.tooltip.theme = mode || \"light\";\n    options2.chart.foreColor = foreColor;\n    options2.theme.palette = palette;\n    return options2;\n  }\n  predefined() {\n    const palette = this.w.config.theme.palette;\n    const palettes = getThemePalettes();\n    const builtin = (\n      /** @type {Record<string,any>} */\n      palettes[palette] || palettes.palette1\n    );\n    const tokens = this._tokens || {};\n    if (Array.isArray(tokens.series) && tokens.series.length) {\n      return tokens.series.slice();\n    }\n    if (tokens.accent) {\n      return [tokens.accent, ...builtin];\n    }\n    const named = this._namedTheme;\n    if (named && Array.isArray(named.palette) && named.palette.length) {\n      return named.palette.slice();\n    }\n    return builtin;\n  }\n}\nclass TitleSubtitle {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  draw() {\n    this.drawTitleSubtitle(\"title\");\n    this.drawTitleSubtitle(\"subtitle\");\n  }\n  /**\n   * @param {'title' | 'subtitle'} type\n   */\n  drawTitleSubtitle(type) {\n    const w = this.w;\n    const tsConfig = type === \"title\" ? w.config.title : w.config.subtitle;\n    let x = w.globals.svgWidth / 2;\n    let y = tsConfig.offsetY;\n    let textAnchor = \"middle\";\n    if (tsConfig.align === \"left\") {\n      x = 10;\n      textAnchor = \"start\";\n    } else if (tsConfig.align === \"right\") {\n      x = w.globals.svgWidth - 10;\n      textAnchor = \"end\";\n    }\n    x = x + tsConfig.offsetX;\n    y = y + parseInt(tsConfig.style.fontSize, 10) + tsConfig.margin / 2;\n    if (tsConfig.text !== void 0) {\n      const graphics = new Graphics(this.w);\n      const titleText = graphics.drawText({\n        x,\n        y,\n        text: tsConfig.text,\n        textAnchor,\n        fontSize: tsConfig.style.fontSize,\n        fontFamily: tsConfig.style.fontFamily,\n        fontWeight: tsConfig.style.fontWeight,\n        foreColor: tsConfig.style.color,\n        opacity: 1\n      });\n      titleText.node.setAttribute(\"class\", `apexcharts-${type}-text`);\n      w.dom.Paper.add(titleText);\n    }\n  }\n}\nlet Helpers$4 = class Helpers {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get Chart Title/Subtitle Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   * @param {string} type\n   **/\n  getTitleSubtitleCoords(type) {\n    const w = this.w;\n    let width = 0;\n    let height = 0;\n    const floating = type === \"title\" ? w.config.title.floating : w.config.subtitle.floating;\n    const el = w.dom.baseEl.querySelector(`.apexcharts-${type}-text`);\n    if (el !== null && !floating) {\n      const coord = el.getBoundingClientRect();\n      width = coord.width;\n      height = w.globals.axisCharts ? coord.height + 5 : coord.height;\n    }\n    return {\n      width,\n      height\n    };\n  }\n  getLegendsRect() {\n    const w = this.w;\n    const elLegendWrap = w.dom.elLegendWrap;\n    if (!w.config.legend.height && (w.config.legend.position === \"top\" || w.config.legend.position === \"bottom\")) {\n      if (elLegendWrap)\n        elLegendWrap.style.maxHeight = w.globals.svgHeight / 2 + \"px\";\n    }\n    const lgRect = (\n      /** @type {any} */\n      Object.assign({}, Utils$1.getBoundingClientRect(elLegendWrap))\n    );\n    if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) {\n      this.dCtx.lgRect = {\n        x: lgRect.x,\n        y: lgRect.y,\n        height: lgRect.height,\n        width: lgRect.height === 0 ? 0 : lgRect.width\n      };\n    } else {\n      this.dCtx.lgRect = {\n        x: 0,\n        y: 0,\n        height: 0,\n        width: 0\n      };\n    }\n    if (w.config.legend.position === \"left\" || w.config.legend.position === \"right\") {\n      if (this.dCtx.lgRect.width * 1.5 > w.globals.svgWidth) {\n        this.dCtx.lgRect.width = w.globals.svgWidth / 1.5;\n      }\n    }\n    return this.dCtx.lgRect;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getDatalabelsRect() {\n    const w = this.w;\n    const allLabels = [];\n    w.config.series.forEach(\n      (serie, seriesIndex) => {\n        serie.data.forEach(\n          (datum, dataPointIndex) => {\n            const getText = (v) => {\n              return w.config.dataLabels.formatter(v, {\n                seriesIndex,\n                dataPointIndex,\n                w\n              });\n            };\n            const labelText = getText(\n              w.seriesData.series[seriesIndex][dataPointIndex]\n            );\n            allLabels.push(labelText);\n          }\n        );\n      }\n    );\n    const val = Utils$1.getLargestStringFromArr(allLabels);\n    const graphics = new Graphics(this.w);\n    const dataLabelsStyle = w.config.dataLabels.style;\n    const labelrect = graphics.getTextRects(\n      val,\n      parseInt(dataLabelsStyle.fontSize).toString(),\n      dataLabelsStyle.fontFamily\n    );\n    return {\n      width: labelrect.width * 1.05,\n      height: labelrect.height\n    };\n  }\n  /**\n   * @param {any} val\n   * @param {any[]} arr\n   */\n  getLargestStringFromMultiArr(val, arr) {\n    const w = this.w;\n    let valArr = val;\n    if (w.axisFlags.isMultiLineX) {\n      const maxArrs = arr.map((xl) => {\n        return Array.isArray(xl) ? xl.length : 1;\n      });\n      const maxArrLen = Math.max(...maxArrs);\n      const maxArrIndex = maxArrs.indexOf(maxArrLen);\n      valArr = arr[maxArrIndex];\n    }\n    return valArr;\n  }\n  /**\n   * Vertical space a sparkline has to keep free inside its SVG so the series\n   * stroke isn't clipped at the top / bottom edge.\n   *\n   * A stroke is centred on its path, so half of it hangs outside the plot\n   * wherever the path runs along an edge. Reserving that half unconditionally\n   * lifts the whole plot away from the SVG edges even when nothing is drawn\n   * there, which shows up as a strip of empty space under an area fill or a\n   * bar base (#5137). So reserve only what the ink can't absorb itself: where\n   * the stroke traces the data points, the distance between the extreme datum\n   * and the axis extreme already swallows part or all of the overhang. Fills\n   * need nothing: area fills are drawn unstroked (see Line.js renderPaths).\n   *\n   * @returns {{ top: number, bottom: number }}\n   **/\n  getSparklineStrokeInset() {\n    const w = this.w;\n    const maxStrokeWidth = Array.isArray(w.config.stroke.width) ? Math.max(...w.config.stroke.width) : w.config.stroke.width;\n    const half = maxStrokeWidth / 2;\n    if (!w.config.stroke.show || !(half > 0)) {\n      return { top: 0, bottom: 0 };\n    }\n    const yRange = w.globals.maxY - w.globals.minY;\n    const extremes = this._getSeriesYExtremes();\n    if (!this._strokeTracesDataPoints() || !(yRange > 0) || !extremes) {\n      return { top: half, bottom: half };\n    }\n    const plotHeight = Math.max(w.globals.svgHeight - maxStrokeWidth, 0);\n    const roomAbove = plotHeight * (w.globals.maxY - extremes.max) / yRange;\n    const roomBelow = plotHeight * (extremes.min - w.globals.minY) / yRange;\n    return {\n      top: Math.min(Math.max(half - roomAbove, 0), half),\n      bottom: Math.min(Math.max(half - roomBelow, 0), half)\n    };\n  }\n  /**\n   * Whether every drawn series is one whose stroke follows the data points, so\n   * the extreme datum marks the outermost ink. False for anything that strokes\n   * to the baseline or fills the plot (bar, heatmap, ...) and for stacked\n   * charts, where the ink is the cumulative total rather than the raw values.\n   * @returns {boolean}\n   **/\n  _strokeTracesDataPoints() {\n    const w = this.w;\n    if (!w.globals.axisCharts || w.config.chart.stacked) return false;\n    const tracesPoints = [\"line\", \"area\", \"scatter\"];\n    return (\n      /** @type {any[]} */\n      w.config.series.every(\n        (s) => tracesPoints.includes(s.type || w.config.chart.type)\n      )\n    );\n  }\n  /**\n   * Min / max across every plotted y value, or null when nothing is plottable.\n   * @returns {{ min: number, max: number } | null}\n   **/\n  _getSeriesYExtremes() {\n    let min = Infinity;\n    let max = -Infinity;\n    this.w.seriesData.series.forEach((data) => {\n      if (!Array.isArray(data)) return;\n      data.forEach((val) => {\n        if (!Number.isFinite(val)) return;\n        if (val < min) min = val;\n        if (val > max) max = val;\n      });\n    });\n    return min === Infinity ? null : { min, max };\n  }\n};\nclass DimXAxis {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get X Axis Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getxAxisLabelsCoords() {\n    const w = this.w;\n    let xaxisLabels = w.labelData.labels.slice();\n    if (w.config.xaxis.convertedCatToNumeric && xaxisLabels.length === 0) {\n      xaxisLabels = w.labelData.categoryLabels;\n    }\n    let rect;\n    if (w.labelData.timescaleLabels.length > 0) {\n      const coords = this.getxAxisTimeScaleLabelsCoords();\n      rect = {\n        width: coords.width,\n        height: coords.height\n      };\n      w.layout.rotateXLabels = false;\n    } else {\n      this.dCtx.lgWidthForSideLegends = (w.config.legend.position === \"left\" || w.config.legend.position === \"right\") && !w.config.legend.floating ? this.dCtx.lgRect.width : 0;\n      const xlbFormatter = w.formatters.xLabelFormatter;\n      let val = Utils$1.getLargestStringFromArr(xaxisLabels);\n      let valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n        val,\n        xaxisLabels\n      );\n      if (w.globals.isBarHorizontal) {\n        val = w.globals.yAxisScale[0].result.reduce(\n          (a, b) => a.length > b.length ? a : b,\n          0\n        );\n        valArr = val;\n      }\n      const xFormat = new Formatters(this.w);\n      const timestamp = val;\n      val = xFormat.xLabelFormat(\n        /** @type {Function} */\n        xlbFormatter,\n        val,\n        timestamp,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      valArr = xFormat.xLabelFormat(\n        /** @type {Function} */\n        xlbFormatter,\n        valArr,\n        timestamp,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      if (w.config.xaxis.convertedCatToNumeric && typeof val === \"undefined\" || String(val).trim() === \"\") {\n        val = \"1\";\n        valArr = val;\n      }\n      const graphics = new Graphics(this.w);\n      let xLabelrect = graphics.getTextRects(\n        val,\n        w.config.xaxis.labels.style.fontSize\n      );\n      let xArrLabelrect = xLabelrect;\n      if (val !== valArr) {\n        xArrLabelrect = graphics.getTextRects(\n          valArr,\n          w.config.xaxis.labels.style.fontSize\n        );\n      }\n      rect = {\n        width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width,\n        height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height\n      };\n      if (rect.width * xaxisLabels.length > w.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && w.config.xaxis.labels.rotate !== 0 || w.config.xaxis.labels.rotateAlways) {\n        if (!w.globals.isBarHorizontal) {\n          w.layout.rotateXLabels = true;\n          const getRotatedTextRects = (text) => {\n            return graphics.getTextRects(\n              text,\n              w.config.xaxis.labels.style.fontSize,\n              w.config.xaxis.labels.style.fontFamily,\n              `rotate(${w.config.xaxis.labels.rotate} 0 0)`,\n              false\n            );\n          };\n          xLabelrect = getRotatedTextRects(val);\n          if (val !== valArr) {\n            xArrLabelrect = getRotatedTextRects(valArr);\n          }\n          rect.height = (xLabelrect.height > xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height) / 1.5;\n          rect.width = xLabelrect.width > xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width;\n        }\n      } else {\n        w.layout.rotateXLabels = false;\n      }\n    }\n    if (!w.config.xaxis.labels.show) {\n      rect = {\n        width: 0,\n        height: 0\n      };\n    }\n    return {\n      width: rect.width,\n      height: rect.height\n    };\n  }\n  /**\n   * Get X Axis Label Group height\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   */\n  getxAxisGroupLabelsCoords() {\n    var _a;\n    const w = this.w;\n    if (!w.labelData.hasXaxisGroups) {\n      return { width: 0, height: 0 };\n    }\n    const fontSize = ((_a = w.config.xaxis.group.style) == null ? void 0 : _a.fontSize) || w.config.xaxis.labels.style.fontSize;\n    const xaxisLabels = w.labelData.groups.map(\n      (g) => g.title\n    );\n    let rect;\n    const val = Utils$1.getLargestStringFromArr(xaxisLabels);\n    const valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n      val,\n      xaxisLabels\n    );\n    const graphics = new Graphics(this.w);\n    const xLabelrect = graphics.getTextRects(val, fontSize);\n    let xArrLabelrect = xLabelrect;\n    if (val !== valArr) {\n      xArrLabelrect = graphics.getTextRects(valArr, fontSize);\n    }\n    rect = {\n      width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width,\n      height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height\n    };\n    if (!w.config.xaxis.labels.show) {\n      rect = {\n        width: 0,\n        height: 0\n      };\n    }\n    return {\n      width: rect.width,\n      height: rect.height\n    };\n  }\n  /**\n   * Get X Axis Title Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getxAxisTitleCoords() {\n    const w = this.w;\n    let width = 0;\n    let height = 0;\n    if (w.config.xaxis.title.text !== void 0) {\n      const graphics = new Graphics(this.w);\n      const rect = graphics.getTextRects(\n        w.config.xaxis.title.text,\n        w.config.xaxis.title.style.fontSize\n      );\n      width = rect.width;\n      height = rect.height;\n    }\n    return {\n      width,\n      height\n    };\n  }\n  getxAxisTimeScaleLabelsCoords() {\n    const w = this.w;\n    this.dCtx.timescaleLabels = w.labelData.timescaleLabels.slice();\n    const labels = this.dCtx.timescaleLabels.map(\n      (label) => label.value\n    );\n    const val = labels.reduce((a, b) => {\n      if (typeof a === \"undefined\") {\n        console.error(\n          \"You have possibly supplied invalid Date format. Please supply a valid JavaScript Date\"\n        );\n        return 0;\n      } else {\n        return a.length > b.length ? a : b;\n      }\n    }, 0);\n    const graphics = new Graphics(this.w);\n    const rect = graphics.getTextRects(\n      val,\n      w.config.xaxis.labels.style.fontSize\n    );\n    const totalWidthRotated = rect.width * 1.05 * labels.length;\n    if (totalWidthRotated > w.layout.gridWidth && w.config.xaxis.labels.rotate !== 0) {\n      w.globals.overlappingXLabels = true;\n    }\n    return rect;\n  }\n  // In certain cases, the last labels gets cropped in xaxis.\n  // Hence, we add some additional padding based on the label length to avoid the last label being cropped or we don't draw it at all\n  /**\n   * @param {Record<string, any>} xaxisLabelCoords\n   */\n  additionalPaddingXLabels(xaxisLabelCoords) {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    const xtype = cnf.xaxis.type;\n    const lbWidth = xaxisLabelCoords.width;\n    gl.skipLastTimelinelabel = false;\n    gl.skipFirstTimelinelabel = false;\n    const isBarOpposite = w.config.yaxis[0].opposite && w.globals.isBarHorizontal;\n    const isCollapsed = (i) => gl.collapsedSeriesIndices.indexOf(i) !== -1;\n    const rightPad = (yaxe) => {\n      if (this.dCtx.timescaleLabels && this.dCtx.timescaleLabels.length) {\n        const firstimescaleLabel = this.dCtx.timescaleLabels[0];\n        const lastTimescaleLabel = this.dCtx.timescaleLabels[this.dCtx.timescaleLabels.length - 1];\n        const lastLabelPosition = lastTimescaleLabel.position + lbWidth / 1.75 - this.dCtx.yAxisWidthRight;\n        const firstLabelPosition = firstimescaleLabel.position - lbWidth / 1.75 + this.dCtx.yAxisWidthLeft;\n        const lgRightRectWidth = w.config.legend.position === \"right\" && this.dCtx.lgRect.width > 0 ? this.dCtx.lgRect.width : 0;\n        if (lastLabelPosition > gl.svgWidth - w.layout.translateX - lgRightRectWidth) {\n          gl.skipLastTimelinelabel = true;\n        }\n        if (firstLabelPosition < -((!yaxe.show || yaxe.floating) && (cnf.chart.type === \"bar\" || cnf.chart.type === \"candlestick\" || cnf.chart.type === \"rangeBar\" || cnf.chart.type === \"boxPlot\" || cnf.chart.type === \"violin\") ? lbWidth / 1.75 : 10)) {\n          gl.skipFirstTimelinelabel = true;\n        }\n      } else if (xtype === \"datetime\") {\n        if (this.dCtx.gridPad.right < lbWidth && !w.layout.rotateXLabels) {\n          gl.skipLastTimelinelabel = true;\n        }\n      } else if (xtype !== \"datetime\") {\n        if (this.dCtx.gridPad.right < lbWidth / 2 - this.dCtx.yAxisWidthRight && !w.layout.rotateXLabels && !w.config.xaxis.labels.trim) {\n          this.dCtx.xPadRight = lbWidth / 2 + 1;\n        }\n      }\n    };\n    const padYAxe = (yaxe, i) => {\n      if (cnf.yaxis.length > 1 && isCollapsed(i)) return;\n      rightPad(yaxe);\n    };\n    cnf.yaxis.forEach((yaxe, i) => {\n      if (isBarOpposite) {\n        if (this.dCtx.gridPad.left < lbWidth) {\n          this.dCtx.xPadLeft = lbWidth / 2 + 1;\n        }\n        this.dCtx.xPadRight = lbWidth / 2 + 1;\n      } else {\n        padYAxe(yaxe, i);\n      }\n    });\n  }\n}\nclass DimYAxis {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @returns {Array<{width: number, height: number}>}\n   **/\n  getyAxisLabelsCoords() {\n    const w = this.w;\n    const width = 0;\n    const height = 0;\n    const ret = [];\n    let labelPad = 10;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    w.config.yaxis.map((yaxe, index) => {\n      const formatterArgs = {\n        seriesIndex: index,\n        dataPointIndex: -1,\n        w\n      };\n      const yS = w.globals.yAxisScale[index];\n      let yAxisMinWidth = 0;\n      if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yaxe.labels.minWidth !== void 0)\n        yAxisMinWidth = yaxe.labels.minWidth;\n      if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yS.result.length) {\n        const lbFormatter = w.formatters.yLabelFormatters[index];\n        const minV = yS.niceMin === Number.MIN_VALUE ? 0 : yS.niceMin;\n        let val = yS.result.reduce((acc, curr) => {\n          var _a, _b;\n          return ((_a = String(lbFormatter(acc, formatterArgs))) == null ? void 0 : _a.length) > ((_b = String(lbFormatter(curr, formatterArgs))) == null ? void 0 : _b.length) ? acc : curr;\n        }, minV);\n        val = lbFormatter(val, formatterArgs);\n        let valArr = val;\n        if (typeof val === \"undefined\" || val.length === 0) {\n          val = yS.niceMax;\n        }\n        if (String(val).length === 1) {\n          val = val + \".0\";\n          valArr = val;\n        }\n        if (w.globals.isBarHorizontal) {\n          labelPad = 0;\n          const barYaxisLabels = w.labelData.labels.slice();\n          val = Utils$1.getLargestStringFromArr(barYaxisLabels);\n          val = lbFormatter(val, { seriesIndex: index, dataPointIndex: -1, w });\n          valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n            val,\n            barYaxisLabels\n          );\n        }\n        const graphics = new Graphics(this.w);\n        const rotateStr = \"rotate(\".concat(yaxe.labels.rotate, \" 0 0)\");\n        const rect = graphics.getTextRects(\n          val,\n          yaxe.labels.style.fontSize,\n          yaxe.labels.style.fontFamily,\n          rotateStr,\n          false\n        );\n        let arrLabelrect = rect;\n        if (val !== valArr) {\n          arrLabelrect = graphics.getTextRects(\n            valArr,\n            yaxe.labels.style.fontSize,\n            yaxe.labels.style.fontFamily,\n            rotateStr,\n            false\n          );\n        }\n        ret.push({\n          width: (yAxisMinWidth > arrLabelrect.width || yAxisMinWidth > rect.width ? yAxisMinWidth : arrLabelrect.width > rect.width ? arrLabelrect.width : rect.width) + labelPad,\n          height: arrLabelrect.height > rect.height ? arrLabelrect.height : rect.height\n        });\n      } else {\n        ret.push({\n          width,\n          height\n        });\n      }\n    });\n    return ret;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @returns {Array<{width: number, height: number}>}\n   **/\n  getyAxisTitleCoords() {\n    const w = this.w;\n    const ret = [];\n    w.config.yaxis.map((yaxe) => {\n      if (yaxe.show && yaxe.title.text !== void 0) {\n        const graphics = new Graphics(this.w);\n        const rotateStr = \"rotate(\".concat(yaxe.title.rotate, \" 0 0)\");\n        const rect = graphics.getTextRects(\n          yaxe.title.text,\n          yaxe.title.style.fontSize,\n          yaxe.title.style.fontFamily,\n          rotateStr,\n          false\n        );\n        ret.push({\n          width: rect.width,\n          height: rect.height\n        });\n      } else {\n        ret.push({\n          width: 0,\n          height: 0\n        });\n      }\n    });\n    return ret;\n  }\n  getTotalYAxisWidth() {\n    const w = this.w;\n    let yAxisWidth = 0;\n    let yAxisWidthLeft = 0;\n    let yAxisWidthRight = 0;\n    const padding = w.globals.yAxisScale.length > 1 ? 10 : 0;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    const isHiddenYAxis = function(index) {\n      return w.globals.ignoreYAxisIndexes.indexOf(index) > -1;\n    };\n    const padForLabelTitle = (coord, index) => {\n      const floating = w.config.yaxis[index].floating;\n      let width = 0;\n      if (coord.width > 0 && !floating) {\n        width = coord.width + padding;\n        if (isHiddenYAxis(index)) {\n          width = width - coord.width - padding;\n        }\n      } else {\n        width = floating || axesUtils.isYAxisHidden(index) ? 0 : 5;\n      }\n      w.config.yaxis[index].opposite ? yAxisWidthRight = yAxisWidthRight + width : yAxisWidthLeft = yAxisWidthLeft + width;\n      yAxisWidth = yAxisWidth + width;\n    };\n    w.layout.yLabelsCoords.map((yLabelCoord, index) => {\n      padForLabelTitle(yLabelCoord, index);\n    });\n    w.layout.yTitleCoords.map((yTitleCoord, index) => {\n      padForLabelTitle(yTitleCoord, index);\n    });\n    if (w.globals.isBarHorizontal && !w.config.yaxis[0].floating) {\n      yAxisWidth = w.layout.yLabelsCoords[0].width + w.layout.yTitleCoords[0].width + 15;\n    }\n    this.dCtx.yAxisWidthLeft = yAxisWidthLeft;\n    this.dCtx.yAxisWidthRight = yAxisWidthRight;\n    return yAxisWidth;\n  }\n}\nclass DimGrid {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * @param {number} gridWidth\n   */\n  gridPadForColumnsInNumericAxis(gridWidth) {\n    const { w } = this;\n    const { config: cnf, globals: gl } = w;\n    if (gl.noData || gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === cnf.series.length) {\n      return 0;\n    }\n    const hasBar = (type2) => [\"bar\", \"rangeBar\", \"candlestick\", \"boxPlot\", \"violin\"].includes(type2);\n    const type = cnf.chart.type;\n    let barWidth = 0;\n    let seriesLen = hasBar(type) ? cnf.series.length : 1;\n    if (gl.comboBarCount > 0) {\n      seriesLen = gl.comboBarCount;\n    }\n    gl.collapsedSeries.forEach((c) => {\n      if (hasBar(c.type)) {\n        seriesLen -= 1;\n      }\n    });\n    if (cnf.chart.stacked) {\n      seriesLen = 1;\n    }\n    const barsPresent = hasBar(type) || gl.comboBarCount > 0;\n    let xRange = Math.abs(gl.initialMaxX - gl.initialMinX);\n    if (barsPresent && w.axisFlags.isXNumeric && !gl.isBarHorizontal && seriesLen > 0 && xRange !== 0) {\n      if (xRange <= 3) {\n        xRange = gl.dataPoints;\n      }\n      const xRatio = xRange / gridWidth;\n      let xDivision = gl.minXDiff && gl.minXDiff / xRatio > 0 ? gl.minXDiff / xRatio : 0;\n      if (xDivision > gridWidth / 2) {\n        xDivision /= 2;\n      }\n      barWidth = xDivision * parseInt(cnf.plotOptions.bar.columnWidth, 10) / 100;\n      if (barWidth < 1) {\n        barWidth = 1;\n      }\n      gl.barPadForNumericAxis = barWidth;\n    }\n    return barWidth;\n  }\n  gridPadFortitleSubtitle() {\n    const { w } = this;\n    const { globals: gl } = w;\n    let gridShrinkOffset = this.dCtx.isSparkline || !gl.axisCharts ? 0 : 10;\n    const titleSubtitle = [\"title\", \"subtitle\"];\n    titleSubtitle.forEach((t) => {\n      if (w.config[t].text !== void 0) {\n        gridShrinkOffset += w.config[t].margin;\n      } else {\n        gridShrinkOffset += this.dCtx.isSparkline || !gl.axisCharts ? 0 : 5;\n      }\n    });\n    if (w.config.legend.show && w.config.legend.position === \"bottom\" && !w.config.legend.floating && !gl.axisCharts) {\n      gridShrinkOffset += 10;\n    }\n    const titleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords(\"title\");\n    const subtitleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords(\"subtitle\");\n    w.layout.gridHeight -= titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n    w.layout.translateY += titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n  }\n  /**\n   * @param {{width: number, height: number}[]} yTitleCoords\n   * @param {{width: number, height: number}[]} yaxisLabelCoords\n   */\n  setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) {\n    const { w } = this;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    w.config.yaxis.forEach((yaxe, index) => {\n      if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !yaxe.floating && !axesUtils.isYAxisHidden(index)) {\n        if (yaxe.opposite) {\n          w.layout.translateX -= yaxisLabelCoords[index].width + yTitleCoords[index].width + parseInt(yaxe.labels.style.fontSize, 10) / 1.2 + 12;\n        }\n        if (w.layout.translateX < 2) {\n          w.layout.translateX = 2;\n        }\n      }\n    });\n  }\n}\nclass Dimensions {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.theme = ctx.theme;\n    this.timeScale = ctx.timeScale;\n    this.lgRect = /** @type {any} */\n    {};\n    this.yAxisWidth = 0;\n    this.yAxisWidthLeft = 0;\n    this.yAxisWidthRight = 0;\n    this.xAxisHeight = 0;\n    this.isSparkline = this.w.config.chart.sparkline.enabled;\n    this.dimHelpers = new Helpers$4(this);\n    this.dimYAxis = new DimYAxis(this);\n    this.dimXAxis = new DimXAxis(this);\n    this.dimGrid = new DimGrid(this);\n    this.lgWidthForSideLegends = 0;\n    this.gridPad = __spreadValues({}, this.w.config.grid.padding);\n    this.xPadRight = 0;\n    this.xPadLeft = 0;\n    this.datalabelsCoords = { width: 0, height: 0 };\n    this.xAxisWidth = 0;\n    this.timescaleLabels = [];\n  }\n  /**\n   * @memberof Dimensions\n   **/\n  plotCoords() {\n    const w = this.w;\n    const gl = w.globals;\n    this.lgRect = this.dimHelpers.getLegendsRect();\n    this.datalabelsCoords = { width: 0, height: 0 };\n    if (this.isSparkline) {\n      if (this.w.globals.markers.largestSize > 0) {\n        Object.entries(this.gridPad).forEach(([k, v]) => {\n          this.gridPad[k] = Math.max(\n            v,\n            this.w.globals.markers.largestSize / 1.5\n          );\n        });\n      }\n      const strokeInset = this.dimHelpers.getSparklineStrokeInset();\n      this.gridPad.top = Math.max(strokeInset.top, this.gridPad.top);\n      this.gridPad.bottom = Math.max(strokeInset.bottom, this.gridPad.bottom);\n    }\n    if (gl.axisCharts) {\n      this.setDimensionsForAxisCharts();\n    } else {\n      this.setDimensionsForNonAxisCharts();\n    }\n    this.dimGrid.gridPadFortitleSubtitle();\n    w.layout.gridHeight = w.layout.gridHeight - this.gridPad.top - this.gridPad.bottom;\n    w.layout.gridWidth = w.layout.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft;\n    const barWidth = this.dimGrid.gridPadForColumnsInNumericAxis(\n      w.layout.gridWidth\n    );\n    w.layout.gridWidth = w.layout.gridWidth - barWidth * 2;\n    w.layout.translateX = w.layout.translateX + this.gridPad.left + this.xPadLeft + (barWidth > 0 ? barWidth : 0);\n    w.layout.translateY = w.layout.translateY + this.gridPad.top;\n    return {\n      // w.layout (future slice)\n      layout: {\n        gridHeight: w.layout.gridHeight,\n        gridWidth: w.layout.gridWidth,\n        translateX: w.layout.translateX,\n        translateY: w.layout.translateY,\n        translateXAxisX: w.layout.translateXAxisX,\n        translateXAxisY: w.layout.translateXAxisY,\n        rotateXLabels: w.layout.rotateXLabels,\n        xAxisHeight: w.layout.xAxisHeight,\n        xAxisLabelsHeight: w.layout.xAxisLabelsHeight,\n        xAxisGroupLabelsHeight: w.layout.xAxisGroupLabelsHeight,\n        xAxisLabelsWidth: w.layout.xAxisLabelsWidth,\n        yLabelsCoords: w.layout.yLabelsCoords,\n        yTitleCoords: w.layout.yTitleCoords,\n        gridPad: __spreadValues({}, this.gridPad)\n      }\n    };\n  }\n  setDimensionsForAxisCharts() {\n    const w = this.w;\n    const gl = w.globals;\n    const yaxisLabelCoords = this.dimYAxis.getyAxisLabelsCoords();\n    const yTitleCoords = this.dimYAxis.getyAxisTitleCoords();\n    if (gl.isSlopeChart) {\n      this.datalabelsCoords = this.dimHelpers.getDatalabelsRect();\n    }\n    w.layout.yLabelsCoords = [];\n    w.layout.yTitleCoords = [];\n    w.config.yaxis.map((yaxe, index) => {\n      w.layout.yLabelsCoords.push({\n        width: yaxisLabelCoords[index].width,\n        index\n      });\n      w.layout.yTitleCoords.push(\n        /** @type {any} */\n        {\n          width: yTitleCoords[index].width,\n          index\n        }\n      );\n    });\n    this.yAxisWidth = this.dimYAxis.getTotalYAxisWidth();\n    const xaxisLabelCoords = this.dimXAxis.getxAxisLabelsCoords();\n    const xaxisGroupLabelCoords = this.dimXAxis.getxAxisGroupLabelsCoords();\n    const xtitleCoords = this.dimXAxis.getxAxisTitleCoords();\n    this.conditionalChecksForAxisCoords(\n      xaxisLabelCoords,\n      xtitleCoords,\n      xaxisGroupLabelCoords\n    );\n    w.layout.translateXAxisY = w.layout.rotateXLabels ? this.xAxisHeight / 8 : -4;\n    w.layout.translateXAxisX = w.layout.rotateXLabels && w.axisFlags.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0;\n    if (w.globals.isBarHorizontal) {\n      w.layout.rotateXLabels = false;\n      w.layout.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize, 10) / 1.5);\n    }\n    w.layout.translateXAxisY = w.layout.translateXAxisY + w.config.xaxis.labels.offsetY;\n    w.layout.translateXAxisX = w.layout.translateXAxisX + w.config.xaxis.labels.offsetX;\n    let yAxisWidth = this.yAxisWidth;\n    let xAxisHeight = this.xAxisHeight;\n    w.layout.xAxisLabelsHeight = this.xAxisHeight - xtitleCoords.height;\n    w.layout.xAxisGroupLabelsHeight = w.layout.xAxisLabelsHeight - xaxisLabelCoords.height;\n    w.layout.xAxisLabelsWidth = this.xAxisWidth;\n    w.layout.xAxisHeight = this.xAxisHeight;\n    let translateY = 10;\n    if (w.config.chart.type === \"radar\" || this.isSparkline) {\n      yAxisWidth = 0;\n      xAxisHeight = 0;\n    }\n    if (this.isSparkline) {\n      this.lgRect = {\n        height: 0,\n        width: 0\n      };\n    }\n    if (this.isSparkline || w.config.chart.type === \"treemap\") {\n      yAxisWidth = 0;\n      xAxisHeight = 0;\n      translateY = 0;\n    }\n    if (!this.isSparkline && w.config.chart.type !== \"treemap\") {\n      this.dimXAxis.additionalPaddingXLabels(xaxisLabelCoords);\n    }\n    const legendTopBottom = () => {\n      w.layout.translateX = yAxisWidth + this.datalabelsCoords.width;\n      w.layout.gridHeight = gl.svgHeight - this.lgRect.height - xAxisHeight - (!this.isSparkline && w.config.chart.type !== \"treemap\" ? w.layout.rotateXLabels ? 10 : 15 : 0);\n      w.layout.gridWidth = gl.svgWidth - yAxisWidth - this.datalabelsCoords.width * 2;\n    };\n    if (w.config.xaxis.position === \"top\")\n      translateY = w.layout.xAxisHeight - w.config.xaxis.axisTicks.height - 5;\n    switch (w.config.legend.position) {\n      case \"bottom\":\n        w.layout.translateY = translateY;\n        legendTopBottom();\n        break;\n      case \"top\":\n        w.layout.translateY = this.lgRect.height + translateY;\n        legendTopBottom();\n        break;\n      case \"left\":\n        w.layout.translateY = translateY;\n        w.layout.translateX = this.lgRect.width + yAxisWidth + this.datalabelsCoords.width;\n        w.layout.gridHeight = gl.svgHeight - xAxisHeight - 12;\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - this.datalabelsCoords.width * 2;\n        break;\n      case \"right\":\n        w.layout.translateY = translateY;\n        w.layout.translateX = yAxisWidth + this.datalabelsCoords.width;\n        w.layout.gridHeight = gl.svgHeight - xAxisHeight - 12;\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - this.datalabelsCoords.width * 2 - 5;\n        break;\n      default:\n        throw new Error(\"Legend position not supported\");\n    }\n    this.dimGrid.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords);\n    const objyAxis = new YAxis(this.w, {\n      theme: this.theme,\n      timeScale: this.timeScale\n    });\n    objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords);\n  }\n  setDimensionsForNonAxisCharts() {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    let xPad = 0;\n    if (w.config.legend.show && !w.config.legend.floating) {\n      xPad = 20;\n    }\n    if (cnf.chart.type === \"unit\") {\n      const legendVisible = cnf.legend.show && !cnf.legend.floating;\n      const pos = cnf.legend.position;\n      let top = 0;\n      let side = 0;\n      if (legendVisible) {\n        if (pos === \"bottom\" || pos === \"top\") {\n          top = this.lgRect.height;\n        } else {\n          side = this.lgRect.width + xPad;\n        }\n      }\n      w.layout.gridWidth = gl.svgWidth - side;\n      w.layout.gridHeight = gl.svgHeight - top;\n      w.layout.translateX = pos === \"left\" ? side : 0;\n      w.layout.translateY = pos === \"top\" ? top : 0;\n      return;\n    }\n    const type = cnf.chart.type === \"sunburst\" ? \"sunburst\" : cnf.chart.type === \"pie\" || cnf.chart.type === \"polarArea\" || cnf.chart.type === \"donut\" ? \"pie\" : \"radialBar\";\n    const offY = cnf.plotOptions[type].offsetY;\n    const offX = cnf.plotOptions[type].offsetX;\n    if (!cnf.legend.show || cnf.legend.floating) {\n      w.layout.gridHeight = gl.svgHeight;\n      const maxWidth = w.dom.elWrap.getBoundingClientRect().width;\n      w.layout.gridWidth = Math.min(maxWidth, w.layout.gridHeight);\n      w.layout.translateY = offY;\n      w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n      return;\n    }\n    switch (cnf.legend.position) {\n      case \"bottom\":\n        w.layout.gridHeight = gl.svgHeight - this.lgRect.height;\n        w.layout.gridWidth = gl.svgWidth;\n        w.layout.translateY = offY - 10;\n        w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n        break;\n      case \"top\":\n        w.layout.gridHeight = gl.svgHeight - this.lgRect.height;\n        w.layout.gridWidth = gl.svgWidth;\n        w.layout.translateY = this.lgRect.height + offY + 10;\n        w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n        break;\n      case \"left\":\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - xPad;\n        w.layout.gridHeight = cnf.chart.height !== \"auto\" ? gl.svgHeight : w.layout.gridWidth;\n        w.layout.translateY = offY;\n        w.layout.translateX = offX + this.lgRect.width + xPad;\n        break;\n      case \"right\":\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - xPad - 5;\n        w.layout.gridHeight = cnf.chart.height !== \"auto\" ? gl.svgHeight : w.layout.gridWidth;\n        w.layout.translateY = offY;\n        w.layout.translateX = offX + 10;\n        break;\n      default:\n        throw new Error(\"Legend position not supported\");\n    }\n  }\n  /**\n   * @param {any} xaxisLabelCoords\n   * @param {any} xtitleCoords\n   * @param {any} xaxisGroupLabelCoords\n   */\n  conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords, xaxisGroupLabelCoords) {\n    const w = this.w;\n    const xAxisNum = w.labelData.hasXaxisGroups ? 2 : 1;\n    const baseXAxisHeight = xaxisGroupLabelCoords.height + xaxisLabelCoords.height + xtitleCoords.height;\n    const xAxisHeightMultiplicate = w.axisFlags.isMultiLineX ? 1.2 : LINE_HEIGHT_RATIO;\n    const rotatedXAxisOffset = w.layout.rotateXLabels ? 22 : 10;\n    const rotatedXAxisLegendOffset = w.layout.rotateXLabels && w.config.legend.position === \"bottom\";\n    const additionalOffset = rotatedXAxisLegendOffset ? 10 : 0;\n    this.xAxisHeight = baseXAxisHeight * xAxisHeightMultiplicate + xAxisNum * rotatedXAxisOffset + additionalOffset;\n    this.xAxisWidth = xaxisLabelCoords.width;\n    if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) {\n      this.xAxisHeight = w.config.xaxis.labels.maxHeight;\n    }\n    if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) {\n      this.xAxisHeight = w.config.xaxis.labels.minHeight;\n    }\n    if (w.config.xaxis.floating) {\n      this.xAxisHeight = 0;\n    }\n    let minYAxisWidth = 0;\n    let maxYAxisWidth = 0;\n    w.config.yaxis.forEach((y) => {\n      minYAxisWidth += y.labels.minWidth;\n      maxYAxisWidth += y.labels.maxWidth;\n    });\n    if (this.yAxisWidth < minYAxisWidth) {\n      this.yAxisWidth = minYAxisWidth;\n    }\n    if (this.yAxisWidth > maxYAxisWidth) {\n      this.yAxisWidth = maxYAxisWidth;\n    }\n  }\n}\nconst SECOND = 1e3;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\nconst APPROX_MONTH = 30 * DAY;\nconst APPROX_YEAR = 365 * DAY;\nconst MIN_ZOOM_DAYS = 10 / (24 * 60 * 60);\nconst TICK_LADDER = [\n  { unit: \"second\", step: 1, approxMs: SECOND },\n  { unit: \"second\", step: 5, approxMs: 5 * SECOND },\n  { unit: \"second\", step: 15, approxMs: 15 * SECOND },\n  { unit: \"second\", step: 30, approxMs: 30 * SECOND },\n  { unit: \"minute\", step: 1, approxMs: MINUTE },\n  { unit: \"minute\", step: 5, approxMs: 5 * MINUTE },\n  { unit: \"minute\", step: 15, approxMs: 15 * MINUTE },\n  { unit: \"minute\", step: 30, approxMs: 30 * MINUTE },\n  { unit: \"hour\", step: 1, approxMs: HOUR },\n  { unit: \"hour\", step: 3, approxMs: 3 * HOUR },\n  { unit: \"hour\", step: 6, approxMs: 6 * HOUR },\n  { unit: \"hour\", step: 12, approxMs: 12 * HOUR },\n  { unit: \"day\", step: 1, approxMs: DAY },\n  { unit: \"day\", step: 2, approxMs: 2 * DAY },\n  { unit: \"week\", step: 1, approxMs: WEEK },\n  { unit: \"week\", step: 2, approxMs: 2 * WEEK },\n  { unit: \"month\", step: 1, approxMs: APPROX_MONTH },\n  { unit: \"month\", step: 3, approxMs: 3 * APPROX_MONTH },\n  { unit: \"month\", step: 6, approxMs: 6 * APPROX_MONTH },\n  { unit: \"year\", step: 1, approxMs: APPROX_YEAR },\n  { unit: \"year\", step: 2, approxMs: 2 * APPROX_YEAR },\n  { unit: \"year\", step: 5, approxMs: 5 * APPROX_YEAR },\n  { unit: \"year\", step: 10, approxMs: 10 * APPROX_YEAR },\n  { unit: \"year\", step: 25, approxMs: 25 * APPROX_YEAR },\n  { unit: \"year\", step: 50, approxMs: 50 * APPROX_YEAR },\n  { unit: \"year\", step: 100, approxMs: 100 * APPROX_YEAR }\n];\nconst DEFAULT_TICK_COUNT = 10;\nclass TimeScale {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.tickInterval = null;\n    this.timeScaleArray = [];\n    this.utc = w.config.xaxis.labels.datetimeUTC;\n  }\n  /**\n   * Compute raw ticks for a datetime axis spanning [minX, maxX]. Single\n   * uniform stride — one unit, no promotion, no calendar-boundary overlay.\n   * Context (year, day) is folded into each label's format string at\n   * `formatDates` time, not split across promoted ticks.\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @returns {Array<any>} raw ticks (pre-formatting). Pass to recalcDimensionsBasedOnFormat for the final timescaleLabels.\n   */\n  calculateTimeScaleTicks(minX, maxX) {\n    const w = this.w;\n    if (w.globals.allSeriesCollapsed) {\n      w.labelData.labels = [];\n      w.labelData.timescaleLabels = [];\n      this.timeScaleArray = [];\n      return [];\n    }\n    const span = maxX - minX;\n    const daysDiff = span / DAY;\n    w.interact.disableZoomIn = false;\n    w.interact.disableZoomOut = false;\n    if (daysDiff < MIN_ZOOM_DAYS) {\n      w.interact.disableZoomIn = true;\n    } else if (daysDiff > 5e4) {\n      w.interact.disableZoomOut = true;\n    }\n    const targetCount = Number.isFinite(w.config.xaxis.tickAmount) ? (\n      /** @type {number} */\n      w.config.xaxis.tickAmount\n    ) : DEFAULT_TICK_COUNT;\n    this.tickInterval = pickInterval(span, targetCount);\n    const ticks = this.generateBaseTicks(minX, maxX, this.tickInterval);\n    this.timeScaleArray = ticks;\n    return ticks;\n  }\n  /**\n   * Walk the interval stride from `minX` to `maxX`. Every tick carries\n   * `unit: interval.unit` — no promotion, no snapping. Uniform spacing is\n   * guaranteed.\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @param {{ unit: string, step: number }} interval\n   * @returns {Array<any>}\n   */\n  generateBaseTicks(minX, maxX, interval) {\n    const w = this.w;\n    const dt = new DateTime(w);\n    const isUTC = this.utc;\n    const gridWidth = w.layout.gridWidth;\n    const span = maxX - minX;\n    const ticks = [];\n    let t = dt.ceilToBoundary(\n      minX,\n      /** @type {any} */\n      interval.unit,\n      interval.step,\n      isUTC\n    );\n    let iter = 0;\n    const MAX_ITER = 5e3;\n    while (t <= maxX && iter < MAX_ITER) {\n      const f = dt.getDateFields(t, isUTC);\n      const position = span > 0 ? (t - minX) / span * gridWidth : 0;\n      ticks.push({\n        timestamp: t,\n        position,\n        unit: interval.unit,\n        year: f.year,\n        month: f.month + 1,\n        day: f.date,\n        hour: f.hour,\n        minute: f.minute,\n        second: f.second,\n        value: t\n      });\n      t = dt.addInterval(\n        t,\n        /** @type {any} */\n        interval.unit,\n        interval.step,\n        isUTC\n      );\n      iter++;\n    }\n    return ticks;\n  }\n  /**\n   * Public entry called from Core.js after calculateTimeScaleTicks. Formats\n   * the raw ticks into display labels, removes overlapping entries, writes\n   * the result to `w.labelData.timescaleLabels`, and re-runs Dimensions to\n   * lay out the grid based on the final label widths.\n   *\n   * @param {Array<any>} rawTicks\n   */\n  recalcDimensionsBasedOnFormat(rawTicks) {\n    const w = this.w;\n    const formatted = this.formatDates(rawTicks);\n    const filtered = this.removeOverlappingTS(formatted);\n    w.labelData.timescaleLabels = filtered.slice();\n    const dimensions = new Dimensions(this.w, this.ctx);\n    const layoutState = dimensions.plotCoords();\n    this.ctx._writeLayoutCoords(layoutState.layout);\n  }\n  /**\n   * Format each raw tick into a display label. All ticks share one\n   * effective format computed once from the interval unit and the data\n   * range — when the range spans coarser units, the base format from\n   * `datetimeFormatter[unit]` is automatically extended with the higher-\n   * unit context (e.g. month-scale spanning years → `MMM yyyy`, hour-scale\n   * spanning days → `dd MMM HH:mm`). A user-supplied `xaxis.labels.format`\n   * overrides everything.\n   *\n   * @param {Array<any>} rawTicks\n   * @returns {Array<any>}\n   */\n  formatDates(rawTicks) {\n    const w = this.w;\n    const dt = new DateTime(w);\n    const userFormat = w.config.xaxis.labels.format;\n    const dtFmt = w.config.xaxis.labels.datetimeFormatter;\n    const isUTC = this.utc;\n    const pad = (n, len = 2) => String(n).padStart(len, \"0\");\n    const effectiveFormat = userFormat ? userFormat : this._effectiveFormat(rawTicks, dtFmt);\n    return rawTicks.map((tick) => {\n      const date = dt.getDate(tick.timestamp);\n      const value = dt.formatDate(date, effectiveFormat);\n      const ds = `${tick.year}-${pad(tick.month)}-${pad(tick.day)}T${pad(tick.hour)}:${pad(tick.minute)}:${pad(tick.second)}.000${isUTC ? \"Z\" : \"\"}`;\n      return {\n        dateString: ds,\n        position: tick.position,\n        value,\n        unit: tick.unit,\n        year: tick.year,\n        month: tick.month\n      };\n    });\n  }\n  /**\n   * Pick the format string used for every tick this render. Folds coarser\n   * context into the base `datetimeFormatter[unit]` when the data range\n   * spans it. Skipped when the base format already references the higher\n   * unit's tokens (so user customizations aren't doubled).\n   *\n   * @param {Array<any>} rawTicks\n   * @param {Record<string, string>} dtFmt\n   * @returns {string}\n   */\n  _effectiveFormat(rawTicks, dtFmt) {\n    if (rawTicks.length === 0) return dtFmt.day || \"dd MMM\";\n    const unit = this.tickInterval && this.tickInterval.unit || rawTicks[0].unit;\n    const base = dtFmt[unit === \"week\" ? \"day\" : unit] || dtFmt.day || \"dd MMM\";\n    const first = rawTicks[0];\n    const last = rawTicks[rawTicks.length - 1];\n    const spansYears = first.year !== last.year;\n    const spansMonths = spansYears || first.month !== last.month;\n    const spansDays = spansMonths || first.day !== last.day;\n    const hasYearToken = /y/i.test(base);\n    const hasMonthToken = /M/.test(base);\n    const hasDayToken = /d/i.test(base);\n    if (unit === \"month\" || unit === \"week\") {\n      if (spansYears && !hasYearToken) return base + \" yyyy\";\n      return base;\n    }\n    if (unit === \"day\") {\n      if (spansYears && !hasYearToken) return base + \" yyyy\";\n      return base;\n    }\n    if (unit === \"hour\" || unit === \"minute\" || unit === \"second\") {\n      if (spansDays && !hasDayToken && !hasMonthToken) {\n        const prefix = spansYears ? \"dd MMM yyyy\" : \"dd MMM\";\n        return prefix + \" \" + base;\n      }\n      return base;\n    }\n    return base;\n  }\n  /**\n   * Drop labels that would overlap their predecessor (when\n   * `xaxis.labels.hideOverlappingLabels` is true). The first label is always\n   * kept. Width is measured per-label unless all labels have the same string\n   * length, in which case one measurement is reused.\n   *\n   * @param {Array<any>} arr\n   * @returns {Array<any>}\n   */\n  removeOverlappingTS(arr) {\n    if (arr.length === 0) return [];\n    const w = this.w;\n    const graphics = new Graphics(w);\n    let equalLabelLengthFlag = false;\n    let constantLabelWidth;\n    if (arr[0].value && arr.every((lb) => lb.value.length === arr[0].value.length)) {\n      equalLabelLengthFlag = true;\n      constantLabelWidth = graphics.getTextRects(\n        arr[0].value,\n        w.config.xaxis.labels.style.fontSize\n      ).width;\n    }\n    let lastDrawnIndex = 0;\n    const filtered = arr.map((item, index) => {\n      if (index === 0) return item;\n      if (!w.config.xaxis.labels.hideOverlappingLabels) return item;\n      const prevLabelWidth = equalLabelLengthFlag ? (\n        /** @type {number} */\n        constantLabelWidth\n      ) : graphics.getTextRects(\n        arr[lastDrawnIndex].value,\n        w.config.xaxis.labels.style.fontSize\n      ).width;\n      const prevPos = arr[lastDrawnIndex].position;\n      const pos = item.position;\n      if (pos > prevPos + prevLabelWidth + 10) {\n        lastDrawnIndex = index;\n        return item;\n      }\n      return null;\n    }).filter((f) => f !== null);\n    return filtered;\n  }\n}\nfunction pickInterval(span, targetCount) {\n  if (!Number.isFinite(targetCount) || targetCount <= 0) {\n    targetCount = DEFAULT_TICK_COUNT;\n  }\n  if (span <= 0) return TICK_LADDER[0];\n  const targetMs = span / targetCount;\n  let best = TICK_LADDER[0];\n  let bestDist = Infinity;\n  for (const interval of TICK_LADDER) {\n    const dist = Math.abs(Math.log(interval.approxMs / targetMs));\n    if (dist < bestDist) {\n      bestDist = dist;\n      best = interval;\n    }\n  }\n  return best;\n}\nconst REGISTRY_KEY$2 = \"__apexcharts_registry__\";\nconst CUSTOM_KEY = \"__apexcharts_custom_types__\";\nif (!/** @type {any} */\nglobalThis[REGISTRY_KEY$2]) {\n  globalThis[REGISTRY_KEY$2] = {};\n}\nif (!/** @type {any} */\nglobalThis[CUSTOM_KEY]) {\n  globalThis[CUSTOM_KEY] = /* @__PURE__ */ new Set();\n}\nfunction getRegistry$1() {\n  return (\n    /** @type {any} */\n    globalThis[REGISTRY_KEY$2]\n  );\n}\nfunction getCustomTypes() {\n  return (\n    /** @type {any} */\n    globalThis[CUSTOM_KEY]\n  );\n}\nfunction markCustom(name2) {\n  getCustomTypes().add(name2);\n}\nfunction isCustom(name2) {\n  return getCustomTypes().has(name2);\n}\nfunction hasChartClass(type) {\n  return !!getRegistry$1()[type];\n}\nfunction unregister(name2) {\n  delete getRegistry$1()[name2];\n  getCustomTypes().delete(name2);\n}\nfunction register(typeMap) {\n  Object.assign(getRegistry$1(), typeMap);\n}\nfunction getChartClass(type) {\n  const Cls = getRegistry$1()[type];\n  if (!Cls) {\n    throw new Error(\n      `ApexCharts: chart type \"${type}\" is not registered. Import it via ApexCharts.use() or use the full apexcharts bundle.`\n    );\n  }\n  return Cls;\n}\nclass Core {\n  /**\n   * @param {Element} el\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(el, w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.el = el;\n  }\n  setupElements() {\n    const { globals: gl, config: cnf } = this.w;\n    const ct = cnf.chart.type;\n    const xyChartsArrTypes = [\n      \"line\",\n      \"area\",\n      \"bar\",\n      \"rangeBar\",\n      \"rangeArea\",\n      \"candlestick\",\n      \"boxPlot\",\n      \"violin\",\n      \"scatter\",\n      \"bubble\"\n    ];\n    const axisChartsArrTypes = [\n      ...xyChartsArrTypes,\n      \"radar\",\n      \"heatmap\",\n      \"treemap\"\n    ];\n    const isCustomType = !axisChartsArrTypes.includes(ct) && ![\"pie\", \"donut\", \"polarArea\", \"radialBar\"].includes(ct) && isCustom(ct);\n    gl.axisCharts = axisChartsArrTypes.includes(ct) || isCustomType;\n    gl.xyCharts = xyChartsArrTypes.includes(ct) || isCustomType;\n    gl.isBarHorizontal = [\"bar\", \"rangeBar\", \"boxPlot\", \"violin\"].includes(ct) && cnf.plotOptions.bar.horizontal;\n    gl.chartClass = `.apexcharts${gl.chartID}`;\n    this.w.dom.baseEl = this.el;\n    this.w.dom.elWrap = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    Graphics.setAttrs(this.w.dom.elWrap, {\n      id: gl.chartClass.substring(1),\n      class: `apexcharts-canvas ${gl.chartClass.substring(1)}`\n    });\n    this.el.appendChild(this.w.dom.elWrap);\n    const SVG2 = (\n      /** @type {any} */\n      globalThis.SVG\n    );\n    this.w.dom.Paper = SVG2().addTo(this.w.dom.elWrap);\n    this.w.dom.Paper.attr({\n      class: \"apexcharts-svg\",\n      \"xmlns:data\": \"ApexChartsNS\",\n      transform: `translate(${cnf.chart.offsetX}, ${cnf.chart.offsetY})`\n    });\n    this.w.dom.Paper.node.style.background = cnf.theme.mode === \"dark\" && !cnf.chart.background ? \"#343A3F\" : cnf.theme.mode === \"light\" && !cnf.chart.background ? \"#fff\" : cnf.chart.background;\n    this.setSVGDimensions();\n    this.w.dom.elLegendForeign = BrowserAPIs.createElementNS(\n      SVGNS$2,\n      \"foreignObject\"\n    );\n    Graphics.setAttrs(this.w.dom.elLegendForeign, {\n      x: 0,\n      y: 0,\n      width: gl.svgWidth,\n      height: gl.svgHeight\n    });\n    this.w.dom.elLegendWrap = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    this.w.dom.elLegendWrap.classList.add(\"apexcharts-legend\");\n    this.w.dom.elWrap.appendChild(this.w.dom.elLegendWrap);\n    this.w.dom.Paper.node.appendChild(this.w.dom.elLegendForeign);\n    if (cnf.chart.accessibility.enabled && cnf.chart.accessibility.announcements.enabled) {\n      const srStatus = BrowserAPIs.createElement(\"div\");\n      srStatus.className = \"apexcharts-sr-status\";\n      srStatus.setAttribute(\"role\", \"status\");\n      srStatus.setAttribute(\"aria-live\", \"polite\");\n      srStatus.setAttribute(\"aria-atomic\", \"true\");\n      this.w.dom.elWrap.appendChild(srStatus);\n    }\n    if (cnf.chart.accessibility.enabled) {\n      const ariaLabel = this.getAccessibleChartLabel();\n      const svgRole = cnf.chart.accessibility.keyboard.enabled && cnf.chart.accessibility.keyboard.navigation.enabled ? \"application\" : \"img\";\n      this.w.dom.Paper.attr({\n        role: svgRole,\n        \"aria-label\": ariaLabel\n      });\n      if (cnf.chart.accessibility.description) {\n        const descEl = BrowserAPIs.createElementNS(SVGNS$2, \"desc\");\n        descEl.textContent = cnf.chart.accessibility.description;\n        this.w.dom.Paper.node.insertBefore(\n          descEl,\n          this.w.dom.elLegendForeign.nextSibling\n        );\n      }\n    }\n    this.w.dom.elGraphical = this.w.dom.Paper.group().attr({\n      class: \"apexcharts-inner apexcharts-graphical\"\n    });\n    this.w.dom.elDefs = this.w.dom.Paper.defs();\n    this.w.dom.Paper.add(this.w.dom.elGraphical);\n    this.w.dom.elGraphical.add(this.w.dom.elDefs);\n  }\n  /**\n   * Classify each series by its resolved chart type into per-type render\n   * buckets (`{ series, i }`, plus `seriesRangeEnd` for rangeArea). Side\n   * effects mirror the original inline code: sets `w.globals.columnSeries`,\n   * folds `w.globals.comboCharts`, and warns on unsupported combinations (a\n   * non-combo type mixed in, or horizontal bars in a combo). Extracted from\n   * plotChartType to shrink it (audit C2).\n   * @param {any[]} ser\n   * @returns {{ seriesTypes: Record<string, any>, customBuckets: Record<string, {series: any[], i: number[]}> }}\n   */\n  _classifySeriesByType(ser) {\n    const { w } = this;\n    const { config: cnf, globals: gl } = w;\n    const seriesTypes = {\n      line: { series: [], i: [] },\n      area: { series: [], i: [] },\n      scatter: { series: [], i: [] },\n      bubble: { series: [], i: [] },\n      bar: { series: [], i: [] },\n      candlestick: { series: [], i: [] },\n      boxPlot: { series: [], i: [] },\n      violin: { series: [], i: [] },\n      rangeBar: { series: [], i: [] },\n      rangeArea: { series: [], seriesRangeEnd: [], i: [] }\n    };\n    const customBuckets = {};\n    const chartType = cnf.chart.type || \"line\";\n    let nonComboType = null;\n    let comboCount = 0;\n    this.w.seriesData.series.forEach((serie, st) => {\n      var _a, _b;\n      const seriesType = ((_a = ser[st]) == null ? void 0 : _a.type) === \"column\" ? \"bar\" : ((_b = ser[st]) == null ? void 0 : _b.type) || (chartType === \"column\" ? \"bar\" : chartType);\n      const st_ = (\n        /** @type {Record<string,any>} */\n        seriesTypes\n      );\n      if (st_[seriesType]) {\n        if (seriesType === \"rangeArea\") {\n          st_[seriesType].series.push(this.w.rangeData.seriesRangeStart[st]);\n          st_[seriesType].seriesRangeEnd.push(\n            this.w.rangeData.seriesRangeEnd[st]\n          );\n        } else {\n          st_[seriesType].series.push(serie);\n        }\n        st_[seriesType].i.push(st);\n        if (seriesType === \"bar\") w.globals.columnSeries = seriesTypes.bar;\n      } else if ([\n        \"heatmap\",\n        \"treemap\",\n        \"pie\",\n        \"donut\",\n        \"polarArea\",\n        \"radialBar\",\n        \"radar\",\n        \"unit\",\n        \"sunburst\"\n      ].includes(seriesType)) {\n        nonComboType = seriesType;\n      } else if (isCustom(seriesType)) {\n        if (!customBuckets[seriesType]) {\n          customBuckets[seriesType] = { series: [], i: [] };\n        }\n        customBuckets[seriesType].series.push(serie);\n        customBuckets[seriesType].i.push(st);\n      } else {\n        console.warn(\n          `You have specified an unrecognized series type (${seriesType}).`\n        );\n      }\n      if (chartType !== seriesType && seriesType !== \"scatter\") comboCount++;\n    });\n    if (comboCount > 0) {\n      if (nonComboType) {\n        console.warn(\n          `Chart or series type ${nonComboType} cannot appear with other chart or series types.`\n        );\n      }\n      if (seriesTypes.bar.series.length > 0 && cnf.plotOptions.bar.horizontal) {\n        comboCount -= seriesTypes.bar.series.length;\n        seriesTypes.bar = { series: [], i: [] };\n        w.globals.columnSeries = { series: [], i: [] };\n        console.warn(\n          \"Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`\"\n        );\n      }\n    }\n    gl.comboCharts || (gl.comboCharts = comboCount > 0);\n    return { seriesTypes, customBuckets };\n  }\n  /**\n   * @param {any[]} ser\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  plotChartType(ser, xyRatios) {\n    const { w, ctx } = this;\n    const canvasMode = ctx.renderer && ctx.renderer.kind === \"canvas\";\n    if (canvasMode) ctx.renderer.beginSeries();\n    const { seriesTypes, customBuckets } = this._classifySeriesByType(ser);\n    const renderers = this._instantiateSeriesRenderers(seriesTypes, xyRatios);\n    const elGraph = this._assembleSeriesGraphics(\n      seriesTypes,\n      customBuckets,\n      renderers,\n      xyRatios\n    );\n    if (canvasMode) {\n      const rr = (\n        /** @type {any} */\n        ctx.renderer\n      );\n      if (rr && rr._repaintHostInPlace) {\n        rr._repaintHostInPlace = false;\n        const wrapNode = this.w.dom.elGraphical.node.querySelector(\n          \".apexcharts-canvas-series-wrap\"\n        );\n        if (wrapNode && rr.canRepaintInPlace && rr.canRepaintInPlace()) {\n          rr.repaintInPlace();\n          const groups = Array.isArray(elGraph) ? elGraph : [elGraph];\n          groups.forEach((g) => {\n            if (g && g.node) wrapNode.appendChild(g.node);\n          });\n          return [];\n        }\n      }\n      const host = ctx.renderer.present();\n      if (host) {\n        const wrap = new Graphics(w).group({\n          class: \"apexcharts-canvas-series-wrap\"\n        });\n        wrap.add(host);\n        const groups = Array.isArray(elGraph) ? elGraph : [elGraph];\n        groups.forEach((g) => {\n          if (g) wrap.add(g);\n        });\n        return wrap;\n      }\n    }\n    return elGraph;\n  }\n  /**\n   * Lazily instantiate the shared series renderers the orchestration below\n   * needs. getChartClass() is only called for types actually present, so a page\n   * that registers just 'line' never triggers a lookup for 'candlestick' etc.\n   * (tree-shaking). Returns the line/candlestick/violin renderers and sets\n   * ctx.pie / ctx.rangeBar as a side effect (both may be null). Extracted from\n   * plotChartType (audit C2).\n   * @param {Record<string, any>} seriesTypes\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @returns {{ line: any, boxCandlestick: any, violin: any }}\n   */\n  _instantiateSeriesRenderers(seriesTypes, xyRatios) {\n    const { w, ctx } = this;\n    const { config: cnf, globals: gl } = w;\n    const needsLine = seriesTypes.line.series.length > 0 || seriesTypes.area.series.length > 0 || seriesTypes.scatter.series.length > 0 || seriesTypes.bubble.series.length > 0 || seriesTypes.rangeArea.series.length > 0 || !gl.comboCharts && [\"line\", \"area\", \"scatter\", \"bubble\", \"rangeArea\"].includes(\n      cnf.chart.type\n    );\n    const line = needsLine ? new (getChartClass(\"line\"))(ctx.w, ctx, xyRatios) : null;\n    const needsCandlestick = seriesTypes.candlestick.series.length > 0 || seriesTypes.boxPlot.series.length > 0 || !gl.comboCharts && [\"candlestick\", \"boxPlot\"].includes(cnf.chart.type);\n    const boxCandlestick = needsCandlestick ? new (getChartClass(\"candlestick\"))(ctx.w, ctx, xyRatios) : null;\n    const needsViolin = seriesTypes.violin.series.length > 0 || !gl.comboCharts && cnf.chart.type === \"violin\";\n    const violin = needsViolin ? new (getChartClass(\"violin\"))(ctx.w, ctx, xyRatios) : null;\n    const needsPie = !gl.comboCharts && [\"pie\", \"donut\", \"polarArea\"].includes(cnf.chart.type);\n    ctx.pie = needsPie ? new (getChartClass(\"pie\"))(ctx.w, ctx) : null;\n    const needsRangeBar = seriesTypes.rangeBar.series.length > 0 || !gl.comboCharts && cnf.chart.type === \"rangeBar\";\n    ctx.rangeBar = needsRangeBar ? new (getChartClass(\"rangeBar\"))(ctx.w, ctx, xyRatios) : null;\n    return { line, boxCandlestick, violin };\n  }\n  /**\n   * Build the ordered list of series graphic groups (elGraph) from the\n   * classified buckets. Combo charts layer per-type draws in z-order; a\n   * single-type chart dispatches on cnf.chart.type. Sets ctx.bar for the\n   * non-stacked bar paths (side effect, preserved). Extracted from\n   * plotChartType (audit C2).\n   * @param {Record<string, any>} seriesTypes\n   * @param {Record<string, {series: any[], i: number[]}>} customBuckets\n   * @param {{ line: any, boxCandlestick: any, violin: any }} renderers\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @returns {any}\n   */\n  _assembleSeriesGraphics(seriesTypes, customBuckets, renderers, xyRatios) {\n    const { w, ctx } = this;\n    const { config: cnf, globals: gl } = w;\n    const { line, boxCandlestick, violin } = renderers;\n    let elGraph = [];\n    if (gl.comboCharts) {\n      const coreUtils = new CoreUtils(this.w);\n      if (seriesTypes.area.series.length > 0) {\n        elGraph.push(\n          ...coreUtils.drawSeriesByGroup(\n            seriesTypes.area,\n            gl.areaGroups,\n            \"area\",\n            line\n          )\n        );\n      }\n      if (seriesTypes.bar.series.length > 0) {\n        if (cnf.chart.stacked) {\n          const barStacked = new (getChartClass(\"barStacked\"))(\n            ctx.w,\n            ctx,\n            xyRatios\n          );\n          elGraph.push(\n            barStacked.draw(seriesTypes.bar.series, seriesTypes.bar.i)\n          );\n        } else {\n          ctx.bar = new (getChartClass(\"bar\"))(ctx.w, ctx, xyRatios);\n          elGraph.push(ctx.bar.draw(seriesTypes.bar.series, seriesTypes.bar.i));\n        }\n      }\n      if (seriesTypes.rangeArea.series.length > 0) {\n        elGraph.push(\n          line.draw(\n            seriesTypes.rangeArea.series,\n            \"rangeArea\",\n            seriesTypes.rangeArea.i,\n            seriesTypes.rangeArea.seriesRangeEnd\n          )\n        );\n      }\n      if (seriesTypes.line.series.length > 0) {\n        elGraph.push(\n          ...coreUtils.drawSeriesByGroup(\n            seriesTypes.line,\n            gl.lineGroups,\n            \"line\",\n            line\n          )\n        );\n      }\n      if (seriesTypes.candlestick.series.length > 0) {\n        elGraph.push(\n          boxCandlestick.draw(\n            seriesTypes.candlestick.series,\n            \"candlestick\",\n            seriesTypes.candlestick.i\n          )\n        );\n      }\n      if (seriesTypes.boxPlot.series.length > 0) {\n        elGraph.push(\n          boxCandlestick.draw(\n            seriesTypes.boxPlot.series,\n            \"boxPlot\",\n            seriesTypes.boxPlot.i\n          )\n        );\n      }\n      if (seriesTypes.violin.series.length > 0) {\n        elGraph.push(\n          violin.draw(seriesTypes.violin.series, \"violin\", seriesTypes.violin.i)\n        );\n      }\n      if (seriesTypes.rangeBar.series.length > 0) {\n        elGraph.push(\n          ctx.rangeBar.draw(\n            seriesTypes.rangeBar.series,\n            seriesTypes.rangeBar.i\n          )\n        );\n      }\n      if (seriesTypes.scatter.series.length > 0) {\n        const scatterLine = new (getChartClass(\"line\"))(\n          ctx.w,\n          ctx,\n          xyRatios,\n          true\n        );\n        elGraph.push(\n          scatterLine.draw(\n            seriesTypes.scatter.series,\n            \"scatter\",\n            seriesTypes.scatter.i\n          )\n        );\n      }\n      if (seriesTypes.bubble.series.length > 0) {\n        const bubbleLine = new (getChartClass(\"line\"))(\n          ctx.w,\n          ctx,\n          xyRatios,\n          true\n        );\n        elGraph.push(\n          bubbleLine.draw(\n            seriesTypes.bubble.series,\n            \"bubble\",\n            seriesTypes.bubble.i\n          )\n        );\n      }\n      Object.keys(customBuckets).forEach((cname) => {\n        const bucket = customBuckets[cname];\n        if (bucket.series.length > 0) {\n          const cs = new (getChartClass(cname))(ctx.w, ctx, xyRatios);\n          elGraph.push(cs.draw(bucket.series, cname, bucket.i));\n        }\n      });\n    } else {\n      const type = cnf.chart.type;\n      switch (type) {\n        case \"line\":\n          elGraph = line.draw(this.w.seriesData.series, \"line\");\n          break;\n        case \"area\":\n          elGraph = line.draw(this.w.seriesData.series, \"area\");\n          break;\n        case \"bar\":\n          if (cnf.chart.stacked) {\n            const barStacked = new (getChartClass(\"barStacked\"))(\n              ctx.w,\n              ctx,\n              xyRatios\n            );\n            elGraph = barStacked.draw(this.w.seriesData.series);\n          } else {\n            ctx.bar = new (getChartClass(\"bar\"))(ctx.w, ctx, xyRatios);\n            elGraph = ctx.bar.draw(this.w.seriesData.series);\n          }\n          break;\n        case \"candlestick\":\n          elGraph = boxCandlestick.draw(this.w.seriesData.series, \"candlestick\");\n          break;\n        case \"boxPlot\":\n          elGraph = boxCandlestick.draw(this.w.seriesData.series, type);\n          break;\n        case \"violin\":\n          elGraph = violin.draw(this.w.seriesData.series, \"violin\");\n          break;\n        case \"rangeBar\":\n          elGraph = ctx.rangeBar.draw(this.w.seriesData.series);\n          break;\n        case \"rangeArea\":\n          elGraph = line.draw(\n            this.w.rangeData.seriesRangeStart,\n            \"rangeArea\",\n            void 0,\n            this.w.rangeData.seriesRangeEnd\n          );\n          break;\n        case \"heatmap\": {\n          const heatmap = new (getChartClass(\"heatmap\"))(ctx.w, ctx, xyRatios);\n          elGraph = heatmap.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"treemap\": {\n          const treemap = new (getChartClass(\"treemap\"))(ctx.w, ctx);\n          elGraph = treemap.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"unit\": {\n          const unit = new (getChartClass(\"unit\"))(ctx.w, ctx);\n          elGraph = unit.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"sunburst\": {\n          const sunburst = new (getChartClass(\"sunburst\"))(ctx.w, ctx);\n          elGraph = sunburst.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"pie\":\n        case \"donut\":\n        case \"polarArea\":\n          elGraph = ctx.pie.draw(this.w.seriesData.series);\n          break;\n        case \"radialBar\": {\n          const radialBar = new (getChartClass(\"radialBar\"))(ctx.w, ctx);\n          elGraph = radialBar.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"radar\": {\n          const radar = new (getChartClass(\"radar\"))(ctx.w, ctx);\n          elGraph = radar.draw(this.w.seriesData.series);\n          break;\n        }\n        default:\n          if (isCustom(type)) {\n            const cs = new (getChartClass(type))(ctx.w, ctx, xyRatios);\n            elGraph = cs.draw(this.w.seriesData.series, type);\n          } else {\n            elGraph = line.draw(this.w.seriesData.series);\n          }\n      }\n    }\n    return elGraph;\n  }\n  /**\n   * Extract the CSS unit suffix from a chart width/height config value\n   * (`'100%'` -> `'%'`, `'300px'` -> `'px'`, `300`/`'300'` -> `''`). Kept as the\n   * original digit-split idiom so results are identical for every input the\n   * call sites already handle ('%', 'px', '', 'auto').\n   * @param {string|number} value\n   * @returns {string|undefined}\n   */\n  _extractDimensionUnit(value) {\n    return String(value).split(/[0-9]+/g).pop();\n  }\n  setSVGDimensions() {\n    var _a;\n    const { globals: gl, config: cnf } = this.w;\n    cnf.chart.width = cnf.chart.width || \"100%\";\n    cnf.chart.height = cnf.chart.height || \"auto\";\n    const rawWidth = cnf.chart.width;\n    const rawHeight = cnf.chart.height;\n    gl.svgWidth = NaN;\n    gl.svgHeight = NaN;\n    let elDim = Utils$1.getDimensions(this.el);\n    const widthUnit = this._extractDimensionUnit(rawWidth);\n    if (widthUnit === \"%\") {\n      if (Utils$1.isNumber(elDim[0])) {\n        if (elDim[0].width === 0) {\n          elDim = Utils$1.getDimensions(this.el.parentNode);\n        }\n        gl.svgWidth = elDim[0] * parseInt(rawWidth, 10) / 100;\n      }\n    } else if (widthUnit === \"px\" || widthUnit === \"\") {\n      gl.svgWidth = parseInt(rawWidth, 10);\n    }\n    const heightUnit = this._extractDimensionUnit(rawHeight);\n    if (rawHeight !== \"auto\" && rawHeight !== \"\") {\n      if (heightUnit === \"%\") {\n        const elParentDim = Utils$1.getDimensions(this.el.parentNode);\n        gl.svgHeight = elParentDim[1] * parseInt(rawHeight, 10) / 100;\n      } else {\n        gl.svgHeight = parseInt(rawHeight, 10);\n      }\n    } else {\n      gl.svgHeight = gl.axisCharts ? gl.svgWidth / 1.61 : gl.svgWidth / 1.2;\n    }\n    gl.svgWidth = Math.max(gl.svgWidth, 0);\n    gl.svgHeight = Math.max(gl.svgHeight, 0);\n    Graphics.setAttrs(this.w.dom.Paper.node, {\n      width: gl.svgWidth,\n      height: gl.svgHeight\n    });\n    if (heightUnit !== \"%\" && Environment.isBrowser()) {\n      const needsAxisPadding = gl.axisCharts && (cnf.grid.show || cnf.dataLabels.enabled || cnf.xaxis.labels.show || cnf.xaxis.axisBorder.show || cnf.xaxis.axisTicks.show || cnf.yaxis.some(\n        (y) => y.show && (y.labels.show || y.axisBorder.show || y.axisTicks.show)\n      ));\n      const offsetY = cnf.chart.sparkline.enabled || !needsAxisPadding ? 0 : cnf.chart.parentHeightOffset;\n      const paperNode = this.w.dom.Paper.node;\n      if ((_a = paperNode.parentNode) == null ? void 0 : _a.parentNode) {\n        paperNode.parentNode.parentNode.style.minHeight = `${gl.svgHeight + offsetY}px`;\n      }\n    }\n    this.w.dom.elWrap.style.width = `${gl.svgWidth}px`;\n    this.w.dom.elWrap.style.height = `${gl.svgHeight}px`;\n    gl.lastResizeSignature = this.getResizeSignature();\n  }\n  /**\n   * A stable fingerprint of the container measurements that actually feed the\n   * chart's rendered dimensions, given the width/height config. Only inputs that\n   * a resize can change are included: the element width when the width is a\n   * percentage, and the parent height when the height is a percentage. A fully\n   * pixel-sized chart therefore has a constant signature, so a resize never\n   * forces a redraw; a percentage-sized chart's signature tracks the container.\n   * The window-resize handler compares this against the last render to skip\n   * redraws (and the entrance-animation teardown they cause) that aren't needed.\n   * @returns {{ w: number, h: number }}\n   */\n  getResizeSignature() {\n    const { config: cnf } = this.w;\n    const rawWidth = (cnf.chart.width || \"100%\").toString().trim();\n    const rawHeight = (cnf.chart.height || \"auto\").toString().trim();\n    let w = 0;\n    let h = 0;\n    if (rawWidth.endsWith(\"%\")) {\n      let elDim = Utils$1.getDimensions(this.el);\n      if (!elDim[0]) elDim = Utils$1.getDimensions(this.el.parentNode);\n      w = elDim[0] || 0;\n    }\n    if (rawHeight.endsWith(\"%\")) {\n      h = Utils$1.getDimensions(this.el.parentNode)[1] || 0;\n    }\n    const sig = { w: Math.round(w), h: Math.round(h) };\n    if (cnf.responsive && cnf.responsive.length && Environment.isBrowser()) {\n      sig.iw = window.innerWidth;\n    }\n    return sig;\n  }\n  shiftGraphPosition() {\n    const { globals: gl } = this.w;\n    const { translateY: tY, translateX: tX } = gl;\n    Graphics.setAttrs(this.w.dom.elGraphical.node, {\n      transform: `translate(${tX}, ${tY})`\n    });\n  }\n  resizeNonAxisCharts() {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const { w } = this;\n    const heightStr = w.config.chart.height ? String(w.config.chart.height) : \"\";\n    const userSetFixedHeight = heightStr !== \"\" && heightStr !== \"auto\";\n    const isPercentHeight = heightStr.includes(\"%\");\n    let legendHeight = 0;\n    let offY = w.config.chart.sparkline.enabled ? 1 : 15;\n    offY += w.layout.gridPad.bottom;\n    if ([\"top\", \"bottom\"].includes(w.config.legend.position) && w.config.legend.show && !w.config.legend.floating) {\n      legendHeight = ((_b = (_a = this.ctx.legend) == null ? void 0 : _a.legendHelpers.getLegendDimensions().clwh) != null ? _b : 0) + 7;\n    }\n    const el = w.dom.baseEl.querySelector(\n      \".apexcharts-radialbar, .apexcharts-pie, .apexcharts-sunburst\"\n    );\n    const externalLabelMarginY = w.globals.pieExternalLabelMarginY || 0;\n    let chartInnerDimensions = externalLabelMarginY > 0 ? w.globals.radialSize * 2 + externalLabelMarginY * 2 : w.globals.radialSize * 2.05;\n    const angleType = w.config.chart.type === \"sunburst\" ? \"sunburst\" : w.config.chart.type === \"pie\" || w.config.chart.type === \"donut\" || w.config.chart.type === \"polarArea\" ? \"pie\" : \"radialBar\";\n    const radialAngleSpan = Math.abs(\n      w.config.plotOptions[angleType].endAngle - w.config.plotOptions[angleType].startAngle\n    );\n    if (el && !w.config.chart.sparkline.enabled && radialAngleSpan < 360) {\n      const svgRect = Utils$1.getBoundingClientRect(this.w.dom.Paper.node);\n      let arcTopFromSVGTop = Infinity;\n      let arcBottomFromSVGTop = -Infinity;\n      const accumulate = (node) => {\n        var _a2, _b2, _c2, _d2;\n        if ((_a2 = node.classList) == null ? void 0 : _a2.contains(\"apexcharts-radialbar-hollow\")) {\n          return;\n        }\n        const tag = (_c2 = (_b2 = node.tagName) == null ? void 0 : _b2.toLowerCase) == null ? void 0 : _c2.call(_b2);\n        if (tag === \"text\" || tag === \"tspan\") return;\n        const children = Array.from((_d2 = node.children) != null ? _d2 : []);\n        if (children.length > 0) {\n          children.forEach((c) => accumulate(\n            /** @type {Element} */\n            c\n          ));\n          return;\n        }\n        const r = Utils$1.getBoundingClientRect(node);\n        const height = r.bottom - r.top;\n        if (height > 0) {\n          const top = r.top - svgRect.top;\n          const bottom = r.bottom - svgRect.top;\n          if (top < arcTopFromSVGTop) arcTopFromSVGTop = top;\n          if (bottom > arcBottomFromSVGTop) arcBottomFromSVGTop = bottom;\n        }\n      };\n      Array.from((_c = el.children) != null ? _c : []).forEach(\n        (c) => accumulate(\n          /** @type {Element} */\n          c\n        )\n      );\n      if (!Number.isFinite(arcTopFromSVGTop)) arcTopFromSVGTop = 0;\n      if (!Number.isFinite(arcBottomFromSVGTop)) {\n        const elRect = Utils$1.getBoundingClientRect(el);\n        arcBottomFromSVGTop = elRect.bottom - svgRect.top;\n      }\n      const padding = Math.max(offY, w.globals.radialSize * 0.2);\n      const verticalShift = Math.max(padding - arcTopFromSVGTop, 0);\n      if (verticalShift !== 0) {\n        w.layout.translateY = ((_d = w.layout.translateY) != null ? _d : 0) + verticalShift;\n        Graphics.setAttrs(this.w.dom.elGraphical.node, {\n          transform: `translate(${(_e = w.layout.translateX) != null ? _e : 0}, ${w.layout.translateY})`\n        });\n        arcBottomFromSVGTop += verticalShift;\n      }\n      chartInnerDimensions = arcBottomFromSVGTop > 0 ? arcBottomFromSVGTop : w.globals.radialSize * 2.05;\n      const bottomPadding = Math.max(padding, arcTopFromSVGTop);\n      const svgHeight = Math.ceil(\n        chartInnerDimensions + legendHeight + bottomPadding\n      );\n      const chartOffsetY = (_f = w.config.chart.offsetY) != null ? _f : 0;\n      const elWrapHeight = svgHeight + Math.max(chartOffsetY, 0);\n      if (!isPercentHeight) {\n        if (this.w.dom.elLegendForeign) {\n          this.w.dom.elLegendForeign.setAttribute(\n            \"height\",\n            String(elWrapHeight)\n          );\n        }\n        this.w.dom.elWrap.style.height = `${elWrapHeight}px`;\n        Graphics.setAttrs(this.w.dom.Paper.node, { height: svgHeight });\n        if (Environment.isBrowser()) {\n          const grandparent = (_g = this.w.dom.Paper.node.parentNode) == null ? void 0 : _g.parentNode;\n          if (grandparent) {\n            grandparent.style.minHeight = `${elWrapHeight}px`;\n          }\n        }\n        w.globals.svgHeight = svgHeight;\n        if (w.config.legend.position === \"bottom\" && w.config.legend.show && !w.config.legend.floating) {\n          (_h = this.ctx.legend) == null ? void 0 : _h.setLegendWrapXY(20, 0);\n        }\n      }\n      return;\n    }\n    const newHeight = Math.ceil(\n      chartInnerDimensions + this.w.layout.translateY + legendHeight + offY\n    );\n    if (userSetFixedHeight) return;\n    if (this.w.dom.elLegendForeign) {\n      this.w.dom.elLegendForeign.setAttribute(\"height\", String(newHeight));\n    }\n    this.w.dom.elWrap.style.height = `${newHeight}px`;\n    Graphics.setAttrs(this.w.dom.Paper.node, { height: newHeight });\n    if (Environment.isBrowser()) {\n      const grandparent = (_i = this.w.dom.Paper.node.parentNode) == null ? void 0 : _i.parentNode;\n      if (grandparent) {\n        grandparent.style.minHeight = `${newHeight}px`;\n      }\n    }\n  }\n  coreCalculations() {\n    new Range(this.w).init();\n  }\n  resetGlobals() {\n    const resetxyValues = () => this.w.config.series.map(() => []);\n    const globalObj = new Globals();\n    const { globals: gl } = this.w;\n    const parsingFlags = {\n      dataWasParsed: this.w.axisFlags.dataWasParsed,\n      originalSeries: gl.originalSeries\n    };\n    globalObj.initGlobalVars(gl);\n    gl.seriesXvalues = resetxyValues();\n    gl.seriesYvalues = resetxyValues();\n    if (parsingFlags.dataWasParsed) {\n      this.w.axisFlags.dataWasParsed = parsingFlags.dataWasParsed;\n      gl.originalSeries = parsingFlags.originalSeries;\n    }\n  }\n  isMultipleY() {\n    if (Array.isArray(this.w.config.yaxis) && this.w.config.yaxis.length > 1) {\n      this.w.globals.isMultipleYAxis = true;\n      return true;\n    }\n    return false;\n  }\n  xySettings() {\n    const { w } = this;\n    let xyRatios = null;\n    if (w.globals.axisCharts) {\n      if (w.config.xaxis.crosshairs.position === \"back\") {\n        new Crosshairs(this.w).drawXCrosshairs();\n      }\n      if (w.config.yaxis[0].crosshairs.position === \"back\") {\n        new Crosshairs(this.w).drawYCrosshairs();\n      }\n      if (w.config.xaxis.type === \"datetime\" && w.config.xaxis.labels.formatter === void 0) {\n        this.ctx.timeScale = new TimeScale(this.w, this.ctx);\n        let formattedTimeScale = [];\n        if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) {\n          formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(\n            w.globals.minX,\n            w.globals.maxX\n          );\n        } else if (w.globals.isBarHorizontal) {\n          formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(\n            w.globals.minY,\n            w.globals.maxY\n          );\n        }\n        this.ctx.timeScale.recalcDimensionsBasedOnFormat(formattedTimeScale);\n      }\n      const coreUtils = new CoreUtils(this.w);\n      xyRatios = coreUtils.getCalculatedRatios();\n    }\n    return xyRatios;\n  }\n  /**\n   * @param {any} targetChart\n   */\n  updateSourceChart(targetChart) {\n    this.ctx.w.interact.selection = void 0;\n    this.ctx.updateHelpers._updateOptions(\n      {\n        chart: {\n          selection: {\n            xaxis: {\n              min: targetChart.w.globals.minX,\n              max: targetChart.w.globals.maxX\n            }\n          }\n        }\n      },\n      false,\n      false\n    );\n  }\n  setupBrushHandler() {\n    const { ctx, w } = this;\n    if (!w.config.chart.brush.enabled) return;\n    if (typeof w.config.chart.events.selection !== \"function\") {\n      const targets = Array.isArray(w.config.chart.brush.targets) ? w.config.chart.brush.targets : [w.config.chart.brush.target];\n      targets.forEach((target) => {\n        const targetChart = (\n          /** @type {any} */\n          ctx.constructor.getChartByID(\n            target\n          )\n        );\n        if (!targetChart) {\n          console.warn(\n            `ApexCharts: brush target \"${target}\" was not found. Ensure the target chart is rendered (and its chart.id matches) before the brush chart.`\n          );\n          return;\n        }\n        targetChart.w.globals.brushSource = this.ctx;\n        if (typeof targetChart.w.config.chart.events.zoomed !== \"function\") {\n          targetChart.w.config.chart.events.zoomed = () => this.updateSourceChart(targetChart);\n        }\n        if (typeof targetChart.w.config.chart.events.scrolled !== \"function\") {\n          targetChart.w.config.chart.events.scrolled = () => (\n            /**\n             * @param {any} chart\n             * @param {Event} e\n             */\n            this.updateSourceChart(targetChart)\n          );\n        }\n      });\n      w.config.chart.events.selection = (chart, e) => {\n        targets.forEach((target) => {\n          const targetChart = (\n            /** @type {any} */\n            ctx.constructor.getChartByID(\n              target\n            )\n          );\n          if (!targetChart) return;\n          targetChart.ctx.updateHelpers._updateOptions(\n            {\n              xaxis: {\n                min: e.xaxis.min,\n                max: e.xaxis.max\n              }\n            },\n            false,\n            false,\n            false,\n            false\n          );\n        });\n      };\n    }\n  }\n  getAccessibleChartLabel() {\n    const w = this.w;\n    const cnf = w.config;\n    if (cnf.chart.accessibility && cnf.chart.accessibility.description) {\n      return cnf.chart.accessibility.description;\n    }\n    const chartType = cnf.chart.type;\n    const parts = [];\n    if (cnf.title.text) {\n      parts.push(`${cnf.title.text}. ${chartType} chart`);\n      if (cnf.subtitle.text) parts.push(cnf.subtitle.text);\n    } else {\n      const namedSeries = (() => {\n        if (Array.isArray(w.seriesData.seriesNames) && w.seriesData.seriesNames.length) {\n          return w.seriesData.seriesNames.filter(Boolean);\n        }\n        if (Array.isArray(cnf.series)) {\n          return cnf.series.map((s) => typeof s === \"object\" && s !== null ? s.name : null).filter(Boolean);\n        }\n        return [];\n      })();\n      const seriesCount = w.seriesData.series.length || (cnf.series ? cnf.series.length : 0);\n      if (namedSeries.length) {\n        parts.push(\n          `${chartType} chart with ${seriesCount} data series: ${namedSeries.join(\", \")}`\n        );\n      } else {\n        parts.push(`${chartType} chart with ${seriesCount} data series`);\n      }\n    }\n    return parts.join(\". \");\n  }\n}\nclass Data {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w, { resetGlobals = () => {\n  }, isMultipleY = () => {\n  } } = {}) {\n    this.w = w;\n    this.resetGlobals = resetGlobals;\n    this.isMultipleY = isMultipleY;\n    this.twoDSeries = [];\n    this.threeDSeries = [];\n    this.twoDSeriesX = [];\n    this.seriesGoals = [];\n    this.coreUtils = new CoreUtils(this.w);\n    this.activeSeriesIndex = 0;\n  }\n  // Helper to get the first valid data point from the active series\n  getFirstDataPoint() {\n    const series = this.w.config.series;\n    const sr = new Series(this.w);\n    this.activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n    const activeItem = (\n      /** @type {any} */\n      series[this.activeSeriesIndex]\n    );\n    if (activeItem && activeItem.data && activeItem.data.length > 0 && activeItem.data[0] !== null && typeof activeItem.data[0] !== \"undefined\") {\n      return activeItem.data[0];\n    }\n    return null;\n  }\n  isMultiFormat() {\n    return this.isFormatXY() || this.isFormat2DArray();\n  }\n  // given format is [{x, y}, {x, y}]\n  isFormatXY() {\n    var _a;\n    const firstDataPoint = this.getFirstDataPoint();\n    if (!firstDataPoint || typeof firstDataPoint.x === \"undefined\") return false;\n    const data = (\n      /** @type {any} */\n      (_a = this.w.config.series[this.activeSeriesIndex]) == null ? void 0 : _a.data\n    );\n    if (data) {\n      const isXY = (pt) => pt && typeof pt.x !== \"undefined\";\n      for (let k = 1; k < Math.min(3, data.length); k++) {\n        if (isXY(data[k]) !== true) {\n          console.warn(\n            `ApexCharts: series data has mixed formats starting at index ${k}`\n          );\n          break;\n        }\n      }\n    }\n    return true;\n  }\n  // given format is [[x, y], [x, y]]\n  isFormat2DArray() {\n    const firstDataPoint = this.getFirstDataPoint();\n    return firstDataPoint && Array.isArray(firstDataPoint);\n  }\n  /**\n   * Typed single pass for the dominant [[x, y], ...] shape: scalar numeric or\n   * null y, no z, no OHLC tuples. One monomorphic loop fills preallocated\n   * x/y arrays and fuses the y-extrema scan that Range.getMinYMaxY would\n   * otherwise repeat over every value (the extrema entry is ref+length\n   * guarded, so any later reshaping of the series array simply falls back to\n   * the scan). Returns false untouched on any non-conforming point so the\n   * general loop below handles mixed/exotic data with unchanged output.\n   * @param {any[]} data\n   * @param {number} i\n   * @returns {boolean}\n   */\n  _fast2DArrayParse(data, i) {\n    var _a, _b;\n    const n = data.length;\n    if (n === 0) return false;\n    const ys = new Array(n);\n    const xs = new Array(n);\n    let maxY = -Number.MAX_VALUE;\n    let lowestY = Number.MAX_VALUE;\n    let negMinY = Infinity;\n    let hasNulls = false;\n    let yDec = 0;\n    let xNumeric = true;\n    let minX = Infinity;\n    let maxX = -Infinity;\n    let xSorted = true;\n    let minXDiff = Infinity;\n    let prevX = NaN;\n    for (let j = 0; j < n; j++) {\n      const point = data[j];\n      if (!Array.isArray(point) || point.length > 2) return false;\n      const x = point[0];\n      const y = point[1];\n      if (xNumeric) {\n        if (typeof x === \"number\") {\n          if (x === x) {\n            if (x < minX) minX = x;\n            if (x > maxX) maxX = x;\n          }\n          const d = x - prevX;\n          if (d > 0) {\n            if (d < minXDiff) minXDiff = d;\n          } else if (d < 0) {\n            xSorted = false;\n          }\n          prevX = x;\n        } else {\n          xNumeric = false;\n        }\n      }\n      if (typeof y === \"number\") {\n        if (y === y && y !== Infinity && y !== -Infinity) {\n          if (y > maxY) maxY = y;\n          if (y < lowestY) lowestY = y;\n          if (y < 0 && y < negMinY) negMinY = y;\n          if (!Number.isInteger(y)) {\n            const av = y < 0 ? -y : y;\n            if (av >= 1e-6 && av < 1e21) {\n              const str = \"\" + y;\n              const dot = str.indexOf(\".\");\n              const dec = dot === -1 ? 0 : str.length - dot - 1;\n              if (dec > yDec) yDec = dec;\n            } else {\n              const nv = Utils$1.noExponents(y);\n              if (Utils$1.isFloat(nv)) {\n                yDec = Math.max(yDec, nv.toString().split(\".\")[1].length);\n              }\n            }\n          }\n        } else {\n          hasNulls = true;\n        }\n      } else if (y === null) {\n        hasNulls = true;\n      } else {\n        return false;\n      }\n      ys[j] = y;\n      xs[j] = x;\n    }\n    this.twoDSeries = ys;\n    this.twoDSeriesX = xs;\n    this.w.axisFlags.dataFormatXNumeric = true;\n    const extrema = (_b = (_a = this.w.seriesData)._parsedExtrema) != null ? _b : _a._parsedExtrema = [];\n    extrema[i] = {\n      ref: ys,\n      len: n,\n      maxY,\n      lowestY,\n      negMinY,\n      hasNulls,\n      yDec,\n      xref: xs,\n      xNumeric,\n      minX,\n      maxX,\n      xSorted,\n      minXDiff\n    };\n    return true;\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleFormat2DArray(ser, i) {\n    const cnf = this.w.config;\n    const data = ser[i].data;\n    const isBoxPlot = cnf.chart.type === \"boxPlot\" || /** @type {any} */\n    cnf.series[i].type === \"boxPlot\";\n    if (!isBoxPlot && cnf.xaxis.type !== \"datetime\" && this._fast2DArrayParse(data, i)) {\n      return;\n    }\n    for (let j = 0; j < data.length; j++) {\n      const point = data[j];\n      const x = point[0];\n      const y = point[1];\n      const z = point[2];\n      if (typeof y !== \"undefined\") {\n        if (Array.isArray(y) && y.length === 4 && !isBoxPlot) {\n          this.twoDSeries.push(Utils$1.parseNumber(y[3]));\n        } else if (point.length >= 5) {\n          this.twoDSeries.push(Utils$1.parseNumber(point[4]));\n        } else {\n          this.twoDSeries.push(Utils$1.parseNumber(y));\n        }\n        this.w.axisFlags.dataFormatXNumeric = true;\n      }\n      if (cnf.xaxis.type === \"datetime\") {\n        const ts = new Date(x).getTime();\n        this.twoDSeriesX.push(ts);\n      } else {\n        this.twoDSeriesX.push(x);\n      }\n      if (typeof z !== \"undefined\") {\n        this.threeDSeries.push(z);\n        this.w.axisFlags.isDataXYZ = true;\n      }\n    }\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleFormatXY(ser, i) {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const dt = new DateTime(this.w);\n    const data = ser[i].data;\n    let activeI = i;\n    if (gl.collapsedSeriesIndices.indexOf(i) > -1) {\n      activeI = this.activeSeriesIndex;\n    }\n    const activeData = ser[activeI].data;\n    for (let j = 0; j < data.length; j++) {\n      const point = data[j];\n      if (typeof point.y !== \"undefined\") {\n        const val = Array.isArray(point.y) ? Utils$1.parseNumber(point.y[point.y.length - 1]) : Utils$1.parseNumber(point.y);\n        this.twoDSeries.push(val);\n      }\n      if (typeof this.seriesGoals[i] === \"undefined\") {\n        this.seriesGoals[i] = [];\n      }\n      if (typeof point.goals !== \"undefined\" && Array.isArray(point.goals)) {\n        this.seriesGoals[i].push(point.goals);\n      } else {\n        this.seriesGoals[i].push(null);\n      }\n      if (typeof point.z !== \"undefined\") {\n        this.threeDSeries.push(point.z);\n        this.w.axisFlags.isDataXYZ = true;\n      }\n    }\n    for (let j = 0; j < activeData.length; j++) {\n      const point = activeData[j];\n      const x = point.x;\n      const isXString = typeof x === \"string\";\n      const isXArr = Array.isArray(x);\n      const isXDate = !isXArr && !!dt.isValidDate(x);\n      if (isXString || isXDate) {\n        if (isXString || cnf.xaxis.convertedCatToNumeric) {\n          const isRangeColumn = gl.isBarHorizontal && this.w.axisFlags.isRangeData;\n          if (cnf.xaxis.type === \"datetime\" && !isRangeColumn) {\n            this.twoDSeriesX.push(dt.parseDate(x));\n          } else {\n            this.fallbackToCategory = true;\n            this.twoDSeriesX.push(x);\n            if (!isNaN(x) && this.w.config.xaxis.type !== \"category\" && typeof x !== \"string\") {\n              this.w.axisFlags.isXNumeric = true;\n            }\n          }\n        } else {\n          if (cnf.xaxis.type === \"datetime\") {\n            this.twoDSeriesX.push(dt.parseDate(x.toString()));\n          } else {\n            this.w.axisFlags.dataFormatXNumeric = true;\n            this.w.axisFlags.isXNumeric = true;\n            this.twoDSeriesX.push(parseFloat(x));\n          }\n        }\n      } else if (isXArr) {\n        this.fallbackToCategory = true;\n        this.twoDSeriesX.push(x);\n      } else {\n        this.w.axisFlags.isXNumeric = true;\n        this.w.axisFlags.dataFormatXNumeric = true;\n        this.twoDSeriesX.push(x);\n      }\n    }\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleRangeData(ser, i) {\n    let range = { start: [], end: [], rangeUniques: [] };\n    if (this.isFormat2DArray()) {\n      range = this.handleRangeDataFormat(\"array\", ser, i);\n    } else if (this.isFormatXY()) {\n      range = this.handleRangeDataFormat(\"xy\", ser, i);\n    }\n    this.w.rangeData.seriesRangeStart[i] = range.start === void 0 ? [] : range.start;\n    this.w.rangeData.seriesRangeEnd[i] = range.end === void 0 ? [] : range.end;\n    this.w.rangeData.seriesRange[i] = range.rangeUniques;\n    this.w.rangeData.seriesRange.forEach((sr) => {\n      if (!sr) return;\n      sr.forEach((sarr) => {\n        const yItems = (\n          /** @type {any} */\n          sarr.y\n        );\n        const len = (\n          /** @type {any[]} */\n          yItems.length\n        );\n        if (len <= 1) return;\n        for (let arri = 0; arri < len; arri++) {\n          const arr = (\n            /** @type {any} */\n            yItems[arri]\n          );\n          const range1y1 = arr.y1;\n          const range1y2 = arr.y2;\n          for (let sri = arri + 1; sri < len; sri++) {\n            const range2 = (\n              /** @type {any} */\n              yItems[sri]\n            );\n            const range2y1 = range2.y1;\n            const range2y2 = range2.y2;\n            if (range1y1 <= range2y2 && range2y1 <= range1y2) {\n              const sarrAny = (\n                /** @type {any} */\n                sarr\n              );\n              sarrAny.overlaps.add(arr.rangeName);\n              sarrAny.overlaps.add(range2.rangeName);\n            }\n          }\n        }\n      });\n    });\n    return range;\n  }\n  /**\n   * Marks (#11) P3: fold a custom series' per-datum y-extent into the\n   * range-data slice so both bounds drive the y-axis scale. When `yExtent` is\n   * given it supplies the values a datum occupies (scalar or array => min/max\n   * across them); otherwise the datum's `y` is used (array => first/last,\n   * scalar => itself). The datum still carries a representative scalar `y`\n   * (folded by handleFormatXY into seriesData.series) that gates Range.\n   * @param {any[]} ser @param {number} i @param {Function|null} yExtent\n   */\n  handleCustomRangeData(ser, i, yExtent) {\n    const data = ser[i].data || [];\n    const start = [];\n    const end = [];\n    for (let j = 0; j < data.length; j++) {\n      const datum = data[j];\n      let lo;\n      let hi;\n      if (typeof yExtent === \"function\") {\n        let ext = yExtent(datum, j);\n        if (!Array.isArray(ext)) ext = [ext];\n        const nums = ext.map((v) => Utils$1.parseNumber(v)).filter((v) => v !== null && !isNaN(v));\n        lo = nums.length ? Math.min(...nums) : null;\n        hi = nums.length ? Math.max(...nums) : null;\n      } else {\n        const y = datum == null ? null : datum.y;\n        if (Array.isArray(y)) {\n          lo = Utils$1.parseNumber(y[0]);\n          hi = Utils$1.parseNumber(y[y.length - 1]);\n        } else {\n          lo = hi = Utils$1.parseNumber(y);\n        }\n      }\n      start.push(lo);\n      end.push(hi);\n    }\n    this.w.rangeData.seriesRangeStart[i] = start;\n    this.w.rangeData.seriesRangeEnd[i] = end;\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleCandleStickBoxData(ser, i) {\n    let ohlc = { o: [], h: [], m: [], l: [], c: [] };\n    if (this.isFormat2DArray()) {\n      ohlc = this.handleCandleStickBoxDataFormat(\"array\", ser, i);\n    } else if (this.isFormatXY()) {\n      ohlc = this.handleCandleStickBoxDataFormat(\"xy\", ser, i);\n    }\n    this.w.candleData.seriesCandleO[i] = ohlc.o;\n    this.w.candleData.seriesCandleH[i] = ohlc.h;\n    this.w.candleData.seriesCandleM[i] = ohlc.m;\n    this.w.candleData.seriesCandleL[i] = ohlc.l;\n    this.w.candleData.seriesCandleC[i] = ohlc.c;\n    this.w.candleData.seriesBoxPoints[i] = ohlc.points || [];\n    return ohlc;\n  }\n  /**\n   * Parse a violin series. Each data point carries a precomputed density\n   * profile (the violin shape) and an array of raw observations (the jitter):\n   *\n   *   { x, y: { density: [[value, weight], ...], points: [v1, v2, ...] } }\n   *\n   * Array fallback form: [x, densityPairs, pointsArray].\n   *\n   * Density `weight` need not be normalized — Violin.js scales each violin by\n   * its own maxWeight. The representative scalar pushed into the main series\n   * (so generic code paths see a non-null y) is the density mode — the value\n   * carrying the greatest weight.\n   *\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleViolinData(ser, i) {\n    var _a, _b, _c, _d, _e, _f;\n    const w = this.w;\n    const data = ser[i].data;\n    const densityArr = [];\n    const pointsArr = [];\n    const minArr = [];\n    const maxArr = [];\n    const placeholders = [];\n    for (let j = 0; j < data.length; j++) {\n      const d = data[j];\n      const dens = (_c = (_b = (_a = d == null ? void 0 : d.y) == null ? void 0 : _a.density) != null ? _b : d == null ? void 0 : d[1]) != null ? _c : [];\n      const pts = (_f = (_e = (_d = d == null ? void 0 : d.y) == null ? void 0 : _d.points) != null ? _e : d == null ? void 0 : d[2]) != null ? _f : [];\n      const values = [];\n      const weights = [];\n      let maxWeight = 0;\n      let modeValue = null;\n      let minVal = Infinity;\n      let maxVal = -Infinity;\n      for (let k = 0; k < dens.length; k++) {\n        const v = Utils$1.parseNumber(dens[k][0]);\n        const wt = Utils$1.parseNumber(dens[k][1]);\n        if (v === null || wt === null) continue;\n        values.push(v);\n        weights.push(wt);\n        if (wt > maxWeight) {\n          maxWeight = wt;\n          modeValue = v;\n        }\n        if (v < minVal) minVal = v;\n        if (v > maxVal) maxVal = v;\n      }\n      const cleanPts = [];\n      for (let k = 0; k < pts.length; k++) {\n        const p = Utils$1.parseNumber(pts[k]);\n        if (p === null) continue;\n        cleanPts.push(p);\n        if (p < minVal) minVal = p;\n        if (p > maxVal) maxVal = p;\n      }\n      densityArr.push({ values, weights, maxWeight });\n      pointsArr.push(cleanPts);\n      minArr.push(minVal === Infinity ? 0 : minVal);\n      maxArr.push(maxVal === -Infinity ? 0 : maxVal);\n      placeholders.push(\n        modeValue !== null ? modeValue : cleanPts.length ? cleanPts[Math.floor(cleanPts.length / 2)] : 0\n      );\n    }\n    w.violinData.seriesViolinDensity[i] = densityArr;\n    w.violinData.seriesViolinPoints[i] = pointsArr;\n    w.violinData.seriesViolinMin[i] = minArr;\n    w.violinData.seriesViolinMax[i] = maxArr;\n    this.twoDSeries = placeholders;\n  }\n  /**\n   * @param {string} format\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleRangeDataFormat(format, ser, i) {\n    const rangeStart = [];\n    const rangeEnd = [];\n    const uniqueKeysMap = /* @__PURE__ */ new Map();\n    const uniqueKeys = [];\n    ser[i].data.forEach((item) => {\n      if (!uniqueKeysMap.has(item.x)) {\n        const keyObj = {\n          x: item.x,\n          overlaps: /* @__PURE__ */ new Set(),\n          y: []\n        };\n        uniqueKeysMap.set(item.x, keyObj);\n        uniqueKeys.push(keyObj);\n      }\n    });\n    if (format === \"array\") {\n      for (let j = 0; j < ser[i].data.length; j++) {\n        if (Array.isArray(ser[i].data[j])) {\n          rangeStart.push(ser[i].data[j][1][0]);\n          rangeEnd.push(ser[i].data[j][1][1]);\n        } else {\n          rangeStart.push(ser[i].data[j]);\n          rangeEnd.push(ser[i].data[j]);\n        }\n      }\n    } else if (format === \"xy\") {\n      for (let j = 0; j < ser[i].data.length; j++) {\n        const isDataPoint2D = Array.isArray(ser[i].data[j].y);\n        const id = Utils$1.randomId();\n        const x = ser[i].data[j].x;\n        const y = {\n          y1: isDataPoint2D ? ser[i].data[j].y[0] : ser[i].data[j].y,\n          y2: isDataPoint2D ? ser[i].data[j].y[1] : ser[i].data[j].y,\n          rangeName: id\n        };\n        const gl = this.w.globals;\n        if (!gl.seriesRangeName) gl.seriesRangeName = {};\n        if (!gl.seriesRangeName[i]) gl.seriesRangeName[i] = {};\n        gl.seriesRangeName[i][j] = id;\n        const keyObj = uniqueKeysMap.get(x);\n        if (keyObj) {\n          keyObj.y.push(y);\n        }\n        rangeStart.push(y.y1);\n        rangeEnd.push(y.y2);\n      }\n    }\n    return {\n      start: rangeStart,\n      end: rangeEnd,\n      rangeUniques: uniqueKeys\n    };\n  }\n  /**\n   * @param {string} format\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleCandleStickBoxDataFormat(format, ser, i) {\n    const w = this.w;\n    const isBoxPlot = w.config.chart.type === \"boxPlot\" || /** @type {Record<string,any>} */\n    w.config.series[i].type === \"boxPlot\";\n    const serO = [];\n    const serH = [];\n    const serM = [];\n    const serL = [];\n    const serC = [];\n    const serPoints = [];\n    const data = ser[i].data;\n    let getVals;\n    if (format === \"array\") {\n      const first = data[0];\n      const isFlat = isBoxPlot && first && first.length === 6 || !isBoxPlot && first && first.length === 5;\n      if (isFlat) {\n        getVals = (d) => d.slice(1);\n      } else {\n        getVals = (d) => Array.isArray(d[1]) ? d[1] : [];\n      }\n    } else {\n      getVals = (d) => Array.isArray(d.y) ? d.y : [];\n    }\n    for (let j = 0; j < data.length; j++) {\n      const vals = getVals(data[j]);\n      if (vals && vals.length >= 2) {\n        serO.push(vals[0]);\n        serH.push(vals[1]);\n        if (isBoxPlot) {\n          serM.push(vals[2]);\n          serL.push(vals[3]);\n          serC.push(vals[4]);\n        } else {\n          serL.push(vals[2]);\n          serC.push(vals[3]);\n        }\n      }\n      const pts = data[j] && /** @type {any} */\n      data[j].points;\n      serPoints.push(Array.isArray(pts) ? pts : []);\n    }\n    return {\n      o: serO,\n      h: serH,\n      m: serM,\n      l: serL,\n      c: serC,\n      points: serPoints\n    };\n  }\n  /**\n   * @param {any[]} ser\n   */\n  parseDataAxisCharts(ser) {\n    var _a, _b, _c, _d, _e, _f;\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const dt = new DateTime(this.w);\n    this.w.seriesData._parsedExtrema = [];\n    const xlabels = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice();\n    this.w.axisFlags.isRangeBar = cnf.chart.type === \"rangeBar\" && gl.isBarHorizontal;\n    this.w.labelData.hasXaxisGroups = cnf.xaxis.type === \"category\" && cnf.xaxis.group.groups.length > 0;\n    if (this.w.labelData.hasXaxisGroups) {\n      this.w.labelData.groups = cnf.xaxis.group.groups;\n    }\n    ser.forEach((s, i) => {\n      if (s.name !== void 0) {\n        this.w.seriesData.seriesNames.push(s.name);\n      } else {\n        this.w.seriesData.seriesNames.push(\n          \"series-\" + parseInt(String(i + 1), 10)\n        );\n      }\n    });\n    this.coreUtils.setSeriesYAxisMappings();\n    const buckets = [];\n    const groups = [\n      ...new Set(cnf.series.map((s) => s.group))\n    ];\n    cnf.series.forEach((s, i) => {\n      const index = groups.indexOf(s.group);\n      if (!buckets[index]) buckets[index] = [];\n      buckets[index].push(this.w.seriesData.seriesNames[i]);\n    });\n    this.w.labelData.seriesGroups = buckets;\n    const handleDates = () => {\n      for (let j = 0; j < xlabels.length; j++) {\n        if (typeof xlabels[j] === \"string\") {\n          const isDate = dt.isValidDate(xlabels[j]);\n          if (isDate) {\n            this.twoDSeriesX.push(dt.parseDate(xlabels[j]));\n          } else {\n            throw new Error(\n              \"You have provided invalid Date format. Please provide a valid JavaScript Date\"\n            );\n          }\n        } else {\n          this.twoDSeriesX.push(xlabels[j]);\n        }\n      }\n    };\n    for (let i = 0; i < ser.length; i++) {\n      this.twoDSeries = [];\n      this.twoDSeriesX = [];\n      this.threeDSeries = [];\n      if (typeof ser[i].data === \"undefined\") {\n        console.error(\n          \"It is a possibility that you may have not included 'data' property in series.\"\n        );\n        ser[i] = __spreadProps(__spreadValues({}, ser[i]), { data: [] });\n      }\n      const dr = cnf.chart.dataReducer;\n      const rawStash = (_b = (_a = gl.dataReducerRawSeries) == null ? void 0 : _a[i]) == null ? void 0 : _b.data;\n      if ((dr == null ? void 0 : dr.enabled) && this.isMultiFormat() && Array.isArray(rawStash) && rawStash.length > ((_c = dr.threshold) != null ? _c : 500)) {\n        const targetPoints = (_d = dr.targetPoints) != null ? _d : 250;\n        const xmin = cnf.xaxis.min;\n        const xmax = cnf.xaxis.max;\n        const windowed = xmin == null && xmax == null ? rawStash : Data.sliceByXRange(rawStash, xmin, xmax);\n        let reduced = windowed;\n        if (windowed.length > targetPoints) {\n          const sampleY = !Array.isArray(windowed[0]) ? (_e = windowed[0]) == null ? void 0 : _e.y : (_f = windowed[0]) == null ? void 0 : _f[1];\n          if (Array.isArray(sampleY)) {\n            if (sampleY.length === 4) {\n              reduced = Data.ohlcAggregate(windowed, targetPoints);\n            } else if (sampleY.length === 2) {\n              reduced = Data.rangeAggregate(windowed, targetPoints);\n            }\n          } else {\n            reduced = Data.lttbDownsample(windowed, targetPoints);\n          }\n        }\n        ser[i] = __spreadProps(__spreadValues({}, ser[i]), { data: reduced });\n      }\n      if (cnf.chart.type === \"rangeBar\" || cnf.chart.type === \"rangeArea\" || ser[i].type === \"rangeBar\" || ser[i].type === \"rangeArea\") {\n        this.w.axisFlags.isRangeData = true;\n        this.handleRangeData(ser, i);\n      }\n      const customType = ser[i].type || cnf.chart.type;\n      if (isCustom(customType)) {\n        const cls = (\n          /** @type {any} */\n          getChartClass(customType)\n        );\n        const yExtent = cls && cls.yExtent;\n        if (cls && cls.dataType === \"rangeXY\" || typeof yExtent === \"function\") {\n          this.w.axisFlags.isRangeData = true;\n          this.handleCustomRangeData(ser, i, yExtent);\n        }\n      }\n      if (this.isMultiFormat()) {\n        if (this.isFormat2DArray()) {\n          this.handleFormat2DArray(ser, i);\n        } else if (this.isFormatXY()) {\n          this.handleFormatXY(ser, i);\n        }\n        if (cnf.chart.type === \"candlestick\" || ser[i].type === \"candlestick\" || cnf.chart.type === \"boxPlot\" || ser[i].type === \"boxPlot\") {\n          this.handleCandleStickBoxData(ser, i);\n        }\n        if (cnf.chart.type === \"violin\" || ser[i].type === \"violin\") {\n          this.handleViolinData(ser, i);\n        }\n        this.w.seriesData.series.push(this.twoDSeries);\n        this.w.labelData.labels.push(this.twoDSeriesX);\n        this.w.seriesData.seriesX.push(this.twoDSeriesX);\n        this.w.seriesData.seriesGoals = this.seriesGoals;\n        if (i === this.activeSeriesIndex && !this.fallbackToCategory) {\n          this.w.axisFlags.isXNumeric = true;\n        }\n      } else {\n        if (cnf.xaxis.type === \"datetime\") {\n          this.w.axisFlags.isXNumeric = true;\n          handleDates();\n          this.w.seriesData.seriesX.push(this.twoDSeriesX);\n        } else if (cnf.xaxis.type === \"numeric\") {\n          this.w.axisFlags.isXNumeric = true;\n          if (xlabels.length > 0) {\n            this.twoDSeriesX = xlabels;\n            this.w.seriesData.seriesX.push(this.twoDSeriesX);\n          }\n        }\n        this.w.labelData.labels.push(this.twoDSeriesX);\n        const singleArray = ser[i].data.map(\n          (d) => Utils$1.parseNumber(d)\n        );\n        this.w.seriesData.series.push(singleArray);\n      }\n      this.w.seriesData.seriesZ.push(this.threeDSeries);\n      if (ser[i].color !== void 0) {\n        this.w.seriesData.seriesColors.push(ser[i].color);\n      } else {\n        this.w.seriesData.seriesColors.push(\n          /** @type {any} */\n          void 0\n        );\n      }\n    }\n    return this.w;\n  }\n  /**\n   * @param {any[]} ser\n   */\n  parseDataNonAxisCharts(ser) {\n    const cnf = this.w.config;\n    this.w.seriesData.unitData = [];\n    const hasOldFormat = Array.isArray(ser) && ser.every((s) => typeof s === \"number\") && cnf.labels.length > 0;\n    const hasNewFormat = Array.isArray(ser) && ser.some(\n      (s) => s && typeof s === \"object\" && s.data || s && typeof s === \"object\" && s.parsing\n    );\n    if (cnf.chart.type === \"unit\" && hasNewFormat && !hasOldFormat) {\n      return this.parseUnitSeries(ser);\n    }\n    if (hasOldFormat && hasNewFormat) {\n      console.warn(\n        \"ApexCharts: Both old format (numeric series + labels) and new format (series objects with data/parsing) detected. Using old format for backward compatibility.\"\n      );\n    }\n    if (hasOldFormat) {\n      this.w.seriesData.series = /** @type {any} */\n      ser.slice();\n      this.w.seriesData.seriesNames = cnf.labels.slice();\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        if (this.w.seriesData.seriesNames[i] === void 0) {\n          this.w.seriesData.seriesNames.push(\"series-\" + (i + 1));\n        }\n      }\n      return this.w;\n    }\n    if (Array.isArray(ser) && ser.every((s) => typeof s === \"number\")) {\n      this.w.seriesData.series = /** @type {any} */\n      ser.slice();\n      this.w.seriesData.seriesNames = [];\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        this.w.seriesData.seriesNames.push(cnf.labels[i] || `series-${i + 1}`);\n      }\n      return this.w;\n    }\n    const processedData = this.extractPieDataFromSeries(ser);\n    this.w.seriesData.series = processedData.values;\n    this.w.seriesData.seriesNames = processedData.labels;\n    if (cnf.chart.type === \"radialBar\") {\n      this.w.seriesData.series = this.w.seriesData.series.map((val) => {\n        const numVal = Utils$1.parseNumber(val);\n        if (numVal > 100) {\n          console.warn(\n            `ApexCharts: RadialBar value ${numVal} > 100, consider using percentage values (0-100)`\n          );\n        }\n        return numVal;\n      });\n    }\n    for (let i = 0; i < this.w.seriesData.series.length; i++) {\n      if (this.w.seriesData.seriesNames[i] === void 0) {\n        this.w.seriesData.seriesNames.push(\"series-\" + (i + 1));\n      }\n    }\n    return this.w;\n  }\n  /**\n   * Parse the unit chart's per-unit object form:\n   *   series: [{ name, data: [datum, datum, ...] }, ...]\n   * Each category's dot count is `data.length` (one dot per datum), and the\n   * per-unit data is kept on `w.seriesData.unitData` so the renderer can colour\n   * dots individually and the tooltip can show each unit's own info.\n   * @param {any[]} ser\n   * @returns {any} w\n   */\n  parseUnitSeries(ser) {\n    const cnf = this.w.config;\n    const series = [];\n    const seriesNames = [];\n    const unitData = [];\n    ser.forEach((s, i) => {\n      var _a;\n      const data = s && Array.isArray(s.data) ? s.data : [];\n      series.push(data.length);\n      const name2 = s && s.name !== void 0 && s.name !== null ? s.name : void 0;\n      seriesNames.push((_a = name2 != null ? name2 : cnf.labels[i]) != null ? _a : `series-${i + 1}`);\n      unitData.push(data.slice());\n    });\n    this.w.seriesData.series = /** @type {any} */\n    series;\n    this.w.seriesData.seriesNames = seriesNames;\n    this.w.seriesData.unitData = unitData;\n    return this.w;\n  }\n  /**\n   * Reset parsing flags to allow re-parsing of data during updates\n   */\n  resetParsingFlags() {\n    const w = this.w;\n    w.axisFlags.dataWasParsed = false;\n    w.globals.originalSeries = null;\n    if (w.config.series) {\n      w.config.series.forEach((serie) => {\n        if (\n          /** @type {any} */\n          serie.__apexParsed\n        ) {\n          delete /** @type {any} */\n          serie.__apexParsed;\n        }\n      });\n    }\n  }\n  /**\n   * @param {any[]} ser\n   */\n  extractPieDataFromSeries(ser) {\n    const values = [];\n    const labels = [];\n    if (!Array.isArray(ser)) {\n      console.warn(\"ApexCharts: Expected array for series data\");\n      return { values: [], labels: [] };\n    }\n    if (ser.length === 0) {\n      console.warn(\"ApexCharts: Empty series array\");\n      return { values: [], labels: [] };\n    }\n    const firstItem = ser[0];\n    if (typeof firstItem === \"object\" && firstItem !== null && firstItem.data) {\n      this.extractPieDataFromSeriesObjects(ser, values, labels);\n    } else {\n      console.warn(\n        \"ApexCharts: Unsupported series format for pie/donut/radialBar. Expected series objects with data property.\"\n      );\n      return { values: [], labels: [] };\n    }\n    return { values, labels };\n  }\n  // Extract data from series objects: [{ data: [...], parsing: {...} }]\n  /**\n   * @param {any[]} seriesArray\n   * @param {any[]} values\n   * @param {any[]} labels\n   */\n  extractPieDataFromSeriesObjects(seriesArray, values, labels) {\n    seriesArray.forEach((serie, serieIndex) => {\n      if (!serie.data || !Array.isArray(serie.data)) {\n        console.warn(`ApexCharts: Series ${serieIndex} has no valid data array`);\n        return;\n      }\n      serie.data.forEach((dataPoint) => {\n        if (typeof dataPoint === \"object\" && dataPoint !== null) {\n          if (dataPoint.x !== void 0 && dataPoint.y !== void 0) {\n            labels.push(String(dataPoint.x));\n            values.push(Utils$1.parseNumber(dataPoint.y));\n          } else {\n            console.warn(\n              \"ApexCharts: Invalid data point format for pie chart. Expected {x, y} format:\",\n              dataPoint\n            );\n          }\n        } else {\n          console.warn(\n            \"ApexCharts: Expected object data point, got:\",\n            typeof dataPoint\n          );\n        }\n      });\n    });\n  }\n  /** User possibly set string categories in xaxis.categories or labels prop\n   * Or didn't set xaxis labels at all - in which case we manually do it.\n   * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }],\n   * this shouldn't be called\n   * @param {any[]} ser - the series which user passed to the config\n   */\n  handleExternalLabelsData(ser) {\n    const cnf = this.w.config;\n    if (cnf.xaxis.categories.length > 0) {\n      this.w.labelData.labels = cnf.xaxis.categories;\n    } else if (cnf.labels.length > 0) {\n      this.w.labelData.labels = cnf.labels.slice();\n    } else if (this.fallbackToCategory) {\n      this.w.labelData.labels = /** @type {string[]} */\n      /** @type {unknown} */\n      this.w.labelData.labels[0];\n      if (this.w.rangeData.seriesRange.length) {\n        this.w.rangeData.seriesRange.map((srt) => {\n          srt.forEach((sr) => {\n            if (this.w.labelData.labels.indexOf(sr.x) < 0 && sr.x) {\n              this.w.labelData.labels.push(sr.x);\n            }\n          });\n        });\n        const _labels = this.w.labelData.labels;\n        if (_labels.length > 0 && (typeof _labels[0] === \"number\" || typeof _labels[0] === \"string\")) {\n          this.w.labelData.labels = [...new Set(_labels)];\n        } else {\n          const _seen = /* @__PURE__ */ new Map();\n          for (const _label of _labels) {\n            const _key = JSON.stringify(_label);\n            if (!_seen.has(_key)) _seen.set(_key, _label);\n          }\n          this.w.labelData.labels = Array.from(_seen.values());\n        }\n      }\n      if (cnf.xaxis.convertedCatToNumeric) {\n        const defaults = new Defaults(cnf);\n        defaults.convertCatToNumericXaxis(cnf, this.w.seriesData.seriesX[0]);\n        this._generateExternalLabels(ser);\n      }\n    } else {\n      this._generateExternalLabels(ser);\n    }\n  }\n  /**\n   * @param {any[]} ser\n   */\n  _generateExternalLabels(ser) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    let labelArr = [];\n    if (gl.axisCharts) {\n      if (this.w.seriesData.series.length > 0) {\n        if (this.isFormatXY()) {\n          const seriesDataFiltered = cnf.series.map(\n            (serie) => {\n              const seen = /* @__PURE__ */ new Map();\n              for (const point of serie.data) {\n                if (!seen.has(point.x)) seen.set(point.x, point);\n              }\n              return Array.from(seen.values());\n            }\n          );\n          const len = seriesDataFiltered.reduce(\n            (p, c, i, a) => a[p].length > c.length ? p : i,\n            0\n          );\n          for (let i = 0; i < seriesDataFiltered[len].length; i++) {\n            labelArr.push(i + 1);\n          }\n        } else {\n          for (let i = 0; i < this.w.seriesData.series[gl.maxValsInArrayIndex].length; i++) {\n            labelArr.push(i + 1);\n          }\n        }\n      }\n      this.w.seriesData.seriesX = [];\n      for (let i = 0; i < ser.length; i++) {\n        this.w.seriesData.seriesX.push(labelArr);\n      }\n      if (!this.w.globals.isBarHorizontal) {\n        this.w.axisFlags.isXNumeric = true;\n      }\n    }\n    if (labelArr.length === 0) {\n      labelArr = gl.axisCharts ? [] : (\n        /**\n         * @param {Record<string, any>} gls\n         * @param {number} glsi\n         */\n        this.w.seriesData.series.map((gls, glsi) => {\n          return glsi + 1;\n        })\n      );\n      for (let i = 0; i < ser.length; i++) {\n        this.w.seriesData.seriesX.push(labelArr);\n      }\n    }\n    this.w.labelData.labels = /** @type {string[]} */\n    /** @type {unknown} */\n    labelArr;\n    if (cnf.xaxis.convertedCatToNumeric) {\n      this.w.labelData.categoryLabels = labelArr.map((l) => {\n        return cnf.xaxis.labels.formatter(l);\n      });\n    }\n    this.w.axisFlags.noLabelsProvided = true;\n  }\n  /**\n   * @param {any[]} series\n   */\n  parseRawDataIfNeeded(series) {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const globalParsing = cnf.parsing;\n    if (this.w.axisFlags.dataWasParsed) {\n      return series;\n    }\n    const hasGlobalParsing = !!(globalParsing && (globalParsing.x || globalParsing.y || globalParsing.z));\n    const hasSeriesParsing = series.some(\n      (s) => s.parsing && (s.parsing.x || s.parsing.y || s.parsing.z)\n    );\n    if (!hasGlobalParsing && !hasSeriesParsing) {\n      return series;\n    }\n    const processedSeries = series.map((serie, index) => {\n      var _a, _b, _c, _d, _e;\n      if (!serie.data || !Array.isArray(serie.data) || serie.data.length === 0) {\n        return serie;\n      }\n      const effectiveParsing = {\n        x: ((_a = serie.parsing) == null ? void 0 : _a.x) || (globalParsing == null ? void 0 : globalParsing.x),\n        y: ((_b = serie.parsing) == null ? void 0 : _b.y) || (globalParsing == null ? void 0 : globalParsing.y),\n        z: ((_c = serie.parsing) == null ? void 0 : _c.z) || (globalParsing == null ? void 0 : globalParsing.z)\n      };\n      if (!effectiveParsing.x && !effectiveParsing.y) {\n        return serie;\n      }\n      const firstDataPoint = serie.data[0];\n      if (typeof firstDataPoint === \"object\" && firstDataPoint !== null && (Object.prototype.hasOwnProperty.call(firstDataPoint, \"x\") || Object.prototype.hasOwnProperty.call(firstDataPoint, \"y\")) || Array.isArray(firstDataPoint)) {\n        return serie;\n      }\n      if (!effectiveParsing.x || !effectiveParsing.y || Array.isArray(effectiveParsing.y) && effectiveParsing.y.length === 0) {\n        const missing = [];\n        if (!effectiveParsing.x) missing.push(\"x\");\n        if (!effectiveParsing.y || Array.isArray(effectiveParsing.y) && effectiveParsing.y.length === 0) {\n          missing.push(\"y\");\n        }\n        const seriesName = (_d = serie.name) != null ? _d : `series[${index}]`;\n        console.warn(\n          `ApexCharts [${this.w.globals.chartID}]: \"${seriesName}\" has a parseData config but is missing the '${missing.join(\n            \"', '\"\n          )}' field specification.`,\n          { parsing: (_e = serie.parsing) != null ? _e : globalParsing }\n        );\n        return serie;\n      }\n      const transformedData = serie.data.map(\n        (item, itemIndex) => {\n          if (typeof item !== \"object\" || item === null) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} is not an object, skipping parsing`\n            );\n            return item;\n          }\n          const x = this.getNestedValue(item, effectiveParsing.x);\n          let y;\n          let z = void 0;\n          if (Array.isArray(effectiveParsing.y)) {\n            const yValues = effectiveParsing.y.map(\n              (fieldName) => this.getNestedValue(item, fieldName)\n            );\n            if (this.w.config.chart.type === \"bubble\") {\n              if (yValues.length < 2) {\n                console.warn(\n                  `ApexCharts: series[${index}] bubble chart requires parseData.y to have at least 2 fields (y and z). Got: ${JSON.stringify(effectiveParsing.y)}`\n                );\n              }\n              y = yValues[0];\n            } else {\n              y = yValues;\n            }\n          } else {\n            y = this.getNestedValue(item, effectiveParsing.y);\n          }\n          if (effectiveParsing.z) {\n            z = this.getNestedValue(item, effectiveParsing.z);\n          }\n          if (x === void 0) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} missing field '${effectiveParsing.x}'`\n            );\n          }\n          if (y === void 0) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} missing field '${effectiveParsing.y}'`\n            );\n          }\n          const result = { x, y, z: void 0 };\n          if (this.w.config.chart.type === \"bubble\" && Array.isArray(effectiveParsing.y) && effectiveParsing.y.length === 2) {\n            const zValue = this.getNestedValue(item, effectiveParsing.y[1]);\n            if (zValue !== void 0) {\n              result.z = zValue;\n            }\n          }\n          if (z !== void 0) {\n            result.z = z;\n          }\n          return result;\n        }\n      );\n      return __spreadProps(__spreadValues({}, serie), {\n        data: transformedData,\n        __apexParsed: true\n      });\n    });\n    this.w.axisFlags.dataWasParsed = true;\n    if (!gl.originalSeries) {\n      gl.originalSeries = Utils$1.clone(series);\n    }\n    return processedSeries;\n  }\n  /**\n   * Get nested object value using dot notation path\n   * @param {Object} obj - The object to search in\n   * @param {string} path - Dot notation path (e.g., 'user.profile.name')\n   * @returns {*} The value at the path, or undefined if not found\n   */\n  getNestedValue(obj, path) {\n    if (!obj || typeof obj !== \"object\" || !path) {\n      return void 0;\n    }\n    if (path.indexOf(\".\") === -1) {\n      return (\n        /** @type {any} */\n        obj[path]\n      );\n    }\n    const keys = path.split(\".\");\n    let current = obj;\n    for (let i = 0; i < keys.length; i++) {\n      if (current === null || current === void 0 || typeof current !== \"object\") {\n        return void 0;\n      }\n      current = /** @type {any} */\n      current[keys[i]];\n    }\n    return current;\n  }\n  /**\n   * Scatter strip-plot support. When `plotOptions.scatter.jitter.enabled` and a\n   * series carries compact `{ x: 'Category', y: [v1, v2, ...] }` data, expand\n   * each observation into its own `{ x: bandIndex, y }` point (so every dot is a\n   * first-class, hoverable marker) and frame the x-axis as evenly-spaced,\n   * labelled bands. The reference per-point form (numeric x + `xaxis.categories`)\n   * is reframed too, without expansion. Returns `ser` unchanged for non-scatter\n   * charts and for plain numeric/datetime data (continuous overplotting jitter\n   * is offset at render time instead).\n   *\n   * @param {any[]} ser\n   * @returns {any[]}\n   */\n  expandScatterJitterData(ser) {\n    var _a, _b;\n    const cnf = this.w.config;\n    const isScatter = cnf.chart.type === \"scatter\" || cnf.chart.type === \"bubble\";\n    const jt = (_b = (_a = cnf.plotOptions) == null ? void 0 : _a.scatter) == null ? void 0 : _b.jitter;\n    if (!isScatter || !jt || !jt.enabled || !Array.isArray(ser)) return ser;\n    const hasArrayY = ser.some(\n      (s) => Array.isArray(s == null ? void 0 : s.data) && s.data.some(\n        (d) => d && !Array.isArray(d) && Array.isArray(d.y)\n      )\n    );\n    if (!hasArrayY) {\n      if (cnf.xaxis.type !== \"datetime\") {\n        if (Array.isArray(cnf.xaxis.categories) && cnf.xaxis.categories.length) {\n          this._applyBandAxis(cnf.xaxis.categories.slice());\n        } else if (Array.isArray(cnf.xaxis._scatterBandLabels) && cnf.xaxis._scatterBandLabels.length) {\n          this._applyBandAxis(cnf.xaxis._scatterBandLabels);\n        }\n      }\n      return ser;\n    }\n    const bandLabels = [];\n    const bandIndex = /* @__PURE__ */ new Map();\n    ser.forEach((s) => {\n      if (!Array.isArray(s == null ? void 0 : s.data)) return;\n      s.data.forEach((d) => {\n        if (d && Array.isArray(d.y)) {\n          const key = String(d.x);\n          if (!bandIndex.has(key)) {\n            bandIndex.set(key, bandLabels.length);\n            bandLabels.push(d.x);\n          }\n        }\n      });\n    });\n    const maxPoints = jt.maxPoints || 5e3;\n    const expanded = ser.map((s) => {\n      if (!Array.isArray(s == null ? void 0 : s.data)) return s;\n      const out = [];\n      s.data.forEach((d) => {\n        if (d && Array.isArray(d.y)) {\n          const bi = bandIndex.get(String(d.x));\n          const ys = d.y;\n          const stride = ys.length > maxPoints ? Math.ceil(ys.length / maxPoints) : 1;\n          for (let k = 0; k < ys.length; k += stride) {\n            const yv = Utils$1.parseNumber(ys[k]);\n            if (yv === null) continue;\n            out.push({ x: bi, y: yv });\n          }\n        } else if (d && typeof d === \"object\" && !Array.isArray(d)) {\n          const key = String(d.x);\n          out.push({ x: bandIndex.has(key) ? bandIndex.get(key) : d.x, y: d.y });\n        } else {\n          out.push(d);\n        }\n      });\n      return __spreadProps(__spreadValues({}, s), { data: out });\n    });\n    this._applyBandAxis(bandLabels);\n    return expanded;\n  }\n  /**\n   * Frame the x-axis as N evenly-spaced bands (one per category) on a numeric\n   * scale. Bands sit at integer positions 0..N-1; the range is padded by a full\n   * band on each side (min -1, max N) so jittered dots never clip. Crucially the\n   * range bounds and tick count are integers, so the ticks land exactly on the\n   * band centers regardless of how the numeric scale \"nices\" the step (e.g. the\n   * small-range reduction in Scales._adjustTicksForSmallRange triggered by a\n   * y-axis formatter). Only fills in options the user hasn't set, so explicit\n   * min/max/tickAmount/formatter still win. The exception is an interactive\n   * zoom/pan window (w.interact.zoomed): its fractional bounds are snapped to\n   * whole bands so tick labels stay on band centers and edge bands are never\n   * half-cropped.\n   *\n   * @param {any[]} bandLabels\n   */\n  _applyBandAxis(bandLabels) {\n    var _a;\n    const xa = this.w.config.xaxis;\n    const n = bandLabels.length;\n    if (!n) return;\n    const owned = (\n      /** @type {Record<string, boolean>} */\n      xa._scatterBand = xa._scatterBand || {}\n    );\n    xa._scatterBandLabels = bandLabels.slice();\n    xa.type = \"numeric\";\n    if (((_a = this.w.interact) == null ? void 0 : _a.zoomed) && typeof xa.min === \"number\" && typeof xa.max === \"number\" && isFinite(xa.min) && isFinite(xa.max)) {\n      const clampBand = (b) => Math.max(0, Math.min(n - 1, b));\n      let first = clampBand(Math.round(xa.min + 0.49));\n      let last = clampBand(Math.round(xa.max - 0.49));\n      if (last < first) {\n        first = last = clampBand(Math.round((xa.min + xa.max) / 2));\n      }\n      xa.min = first - 1;\n      xa.max = last + 1;\n      xa.tickAmount = last - first + 2;\n      owned.min = true;\n      owned.max = true;\n      owned.tick = true;\n    } else {\n      if (xa.min == null || owned.min) {\n        xa.min = -1;\n        owned.min = true;\n      }\n      if (xa.max == null || owned.max) {\n        xa.max = n;\n        owned.max = true;\n      }\n      if (xa.tickAmount == null || xa.tickAmount === \"dataPoints\" || owned.tick) {\n        xa.tickAmount = n + 1;\n        owned.tick = true;\n      }\n    }\n    xa.labels = xa.labels || {};\n    const existing = (\n      /** @type {any} */\n      xa.labels.formatter\n    );\n    if (typeof existing !== \"function\" || existing._scatterBand) {\n      const fmt = (\n        /** @type {any} */\n        ((val) => {\n          const r = Math.round(val);\n          return Math.abs(val - r) < 1e-6 && bandLabels[r] !== void 0 ? bandLabels[r] : \"\";\n        })\n      );\n      fmt._scatterBand = true;\n      xa.labels.formatter = fmt;\n    }\n  }\n  // Segregate user provided data into appropriate vars\n  /**\n   * @param {any[]} ser\n   */\n  parseData(ser) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    const w = this.w;\n    const cnf = w.config;\n    const gl = w.globals;\n    ser = this.parseRawDataIfNeeded(ser);\n    ser = this.expandScatterJitterData(ser);\n    if (((_a = cnf.chart.dataReducer) == null ? void 0 : _a.enabled) && gl.axisCharts && !gl.dataReducerRawSeries) {\n      gl.dataReducerRawSeries = ser.map((s) => ({\n        data: Array.isArray(s == null ? void 0 : s.data) ? s.data.slice() : s == null ? void 0 : s.data\n      }));\n      let rawMinX = Infinity;\n      let rawMaxX = -Infinity;\n      for (const s of ser) {\n        const d = s == null ? void 0 : s.data;\n        if (!Array.isArray(d) || d.length === 0) continue;\n        const isXY = !Array.isArray(d[0]);\n        const firstX = isXY ? (_b = d[0]) == null ? void 0 : _b.x : (_c = d[0]) == null ? void 0 : _c[0];\n        const lastX = isXY ? (_d = d[d.length - 1]) == null ? void 0 : _d.x : (_e = d[d.length - 1]) == null ? void 0 : _e[0];\n        if (typeof firstX === \"number\") rawMinX = Math.min(rawMinX, firstX);\n        if (typeof lastX === \"number\") rawMaxX = Math.max(rawMaxX, lastX);\n      }\n      if (rawMinX !== Infinity) {\n        gl.dataReducerRawMinX = rawMinX;\n        gl.dataReducerRawMaxX = rawMaxX;\n      }\n    }\n    if (gl.dataReducerRawSeries && ((_f = cnf.chart.dataReducer) == null ? void 0 : _f.enabled)) {\n      ser = ser.map((s) => __spreadValues({}, s));\n    }\n    cnf.series = ser;\n    if (gl.dataReducerRawSeries && ((_g = cnf.chart.dataReducer) == null ? void 0 : _g.enabled)) {\n      const stash = gl.dataReducerRawSeries;\n      gl.initialSeries = ser.map((s, i) => {\n        var _a2, _b2, _c2;\n        return __spreadProps(__spreadValues({}, s), {\n          data: (_c2 = (_b2 = (_a2 = stash[i]) == null ? void 0 : _a2.data) == null ? void 0 : _b2.slice()) != null ? _c2 : s.data\n        });\n      });\n    } else {\n      gl.initialSeries = ser;\n    }\n    this.excludeCollapsedSeriesInYAxis();\n    this.fallbackToCategory = false;\n    this.resetGlobals();\n    this.isMultipleY();\n    if (gl.axisCharts) {\n      this.parseDataAxisCharts(ser);\n      this.coreUtils.getLargestSeries();\n    } else {\n      this.parseDataNonAxisCharts(ser);\n    }\n    if (cnf.chart.stacked) {\n      const series = new Series(this.w);\n      this.w.seriesData.series = series.setNullSeriesToZeroValues(\n        this.w.seriesData.series\n      );\n    }\n    this.coreUtils.getSeriesTotals();\n    if (gl.axisCharts) {\n      Data._defineLazyResult(\n        this.w.seriesData,\n        \"stackedSeriesTotals\",\n        () => this.coreUtils.getStackedSeriesTotals()\n      );\n      Data._defineLazyResult(\n        this.w.seriesData,\n        \"stackedSeriesTotalsByGroups\",\n        () => this.coreUtils.getStackedSeriesTotalsByGroups()\n      );\n      Data._defineLazyResult(gl, \"seriesPercent\", () => {\n        this.coreUtils.getPercentSeries();\n        return gl.seriesPercent;\n      });\n    } else {\n      this.coreUtils.getPercentSeries();\n    }\n    if (!this.w.axisFlags.dataFormatXNumeric && (!this.w.axisFlags.isXNumeric || cnf.xaxis.type === \"numeric\" && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) {\n      this.handleExternalLabelsData(ser);\n    }\n    const catLabels = this.coreUtils.getCategoryLabels(this.w.labelData.labels);\n    for (let l = 0; l < catLabels.length; l++) {\n      if (Array.isArray(catLabels[l])) {\n        this.w.axisFlags.isMultiLineX = true;\n        break;\n      }\n    }\n    return {\n      // w.seriesData (future slice)\n      // initialSeries/originalSeries and the stacked totals are deliberately\n      // ABSENT: they already live as lazy accessors on gl / w.seriesData, so\n      // a snapshot field would either force their materialization (a deep\n      // clone plus three O(n) passes per parse that most charts never need)\n      // or, as a delegating getter, recurse into itself when a writer copies\n      // it back onto the object it delegates to.\n      seriesData: {\n        series: this.w.seriesData.series,\n        seriesNames: this.w.seriesData.seriesNames,\n        seriesX: this.w.seriesData.seriesX,\n        seriesZ: this.w.seriesData.seriesZ,\n        seriesColors: this.w.seriesData.seriesColors,\n        seriesGoals: this.w.seriesData.seriesGoals,\n        unitData: this.w.seriesData.unitData,\n        noLabelsProvided: this.w.axisFlags.noLabelsProvided\n      },\n      // w.rangeData (future slice)\n      rangeData: {\n        seriesRangeStart: this.w.rangeData.seriesRangeStart,\n        seriesRangeEnd: this.w.rangeData.seriesRangeEnd,\n        seriesRange: this.w.rangeData.seriesRange\n      },\n      // w.candleData (future slice)\n      candleData: {\n        seriesCandleO: this.w.candleData.seriesCandleO,\n        seriesCandleH: this.w.candleData.seriesCandleH,\n        seriesCandleM: this.w.candleData.seriesCandleM,\n        seriesCandleL: this.w.candleData.seriesCandleL,\n        seriesCandleC: this.w.candleData.seriesCandleC,\n        seriesBoxPoints: this.w.candleData.seriesBoxPoints\n      },\n      // w.labelData (future slice)\n      labelData: {\n        labels: this.w.labelData.labels,\n        categoryLabels: this.w.labelData.categoryLabels\n      },\n      // w.axisFlags (future slice)\n      axisFlags: {\n        isXNumeric: this.w.axisFlags.isXNumeric,\n        dataFormatXNumeric: this.w.axisFlags.dataFormatXNumeric,\n        isDataXYZ: this.w.axisFlags.isDataXYZ,\n        isRangeData: this.w.axisFlags.isRangeData,\n        isRangeBar: this.w.axisFlags.isRangeBar,\n        isMultiLineX: this.w.axisFlags.isMultiLineX,\n        dataWasParsed: this.w.axisFlags.dataWasParsed,\n        hasXaxisGroups: this.w.labelData.hasXaxisGroups,\n        groups: this.w.labelData.groups,\n        seriesGroups: this.w.labelData.seriesGroups\n      }\n    };\n  }\n  /**\n   * Slice a sorted-by-x series to a [xmin, xmax] window using binary search.\n   *\n   * Pads with one extra point on each side so lines extend cleanly to the\n   * chart edges. Either bound may be null/undefined to disable that side.\n   *\n   * @param {any[]} data - Series data in [{x,y}] or [[x,y]] format, sorted by x.\n   * @param {number|null|undefined} xmin\n   * @param {number|null|undefined} xmax\n   * @returns {any[]} Sliced array (new array, never the input reference).\n   */\n  /**\n   * Define `key` on `obj` as a lazily computed property: `compute` runs on\n   * first read after this call and its result is cached; assigning to the\n   * property stores the assigned value directly (so code that writes the\n   * field, like getPercentSeries, keeps working). Re-calling resets the cache\n   * (used once per parse).\n   * @param {any} obj\n   * @param {string} key\n   * @param {() => any} compute\n   */\n  static _defineLazyResult(obj, key, compute) {\n    let has = false;\n    let value;\n    Object.defineProperty(obj, key, {\n      configurable: true,\n      enumerable: true,\n      get() {\n        if (!has) {\n          has = true;\n          value = compute();\n        }\n        return value;\n      },\n      set(v) {\n        has = true;\n        value = v;\n      }\n    });\n  }\n  /**\n   * @param {any[]} data\n   * @param {any} xmin\n   * @param {any} xmax\n   */\n  static sliceByXRange(data, xmin, xmax) {\n    const len = data.length;\n    if (len === 0) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    let lo = 0;\n    if (xmin != null) {\n      let l = 0;\n      let r = len - 1;\n      while (l <= r) {\n        const m = l + r >> 1;\n        if (getX(data[m]) < xmin) l = m + 1;\n        else r = m - 1;\n      }\n      lo = Math.max(0, l - 1);\n    }\n    let hi = len;\n    if (xmax != null) {\n      let l = 0;\n      let r = len - 1;\n      while (l <= r) {\n        const m = l + r >> 1;\n        if (getX(data[m]) > xmax) r = m - 1;\n        else l = m + 1;\n      }\n      hi = Math.min(len, l + 1);\n    }\n    return lo === 0 && hi === len ? data.slice() : data.slice(lo, hi);\n  }\n  /**\n   * Largest-Triangle-Three-Bucket (LTTB) downsampling.\n   *\n   * Reduces `data` to `targetPoints` points while preserving the visual shape\n   * of the series as perceived by the human eye.\n   *\n   * @param {any[]} data   - Raw series data in [{x,y}] or [[x,y]] format.\n   * @param {number} targetPoints - Desired output length (>= 3).\n   * @returns {any[]} Downsampled array in the same format as the input.\n   */\n  static lttbDownsample(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 3) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const sampled = [];\n    sampled.push(data[0]);\n    const bucketSize = (len - 2) / (targetPoints - 2);\n    let a = 0;\n    for (let i = 0; i < targetPoints - 2; i++) {\n      const avgRangeStart = Math.floor((i + 1) * bucketSize) + 1;\n      const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketSize) + 1, len);\n      let avgX = 0;\n      let avgY = 0;\n      const avgRangeLen = avgRangeEnd - avgRangeStart;\n      for (let j = avgRangeStart; j < avgRangeEnd; j++) {\n        avgX += getX(data[j]);\n        avgY += getY(data[j]);\n      }\n      avgX /= avgRangeLen;\n      avgY /= avgRangeLen;\n      const rangeStart = Math.floor(i * bucketSize) + 1;\n      const rangeEnd = Math.min(Math.floor((i + 1) * bucketSize) + 1, len);\n      const pointAX = getX(data[a]);\n      const pointAY = getY(data[a]);\n      let maxArea = -1;\n      let maxAreaIdx = rangeStart;\n      for (let j = rangeStart; j < rangeEnd; j++) {\n        const area = Math.abs(\n          (pointAX - avgX) * (getY(data[j]) - pointAY) - (pointAX - getX(data[j])) * (avgY - pointAY)\n        ) * 0.5;\n        if (area > maxArea) {\n          maxArea = area;\n          maxAreaIdx = j;\n        }\n      }\n      sampled.push(data[maxAreaIdx]);\n      a = maxAreaIdx;\n    }\n    sampled.push(data[len - 1]);\n    return sampled;\n  }\n  /**\n   * OHLC-aware bucket aggregation for candlestick / OHLC series.\n   *\n   * Each point's y is a 4-tuple `[open, high, low, close]`. LTTB is unusable\n   * here — it treats y as a scalar, so the triangle-area math degenerates and\n   * silently discards the high/low extremes that *define* a candle. Instead we\n   * split the series into `targetPoints` contiguous buckets and roll each up\n   * into a single candle: open = first bucket open, close = last bucket close,\n   * high = max of highs, low = min of lows. The x is the first point's x in the\n   * bucket. Output keeps the input's format ([{x,y}] or [[x,y]]).\n   *\n   * @param {any[]} data         - Raw OHLC series in [{x,y:[o,h,l,c]}] or [[x,[o,h,l,c]]] format.\n   * @param {number} targetPoints - Desired output length (>= 1).\n   * @returns {any[]} Aggregated array in the same format as the input.\n   */\n  static ohlcAggregate(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 1) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const make = isXY ? (x, y) => ({ x, y }) : (x, y) => [x, y];\n    const out = [];\n    const bucketSize = len / targetPoints;\n    for (let i = 0; i < targetPoints; i++) {\n      const start = Math.floor(i * bucketSize);\n      const end = i === targetPoints - 1 ? len : Math.floor((i + 1) * bucketSize);\n      if (end <= start) continue;\n      const firstY = getY(data[start]);\n      const open = firstY[0];\n      let high = firstY[1];\n      let low = firstY[2];\n      let close = firstY[3];\n      for (let j = start + 1; j < end; j++) {\n        const y = getY(data[j]);\n        if (y[1] > high) high = y[1];\n        if (y[2] < low) low = y[2];\n        close = y[3];\n      }\n      out.push(make(getX(data[start]), [open, high, low, close]));\n    }\n    return out;\n  }\n  /**\n   * Bucket-aggregate 2-tuple range data (`y: [low, high]`, rangeArea/rangeBar)\n   * into `targetPoints` points, the range analog of {@link ohlcAggregate}. Each\n   * bucket emits `[min low, max high]` so the band's vertical extent is never\n   * understated by downsampling (LTTB, built for scalar y, would drop these\n   * extremes). Order-agnostic: the min/max scan both tuple slots, so it is\n   * correct whether a point is stored `[low, high]` or `[high, low]`.\n   *\n   * Null bounds (e.g. an indicator's warm-up period) are ignored, not treated\n   * as 0 — `Math.min(null, x)` would coerce to 0 and pin the band to the\n   * baseline. A bucket with no finite bounds emits `[null, null]` so it renders\n   * as a gap, matching the un-downsampled series.\n   * @param {any[]} data\n   * @param {number} targetPoints\n   * @returns {any[]}\n   */\n  static rangeAggregate(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 1) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const make = isXY ? (x, y) => ({ x, y }) : (x, y) => [x, y];\n    const out = [];\n    const bucketSize = len / targetPoints;\n    for (let i = 0; i < targetPoints; i++) {\n      const start = Math.floor(i * bucketSize);\n      const end = i === targetPoints - 1 ? len : Math.floor((i + 1) * bucketSize);\n      if (end <= start) continue;\n      let low = Infinity;\n      let high = -Infinity;\n      for (let j = start; j < end; j++) {\n        const y = getY(data[j]);\n        if (y == null) continue;\n        for (let k = 0; k < 2; k++) {\n          const v = y[k];\n          if (v == null || !isFinite(v)) continue;\n          if (v < low) low = v;\n          if (v > high) high = v;\n        }\n      }\n      out.push(\n        make(getX(data[start]), low === Infinity ? [null, null] : [low, high])\n      );\n    }\n    return out;\n  }\n  excludeCollapsedSeriesInYAxis() {\n    const w = this.w;\n    const yAxisIndexes = [];\n    w.globals.seriesYAxisMap.forEach((yAxisArr, yi) => {\n      let collapsedCount = 0;\n      yAxisArr.forEach((seriesIndex) => {\n        if (w.globals.collapsedSeriesIndices.indexOf(seriesIndex) !== -1) {\n          collapsedCount++;\n        }\n      });\n      if (collapsedCount > 0 && collapsedCount == yAxisArr.length) {\n        yAxisIndexes.push(yi);\n      }\n    });\n    w.globals.ignoreYAxisIndexes = yAxisIndexes.map((x) => x);\n  }\n}\nclass UpdateHelpers {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * private method to update Options.\n   *\n   * @param {Record<string, any>} options - A new config object can be passed which will be merged with the existing config object\n   * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there\n   * @param {boolean} animate - should animate or not on updating Options\n   * @param {boolean} overwriteInitialConfig - should update the initial config or not\n   */\n  _updateOptions(options2, redraw = false, animate = true, updateSyncedCharts = true, overwriteInitialConfig = false) {\n    return new Promise((resolve, reject) => {\n      let charts = [this.ctx];\n      if (updateSyncedCharts) {\n        charts = this.ctx.getSyncedCharts();\n      }\n      if (this.w.globals.isExecCalled) {\n        charts = [this.ctx];\n        this.w.globals.isExecCalled = false;\n      }\n      charts.forEach((ch, chartIndex) => {\n        var _a, _b;\n        const w = ch.w;\n        w.globals.shouldAnimate = animate;\n        if (!redraw) {\n          w.globals.resized = true;\n          w.globals.dataChanged = true;\n          if (animate && w.config.chart.animations.enabled) {\n            ch.series.getPreviousPaths();\n          }\n        }\n        if (animate && options2 && typeof options2 === \"object\") {\n          const newType = (_a = options2 == null ? void 0 : options2.chart) == null ? void 0 : _a.type;\n          const fromType = w.config.chart.requestedType || w.config.chart.type;\n          if (newType && newType !== fromType) {\n            (_b = ch.morphTypeChange) == null ? void 0 : _b.captureBeforeDestroy({\n              fromType,\n              toType: newType,\n              newSeries: options2.series || w.config.series\n            });\n          }\n        }\n        if (options2 && typeof options2 === \"object\") {\n          ch.config = new Config(options2);\n          const incomingType = options2.chart && options2.chart.type;\n          const isAliasRequest = incomingType === \"funnel\" || incomingType === \"pyramid\" || incomingType === \"gauge\";\n          const wasAlias = !!w.config.chart.requestedType;\n          if (incomingType && !isAliasRequest && wasAlias) {\n            options2.chart = options2.chart || {};\n            options2.chart.requestedType = incomingType;\n            const prev = w.config.chart.requestedType;\n            if (prev === \"funnel\" || prev === \"pyramid\") {\n              options2.plotOptions = options2.plotOptions || {};\n              options2.plotOptions.bar = options2.plotOptions.bar || {};\n              if (options2.plotOptions.bar.isFunnel === void 0) {\n                options2.plotOptions.bar.isFunnel = false;\n              }\n              if (options2.plotOptions.bar.isPyramid === void 0) {\n                options2.plotOptions.bar.isPyramid = false;\n              }\n            }\n          }\n          ch.config.normalizeAliasedChartType(options2);\n          options2 = CoreUtils.extendArrayProps(ch.config, options2, w);\n          if (ch.w.globals.chartID !== this.w.globals.chartID) {\n            delete options2.series;\n            delete options2.yaxis;\n          }\n          w.config = Utils$1.extend(w.config, options2);\n          if (overwriteInitialConfig) {\n            w.globals.lastXAxis = options2.xaxis ? Utils$1.clone(options2.xaxis) : [];\n            w.globals.lastYAxis = options2.yaxis ? Utils$1.clone(options2.yaxis) : [];\n            w.globals.initialConfig = Utils$1.extend({}, w.config);\n            w.globals.initialSeries = w.config.series;\n          }\n          if (options2.series && (w.globals.collapsedSeriesIndices.length > 0 || w.globals.ancillaryCollapsedSeriesIndices.length > 0)) {\n            ch.series.reconcileCollapsedByName();\n          }\n        }\n        return ch.update(options2).then(() => {\n          if (chartIndex === charts.length - 1) {\n            resolve(ch);\n          }\n        }).catch(reject);\n      });\n    });\n  }\n  /**\n   * Private method to update Series.\n   *\n   * @param {any[]} newSeries - New series which will override the existing\n   * @param {boolean} animate\n   */\n  _updateSeries(newSeries, animate, overwriteInitialSeries = false) {\n    return new Promise((resolve, reject) => {\n      const w = this.w;\n      w.globals.shouldAnimate = animate;\n      w.globals.dataChanged = true;\n      const prevAxisScaleSig = JSON.stringify({\n        y: (w.globals.yAxisScale || []).map((s) => s ? s.result : null),\n        xMin: w.globals.minX,\n        xMax: w.globals.maxX\n      });\n      PerformanceCache.invalidateSelectors(w);\n      if (animate && w.config.chart.animations.enabled) {\n        this.ctx.series.getPreviousPaths();\n      }\n      const prevSeriesCount = w.config.series.length;\n      const prevDataLengths = w.config.series.map(\n        (s) => {\n          var _a, _b;\n          return (_b = (_a = s == null ? void 0 : s.data) == null ? void 0 : _a.length) != null ? _b : 0;\n        }\n      );\n      w.globals.dataReducerRawSeries = null;\n      this.ctx.data.resetParsingFlags();\n      const parsedState = this.ctx.data.parseData(newSeries);\n      this.ctx._writeParsedSeriesData(parsedState.seriesData);\n      this.ctx._writeParsedRangeData(parsedState.rangeData);\n      this.ctx._writeParsedCandleData(parsedState.candleData);\n      this.ctx._writeParsedLabelData(parsedState.labelData);\n      this.ctx._writeParsedAxisFlags(parsedState.axisFlags);\n      if (overwriteInitialSeries) {\n        if (w.globals.initialConfig) {\n          w.globals.initialConfig.series = w.config.series;\n        }\n        w.globals.initialSeries = w.config.series;\n      }\n      if (this._canUseFastPath(newSeries, prevSeriesCount, prevDataLengths, w)) {\n        return this.ctx.fastUpdate(animate, prevAxisScaleSig).then(() => {\n          resolve(this.ctx);\n        }).catch(reject);\n      }\n      if (this.ctx._updateStats) this.ctx._updateStats.full++;\n      return this.ctx.update().then(() => {\n        resolve(this.ctx);\n      }).catch(reject);\n    });\n  }\n  /**\n   * Returns true if the data-only fast path can be used for this update.\n   * Fast path skips rebuilding grid, axes, legend, annotations, and tooltip DOM.\n   *\n   * Requirements:\n   * - Chart has been fully rendered (DOM exists)\n   * - Axis chart (non-axis charts like pie always need full rebuild due to radial layout)\n   * - Series count unchanged (grid column/row counts depend on it)\n   * - Per-series data lengths unchanged (the fast path preserves the axis DOM,\n   *   and a changed point count re-slots categories/ticks: with explicit\n   *   categories the axis-scale signature can still match, leaving a stale\n   *   ruler under the re-slotted marks; length changes also want the full\n   *   render so enter/exit and axis transitions run)\n   * - No series currently collapsing (collapsed series changes visible data range)\n   * - Not a combo chart (combo charts mix types and need coordinated axis recalc)\n   * - Not currently zoomed (zoomed charts have altered x-labels that need recalculation)\n   * @param {any[]} newSeries\n   * @param {number} prevSeriesCount\n   * @param {number[]} prevDataLengths\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  _canUseFastPath(newSeries, prevSeriesCount, prevDataLengths, w) {\n    if (!w.dom.elGraphical) return false;\n    if (!w.globals.axisCharts) return false;\n    if (newSeries.length !== prevSeriesCount) return false;\n    if (newSeries.some(\n      (s, i) => {\n        var _a, _b;\n        return ((_b = (_a = s == null ? void 0 : s.data) == null ? void 0 : _a.length) != null ? _b : 0) !== prevDataLengths[i];\n      }\n    )) {\n      return false;\n    }\n    if (w.globals.collapsedSeries.length > 0) return false;\n    if (w.globals.ancillaryCollapsedSeries.length > 0) return false;\n    if (w.globals.risingSeries.length > 0) return false;\n    if (w.globals.comboCharts) return false;\n    if (w.interact.zoomed) return false;\n    return true;\n  }\n  /**\n   * @param {any} s\n   * @param {number} i\n   */\n  _extendSeries(s, i) {\n    const w = this.w;\n    const ser = w.config.series[i];\n    return __spreadProps(__spreadValues(\n      {},\n      /** @type {Record<string,any>} */\n      w.config.series[i]\n    ), {\n      name: s.name ? s.name : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.name\n      ),\n      color: s.color ? s.color : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.color\n      ),\n      type: s.type ? s.type : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.type\n      ),\n      group: s.group ? s.group : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.group\n      ),\n      hidden: typeof s.hidden !== \"undefined\" ? s.hidden : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.hidden\n      ),\n      data: s.data ? s.data : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.data\n      ),\n      zIndex: typeof s.zIndex !== \"undefined\" ? s.zIndex : i\n    });\n  }\n  /**\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  toggleDataPointSelection(seriesIndex, dataPointIndex) {\n    const w = this.w;\n    let elPath = null;\n    const parent = `.apexcharts-series[data\\\\:realIndex='${seriesIndex}']`;\n    if (w.globals.axisCharts) {\n      elPath = w.dom.Paper.findOne(\n        `${parent} path[j='${dataPointIndex}'], ${parent} circle[j='${dataPointIndex}'], ${parent} rect[j='${dataPointIndex}']`\n      );\n    } else {\n      if (typeof dataPointIndex === \"undefined\") {\n        elPath = w.dom.Paper.findOne(`${parent} path[j='${seriesIndex}']`);\n        if (w.config.chart.type === \"pie\" || w.config.chart.type === \"polarArea\" || w.config.chart.type === \"donut\") {\n          this.ctx.pie.pieClicked(seriesIndex);\n        }\n      }\n    }\n    if (elPath) {\n      const graphics = new Graphics(this.w);\n      graphics.pathMouseDown(\n        elPath,\n        /** @type {any} */\n        null\n      );\n    } else {\n      console.warn(\"toggleDataPointSelection: Element not found\");\n      return null;\n    }\n    return elPath.node ? elPath.node : null;\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  forceXAxisUpdate(options2) {\n    const w = this.w;\n    const minmax = [\"min\", \"max\"];\n    minmax.forEach((a) => {\n      if (typeof options2.xaxis[a] !== \"undefined\") {\n        w.config.xaxis[a] = options2.xaxis[a];\n        w.globals.lastXAxis[a] = options2.xaxis[a];\n      }\n    });\n    if (options2.xaxis.categories && options2.xaxis.categories.length) {\n      w.config.xaxis.categories = options2.xaxis.categories;\n    }\n    if (w.config.xaxis.convertedCatToNumeric) {\n      const defaults = new Defaults(options2);\n      options2 = defaults.convertCatToNumericXaxis(options2, this.ctx);\n    }\n    return options2;\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  forceYAxisUpdate(options2) {\n    if (options2.chart && options2.chart.stacked && options2.chart.stackType === \"100%\") {\n      if (Array.isArray(options2.yaxis)) {\n        options2.yaxis.forEach(\n          (yaxe, index) => {\n            options2.yaxis[index].min = 0;\n            options2.yaxis[index].max = 100;\n          }\n        );\n      } else {\n        options2.yaxis.min = 0;\n        options2.yaxis.max = 100;\n      }\n    }\n    return options2;\n  }\n  /**\n   * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined.\n   * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max\n   * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally\n   * The function also accepts an object {xaxis, yaxis} which when present is set as the new xaxis/yaxis\n   * @param {Record<string, any>} opts\n   */\n  revertDefaultAxisMinMax(opts) {\n    const w = this.w;\n    let xaxis = w.globals.lastXAxis;\n    let yaxis = w.globals.lastYAxis;\n    if (opts && opts.xaxis) {\n      xaxis = opts.xaxis;\n    }\n    if (opts && opts.yaxis) {\n      yaxis = opts.yaxis;\n    }\n    const _xaxis = (\n      /** @type {any} */\n      xaxis\n    );\n    w.config.xaxis.min = _xaxis.min;\n    w.config.xaxis.max = _xaxis.max;\n    const getLastYAxis = (index) => {\n      if (typeof yaxis[index] !== \"undefined\") {\n        const _y = (\n          /** @type {any} */\n          yaxis[index]\n        );\n        w.config.yaxis[index].min = _y.min;\n        w.config.yaxis[index].max = _y.max;\n      }\n    };\n    w.config.yaxis.map((yaxe, index) => {\n      if (w.interact.zoomed) {\n        getLastYAxis(index);\n      } else {\n        if (typeof yaxis[index] !== \"undefined\") {\n          getLastYAxis(index);\n        } else {\n          if (typeof this.ctx.opts.yaxis[index] !== \"undefined\") {\n            yaxe.min = this.ctx.opts.yaxis[index].min;\n            yaxe.max = this.ctx.opts.yaxis[index].max;\n          }\n        }\n      }\n    });\n  }\n}\nclass Utils2 {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n  }\n  /**\n   ** When hovering over series, you need to capture which series is being hovered on.\n   ** This function will return both capturedseries index as well as inner index of that series\n   * @memberof Utils\n   * @param {{ hoverArea: any, elGrid: any, clientX: any, clientY: any, context?: any }} opts\n   */\n  getNearestValues({ hoverArea, elGrid, clientX, clientY }) {\n    var _a, _b;\n    const w = this.w;\n    const seriesBound = elGrid.getBoundingClientRect();\n    const hoverWidth = seriesBound.width;\n    const hoverHeight = seriesBound.height;\n    let xDivisor = hoverWidth / (w.globals.dataPoints - 1);\n    const yDivisor = hoverHeight / w.globals.dataPoints;\n    const hasBars = this.hasBars();\n    if ((w.globals.comboCharts || hasBars) && !w.config.xaxis.convertedCatToNumeric) {\n      xDivisor = hoverWidth / w.globals.dataPoints;\n    }\n    const hoverX = clientX - seriesBound.left - w.globals.barPadForNumericAxis;\n    const hoverY = clientY - seriesBound.top;\n    const notInRect = hoverX < 0 || hoverY < 0 || hoverX > hoverWidth || hoverY > hoverHeight;\n    if (notInRect) {\n      hoverArea.classList.remove(\"hovering-zoom\");\n      hoverArea.classList.remove(\"hovering-pan\");\n    } else {\n      if (w.interact.zoomEnabled) {\n        hoverArea.classList.remove(\"hovering-pan\");\n        hoverArea.classList.add(\"hovering-zoom\");\n      } else if (w.interact.panEnabled) {\n        hoverArea.classList.remove(\"hovering-zoom\");\n        hoverArea.classList.add(\"hovering-pan\");\n      }\n    }\n    let j = Math.round(hoverX / xDivisor);\n    const jHorz = Math.floor(hoverY / yDivisor);\n    if (hasBars && !w.config.xaxis.convertedCatToNumeric) {\n      j = Math.ceil(hoverX / xDivisor);\n      j = j - 1;\n    }\n    let capturedSeries = null;\n    let closest = null;\n    let seriesXValArr = w.globals.seriesXvalues.map(\n      (seriesXVal) => {\n        return seriesXVal.filter(\n          (s) => Utils$1.isNumber(s)\n        );\n      }\n    );\n    const seriesYValArr = w.globals.seriesYvalues.map(\n      (seriesYVal) => {\n        return seriesYVal.filter(\n          (s) => Utils$1.isNumber(s)\n        );\n      }\n    );\n    if (w.axisFlags.isXNumeric) {\n      const chartGridEl = this.ttCtx.getElGrid();\n      if (!chartGridEl) return { hoverX, hoverY };\n      const chartGridElBoundingRect = chartGridEl.getBoundingClientRect();\n      const transformedHoverX = hoverX * (chartGridElBoundingRect.width / hoverWidth);\n      const transformedHoverY = hoverY * (chartGridElBoundingRect.height / hoverHeight);\n      closest = this.closestInMultiArray(\n        transformedHoverX,\n        transformedHoverY,\n        seriesXValArr,\n        seriesYValArr\n      );\n      capturedSeries = closest.index;\n      j = (_a = closest.j) != null ? _a : 0;\n      if (capturedSeries !== null && w.globals.hasNullValues) {\n        seriesXValArr = w.globals.seriesXvalues[capturedSeries];\n        closest = this.closestInArray(transformedHoverX, seriesXValArr);\n        j = (_b = closest.j) != null ? _b : 0;\n      }\n    }\n    w.interact.capturedSeriesIndex = capturedSeries === null ? -1 : capturedSeries;\n    if (!j || j < 1) j = 0;\n    if (w.globals.isBarHorizontal) {\n      w.interact.capturedDataPointIndex = jHorz;\n    } else {\n      w.interact.capturedDataPointIndex = j;\n    }\n    return {\n      capturedSeries,\n      j: w.globals.isBarHorizontal ? jHorz : j,\n      hoverX,\n      hoverY\n    };\n  }\n  /**\n   * @param {any[]} Xarrays\n   */\n  getFirstActiveXArray(Xarrays) {\n    const w = this.w;\n    let activeIndex = 0;\n    const firstActiveSeriesIndex = Xarrays.map(\n      (xarr, index) => {\n        return xarr.length > 0 ? index : -1;\n      }\n    );\n    for (let a = 0; a < firstActiveSeriesIndex.length; a++) {\n      if (firstActiveSeriesIndex[a] !== -1 && w.globals.collapsedSeriesIndices.indexOf(a) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(a) === -1) {\n        activeIndex = firstActiveSeriesIndex[a];\n        break;\n      }\n    }\n    return activeIndex;\n  }\n  /**\n   * @param {number} hoverX\n   * @param {number} hoverY\n   * @param {any[]} Xarrays\n   * @param {any[]} Yarrays\n   */\n  closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) {\n    const w = this.w;\n    const isActiveSeries = (seriesIndex) => {\n      return w.globals.collapsedSeriesIndices.indexOf(seriesIndex) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(seriesIndex) === -1;\n    };\n    const chartType = w.config.chart.type;\n    const isLineArea = !w.globals.comboCharts && (chartType === \"line\" || chartType === \"area\");\n    let closestDist = Infinity;\n    let closestSeriesIndex = null;\n    let closestPointIndex = null;\n    if (w.globals.allSeriesHasEqualX) {\n      let bucketDistX = Infinity;\n      for (let i = 0; i < Xarrays.length; i++) {\n        if (!isActiveSeries(i)) continue;\n        const xArr = Xarrays[i];\n        const yArr = Yarrays[i];\n        const len = Math.min(xArr.length, yArr.length);\n        for (let j = 0; j < len; j++) {\n          const distX = Math.abs(hoverX - xArr[j]);\n          if (distX < bucketDistX) {\n            bucketDistX = distX;\n            closestPointIndex = j;\n          }\n        }\n      }\n      if (closestPointIndex !== null) {\n        if (isLineArea) {\n          let bestSegDist = Infinity;\n          for (let i = 0; i < Xarrays.length; i++) {\n            if (!isActiveSeries(i)) continue;\n            const xArr = Xarrays[i];\n            const yArr = Yarrays[i];\n            const len = Math.min(xArr.length, yArr.length);\n            if (len < 2) {\n              const yVal = yArr[closestPointIndex];\n              if (typeof yVal !== \"number\") continue;\n              const d = Math.abs(hoverY - yVal);\n              if (d < bestSegDist) {\n                bestSegDist = d;\n                closestSeriesIndex = i;\n              }\n              continue;\n            }\n            for (let j = 0; j < len - 1; j++) {\n              const seg = this._distanceToSegment(\n                hoverX,\n                hoverY,\n                xArr[j],\n                yArr[j],\n                xArr[j + 1],\n                yArr[j + 1]\n              );\n              if (seg.dist < bestSegDist) {\n                bestSegDist = seg.dist;\n                closestSeriesIndex = i;\n              }\n            }\n          }\n        } else {\n          let bestY = Infinity;\n          for (let i = 0; i < Xarrays.length; i++) {\n            if (!isActiveSeries(i)) continue;\n            const yVal = Yarrays[i][closestPointIndex];\n            if (typeof yVal !== \"number\") continue;\n            const distY = Math.abs(hoverY - yVal);\n            if (distY < bestY) {\n              bestY = distY;\n              closestSeriesIndex = i;\n            }\n          }\n        }\n      }\n      return {\n        index: closestSeriesIndex,\n        j: closestPointIndex\n      };\n    }\n    for (let i = 0; i < Xarrays.length; i++) {\n      if (!isActiveSeries(i)) {\n        continue;\n      }\n      const xArr = Xarrays[i];\n      const yArr = Yarrays[i];\n      const len = Math.min(xArr.length, yArr.length);\n      if (isLineArea && len >= 2) {\n        for (let j = 0; j < len - 1; j++) {\n          const seg = this._distanceToSegment(\n            hoverX,\n            hoverY,\n            xArr[j],\n            yArr[j],\n            xArr[j + 1],\n            yArr[j + 1]\n          );\n          if (seg.dist < closestDist) {\n            closestDist = seg.dist;\n            closestSeriesIndex = i;\n            closestPointIndex = seg.t < 0.5 ? j : j + 1;\n          }\n        }\n        continue;\n      }\n      for (let j = 0; j < len; j++) {\n        const xVal = xArr[j];\n        const distX = hoverX - xVal;\n        const yVal = yArr[j];\n        const distY = hoverY - yVal;\n        const dist = Math.sqrt(distX * distX + distY * distY);\n        if (dist < closestDist) {\n          closestDist = dist;\n          closestSeriesIndex = i;\n          closestPointIndex = j;\n        }\n      }\n    }\n    return {\n      index: closestSeriesIndex,\n      j: closestPointIndex\n    };\n  }\n  /**\n   * Perpendicular distance from point (px, py) to the line segment\n   * (ax, ay) → (bx, by). Returns the distance plus the projection\n   * parameter t (0 = at A, 1 = at B, clamped) so callers know which\n   * endpoint the projection landed nearest.\n   * @param {number} px\n   * @param {number} py\n   * @param {number} ax\n   * @param {number} ay\n   * @param {number} bx\n   * @param {number} by\n   * @returns {{ dist: number, t: number }}\n   */\n  _distanceToSegment(px, py, ax, ay, bx, by) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const lenSq = dx * dx + dy * dy;\n    let t = lenSq === 0 ? 0 : ((px - ax) * dx + (py - ay) * dy) / lenSq;\n    if (t < 0) t = 0;\n    else if (t > 1) t = 1;\n    const cx = ax + t * dx;\n    const cy = ay + t * dy;\n    const ex = px - cx;\n    const ey = py - cy;\n    return { dist: Math.sqrt(ex * ex + ey * ey), t };\n  }\n  /**\n   * @param {number} val\n   * @param {any[]} arr\n   */\n  closestInArray(val, arr) {\n    const curr = arr[0];\n    let currIndex = null;\n    let diff = Math.abs(val - curr);\n    for (let i = 0; i < arr.length; i++) {\n      const newdiff = Math.abs(val - arr[i]);\n      if (newdiff < diff) {\n        diff = newdiff;\n        currIndex = i;\n      }\n    }\n    return {\n      j: currIndex\n    };\n  }\n  /**\n   * When there are multiple series, it is possible to have different x values for each series.\n   * But it may be possible in those multiple series, that there is same x value for 2 or more\n   * series.\n   * @memberof Utils\n   * @param {number} j - the inner index of series (series[i][j])\n   * @return {boolean}\n   */\n  isXoverlap(j) {\n    const w = this.w;\n    const xSameForAllSeriesJArr = [];\n    const seriesX = w.seriesData.seriesX.filter(\n      (s) => typeof s[0] !== \"undefined\"\n    );\n    if (seriesX.length > 0) {\n      for (let i = 0; i < seriesX.length - 1; i++) {\n        if (typeof seriesX[i][j] !== \"undefined\" && typeof seriesX[i + 1][j] !== \"undefined\") {\n          if (seriesX[i][j] !== seriesX[i + 1][j]) {\n            xSameForAllSeriesJArr.push(\"unEqual\");\n          }\n        }\n      }\n    }\n    if (xSameForAllSeriesJArr.length === 0) {\n      return true;\n    }\n    return false;\n  }\n  isInitialSeriesSameLen() {\n    var _a, _b, _c, _d;\n    let sameLen = true;\n    const initialSeries = (\n      /** @type {any[]} */\n      ((_b = (_a = this.w.globals._initialSeriesPeek) != null ? _a : this.w.globals.initialSeries) == null ? void 0 : _b.filter(\n        /**\n         * @param {Record<string, any>} s\n         * @param {number} i\n         */\n        (s, i) => {\n          var _a2;\n          return !((_a2 = this.w.globals.collapsedSeriesIndices) == null ? void 0 : _a2.includes(i));\n        }\n      )) || []\n    );\n    for (let i = 0; i < initialSeries.length - 1; i++) {\n      if (!((_c = initialSeries[i]) == null ? void 0 : _c.data) || !((_d = initialSeries[i + 1]) == null ? void 0 : _d.data)) return true;\n      if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) {\n        sameLen = false;\n        break;\n      }\n    }\n    return sameLen;\n  }\n  /**\n   * @param {any[]} allbars\n   */\n  getBarsHeight(allbars) {\n    const bars = [...allbars];\n    const totalHeight = bars.reduce((acc, bar) => acc + bar.getBBox().height, 0);\n    return totalHeight;\n  }\n  /**\n   * @param {number} capturedSeries\n   */\n  getElMarkers(capturedSeries) {\n    if (typeof capturedSeries == \"number\") {\n      return this.w.dom.baseEl.querySelectorAll(\n        `.apexcharts-series[data\\\\:realIndex='${capturedSeries}'] .apexcharts-series-markers-wrap > *`\n      );\n    }\n    return this.w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series-markers-wrap > *\"\n    );\n  }\n  getAllMarkers(filterCollapsed = false) {\n    let markersWraps = (\n      /** @type {any[]} */\n      [\n        ...this.w.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap\")\n      ]\n    );\n    if (filterCollapsed) {\n      markersWraps = markersWraps.filter((m) => {\n        const realIndex = Number(m.getAttribute(\"data:realIndex\"));\n        return this.w.globals.collapsedSeriesIndices.indexOf(realIndex) === -1;\n      });\n    }\n    markersWraps.sort((a, b) => {\n      var indexA = Number(a.getAttribute(\"data:realIndex\"));\n      var indexB = Number(b.getAttribute(\"data:realIndex\"));\n      return indexB < indexA ? 1 : indexB > indexA ? -1 : 0;\n    });\n    const markers = [];\n    markersWraps.forEach((m) => {\n      markers.push(m.querySelector(\".apexcharts-marker\"));\n    });\n    return markers;\n  }\n  /**\n   * @param {number} capturedSeries\n   */\n  hasMarkers(capturedSeries) {\n    const markers = this.getElMarkers(capturedSeries);\n    return markers.length > 0;\n  }\n  /**\n   * @param {any} point\n   * @param {number} size\n   */\n  getPathFromPoint(point, size) {\n    const cx = Number(point.getAttribute(\"cx\"));\n    const cy = Number(point.getAttribute(\"cy\"));\n    const shape = point.getAttribute(\"shape\");\n    return new Graphics(this.w).getMarkerPath(cx, cy, shape, size);\n  }\n  getElBars() {\n    return this.w.dom.baseEl.querySelectorAll(\n      \".apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-violin-series, .apexcharts-rangebar-series\"\n    );\n  }\n  hasBars() {\n    const bars = this.getElBars();\n    return bars.length > 0;\n  }\n  /**\n   * @param {number} index\n   */\n  getHoverMarkerSize(index) {\n    const w = this.w;\n    let hoverSize = w.config.markers.hover.size;\n    if (hoverSize === void 0) {\n      hoverSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n    }\n    return hoverSize;\n  }\n  /**\n   * @param {string} state\n   */\n  toggleAllTooltipSeriesGroups(state) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.allTooltipSeriesGroups.length === 0) {\n      ttCtx.allTooltipSeriesGroups = w.dom.baseEl.querySelectorAll(\n        \".apexcharts-tooltip-series-group\"\n      );\n    }\n    const allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups;\n    for (let i = 0; i < allTooltipSeriesGroups.length; i++) {\n      if (state === \"enable\") {\n        allTooltipSeriesGroups[i].classList.add(\"apexcharts-active\");\n        allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display;\n      } else {\n        allTooltipSeriesGroups[i].classList.remove(\"apexcharts-active\");\n        allTooltipSeriesGroups[i].style.display = \"none\";\n      }\n    }\n  }\n}\nclass Labels {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n    this.tooltipUtil = new Utils2(tooltipContext);\n  }\n  /** @param {{ shared?: boolean, ttItems?: any, i?: number, j?: any, y1?: any, y2?: any, e?: any }} opts */\n  drawSeriesTexts({ shared = true, ttItems, i = 0, j = null, y1, y2, e }) {\n    const w = this.w;\n    if (w.config.tooltip.custom !== void 0) {\n      this.handleCustomTooltip({ i, j, y1, y2, w });\n    } else {\n      this.toggleActiveInactiveSeries(shared, i);\n    }\n    const values = this.getValuesToPrint({\n      i,\n      j\n    });\n    this.printLabels({\n      i,\n      j,\n      values,\n      ttItems,\n      shared,\n      e\n    });\n    const tooltipEl = this.ttCtx.getElTooltip();\n    if (tooltipEl) {\n      this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width;\n      this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height;\n    }\n  }\n  /** @param {{i: any, j: any, values: any, ttItems: any, shared: any, e: any}} opts */\n  printLabels({ i, j, values, ttItems, shared, e }) {\n    const w = this.w;\n    const { xVal, zVal, xAxisTTVal } = values;\n    const seriesLen = w.seriesData.series.length;\n    const basePColor = j !== null && w.config.plotOptions.bar.distributed ? w.globals.colors[j] : w.globals.colors[i];\n    for (let t = 0; t < seriesLen; t++) {\n      const tIndex = w.config.tooltip.inverseOrder ? seriesLen - 1 - t : t;\n      const row = this.computeSeriesRow({\n        i,\n        j,\n        t,\n        tIndex,\n        shared,\n        e,\n        basePColor\n      });\n      this.DOMHandling({\n        i,\n        t: tIndex,\n        j,\n        ttItems,\n        values: {\n          val: row.val,\n          goalVals: row.goalVals,\n          xVal,\n          xAxisTTVal,\n          zVal\n        },\n        seriesName: row.seriesName,\n        shared,\n        pColor: row.pColor\n      });\n    }\n  }\n  /**\n   * Compute the per-series row values (seriesName, val, goalVals, pColor)\n   * for one iteration of the tooltip's series loop. Extracted from\n   * printLabels() to keep the outer loop scannable.\n   * @param {{i: number, j: any, t: number, tIndex: number, shared: boolean, e: any, basePColor: string}} opts\n   */\n  computeSeriesRow({ i, j, tIndex, shared, e, basePColor }) {\n    const w = this.w;\n    let f = this.getFormatters(i);\n    let pColor = basePColor;\n    let val;\n    let goalVals = (\n      /** @type {any[]} */\n      []\n    );\n    let seriesName = w.config.chart.type === \"treemap\" ? f.yLbTitleFormatter(\n      String(\n        /** @type {any} */\n        w.config.series[i].data[j].x\n      ),\n      {\n        series: w.seriesData.series,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      }\n    ) : this.getSeriesName({\n      fn: f.yLbTitleFormatter,\n      index: i,\n      seriesIndex: i,\n      j\n    });\n    if (w.globals.axisCharts) {\n      if (shared) {\n        f = this.getFormatters(tIndex);\n        seriesName = this.getSeriesName({\n          fn: f.yLbTitleFormatter,\n          index: tIndex,\n          seriesIndex: i,\n          j\n        });\n        pColor = w.globals.colors[tIndex];\n        val = this.formatYValue(f, tIndex, j);\n        goalVals = this.formatGoalVals(f, tIndex, j);\n      } else {\n        pColor = this.resolvePatternColor(e, pColor);\n        val = this.formatYValue(f, i, j);\n        goalVals = this.formatGoalVals(f, i, j);\n      }\n    }\n    if (j === null) {\n      val = f.yLbFormatter(w.seriesData.series[i], __spreadProps(__spreadValues({}, w), {\n        seriesIndex: i,\n        dataPointIndex: i\n      }));\n    }\n    return { seriesName, val, goalVals, pColor };\n  }\n  /**\n   * Run the y-value formatter for a given (seriesIndex, dataPointIndex),\n   * handling the range-data case (start - end concatenation).\n   * @param {{yLbFormatter: Function}} f\n   * @param {number} index\n   * @param {any} j\n   */\n  formatYValue(f, index, j) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    if (w.axisFlags.isRangeData) {\n      return f.yLbFormatter((_b = (_a = w.rangeData.seriesRangeStart) == null ? void 0 : _a[index]) == null ? void 0 : _b[j], {\n        series: w.rangeData.seriesRangeStart,\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      }) + \" - \" + f.yLbFormatter((_d = (_c = w.rangeData.seriesRangeEnd) == null ? void 0 : _c[index]) == null ? void 0 : _d[j], {\n        series: w.rangeData.seriesRangeEnd,\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      });\n    }\n    return f.yLbFormatter(w.seriesData.series[index][j], {\n      series: w.seriesData.series,\n      seriesIndex: index,\n      dataPointIndex: j,\n      w\n    });\n  }\n  /**\n   * Format the goal-line values attached to a given (seriesIndex, dataPointIndex).\n   * Returns an empty array when no goals exist.\n   * @param {{yLbFormatter: Function}} f\n   * @param {number} index\n   * @param {any} j\n   */\n  formatGoalVals(f, index, j) {\n    var _a;\n    const w = this.w;\n    const goals = (_a = w.seriesData.seriesGoals[index]) == null ? void 0 : _a[j];\n    if (!Array.isArray(goals)) return [];\n    return goals.map((goal) => ({\n      attrs: goal,\n      val: f.yLbFormatter(goal.value, {\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      })\n    }));\n  }\n  /**\n   * When the hovered element has a pattern fill (url(#…Pattern…)), reach\n   * into the pattern's first child to pull a stroke color. Otherwise\n   * return the raw fill attribute or the fallback.\n   * @param {any} e\n   * @param {string} fallback\n   */\n  resolvePatternColor(e, fallback) {\n    var _a, _b, _c;\n    const w = this.w;\n    const targetFill = (_a = e == null ? void 0 : e.target) == null ? void 0 : _a.getAttribute(\"fill\");\n    if (!targetFill) return fallback;\n    if (targetFill.indexOf(\"url\") === -1) return targetFill;\n    if (targetFill.indexOf(\"Pattern\") === -1) return fallback;\n    const patternEl = w.dom.baseEl.querySelector(\n      targetFill.substr(4).slice(0, -1)\n    );\n    return (_c = (_b = patternEl == null ? void 0 : patternEl.childNodes[0]) == null ? void 0 : _b.getAttribute(\"stroke\")) != null ? _c : fallback;\n  }\n  /**\n   * @param {number} i\n   */\n  getFormatters(i) {\n    const w = this.w;\n    let yLbFormatter = w.formatters.yLabelFormatters[i];\n    let yLbTitleFormatter;\n    if (w.formatters.ttVal !== void 0) {\n      if (Array.isArray(w.formatters.ttVal)) {\n        yLbFormatter = /** @type {any} */\n        w.formatters.ttVal[i] && /** @type {any} */\n        w.formatters.ttVal[i].formatter;\n        yLbTitleFormatter = /** @type {any} */\n        w.formatters.ttVal[i] && /** @type {any} */\n        w.formatters.ttVal[i].title && /** @type {any} */\n        w.formatters.ttVal[i].title.formatter;\n      } else {\n        yLbFormatter = /** @type {any} */\n        w.formatters.ttVal.formatter;\n        if (typeof /** @type {any} */\n        w.formatters.ttVal.title.formatter === \"function\") {\n          yLbTitleFormatter = /** @type {any} */\n          w.formatters.ttVal.title.formatter;\n        }\n      }\n    } else {\n      yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n    }\n    if (typeof yLbFormatter !== \"function\") {\n      if (w.formatters.yLabelFormatters[0]) {\n        yLbFormatter = w.formatters.yLabelFormatters[0];\n      } else {\n        yLbFormatter = function(label) {\n          return label;\n        };\n      }\n    }\n    if (typeof yLbTitleFormatter !== \"function\") {\n      yLbTitleFormatter = function(label) {\n        return label ? label + \": \" : \"\";\n      };\n    }\n    return {\n      yLbFormatter,\n      yLbTitleFormatter\n    };\n  }\n  /** @param {{fn: any, index: any, seriesIndex: any, j: any}} opts */\n  getSeriesName({ fn, index, seriesIndex, j }) {\n    const w = this.w;\n    return fn(String(w.seriesData.seriesNames[index]), {\n      series: w.seriesData.series,\n      seriesIndex,\n      dataPointIndex: j,\n      w\n    });\n  }\n  /** @param {{ t?: any, j?: any, i?: any, ttItems?: any, values?: any, seriesName?: any, shared?: any, pColor?: any }} opts */\n  DOMHandling({ t, j, ttItems, values, seriesName, shared, pColor }) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const { val, goalVals, xVal, xAxisTTVal, zVal } = values;\n    if (!ttItems || !ttItems[t]) return;\n    let ttItemsChildren = null;\n    ttItemsChildren = ttItems[t].children;\n    if (w.config.tooltip.fillSeriesColor) {\n      ttItems[t].style.backgroundColor = pColor;\n      ttItemsChildren[0].style.display = \"none\";\n    }\n    if (ttCtx.showTooltipTitle) {\n      if (ttCtx.tooltipTitle === null) {\n        ttCtx.tooltipTitle = w.dom.baseEl.querySelector(\n          \".apexcharts-tooltip-title\"\n        );\n      }\n      if (ttCtx.tooltipTitle) {\n        ttCtx.tooltipTitle.innerHTML = xVal;\n      }\n    }\n    if (ttCtx.isXAxisTooltipEnabled) {\n      if (ttCtx.xaxisTooltipText) {\n        ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== \"\" ? xAxisTTVal : xVal;\n      }\n    }\n    const ttYLabel = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-y-label\"\n    );\n    if (ttYLabel) {\n      ttYLabel.innerHTML = seriesName ? seriesName : \"\";\n    }\n    const ttYVal = ttItems[t].querySelector(\".apexcharts-tooltip-text-y-value\");\n    if (ttYVal) {\n      ttYVal.innerHTML = typeof val !== \"undefined\" ? val : \"\";\n    }\n    if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains(\"apexcharts-tooltip-marker\")) {\n      if (w.config.tooltip.marker.fillColors && Array.isArray(w.config.tooltip.marker.fillColors)) {\n        pColor = w.config.tooltip.marker.fillColors[t];\n      }\n      if (w.config.tooltip.fillSeriesColor) {\n        ttItemsChildren[0].style.backgroundColor = pColor;\n      } else {\n        ttItemsChildren[0].style.color = pColor;\n      }\n    }\n    if (!w.config.tooltip.marker.show) {\n      ttItemsChildren[0].style.display = \"none\";\n    }\n    const ttGLabel = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-goals-label\"\n    );\n    const ttGVal = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-goals-value\"\n    );\n    if (goalVals.length && w.seriesData.seriesGoals[t]) {\n      const createGoalsHtml = () => {\n        let gLabels = \"<div>\";\n        let gVals = \"<div>\";\n        goalVals.forEach((goal) => {\n          gLabels += ` <div style=\"display: flex\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: ${goal.attrs.strokeColor}; height: 3px; border-radius: 0; top: 5px;\"></span> ${goal.attrs.name}</div>`;\n          gVals += `<div>${goal.val}</div>`;\n        });\n        ttGLabel.innerHTML = gLabels + `</div>`;\n        ttGVal.innerHTML = gVals + `</div>`;\n      };\n      if (shared) {\n        if (w.seriesData.seriesGoals[t][j] && Array.isArray(w.seriesData.seriesGoals[t][j])) {\n          createGoalsHtml();\n        } else {\n          ttGLabel.innerHTML = \"\";\n          ttGVal.innerHTML = \"\";\n        }\n      } else {\n        createGoalsHtml();\n      }\n    } else {\n      ttGLabel.innerHTML = \"\";\n      ttGVal.innerHTML = \"\";\n    }\n    if (zVal !== null) {\n      const ttZLabel = ttItems[t].querySelector(\n        \".apexcharts-tooltip-text-z-label\"\n      );\n      ttZLabel.innerHTML = w.config.tooltip.z.title;\n      const ttZVal = ttItems[t].querySelector(\n        \".apexcharts-tooltip-text-z-value\"\n      );\n      ttZVal.innerHTML = typeof zVal !== \"undefined\" ? zVal : \"\";\n    }\n    if (shared && ttItemsChildren[0]) {\n      if (w.config.tooltip.hideEmptySeries) {\n        const ttItemMarker = ttItems[t].querySelector(\n          \".apexcharts-tooltip-marker\"\n        );\n        const ttItemText = ttItems[t].querySelector(\".apexcharts-tooltip-text\");\n        if (parseFloat(val) == 0) {\n          ttItemMarker.style.display = \"none\";\n          ttItemText.style.display = \"none\";\n        } else {\n          ttItemMarker.style.display = \"block\";\n          ttItemText.style.display = \"block\";\n        }\n      }\n      if (typeof val === \"undefined\" || val === null || w.globals.ancillaryCollapsedSeriesIndices.indexOf(t) > -1 || w.globals.collapsedSeriesIndices.indexOf(t) > -1 || Array.isArray(ttCtx.tConfig.enabledOnSeries) && ttCtx.tConfig.enabledOnSeries.indexOf(t) === -1) {\n        ttItemsChildren[0].parentNode.style.display = \"none\";\n      } else {\n        ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display;\n      }\n    } else {\n      if (Array.isArray(ttCtx.tConfig.enabledOnSeries) && ttCtx.tConfig.enabledOnSeries.indexOf(t) === -1) {\n        ttItemsChildren[0].parentNode.style.display = \"none\";\n      }\n    }\n  }\n  /**\n   * @param {boolean} shared\n   * @param {number} i\n   */\n  toggleActiveInactiveSeries(shared, i) {\n    const w = this.w;\n    if (shared) {\n      this.tooltipUtil.toggleAllTooltipSeriesGroups(\"enable\");\n    } else {\n      this.tooltipUtil.toggleAllTooltipSeriesGroups(\"disable\");\n      const firstTooltipSeriesGroup = w.dom.baseEl.querySelector(\n        `.apexcharts-tooltip-series-group-${i}`\n      );\n      if (firstTooltipSeriesGroup) {\n        const ftsGroup = (\n          /** @type {HTMLElement} */\n          firstTooltipSeriesGroup\n        );\n        ftsGroup.classList.add(\"apexcharts-active\");\n        ftsGroup.style.display = w.config.tooltip.items.display;\n      }\n    }\n  }\n  /** @param {{i: any, j: any}} opts */\n  getValuesToPrint({ i, j }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const filteredSeriesX = w.seriesData.seriesX.map(\n      (ser) => ser.length > 0 ? ser : []\n    );\n    let xVal = \"\";\n    let xAxisTTVal = \"\";\n    let zVal = null;\n    let val = null;\n    const customFormatterOpts = {\n      series: w.seriesData.series,\n      seriesIndex: i,\n      dataPointIndex: j,\n      w\n    };\n    const zFormatter = w.formatters.ttZFormatter;\n    if (j === null) {\n      val = w.seriesData.series[i];\n    } else {\n      if (w.axisFlags.isXNumeric && w.config.chart.type !== \"treemap\") {\n        xVal = filteredSeriesX[i][j];\n        if (filteredSeriesX[i].length === 0) {\n          const firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX);\n          xVal = filteredSeriesX[firstActiveSeriesIndex][j];\n        }\n      } else {\n        const dataFormat = new Data(this.w);\n        if (dataFormat.isFormatXY()) {\n          xVal = typeof /** @type {any} */\n          w.config.series[i].data[j] !== \"undefined\" ? (\n            /** @type {any} */\n            w.config.series[i].data[j].x\n          ) : \"\";\n        } else {\n          xVal = typeof w.labelData.labels[j] !== \"undefined\" ? w.labelData.labels[j] : \"\";\n        }\n      }\n    }\n    const bufferXVal = xVal;\n    if (w.axisFlags.isXNumeric && w.config.xaxis.type === \"datetime\") {\n      const xFormat = new Formatters(this.w);\n      xVal = xFormat.xLabelFormat(\n        /** @type {Function} */\n        w.formatters.ttKeyFormatter,\n        bufferXVal,\n        bufferXVal,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w: this.w\n        }\n      );\n    } else {\n      if (w.globals.isBarHorizontal) {\n        xVal = w.formatters.yLabelFormatters[0](bufferXVal, customFormatterOpts);\n      } else {\n        xVal = (_c = (_b = (_a = w.formatters).xLabelFormatter) == null ? void 0 : _b.call(_a, bufferXVal, customFormatterOpts)) != null ? _c : bufferXVal;\n      }\n    }\n    if (w.config.tooltip.x.formatter !== void 0) {\n      xVal = (_f = (_e = (_d = w.formatters).ttKeyFormatter) == null ? void 0 : _e.call(_d, bufferXVal, customFormatterOpts)) != null ? _f : bufferXVal;\n    }\n    if (w.seriesData.seriesZ.length > 0 && w.seriesData.seriesZ[i].length > 0) {\n      zVal = zFormatter == null ? void 0 : zFormatter(w.seriesData.seriesZ[i][j], w);\n    }\n    if (typeof w.config.xaxis.tooltip.formatter === \"function\") {\n      xAxisTTVal = (_h = (_g = w.formatters).xaxisTooltipFormatter) == null ? void 0 : _h.call(\n        _g,\n        bufferXVal,\n        customFormatterOpts\n      );\n    } else {\n      xAxisTTVal = xVal;\n    }\n    return {\n      val: Array.isArray(val) ? val.join(\" \") : val,\n      xVal: Array.isArray(xVal) ? xVal.join(\" \") : xVal,\n      xAxisTTVal: Array.isArray(xAxisTTVal) ? xAxisTTVal.join(\" \") : xAxisTTVal,\n      zVal\n    };\n  }\n  /** @param {{i: any, j: any, y1: any, y2: any, w: any}} opts */\n  handleCustomTooltip({ i, j, y1, y2, w }) {\n    const tooltipEl = this.ttCtx.getElTooltip();\n    let fn = w.config.tooltip.custom;\n    if (Array.isArray(fn)) {\n      fn = fn[i];\n    }\n    if (typeof fn !== \"function\") return;\n    const customTooltip = fn({\n      series: w.seriesData.series,\n      seriesIndex: i,\n      dataPointIndex: j,\n      y1,\n      y2,\n      w\n    });\n    if (tooltipEl) {\n      const arrowEl = tooltipEl.querySelector(\".apexcharts-tooltip-arrow\");\n      if (typeof customTooltip === \"string\" || typeof customTooltip === \"number\") {\n        tooltipEl.innerHTML = String(customTooltip);\n      } else if (customTooltip != null && (customTooltip instanceof Element || typeof customTooltip.nodeName === \"string\")) {\n        tooltipEl.innerHTML = \"\";\n        tooltipEl.appendChild(customTooltip.cloneNode(true));\n      }\n      if (arrowEl) tooltipEl.appendChild(arrowEl);\n    }\n  }\n}\nconst ARROW_TIP_OVERHANG = 7;\nclass Position {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.ttCtx = tooltipContext;\n    this.w = tooltipContext.w;\n  }\n  /**\n   * This will move the crosshair (the vertical/horz line that moves along with mouse)\n   * Along with this, this function also calls the xaxisMove function\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move crosshair\n   * @param {number | null} [j]\n   */\n  moveXCrosshairs(cx, j = null) {\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    let x = cx - ttCtx.xcrosshairsWidth / 2;\n    const tickAmount = w.labelData.labels.slice().length;\n    if (j !== null) {\n      x = w.layout.gridWidth / tickAmount * j;\n    }\n    if (xcrosshairs !== null && !w.globals.isBarHorizontal) {\n      xcrosshairs.setAttribute(\"x\", String(x));\n      xcrosshairs.setAttribute(\"x1\", String(x));\n      xcrosshairs.setAttribute(\"x2\", String(x));\n      xcrosshairs.setAttribute(\"y2\", String(w.layout.gridHeight));\n      xcrosshairs.classList.add(\"apexcharts-active\");\n    }\n    if (x < 0) {\n      x = 0;\n    }\n    if (x > w.layout.gridWidth) {\n      x = w.layout.gridWidth;\n    }\n    if (ttCtx.isXAxisTooltipEnabled) {\n      let tx = x;\n      if (w.config.xaxis.crosshairs.width === \"tickWidth\" || w.config.xaxis.crosshairs.width === \"barWidth\") {\n        tx = x + ttCtx.xcrosshairsWidth / 2;\n      }\n      this.moveXAxisTooltip(tx);\n    }\n  }\n  /**\n   * This will move the crosshair (the vertical/horz line that moves along with mouse)\n   * Along with this, this function also calls the xaxisMove function\n   * @memberof Position\n   * @param {number} cy - point's y position, wherever point's y is, you need to move crosshair\n   */\n  moveYCrosshairs(cy) {\n    const ttCtx = this.ttCtx;\n    if (ttCtx.ycrosshairs !== null) {\n      Graphics.setAttrs(ttCtx.ycrosshairs, {\n        y1: cy,\n        y2: cy\n      });\n    }\n    if (ttCtx.ycrosshairsHidden !== null) {\n      Graphics.setAttrs(ttCtx.ycrosshairsHidden, {\n        y1: cy,\n        y2: cy\n      });\n    }\n  }\n  /**\n   ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move\n   */\n  moveXAxisTooltip(cx) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.xaxisTooltip !== null && ttCtx.xcrosshairsWidth !== 0) {\n      ttCtx.xaxisTooltip.classList.add(\"apexcharts-active\");\n      const cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.layout.translateY + 5 + w.config.xaxis.offsetY;\n      const xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect();\n      const xaxisTTTextWidth = xaxisTTText.width;\n      cx = cx - xaxisTTTextWidth / 2;\n      if (!isNaN(cx)) {\n        cx = cx + w.layout.translateX;\n        const graphics = new Graphics(this.w);\n        const textRect = graphics.getTextRects(\n          (_b = (_a = ttCtx.xaxisTooltipText) == null ? void 0 : _a.innerHTML) != null ? _b : \"\",\n          w.config.xaxis.labels.style.fontSize\n        );\n        if (ttCtx.xaxisTooltipText) {\n          ttCtx.xaxisTooltipText.style.minWidth = textRect.width + \"px\";\n        }\n        ttCtx.xaxisTooltip.style.left = cx + \"px\";\n        ttCtx.xaxisTooltip.style.top = cy + \"px\";\n      }\n    }\n  }\n  /**\n   * @param {number} index\n   */\n  moveYAxisTooltip(index) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.yaxisTTEls === null) {\n      ttCtx.yaxisTTEls = /** @type {any[]} */\n      [\n        ...w.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\")\n      ];\n    }\n    const ycrosshairsHiddenRectY1 = parseInt(\n      (_b = (_a = ttCtx.ycrosshairsHidden) == null ? void 0 : _a.getAttribute(\"y1\")) != null ? _b : \"0\",\n      10\n    );\n    let cy = w.layout.translateY + ycrosshairsHiddenRectY1;\n    if (ttCtx.yaxisTTEls) {\n      const yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect();\n      const yAxisTTHeight = yAxisTTRect.height;\n      let cx;\n      const labelsGroup = (\n        /** @type {SVGGElement | null} */\n        w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-texts-g`\n        )\n      );\n      const elWrapRect = w.dom.elWrap.getBoundingClientRect();\n      if (labelsGroup) {\n        const lr = labelsGroup.getBoundingClientRect();\n        if (lr.width > 0) {\n          const labelsCenterInElWrap = lr.left + lr.width / 2 - elWrapRect.left;\n          cx = labelsCenterInElWrap - yAxisTTRect.width / 2;\n        }\n      }\n      if (cx == null) {\n        const GAP = 4;\n        cx = w.config.yaxis[index].opposite ? w.globals.translateYAxisX[index] + GAP : w.globals.translateYAxisX[index] - yAxisTTRect.width - GAP;\n      }\n      cy = cy - yAxisTTHeight / 2;\n      if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && cy > 0 && cy < w.layout.gridHeight) {\n        ttCtx.yaxisTTEls[index].classList.add(\"apexcharts-active\");\n        ttCtx.yaxisTTEls[index].style.top = cy + \"px\";\n        ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + \"px\";\n      } else {\n        ttCtx.yaxisTTEls[index].classList.remove(\"apexcharts-active\");\n      }\n    }\n  }\n  /**\n   ** moves the whole tooltip by changing x, y attrs\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move tooltip\n   * @param {number} cy - point's y position, wherever point's y is, you need to move tooltip\n   * @param {number | null} [markerSize] - point's size\n   */\n  moveTooltip(cx, cy, markerSize = null) {\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return;\n    const pos = this.computeTooltipPosition(cx, cy, markerSize);\n    if (pos === null) return;\n    this.applyTooltipPosition(tooltipEl, pos);\n  }\n  /**\n   * Pure-ish (reads from `this.ttCtx` + `this.w` but performs no DOM writes)\n   * computation of the tooltip box position, edge placement (for arrow),\n   * and arrow vertical offset. Returns null when inputs are not numeric.\n   *\n   * @param {number} cx\n   * @param {number} cy\n   * @param {number | null} [markerSize]\n   * @returns {{ x: number, y: number, placement: 'left'|'right', arrowY: number|null } | null}\n   */\n  computeTooltipPosition(cx, cy, markerSize = null) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipRect = ttCtx.tooltipRect;\n    const arrowEnabled = !!w.config.tooltip.arrow;\n    const pointSize = markerSize !== null ? parseFloat(String(markerSize)) : 1;\n    const ttH = tooltipRect.ttHeight || 0;\n    const ttW = tooltipRect.ttWidth || 0;\n    const cxNum = parseFloat(String(cx));\n    const cyNum = parseFloat(String(cy));\n    if (isNaN(cxNum) || isNaN(cyNum)) return null;\n    let x = cxNum + pointSize + 5;\n    const pointY = cyNum + w.layout.translateY;\n    let y = arrowEnabled ? pointY - ttH / 2 + pointSize / 2 : cyNum + pointSize / 2;\n    let placement = \"right\";\n    if (x > w.layout.gridWidth / 2) {\n      x = x - ttW - pointSize - 10;\n      placement = \"left\";\n    }\n    if (x > w.layout.gridWidth - ttW - 10) {\n      x = w.layout.gridWidth - ttW;\n    }\n    if (x < -20) {\n      x = -20;\n    }\n    if (w.config.tooltip.followCursor) {\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return null;\n      const seriesBound = elGrid.getBoundingClientRect();\n      x = ttCtx.e.clientX - seriesBound.left;\n      if (x > w.layout.gridWidth / 2) {\n        x = x - ttW;\n        placement = \"left\";\n      } else {\n        placement = \"right\";\n      }\n      y = ttCtx.e.clientY + w.layout.translateY - seriesBound.top;\n      if (y > w.layout.gridHeight / 2) {\n        y = y - ttH;\n      }\n    } else {\n      if (!w.globals.isBarHorizontal) {\n        if (arrowEnabled) {\n          const gridTop = w.layout.translateY;\n          const gridBottom = w.layout.translateY + w.layout.gridHeight;\n          if (y + ttH > gridBottom) {\n            y = gridBottom - ttH;\n          }\n          if (y < gridTop) {\n            y = gridTop;\n          }\n        } else {\n          if (ttH / 2 + y > w.layout.gridHeight) {\n            y = w.layout.gridHeight - ttH + w.layout.translateY;\n          }\n        }\n      }\n    }\n    if (isNaN(x)) return null;\n    x = x + w.layout.translateX;\n    const a11y = (_b = (_a = w.config) == null ? void 0 : _a.chart) == null ? void 0 : _b.accessibility;\n    if ((a11y == null ? void 0 : a11y.enabled) && ((_d = (_c = a11y == null ? void 0 : a11y.keyboard) == null ? void 0 : _c.navigation) == null ? void 0 : _d.enabled) && ((_g = (_f = (_e = w.dom) == null ? void 0 : _e.baseEl) == null ? void 0 : _f.querySelector) == null ? void 0 : _g.call(_f, \".apexcharts-keyboard-focused\"))) {\n      const refPointY = arrowEnabled ? pointY : cyNum;\n      const margin = (pointSize || 1) + 12;\n      const tooltipTop = y;\n      const tooltipBottom = y + ttH;\n      if (!isNaN(refPointY) && ttH > 0 && tooltipTop < refPointY + margin && tooltipBottom > refPointY - margin) {\n        y = refPointY - ttH - margin;\n        if (y < 0) {\n          y = refPointY + margin;\n        }\n      }\n    }\n    let arrowY = null;\n    if (arrowEnabled && ttH > 0) {\n      const localY = pointY - y;\n      const minArrowY = 10;\n      const maxArrowY = ttH - 10;\n      arrowY = Math.max(minArrowY, Math.min(maxArrowY, localY));\n    }\n    return { x, y, placement, arrowY };\n  }\n  /**\n   * Single DOM-writer used by every positioning path on the main tooltip.\n   * Replaces the duplicated `style.left/top` writes that previously lived\n   * in Position.moveTooltip, Tooltip.drawFixedTooltipRect, and Intersect.\n   *\n   * @param {HTMLElement} tooltipEl\n   * @param {{\n   *   x: number,\n   *   y: number,\n   *   placement?: 'left'|'right'|'top'|'bottom',\n   *   arrowY?: number|null,\n   *   arrowX?: number|null,\n   * }} pos\n   */\n  applyTooltipPosition(tooltipEl, pos) {\n    if (!tooltipEl) return;\n    const firstPaint = tooltipEl.dataset.positioned !== \"true\";\n    if (firstPaint) {\n      tooltipEl.style.transitionProperty = \"none\";\n    }\n    tooltipEl.style.left = pos.x + \"px\";\n    tooltipEl.style.top = pos.y + \"px\";\n    if (pos.placement) {\n      tooltipEl.dataset.placement = pos.placement;\n    }\n    if (pos.arrowY != null) {\n      tooltipEl.style.setProperty(\"--apx-tt-arrow-y\", pos.arrowY + \"px\");\n    }\n    if (pos.arrowX != null) {\n      tooltipEl.style.setProperty(\"--apx-tt-arrow-x\", pos.arrowX + \"px\");\n    }\n    if (firstPaint) {\n      void tooltipEl.offsetWidth;\n      tooltipEl.dataset.positioned = \"true\";\n      requestAnimationFrame(() => {\n        tooltipEl.style.transitionProperty = \"\";\n      });\n    }\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  moveMarkers(i, j) {\n    var _a;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (w.globals.markers.size[i] > 0) {\n      const allPoints = w.dom.baseEl.querySelectorAll(\n        ` .apexcharts-series[data\\\\:realIndex='${i}'] .apexcharts-marker`\n      );\n      for (let p = 0; p < allPoints.length; p++) {\n        if (parseInt((_a = allPoints[p].getAttribute(\"rel\")) != null ? _a : \"0\", 10) === j) {\n          ttCtx.marker.resetPointsSize();\n          ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]);\n        }\n      }\n    } else {\n      ttCtx.marker.resetPointsSize();\n      this.moveDynamicPointOnHover(j, i);\n    }\n  }\n  // This function is used when you need to show markers/points only on hover -\n  // DIFFERENT X VALUES in multiple series\n  /**\n   * @param {number} j\n   * @param {number} capturedSeries\n   */\n  moveDynamicPointOnHover(j, capturedSeries) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let cx = 0;\n    let cy = 0;\n    const graphics = new Graphics(this.w);\n    const pointsArr = w.globals.pointsArray;\n    const hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(capturedSeries);\n    const serType = (\n      /** @type {any} */\n      w.config.series[capturedSeries].type\n    );\n    if (serType && (serType === \"column\" || serType === \"candlestick\" || serType === \"boxPlot\" || serType === \"violin\")) {\n      return;\n    }\n    cx = (_b = (_a = pointsArr[capturedSeries]) == null ? void 0 : _a[j]) == null ? void 0 : _b[0];\n    cy = ((_d = (_c = pointsArr[capturedSeries]) == null ? void 0 : _c[j]) == null ? void 0 : _d[1]) || 0;\n    const point = w.dom.baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${capturedSeries}'] .apexcharts-series-markers path`\n    );\n    if (point && cy < w.layout.gridHeight && cy > 0) {\n      const shape = (_e = point.getAttribute(\"shape\")) != null ? _e : \"circle\";\n      const path = graphics.getMarkerPath(cx, cy, shape, hoverSize * 1.5);\n      point.setAttribute(\"d\", path);\n    }\n    this.moveXCrosshairs(cx);\n    if (!ttCtx.fixedTooltip) {\n      this.moveTooltip(cx, cy, hoverSize);\n    }\n  }\n  // This function is used when you need to show markers/points only on hover -\n  // SAME X VALUES in multiple series\n  /**\n   * @param {number} j\n   */\n  moveDynamicPointsOnHover(j) {\n    var _a, _b;\n    const ttCtx = this.ttCtx;\n    const w = ttCtx.w;\n    let cx = 0;\n    let cy = 0;\n    let activeSeries = 0;\n    const pointsArr = w.globals.pointsArray;\n    const series = new Series(this.w);\n    const graphics = new Graphics(this.w);\n    activeSeries = series.getActiveConfigSeriesIndex(\"asc\", [\n      \"line\",\n      \"area\",\n      \"scatter\",\n      \"bubble\"\n    ]);\n    const hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(activeSeries);\n    if ((_a = pointsArr[activeSeries]) == null ? void 0 : _a[j]) {\n      cx = pointsArr[activeSeries][j][0];\n      cy = pointsArr[activeSeries][j][1];\n    }\n    if (isNaN(cx)) {\n      return;\n    }\n    const points = ttCtx.tooltipUtil.getAllMarkers();\n    if (points.length) {\n      for (let p = 0; p < w.seriesData.series.length; p++) {\n        const pointArr = pointsArr[p];\n        if (w.globals.comboCharts) {\n          if (typeof pointArr === \"undefined\") {\n            points.splice(p, 0, null);\n          }\n        }\n        if (points[p] && pointArr && pointArr.length) {\n          let pcy = pointsArr[p][j][1];\n          let pcy2;\n          points[p].setAttribute(\"cx\", cx);\n          const shape = (_b = points[p].getAttribute(\"shape\")) != null ? _b : \"circle\";\n          if (w.config.chart.type === \"rangeArea\" && !w.globals.comboCharts) {\n            const rangeStartIndex = j + w.seriesData.series[p].length;\n            pcy2 = pointsArr[p][rangeStartIndex][1];\n            const pcyDiff = Math.abs(pcy - pcy2) / 2;\n            pcy = pcy - pcyDiff;\n          }\n          if (pcy !== null && !isNaN(pcy) && pcy < w.layout.gridHeight + hoverSize && pcy + hoverSize > 0) {\n            const path = graphics.getMarkerPath(cx, pcy, shape, hoverSize);\n            points[p].setAttribute(\"d\", path);\n          } else {\n            points[p].setAttribute(\"d\", \"\");\n          }\n        }\n      }\n    }\n    this.moveXCrosshairs(cx);\n    if (!ttCtx.fixedTooltip) {\n      this.moveTooltip(cx, cy || w.layout.gridHeight, hoverSize);\n    }\n  }\n  /**\n   * @param {number} j\n   * @param {number} capturedSeries\n   */\n  moveStickyTooltipOverBars(j, capturedSeries) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let barLen = w.globals.columnSeries ? (\n      /** @type {any} */\n      w.globals.columnSeries.length\n    ) : w.seriesData.series.length;\n    if (w.config.chart.stacked) {\n      barLen = w.globals.barGroups.length;\n    }\n    let i = barLen >= 2 && barLen % 2 === 0 ? Math.floor(barLen / 2) : Math.floor(barLen / 2) + 1;\n    if (w.globals.isBarHorizontal) {\n      const series = new Series(this.w);\n      i = series.getActiveConfigSeriesIndex(\"desc\") + 1;\n    }\n    let jBar = w.dom.baseEl.querySelector(\n      `.apexcharts-bar-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-candlestick-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-boxPlot-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-violin-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-rangebar-series .apexcharts-series[rel='${i}'] path[j='${j}']`\n    );\n    if (!jBar && typeof capturedSeries === \"number\") {\n      jBar = w.dom.baseEl.querySelector(\n        `.apexcharts-bar-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-candlestick-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-boxPlot-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-violin-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-rangebar-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}']`\n      );\n    }\n    let bc = null;\n    const bcc = (\n      /** @type {any} */\n      w.globals.barCanvasCoords\n    );\n    if (!jBar && bcc) {\n      bc = typeof capturedSeries === \"number\" && ((_a = bcc[capturedSeries]) == null ? void 0 : _a[j]) || null;\n      if (!bc) {\n        for (const key in bcc) {\n          if ((_b = bcc[key]) == null ? void 0 : _b[j]) {\n            bc = bcc[key][j];\n            break;\n          }\n        }\n      }\n    }\n    let bcx = jBar ? parseFloat((_c = jBar.getAttribute(\"cx\")) != null ? _c : \"0\") : bc ? bc.cx : 0;\n    let bcy = jBar ? parseFloat((_d = jBar.getAttribute(\"cy\")) != null ? _d : \"0\") : bc ? bc.cy : 0;\n    const bw = jBar ? parseFloat((_e = jBar.getAttribute(\"barWidth\")) != null ? _e : \"0\") : bc ? bc.barWidth : 0;\n    const elGrid = ttCtx.getElGrid();\n    if (!elGrid) return;\n    const seriesBound = elGrid.getBoundingClientRect();\n    const isBoxOrCandle = jBar && (jBar.classList.contains(\"apexcharts-candlestick-area\") || jBar.classList.contains(\"apexcharts-boxPlot-area\"));\n    if (w.axisFlags.isXNumeric) {\n      if (jBar && !isBoxOrCandle) {\n        const center = this._datapointCenterXFromBars(j, seriesBound);\n        if (center != null) {\n          bcx = center;\n        } else {\n          bcx = bcx - (barLen % 2 !== 0 ? bw / 2 : 0);\n        }\n      }\n      if (jBar && // fixes apexcharts.js#2354\n      isBoxOrCandle) {\n        bcx = bcx - bw / 2;\n      }\n    } else {\n      if (!w.globals.isBarHorizontal && !bc) {\n        bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2;\n        if (isNaN(bcx)) {\n          bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2;\n        }\n      }\n    }\n    if (!w.globals.isBarHorizontal) {\n      if (w.config.tooltip.followCursor) {\n        bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2;\n      } else {\n        if (bcy + ttCtx.tooltipRect.ttHeight + 15 > w.layout.gridHeight) {\n          bcy = w.layout.gridHeight;\n        }\n      }\n    } else {\n      bcy = bcy - ttCtx.tooltipRect.ttHeight;\n    }\n    if (!w.globals.isBarHorizontal) {\n      this.moveXCrosshairs(bcx);\n    }\n    if (!ttCtx.fixedTooltip) {\n      if (w.globals.isBarHorizontal && !w.config.tooltip.followCursor) {\n        const placed = this.placeHorizontalSharedTooltip(j);\n        if (placed) return;\n      }\n      this.moveTooltip(bcx, bcy || w.layout.gridHeight);\n    }\n  }\n  /**\n   * Place tooltip above (or flipped: below) the union rect of all bars at\n   * dataPointIndex `j` for horizontal-bar-likes. Returns true when a\n   * Compute the true horizontal center of dataPointIndex `j` in grid-local\n   * coords from the union of every visible bar's `getBoundingClientRect()`.\n   * Used as a replacement for the (buggy on numeric/datetime xaxis) `cx`\n   * attribute math in `moveStickyTooltipOverBars`. Returns null when no\n   * usable bars are found.\n   * @param {number} j\n   * @param {DOMRect} gridRect\n   * @returns {number | null}\n   */\n  _datapointCenterXFromBars(j, gridRect) {\n    var _a, _b;\n    const w = this.w;\n    const bars = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-bar-series path[j='${j}'],.apexcharts-rangebar-series path[j='${j}']`\n    );\n    if (!bars.length) return null;\n    let unionLeft = Infinity;\n    let unionRight = -Infinity;\n    for (const bar of bars) {\n      const parent = (\n        /** @type {Element|null} */\n        bar.parentNode\n      );\n      if ((_b = (_a = parent == null ? void 0 : parent.classList) == null ? void 0 : _a.contains) == null ? void 0 : _b.call(_a, \"apexcharts-series-collapsed\")) continue;\n      const r = (\n        /** @type {Element} */\n        bar.getBoundingClientRect()\n      );\n      if (r.width === 0 && r.height === 0) continue;\n      if (r.left < unionLeft) unionLeft = r.left;\n      if (r.right > unionRight) unionRight = r.right;\n    }\n    if (!isFinite(unionLeft)) return null;\n    return (unionLeft + unionRight) / 2 - gridRect.left - (w.globals.barPadForNumericAxis || 0);\n  }\n  /**\n   * Place tooltip above (or flipped: below) the union rect of all bars at\n   * dataPointIndex `j` for horizontal-bar-likes. Returns true when a\n   * placement was applied; false when no bars found (caller falls back).\n   * @param {number} j\n   * @returns {boolean}\n   */\n  placeHorizontalSharedTooltip(j) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return false;\n    const elGrid = ttCtx.getElGrid();\n    if (!elGrid) return false;\n    const gridRect = elGrid.getBoundingClientRect();\n    const bars = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-bar-series path[j='${j}'],.apexcharts-rangebar-series path[j='${j}'],.apexcharts-boxPlot-series path[j='${j}']`\n    );\n    if (!bars.length) return false;\n    let unionLeft = Infinity;\n    let unionRight = -Infinity;\n    let unionTop = Infinity;\n    let unionBottom = -Infinity;\n    for (const bar of bars) {\n      const parent = (\n        /** @type {Element|null} */\n        bar.parentNode\n      );\n      if ((_b = (_a = parent == null ? void 0 : parent.classList) == null ? void 0 : _a.contains) == null ? void 0 : _b.call(_a, \"apexcharts-series-collapsed\")) continue;\n      const r = (\n        /** @type {Element} */\n        bar.getBoundingClientRect()\n      );\n      if (r.width === 0 && r.height === 0) continue;\n      if (r.left < unionLeft) unionLeft = r.left;\n      if (r.right > unionRight) unionRight = r.right;\n      if (r.top < unionTop) unionTop = r.top;\n      if (r.bottom > unionBottom) unionBottom = r.bottom;\n    }\n    if (!isFinite(unionLeft)) return false;\n    const ttW = ttCtx.tooltipRect.ttWidth || 0;\n    const ttH = ttCtx.tooltipRect.ttHeight || 0;\n    const rowCenterX = (unionLeft + unionRight) / 2 - gridRect.left + w.layout.translateX;\n    const rowTopElWrap = unionTop - gridRect.top + w.layout.translateY;\n    const rowBottomElWrap = unionBottom - gridRect.top + w.layout.translateY;\n    const gridTop = w.layout.translateY;\n    const gridBottom = w.layout.translateY + w.layout.gridHeight;\n    const gridLeft = w.layout.translateX;\n    const gridRight = w.layout.translateX + w.layout.gridWidth;\n    let placement = \"top\";\n    let finalY = rowTopElWrap - ttH - ARROW_TIP_OVERHANG;\n    if (finalY < gridTop) {\n      const belowTop = rowBottomElWrap + ARROW_TIP_OVERHANG;\n      if (belowTop + ttH <= gridBottom) {\n        placement = \"bottom\";\n        finalY = belowTop;\n      }\n    }\n    let finalX = rowCenterX - ttW / 2;\n    if (finalX < gridLeft) finalX = gridLeft;\n    if (finalX + ttW > gridRight) finalX = gridRight - ttW;\n    const arrowX = Math.max(10, Math.min(ttW - 10, rowCenterX - finalX));\n    this.applyTooltipPosition(tooltipEl, {\n      x: finalX,\n      y: finalY,\n      placement,\n      arrowY: null,\n      arrowX\n    });\n    return true;\n  }\n}\nfunction renderMarkerSVG(shape) {\n  const svg = (body) => `<svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">${body}</svg>`;\n  switch (shape) {\n    case \"square\":\n    case \"rect\":\n      return svg('<rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" rx=\"1\" fill=\"currentColor\"/>');\n    case \"line\":\n      return svg('<rect x=\"0\" y=\"5\" width=\"12\" height=\"2\" rx=\"1\" fill=\"currentColor\"/>');\n    case \"diamond\":\n      return svg('<path d=\"M6 0.5 L11.5 6 L6 11.5 L0.5 6 Z\" fill=\"currentColor\"/>');\n    case \"triangle\":\n      return svg('<path d=\"M6 1 L11.2 10.5 L0.8 10.5 Z\" fill=\"currentColor\"/>');\n    case \"cross\":\n      return svg(\n        '<path d=\"M2 2 L10 10 M10 2 L2 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'\n      );\n    case \"plus\":\n      return svg(\n        '<path d=\"M6 1 L6 11 M1 6 L11 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'\n      );\n    case \"star\":\n      return svg(\n        '<path d=\"M6 0.5 L7.5 4.4 L11.5 4.7 L8.4 7.2 L9.5 11.1 L6 8.9 L2.5 11.1 L3.6 7.2 L0.5 4.7 L4.5 4.4 Z\" fill=\"currentColor\"/>'\n      );\n    case \"sparkle\":\n      return svg(\n        '<path d=\"M6 0.5 L7 5 L11.5 6 L7 7 L6 11.5 L5 7 L0.5 6 L5 5 Z\" fill=\"currentColor\"/>'\n      );\n    case \"circle\":\n    default:\n      return svg('<circle cx=\"6\" cy=\"6\" r=\"5\" fill=\"currentColor\"/>');\n  }\n}\nclass Marker {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n    this.ctx = tooltipContext.ctx;\n    this.tooltipPosition = new Position(tooltipContext);\n  }\n  drawDynamicPoints() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const marker = new Markers(this.w, this.ctx);\n    const elsSeries = (\n      /** @type {any[]} */\n      [\n        ...w.dom.baseEl.querySelectorAll(\".apexcharts-series\")\n      ]\n    );\n    if (w.config.chart.stacked) {\n      elsSeries.sort((a, b) => {\n        return parseFloat(a.getAttribute(\"data:realIndex\")) - parseFloat(b.getAttribute(\"data:realIndex\"));\n      });\n    }\n    for (let i = 0; i < elsSeries.length; i++) {\n      const pointsMain = elsSeries[i].querySelector(\n        `.apexcharts-series-markers-wrap`\n      );\n      if (pointsMain !== null) {\n        let PointClasses = `apexcharts-marker w${(Math.random() + 1).toString(36).substring(4)}`;\n        if ((w.config.chart.type === \"line\" || w.config.chart.type === \"area\") && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n          PointClasses += \" no-pointer-events\";\n        }\n        const elPointOptions = marker.getMarkerConfig({\n          cssClass: PointClasses,\n          seriesIndex: Number(pointsMain.getAttribute(\"data:realIndex\"))\n          // fixes apexcharts/apexcharts.js #1427\n        });\n        const point = graphics.drawMarker(0, 0, elPointOptions);\n        point.node.setAttribute(\"default-marker-size\", 0);\n        const elPointsG = BrowserAPIs.createElementNS(SVGNS$2, \"g\");\n        elPointsG.classList.add(\"apexcharts-series-markers\");\n        elPointsG.appendChild(point.node);\n        pointsMain.appendChild(elPointsG);\n      }\n    }\n  }\n  /**\n   * @param {any} rel\n   * @param {any} point\n   * @param {number | null} [x]\n   * @param {number | null} [y]\n   */\n  enlargeCurrentPoint(rel, point, x = null, y = null) {\n    const w = this.w;\n    if (w.config.chart.type !== \"bubble\") {\n      this.newPointSize(rel, point);\n    }\n    let cx = point.getAttribute(\"cx\");\n    let cy = point.getAttribute(\"cy\");\n    if (x !== null && y !== null) {\n      cx = x;\n      cy = y;\n    }\n    this.tooltipPosition.moveXCrosshairs(cx);\n    if (!this.fixedTooltip) {\n      if (w.config.chart.type === \"radar\") {\n        const elGrid = this.ttCtx.getElGrid();\n        if (!elGrid) return;\n        const seriesBound = elGrid.getBoundingClientRect();\n        cx = this.ttCtx.e.clientX - seriesBound.left;\n      }\n      this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size);\n    }\n  }\n  /**\n   * @param {number} j\n   */\n  enlargePoints(j) {\n    var _a, _b;\n    const w = this.w;\n    const me = this;\n    const ttCtx = this.ttCtx;\n    const col = j;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"\n    );\n    let newSize = w.config.markers.hover.size;\n    for (let p = 0; p < points.length; p++) {\n      const rel = points[p].getAttribute(\"rel\");\n      const index = points[p].getAttribute(\"index\");\n      if (newSize === void 0) {\n        newSize = w.globals.markers.size[\n          /** @type {any} */\n          index\n        ] + w.config.markers.hover.sizeOffset;\n      }\n      if (col === parseInt(rel != null ? rel : \"0\", 10)) {\n        me.newPointSize(col, points[p]);\n        const cx = (_a = points[p].getAttribute(\"cx\")) != null ? _a : \"0\";\n        const cy = (_b = points[p].getAttribute(\"cy\")) != null ? _b : \"0\";\n        me.tooltipPosition.moveXCrosshairs(parseFloat(cx));\n        if (!ttCtx.fixedTooltip) {\n          me.tooltipPosition.moveTooltip(\n            parseFloat(cx),\n            parseFloat(cy),\n            newSize\n          );\n        }\n      } else {\n        me.oldPointSize(points[p]);\n      }\n    }\n  }\n  /**\n   * @param {any} rel\n   * @param {any} point\n   */\n  newPointSize(rel, point) {\n    const w = this.w;\n    let newSize = w.config.markers.hover.size;\n    const elPoint = rel === 0 ? point.parentNode.firstChild : point.parentNode.lastChild;\n    if (elPoint.getAttribute(\"default-marker-size\") !== \"0\") {\n      const index = parseInt(elPoint.getAttribute(\"index\"), 10);\n      if (newSize === void 0) {\n        newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n      }\n      if (newSize < 0) {\n        newSize = 0;\n      }\n      const path = this.ttCtx.tooltipUtil.getPathFromPoint(point, newSize);\n      point.setAttribute(\"d\", path);\n    }\n  }\n  /**\n   * @param {any} point\n   */\n  oldPointSize(point) {\n    const size = parseFloat(point.getAttribute(\"default-marker-size\"));\n    const path = this.ttCtx.tooltipUtil.getPathFromPoint(point, size);\n    point.setAttribute(\"d\", path);\n  }\n  resetPointsSize() {\n    var _a;\n    const w = this.w;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"\n    );\n    for (let p = 0; p < points.length; p++) {\n      const size = parseFloat(\n        (_a = points[p].getAttribute(\"default-marker-size\")) != null ? _a : \"0\"\n      );\n      if (Utils$1.isNumber(size) && size > 0) {\n        const path = this.ttCtx.tooltipUtil.getPathFromPoint(points[p], size);\n        points[p].setAttribute(\"d\", path);\n      } else {\n        points[p].setAttribute(\"d\", \"M0,0\");\n      }\n    }\n  }\n}\nclass Intersect {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    const w = this.w;\n    this.ttCtx = tooltipContext;\n    this.isVerticalGroupedRangeBar = !w.globals.isBarHorizontal && w.config.chart.type === \"rangeBar\" && w.config.plotOptions.bar.rangeBarGroupRows;\n  }\n  // a helper function to get an element's attribute value\n  /**\n   * @param {Event} e\n   * @param {string} attr\n   */\n  getAttr(e, attr) {\n    var _a;\n    return parseFloat(\n      /** @type {Element} */\n      (_a = e.target.getAttribute(attr)) != null ? _a : \"\"\n    );\n  }\n  // handle tooltip for heatmaps and treemaps\n  /** @param {{e: any, opt: any, x: any, y: any, type: any}} opts */\n  handleHeatTreeTooltip({ e, opt, x, y, type }) {\n    var _a, _b;\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    const renderer = w.globals.activeRenderer;\n    const canvasCells = type === \"heatmap\" && renderer && renderer.kind === \"canvas\" && typeof renderer.hitTest === \"function\";\n    let i, j, cx, cy, width, height;\n    if (canvasCells) {\n      const seriesBound = opt.elGrid.getBoundingClientRect();\n      const clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n      const clientY = e.type === \"touchmove\" ? e.touches[0].clientY : e.clientY;\n      const hit = renderer.hitTest(\n        clientX - seriesBound.left,\n        clientY - seriesBound.top\n      );\n      if (!hit) {\n        return { x, y, noHit: true };\n      }\n      i = hit.seriesIndex;\n      j = hit.dataPointIndex;\n      cx = hit.x;\n      cy = hit.y;\n      width = hit.width;\n      height = hit.height;\n    } else if (e.target.classList.contains(`apexcharts-${type}-rect`)) {\n      i = this.getAttr(e, \"i\");\n      j = this.getAttr(e, \"j\");\n      cx = this.getAttr(e, \"cx\");\n      cy = this.getAttr(e, \"cy\");\n      width = this.getAttr(e, \"width\");\n      height = this.getAttr(e, \"height\");\n    } else {\n      return { x, y };\n    }\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: opt.ttItems,\n      i,\n      j,\n      shared: false,\n      e\n    });\n    w.interact.capturedSeriesIndex = i;\n    w.interact.capturedDataPointIndex = j;\n    ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2);\n    const tooltipEl = ttCtx.getElTooltip();\n    if (type === \"heatmap\" && w.config.tooltip.arrow && !w.config.tooltip.followCursor && tooltipEl) {\n      const elGridRect = opt.elGrid.getBoundingClientRect();\n      const elWrapRect = w.dom.elWrap.getBoundingClientRect();\n      const gridOffsetXInElWrap = elGridRect.left - elWrapRect.left;\n      let clLeft, clTop, clRight, clBottom;\n      if (canvasCells) {\n        clLeft = cx;\n        clTop = cy;\n        clRight = cx + width;\n        clBottom = cy + height;\n      } else {\n        const r = e.target.getBoundingClientRect();\n        clLeft = r.left - elGridRect.left;\n        clTop = r.top - elGridRect.top;\n        clRight = r.right - elGridRect.left;\n        clBottom = r.bottom - elGridRect.top;\n      }\n      const ttW = ttCtx.tooltipRect.ttWidth || 0;\n      const ttH = ttCtx.tooltipRect.ttHeight || 0;\n      const cellCenterXInElWrap = (clLeft + clRight) / 2 + gridOffsetXInElWrap;\n      const cellTopInElWrap = clTop + w.layout.translateY;\n      const cellBottomInElWrap = clBottom + w.layout.translateY;\n      const gridTop = w.layout.translateY;\n      const gridBottom = w.layout.translateY + w.layout.gridHeight;\n      const gridLeft = gridOffsetXInElWrap;\n      const gridRight = gridOffsetXInElWrap + w.layout.gridWidth;\n      let placement = \"top\";\n      let finalY = cellTopInElWrap - ttH - ARROW_TIP_OVERHANG;\n      if (finalY < gridTop) {\n        const belowTop = cellBottomInElWrap + ARROW_TIP_OVERHANG;\n        if (belowTop + ttH <= gridBottom) {\n          placement = \"bottom\";\n          finalY = belowTop;\n        } else {\n          finalY = gridTop;\n        }\n      }\n      let finalX = cellCenterXInElWrap - ttW / 2;\n      if (finalX < gridLeft) finalX = gridLeft;\n      if (finalX + ttW > gridRight) finalX = gridRight - ttW;\n      const arrowX = Math.max(10, Math.min(ttW - 10, cellCenterXInElWrap - finalX));\n      ttCtx.tooltipPosition.applyTooltipPosition(tooltipEl, {\n        x: finalX,\n        y: finalY,\n        placement,\n        arrowY: null,\n        arrowX\n      });\n      return { x: finalX, y: finalY, positioned: true };\n    }\n    x = cx + ttCtx.tooltipRect.ttWidth / 2 + width;\n    y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2;\n    if (x > w.layout.gridWidth / 2) {\n      x = cx - ttCtx.tooltipRect.ttWidth / 2 + width;\n    }\n    if (ttCtx.w.config.tooltip.followCursor) {\n      const seriesBound = w.dom.elWrap.getBoundingClientRect();\n      x = ((_a = w.interact.clientX) != null ? _a : 0) - seriesBound.left - (x > w.layout.gridWidth / 2 ? ttCtx.tooltipRect.ttWidth : 0);\n      y = ((_b = w.interact.clientY) != null ? _b : 0) - seriesBound.top - (y > w.layout.gridHeight / 2 ? ttCtx.tooltipRect.ttHeight : 0);\n    }\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * handle tooltips for line/area/scatter charts where tooltip.intersect is true\n   * when user hovers over the marker directly, this function is executed\n   */\n  /** @param {{e: any, opt: any, x: any, y: any}} opts */\n  handleMarkerTooltip({ e, opt, x, y }) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let i;\n    let j;\n    if (e.target.classList.contains(\"apexcharts-marker\")) {\n      const cx = parseInt(opt.paths.getAttribute(\"cx\"), 10);\n      const cy = parseInt(opt.paths.getAttribute(\"cy\"), 10);\n      const val = parseFloat(opt.paths.getAttribute(\"val\"));\n      j = parseInt(opt.paths.getAttribute(\"rel\"), 10);\n      i = parseInt(\n        opt.paths.parentNode.parentNode.parentNode.getAttribute(\"rel\"),\n        10\n      ) - 1;\n      if (ttCtx.intersect) {\n        const el = Utils$1.findAncestor(opt.paths, \"apexcharts-series\");\n        if (el) {\n          i = parseInt(el.getAttribute(\"data:realIndex\"), 10);\n        }\n      }\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i,\n        j,\n        shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared,\n        e\n      });\n      if (e.type === \"mouseup\") {\n        ttCtx.markerClick(e, i, j);\n      }\n      w.interact.capturedSeriesIndex = i;\n      w.interact.capturedDataPointIndex = j;\n      const arrowEnabled = !!w.config.tooltip.arrow;\n      x = cx;\n      if (arrowEnabled) {\n        y = cy;\n      } else {\n        y = cy + w.layout.translateY - ttCtx.tooltipRect.ttHeight * 1.4;\n        if (val < 0) {\n          y = cy;\n        }\n      }\n      if (ttCtx.w.config.tooltip.followCursor) {\n        const elGrid = ttCtx.getElGrid();\n        if (!elGrid) return { x, y };\n        const seriesBound = elGrid.getBoundingClientRect();\n        y = ttCtx.e.clientY + w.layout.translateY - seriesBound.top;\n      }\n      ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y);\n    }\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * handle tooltips for bar/column charts\n   */\n  /** @param {{e: any, opt: any}} opts */\n  handleBarTooltip({ e, opt }) {\n    var _a, _b, _c;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    let bx = 0;\n    let x = 0;\n    let y = 0;\n    let i = 0;\n    let strokeWidth;\n    const barXY = this.getBarTooltipXY({\n      e,\n      opt\n    });\n    if (barXY.j === null && barXY.barHeight === 0 && barXY.barWidth === 0) {\n      return;\n    }\n    i = barXY.i;\n    const j = barXY.j;\n    w.interact.capturedSeriesIndex = i;\n    w.interact.capturedDataPointIndex = j !== null ? j : w.interact.capturedDataPointIndex;\n    if (w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars() || !w.config.tooltip.shared) {\n      x = barXY.x;\n      y = barXY.y;\n      strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width;\n      bx = x;\n    } else {\n      if (!w.globals.comboCharts && !w.config.tooltip.shared) {\n        bx = bx / 2;\n      }\n    }\n    if (isNaN(y)) {\n      y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight;\n    }\n    if (x + ttCtx.tooltipRect.ttWidth > w.layout.gridWidth) {\n      x = x - ttCtx.tooltipRect.ttWidth;\n    } else if (x < 0) {\n      x = 0;\n    }\n    if (ttCtx.w.config.tooltip.followCursor) {\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return;\n    }\n    if (ttCtx.tooltip === null) {\n      ttCtx.tooltip = w.dom.baseEl.querySelector(\n        \".apexcharts-tooltip:not(.apexcharts-annotation-tooltip)\"\n      );\n    }\n    if (!w.config.tooltip.shared) {\n      if (w.globals.comboBarCount > 0) {\n        ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2);\n      } else {\n        ttCtx.tooltipPosition.moveXCrosshairs(bx);\n      }\n    }\n    if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) {\n      y = y + w.layout.translateY - ttCtx.tooltipRect.ttHeight / 2;\n      if (tooltipEl) {\n        const ttW = ttCtx.tooltipRect.ttWidth || 0;\n        const ttH = ttCtx.tooltipRect.ttHeight || 0;\n        const arrowEnabled = !!w.config.tooltip.arrow;\n        const { barAnchorXInGrid, barAnchorYInGrid, barRectInGrid } = barXY;\n        const elGridRect = (_a = ttCtx.getElGrid()) == null ? void 0 : _a.getBoundingClientRect();\n        const elWrapRect = w.dom.elWrap.getBoundingClientRect();\n        const gridOffsetXInElWrap = elGridRect ? elGridRect.left - elWrapRect.left : w.layout.translateX;\n        let placement;\n        let arrowY = null;\n        let arrowX = null;\n        let finalX = x + gridOffsetXInElWrap;\n        let finalY = y;\n        if (arrowEnabled && w.globals.isBarHorizontal && barRectInGrid != null) {\n          const gridTop = w.layout.translateY;\n          const gridBottom = w.layout.translateY + w.layout.gridHeight;\n          const gridLeft = gridOffsetXInElWrap;\n          const gridRight = gridOffsetXInElWrap + w.layout.gridWidth;\n          const barCenterXInElWrap = (barRectInGrid.left + barRectInGrid.right) / 2 + gridOffsetXInElWrap;\n          const barTopInElWrap = barRectInGrid.top + w.layout.translateY;\n          const barBottomInElWrap = barRectInGrid.bottom + w.layout.translateY;\n          let proposedTop = barTopInElWrap - ttH - ARROW_TIP_OVERHANG;\n          placement = \"top\";\n          if (proposedTop < gridTop) {\n            const belowTop = barBottomInElWrap + ARROW_TIP_OVERHANG;\n            if (belowTop + ttH <= gridBottom) {\n              placement = \"bottom\";\n              proposedTop = belowTop;\n            }\n          }\n          finalY = proposedTop;\n          finalX = barCenterXInElWrap - ttW / 2;\n          if (finalX < gridLeft) finalX = gridLeft;\n          if (finalX + ttW > gridRight) finalX = gridRight - ttW;\n          arrowX = Math.max(\n            10,\n            Math.min(ttW - 10, barCenterXInElWrap - finalX)\n          );\n        } else if (arrowEnabled && barAnchorXInGrid != null && barAnchorYInGrid != null) {\n          const barCenterXInElWrap = barAnchorXInGrid + gridOffsetXInElWrap;\n          const gridCenterXInElWrap = gridOffsetXInElWrap + w.layout.gridWidth / 2;\n          const barLeftInElWrap = ((_b = barRectInGrid == null ? void 0 : barRectInGrid.left) != null ? _b : barAnchorXInGrid) + gridOffsetXInElWrap;\n          const barRightInElWrap = ((_c = barRectInGrid == null ? void 0 : barRectInGrid.right) != null ? _c : barAnchorXInGrid) + gridOffsetXInElWrap;\n          if (barCenterXInElWrap < gridCenterXInElWrap) {\n            placement = \"right\";\n            finalX = barRightInElWrap + ARROW_TIP_OVERHANG;\n          } else {\n            placement = \"left\";\n            finalX = barLeftInElWrap - ttW - ARROW_TIP_OVERHANG;\n          }\n          if (barRectInGrid) {\n            const barCenterYInElWrap = (barRectInGrid.top + barRectInGrid.bottom) / 2 + w.layout.translateY;\n            finalY = barCenterYInElWrap - ttH / 2;\n            const gridTop = w.layout.translateY;\n            const gridBottom = w.layout.translateY + w.layout.gridHeight;\n            if (finalY < gridTop) finalY = gridTop;\n            if (finalY + ttH > gridBottom) finalY = gridBottom - ttH;\n          }\n          if (ttH > 0 && barRectInGrid) {\n            const barCenterYInElWrap = (barRectInGrid.top + barRectInGrid.bottom) / 2 + w.layout.translateY;\n            arrowY = Math.max(\n              10,\n              Math.min(ttH - 10, barCenterYInElWrap - finalY)\n            );\n          }\n        }\n        ttCtx.tooltipPosition.applyTooltipPosition(tooltipEl, {\n          x: finalX,\n          y: finalY,\n          placement,\n          arrowY,\n          arrowX\n        });\n      }\n    }\n  }\n  /** @param {{e: any, opt: any}} opts */\n  getBarTooltipXY({ e, opt }) {\n    const w = this.w;\n    let j = null;\n    const ttCtx = this.ttCtx;\n    let i = 0;\n    let x = 0;\n    let y = 0;\n    let barWidth = 0;\n    let barHeight = 0;\n    let barCx = null;\n    let barCy = null;\n    let barAnchorXInGrid = null;\n    let barAnchorYInGrid = null;\n    let barRectInGrid = null;\n    const cl = e.target.classList;\n    if (cl.contains(\"apexcharts-bar-area\") || cl.contains(\"apexcharts-candlestick-area\") || cl.contains(\"apexcharts-boxPlot-area\") || cl.contains(\"apexcharts-rangebar-area\")) {\n      const bar = e.target;\n      const barRect = bar.getBoundingClientRect();\n      const seriesBound = opt.elGrid.getBoundingClientRect();\n      const bh = barRect.height;\n      barHeight = barRect.height;\n      const bw = barRect.width;\n      const cx = parseInt(bar.getAttribute(\"cx\"), 10);\n      const cy = parseInt(bar.getAttribute(\"cy\"), 10);\n      barCx = cx;\n      barCy = cy;\n      barWidth = parseFloat(bar.getAttribute(\"barWidth\"));\n      const rectLeftInGrid = barRect.left - seriesBound.left;\n      const rectTopInGrid = barRect.top - seriesBound.top;\n      const rectCenterXInGrid = rectLeftInGrid + bw / 2;\n      const rectCenterYInGrid = rectTopInGrid + bh / 2;\n      barAnchorXInGrid = rectCenterXInGrid;\n      barAnchorYInGrid = w.globals.isBarHorizontal ? rectCenterYInGrid : rectTopInGrid;\n      barRectInGrid = {\n        left: rectLeftInGrid,\n        top: rectTopInGrid,\n        right: rectLeftInGrid + bw,\n        bottom: rectTopInGrid + bh\n      };\n      const clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n      j = parseInt(bar.getAttribute(\"j\"), 10);\n      i = parseInt(bar.parentNode.getAttribute(\"rel\"), 10) - 1;\n      const y1 = bar.getAttribute(\"data-range-y1\");\n      const y2 = bar.getAttribute(\"data-range-y2\");\n      if (w.globals.comboCharts) {\n        i = parseInt(bar.parentNode.getAttribute(\"data:realIndex\"), 10);\n      }\n      const handleXForColumns = (x2) => {\n        if (w.axisFlags.isXNumeric) {\n          x2 = cx - bw / 2;\n        } else {\n          if (this.isVerticalGroupedRangeBar) {\n            x2 = cx + bw / 2;\n          } else {\n            x2 = cx - ttCtx.dataPointsDividedWidth + bw / 2;\n          }\n        }\n        return x2;\n      };\n      const handleYForBars = () => {\n        return cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2;\n      };\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i,\n        j,\n        y1: y1 ? parseInt(y1, 10) : null,\n        y2: y2 ? parseInt(y2, 10) : null,\n        shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared,\n        e\n      });\n      if (w.config.tooltip.followCursor) {\n        if (w.globals.isBarHorizontal) {\n          x = clientX - seriesBound.left + 15;\n          y = handleYForBars();\n        } else {\n          x = handleXForColumns(x);\n          y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15;\n        }\n      } else {\n        if (w.globals.isBarHorizontal) {\n          x = cx;\n          if (ttCtx.xyRatios && x < ttCtx.xyRatios.baseLineInvertedY) {\n            x = cx - ttCtx.tooltipRect.ttWidth;\n          }\n          y = handleYForBars();\n        } else {\n          x = handleXForColumns(x);\n          y = cy;\n        }\n      }\n    }\n    return {\n      x,\n      y,\n      barHeight,\n      barWidth,\n      i,\n      j,\n      // SVG attribute values — left for any caller that still wants them.\n      barCx,\n      barCy,\n      // Arrow anchor in grid-local coords (rect-derived; column→top,\n      // horizontal→center). Used by handleBarTooltip to place the arrow\n      // exactly on the bar's data point.\n      barAnchorXInGrid,\n      barAnchorYInGrid,\n      // Full rendered bar rect (grid-local). Used for top/bottom\n      // placement and flip-on-overflow detection.\n      barRectInGrid\n    };\n  }\n}\nclass AxesTooltip {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n  }\n  /**\n   * This method adds the secondary tooltip which appears below x axis\n   * @memberof Tooltip\n   **/\n  drawXaxisTooltip() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const isBottom = w.config.xaxis.position === \"bottom\";\n    ttCtx.xaxisOffY = isBottom ? w.layout.gridHeight + 1 : -w.layout.xAxisHeight - w.config.xaxis.axisTicks.height + 3;\n    const tooltipCssClass = isBottom ? \"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\" : \"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\";\n    const renderTo = w.dom.elWrap;\n    if (ttCtx.isXAxisTooltipEnabled) {\n      const xaxisTooltip = w.dom.baseEl.querySelector(\n        \".apexcharts-xaxistooltip\"\n      );\n      if (xaxisTooltip === null) {\n        ttCtx.xaxisTooltip = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.xaxisTooltip.setAttribute(\n          \"class\",\n          tooltipCssClass + \" apexcharts-theme-\" + w.config.tooltip.theme\n        );\n        renderTo.appendChild(ttCtx.xaxisTooltip);\n        ttCtx.xaxisTooltipText = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.xaxisTooltipText.classList.add(\"apexcharts-xaxistooltip-text\");\n        ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily;\n        ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize;\n        ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText);\n      }\n    }\n  }\n  /**\n   * This method adds the secondary tooltip which appears below x axis\n   * @memberof Tooltip\n   **/\n  drawYaxisTooltip() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    for (let i = 0; i < w.config.yaxis.length; i++) {\n      const isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite;\n      ttCtx.yaxisOffX = isRight ? w.layout.gridWidth + 1 : 1;\n      const tooltipCssClass = isRight ? `apexcharts-yaxistooltip apexcharts-yaxistooltip-${i} apexcharts-yaxistooltip-right` : `apexcharts-yaxistooltip apexcharts-yaxistooltip-${i} apexcharts-yaxistooltip-left`;\n      const renderTo = w.dom.elWrap;\n      const yaxisTooltip = w.dom.baseEl.querySelector(\n        `.apexcharts-yaxistooltip.apexcharts-yaxistooltip-${i}`\n      );\n      if (yaxisTooltip === null) {\n        ttCtx.yaxisTooltip = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.yaxisTooltip.setAttribute(\n          \"class\",\n          tooltipCssClass + \" apexcharts-theme-\" + w.config.tooltip.theme\n        );\n        renderTo.appendChild(ttCtx.yaxisTooltip);\n        if (i === 0) ttCtx.yaxisTooltipText = [];\n        ttCtx.yaxisTooltipText[i] = BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n        ttCtx.yaxisTooltipText[i].classList.add(\n          \"apexcharts-yaxistooltip-text\"\n        );\n        ttCtx.yaxisTooltip.appendChild(\n          /** @type {any} */\n          ttCtx.yaxisTooltipText[i]\n        );\n      }\n    }\n  }\n  /**\n   * @memberof Tooltip\n   **/\n  setXCrosshairWidth() {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width, 10);\n    if (!w.globals.comboCharts) {\n      if (w.config.xaxis.crosshairs.width === \"tickWidth\") {\n        const count = w.labelData.labels.length;\n        ttCtx.xcrosshairsWidth = w.layout.gridWidth / count;\n      } else if (w.config.xaxis.crosshairs.width === \"barWidth\") {\n        const bar = w.dom.baseEl.querySelector(\".apexcharts-bar-area\");\n        if (bar !== null) {\n          const barWidth = parseFloat((_a = bar.getAttribute(\"barWidth\")) != null ? _a : \"0\");\n          ttCtx.xcrosshairsWidth = barWidth;\n        } else {\n          ttCtx.xcrosshairsWidth = 1;\n        }\n      }\n    } else {\n      const bar = w.dom.baseEl.querySelector(\".apexcharts-bar-area\");\n      if (bar !== null && w.config.xaxis.crosshairs.width === \"barWidth\") {\n        const barWidth = parseFloat((_b = bar.getAttribute(\"barWidth\")) != null ? _b : \"0\");\n        ttCtx.xcrosshairsWidth = barWidth;\n      } else {\n        if (w.config.xaxis.crosshairs.width === \"tickWidth\") {\n          const count = w.labelData.labels.length;\n          ttCtx.xcrosshairsWidth = w.layout.gridWidth / count;\n        }\n      }\n    }\n    if (w.globals.isBarHorizontal) {\n      ttCtx.xcrosshairsWidth = 0;\n    }\n    if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) {\n      xcrosshairs.setAttribute(\"width\", String(ttCtx.xcrosshairsWidth));\n    }\n  }\n  handleYCrosshair() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    ttCtx.ycrosshairs = w.dom.baseEl.querySelector(\".apexcharts-ycrosshairs\");\n    ttCtx.ycrosshairsHidden = w.dom.baseEl.querySelector(\n      \".apexcharts-ycrosshairs-hidden\"\n    );\n  }\n  /**\n   * @param {number} index\n   * @param {number} clientY\n   * @param {import('../../types/internal').XYRatios} xyRatios\n   */\n  drawYaxisTooltipText(index, clientY, xyRatios) {\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    const gl = w.globals;\n    const yAxisSeriesArr = gl.seriesYAxisMap[index];\n    if (ttCtx.yaxisTooltips[index] && yAxisSeriesArr.length > 0) {\n      const lbFormatter = w.formatters.yLabelFormatters[index];\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return;\n      const seriesBound = elGrid.getBoundingClientRect();\n      const seriesIndex = yAxisSeriesArr[0];\n      let translationsIndex = 0;\n      if (xyRatios.yRatio.length > 1) {\n        translationsIndex = seriesIndex;\n      }\n      const hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[translationsIndex];\n      const height = gl.maxYArr[seriesIndex] - gl.minYArr[seriesIndex];\n      let val = gl.minYArr[seriesIndex] + (height - hoverY);\n      if (w.config.yaxis[index].reversed) {\n        val = gl.maxYArr[seriesIndex] - (height - hoverY);\n      }\n      ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top);\n      ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val);\n      ttCtx.tooltipPosition.moveYAxisTooltip(index);\n    }\n  }\n}\nclass Tooltip {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.tConfig = w.config.tooltip;\n    this.tooltipUtil = new Utils2(this);\n    this.tooltipLabels = new Labels(this);\n    this.tooltipPosition = new Position(this);\n    this.marker = new Marker(this);\n    this.intersect = new Intersect(this);\n    this.axesTooltip = new AxesTooltip(this);\n    this.showOnIntersect = this.tConfig.intersect;\n    this.showTooltipTitle = this.tConfig.x.show;\n    this.fixedTooltip = this.tConfig.fixed.enabled;\n    this.xaxisTooltip = null;\n    this.xaxisTooltipText = null;\n    this.yaxisTooltip = null;\n    this.yaxisTooltipText = null;\n    this.yaxisTTEls = null;\n    this.xaxisOffY = 0;\n    this.yaxisOffX = 0;\n    this.xcrosshairsWidth = 0;\n    this.ycrosshairs = null;\n    this.ycrosshairsHidden = null;\n    this.tooltip = null;\n    this.e = null;\n    this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared;\n    this.lastHoverTime = Date.now();\n    this.dimensionUpdateScheduled = false;\n    this.xyRatios = null;\n    this.isXAxisTooltipEnabled = false;\n    this.yaxisTooltips = [];\n    this.allTooltipSeriesGroups = [];\n    this.xAxisTicksPositions = null;\n    this.dataPointsDividedHeight = 0;\n    this.dataPointsDividedWidth = 0;\n    this.tooltipTitle = null;\n    this.legendLabels = null;\n    this.ttItems = null;\n    this.seriesBound = null;\n    this.seriesHoverTimeout = void 0;\n    this.clientX = 0;\n    this.clientY = 0;\n    this.barSeriesHeight = 0;\n    this.tooltipRect = { x: 0, y: 0, ttWidth: 0, ttHeight: 0 };\n  }\n  setupDimensionCache() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    this.updateDimensionCache();\n    if (typeof ResizeObserver !== \"undefined\" && !w.globals.resizeObserver) {\n      w.globals.resizeObserver = new ResizeObserver(() => {\n        if (!this.dimensionUpdateScheduled) {\n          this.dimensionUpdateScheduled = true;\n          requestAnimationFrame(() => {\n            this.updateDimensionCache();\n            this.dimensionUpdateScheduled = false;\n          });\n        }\n      });\n      w.globals.resizeObserver.observe(tooltipEl);\n    }\n  }\n  updateDimensionCache() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const rect = tooltipEl.getBoundingClientRect();\n    w.globals.dimensionCache.tooltip = /** @type {any} */\n    {\n      width: rect.width,\n      height: rect.height,\n      lastUpdate: Date.now()\n    };\n  }\n  getCachedDimensions() {\n    const w = this.w;\n    if (w.globals.dimensionCache.tooltip) {\n      const cache2 = (\n        /** @type {Record<string,any>} */\n        w.globals.dimensionCache.tooltip\n      );\n      const age = Date.now() - cache2.lastUpdate;\n      if (age < 1e3) {\n        return {\n          ttWidth: cache2.width,\n          ttHeight: cache2.height\n        };\n      }\n    }\n    this.updateDimensionCache();\n    const cache = (\n      /** @type {Record<string,any>} */\n      w.globals.dimensionCache.tooltip\n    );\n    return cache ? {\n      ttWidth: cache.width,\n      ttHeight: cache.height\n    } : { ttWidth: 0, ttHeight: 0 };\n  }\n  /**\n   * @param {{ w: import('../../types/internal').ChartStateW }} [ctx]\n   * @returns {HTMLElement | null}\n   */\n  getElTooltip(ctx) {\n    if (!ctx) ctx = this;\n    if (!ctx.w.dom.baseEl) return null;\n    return (\n      /** @type {HTMLElement | null} */\n      ctx.w.dom.baseEl.querySelector(\n        \".apexcharts-tooltip:not(.apexcharts-annotation-tooltip)\"\n      )\n    );\n  }\n  getElXCrosshairs() {\n    return this.w.dom.baseEl.querySelector(\".apexcharts-xcrosshairs\");\n  }\n  getElGrid() {\n    return this.w.dom.baseEl.querySelector(\".apexcharts-grid\");\n  }\n  /**\n   * @param {import('../../types/internal').XYRatios} xyRatios\n   */\n  drawTooltip(xyRatios) {\n    const w = this.w;\n    this.xyRatios = xyRatios;\n    this.isXAxisTooltipEnabled = w.config.xaxis.tooltip.enabled && w.globals.axisCharts;\n    this.yaxisTooltips = w.config.yaxis.map((y) => {\n      return y.show && y.tooltip.enabled && w.globals.axisCharts ? true : false;\n    });\n    this.allTooltipSeriesGroups = [];\n    if (!w.globals.axisCharts) {\n      this.showTooltipTitle = false;\n    }\n    const existingTooltip = this.getElTooltip();\n    if (existingTooltip == null ? void 0 : existingTooltip.parentNode) {\n      existingTooltip.parentNode.removeChild(existingTooltip);\n    }\n    this.tooltipTitle = null;\n    const tooltipEl = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    tooltipEl.classList.add(\"apexcharts-tooltip\");\n    if (w.config.tooltip.cssClass) {\n      tooltipEl.classList.add(w.config.tooltip.cssClass);\n    }\n    tooltipEl.classList.add(`apexcharts-theme-${this.tConfig.theme || \"light\"}`);\n    if (this.tConfig.fillSeriesColor) {\n      tooltipEl.classList.add(\"apexcharts-tooltip-fill-series\");\n    }\n    if (this.tConfig.style && this.tConfig.style.background) {\n      tooltipEl.style.setProperty(\n        \"--apx-tt-bg\",\n        this.tConfig.style.background\n      );\n    }\n    const isSharedMulti = this.tConfig.shared && w.config.series.length > 1 && !w.globals.isBarHorizontal && w.config.chart.type !== \"heatmap\";\n    const shouldDrawArrow = this.tConfig.arrow && !this.tConfig.followCursor && !this.tConfig.fixed.enabled && !isSharedMulti && !this.tConfig.fillSeriesColor && w.globals.axisCharts;\n    if (shouldDrawArrow) {\n      const arrowEl = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      arrowEl.classList.add(\"apexcharts-tooltip-arrow\");\n      tooltipEl.appendChild(arrowEl);\n    }\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      tooltipEl.setAttribute(\"role\", \"tooltip\");\n      tooltipEl.setAttribute(\"aria-live\", \"polite\");\n      tooltipEl.setAttribute(\"aria-atomic\", \"true\");\n      tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n    }\n    w.dom.elWrap.appendChild(tooltipEl);\n    if (w.globals.axisCharts) {\n      this.axesTooltip.drawXaxisTooltip();\n      this.axesTooltip.drawYaxisTooltip();\n      this.axesTooltip.setXCrosshairWidth();\n      this.axesTooltip.handleYCrosshair();\n      const xAxis = new XAxis(this.w, this.ctx, void 0);\n      this.xAxisTicksPositions = xAxis.getXAxisTicksPositions();\n    }\n    if ((w.globals.comboCharts || this.tConfig.intersect || w.config.chart.type === \"rangeBar\") && !this.tConfig.shared) {\n      this.showOnIntersect = true;\n    }\n    if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) {\n      this.marker.drawDynamicPoints();\n    }\n    if (w.globals.collapsedSeries.length === w.seriesData.series.length) return;\n    this.dataPointsDividedHeight = w.layout.gridHeight / w.globals.dataPoints;\n    this.dataPointsDividedWidth = w.layout.gridWidth / w.globals.dataPoints;\n    if (this.showTooltipTitle) {\n      this.tooltipTitle = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      this.tooltipTitle.classList.add(\"apexcharts-tooltip-title\");\n      this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n      this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize;\n      tooltipEl.appendChild(this.tooltipTitle);\n    }\n    let ttItemsCnt = w.seriesData.series.length;\n    if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) {\n      if (!this.showOnIntersect) {\n        ttItemsCnt = w.seriesData.series.length;\n      } else {\n        ttItemsCnt = 1;\n      }\n    }\n    this.legendLabels = w.dom.baseEl.querySelectorAll(\".apexcharts-legend-text\");\n    this.ttItems = this.createTTElements(ttItemsCnt);\n    this.addSVGEvents();\n    this.setupDimensionCache();\n  }\n  /**\n   * @param {number} ttItemsCnt\n   */\n  createTTElements(ttItemsCnt) {\n    const w = this.w;\n    const ttItems = [];\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return ttItems;\n    for (let i = 0; i < ttItemsCnt; i++) {\n      const gTxt = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      gTxt.classList.add(\n        \"apexcharts-tooltip-series-group\",\n        `apexcharts-tooltip-series-group-${i}`\n      );\n      gTxt.style.order = String(\n        w.config.tooltip.inverseOrder ? ttItemsCnt - i : i + 1\n      );\n      const point = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"span\"\n      );\n      point.classList.add(\"apexcharts-tooltip-marker\");\n      if (w.config.tooltip.fillSeriesColor) {\n        point.style.backgroundColor = w.globals.colors[i];\n      } else {\n        point.style.color = w.globals.colors[i];\n      }\n      const mShape = w.config.markers.shape;\n      let shape = mShape;\n      if (Array.isArray(mShape)) {\n        shape = mShape[i];\n      }\n      point.setAttribute(\"shape\", shape);\n      point.innerHTML = renderMarkerSVG(shape);\n      gTxt.appendChild(point);\n      const gYZ = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      gYZ.classList.add(\"apexcharts-tooltip-text\");\n      gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n      gYZ.style.fontSize = this.tConfig.style.fontSize;\n      [\"y\", \"goals\", \"z\"].forEach((g) => {\n        const gValText = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        gValText.classList.add(`apexcharts-tooltip-${g}-group`);\n        const txtLabel = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"span\"\n        );\n        txtLabel.classList.add(`apexcharts-tooltip-text-${g}-label`);\n        gValText.appendChild(txtLabel);\n        const txtValue = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"span\"\n        );\n        txtValue.classList.add(`apexcharts-tooltip-text-${g}-value`);\n        gValText.appendChild(txtValue);\n        gYZ.appendChild(gValText);\n      });\n      gTxt.appendChild(gYZ);\n      tooltipEl.appendChild(gTxt);\n      ttItems.push(gTxt);\n    }\n    return ttItems;\n  }\n  addSVGEvents() {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const commonBar = !!(type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\");\n    const chartWithmarkers = type === \"area\" || type === \"line\" || type === \"scatter\" || type === \"bubble\" || type === \"radar\";\n    const hoverArea = w.dom.Paper.node;\n    const elGrid = this.getElGrid();\n    if (elGrid) {\n      this.seriesBound = elGrid.getBoundingClientRect();\n    }\n    const tooltipY = [];\n    const tooltipX = [];\n    const seriesHoverParams = {\n      hoverArea,\n      elGrid,\n      tooltipEl,\n      tooltipY,\n      tooltipX,\n      ttItems: this.ttItems\n    };\n    let points;\n    if (w.globals.axisCharts) {\n      if (chartWithmarkers) {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\"\n        );\n      } else if (commonBar) {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-violin-area, .apexcharts-series .apexcharts-rangebar-area\"\n        );\n      } else if (type === \"heatmap\" || type === \"treemap\") {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\"\n        );\n      }\n      if (points && points.length) {\n        for (let p = 0; p < points.length; p++) {\n          tooltipY.push(points[p].getAttribute(\"cy\"));\n          tooltipX.push(points[p].getAttribute(\"cx\"));\n        }\n      }\n    }\n    const validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.tooltipUtil.hasBars() && this.tConfig.shared;\n    if (validSharedChartTypes) {\n      this.addPathsEventListeners([hoverArea], seriesHoverParams);\n    } else if (commonBar && !w.globals.comboCharts || chartWithmarkers && this.showOnIntersect) {\n      this.addDatapointEventsListeners(seriesHoverParams);\n    } else if (type === \"heatmap\" && w.globals.activeRenderer && w.globals.activeRenderer.kind === \"canvas\") {\n      this.addPathsEventListeners([hoverArea], seriesHoverParams);\n    } else if (!w.globals.axisCharts || type === \"heatmap\" || type === \"treemap\") {\n      const seriesAll = w.dom.baseEl.querySelectorAll(\".apexcharts-series\");\n      this.addPathsEventListeners(seriesAll, seriesHoverParams);\n    }\n    if (this.showOnIntersect) {\n      const lineAreaPoints = w.dom.baseEl.querySelectorAll(\n        \".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker\"\n      );\n      if (lineAreaPoints.length > 0) {\n        this.addPathsEventListeners(lineAreaPoints, seriesHoverParams);\n      }\n      if (this.tooltipUtil.hasBars() && !this.tConfig.shared) {\n        this.addDatapointEventsListeners(seriesHoverParams);\n      }\n    }\n  }\n  drawFixedTooltipRect() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return { x: 0, y: 0, ttWidth: 0, ttHeight: 0 };\n    const tooltipRect = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipRect.width + 10;\n    const ttHeight = tooltipRect.height + 10;\n    let x = this.tConfig.fixed.offsetX;\n    let y = this.tConfig.fixed.offsetY;\n    const fixed = this.tConfig.fixed.position.toLowerCase();\n    if (fixed.indexOf(\"right\") > -1) {\n      x = x + w.globals.svgWidth - ttWidth + 10;\n    }\n    if (fixed.indexOf(\"bottom\") > -1) {\n      y = y + w.globals.svgHeight - ttHeight - 10;\n    }\n    this.tooltipPosition.applyTooltipPosition(tooltipEl, { x, y });\n    return {\n      x,\n      y,\n      ttWidth,\n      ttHeight\n    };\n  }\n  /**\n   * @param {Record<string, any>} seriesHoverParams\n   */\n  addDatapointEventsListeners(seriesHoverParams) {\n    const w = this.w;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area\"\n    );\n    this.addPathsEventListeners(points, seriesHoverParams);\n  }\n  /**\n   * @param {any} paths\n   * @param {Record<string, any>} opts\n   */\n  addPathsEventListeners(paths, opts) {\n    const self = this;\n    for (let p = 0; p < paths.length; p++) {\n      const extendedOpts = {\n        paths: paths[p],\n        tooltipEl: opts.tooltipEl,\n        tooltipY: opts.tooltipY,\n        tooltipX: opts.tooltipX,\n        elGrid: opts.elGrid,\n        hoverArea: opts.hoverArea,\n        ttItems: opts.ttItems\n      };\n      const events = [\n        \"mousemove\",\n        \"mouseup\",\n        \"touchmove\",\n        \"mouseout\",\n        \"touchend\"\n      ];\n      events.map((ev) => {\n        return paths[p].addEventListener(\n          ev,\n          self.onSeriesHover.bind(self, extendedOpts),\n          { capture: false, passive: true }\n        );\n      });\n    }\n  }\n  /*\n   ** Check to see if the tooltips should be updated based on a mouse / touch event\n   * @param {Record<string, any>} opt\n   * @param {Event} e\n   */\n  /** @param {Record<string, any>} opt @param {any} e */\n  onSeriesHover(opt, e) {\n    const targetDelay = 20;\n    const timeSinceLastUpdate = Date.now() - this.lastHoverTime;\n    if (timeSinceLastUpdate >= targetDelay) {\n      this.seriesHover(opt, e);\n    } else {\n      clearTimeout(this.seriesHoverTimeout);\n      this.seriesHoverTimeout = setTimeout(() => {\n        this.seriesHover(opt, e);\n      }, targetDelay - timeSinceLastUpdate);\n    }\n  }\n  /*\n   ** The actual series hover function\n   * @param {Record<string, any>} opt\n   * @param {Event} e\n   */\n  /** @param {Record<string, any>} opt @param {any} e */\n  seriesHover(opt, e) {\n    if (this.w.globals.isDestroyed) return;\n    this.lastHoverTime = Date.now();\n    let chartGroups = [];\n    const w = this.w;\n    const isCfMember = (chart) => {\n      var _a, _b, _c;\n      const link = (_c = (_b = (_a = chart == null ? void 0 : chart.w) == null ? void 0 : _a.config) == null ? void 0 : _b.chart) == null ? void 0 : _c.link;\n      return !!(link && typeof link.dimension === \"function\");\n    };\n    if (w.config.chart.group && !isCfMember(this.ctx)) {\n      chartGroups = this.ctx.getSyncedCharts().filter((ch) => !isCfMember(ch));\n    }\n    if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) {\n      return;\n    }\n    if (chartGroups.length) {\n      chartGroups.forEach((ch) => {\n        const tooltipEl = this.getElTooltip(ch);\n        const newOpts = {\n          paths: opt.paths,\n          tooltipEl,\n          tooltipY: opt.tooltipY,\n          tooltipX: opt.tooltipX,\n          elGrid: opt.elGrid,\n          hoverArea: opt.hoverArea,\n          ttItems: ch.w.globals.tooltip.ttItems\n        };\n        if (ch.w.globals.minX === this.w.globals.minX && ch.w.globals.maxX === this.w.globals.maxX) {\n          ch.w.globals.tooltip.seriesHoverByContext({\n            chartCtx: ch,\n            ttCtx: ch.w.globals.tooltip,\n            opt: newOpts,\n            e\n          });\n        }\n      });\n    } else {\n      this.seriesHoverByContext({\n        chartCtx: this.ctx,\n        ttCtx: this.w.globals.tooltip,\n        opt,\n        e\n      });\n    }\n  }\n  /** @param {{chartCtx: any, ttCtx: any, opt: any, e: any}} opts */\n  seriesHoverByContext({ chartCtx, ttCtx, opt, e }) {\n    const w = chartCtx.w;\n    const tooltipEl = this.getElTooltip(chartCtx);\n    if (!tooltipEl) return;\n    const cachedDims = ttCtx.getCachedDimensions();\n    ttCtx.tooltipRect = {\n      x: 0,\n      y: 0,\n      ttWidth: cachedDims.ttWidth,\n      ttHeight: cachedDims.ttHeight\n    };\n    ttCtx.e = e;\n    if (ttCtx.tooltipUtil.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) {\n      if (this.tConfig.onDatasetHover.highlightDataSeries) {\n        const series = new Series(chartCtx.w);\n        series.toggleSeriesOnHover(e, e.target.parentNode);\n      }\n    }\n    if (w.globals.axisCharts) {\n      ttCtx.axisChartsTooltips({\n        e,\n        opt,\n        tooltipRect: ttCtx.tooltipRect\n      });\n    } else {\n      ttCtx.nonAxisChartsTooltips({\n        e,\n        opt,\n        tooltipRect: ttCtx.tooltipRect\n      });\n    }\n    if (ttCtx.fixedTooltip) {\n      ttCtx.drawFixedTooltipRect();\n    }\n  }\n  // tooltip handling for line/area/bar/columns/scatter\n  /** @param {{e: any, opt: any}} opts */\n  axisChartsTooltips({ e, opt }) {\n    var _a;\n    const w = this.w;\n    let x, y;\n    const seriesBound = opt.elGrid.getBoundingClientRect();\n    const clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n    const clientY = e.type === \"touchmove\" ? e.touches[0].clientY : e.clientY;\n    this.clientY = clientY;\n    this.clientX = clientX;\n    w.interact.capturedSeriesIndex = -1;\n    w.interact.capturedDataPointIndex = -1;\n    if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (w.dom.elWrap.querySelector(\n      \".apexcharts-annotation-tooltip.apexcharts-active\"\n    )) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (Array.isArray(this.tConfig.enabledOnSeries) && !w.config.tooltip.shared) {\n      const index = parseInt(opt.paths.getAttribute(\"index\"), 10);\n      if (this.tConfig.enabledOnSeries.indexOf(index) < 0) {\n        this.handleMouseOut(opt);\n        return;\n      }\n    }\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const xcrosshairs = this.getElXCrosshairs();\n    let syncedCharts = [];\n    if (w.config.chart.group) {\n      syncedCharts = this.ctx.getSyncedCharts();\n    }\n    const isStickyTooltip = w.globals.xyCharts || w.config.chart.type === \"bar\" && !w.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.tooltipUtil.hasBars();\n    if (e.type === \"mousemove\" || e.type === \"touchmove\" || e.type === \"mouseup\") {\n      if (w.globals.collapsedSeries.length + w.globals.ancillaryCollapsedSeries.length === w.seriesData.series.length) {\n        return;\n      }\n      if (xcrosshairs !== null) {\n        xcrosshairs.classList.add(\"apexcharts-active\");\n      }\n      const hasYAxisTooltip = (_a = this.yaxisTooltips) == null ? void 0 : _a.filter(\n        (b) => {\n          return b === true;\n        }\n      );\n      const _yc = (\n        /** @type {any} */\n        this.ycrosshairs\n      );\n      if (_yc !== null && (hasYAxisTooltip == null ? void 0 : hasYAxisTooltip.length)) {\n        _yc.classList.add(\"apexcharts-active\");\n      }\n      if (isStickyTooltip && !this.showOnIntersect || syncedCharts.length > 1) {\n        this.handleStickyTooltip(e, clientX, clientY, opt);\n      } else {\n        if (w.config.chart.type === \"heatmap\" || w.config.chart.type === \"treemap\") {\n          const markerXY = this.intersect.handleHeatTreeTooltip({\n            e,\n            opt,\n            x,\n            y,\n            type: w.config.chart.type\n          });\n          if (markerXY.noHit) {\n            this.handleMouseOut(opt);\n            return;\n          }\n          x = markerXY.x;\n          y = markerXY.y;\n          if (!markerXY.positioned) {\n            tooltipEl.style.left = x + \"px\";\n            tooltipEl.style.top = y + \"px\";\n          }\n        } else {\n          if (this.tooltipUtil.hasBars()) {\n            this.intersect.handleBarTooltip({\n              e,\n              opt\n            });\n          }\n          if (this.tooltipUtil.hasMarkers(0)) {\n            this.intersect.handleMarkerTooltip({\n              e,\n              opt,\n              x,\n              y\n            });\n          }\n        }\n      }\n      if (this.yaxisTooltips && this.yaxisTooltips.length) {\n        for (let yt = 0; yt < w.config.yaxis.length; yt++) {\n          this.axesTooltip.drawYaxisTooltipText(\n            yt,\n            clientY,\n            /** @type {import('../../types/internal').XYRatios} */\n            this.xyRatios\n          );\n        }\n      }\n      w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n      opt.tooltipEl.classList.add(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        opt.tooltipEl.removeAttribute(\"aria-hidden\");\n      }\n    } else if (e.type === \"mouseout\" || e.type === \"touchend\") {\n      this.handleMouseOut(opt);\n    }\n  }\n  // tooltip handling for pie/donuts\n  /** @param {{e: any, opt: any, tooltipRect: any}} opts */\n  nonAxisChartsTooltips({ e, opt, tooltipRect }) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const rel = opt.paths.getAttribute(\"rel\");\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const seriesBound = w.dom.elWrap.getBoundingClientRect();\n    if (e.type === \"mousemove\" || e.type === \"touchmove\") {\n      w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n      tooltipEl.classList.add(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        tooltipEl.removeAttribute(\"aria-hidden\");\n      }\n      if (w.config.chart.type === \"unit\") {\n        const unitDot = e.target && typeof e.target.closest === \"function\" ? e.target.closest(\".apexcharts-unit-area\") : null;\n        if (!unitDot) return;\n        this.renderUnitTooltip(unitDot);\n      } else {\n        this.tooltipLabels.drawSeriesTexts({\n          ttItems: opt.ttItems,\n          i: parseInt(rel, 10) - 1,\n          shared: false\n        });\n      }\n      let x, y;\n      const arcPath = opt.paths.querySelector(\"path[data\\\\:cx]\") || opt.paths;\n      if (w.config.tooltip.intersect && arcPath.hasAttribute(\"data:cx\") && arcPath.hasAttribute(\"data:cy\")) {\n        const svgBound = w.dom.Paper.node.getBoundingClientRect();\n        x = svgBound.left - seriesBound.left + parseFloat(arcPath.getAttribute(\"data:cx\")) - tooltipRect.ttWidth / 2;\n        y = svgBound.top - seriesBound.top + parseFloat(arcPath.getAttribute(\"data:cy\")) - tooltipRect.ttHeight - 10;\n      } else {\n        x = ((_a = w.interact.clientX) != null ? _a : 0) - seriesBound.left - tooltipRect.ttWidth / 2;\n        y = ((_b = w.interact.clientY) != null ? _b : 0) - seriesBound.top - tooltipRect.ttHeight - 10;\n      }\n      tooltipEl.style.left = x + \"px\";\n      tooltipEl.style.top = y + \"px\";\n      if (w.config.legend.tooltipHoverFormatter) {\n        const legendFormatter = w.config.legend.tooltipHoverFormatter;\n        const i = rel - 1;\n        const legendEl = (\n          /** @type {HTMLElement | undefined} */\n          (_c = this.legendLabels) == null ? void 0 : _c[i]\n        );\n        if (!legendEl) return;\n        const legendName = legendEl.getAttribute(\"data:default-text\");\n        const text = legendFormatter(legendName, {\n          seriesIndex: i,\n          dataPointIndex: i,\n          w\n        });\n        legendEl.innerHTML = text;\n      }\n    } else if (e.type === \"mouseout\" || e.type === \"touchend\") {\n      tooltipEl.classList.remove(\"apexcharts-active\");\n      w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n      if (w.config.legend.tooltipHoverFormatter) {\n        (_d = this.legendLabels) == null ? void 0 : _d.forEach((l) => {\n          const defaultText = l.getAttribute(\"data:default-text\");\n          l.innerHTML = decodeURIComponent(\n            defaultText != null ? defaultText : \"\"\n          );\n        });\n      }\n    }\n  }\n  /**\n   * Fill the tooltip for one hovered unit-chart dot. Each dot carries `i` (its\n   * category / series index) and `j` (its index within that category). The\n   * default body reads \"#<j+1> of <count>\"; `plotOptions.unit.tooltip.formatter`\n   * overrides just the body text (it is handed i/j so it can look up per-unit\n   * data), and the global `tooltip.custom` still overrides the whole markup.\n   * @param {Element} dotEl the hovered `.apexcharts-unit-area` node\n   */\n  renderUnitTooltip(dotEl) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const i = parseInt(dotEl.getAttribute(\"i\") || \"0\", 10);\n    const j = parseInt(dotEl.getAttribute(\"j\") || \"0\", 10);\n    if (typeof w.config.tooltip.custom === \"function\") {\n      this.tooltipLabels.handleCustomTooltip({ i, j, y1: null, y2: null, w });\n      return;\n    }\n    const seriesName = w.seriesData.seriesNames[i] || `series-${i + 1}`;\n    const value = Math.round(Number(w.seriesData.series[i]) || 0);\n    const group = dotEl.parentNode;\n    const count = group && group.querySelectorAll ? group.querySelectorAll(\".apexcharts-unit-area\").length : value;\n    const unitOpts = w.config.plotOptions.unit || {};\n    const unitValue = unitOpts.unitValue > 0 ? unitOpts.unitValue : 1;\n    const catData = w.seriesData.unitData && w.seriesData.unitData[i];\n    const datum = catData ? catData[j] : void 0;\n    const datumObj = datum && typeof datum === \"object\" ? datum : null;\n    const color = datumObj && datumObj.fillColor || w.globals.colors && w.globals.colors[i] || \"#008FFB\";\n    let body;\n    const fmt = unitOpts.tooltip && unitOpts.tooltip.formatter;\n    if (typeof fmt === \"function\") {\n      body = fmt({\n        seriesName,\n        seriesIndex: i,\n        dataPointIndex: j,\n        count,\n        value,\n        unitValue,\n        datum,\n        color,\n        w\n      });\n    } else if (datum !== void 0 && datum !== null) {\n      const label = datumObj ? (_c = (_b = (_a = datumObj.name) != null ? _a : datumObj.label) != null ? _b : datumObj.x) != null ? _c : null : null;\n      const dVal = datumObj ? (_e = (_d = datumObj.value) != null ? _d : datumObj.y) != null ? _e : null : datum;\n      body = label != null && dVal != null ? `${label}: ${dVal}` : label != null ? String(label) : dVal != null ? String(dVal) : `#${(j + 1).toLocaleString()} of ${count.toLocaleString()}`;\n    } else {\n      body = `#${(j + 1).toLocaleString()} of ${count.toLocaleString()}`;\n      if (unitValue !== 1) {\n        body += ` &middot; ${unitValue.toLocaleString()} per dot`;\n      }\n    }\n    const fontFamily = w.config.chart.fontFamily || \"inherit\";\n    const fontSize = w.config.tooltip.style && w.config.tooltip.style.fontSize || \"12px\";\n    const arrowEl = tooltipEl.querySelector(\".apexcharts-tooltip-arrow\");\n    tooltipEl.innerHTML = `<div class=\"apexcharts-tooltip-title\" style=\"font-family: ${fontFamily}; font-size: ${fontSize};\">${seriesName}</div><div class=\"apexcharts-tooltip-series-group apexcharts-active\" style=\"display: flex;\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: ${color};\"></span><div class=\"apexcharts-tooltip-text\" style=\"font-family: ${fontFamily}; font-size: ${fontSize};\"><div class=\"apexcharts-tooltip-y-group\"><span class=\"apexcharts-tooltip-text-y-value\">${body}</span></div></div></div>`;\n    if (arrowEl) tooltipEl.appendChild(arrowEl);\n    const rect = tooltipEl.getBoundingClientRect();\n    this.tooltipRect.ttWidth = rect.width;\n    this.tooltipRect.ttHeight = rect.height;\n  }\n  /**\n   * @param {Event} e\n   * @param {number} clientX\n   * @param {number} clientY\n   * @param {Record<string, any>} opt\n   */\n  handleStickyTooltip(e, clientX, clientY, opt) {\n    const w = this.w;\n    const capj = this.tooltipUtil.getNearestValues({\n      context: this,\n      hoverArea: opt.hoverArea,\n      elGrid: opt.elGrid,\n      clientX,\n      clientY\n    });\n    const j = capj.j;\n    let capturedSeries = capj.capturedSeries;\n    if (capturedSeries !== null && w.globals.collapsedSeriesIndices.includes(capturedSeries != null ? capturedSeries : -1))\n      capturedSeries = null;\n    const bounds = opt.elGrid.getBoundingClientRect();\n    if (capj.hoverX < 0 || capj.hoverX > bounds.width) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (capturedSeries !== null) {\n      this.handleStickyCapturedSeries(e, capturedSeries != null ? capturedSeries : -1, opt, j != null ? j : 0);\n    } else {\n      if (this.tooltipUtil.isXoverlap(j != null ? j : 0) || w.globals.isBarHorizontal) {\n        const firstVisibleSeries = w.seriesData.series.findIndex(\n          /**\n           * @param {any} s\n           * @param {number} i\n           */\n          (s, i) => !w.globals.collapsedSeriesIndices.includes(i)\n        );\n        this.create(e, this, firstVisibleSeries, j != null ? j : 0, opt.ttItems);\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {number} capturedSeries\n   * @param {Record<string, any>} opt\n   * @param {number} j\n   */\n  handleStickyCapturedSeries(e, capturedSeries, opt, j) {\n    const w = this.w;\n    if (!this.tConfig.shared) {\n      const ignoreNull = w.seriesData.series[capturedSeries][j] === null;\n      if (ignoreNull) {\n        this.handleMouseOut(opt);\n        return;\n      }\n    }\n    if (typeof w.seriesData.series[capturedSeries][j] !== \"undefined\") {\n      if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isInitialSeriesSameLen()) {\n        this.create(e, this, capturedSeries, j, opt.ttItems);\n      } else {\n        this.create(e, this, capturedSeries, j, opt.ttItems, false);\n      }\n    } else {\n      if (this.tooltipUtil.isXoverlap(j)) {\n        const firstVisibleSeries = w.seriesData.series.findIndex(\n          /**\n           * @param {any} s\n           * @param {number} i\n           */\n          (s, i) => !w.globals.collapsedSeriesIndices.includes(i)\n        );\n        this.create(e, this, firstVisibleSeries, j, opt.ttItems);\n      }\n    }\n  }\n  deactivateHoverFilter() {\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const allPaths = w.dom.Paper.find(`.apexcharts-bar-area`);\n    for (let b = 0; b < allPaths.length; b++) {\n      graphics.pathMouseLeave(\n        /** @type {any} */\n        allPaths[b],\n        /** @type {any} */\n        void 0\n      );\n    }\n  }\n  /**\n   * @param {Record<string, any>} opt\n   */\n  handleMouseOut(opt) {\n    var _a, _b;\n    const w = this.w;\n    const xcrosshairs = this.getElXCrosshairs();\n    w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n    opt.tooltipEl.classList.remove(\"apexcharts-active\");\n    delete opt.tooltipEl.dataset.positioned;\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      opt.tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n    }\n    this.deactivateHoverFilter();\n    if (w.config.chart.type !== \"bubble\") {\n      this.marker.resetPointsSize();\n    }\n    if (xcrosshairs !== null) {\n      xcrosshairs.classList.remove(\"apexcharts-active\");\n    }\n    const _yc2 = (\n      /** @type {any} */\n      this.ycrosshairs\n    );\n    if (_yc2 !== null) {\n      _yc2.classList.remove(\"apexcharts-active\");\n    }\n    if (this.isXAxisTooltipEnabled) {\n      (_a = this.xaxisTooltip) == null ? void 0 : _a.classList.remove(\"apexcharts-active\");\n    }\n    if (this.yaxisTooltips && this.yaxisTooltips.length) {\n      if (this.yaxisTTEls === null) {\n        this.yaxisTTEls = /** @type {HTMLElement[]} */\n        [\n          ...w.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\")\n        ];\n      }\n      for (let i = 0; i < this.yaxisTTEls.length; i++) {\n        this.yaxisTTEls[i].classList.remove(\"apexcharts-active\");\n      }\n    }\n    if (w.config.legend.tooltipHoverFormatter) {\n      (_b = this.legendLabels) == null ? void 0 : _b.forEach((l) => {\n        const defaultText = l.getAttribute(\"data:default-text\");\n        l.innerHTML = decodeURIComponent(\n          defaultText != null ? defaultText : \"\"\n        );\n      });\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  markerClick(e, seriesIndex, dataPointIndex) {\n    const w = this.w;\n    if (typeof w.config.chart.events.markerClick === \"function\") {\n      w.config.chart.events.markerClick(e, this.ctx, {\n        seriesIndex,\n        dataPointIndex,\n        w\n      });\n    }\n    this.ctx.events.fireEvent(\"markerClick\", [\n      e,\n      this.ctx,\n      { seriesIndex, dataPointIndex, w }\n    ]);\n  }\n  /**\n   * Marks (#11): whether the chart's type (or any series' type) is a registered\n   * custom series, whose marks live outside the built-in marker DOM.\n   * @returns {boolean}\n   */\n  _hasCustomSeries() {\n    const w = this.w;\n    if (isCustom(w.config.chart.type)) return true;\n    const series = w.config.series || [];\n    return series.some(\n      (s) => s && s.type && isCustom(s.type)\n    );\n  }\n  /**\n   * @param {Event} e\n   * @param {any} context\n   * @param {number} capturedSeries\n   * @param {number} j\n   * @param {any} ttItems\n   * @param {boolean | null} shared\n   */\n  create(e, context, capturedSeries, j, ttItems, shared = null) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;\n    const w = this.w;\n    const ttCtx = context;\n    if (e.type === \"mouseup\") {\n      this.markerClick(e, capturedSeries, j);\n    }\n    if (shared === null) shared = this.tConfig.shared;\n    const hasMarkers = this.tooltipUtil.hasMarkers(capturedSeries);\n    const canvasMode = ((_b = (_a = this.ctx) == null ? void 0 : _a.renderer) == null ? void 0 : _b.kind) === \"canvas\";\n    const canvasNonBar = canvasMode && !this.tooltipUtil.hasBars();\n    const marksMode = !canvasMode && !hasMarkers && !this.tooltipUtil.hasBars() && this._hasCustomSeries();\n    const dynamicPoints = canvasNonBar || marksMode;\n    const bars = this.tooltipUtil.getElBars();\n    const handlePoints = () => {\n      if (w.globals.markers.largestSize > 0 && !canvasMode) {\n        ttCtx.marker.enlargePoints(j);\n      } else {\n        ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n      }\n    };\n    if (w.config.legend.tooltipHoverFormatter) {\n      const legendFormatter = w.config.legend.tooltipHoverFormatter;\n      const els = (\n        /** @type {HTMLElement[]} */\n        Array.from((_c = this.legendLabels) != null ? _c : [])\n      );\n      els.forEach((l) => {\n        const legendName = l.getAttribute(\"data:default-text\");\n        l.innerHTML = decodeURIComponent(legendName != null ? legendName : \"\");\n      });\n      for (let i = 0; i < els.length; i++) {\n        const l = els[i];\n        const lsIndex = parseInt((_d = l.getAttribute(\"i\")) != null ? _d : \"\", 10);\n        const legendName = decodeURIComponent(\n          (_e = l.getAttribute(\"data:default-text\")) != null ? _e : \"\"\n        );\n        const text = legendFormatter(legendName, {\n          seriesIndex: shared ? lsIndex : capturedSeries,\n          dataPointIndex: j,\n          w\n        });\n        if (!shared) {\n          l.innerHTML = lsIndex === capturedSeries ? text : legendName;\n          if (capturedSeries === lsIndex) {\n            break;\n          }\n        } else {\n          l.innerHTML = w.globals.collapsedSeriesIndices.indexOf(lsIndex) < 0 ? text : legendName;\n        }\n      }\n    }\n    const _rangeData = (\n      /** @type {any} */\n      w.rangeData\n    );\n    const commonSeriesTextsParams = __spreadValues(__spreadValues({\n      ttItems,\n      i: capturedSeries,\n      j\n    }, ((_i = (_h = (_g = (_f = _rangeData.seriesRange) == null ? void 0 : _f[capturedSeries]) == null ? void 0 : _g[j]) == null ? void 0 : _h.y[0]) == null ? void 0 : _i.y1) !== void 0 && {\n      y1: (_m = (_l = (_k = (_j = _rangeData.seriesRange) == null ? void 0 : _j[capturedSeries]) == null ? void 0 : _k[j]) == null ? void 0 : _l.y[0]) == null ? void 0 : _m.y1\n    }), ((_q = (_p = (_o = (_n = _rangeData.seriesRange) == null ? void 0 : _n[capturedSeries]) == null ? void 0 : _o[j]) == null ? void 0 : _p.y[0]) == null ? void 0 : _q.y2) !== void 0 && {\n      y2: (_u = (_t = (_s = (_r = _rangeData.seriesRange) == null ? void 0 : _r[capturedSeries]) == null ? void 0 : _s[j]) == null ? void 0 : _t.y[0]) == null ? void 0 : _u.y2\n    });\n    if (shared) {\n      ttCtx.tooltipLabels.drawSeriesTexts(__spreadProps(__spreadValues({}, commonSeriesTextsParams), {\n        shared: this.showOnIntersect ? false : this.tConfig.shared\n      }));\n      if (hasMarkers || dynamicPoints) {\n        handlePoints();\n      } else if (this.tooltipUtil.hasBars()) {\n        if (canvasMode) {\n          ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n        }\n        this.barSeriesHeight = this.tooltipUtil.getBarsHeight(\n          /** @type {any[]} */\n          [...bars]\n        );\n        if (this.barSeriesHeight > 0) {\n          const graphics = new Graphics(this.w, this.ctx);\n          const paths = w.dom.Paper.find(`.apexcharts-bar-area[j='${j}']`);\n          this.deactivateHoverFilter();\n          const points = ttCtx.tooltipUtil.getAllMarkers(true);\n          if (points.length && !this.barSeriesHeight) {\n            handlePoints();\n          }\n          ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n          for (let b = 0; b < paths.length; b++) {\n            graphics.pathMouseEnter(\n              /** @type {any} */\n              paths[b],\n              /** @type {any} */\n              void 0\n            );\n          }\n        }\n      }\n    } else {\n      ttCtx.tooltipLabels.drawSeriesTexts(__spreadValues({\n        shared: false\n      }, commonSeriesTextsParams));\n      if (this.tooltipUtil.hasBars()) {\n        ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n      }\n      if (hasMarkers) {\n        ttCtx.tooltipPosition.moveMarkers(capturedSeries, j);\n      } else if (dynamicPoints) {\n        ttCtx.tooltipPosition.moveDynamicPointOnHover(j, capturedSeries);\n      }\n    }\n  }\n}\nclass SvgRenderer {\n  /**\n   * @param {any} w\n   * @param {any} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.kind = \"svg\";\n  }\n  // ── lifecycle (SVG builds its layer via the existing plotChartType flow) ──\n  beginSeries() {\n  }\n  present() {\n    return null;\n  }\n  clear() {\n  }\n  // ── emit primitives (delegate to Graphics: the canvas renderer mirrors\n  //    this exact surface) ──\n  /** @param {any} attrs */\n  group(attrs) {\n    return this.ctx.graphics.group(attrs);\n  }\n  /** @param {any} opts */\n  drawPath(opts) {\n    return this.ctx.graphics.drawPath(opts);\n  }\n  /** @param {any[]} args */\n  drawLine(...args) {\n    return this.ctx.graphics.drawLine(...args);\n  }\n  /** @param {any[]} args */\n  drawRect(...args) {\n    return this.ctx.graphics.drawRect(...args);\n  }\n  /**\n   * @param {number} r\n   * @param {any} attrs\n   */\n  drawCircle(r, attrs) {\n    return this.ctx.graphics.drawCircle(r, attrs);\n  }\n  /** @param {any} opts */\n  drawText(opts) {\n    return this.ctx.graphics.drawText(opts);\n  }\n  /**\n   * A series mark path (animation-aware). Faithful passthrough to Graphics.\n   * Note: the SVG emit path in the per-type draw() methods routes through\n   * `seriesEmitter`, which returns the caller's own `Graphics` in SVG mode: so\n   * this method is the interface contract surface (mirrored by the canvas\n   * renderer), not the hot path.\n   * @param {any} opts\n   */\n  renderPaths(opts) {\n    return this.ctx.graphics.renderPaths(opts);\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} opts\n   */\n  drawMarker(x, y, opts = {}) {\n    return this.ctx.graphics.drawMarker(x, y, opts);\n  }\n  // ── capabilities: SVG supports everything the interface enumerates ──\n  /** @param {string} _feature */\n  supports(_feature) {\n    return true;\n  }\n  // ── interaction: the DOM does this natively in SVG mode ──\n  hitTest() {\n    return null;\n  }\n  restyle() {\n  }\n  // ── export: SVG serializes directly; no bitmap to composite ──\n  toBitmap() {\n    return null;\n  }\n  destroy() {\n  }\n}\nconst RENDERER_REGISTRY_KEY = \"__apexcharts_renderers__\";\nfunction getRendererRegistry() {\n  const g = (\n    /** @type {any} */\n    globalThis\n  );\n  if (!g[RENDERER_REGISTRY_KEY]) g[RENDERER_REGISTRY_KEY] = /* @__PURE__ */ new Map();\n  return g[RENDERER_REGISTRY_KEY];\n}\nclass RendererController {\n  /** Same Map as getRendererRegistry(); exposed for tests/tooling. */\n  static get _rendererRegistry() {\n    return getRendererRegistry();\n  }\n  /**\n   * @param {string} kind\n   * @param {(w: any, ctx: any) => any} factory\n   */\n  static registerRenderer(kind, factory) {\n    getRendererRegistry().set(kind, factory);\n  }\n  /**\n   * Remove a registered renderer backend (tests / hot-reload). Charts fall\n   * back to SVG on their next resolve().\n   * @param {string} kind\n   */\n  static unregisterRenderer(kind) {\n    getRendererRegistry().delete(kind);\n  }\n  /**\n   * @param {any} w\n   * @param {any} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.svg = new SvgRenderer(w, ctx);\n    this.active = this.svg;\n    this._activeKind = \"svg\";\n    this._instances = {};\n  }\n  /**\n   * The kind selection WANTS (before availability/fallback). Pure.\n   * @returns {import('../renderers/Renderer').RendererKind}\n   */\n  _desiredKind() {\n    const cfg = this.w.config.chart;\n    const mode = cfg.renderer || \"svg\";\n    if (!Environment.isBrowser()) return \"svg\";\n    if (mode === \"svg\") return \"svg\";\n    if (hasCanvasUnsupportedFeature(this.w)) return \"svg\";\n    if (mode === \"canvas\") return \"canvas\";\n    const marks = computeMarkCount(this.w);\n    const threshold = cfg.rendererThreshold || 8e3;\n    return marks >= threshold ? \"canvas\" : \"svg\";\n  }\n  /**\n   * Resolve + instantiate the active renderer and set `ctx.renderer`. Falls\n   * back to SVG (with a warning only when canvas was explicitly requested) if\n   * the desired backend is not registered.\n   * @returns {import('../renderers/Renderer').RendererKind}\n   */\n  resolve() {\n    const mode = this.w.config.chart.renderer || \"svg\";\n    const desired = this._desiredKind();\n    if (desired !== \"svg\") {\n      const factory = getRendererRegistry().get(desired);\n      if (factory) {\n        if (!this._instances[desired]) {\n          this._instances[desired] = factory(this.w, this.ctx);\n        }\n        this.active = this._instances[desired];\n        this._activeKind = desired;\n        this.ctx.renderer = this.active;\n        this.w.globals.activeRenderer = this.active;\n        return this._activeKind;\n      }\n      if (mode === desired) {\n        console.warn(\n          `[apexcharts] renderer:\"${desired}\" requested but that renderer is not bundled (import 'apexcharts/features/renderer-${desired}'); falling back to SVG.`\n        );\n      }\n    } else if (mode === \"canvas\" && hasCanvasUnsupportedFeature(this.w)) {\n      console.warn(\n        `[apexcharts] renderer:\"canvas\" requested but this chart uses a feature the canvas renderer does not render yet (gradient/pattern/image fill or a state color-matrix filter); falling back to SVG.`\n      );\n    }\n    this.active = this.svg;\n    this._activeKind = \"svg\";\n    this.ctx.renderer = this.active;\n    this.w.globals.activeRenderer = this.active;\n    return this._activeKind;\n  }\n  /** @returns {import('../renderers/Renderer').RendererKind} */\n  getActiveKind() {\n    return this._activeKind;\n  }\n  /** Destroy the owned non-SVG renderer instances (full chart destroy). */\n  teardown() {\n    for (const kind in this._instances) {\n      const r = this._instances[kind];\n      if (r && typeof r.destroy === \"function\") r.destroy();\n    }\n    this._instances = {};\n    this.active = this.svg;\n    this._activeKind = \"svg\";\n  }\n}\nclass SVGElement {\n  /**\n   * @param {any} node\n   */\n  constructor(node) {\n    this.node = node;\n    if (node) {\n      node.instance = this;\n    }\n    this._listeners = [];\n    this._filter = null;\n  }\n  // ---- Attribute methods ----\n  /**\n   * @param {any} a\n   * @param {any} [v]\n   */\n  attr(a, v) {\n    if (typeof a === \"string\" && v === void 0) {\n      return this.node.getAttribute(a);\n    }\n    const attrs = typeof a === \"string\" ? { [a]: v } : a;\n    for (const key in attrs) {\n      let val = attrs[key];\n      if (val === null) {\n        this.node.removeAttribute(key);\n      } else if (val !== void 0) {\n        if (typeof val === \"number\" && isNaN(val)) val = 0;\n        this.node.setAttribute(key, val);\n      }\n    }\n    if (this.node.nodeName === \"text\" && attrs.x != null) {\n      const tspans = this.node.querySelectorAll(\"tspan[data-newline]\");\n      for (let i = 0; i < tspans.length; i++) {\n        tspans[i].setAttribute(\"x\", attrs.x);\n      }\n    }\n    return this;\n  }\n  /**\n   * @param {Record<string, string>} styles\n   */\n  css(styles) {\n    for (const k in styles) {\n      this.node.style[k] = styles[k];\n    }\n    return this;\n  }\n  /**\n   * @param {any} v\n   */\n  fill(v) {\n    if (typeof v === \"object\") {\n      return this.attr(v);\n    }\n    return this.attr(\"fill\", v);\n  }\n  /**\n   * @param {any} v\n   */\n  stroke(v) {\n    if (typeof v === \"object\") {\n      if (v.color !== void 0) this.attr(\"stroke\", v.color);\n      if (v.width !== void 0) this.attr(\"stroke-width\", v.width);\n      if (v.dasharray !== void 0) this.attr(\"stroke-dasharray\", v.dasharray);\n      if (v.linecap !== void 0) this.attr(\"stroke-linecap\", v.linecap);\n      if (v.opacity !== void 0) this.attr(\"stroke-opacity\", v.opacity);\n      return this;\n    }\n    return this.attr(\"stroke\", v);\n  }\n  /**\n   * @param {number} w\n   * @param {number} h\n   */\n  size(w, h) {\n    return this.attr({ width: w, height: h });\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  move(x, y) {\n    return this.attr({ x, y });\n  }\n  /**\n   * @param {number} cx\n   * @param {number} cy\n   */\n  center(cx, cy) {\n    if (this.node.nodeName === \"g\") {\n      const box = this.bbox();\n      const dx = cx - (box.x + box.width / 2);\n      const dy = cy - (box.y + box.height / 2);\n      return this.attr(\"transform\", `translate(${dx}, ${dy})`);\n    }\n    return this.attr({ cx, cy });\n  }\n  // ---- Tree operations ----\n  /**\n   * @param {any} child\n   */\n  add(child) {\n    if (child && child.__isCanvasMark) return this;\n    this.node.appendChild(child.node || child);\n    return this;\n  }\n  /**\n   * @param {any} parent\n   */\n  addTo(parent) {\n    const p = parent.node || parent;\n    p.appendChild(this.node);\n    return this;\n  }\n  remove() {\n    if (this.node.parentNode) {\n      this.node.parentNode.removeChild(this.node);\n    }\n    return this;\n  }\n  clear() {\n    while (this.node.firstChild) {\n      this.node.removeChild(this.node.firstChild);\n    }\n    return this;\n  }\n  // ---- Query ----\n  /**\n   * @param {string} selector\n   */\n  find(selector) {\n    return Array.from(this.node.querySelectorAll(selector)).map(\n      (n) => n.instance || new SVGElement(n)\n    );\n  }\n  /**\n   * @param {string} selector\n   */\n  findOne(selector) {\n    const n = this.node.querySelector(selector);\n    return n ? n.instance || new SVGElement(n) : null;\n  }\n  // ---- Events ----\n  /**\n   * @param {Event} event\n   * @param {Function} handler\n   */\n  on(event, handler) {\n    const eventType = (\n      /** @type {string} */\n      /** @type {any} */\n      event.split(\n        \".\"\n      )[0]\n    );\n    this._listeners.push({ event, eventType, handler });\n    this.node.addEventListener(eventType, handler);\n    return this;\n  }\n  /**\n   * @param {Event} event\n   * @param {Function} handler\n   */\n  off(event, handler) {\n    if (!event && !handler) {\n      this._listeners.forEach((l) => {\n        this.node.removeEventListener(l.eventType, l.handler);\n      });\n      this._listeners = [];\n    } else if (event && !handler) {\n      const eventType = (\n        /** @type {string} */\n        /** @type {any} */\n        event.split(\".\")[0]\n      );\n      this._listeners = this._listeners.filter((l) => {\n        if (l.eventType === eventType) {\n          this.node.removeEventListener(l.eventType, l.handler);\n          return false;\n        }\n        return true;\n      });\n    } else {\n      const eventType = (\n        /** @type {string} */\n        /** @type {any} */\n        event.split(\".\")[0]\n      );\n      this._listeners = this._listeners.filter((l) => {\n        if (l.eventType === eventType && l.handler === handler) {\n          this.node.removeEventListener(l.eventType, l.handler);\n          return false;\n        }\n        return true;\n      });\n    }\n    return this;\n  }\n  // ---- Iteration ----\n  /**\n   * @param {Function} fn\n   * @param {boolean} deep\n   */\n  each(fn, deep) {\n    const children = Array.from(this.node.children);\n    children.forEach((child) => {\n      const inst = child.instance || new SVGElement(child);\n      fn.call(inst);\n      if (deep) inst.each(fn, deep);\n    });\n    return this;\n  }\n  // ---- CSS classes ----\n  /**\n   * @param {string} cls\n   */\n  removeClass(cls) {\n    if (cls === \"*\") {\n      this.node.removeAttribute(\"class\");\n    } else {\n      this.node.classList.remove(cls);\n    }\n    return this;\n  }\n  // ---- Children ----\n  children() {\n    return Array.from(this.node.childNodes).filter((n) => n.nodeType === 1).map((n) => n.instance || new SVGElement(n));\n  }\n  // ---- Visibility ----\n  hide() {\n    this.node.style.display = \"none\";\n    return this;\n  }\n  show() {\n    this.node.style.display = \"\";\n    return this;\n  }\n  // ---- Measurement ----\n  bbox() {\n    if (typeof this.node.getBBox === \"function\") {\n      try {\n        return this.node.getBBox();\n      } catch (e) {\n      }\n    }\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n  // ---- Text-specific ----\n  /**\n   * @param {string} text\n   */\n  tspan(text) {\n    const tspan = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"tspan\"\n    );\n    tspan.textContent = text;\n    this.node.appendChild(tspan);\n    return new SVGElement(tspan);\n  }\n  // ---- Path-specific ----\n  /**\n   * @param {string} d\n   */\n  plot(d) {\n    if (typeof d === \"string\") {\n      this.attr(\"d\", d);\n    }\n    return this;\n  }\n  // ---- Animation (overridden by SVGAnimation mixin) ----\n  animate() {\n    throw new Error(\"Animation module not loaded\");\n  }\n  // ---- Filter methods (set up by SVGFilter module) ----\n  // `filterWith`, `unfilter` and `filterer` are installed on the prototype by\n  // installFilterMethods() (svg/index.js). This stub only exists so a call\n  // before the filter module is installed fails with a clear message.\n  filterWith() {\n    throw new Error(\"Filter module not loaded\");\n  }\n}\nlet gradientCounter = 0;\nclass SVGGradient extends SVGElement {\n  /**\n   * @param {any} container\n   * @param {string} type\n   * @param {object} builder\n   */\n  constructor(container, type, builder) {\n    const tag = type === \"radial\" ? \"radialGradient\" : \"linearGradient\";\n    const node = BrowserAPIs.createElementNS(SVGNS$2, tag);\n    super(node);\n    this._id = \"SvgjsGradient\" + ++gradientCounter;\n    this.attr(\"id\", this._id);\n    if (typeof builder === \"function\") {\n      builder(new StopBuilder(this));\n    }\n    let defs = container.node.querySelector(\"defs\");\n    if (!defs) {\n      defs = BrowserAPIs.createElementNS(SVGNS$2, \"defs\");\n      container.node.appendChild(defs);\n    }\n    defs.appendChild(this.node);\n  }\n  /**\n   * @param {any} offset\n   * @param {string} color\n   * @param {number} opacity\n   */\n  stop(offset, color, opacity) {\n    const s = BrowserAPIs.createElementNS(SVGNS$2, \"stop\");\n    s.setAttribute(\"offset\", offset);\n    s.setAttribute(\"stop-color\", color);\n    if (opacity !== void 0) s.setAttribute(\"stop-opacity\", String(opacity));\n    this.node.appendChild(s);\n    return this;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  from(x, y) {\n    return this.attr({ x1: x, y1: y });\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  to(x, y) {\n    return this.attr({ x2: x, y2: y });\n  }\n  url() {\n    return \"url(#\" + this._id + \")\";\n  }\n  toString() {\n    return this.url();\n  }\n  valueOf() {\n    return this.url();\n  }\n  fill() {\n    return this.url();\n  }\n}\nclass StopBuilder {\n  /**\n   * @param {any} gradient\n   */\n  constructor(gradient) {\n    this.gradient = gradient;\n  }\n  /**\n   * @param {any} offset\n   * @param {string} color\n   * @param {number} opacity\n   */\n  stop(offset, color, opacity) {\n    this.gradient.stop(offset, color, opacity);\n    return this;\n  }\n}\nlet patternCounter = 0;\nclass SVGPattern extends SVGElement {\n  /**\n   * @param {any} container\n   * @param {number} w\n   * @param {number} h\n   * @param {Function} builder\n   */\n  constructor(container, w, h, builder) {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, \"pattern\");\n    super(node);\n    this._id = \"SvgjsPattern\" + ++patternCounter;\n    this.attr({\n      id: this._id,\n      width: w,\n      height: h,\n      patternUnits: \"userSpaceOnUse\"\n    });\n    if (typeof builder === \"function\") {\n      const patternContainer = new SVGContainer(this.node);\n      builder(patternContainer);\n    }\n    let defs = container.node.querySelector(\"defs\");\n    if (!defs) {\n      defs = BrowserAPIs.createElementNS(SVGNS$2, \"defs\");\n      container.node.appendChild(defs);\n    }\n    defs.appendChild(this.node);\n  }\n  url() {\n    return \"url(#\" + this._id + \")\";\n  }\n  toString() {\n    return this.url();\n  }\n  valueOf() {\n    return this.url();\n  }\n  fill() {\n    return this.url();\n  }\n}\nclass SVGContainer extends SVGElement {\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  line(x1, y1, x2, y2) {\n    const el = this._make(\"line\");\n    if (x1 !== void 0) {\n      el.attr({ x1, y1, x2, y2 });\n    }\n    return el;\n  }\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} h\n   */\n  rect(w, h) {\n    const el = this._make(\"rect\");\n    if (w !== void 0) {\n      el.attr({ width: w, height: h });\n    }\n    return el;\n  }\n  /**\n   * @param {number} d\n   */\n  circle(d) {\n    const el = this._make(\"circle\");\n    if (d !== void 0) {\n      el.attr({ r: d / 2, cx: d / 2, cy: d / 2 });\n    }\n    return el;\n  }\n  /**\n   * @param {string} d\n   */\n  path(d) {\n    const el = this._make(\"path\");\n    if (d) el.attr(\"d\", d);\n    return el;\n  }\n  /**\n   * @param {string} pts\n   */\n  polygon(pts) {\n    const el = this._make(\"polygon\");\n    if (pts) el.attr(\"points\", pts);\n    return el;\n  }\n  group() {\n    return this._makeContainer(\"g\");\n  }\n  defs() {\n    return this._makeContainer(\"defs\");\n  }\n  /**\n   * @param {string} textContent\n   */\n  plain(textContent) {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, \"text\");\n    node.textContent = textContent;\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    return el;\n  }\n  /**\n   * @param {object} builder\n   */\n  text(builder) {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, \"text\");\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    if (typeof builder === \"function\") {\n      builder(new TspanBuilder(node));\n    }\n    return el;\n  }\n  /**\n   * @param {string} url\n   * @param {Function} callback\n   */\n  image(url, callback) {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, \"image\");\n    node.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", url);\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    if (typeof callback === \"function\" && Environment.isBrowser()) {\n      const img = new Image();\n      img.onload = function() {\n        el.size(img.width, img.height);\n        callback.call(el, { width: img.width, height: img.height });\n      };\n      img.src = url;\n    }\n    return el;\n  }\n  /**\n   * @param {string} type\n   * @param {object} builder\n   */\n  gradient(type, builder) {\n    return new SVGGradient(this, type, builder);\n  }\n  /**\n   * @param {number} w\n   * @param {number} h\n   * @param {Function} builder\n   */\n  pattern(w, h, builder) {\n    return new SVGPattern(this, w, h, builder);\n  }\n  /**\n   * @param {string} tag\n   */\n  _make(tag) {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, tag);\n    this.node.appendChild(node);\n    return new SVGElement(node);\n  }\n  /**\n   * @param {string} tag\n   */\n  _makeContainer(tag) {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, tag);\n    this.node.appendChild(node);\n    return new SVGContainer(node);\n  }\n}\nclass TspanBuilder {\n  /**\n   * @param {any} textNode\n   */\n  constructor(textNode) {\n    this.textNode = textNode;\n  }\n  /**\n   * @param {string} text\n   */\n  tspan(text) {\n    const tspan = BrowserAPIs.createElementNS(SVGNS$2, \"tspan\");\n    tspan.textContent = text;\n    this.textNode.appendChild(tspan);\n    return new TspanWrapper(tspan, this.textNode);\n  }\n}\nclass TspanWrapper {\n  /**\n   * @param {any} node\n   * @param {any} textNode\n   */\n  constructor(node, textNode) {\n    this.node = node;\n    this.textNode = textNode;\n  }\n  newLine() {\n    this.node.setAttribute(\"dy\", \"1.1em\");\n    this.node.dataset.newline = \"1\";\n    return this;\n  }\n}\nlet filterCounter = 0;\nclass SVGFilter extends SVGElement {\n  constructor() {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, \"filter\");\n    super(node);\n    this._id = \"SvgjsFilter\" + ++filterCounter;\n    this.attr(\"id\", this._id);\n  }\n}\nclass FilterBuilder {\n  /**\n   * @param {any} filter\n   */\n  constructor(filter) {\n    this.filter = filter;\n  }\n  /**\n   * @param {object} attrs\n   */\n  colorMatrix(attrs) {\n    return this._primitive(\"feColorMatrix\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  offset(attrs) {\n    return this._primitive(\"feOffset\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  gaussianBlur(attrs) {\n    return this._primitive(\"feGaussianBlur\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  flood(attrs) {\n    return this._primitive(\"feFlood\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  composite(attrs) {\n    return this._primitive(\"feComposite\", attrs);\n  }\n  /**\n   * @param {string[]} sources\n   */\n  merge(sources) {\n    const m = BrowserAPIs.createElementNS(SVGNS$2, \"feMerge\");\n    sources.forEach((src) => {\n      const mn = BrowserAPIs.createElementNS(SVGNS$2, \"feMergeNode\");\n      mn.setAttribute(\"in\", src);\n      m.appendChild(mn);\n    });\n    this.filter.node.appendChild(m);\n    return new SVGElement(m);\n  }\n  /**\n   * @param {string} tag\n   * @param {Record<string, any>} attrs\n   */\n  _primitive(tag, attrs) {\n    const el = BrowserAPIs.createElementNS(SVGNS$2, tag);\n    for (const key in attrs) {\n      el.setAttribute(key, attrs[key]);\n    }\n    this.filter.node.appendChild(el);\n    return new SVGElement(el);\n  }\n}\nfunction installFilterMethods(ElementClass) {\n  ElementClass.prototype.filterWith = function(fn) {\n    const filter = new SVGFilter();\n    this._filter = filter;\n    let svgRoot = this.node;\n    while (svgRoot && svgRoot.nodeName !== \"svg\") {\n      svgRoot = svgRoot.parentNode;\n    }\n    if (svgRoot) {\n      let defs = svgRoot.querySelector(\"defs\");\n      if (!defs) {\n        defs = BrowserAPIs.createElementNS(SVGNS$2, \"defs\");\n        svgRoot.insertBefore(defs, svgRoot.firstChild);\n      }\n      defs.appendChild(filter.node);\n    }\n    fn(new FilterBuilder(filter));\n    this.attr(\"filter\", \"url(#\" + filter._id + \")\");\n    return this;\n  };\n  ElementClass.prototype.unfilter = function(all) {\n    if (this._filter) {\n      this.node.removeAttribute(\"filter\");\n      if (all && this._filter.node && this._filter.node.parentNode) {\n        this._filter.node.parentNode.removeChild(this._filter.node);\n      }\n      this._filter = null;\n    }\n    return this;\n  };\n  ElementClass.prototype.filterer = function() {\n    return this._filter;\n  };\n}\nfunction installDraggable(ElementClass) {\n  ElementClass.prototype.draggable = function(opts) {\n    if (opts === false) {\n      if (this._dragCleanup) {\n        this._dragCleanup();\n        this._dragCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const constraints = opts || {};\n    const onPointerDown = (e) => {\n      if (e.button && e.button !== 0) return;\n      e.stopPropagation();\n      const isTouch = e.type === \"touchstart\";\n      const ev = isTouch ? e.touches[0] : e;\n      const svgEl = el.node;\n      const startAttrX = parseFloat(svgEl.getAttribute(\"x\")) || 0;\n      const startAttrY = parseFloat(svgEl.getAttribute(\"y\")) || 0;\n      const startClientX = ev.clientX;\n      const startClientY = ev.clientY;\n      const svgRoot = svgEl.ownerSVGElement;\n      let ctm = null;\n      if (svgRoot) {\n        ctm = svgRoot.getScreenCTM();\n      }\n      const onMove = (me) => {\n        const mev = me.type === \"touchmove\" ? me.touches[0] : me;\n        let dx = mev.clientX - startClientX;\n        let dy = mev.clientY - startClientY;\n        if (ctm) {\n          dx = dx / ctm.a;\n          dy = dy / ctm.d;\n        }\n        let newX = startAttrX + dx;\n        let newY = startAttrY + dy;\n        const w = parseFloat(svgEl.getAttribute(\"width\")) || 0;\n        const h = parseFloat(svgEl.getAttribute(\"height\")) || 0;\n        if (constraints.minX !== void 0 && newX < constraints.minX)\n          newX = constraints.minX;\n        if (constraints.minY !== void 0 && newY < constraints.minY)\n          newY = constraints.minY;\n        if (constraints.maxX !== void 0 && newX + w > constraints.maxX)\n          newX = constraints.maxX - w;\n        if (constraints.maxY !== void 0 && newY + h > constraints.maxY)\n          newY = constraints.maxY - h;\n        const box = {\n          x: newX,\n          y: newY,\n          w,\n          h,\n          x2: newX + w,\n          y2: newY + h\n        };\n        const event = new CustomEvent(\"dragmove\", {\n          detail: {\n            handler: {\n              /**\n               * @param {number} x\n               * @param {number} y\n               */\n              move: function(x, y) {\n                svgEl.setAttribute(\"x\", x);\n                svgEl.setAttribute(\"y\", y);\n              }\n            },\n            box\n          }\n        });\n        svgEl.dispatchEvent(event);\n      };\n      const onUp = () => {\n        if (Environment.isBrowser()) {\n          document.removeEventListener(\"mousemove\", onMove);\n          document.removeEventListener(\"touchmove\", onMove);\n          document.removeEventListener(\"mouseup\", onUp);\n          document.removeEventListener(\"touchend\", onUp);\n        }\n        el._activeDrag = null;\n      };\n      if (Environment.isBrowser()) {\n        document.addEventListener(\"mousemove\", onMove);\n        document.addEventListener(\"touchmove\", onMove);\n        document.addEventListener(\"mouseup\", onUp);\n        document.addEventListener(\"touchend\", onUp);\n        el._activeDrag = { onMove, onUp };\n      }\n    };\n    el.node.addEventListener(\"mousedown\", onPointerDown);\n    el.node.addEventListener(\"touchstart\", onPointerDown);\n    el._dragCleanup = () => {\n      el.node.removeEventListener(\"mousedown\", onPointerDown);\n      el.node.removeEventListener(\"touchstart\", onPointerDown);\n      if (el._activeDrag && Environment.isBrowser()) {\n        document.removeEventListener(\"mousemove\", el._activeDrag.onMove);\n        document.removeEventListener(\"touchmove\", el._activeDrag.onMove);\n        document.removeEventListener(\"mouseup\", el._activeDrag.onUp);\n        document.removeEventListener(\"touchend\", el._activeDrag.onUp);\n        el._activeDrag = null;\n      }\n    };\n    return el;\n  };\n}\nfunction installSelectable(ElementClass) {\n  ElementClass.prototype.select = function(opts) {\n    if (opts === false) {\n      if (this._selectCleanup) {\n        this._selectCleanup();\n        this._selectCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const { createHandle, updateHandle } = opts;\n    const handleGroup = document.createElementNS(SVGNS$2, \"g\");\n    handleGroup.setAttribute(\"class\", \"svg_select_points\");\n    const parent = el.node.parentNode;\n    if (parent) {\n      parent.appendChild(handleGroup);\n    }\n    const handles = {};\n    const handleNames = [\"t\", \"b\", \"l\", \"r\", \"lt\", \"rt\", \"lb\", \"rb\"];\n    handleNames.forEach((name2, index) => {\n      const subGroup = new SVGContainer(document.createElementNS(SVGNS$2, \"g\"));\n      handleGroup.appendChild(subGroup.node);\n      const handle = createHandle(subGroup, [0, 0], index, [], name2);\n      handles[name2] = { group: subGroup, handle };\n    });\n    const updatePositions = () => {\n      const x = parseFloat(el.attr(\"x\")) || 0;\n      const y = parseFloat(el.attr(\"y\")) || 0;\n      const w = parseFloat(el.attr(\"width\")) || 0;\n      const h = parseFloat(el.attr(\"height\")) || 0;\n      const elTransform = el.node.getAttribute(\"transform\");\n      if (elTransform) {\n        handleGroup.setAttribute(\"transform\", elTransform);\n      } else {\n        handleGroup.removeAttribute(\"transform\");\n      }\n      const positions = {\n        t: [x + w / 2, y],\n        b: [x + w / 2, y + h],\n        l: [x, y + h / 2],\n        r: [x + w, y + h / 2],\n        lt: [x, y],\n        rt: [x + w, y],\n        lb: [x, y + h],\n        rb: [x + w, y + h]\n      };\n      handleNames.forEach((name2) => {\n        if (handles[name2] && positions[name2]) {\n          updateHandle(handles[name2].group, positions[name2]);\n        }\n      });\n    };\n    updatePositions();\n    el._selectHandles = handleGroup;\n    el._selectHandlesMap = handles;\n    el._updateSelectPositions = updatePositions;\n    el._selectCleanup = () => {\n      if (handleGroup.parentNode) {\n        handleGroup.parentNode.removeChild(handleGroup);\n      }\n      el._selectHandles = null;\n      el._selectHandlesMap = null;\n      el._updateSelectPositions = null;\n    };\n    return el;\n  };\n  ElementClass.prototype.resize = function(enable) {\n    if (enable === false) {\n      if (this._resizeCleanup) {\n        this._resizeCleanup();\n        this._resizeCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const handles = el._selectHandlesMap;\n    if (!handles) return el;\n    const cleanupFns = [];\n    const makeHandleDraggable = (name2) => {\n      const handleInfo = handles[name2];\n      if (!handleInfo || !handleInfo.group || !handleInfo.group.node) return;\n      const handleNode = handleInfo.group.node;\n      const onPointerDown = (e) => {\n        if (e.button && e.button !== 0) return;\n        e.stopPropagation();\n        const isTouch = e.type === \"touchstart\";\n        const ev = isTouch ? e.touches[0] : e;\n        const startClientX = ev.clientX;\n        const svgRoot = el.node.ownerSVGElement;\n        let ctm = null;\n        if (svgRoot) {\n          ctm = svgRoot.getScreenCTM();\n        }\n        const startX = parseFloat(el.attr(\"x\")) || 0;\n        const startW = parseFloat(el.attr(\"width\")) || 0;\n        const onMove = (me) => {\n          const mev = me.type === \"touchmove\" ? me.touches[0] : me;\n          let dx = mev.clientX - startClientX;\n          if (ctm) dx = dx / /** @type {any} */\n          ctm.a;\n          let newX = startX;\n          let newW = startW;\n          if (name2 === \"l\") {\n            newX = startX + dx;\n            newW = startW - dx;\n          } else if (name2 === \"r\") {\n            newW = startW + dx;\n          }\n          if (newW < 0) {\n            newW = 0;\n          }\n          el.attr({ x: newX, width: newW });\n          if (el._updateSelectPositions) {\n            el._updateSelectPositions();\n          }\n          const event = new CustomEvent(\"resize\", {\n            detail: { el }\n          });\n          el.node.dispatchEvent(event);\n        };\n        const onUp = () => {\n          if (Environment.isBrowser()) {\n            document.removeEventListener(\"mousemove\", onMove);\n            document.removeEventListener(\"touchmove\", onMove);\n            document.removeEventListener(\"mouseup\", onUp);\n            document.removeEventListener(\"touchend\", onUp);\n          }\n          const event = new CustomEvent(\"resize\", {\n            detail: { el }\n          });\n          el.node.dispatchEvent(event);\n        };\n        if (Environment.isBrowser()) {\n          document.addEventListener(\"mousemove\", onMove);\n          document.addEventListener(\"touchmove\", onMove);\n          document.addEventListener(\"mouseup\", onUp);\n          document.addEventListener(\"touchend\", onUp);\n        }\n      };\n      handleNode.addEventListener(\"mousedown\", onPointerDown);\n      handleNode.addEventListener(\"touchstart\", onPointerDown);\n      cleanupFns.push(() => {\n        handleNode.removeEventListener(\"mousedown\", onPointerDown);\n        handleNode.removeEventListener(\"touchstart\", onPointerDown);\n      });\n    };\n    makeHandleDraggable(\"l\");\n    makeHandleDraggable(\"r\");\n    el._resizeCleanup = () => {\n      cleanupFns.forEach((fn) => fn());\n    };\n    return el;\n  };\n}\ninstallFilterMethods(SVGElement);\ninstallAnimationMethods(SVGElement);\ninstallDraggable(SVGElement);\ninstallSelectable(SVGElement);\nfunction SVG() {\n  const svgEl = BrowserAPIs.createElementNS(SVGNS$2, \"svg\");\n  const svg = new SVGContainer(svgEl);\n  svg.attr({ xmlns: SVGNS$2 });\n  return svg;\n}\nSVG.xlink = \"http://www.w3.org/1999/xlink\";\nif (Environment.isBrowser() && typeof window.SVG === \"undefined\") {\n  window.SVG = SVG;\n}\nif (Environment.isBrowser()) {\n  if (typeof window.SVG === \"undefined\") {\n    window.SVG = SVG;\n  }\n  if (typeof window.Apex === \"undefined\") {\n    window.Apex = {};\n  }\n} else {\n  if (typeof global !== \"undefined\") {\n    if (typeof /** @type {any} */\n    global.Apex === \"undefined\") {\n      global.Apex = {};\n    }\n    if (typeof /** @type {any} */\n    global.SVG === \"undefined\") {\n      global.SVG = SVG;\n    }\n  }\n}\nconst _InitCtxVariables = class _InitCtxVariables {\n  /**\n   * Register one or more optional feature modules.\n   *\n   * @param {Record<string, new (w: object, ctx: object) => unknown>} featureMap\n   *   Plain object mapping ctx property name → constructor.\n   *\n   * Example (called from src/features/legend.js):\n   *   InitCtxVariables.registerFeatures({ legend: Legend })\n   */\n  static registerFeatures(featureMap) {\n    for (const [key, Ctor] of Object.entries(featureMap)) {\n      _InitCtxVariables._featureRegistry.set(key, Ctor);\n    }\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(ctx) {\n    this.ctx = ctx;\n    this.w = ctx.w;\n  }\n  initModules() {\n    this.ctx.publicMethods = [\n      \"updateOptions\",\n      \"updateSeries\",\n      \"appendData\",\n      \"appendSeries\",\n      \"isSeriesHidden\",\n      \"highlightSeries\",\n      \"toggleSeries\",\n      \"showSeries\",\n      \"hideSeries\",\n      \"setLocale\",\n      \"resetSeries\",\n      \"zoomX\",\n      \"toggleDataPointSelection\",\n      \"dataURI\",\n      \"exportToCSV\",\n      \"addXaxisAnnotation\",\n      \"addYaxisAnnotation\",\n      \"addPointAnnotation\",\n      \"clearAnnotations\",\n      \"removeAnnotation\",\n      \"drillDown\",\n      \"drillUp\",\n      \"drillToRoot\",\n      \"paper\",\n      \"getActiveRenderer\",\n      \"destroy\"\n    ];\n    this.ctx.eventList = [\n      \"click\",\n      \"mousedown\",\n      \"mousemove\",\n      \"mouseleave\",\n      \"touchstart\",\n      \"touchmove\",\n      \"touchleave\",\n      \"mouseup\",\n      \"touchend\",\n      \"keydown\",\n      \"keyup\"\n    ];\n    this.ctx.animations = new Animations(this.w, this.ctx);\n    this.ctx.axes = new Axes(this.w, this.ctx);\n    this.ctx.core = new Core(this.ctx.el, this.w, this.ctx);\n    this.ctx.config = new Config({});\n    this.ctx.data = new Data(this.w, {\n      resetGlobals: () => this.ctx.core.resetGlobals(),\n      isMultipleY: () => this.ctx.core.isMultipleY()\n    });\n    this.ctx.grid = new Grid(this.w, this.ctx);\n    this.ctx.graphics = new Graphics(this.w, this.ctx);\n    this.ctx.coreUtils = new CoreUtils(this.w);\n    this.ctx.crosshairs = new Crosshairs(this.w);\n    this.ctx.events = new Events(this.w, this.ctx);\n    this.ctx.fill = new Fill(this.w);\n    this.ctx.localization = new Localization(this.w);\n    this.ctx.options = new Options();\n    this.ctx.responsive = new Responsive(this.w);\n    this.ctx.series = new Series(this.w, {\n      // legend may not be registered — guard with ?.\n      toggleDataSeries: (...a) => {\n        var _a;\n        return (_a = this.ctx.legend) == null ? void 0 : _a.legendHelpers.toggleDataSeries(...a);\n      },\n      revertDefaultAxisMinMax: () => this.ctx.updateHelpers.revertDefaultAxisMinMax(),\n      updateSeries: (...a) => this.ctx.updateHelpers._updateSeries(...a)\n    });\n    this.ctx.theme = new Theme(this.w);\n    this.ctx.formatters = new Formatters(this.w);\n    this.ctx.titleSubtitle = new TitleSubtitle(this.w);\n    this.ctx.dimensions = new Dimensions(this.w, this.ctx);\n    this.ctx.updateHelpers = new UpdateHelpers(this.w, this.ctx);\n    this.ctx.rendererController = new RendererController(this.w, this.ctx);\n    this.ctx.renderer = this.ctx.rendererController.active;\n    const tooltipInstance = new Tooltip(this.w, this.ctx);\n    this.w.globals.tooltip = tooltipInstance;\n    Object.defineProperty(this.ctx, \"tooltip\", {\n      get() {\n        return this.w.globals.tooltip;\n      },\n      configurable: true\n    });\n    this._initOptionalModules();\n  }\n  /**\n   * Instantiate optional feature modules from the registry.\n   *\n   * Modules that are not registered are set to null on ctx so that call sites\n   * can safely use optional-chaining (ctx.tooltip?.drawTooltip(...)).\n   *\n   * Lazy-getter features (toolbar, zoomPanSelection, keyboardNavigation) are\n   * installed as on-demand getters so they are only constructed if accessed,\n   * and only if their constructor was registered.\n   */\n  _initOptionalModules() {\n    const reg = _InitCtxVariables._featureRegistry;\n    const w = this.w;\n    const ctx = this.ctx;\n    const ExportsCtor = reg.get(\"exports\");\n    ctx.exports = ExportsCtor ? new ExportsCtor(w, ctx) : null;\n    const LegendCtor = reg.get(\"legend\");\n    ctx.legend = LegendCtor ? new LegendCtor(w, ctx) : null;\n    const MorphCtor = reg.get(\"morphTypeChange\");\n    ctx.morphTypeChange = MorphCtor ? new MorphCtor(w, ctx) : null;\n    const DrilldownCtor = reg.get(\"drilldown\");\n    ctx.drilldown = DrilldownCtor ? new DrilldownCtor(w, ctx) : null;\n    const PerspectivesCtor = reg.get(\"perspectives\");\n    ctx.perspectives = PerspectivesCtor ? new PerspectivesCtor(w, ctx) : null;\n    const StoryboardCtor = reg.get(\"storyboard\");\n    ctx.storyboard = StoryboardCtor ? new StoryboardCtor(w, ctx) : null;\n    const HistoryCtor = reg.get(\"history\");\n    ctx.history = HistoryCtor ? new HistoryCtor(w, ctx) : null;\n    const LinkedViewsCtor = reg.get(\"linkedViews\");\n    ctx.linkedViews = LinkedViewsCtor ? new LinkedViewsCtor(w, ctx) : null;\n    const InkCtor = reg.get(\"ink\");\n    ctx.ink = InkCtor ? new InkCtor(w, ctx) : null;\n    const MeasureCtor = reg.get(\"measure\");\n    ctx.measure = MeasureCtor ? new MeasureCtor(w, ctx) : null;\n    const ContextMenuCtor = reg.get(\"contextMenu\");\n    ctx.contextMenu = ContextMenuCtor ? new ContextMenuCtor(w, ctx) : null;\n    const WeaveCtor = reg.get(\"weave\");\n    ctx.weave = WeaveCtor ? new WeaveCtor(w, ctx) : null;\n    const OSThemeCtor = reg.get(\"osThemeWatcher\");\n    ctx.osThemeWatcher = OSThemeCtor ? new OSThemeCtor(w, ctx) : null;\n    const ToolbarCtor = reg.get(\"toolbar\");\n    Object.defineProperty(ctx, \"toolbar\", {\n      get() {\n        var _a;\n        if (!this._toolbar && ToolbarCtor)\n          this._toolbar = new ToolbarCtor(w, this);\n        return (_a = this._toolbar) != null ? _a : null;\n      },\n      configurable: true\n    });\n    const ZoomPanCtor = reg.get(\"zoomPanSelection\");\n    Object.defineProperty(ctx, \"zoomPanSelection\", {\n      get() {\n        var _a;\n        if (!this._zoomPanSelection && ZoomPanCtor)\n          this._zoomPanSelection = new ZoomPanCtor(w, this);\n        return (_a = this._zoomPanSelection) != null ? _a : null;\n      },\n      configurable: true\n    });\n    const KeyboardCtor = reg.get(\"keyboardNavigation\");\n    Object.defineProperty(ctx, \"keyboardNavigation\", {\n      get() {\n        var _a;\n        if (!this._keyboardNavigation && KeyboardCtor)\n          this._keyboardNavigation = new KeyboardCtor(w, this);\n        return (_a = this._keyboardNavigation) != null ? _a : null;\n      },\n      configurable: true\n    });\n  }\n};\n/**\n * Registry of optional feature modules.\n *\n * Populated by ApexCharts.registerFeatures() (called from feature entry\n * files such as src/features/legend.js). Keys match the ctx property name\n * the module is stored under (e.g. 'legend', 'exports').\n *\n * Core modules that every chart needs are NOT in this registry — they are\n * always instantiated unconditionally in initModules().\n */\n__publicField(_InitCtxVariables, \"_featureRegistry\", /* @__PURE__ */ new Map());\nlet InitCtxVariables = _InitCtxVariables;\nclass Destroy {\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(ctx) {\n    this.ctx = ctx;\n    this.w = ctx.w;\n  }\n  /**\n   * @param {{ isUpdating: boolean }} opts\n   */\n  clear({ isUpdating }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;\n    (_a = this.ctx.weave) == null ? void 0 : _a.teardown(isUpdating);\n    if (!isUpdating) {\n      this.w.globals.isDestroyed = true;\n    }\n    if (this.ctx._zoomPanSelection) {\n      this.ctx._zoomPanSelection.destroy();\n    }\n    if (this.ctx._toolbar) {\n      this.ctx._toolbar.destroy();\n    }\n    if (this.w.globals.resizeObserver && typeof this.w.globals.resizeObserver.disconnect === \"function\") {\n      this.w.globals.resizeObserver.disconnect();\n      this.w.globals.resizeObserver = null;\n    }\n    PerformanceCache.invalidateAll(this.w);\n    if (isUpdating) {\n      this.ctx._zoomPanSelection = null;\n      this.ctx._toolbar = null;\n      (_b = this.ctx._keyboardNavigation) == null ? void 0 : _b.destroy();\n      this.ctx._keyboardNavigation = null;\n    } else {\n      (_c = this.ctx.perspectives) == null ? void 0 : _c.teardown();\n      this.ctx.perspectives = null;\n      (_d = this.ctx.storyboard) == null ? void 0 : _d.teardown();\n      this.ctx.storyboard = null;\n      (_e = this.ctx.history) == null ? void 0 : _e.teardown();\n      this.ctx.history = null;\n      (_f = this.ctx.linkedViews) == null ? void 0 : _f.teardown();\n      this.ctx.linkedViews = null;\n      (_g = this.ctx.ink) == null ? void 0 : _g.teardown();\n      this.ctx.ink = null;\n      (_h = this.ctx.measure) == null ? void 0 : _h.teardown();\n      this.ctx.measure = null;\n      (_i = this.ctx.contextMenu) == null ? void 0 : _i.teardown();\n      this.ctx.contextMenu = null;\n      (_j = this.ctx.osThemeWatcher) == null ? void 0 : _j.teardown();\n      this.ctx.osThemeWatcher = null;\n      this.ctx.weave = null;\n      (_l = (_k = this.ctx.rendererController) == null ? void 0 : _k.teardown) == null ? void 0 : _l.call(_k);\n      this.ctx.rendererController = null;\n      this.ctx.renderer = null;\n      this.ctx.drilldown = null;\n      this.ctx.morphTypeChange = null;\n      this.ctx.exports = null;\n      this.ctx.animations = null;\n      this.ctx.axes = null;\n      this.ctx.annotations = null;\n      this.ctx.core = null;\n      this.ctx.data = null;\n      this.ctx.grid = null;\n      this.ctx.series = null;\n      this.ctx.responsive = null;\n      this.ctx.theme = null;\n      this.ctx.formatters = null;\n      this.ctx.titleSubtitle = null;\n      this.ctx.legend = null;\n      this.ctx.dimensions = null;\n      this.ctx.options = null;\n      this.ctx.crosshairs = null;\n      this.ctx._zoomPanSelection = null;\n      this.ctx.updateHelpers = null;\n      this.ctx._toolbar = null;\n      this.ctx.localization = null;\n      this.ctx._keyboardNavigation = null;\n      this.ctx.w.globals.tooltip = null;\n    }\n    this.clearDomElements({ isUpdating });\n  }\n  /**\n   * @param {any} draw\n   */\n  killSVG(draw) {\n    draw.each(\n      /** @this {any} */\n      function() {\n        this.removeClass(\"*\");\n        this.off();\n      },\n      true\n    );\n    draw.clear();\n  }\n  /**\n   * @param {{ isUpdating: boolean }} opts\n   */\n  clearDomElements({ isUpdating }) {\n    const domEls = (\n      /** @type {any} */\n      this.w.dom\n    );\n    if (Environment.isBrowser() && domEls.Paper) {\n      const elSVG = domEls.Paper.node;\n      if (elSVG.parentNode && elSVG.parentNode.parentNode && !isUpdating) {\n        elSVG.parentNode.parentNode.style.minHeight = \"unset\";\n      }\n      const baseEl = domEls.baseEl;\n      if (baseEl) {\n        this.ctx.eventList.forEach((event) => {\n          baseEl.removeEventListener(event, this.ctx.events.documentEvent);\n        });\n      }\n      if (this.ctx.el !== null) {\n        while (this.ctx.el.firstChild) {\n          this.ctx.el.removeChild(this.ctx.el.firstChild);\n        }\n      }\n      this.killSVG(domEls.Paper);\n      domEls.Paper.remove();\n    }\n    domEls.Paper = null;\n    domEls.elWrap = null;\n    domEls.elGraphical = null;\n    domEls.elLegendWrap = null;\n    domEls.elLegendForeign = null;\n    domEls.baseEl = null;\n    domEls.elGridRect = null;\n    domEls.elGridRectMask = null;\n    domEls.elGridRectBarMask = null;\n    domEls.elGridRectMarkerMask = null;\n    domEls.elForecastMask = null;\n    domEls.elNonForecastMask = null;\n    domEls.elDefs = null;\n  }\n}\nconst REGISTRY_KEY$1 = \"__apexcharts_plugins__\";\nfunction getRegistry() {\n  const g = (\n    /** @type {any} */\n    globalThis\n  );\n  if (!g[REGISTRY_KEY$1]) g[REGISTRY_KEY$1] = {};\n  return g[REGISTRY_KEY$1];\n}\nfunction registerPlugin(def) {\n  if (!def || typeof def.name !== \"string\" || typeof def.setup !== \"function\") {\n    console.error(\n      \"[apexcharts] registerPlugin: a plugin needs a { name, setup } shape.\"\n    );\n    return;\n  }\n  getRegistry()[def.name] = def;\n}\nfunction getPlugin(name2) {\n  return getRegistry()[name2] || null;\n}\nfunction unregisterPlugin(name2) {\n  delete getRegistry()[name2];\n}\nconst ros = /* @__PURE__ */ new WeakMap();\nfunction addResizeListener(el, fn) {\n  if (Environment.isSSR()) return;\n  let called = false;\n  if (el.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n    const elRect = el.getBoundingClientRect();\n    if (el.style.display === \"none\" || elRect.width === 0) {\n      called = true;\n    }\n  }\n  const ro = new ResizeObserver((r) => {\n    if (called) {\n      fn.call(el, r);\n    }\n    called = true;\n  });\n  if (el.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n    Array.from(el.children).forEach((c) => ro.observe(c));\n  } else {\n    ro.observe(el);\n  }\n  ros.set(fn, ro);\n}\nfunction removeResizeListener(el, fn) {\n  if (Environment.isSSR()) return;\n  const ro = ros.get(fn);\n  if (ro) {\n    ro.disconnect();\n    ros.delete(fn);\n  }\n}\nconst apexCSS = '@keyframes opaque {\\n  0% {\\n    opacity: 0\\n  }\\n\\n  to {\\n    opacity: 1\\n  }\\n}\\n\\n@keyframes resizeanim {\\n\\n  0%,\\n  to {\\n    opacity: 0\\n  }\\n}\\n\\n.apexcharts-canvas {\\n  position: relative;\\n  direction: ltr !important;\\n  user-select: none;\\n  /* Focus indicator colour. Themes override below. */\\n  --apexcharts-focus-color: #008FFB;\\n}\\n\\n/* Dark theme & high-contrast: brighter focus colour for sufficient contrast. */\\n.apexcharts-canvas .apexcharts-theme-dark,\\n.apexcharts-theme-dark.apexcharts-canvas {\\n  --apexcharts-focus-color: #FFD500;\\n}\\n.apexcharts-canvas.apexcharts-high-contrast,\\n.apexcharts-high-contrast.apexcharts-canvas {\\n  --apexcharts-focus-color: #FFFF00;\\n}\\n\\n/* Visually-hidden aria-live status region (WCAG 4.1.3 Status Messages). */\\n.apexcharts-sr-status {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border: 0;\\n}\\n\\n/* Respect OS-level reduced-motion preference (WCAG 2.3.3). */\\n@media (prefers-reduced-motion: reduce) {\\n  .apexcharts-canvas *,\\n  .apexcharts-canvas *::before,\\n  .apexcharts-canvas *::after {\\n    animation-duration: 0.01ms !important;\\n    animation-iteration-count: 1 !important;\\n    transition-duration: 0.01ms !important;\\n  }\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 6px\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n  border-radius: 4px;\\n  background-color: rgba(0, 0, 0, .5);\\n  box-shadow: 0 0 1px rgba(255, 255, 255, .5);\\n  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5)\\n}\\n\\n.apexcharts-inner {\\n  position: relative\\n}\\n\\n.apexcharts-text tspan {\\n  font-family: inherit\\n}\\n\\nrect.legend-mouseover-inactive,\\n.legend-mouseover-inactive rect,\\n.legend-mouseover-inactive path,\\n.legend-mouseover-inactive circle,\\n.legend-mouseover-inactive line,\\n.legend-mouseover-inactive text.apexcharts-yaxis-title-text,\\n.legend-mouseover-inactive text.apexcharts-yaxis-label {\\n  transition: .15s ease all;\\n  opacity: .2\\n}\\n\\n/* Linked Views (#4): per-mark crossfilter dim. Applied to individual data\\n   marks (not whole series) whose x is outside the brushed range. Opacity is\\n   overridable per chart via the --apx-cf-dim custom property. */\\n.apexcharts-crossfilter-dimmed {\\n  transition: opacity .25s ease;\\n  opacity: var(--apx-cf-dim, .2)\\n}\\n\\n/* Linked Views (#4): default styling for the built-in crossfilter data table\\n   (cf.dataTable). Deliberately light so host styles can override. */\\n.apexcharts-cf-table {\\n  border-collapse: collapse;\\n  width: 100%;\\n  font-size: 13px;\\n}\\n.apexcharts-cf-table caption {\\n  caption-side: bottom;\\n  text-align: right;\\n  padding: 6px 2px;\\n  font-size: 12px;\\n  opacity: .7\\n}\\n.apexcharts-cf-table th,\\n.apexcharts-cf-table td {\\n  padding: 6px 10px;\\n  text-align: left;\\n  border-bottom: 1px solid rgba(0, 0, 0, .08)\\n}\\n.apexcharts-cf-table th {\\n  font-weight: 600;\\n  border-bottom-width: 2px\\n}\\n.apexcharts-cf-table tbody tr:hover {\\n  background: rgba(99, 102, 241, .06)\\n}\\n\\n/* Measure ruler (#18): measure / delta ruler.\\n   Theme via these classes or the --apx-measure-* custom properties below\\n   (config `chart.measure.colors` overrides both). The ruler group also carries\\n   a direction class: apexcharts-measure-up | -down | -flat.\\n   Element classes:\\n     .apexcharts-measure-band     shaded span band\\n     .apexcharts-measure-vline    vertical guide lines\\n     .apexcharts-measure-line     free-mode diagonal line\\n     .apexcharts-measure-label-bg readout box     .apexcharts-measure-label text\\n   Colors are applied as SVG presentation attributes, so any rule you write on\\n   these classes overrides them. */\\n.apexcharts-canvas {\\n  --apx-measure-up: #16a34a;\\n  --apx-measure-down: #dc2626;\\n  --apx-measure-neutral: #64748b;\\n  --apx-measure-guide: #94a3b8;\\n}\\n.apexcharts-measure-capture {\\n  cursor: crosshair;\\n}\\n\\n/* Radial Actions (#chrome): right-click context menu. Theme via these classes\\n   or the --apx-menu-* custom properties. */\\n.apexcharts-canvas {\\n  --apx-menu-bg: #ffffff;\\n  --apx-menu-fg: #1e293b;\\n  --apx-menu-border: #e2e8f0;\\n  --apx-menu-hover: #f1f5f9;\\n  --apx-menu-shadow: rgba(15, 23, 42, 0.18);\\n}\\n.apexcharts-context-menu {\\n  min-width: 168px;\\n  padding: 4px;\\n  border-radius: 8px;\\n  background: var(--apx-menu-bg);\\n  border: 1px solid var(--apx-menu-border);\\n  box-shadow: 0 6px 22px var(--apx-menu-shadow);\\n  font-family: Helvetica, Arial, sans-serif;\\n  font-size: 13px;\\n  z-index: 20;\\n  user-select: none;\\n}\\n.apexcharts-context-menu-item {\\n  display: block;\\n  width: 100%;\\n  box-sizing: border-box;\\n  text-align: left;\\n  padding: 7px 12px;\\n  border: 0;\\n  border-radius: 5px;\\n  background: transparent;\\n  color: var(--apx-menu-fg);\\n  font: inherit;\\n  cursor: pointer;\\n}\\n.apexcharts-context-menu-item:hover,\\n.apexcharts-context-menu-item--active {\\n  background: var(--apx-menu-hover);\\n}\\n.apexcharts-context-menu-item:focus {\\n  outline: none;\\n}\\n\\n/* Ink Layer (#7): the floating note editor card, opened by clicking an\\n   ink-managed annotation. Theme via these classes or the --apx-ink-* vars. */\\n.apexcharts-canvas {\\n  --apx-ink-card-bg: #ffffff;\\n  --apx-ink-card-fg: #1e293b;\\n  --apx-ink-card-border: #e2e8f0;\\n  --apx-ink-card-hover: #f1f5f9;\\n  --apx-ink-card-accent: #6366f1;\\n  --apx-ink-card-shadow: rgba(15, 23, 42, 0.18);\\n}\\n.apexcharts-ink-card {\\n  position: absolute;\\n  z-index: 25;\\n  display: flex;\\n  flex-direction: column;\\n  gap: 6px;\\n  padding: 8px;\\n  border-radius: 8px;\\n  background: var(--apx-ink-card-bg);\\n  border: 1px solid var(--apx-ink-card-border);\\n  box-shadow: 0 6px 22px var(--apx-ink-card-shadow);\\n  font-family: Helvetica, Arial, sans-serif;\\n  font-size: 12px;\\n  color: var(--apx-ink-card-fg);\\n  user-select: none;\\n}\\n.apexcharts-ink-card-row {\\n  display: flex;\\n  align-items: center;\\n  gap: 4px;\\n}\\n.apexcharts-ink-card input.apexcharts-ink-editor {\\n  flex: 1 1 auto;\\n  width: 150px;\\n  min-width: 0;\\n  box-sizing: border-box;\\n  padding: 4px 6px;\\n  font: inherit;\\n  color: inherit;\\n  background: transparent;\\n  border: 1px solid var(--apx-ink-card-border);\\n  border-radius: 5px;\\n}\\n.apexcharts-ink-card input.apexcharts-ink-editor:focus {\\n  outline: none;\\n  border-color: var(--apx-ink-card-accent);\\n}\\n.apexcharts-ink-btn {\\n  flex: 0 0 auto;\\n  width: 24px;\\n  height: 24px;\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  padding: 0;\\n  border: 0;\\n  border-radius: 5px;\\n  background: transparent;\\n  color: inherit;\\n  font: inherit;\\n  font-size: 12px;\\n  line-height: 1;\\n  cursor: pointer;\\n}\\n.apexcharts-ink-btn:hover,\\n.apexcharts-ink-btn--active {\\n  background: var(--apx-ink-card-hover);\\n}\\n.apexcharts-ink-btn:focus-visible,\\n.apexcharts-ink-swatch:focus-visible {\\n  outline: 2px solid var(--apx-ink-card-accent);\\n  outline-offset: 1px;\\n}\\n.apexcharts-ink-btn--bold {\\n  font-weight: 700;\\n}\\n.apexcharts-ink-btn--delete:hover {\\n  color: #dc2626;\\n}\\n.apexcharts-ink-swatch {\\n  flex: 0 0 auto;\\n  width: 16px;\\n  height: 16px;\\n  padding: 0;\\n  border: 1px solid rgba(100, 116, 139, 0.45);\\n  border-radius: 50%;\\n  cursor: pointer;\\n}\\n.apexcharts-ink-swatch--active {\\n  box-shadow:\\n    0 0 0 2px var(--apx-ink-card-bg),\\n    0 0 0 4px var(--apx-ink-card-accent);\\n}\\n.apexcharts-ink-sep {\\n  flex: 0 0 auto;\\n  width: 1px;\\n  height: 16px;\\n  margin: 0 2px;\\n  background: var(--apx-ink-card-border);\\n}\\n.apexcharts-ink-cardlabel {\\n  flex: 0 0 auto;\\n  font-size: 10px;\\n  letter-spacing: 0.4px;\\n  text-transform: uppercase;\\n  opacity: 0.65;\\n  margin-right: 2px;\\n}\\n.apexcharts-ink-marker-size {\\n  flex: 0 0 auto;\\n  min-width: 16px;\\n  text-align: center;\\n  font-variant-numeric: tabular-nums;\\n}\\n\\n.apexcharts-legend-text {\\n  padding-left: 15px;\\n  margin-left: -15px;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 2px;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus:not(:focus-visible) {\\n  outline: none;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 2px;\\n}\\n\\n.apexcharts-series-collapsed {\\n  opacity: 0\\n}\\n\\n.apexcharts-canvas svg:focus:not(:focus-visible) {\\n  outline: none;\\n}\\n\\n/* Keyboard navigation focus indicator on SVG data elements.\\n   SVG elements don\\'t support CSS outline, so we use stroke. */\\n.apexcharts-bar-area.apexcharts-keyboard-focused,\\n.apexcharts-candlestick-area.apexcharts-keyboard-focused,\\n.apexcharts-boxPlot-area.apexcharts-keyboard-focused,\\n.apexcharts-rangebar-area.apexcharts-keyboard-focused,\\n.apexcharts-pie-area.apexcharts-keyboard-focused,\\n.apexcharts-heatmap-rect.apexcharts-keyboard-focused,\\n.apexcharts-treemap-rect.apexcharts-keyboard-focused {\\n  stroke: var(--apexcharts-focus-color, #008FFB);\\n  stroke-width: 2;\\n  stroke-opacity: 1;\\n}\\n\\n.apexcharts-tooltip {\\n  --apx-tt-bg: #ffffff;\\n  --apx-tt-border: rgba(15, 23, 42, 0.06);\\n  /* Layered shadow: tight inner contact + soft outer drop. The two Y\\n   * offsets are exposed as variables so they flip in sync with the\\n   * arrow when the tooltip is below the data point — see the\\n   * `[data-placement=\"bottom\"]` rule further down. */\\n  --apx-tt-shadow-y-mid: 8px;\\n  --apx-tt-shadow-y-far: 16px;\\n  --apx-tt-shadow: 0 0 0 1px rgba(15, 23, 42, 0.04), 0 var(--apx-tt-shadow-y-mid) 16px -6px rgba(15, 23, 42, 0.12), 0 var(--apx-tt-shadow-y-far) 36px -12px rgba(15, 23, 42, 0.18);\\n  --apx-tt-arrow-bg: var(--apx-tt-bg);\\n  /* Two stacked drop-shadows: the first is a tight contact halo for\\n   * edge definition against light chart backgrounds; the second is a\\n   * softer directional drop that lifts the arrow off the surface.\\n   * `--apx-tt-arrow-drop-y` is the Y offset of the directional drop;\\n   * a per-placement rule below flips it to negative when the tooltip\\n   * is below the data point (arrow on top) so the shadow always\\n   * casts outward instead of into the tooltip body. */\\n  --apx-tt-arrow-drop-y: 2px;\\n  --apx-tt-arrow-shadow: drop-shadow(0 0 0.5px rgba(15, 23, 42, 0.2)) drop-shadow(0 var(--apx-tt-arrow-drop-y) 4px rgba(15, 23, 42, 0.2));\\n  --apx-tt-color: #0f172a;\\n  --apx-tt-color-muted: rgba(15, 23, 42, 0.55);\\n  border-radius: 8px;\\n  background: var(--apx-tt-bg);\\n  border: 1px solid var(--apx-tt-border);\\n  box-shadow: var(--apx-tt-shadow);\\n  color: var(--apx-tt-color);\\n  cursor: default;\\n  font-size: 13px;\\n  left: 0;\\n  top: 0;\\n  opacity: 0;\\n  pointer-events: none;\\n  position: absolute;\\n  display: flex;\\n  flex-direction: column;\\n  padding: 2px 0;\\n  white-space: nowrap;\\n  z-index: 12;\\n  transition: opacity .12s ease\\n}\\n\\n/* While the tooltip is visible, smoothly animate position changes\\n * between data points. Kept short (160 ms) and ease-out so it stays\\n * responsive — too long would feel laggy when sweeping across many\\n * points fast. The position transition is only attached after the\\n * first paint (Position.applyTooltipPosition flips `data-positioned`\\n * once the tooltip has been placed) so the *first* show doesn\\'t slide\\n * the tooltip in from the previously-stale (0,0) coordinates. */\\n.apexcharts-tooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: opacity .12s ease\\n}\\n.apexcharts-tooltip.apexcharts-active[data-positioned=\"true\"] {\\n  transition: opacity .12s ease, left .16s ease-out, top .16s ease-out\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light {\\n  /* defaults already set above; class kept for backward-compat selectors */\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark {\\n  --apx-tt-bg: #1c1c1f;\\n  --apx-tt-border: rgba(255, 255, 255, 0.08);\\n  --apx-tt-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4), 0 var(--apx-tt-shadow-y-mid) 16px -6px rgba(0, 0, 0, 0.45), 0 var(--apx-tt-shadow-y-far) 36px -12px rgba(0, 0, 0, 0.55);\\n  --apx-tt-arrow-shadow: drop-shadow(0 0 0.5px rgba(0, 0, 0, 0.55)) drop-shadow(0 var(--apx-tt-arrow-drop-y) 4px rgba(0, 0, 0, 0.45));\\n  --apx-tt-color: #f3f4f6;\\n  --apx-tt-color-muted: rgba(243, 244, 246, 0.55);\\n}\\n\\n.apexcharts-tooltip * {\\n  font-family: inherit\\n}\\n\\n/* Point-annotation hover tooltip (apexcharts/apexcharts.js#2424). Reuses the\\n * glass body/border/shadow from `.apexcharts-tooltip` but holds free-form\\n * content, so it needs its own padding, wrapping and a sane max width. */\\n.apexcharts-tooltip.apexcharts-annotation-tooltip {\\n  padding: 6px 10px;\\n  max-width: 240px;\\n  white-space: normal;\\n  line-height: 1.4;\\n  pointer-events: none;\\n  z-index: 13\\n}\\n\\n.apexcharts-tooltip-title {\\n  padding: 8px 12px 4px;\\n  font-size: 12px;\\n  font-weight: 600;\\n  letter-spacing: 0.01em;\\n  color: var(--apx-tt-color-muted);\\n  background: transparent;\\n  border-bottom: none;\\n  margin-bottom: 0\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\n  background: transparent;\\n  border-bottom: none\\n}\\n\\n/* `fillSeriesColor`: each series-group already paints itself with the\\n * series colour. Drop the glass body entirely (transparent bg, no\\n * border, no backdrop-filter, no padding) and clip the coloured\\n * series-group(s) to the tooltip\\'s rounded corners so they fill the\\n * shell edge-to-edge. Text inside the coloured group is forced to\\n * white for contrast. */\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series {\\n  background: transparent;\\n  -webkit-backdrop-filter: none;\\n  backdrop-filter: none;\\n  border: none;\\n  padding: 0;\\n  overflow: hidden;\\n  color: #fff\\n}\\n\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-title {\\n  background: rgba(0, 0, 0, 0.22);\\n  color: #fff;\\n  opacity: 1;\\n  padding: 6px 12px\\n}\\n\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-series-group {\\n  color: #fff\\n}\\n\\n/* Arrow connector — sits *entirely outside* the tooltip body. Shares\\n * the body\\'s solid fill so it reads as a single shape. `filter:\\n * drop-shadow` traces the clipped triangle outline (a regular\\n * `box-shadow` would be erased by the `clip-path`). */\\n.apexcharts-tooltip-arrow {\\n  position: absolute;\\n  width: 7px;\\n  height: 14px;\\n  background: var(--apx-tt-arrow-bg);\\n  /* The variable already contains the full `drop-shadow(...) ...` filter\\n   * chain (stacked shadows) so it\\'s applied raw. */\\n  -webkit-filter: var(--apx-tt-arrow-shadow);\\n  filter: var(--apx-tt-arrow-shadow);\\n  pointer-events: none;\\n  top: calc(var(--apx-tt-arrow-y, 50%) - 7px)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"right\"] .apexcharts-tooltip-arrow {\\n  left: -7px;\\n  clip-path: polygon(0 50%, 100% 0, 100% 100%)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"left\"] .apexcharts-tooltip-arrow {\\n  right: -7px;\\n  clip-path: polygon(100% 50%, 0 0, 0 100%)\\n}\\n\\n/* Vertical arrow variants: tooltip is above/below the data point and the\\n * arrow points down/up. The base rule above uses `--apx-tt-arrow-y` for\\n * left/right placement; for top/bottom we re-orient the rectangle and\\n * use `--apx-tt-arrow-x` (set by applyTooltipPosition). */\\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow,\\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\\n  width: 14px;\\n  height: 7px;\\n  top: auto;\\n  left: calc(var(--apx-tt-arrow-x, 50%) - 7px)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow {\\n  bottom: -7px;\\n  clip-path: polygon(50% 100%, 0 0, 100% 0)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\\n  top: -7px;\\n  clip-path: polygon(50% 0, 0 100%, 100% 100%)\\n}\\n\\n/* When the tooltip is flipped below the data point (arrow on top\\n * pointing up), the default downward-biased shadows leave the top\\n * edge of both the body *and* the arrow undefined. Flipping every\\n * Y offset to negative casts the entire elevation upward so the\\n * shadow falls between the tooltip and the bar above. */\\n.apexcharts-tooltip[data-placement=\"bottom\"] {\\n  --apx-tt-shadow-y-mid: -8px;\\n  --apx-tt-shadow-y-far: -16px;\\n  --apx-tt-arrow-drop-y: -2px\\n}\\n\\n.apexcharts-tooltip-text-goals-value,\\n.apexcharts-tooltip-text-y-value,\\n.apexcharts-tooltip-text-z-value {\\n  display: inline-block;\\n  margin-left: 5px;\\n  font-weight: 600\\n}\\n\\n.apexcharts-tooltip-text-goals-label:empty,\\n.apexcharts-tooltip-text-goals-value:empty,\\n.apexcharts-tooltip-text-y-label:empty,\\n.apexcharts-tooltip-text-y-value:empty,\\n.apexcharts-tooltip-text-z-value:empty,\\n.apexcharts-tooltip-title:empty {\\n  display: none\\n}\\n\\n.apexcharts-tooltip-text-goals-label,\\n.apexcharts-tooltip-text-goals-value {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-tooltip-goals-group,\\n.apexcharts-tooltip-text-goals-label,\\n.apexcharts-tooltip-text-goals-value {\\n  display: flex\\n}\\n\\n.apexcharts-tooltip-text-goals-label:not(:empty),\\n.apexcharts-tooltip-text-goals-value:not(:empty) {\\n  margin-top: -6px\\n}\\n\\n.apexcharts-tooltip-marker {\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  position: relative;\\n  width: 12px;\\n  height: 12px;\\n  margin-right: 6px;\\n  vertical-align: middle;\\n  color: inherit;\\n}\\n\\n.apexcharts-tooltip-marker svg {\\n  width: 100%;\\n  height: 100%;\\n  display: block;\\n}\\n\\n.apexcharts-tooltip-series-group {\\n  padding: 4px 12px;\\n  display: none;\\n  gap: 8px;\\n  text-align: left;\\n  justify-content: left;\\n  align-items: center\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\n  opacity: 1\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active:last-child,\\n.apexcharts-tooltip-series-group:last-child {\\n  padding-bottom: 8px\\n}\\n\\n.apexcharts-tooltip-y-group {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-custom-tooltip,\\n.apexcharts-tooltip-box {\\n  padding: 4px 8px\\n}\\n\\n.apexcharts-tooltip-boxPlot {\\n  display: flex;\\n  flex-direction: column-reverse\\n}\\n\\n.apexcharts-tooltip-box>div {\\n  margin: 4px 0\\n}\\n\\n.apexcharts-tooltip-box span.value {\\n  font-weight: 700\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n  padding: 5px 8px\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n  font-weight: 600;\\n  color: #777\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n  font-weight: 700;\\n  display: block;\\n  margin-bottom: 5px\\n}\\n\\n/* X/Y axis tooltips — small popovers that label the crosshair on the\\n * axes. Restyled to match the modern data-tooltip palette: solid white\\n * body with a subtle border + soft drop-shadow, smaller font, rounded\\n * corners. The arrows still use the CSS border-triangle technique\\n * (cheap, crisp at small sizes); their colours flow from CSS variables\\n * so light/dark themes only need one override per axis. */\\n.apexcharts-xaxistooltip,\\n.apexcharts-yaxistooltip {\\n  --apx-axt-bg: #ffffff;\\n  --apx-axt-border: rgba(15, 23, 42, 0.08);\\n  --apx-axt-color: #0f172a;\\n  --apx-axt-shadow: 0 4px 12px -4px rgba(15, 23, 42, 0.18), 0 1px 3px -1px rgba(15, 23, 42, 0.12);\\n  opacity: 0;\\n  pointer-events: none;\\n  color: var(--apx-axt-color);\\n  font-size: 12px;\\n  font-weight: 500;\\n  text-align: center;\\n  border-radius: 6px;\\n  position: absolute;\\n  z-index: 10;\\n  background: var(--apx-axt-bg);\\n  border: 1px solid var(--apx-axt-border);\\n  box-shadow: var(--apx-axt-shadow)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-theme-dark,\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\n  --apx-axt-bg: #1c1c1f;\\n  --apx-axt-border: rgba(255, 255, 255, 0.1);\\n  --apx-axt-color: #f3f4f6;\\n  --apx-axt-shadow: 0 4px 12px -4px rgba(0, 0, 0, 0.55), 0 1px 3px -1px rgba(0, 0, 0, 0.45)\\n}\\n\\n.apexcharts-xaxistooltip {\\n  padding: 4px 8px;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xaxistooltip:after,\\n.apexcharts-xaxistooltip:before {\\n  left: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n/* :before paints the 1px border outline of the triangle (slightly larger\\n * than :after); :after sits inside and paints the fill — leaves a 1px\\n * ring of :before visible at the edges. */\\n.apexcharts-xaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 5px;\\n  margin-left: -5px\\n}\\n\\n.apexcharts-xaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-left: -6px\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after,\\n.apexcharts-xaxistooltip-bottom:before {\\n  bottom: 100%\\n}\\n\\n.apexcharts-xaxistooltip-top:after,\\n.apexcharts-xaxistooltip-top:before {\\n  top: 100%\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n  border-bottom-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-xaxistooltip-bottom:before {\\n  border-bottom-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n  border-top-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-xaxistooltip-top:before {\\n  border-top-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-yaxistooltip {\\n  padding: 3px 8px\\n}\\n\\n.apexcharts-yaxistooltip:after,\\n.apexcharts-yaxistooltip:before {\\n  top: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-yaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 5px;\\n  margin-top: -5px\\n}\\n\\n.apexcharts-yaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-top: -6px\\n}\\n\\n.apexcharts-yaxistooltip-left:after,\\n.apexcharts-yaxistooltip-left:before {\\n  left: 100%\\n}\\n\\n.apexcharts-yaxistooltip-right:after,\\n.apexcharts-yaxistooltip-right:before {\\n  right: 100%\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n  border-left-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-yaxistooltip-left:before {\\n  border-left-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n  border-right-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-yaxistooltip-right:before {\\n  border-right-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-active {\\n  opacity: 1\\n}\\n\\n.apexcharts-yaxistooltip-hidden {\\n  display: none\\n}\\n\\n.apexcharts-xcrosshairs,\\n.apexcharts-ycrosshairs {\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xcrosshairs.apexcharts-active,\\n.apexcharts-ycrosshairs.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n  opacity: 0\\n}\\n\\n.apexcharts-selection-rect {\\n  cursor: move\\n}\\n\\n.svg_select_shape {\\n  stroke-width: 1;\\n  stroke-dasharray: 10 10;\\n  stroke: black;\\n  stroke-opacity: 0.1;\\n  pointer-events: none;\\n  fill: none;\\n}\\n\\n.svg_select_handle {\\n  stroke-width: 3;\\n  stroke: black;\\n  fill: none;\\n}\\n\\n.svg_select_handle_r {\\n  cursor: e-resize;\\n}\\n\\n.svg_select_handle_l {\\n  cursor: w-resize;\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\n  cursor: crosshair\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\n  cursor: move\\n}\\n\\n.apexcharts-menu-icon,\\n.apexcharts-measure-icon,\\n.apexcharts-pan-icon,\\n.apexcharts-reset-icon,\\n.apexcharts-selection-icon,\\n.apexcharts-toolbar-custom-icon,\\n.apexcharts-zoom-icon,\\n.apexcharts-zoomin-icon,\\n.apexcharts-zoomout-icon {\\n  cursor: pointer;\\n  /* WCAG 2.5.8 Target Size (Minimum): 24×24 CSS px hit target. */\\n  width: 26px;\\n  height: 24px;\\n  line-height: 24px;\\n  color: #6e8192;\\n  text-align: center;\\n  /* Reset native <button> chrome — these are styled via SVG icons. */\\n  padding: 0;\\n  margin: 0;\\n  background: transparent;\\n  border: 0;\\n  border-radius: 5px;\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  transition: background-color .12s ease, color .12s ease;\\n}\\n\\n.apexcharts-menu-icon svg,\\n.apexcharts-measure-icon svg,\\n.apexcharts-pan-icon svg,\\n.apexcharts-reset-icon svg,\\n.apexcharts-selection-icon svg,\\n.apexcharts-zoom-icon svg,\\n.apexcharts-zoomin-icon svg,\\n.apexcharts-zoomout-icon svg {\\n  width: 18px;\\n  height: 18px;\\n  fill: none;\\n  stroke: currentColor;\\n  stroke-width: 2;\\n  stroke-linecap: round;\\n  stroke-linejoin: round\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon,\\n.apexcharts-theme-dark .apexcharts-measure-icon,\\n.apexcharts-theme-dark .apexcharts-pan-icon,\\n.apexcharts-theme-dark .apexcharts-reset-icon,\\n.apexcharts-theme-dark .apexcharts-selection-icon,\\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon,\\n.apexcharts-theme-dark .apexcharts-zoom-icon,\\n.apexcharts-theme-dark .apexcharts-zoomin-icon,\\n.apexcharts-theme-dark .apexcharts-zoomout-icon {\\n  color: #d4d6dc\\n}\\n\\n.apexcharts-canvas .apexcharts-measure-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-pan-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected {\\n  background: rgba(0, 143, 251, 0.12);\\n  color: #008ffb\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-icon:hover,\\n.apexcharts-theme-light .apexcharts-measure-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-pan-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-reset-icon:hover,\\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover,\\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover {\\n  background: rgba(15, 23, 42, 0.06);\\n  color: #1f2937\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon:hover,\\n.apexcharts-theme-dark .apexcharts-measure-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-pan-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-reset-icon:hover,\\n.apexcharts-theme-dark .apexcharts-selection-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-zoom-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-zoomin-icon:hover,\\n.apexcharts-theme-dark .apexcharts-zoomout-icon:hover {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #fff\\n}\\n\\n.apexcharts-menu-icon,\\n.apexcharts-selection-icon {\\n  position: relative\\n}\\n\\n.apexcharts-toolbar {\\n  position: absolute;\\n  z-index: 11;\\n  display: inline-flex;\\n  align-items: center;\\n  gap: 1px;\\n  padding: 3px;\\n  border-radius: 8px;\\n  background: rgba(255, 255, 255, 0.85);\\n  backdrop-filter: blur(8px);\\n  -webkit-backdrop-filter: blur(8px);\\n}\\n\\n.apexcharts-theme-dark .apexcharts-toolbar {\\n  background: rgba(28, 28, 31, 0.82);\\n}\\n\\n.apexcharts-menu {\\n  background: rgba(255, 255, 255, 0.95);\\n  backdrop-filter: blur(8px);\\n  -webkit-backdrop-filter: blur(8px);\\n  position: absolute;\\n  top: calc(100% + 4px);\\n  border: 1px solid rgba(15, 23, 42, 0.08);\\n  border-radius: 8px;\\n  padding: 4px;\\n  right: 0;\\n  opacity: 0;\\n  min-width: 120px;\\n  transition: opacity .15s ease, transform .15s ease;\\n  transform: translateY(-2px);\\n  pointer-events: none;\\n  box-shadow: 0 4px 16px -4px rgba(15, 23, 42, 0.12), 0 2px 4px -1px rgba(15, 23, 42, 0.06)\\n}\\n\\n.apexcharts-menu.apexcharts-menu-open {\\n  opacity: 1;\\n  transform: translateY(0);\\n  pointer-events: all\\n}\\n\\n.apexcharts-menu-item {\\n  padding: 6px 9px;\\n  font-size: 12px;\\n  border-radius: 5px;\\n  cursor: pointer\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\n  background: rgba(15, 23, 42, 0.06)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu {\\n  background: rgba(28, 28, 31, 0.92);\\n  border-color: rgba(255, 255, 255, 0.08);\\n  color: #f3f4f6;\\n  box-shadow: 0 4px 16px -4px rgba(0, 0, 0, 0.5), 0 2px 4px -1px rgba(0, 0, 0, 0.4)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-item:hover {\\n  background: rgba(255, 255, 255, 0.08)\\n}\\n\\n@media screen and (min-width:768px) {\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\n    opacity: 1\\n  }\\n}\\n\\n/* Toolbar keyboard accessibility: show toolbar when any button inside it is focused */\\n.apexcharts-toolbar:focus-within {\\n  opacity: 1\\n}\\n\\n/* Focus indicator for toolbar icon buttons */\\n.apexcharts-menu-icon:focus-visible,\\n.apexcharts-measure-icon:focus-visible,\\n.apexcharts-pan-icon:focus-visible,\\n.apexcharts-reset-icon:focus-visible,\\n.apexcharts-selection-icon:focus-visible,\\n.apexcharts-toolbar-custom-icon:focus-visible,\\n.apexcharts-zoom-icon:focus-visible,\\n.apexcharts-zoomin-icon:focus-visible,\\n.apexcharts-zoomout-icon:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 1px;\\n  border-radius: 5px\\n}\\n\\n/* Focus indicator for hamburger menu items */\\n.apexcharts-menu-item:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: -2px;\\n  background: #eee\\n}\\n\\n.apexcharts-canvas .apexcharts-element-hidden,\\n.apexcharts-datalabel.apexcharts-element-hidden,\\n.apexcharts-hide .apexcharts-series-points {\\n  opacity: 0;\\n}\\n\\n.apexcharts-hidden-element-shown {\\n  opacity: 1;\\n  transition: 0.25s ease all;\\n}\\n\\n.apexcharts-datalabel,\\n.apexcharts-datalabel-label,\\n.apexcharts-datalabel-value,\\n.apexcharts-datalabels,\\n.apexcharts-pie-label,\\n.apexcharts-pie-name-label,\\n.apexcharts-pie-name-label-group,\\n.apexcharts-pie-label-connector {\\n  cursor: default;\\n  pointer-events: none\\n}\\n\\n.apexcharts-pie-label-connector {\\n  fill: none\\n}\\n\\n.apexcharts-pie-label-delay {\\n  opacity: 0;\\n  animation-name: opaque;\\n  animation-duration: .3s;\\n  animation-fill-mode: forwards;\\n  animation-timing-function: ease\\n}\\n\\n.apexcharts-radialbar-label {\\n  cursor: pointer;\\n}\\n\\n.apexcharts-annotation-rect,\\n.apexcharts-area-series .apexcharts-area,\\n.apexcharts-gridline,\\n.apexcharts-line,\\n.apexcharts-point-annotation-label,\\n.apexcharts-radar-series path:not(.apexcharts-marker),\\n.apexcharts-radar-series polygon,\\n.apexcharts-toolbar svg,\\n.apexcharts-tooltip .apexcharts-marker,\\n.apexcharts-xaxis-annotation-label,\\n.apexcharts-yaxis-annotation-label,\\n.apexcharts-zoom-rect,\\n.no-pointer-events {\\n  pointer-events: none\\n}\\n\\n.apexcharts-tooltip-active .apexcharts-marker {\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-radar-series .apexcharts-yaxis {\\n  pointer-events: none;\\n}\\n\\n.resize-triggers {\\n  animation: 1ms resizeanim;\\n  visibility: hidden;\\n  opacity: 0;\\n  height: 100%;\\n  width: 100%;\\n  overflow: hidden\\n}\\n\\n.contract-trigger:before,\\n.resize-triggers,\\n.resize-triggers>div {\\n  content: \" \";\\n  display: block;\\n  position: absolute;\\n  top: 0;\\n  left: 0\\n}\\n\\n.resize-triggers>div {\\n  height: 100%;\\n  width: 100%;\\n  background: #eee;\\n  overflow: auto\\n}\\n\\n.contract-trigger:before {\\n  overflow: hidden;\\n  width: 200%;\\n  height: 200%\\n}\\n\\n.apexcharts-bar-goals-markers {\\n  pointer-events: none\\n}\\n\\n.apexcharts-bar-shadows {\\n  pointer-events: none\\n}\\n\\n.apexcharts-rangebar-goals-markers {\\n  pointer-events: none\\n}\\n\\n.apexcharts-drilldown-target {\\n  cursor: pointer\\n}\\n\\n.apexcharts-breadcrumb {\\n  position: absolute;\\n  z-index: 11;\\n  display: inline-flex;\\n  align-items: center;\\n  gap: 2px;\\n  font-size: 12px;\\n  font-family: inherit;\\n  padding: 2px 4px\\n}\\n\\n.apexcharts-breadcrumb-item {\\n  background: transparent;\\n  border: none;\\n  padding: 2px 6px;\\n  border-radius: 3px;\\n  font: inherit;\\n  color: inherit;\\n  cursor: pointer;\\n  line-height: 1.2\\n}\\n\\n.apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {\\n  background: rgba(0, 0, 0, 0.08)\\n}\\n\\n.apexcharts-breadcrumb-arrow {\\n  margin-right: 4px;\\n  font-weight: 600;\\n  user-select: none\\n}\\n\\n.apexcharts-breadcrumb-current {\\n  cursor: default;\\n  font-weight: 600;\\n  opacity: 0.85\\n}\\n\\n.apexcharts-breadcrumb-separator {\\n  opacity: 0.5;\\n  user-select: none\\n}\\n\\n.apexcharts-theme-dark .apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {\\n  background: rgba(255, 255, 255, 0.12)\\n}\\n\\n.apexcharts-disable-transitions * {\\n  transition: none !important;\\n}';\nconst PUBLIC_KEYS_SPKI_BASE64 = [\n  \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQIaK9UMD6n0oR/FIy8QdL0uSzKMQlf1BB+tOrji4/WuHsyRNxeDhVykoSsNURozMi1xhmqWvBH1L//xIfugTPA==\"\n];\nconst LEGACY_KEYS_ACCEPTED_UNTIL = /* @__PURE__ */ new Date(\"2027-07-31T00:00:00Z\");\nconst KEY_PREFIX = \"APEX-\";\nconst signatureVerdicts = /* @__PURE__ */ new Map();\nconst verifying = /* @__PURE__ */ new Set();\nconst listeners = /* @__PURE__ */ new Set();\nlet warnedUnverifiable = false;\nfunction base64Decode(encoded) {\n  if (typeof atob === \"function\") return atob(encoded);\n  if (typeof Buffer !== \"undefined\") {\n    return Buffer.from(encoded, \"base64\").toString(\"binary\");\n  }\n  throw new Error(\"no base64 decoder available\");\n}\nfunction base64ToBytes(base64) {\n  const normalised = base64.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const padded = normalised.padEnd(Math.ceil(normalised.length / 4) * 4, \"=\");\n  const binary = base64Decode(padded);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n  return bytes;\n}\nfunction canonicalPayload(data) {\n  const domains = data.domains && data.domains.length > 0 ? data.domains.join(\",\") : \"\";\n  return `v1|${data.issueDate}|${data.expiryDate}|${data.plan}|${domains}`;\n}\nfunction currentHostname() {\n  return typeof window !== \"undefined\" && window.location ? window.location.hostname : \"\";\n}\nfunction signatureOf(encodedData) {\n  try {\n    const raw = JSON.parse(base64Decode(encodedData));\n    return typeof raw.sig === \"string\" && raw.sig ? raw.sig : null;\n  } catch (e) {\n    return null;\n  }\n}\nfunction notify(result) {\n  listeners.forEach((listener) => {\n    try {\n      listener(result);\n    } catch (e) {\n    }\n  });\n}\nfunction verifySignature(key, data, signature) {\n  return __async(this, null, function* () {\n    if (verifying.has(key) || signatureVerdicts.has(key)) return;\n    verifying.add(key);\n    const subtle = globalThis.crypto ? globalThis.crypto.subtle : void 0;\n    const accepted = LicenseManager.publicKeysSpki;\n    if (!subtle || accepted.length === 0) {\n      verifying.delete(key);\n      if (!warnedUnverifiable) {\n        warnedUnverifiable = true;\n        console.warn(\n          subtle ? \"[Apex] No license signing key is configured in this build, so license signatures cannot be verified.\" : \"[Apex] Web Crypto is unavailable (a secure context is required), so the license signature cannot be verified.\"\n        );\n      }\n      return;\n    }\n    const signed = new TextEncoder().encode(canonicalPayload(data));\n    let verified = false;\n    for (const spki of accepted) {\n      try {\n        const publicKey = yield subtle.importKey(\n          \"spki\",\n          base64ToBytes(spki),\n          { name: \"ECDSA\", namedCurve: \"P-256\" },\n          false,\n          [\"verify\"]\n        );\n        verified = yield subtle.verify(\n          { hash: \"SHA-256\", name: \"ECDSA\" },\n          publicKey,\n          base64ToBytes(signature),\n          signed\n        );\n      } catch (e) {\n        verified = false;\n      }\n      if (verified) break;\n    }\n    verifying.delete(key);\n    signatureVerdicts.set(key, verified);\n    if (!verified) {\n      console.error(\n        \"[Apex] Invalid license key. The license signature does not verify.\"\n      );\n    }\n    notify(LicenseManager.validateKey(key));\n  });\n}\nclass LicenseManager {\n  /**\n   * Decode license data from an encoded string (base64 + JSON).\n   * @param {string} encodedData\n   * @returns {LicenseData | null}\n   */\n  static decodeLicenseData(encodedData) {\n    try {\n      const data = JSON.parse(base64Decode(encodedData));\n      if (!data.issueDate || !data.expiryDate || !data.plan) {\n        return null;\n      }\n      return {\n        domains: Array.isArray(data.domains) ? data.domains : void 0,\n        expiryDate: data.expiryDate,\n        issueDate: data.issueDate,\n        plan: data.plan,\n        valid: true\n      };\n    } catch (e) {\n      return null;\n    }\n  }\n  /**\n   * The key set via setLicense (or null). Lets the enforcer resolve the\n   * chart.license -> setLicense -> Apex.license precedence.\n   * @returns {null | string}\n   */\n  static getKey() {\n    return this.licenseKey;\n  }\n  /**\n   * Validation result for the singleton key.\n   * @returns {LicenseValidationResult}\n   */\n  static getLicenseStatus() {\n    if (!this.licenseKey) {\n      return { expired: false, valid: false };\n    }\n    this.validationResult = this.validateKey(this.licenseKey);\n    return this.validationResult;\n  }\n  /**\n   * Whether a specific key is valid (pure; no singleton mutation).\n   * @param {string | undefined | null} key\n   * @returns {boolean}\n   */\n  static isKeyValid(key) {\n    if (!key) return false;\n    return this.validateKey(key).valid;\n  }\n  /** @returns {boolean} whether the singleton key is valid */\n  static isLicenseValid() {\n    if (!this.licenseKey) return false;\n    return this.getLicenseStatus().valid;\n  }\n  /**\n   * Subscribe to signature verdicts arriving. Returns an unsubscribe function.\n   *\n   * Without this a forged key would go unnoticed by any chart that asked once and\n   * painted. `LicenseEnforcer` uses it to re-evaluate every live chart.\n   *\n   * @param {(result: LicenseValidationResult) => void} listener\n   * @returns {() => void}\n   */\n  static onChange(listener) {\n    listeners.add(listener);\n    return () => {\n      listeners.delete(listener);\n    };\n  }\n  /**\n   * Set the global (singleton) license key. console.errors when invalid, to\n   * match the rest of the family.\n   * @param {string} key\n   */\n  static setLicense(key) {\n    this.licenseKey = key;\n    this.validationResult = this.validateKey(key);\n    if (!this.validationResult.valid) {\n      console.error(`[Apex] ${this.validationResult.message}`);\n    }\n  }\n  /**\n   * Validate an arbitrary key WITHOUT mutating the singleton. Used to resolve\n   * per-chart (`chart.license`) and global (`window.Apex.license`) keys, which\n   * bypass setLicense. This is a superset of the family (which keeps\n   * validateLicense private); the format and rules are identical.\n   *\n   * Synchronous by contract, because it runs during render. Signature checking is\n   * started here and settles later; see `onChange`.\n   *\n   * @param {string} key\n   * @returns {LicenseValidationResult}\n   */\n  static validateKey(key) {\n    try {\n      if (typeof key !== \"string\" || !key.startsWith(KEY_PREFIX)) {\n        return {\n          expired: false,\n          message: 'Invalid license key format. License key must start with \"APEX-\".',\n          signatureVerified: false,\n          valid: false\n        };\n      }\n      const encodedData = key.slice(KEY_PREFIX.length);\n      if (!encodedData) {\n        return {\n          expired: false,\n          message: \"Invalid license key format. Expected format: APEX-{encoded-data}.\",\n          signatureVerified: false,\n          valid: false\n        };\n      }\n      const licenseData = this.decodeLicenseData(encodedData);\n      if (!licenseData) {\n        return {\n          expired: false,\n          message: \"Invalid license key. Unable to decode license data.\",\n          signatureVerified: false,\n          valid: false\n        };\n      }\n      const signature = signatureOf(encodedData);\n      if (!signature && /* @__PURE__ */ new Date() >= LEGACY_KEYS_ACCEPTED_UNTIL) {\n        return {\n          data: licenseData,\n          expired: false,\n          message: \"This license key is in the old unsigned format, which is no longer accepted. Please request a replacement key.\",\n          signatureVerified: false,\n          valid: false\n        };\n      }\n      const now = /* @__PURE__ */ new Date();\n      const expiryDate = new Date(licenseData.expiryDate);\n      if (expiryDate < now) {\n        return {\n          data: licenseData,\n          expired: true,\n          message: `License expired on ${licenseData.expiryDate}. Please renew your license.`,\n          signatureVerified: false,\n          valid: false\n        };\n      }\n      if (licenseData.domains && licenseData.domains.length > 0) {\n        const hostname = currentHostname();\n        const allowed = licenseData.domains.some(\n          (domain) => hostname === domain || hostname.endsWith(`.${domain}`)\n        );\n        if (!allowed) {\n          return {\n            data: licenseData,\n            expired: false,\n            message: `License is not valid for this domain (${hostname}). Allowed domains: ${licenseData.domains.join(\", \")}.`,\n            signatureVerified: false,\n            valid: false\n          };\n        }\n      }\n      if (signature) {\n        const verdict = signatureVerdicts.get(key);\n        if (verdict === false) {\n          return {\n            data: licenseData,\n            expired: false,\n            message: \"Invalid license key. The license signature does not verify.\",\n            signatureVerified: true,\n            valid: false\n          };\n        }\n        if (verdict === void 0) {\n          void verifySignature(key, licenseData, signature);\n        }\n        return {\n          data: licenseData,\n          expired: false,\n          signatureVerified: verdict === true,\n          valid: true\n        };\n      }\n      return {\n        data: licenseData,\n        expired: false,\n        signatureVerified: false,\n        valid: true\n      };\n    } catch (e) {\n      return {\n        expired: false,\n        message: \"Invalid license key format or corrupted data.\",\n        signatureVerified: false,\n        valid: false\n      };\n    }\n  }\n  /** Test-only: forget signature verdicts and the one-time warnings. */\n  static _resetSignatureState() {\n    signatureVerdicts.clear();\n    verifying.clear();\n    warnedUnverifiable = false;\n  }\n}\n/** @type {null | string} */\n__publicField(LicenseManager, \"licenseKey\", null);\n/**\n * Accepted signing keys. Replaced by tests with an ephemeral keypair, since\n * they cannot sign for the production key. Not public API.\n * @type {string[]}\n */\n__publicField(LicenseManager, \"publicKeysSpki\", PUBLIC_KEYS_SPKI_BASE64);\n/** @type {LicenseValidationResult | null} */\n__publicField(LicenseManager, \"validationResult\", null);\nconst WATERMARK_ATTR = \"data-apexcharts-watermark\";\nconst WATERMARK_TEXT = \"APEXCHARTS\";\nconst CRITICAL_STYLES = {\n  position: \"absolute\",\n  top: \"0\",\n  right: \"0\",\n  bottom: \"0\",\n  left: \"0\",\n  pointerEvents: \"none\",\n  userSelect: \"none\",\n  webkitUserSelect: \"none\",\n  msUserSelect: \"none\",\n  zIndex: \"10000\",\n  display: \"block\",\n  visibility: \"visible\",\n  opacity: \"1\"\n};\nfunction createWatermarkPattern() {\n  const svg = `\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"300\" height=\"200\">\n      <text\n        x=\"50%\"\n        y=\"50%\"\n        dominant-baseline=\"middle\"\n        text-anchor=\"middle\"\n        font-family=\"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Arial, sans-serif\"\n        font-size=\"18\"\n        font-weight=\"600\"\n        fill=\"rgba(134, 134, 134, 0.1)\"\n        transform=\"rotate(-35, 100, 60)\"\n      >${WATERMARK_TEXT}</text>\n    </svg>\n  `;\n  return `url(\"data:image/svg+xml,${encodeURIComponent(svg.trim())}\")`;\n}\nclass Watermark {\n  /**\n   * Apply the overlay's critical styles + background to a node. Split out so a\n   * MutationObserver can restore styles after tampering.\n   * @param {HTMLElement} el\n   */\n  static applyStyles(el) {\n    Object.assign(el.style, CRITICAL_STYLES, {\n      backgroundImage: createWatermarkPattern(),\n      backgroundRepeat: \"repeat\"\n    });\n  }\n  /**\n   * Add the watermark to a container, reusing the existing node if present (so\n   * a style-tamper observer bound to it stays valid across re-renders). No-op\n   * when there is no document (SSR) or no container.\n   * @param {HTMLElement | null | undefined} container\n   * @returns {HTMLElement | null} the watermark node\n   */\n  static add(container) {\n    if (!container || typeof document === \"undefined\") return null;\n    let watermark = this.node(container);\n    if (!watermark) {\n      watermark = document.createElement(\"div\");\n      watermark.setAttribute(WATERMARK_ATTR, \"\");\n      container.appendChild(watermark);\n    }\n    this.applyStyles(watermark);\n    if (typeof getComputedStyle === \"function\" && getComputedStyle(container).position === \"static\") {\n      container.style.position = \"relative\";\n    }\n    return watermark;\n  }\n  /**\n   * @param {HTMLElement | null | undefined} container\n   * @returns {HTMLElement | null} the watermark node, if present\n   */\n  static node(container) {\n    if (!container) return null;\n    return (\n      /** @type {HTMLElement | null} */\n      container.querySelector(`[${WATERMARK_ATTR}]`)\n    );\n  }\n  /**\n   * @param {HTMLElement | null | undefined} container\n   * @returns {boolean}\n   */\n  static exists(container) {\n    return !!this.node(container);\n  }\n  /**\n   * Remove the watermark from a container.\n   * @param {HTMLElement | null | undefined} container\n   */\n  static remove(container) {\n    const existing = this.node(container);\n    if (existing) existing.remove();\n  }\n}\n__publicField(Watermark, \"ATTR\", WATERMARK_ATTR);\nconst PRICING_URL = \"https://apexcharts.com/pricing\";\nlet _perspectivesTokenDecoded = false;\nconst enforced = /* @__PURE__ */ new Set();\nfunction untrackChart(ctx) {\n  enforced.delete(ctx);\n}\nfunction markPerspectivesTokenDecoded() {\n  _perspectivesTokenDecoded = true;\n  reevaluateLicenseAcrossCharts();\n}\nfunction premiumFeaturesInUse(w, ctx) {\n  const chart = w && w.config && w.config.chart || {};\n  const used = [];\n  if (chart.type === \"unit\") used.push(\"unit\");\n  if (ctx.storyboard && ctx.storyboard._used) used.push(\"storyboard\");\n  const link = chart.link;\n  if (ctx.linkedViews && link && (link.enabled === true || typeof link.dimension === \"function\")) {\n    used.push(\"link\");\n  }\n  if (ctx.ink && chart.ink && chart.ink.enabled === true) used.push(\"ink\");\n  if (ctx.measure && chart.measure && chart.measure.enabled === true) {\n    used.push(\"measure\");\n  }\n  if (ctx.contextMenu && chart.contextMenu && chart.contextMenu.enabled === true) {\n    used.push(\"context-menu\");\n  }\n  if (ctx.perspectives && (ctx.perspectives._used || _perspectivesTokenDecoded)) {\n    used.push(\"perspectives\");\n  }\n  if (ctx.history && chart.history && chart.history.enabled === true) {\n    used.push(\"history\");\n  }\n  return used;\n}\nfunction resolveKey(w) {\n  const perChart = w && w.config && w.config.chart && w.config.chart.license;\n  if (perChart) return perChart;\n  const singleton = LicenseManager.getKey();\n  if (singleton) return singleton;\n  const apex = Environment.getApex();\n  if (apex && apex.license) return apex.license;\n  return null;\n}\nconst PREMIUM_PLANS = /* @__PURE__ */ new Set([\"premium\", \"enterprise\"]);\nfunction licensedForPremium(key) {\n  if (!key) return false;\n  const result = LicenseManager.validateKey(key);\n  if (!result.valid) return false;\n  const plan = result.data && result.data.plan;\n  return typeof plan === \"string\" && PREMIUM_PLANS.has(plan.toLowerCase());\n}\nfunction reinstateWatermark(ctx, elWrap) {\n  const node = Watermark.add(elWrap);\n  if (!node || typeof MutationObserver === \"undefined\") return;\n  if (ctx._wmNodeObserver && ctx._wmObservedNode === node) return;\n  if (ctx._wmNodeObserver) ctx._wmNodeObserver.disconnect();\n  const nodeObs = new MutationObserver(() => {\n    const n = Watermark.node(elWrap);\n    if (!n) return;\n    nodeObs.disconnect();\n    Watermark.applyStyles(n);\n    nodeObs.takeRecords();\n    nodeObs.observe(n, { attributes: true, attributeFilter: [\"style\"] });\n  });\n  nodeObs.observe(node, { attributes: true, attributeFilter: [\"style\"] });\n  ctx._wmNodeObserver = nodeObs;\n  ctx._wmObservedNode = node;\n}\nfunction addWatermark(ctx, elWrap) {\n  reinstateWatermark(ctx, elWrap);\n  if (typeof MutationObserver === \"undefined\" || ctx._wmWrapObserver) return;\n  const wrapObs = new MutationObserver(() => {\n    if (!Watermark.node(elWrap)) reinstateWatermark(ctx, elWrap);\n  });\n  wrapObs.observe(elWrap, { childList: true });\n  ctx._wmWrapObserver = wrapObs;\n}\nfunction teardownWatermark(ctx, elWrap) {\n  if (ctx._wmWrapObserver) {\n    ctx._wmWrapObserver.disconnect();\n    ctx._wmWrapObserver = null;\n  }\n  if (ctx._wmNodeObserver) {\n    ctx._wmNodeObserver.disconnect();\n    ctx._wmNodeObserver = null;\n  }\n  ctx._wmObservedNode = null;\n  const wrap = elWrap || ctx.w && ctx.w.dom && ctx.w.dom.elWrap;\n  if (wrap) Watermark.remove(wrap);\n}\nfunction notifyTrial(ctx, key, features) {\n  if (ctx._premiumLicenseNotified) return;\n  ctx._premiumLicenseNotified = true;\n  const many = features.length > 1;\n  if (!key) {\n    console.warn(\n      `[ApexCharts] Premium feature${many ? \"s\" : \"\"} in use (${features.join(\", \")}) without a license. Running in trial mode with a watermark. Get a license: ${PRICING_URL}`\n    );\n    return;\n  }\n  const result = LicenseManager.validateKey(key);\n  if (result.valid) {\n    const plan = result.data && result.data.plan || \"current\";\n    console.warn(\n      `[ApexCharts] Premium feature${many ? \"s\" : \"\"} in use (${features.join(\", \")}) require a Premium or Enterprise license; the ${plan} plan does not include ${many ? \"them\" : \"it\"}. Running in trial mode with a watermark. Upgrade: ${PRICING_URL}`\n    );\n    return;\n  }\n  if (key !== LicenseManager.getKey()) {\n    console.error(`[Apex] ${result.message}`);\n  }\n}\nfunction enforceLicense(w, ctx) {\n  try {\n    if (!Environment.isBrowser()) return;\n    if (w && w.globals && w.globals.isDestroyed) {\n      enforced.delete(ctx);\n      return;\n    }\n    const elWrap = w && w.dom && w.dom.elWrap;\n    if (!elWrap) return;\n    const features = premiumFeaturesInUse(w, ctx);\n    if (features.length === 0) {\n      enforced.delete(ctx);\n      teardownWatermark(ctx, elWrap);\n      return;\n    }\n    enforced.add(ctx);\n    const key = resolveKey(w);\n    if (licensedForPremium(key)) {\n      teardownWatermark(ctx, elWrap);\n      return;\n    }\n    addWatermark(ctx, elWrap);\n    notifyTrial(ctx, key, features);\n  } catch (e) {\n  }\n}\nfunction reevaluateLicenseAcrossCharts() {\n  if (!Environment.isBrowser()) return;\n  const visited = /* @__PURE__ */ new Set();\n  const apex = Environment.getApex();\n  const instances = apex && apex._chartInstances;\n  if (Array.isArray(instances)) {\n    instances.forEach((entry) => {\n      const chart = entry && entry.chart;\n      if (chart && chart.w && !chart.w.globals.isDestroyed) {\n        visited.add(chart);\n        enforceLicense(chart.w, chart);\n      }\n    });\n  }\n  Array.from(enforced).forEach((ctx) => {\n    const w = ctx && ctx.w;\n    const elWrap = w && w.dom && w.dom.elWrap;\n    if (!w || w.globals.isDestroyed || !elWrap || elWrap.isConnected === false) {\n      enforced.delete(ctx);\n      return;\n    }\n    if (visited.has(ctx)) return;\n    enforceLicense(w, ctx);\n  });\n}\nLicenseManager.onChange(reevaluateLicenseAcrossCharts);\nconst _ApexCharts = class _ApexCharts {\n  /**\n   * Creates a new ApexCharts instance.\n   *\n   * @param {HTMLElement} el - The DOM element to render the chart into.\n   * @param {ApexOptions} opts - Chart configuration options.\n   */\n  constructor(el, opts) {\n    // Module properties set dynamically by InitCtxVariables.initModules().\n    // Declared as typed class fields so @ts-check resolves them throughout the\n    // class body without errors. Each field typed as `any` since the modules are\n    // plain objects whose specific shapes are not yet typed.\n    /** @type {any} */\n    __publicField(this, \"core\");\n    /** @type {any} */\n    __publicField(this, \"responsive\");\n    /** @type {any} */\n    __publicField(this, \"axes\");\n    /** @type {any} */\n    __publicField(this, \"grid\");\n    /** @type {any} */\n    __publicField(this, \"graphics\");\n    /** @type {any} */\n    __publicField(this, \"coreUtils\");\n    /** @type {any} */\n    __publicField(this, \"crosshairs\");\n    /** @type {any} */\n    __publicField(this, \"events\");\n    /** @type {any} */\n    __publicField(this, \"fill\");\n    /** @type {any} */\n    __publicField(this, \"localization\");\n    /** @type {any} */\n    __publicField(this, \"options\");\n    /** @type {any} */\n    __publicField(this, \"series\");\n    /** @type {any} */\n    __publicField(this, \"theme\");\n    /** @type {any} */\n    __publicField(this, \"formatters\");\n    /** @type {any} */\n    __publicField(this, \"titleSubtitle\");\n    /** @type {any} */\n    __publicField(this, \"dimensions\");\n    /** @type {any} */\n    __publicField(this, \"updateHelpers\");\n    /** @type {any} */\n    __publicField(this, \"tooltip\");\n    /** @type {any} */\n    __publicField(this, \"data\");\n    /** @type {any} */\n    __publicField(this, \"animations\");\n    /** @type {any} */\n    __publicField(this, \"exports\");\n    /** @type {any} */\n    __publicField(this, \"legend\");\n    /** @type {any} */\n    __publicField(this, \"toolbar\");\n    /** @type {any} */\n    __publicField(this, \"zoomPanSelection\");\n    /** @type {any} */\n    __publicField(this, \"keyboardNavigation\");\n    /** @type {any} */\n    __publicField(this, \"annotations\");\n    /** @type {any} */\n    __publicField(this, \"morphTypeChange\");\n    /** @type {any} */\n    __publicField(this, \"timeScale\");\n    /** @type {any} */\n    __publicField(this, \"_keyboardNavigation\");\n    /** @type {any} */\n    __publicField(this, \"_zoomPanSelection\");\n    /** @type {any} */\n    __publicField(this, \"windowResizeHandler\");\n    /** @type {any} */\n    __publicField(this, \"parentResizeHandler\");\n    /** @type {string[]} */\n    __publicField(this, \"publicMethods\", []);\n    /** @type {string[]} */\n    __publicField(this, \"eventList\", []);\n    /** @type {Promise<any> | null} */\n    __publicField(this, \"_renderPromise\", null);\n    /** @type {any} */\n    __publicField(this, \"config\");\n    /** @type {any} */\n    __publicField(this, \"perspectives\");\n    /** @type {any} */\n    __publicField(this, \"storyboard\");\n    /** @type {any} */\n    __publicField(this, \"history\");\n    /** @type {any} */\n    __publicField(this, \"linkedViews\");\n    /** @type {any} */\n    __publicField(this, \"ink\");\n    /** @type {any} */\n    __publicField(this, \"measure\");\n    /** @type {any} */\n    __publicField(this, \"contextMenu\");\n    /** @type {any} */\n    __publicField(this, \"weave\");\n    /** @type {any} */\n    __publicField(this, \"renderer\");\n    /** @type {any} */\n    __publicField(this, \"rendererController\");\n    this.opts = opts;\n    this.ctx = this;\n    this.w = new Base(opts).init();\n    this.el = el;\n    this.w.globals.cuid = Utils$1.randomId();\n    this.w.globals.chartID = this.w.config.chart.id ? Utils$1.escapeString(this.w.config.chart.id) : this.w.globals.cuid;\n    applyAnimationPolicy(this.w);\n    const initCtx = new InitCtxVariables(this);\n    initCtx.initModules();\n    this.lastUpdateOptions = null;\n    this._updateStats = { fast: 0, fastWithAxes: 0, full: 0 };\n    this.create = this.create.bind(this);\n    if (Environment.isBrowser()) {\n      this.windowResizeHandler = this._windowResizeHandler.bind(this);\n      this.parentResizeHandler = this._parentResizeCallback.bind(this);\n    }\n  }\n  /**\n   * Renders the chart. Must be called once after construction.\n   *\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after mount.\n   */\n  render() {\n    var _a, _b;\n    if (!((_b = (_a = this.w) == null ? void 0 : _a.config) == null ? void 0 : _b.chart)) {\n      return Promise.reject(\n        new Error(\n          \"ApexCharts: chart configuration is missing or invalid. Ensure the options object includes a `chart` property.\"\n        )\n      );\n    }\n    if (this._renderPromise) return this._renderPromise;\n    const renderPromise = new Promise((resolve, reject) => {\n      var _a2;\n      if (Utils$1.elementExists(this.el)) {\n        if (typeof Apex._chartInstances === \"undefined\") {\n          Apex._chartInstances = [];\n        }\n        if (this.w.config.chart.id) {\n          Apex._chartInstances.push({\n            id: this.w.globals.chartID,\n            group: this.w.config.chart.group,\n            chart: this\n          });\n        }\n        this.setLocale(this.w.config.chart.defaultLocale);\n        const beforeMount = this.w.config.chart.events.beforeMount;\n        if (typeof beforeMount === \"function\") {\n          beforeMount(this, this.w);\n        }\n        this.events.fireEvent(\"beforeMount\", [this, this.w]);\n        if (Environment.isBrowser()) {\n          window.addEventListener(\"resize\", this.windowResizeHandler);\n          addResizeListener(\n            /** @type {HTMLElement} */\n            this.el.parentNode,\n            this.parentResizeHandler\n          );\n          const rootNode = (\n            /** @type {any} */\n            this.el.getRootNode && this.el.getRootNode()\n          );\n          const inShadowRoot = Utils$1.is(\"ShadowRoot\", rootNode);\n          const doc = this.el.ownerDocument;\n          let css = inShadowRoot ? rootNode.getElementById(\"apexcharts-css\") : doc.getElementById(\"apexcharts-css\");\n          if (!css) {\n            css = BrowserAPIs.createElementNS(\n              \"http://www.w3.org/1999/xhtml\",\n              \"style\"\n            );\n            css.id = \"apexcharts-css\";\n            css.textContent = apexCSS;\n            const nonce = ((_a2 = this.opts.chart) == null ? void 0 : _a2.nonce) || this.w.config.chart.nonce;\n            if (nonce) {\n              css.setAttribute(\"nonce\", nonce);\n            }\n            if (inShadowRoot) {\n              rootNode.prepend(css);\n            } else if (this.w.config.chart.injectStyleSheet !== false) {\n              doc.head.appendChild(css);\n            }\n          }\n        }\n        const graphData = this.create(this.w.config.series, {});\n        if (!graphData) return resolve(this);\n        this.mount(graphData).then(() => {\n          if (typeof this.w.config.chart.events.mounted === \"function\") {\n            this.w.config.chart.events.mounted(this, this.w);\n          }\n          this.events.fireEvent(\"mounted\", [this, this.w]);\n          resolve(graphData);\n        }).catch((e) => {\n          var _a3, _b2;\n          const enriched = e instanceof Error ? e : new Error(String(e));\n          const err = (\n            /** @type {any} */\n            enriched\n          );\n          err.chartId = (_b2 = (_a3 = this.w) == null ? void 0 : _a3.globals) == null ? void 0 : _b2.chartID;\n          err.el = this.el;\n          reject(enriched);\n        });\n      } else {\n        reject(new Error(\"Element not found\"));\n      }\n    });\n    this._renderPromise = renderPromise;\n    renderPromise.catch(() => {\n      if (this._renderPromise === renderPromise) this._renderPromise = null;\n    });\n    return renderPromise;\n  }\n  /**\n   * @param {any[]} ser\n   * @param {object} opts\n   */\n  create(ser, opts) {\n    var _a, _b, _c, _d, _e, _f;\n    const w = this.w;\n    if (!this.core) {\n      const initCtx = new InitCtxVariables(this);\n      initCtx.initModules();\n    }\n    const gl = this.w.globals;\n    gl.noData = false;\n    gl.animationEnded = false;\n    if (!Utils$1.elementExists(this.el)) {\n      gl.animationEnded = true;\n      return null;\n    }\n    this.responsive.checkResponsiveConfig(opts);\n    applyAnimationPolicy(w);\n    if (w.config.xaxis.convertedCatToNumeric) {\n      const defaults = new Defaults(w.config);\n      defaults.convertCatToNumericXaxis(w.config, this.ctx);\n    }\n    this.core.setupElements();\n    if (w.config.chart.type === \"treemap\") {\n      w.config.grid.show = false;\n      w.config.yaxis[0].show = false;\n    }\n    if (gl.svgWidth === 0) {\n      gl.animationEnded = true;\n      return null;\n    }\n    let series = ser;\n    ser.forEach((s, realIndex) => {\n      if (s.hidden) {\n        series = this.legend.legendHelpers.getSeriesAfterCollapsing({\n          realIndex\n        });\n      }\n    });\n    const combo = CoreUtils.checkComboSeries(series, w.config.chart.type);\n    gl.comboCharts = combo.comboCharts;\n    gl.comboBarCount = combo.comboBarCount;\n    const allSeriesAreEmpty = series.every((s) => s.data && s.data.length === 0);\n    if (series.length === 0 || allSeriesAreEmpty && gl.collapsedSeries.length < 1) {\n      this.series.handleNoData();\n    }\n    if (Environment.isBrowser()) {\n      this.events.setupEventHandlers();\n    }\n    const parsedState = this.data.parseData(series);\n    this._writeParsedSeriesData(parsedState.seriesData);\n    this._writeParsedRangeData(parsedState.rangeData);\n    this._writeParsedCandleData(parsedState.candleData);\n    this._writeParsedLabelData(parsedState.labelData);\n    this._writeParsedAxisFlags(parsedState.axisFlags);\n    (_a = this.rendererController) == null ? void 0 : _a.resolve();\n    (_b = this.weave) == null ? void 0 : _b.dispatch(\"afterParse\");\n    this.theme.init();\n    const markers = new Markers(this.w, this);\n    markers.setGlobalMarkerSize();\n    this.formatters.setLabelFormatters();\n    this.titleSubtitle.draw();\n    if (!gl.noData || gl.collapsedSeries.length === w.seriesData.series.length || w.config.legend.showForSingleSeries) {\n      (_c = this.legend) == null ? void 0 : _c.init();\n    }\n    this.series.hasAllSeriesEqualX();\n    if (gl.axisCharts) {\n      this.core.coreCalculations();\n      if (w.config.xaxis.type !== \"category\") {\n        this.formatters.setLabelFormatters();\n      }\n      if (this.ctx.toolbar) {\n        this.ctx.toolbar.minX = w.globals.minX;\n        this.ctx.toolbar.maxX = w.globals.maxX;\n      }\n    }\n    this.formatters.heatmapLabelFormatters();\n    const coreUtils = new CoreUtils(this.w);\n    coreUtils.getLargestMarkerSize();\n    const layoutState = this.dimensions.plotCoords();\n    this._writeLayoutCoords(layoutState.layout);\n    const xyRatios = this.core.xySettings();\n    (_d = this.weave) == null ? void 0 : _d.dispatch(\"afterScales\", { xyRatios });\n    this.grid.createGridMask();\n    const elGraph = this.core.plotChartType(series, xyRatios);\n    const dataLabels = new DataLabels(this.w, this);\n    dataLabels.bringForward();\n    if (w.config.dataLabels.background.enabled) {\n      dataLabels.dataLabelsBackground();\n    }\n    this.core.shiftGraphPosition();\n    (_f = (_e = this.legend) == null ? void 0 : _e.heatmapGradientLegend) == null ? void 0 : _f.repositionToPlot();\n    if (w.globals.dataPoints > 50) {\n      w.dom.elWrap.classList.add(\"apexcharts-disable-transitions\");\n    }\n    const dim = {\n      plot: {\n        left: w.layout.translateX,\n        top: w.layout.translateY,\n        width: w.layout.gridWidth,\n        height: w.layout.gridHeight\n      }\n    };\n    return {\n      elGraph,\n      xyRatios,\n      dimensions: dim\n    };\n  }\n  /**\n   * @param {any} graphData\n   */\n  mount(graphData = null) {\n    const me = this;\n    const w = me.w;\n    return new Promise((resolve, reject) => {\n      var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n      if (me.el === null) {\n        return reject(\n          new Error(\"Not enough data to display or target element not found\")\n        );\n      } else if (w.globals.allSeriesCollapsed) {\n        me.series.handleNoData();\n      }\n      me.grid = new Grid(me.w, me);\n      const elgrid = me.grid.drawGrid();\n      const AnnotationsCtor = InitCtxVariables._featureRegistry.get(\"annotations\");\n      me.annotations = AnnotationsCtor ? new AnnotationsCtor(me.w, {\n        theme: me.theme,\n        timeScale: me.timeScale\n      }) : null;\n      (_a = me.annotations) == null ? void 0 : _a.drawImageAnnos();\n      (_b = me.annotations) == null ? void 0 : _b.drawTextAnnos();\n      if (w.config.grid.position === \"back\") {\n        if (elgrid) {\n          w.dom.elGraphical.add(elgrid.el);\n        }\n        if ((_c = elgrid == null ? void 0 : elgrid.elGridBorders) == null ? void 0 : _c.node) {\n          w.dom.elGraphical.add(elgrid.elGridBorders);\n        }\n      }\n      if (Array.isArray(graphData.elGraph)) {\n        for (let g = 0; g < graphData.elGraph.length; g++) {\n          w.dom.elGraphical.add(graphData.elGraph[g]);\n        }\n      } else {\n        w.dom.elGraphical.add(graphData.elGraph);\n      }\n      if (w.config.grid.position === \"front\") {\n        if (elgrid) {\n          w.dom.elGraphical.add(elgrid.el);\n        }\n        if ((_d = elgrid == null ? void 0 : elgrid.elGridBorders) == null ? void 0 : _d.node) {\n          w.dom.elGraphical.add(elgrid.elGridBorders);\n        }\n      }\n      if (w.config.xaxis.crosshairs.position === \"front\") {\n        me.crosshairs.drawXCrosshairs();\n      }\n      if (w.config.yaxis[0].crosshairs.position === \"front\") {\n        me.crosshairs.drawYCrosshairs();\n      }\n      if (w.config.chart.type !== \"treemap\") {\n        me.axes.drawAxis(w.config.chart.type, elgrid);\n      }\n      const xAxis = new XAxis(this.w, this.ctx, elgrid);\n      const yaxis = new YAxis(\n        this.w,\n        { theme: this.theme, timeScale: this.timeScale },\n        elgrid\n      );\n      if (elgrid !== null) {\n        xAxis.xAxisLabelCorrections();\n        yaxis.setYAxisTextAlignments();\n        w.config.yaxis.map((yaxe, index) => {\n          if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) {\n            yaxis.yAxisTitleRotate(index, yaxe.opposite);\n          }\n        });\n      }\n      (_e = me.annotations) == null ? void 0 : _e.drawAxesAnnotations();\n      if (!w.globals.noData) {\n        if (Environment.isBrowser() && w.config.tooltip.enabled && !w.globals.noData) {\n          (_f = me.w.globals.tooltip) == null ? void 0 : _f.drawTooltip(graphData.xyRatios);\n        }\n        if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled && w.config.chart.accessibility.keyboard.navigation.enabled) {\n          (_g = me.keyboardNavigation) == null ? void 0 : _g.init();\n        }\n        if (Environment.isBrowser() && w.globals.axisCharts && (w.axisFlags.isXNumeric || /** @type {Record<string,any>} */\n        w.config.xaxis.convertedCatToNumeric || w.axisFlags.isRangeBar)) {\n          if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || // @ts-ignore — chart.pan is an internal toolbar config property\n          w.config.chart.pan && w.config.chart.pan.enabled) {\n            (_h = me.zoomPanSelection) == null ? void 0 : _h.init({\n              xyRatios: graphData.xyRatios\n            });\n          }\n        } else {\n          const tools = w.config.chart.toolbar.tools;\n          const toolsArr = [\n            \"zoom\",\n            \"zoomin\",\n            \"zoomout\",\n            \"selection\",\n            \"pan\",\n            \"reset\"\n          ];\n          toolsArr.forEach((t) => {\n            tools[t] = false;\n          });\n        }\n        if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) {\n          (_i = me.toolbar) == null ? void 0 : _i.createToolbar();\n        }\n      }\n      (_j = me.weave) == null ? void 0 : _j.dispatch(\"draw\", {\n        pass: \"full\",\n        xyRatios: graphData == null ? void 0 : graphData.xyRatios\n      });\n      if (w.globals.memory.methodsToExec.length > 0) {\n        w.globals.memory.methodsToExec.forEach((fn) => {\n          fn.method(fn.params, false, fn.context);\n        });\n      }\n      if (!w.globals.axisCharts && !w.globals.noData) {\n        me.core.resizeNonAxisCharts();\n      }\n      enforceLicense(w, me);\n      resolve(me);\n    });\n  }\n  /**\n   * Destroys the chart instance, removes all DOM elements and event listeners.\n   * After calling this, the instance should not be used again.\n   */\n  destroy() {\n    var _a;\n    this._renderPromise = null;\n    if (Environment.isBrowser()) {\n      window.removeEventListener(\"resize\", this.windowResizeHandler);\n      removeResizeListener(\n        /** @type {Element} */\n        this.el.parentNode,\n        this.parentResizeHandler\n      );\n      clearTimeout((_a = this.w.globals.resizeTimer) != null ? _a : void 0);\n    }\n    const chartID = this.w.config.chart.id;\n    if (chartID && Array.isArray(Apex._chartInstances)) {\n      Apex._chartInstances.forEach(\n        (c, i) => {\n          if (c.id === Utils$1.escapeString(chartID)) {\n            Apex._chartInstances.splice(i, 1);\n          }\n        }\n      );\n    }\n    if (this._keyboardNavigation) {\n      this._keyboardNavigation.destroy();\n    }\n    teardownWatermark(this);\n    untrackChart(this);\n    new Destroy(this.ctx).clear({ isUpdating: false });\n  }\n  /**\n   * Merges new options into the existing config and re-renders the chart.\n   *\n   * @param {ApexOptions} options - Partial config object merged with the existing config.\n   * @param {boolean} [redraw=false] - When true, redraws the chart from scratch instead of animating from previous paths.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [updateSyncedCharts=true] - Whether to propagate the update to charts in the same group.\n   * @param {boolean} [overwriteInitialConfig=true] - When true, replaces the stored initial config used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  updateOptions(options2, redraw = false, animate = true, updateSyncedCharts = true, overwriteInitialConfig = true) {\n    const w = this.w;\n    w.interact.selection = void 0;\n    if (this.lastUpdateOptions) {\n      if (Utils$1.shallowEqual(this.lastUpdateOptions, options2)) {\n        return Promise.resolve(this);\n      }\n      if (options2.series && this.lastUpdateOptions.series && !_ApexCharts._optionsTooBigToCompare(options2)) {\n        if (JSON.stringify(this.lastUpdateOptions.series) === JSON.stringify(options2.series)) {\n          const optionsWithoutSeries = __spreadValues({}, options2);\n          const lastWithoutSeries = __spreadValues({}, this.lastUpdateOptions);\n          delete optionsWithoutSeries.series;\n          delete lastWithoutSeries.series;\n          if (Utils$1.shallowEqual(optionsWithoutSeries, lastWithoutSeries)) {\n            return Promise.resolve(this);\n          }\n        }\n      }\n    }\n    if (options2.series) {\n      this.data.resetParsingFlags();\n      this.series.resetSeries(false, true, false);\n      if (options2.series.length && options2.series[0].data) {\n        options2.series = options2.series.map(\n          (s, i) => {\n            return this.updateHelpers._extendSeries(s, i);\n          }\n        );\n      }\n      this.updateHelpers.revertDefaultAxisMinMax();\n    }\n    if (options2.xaxis) {\n      options2 = this.updateHelpers.forceXAxisUpdate(options2);\n    }\n    if (options2.yaxis) {\n      options2 = this.updateHelpers.forceYAxisUpdate(options2);\n    }\n    if (w.globals.collapsedSeriesIndices.length > 0) {\n      this.series.clearPreviousPaths();\n    }\n    if (options2.theme) {\n      options2 = this.theme.updateThemeOptions(options2);\n    }\n    return this.updateHelpers._updateOptions(\n      options2,\n      redraw,\n      animate,\n      updateSyncedCharts,\n      overwriteInitialConfig\n    );\n  }\n  /**\n   * Replaces the chart's series data and re-renders.\n   *\n   * @param {ApexAxisChartSeries | ApexNonAxisChartSeries} [newSeries=[]] - The replacement series array.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, replaces the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  updateSeries(newSeries = [], animate = true, overwriteInitialSeries = true) {\n    this.data.resetParsingFlags();\n    this.series.prepareDataUpdate();\n    this.updateHelpers.revertDefaultAxisMinMax();\n    return this.updateHelpers._updateSeries(\n      newSeries,\n      animate,\n      overwriteInitialSeries\n    );\n  }\n  /**\n   * Appends a new series to the existing series array and re-renders.\n   *\n   * @param {ApexAxisChartSeries[0] | ApexNonAxisChartSeries} newSerie - The series object to append.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, replaces the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  appendSeries(newSerie, animate = true, overwriteInitialSeries = true) {\n    this.data.resetParsingFlags();\n    const newSeries = this.w.config.series.slice();\n    newSeries.push(\n      /** @type {any} */\n      newSerie\n    );\n    this.series.prepareDataUpdate();\n    this.updateHelpers.revertDefaultAxisMinMax();\n    return this.updateHelpers._updateSeries(\n      newSeries,\n      animate,\n      overwriteInitialSeries\n    );\n  }\n  /**\n   * Appends data points to existing series without replacing them.\n   * Each element of `newData` corresponds to the series at the same index.\n   *\n   * @param {Array<{ data: any[] }>} newData - Data to append, in the same shape as series[].data.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, updates the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  appendData(newData, overwriteInitialSeries = true) {\n    const me = this;\n    me.data.resetParsingFlags();\n    me.w.globals.dataChanged = true;\n    if (me.w.config.chart.animations.enabled) {\n      me.series.getPreviousPaths();\n    }\n    const newSeries = me.w.config.series.slice();\n    for (let i = 0; i < newSeries.length; i++) {\n      if (newData[i] !== null && typeof newData[i] !== \"undefined\") {\n        const srcSerie = (\n          /** @type {any} */\n          newData[i]\n        );\n        const dstSerie = (\n          /** @type {any} */\n          newSeries[i]\n        );\n        for (let j = 0; j < srcSerie.data.length; j++) {\n          dstSerie.data.push(srcSerie.data[j]);\n        }\n      }\n    }\n    trimStreamingSeries(newSeries, me.w);\n    me.w.config.series = newSeries;\n    if (overwriteInitialSeries) {\n      me.w.globals.initialSeries = me.w.config.series;\n    }\n    return this.update();\n  }\n  /**\n   * True when an options object carries enough series data that a\n   * JSON.stringify equality check (and the Utils.clone needed to store it for\n   * later comparison) would cost more than the re-render it tries to avoid.\n   * @param {any} options\n   * @returns {boolean}\n   */\n  static _optionsTooBigToCompare(options2) {\n    const series = options2 && options2.series;\n    if (!Array.isArray(series)) return false;\n    let points = 0;\n    for (let i = 0; i < series.length; i++) {\n      const d = series[i] && series[i].data;\n      points += Array.isArray(d) ? d.length : 1;\n      if (points > 1e3) return true;\n    }\n    return false;\n  }\n  /**\n   * @param {object} [options]\n   */\n  update(options2) {\n    return new Promise((resolve, reject) => {\n      if (options2 && this.lastUpdateOptions && !_ApexCharts._optionsTooBigToCompare(options2) && JSON.stringify(this.lastUpdateOptions) === JSON.stringify(options2)) {\n        return resolve(this);\n      }\n      this.lastUpdateOptions = options2 && !_ApexCharts._optionsTooBigToCompare(options2) ? Utils$1.clone(options2) : null;\n      new Destroy(this.ctx).clear({ isUpdating: true });\n      const graphData = this.create(this.w.config.series, options2 != null ? options2 : {});\n      if (!graphData) return resolve(this);\n      this.mount(graphData).then(() => {\n        var _a;\n        (_a = this.morphTypeChange) == null ? void 0 : _a.applyChromeFade();\n        applyAxisTransition(this.w);\n        applyDataLabelTransition(this.w);\n        if (typeof this.w.config.chart.events.updated === \"function\") {\n          this.w.config.chart.events.updated(this, this.w);\n        }\n        this.events.fireEvent(\"updated\", [this, this.w]);\n        this.w.globals.isDirty = true;\n        resolve(this);\n      }).catch((e) => {\n        reject(e);\n      });\n    });\n  }\n  /**\n   * Redraws the scale-dependent chrome (grid lines, x-axis, y-axes) IN PLACE\n   * within the frozen layout after a data-only update changed the axis\n   * domain. The rebuilt groups replace the old nodes positionally, so z-order\n   * (grid back/front) is preserved without re-running mount. Legend,\n   * annotations containers, toolbar, defs/masks, and the plot geometry are\n   * untouched.\n   *\n   * Returns false when the refresh cannot faithfully reproduce the chart and\n   * the caller must fall back to a full render:\n   * - horizontal bar charts (inversed axes draw through a different path)\n   * - charts with annotations or ink notes (their positions are scale-bound\n   *   and are laid out by the full render)\n   * - the new y labels no longer fit the width reserved at layout time\n   *\n   * @param {any} _xyRatios\n   * @returns {boolean} true when the chrome was refreshed in place\n   */\n  _fastAxisChromeRefresh(_xyRatios) {\n    const w = this.w;\n    const gl = w.globals;\n    this._fastAxisBailReason = \"\";\n    try {\n      if (gl.isBarHorizontal) {\n        this._fastAxisBailReason = \"barHorizontal\";\n        return false;\n      }\n      if (w.config.chart.sparkline.enabled) return true;\n      const a = w.config.annotations;\n      if (a && (a.yaxis && a.yaxis.length || a.xaxis && a.xaxis.length || a.points && a.points.length || a.texts && a.texts.length || a.images && a.images.length)) {\n        this._fastAxisBailReason = \"annotations\";\n        return false;\n      }\n      if (w.config.chart.ink && w.config.chart.ink.enabled) {\n        this._fastAxisBailReason = \"ink\";\n        return false;\n      }\n      const dim = this.dimensions;\n      if (!dim || !dim.dimYAxis) {\n        this._fastAxisBailReason = \"noDimensions\";\n        return false;\n      }\n      const prevYLabelsCoords = w.layout.yLabelsCoords;\n      const prevYTitleCoords = w.layout.yTitleCoords;\n      const yaxisLabelCoords = dim.dimYAxis.getyAxisLabelsCoords();\n      const yTitleCoords = dim.dimYAxis.getyAxisTitleCoords();\n      w.layout.yLabelsCoords = [];\n      w.layout.yTitleCoords = [];\n      w.config.yaxis.map((_yaxe, index) => {\n        w.layout.yLabelsCoords.push({\n          width: yaxisLabelCoords[index].width,\n          index\n        });\n        w.layout.yTitleCoords.push(\n          /** @type {any} */\n          { width: yTitleCoords[index].width, index }\n        );\n      });\n      const newYAxisWidth = dim.dimYAxis.getTotalYAxisWidth();\n      if (newYAxisWidth > dim.yAxisWidth + 2) {\n        w.layout.yLabelsCoords = prevYLabelsCoords;\n        w.layout.yTitleCoords = prevYTitleCoords;\n        this._fastAxisBailReason = `labelWidth ${newYAxisWidth} > ${dim.yAxisWidth}`;\n        return false;\n      }\n      const innerEl = w.dom.elGraphical.node;\n      const oldGrid = innerEl.querySelector(\".apexcharts-grid\");\n      const oldGridBorders = innerEl.querySelector(\".apexcharts-grid-borders\");\n      if (!oldGrid) {\n        this._fastAxisBailReason = \"missingGridNode\";\n        return false;\n      }\n      const gridParent = oldGrid.parentNode;\n      const gridNext = oldGridBorders ? oldGridBorders.nextSibling : oldGrid.nextSibling;\n      oldGrid.remove();\n      if (oldGridBorders) oldGridBorders.remove();\n      innerEl.querySelectorAll(\".apexcharts-xaxis-tick\").forEach((t) => t.remove());\n      this.grid = new Grid(w, this);\n      const elgrid = this.grid.drawGrid();\n      if (elgrid && elgrid.el) {\n        gridParent.insertBefore(elgrid.el.node, gridNext);\n        if (elgrid.elGridBorders && elgrid.elGridBorders.node) {\n          gridParent.insertBefore(elgrid.elGridBorders.node, gridNext);\n        }\n      }\n      const xAxis = new XAxis(this.w, this.ctx, elgrid);\n      const oldXaxis = innerEl.querySelector(\".apexcharts-xaxis\");\n      if (oldXaxis) {\n        const xParent = oldXaxis.parentNode;\n        const xNext = oldXaxis.nextSibling;\n        oldXaxis.remove();\n        const elXaxis = xAxis.drawXaxis();\n        xParent.insertBefore(elXaxis.node, xNext);\n      }\n      const yAxis = new YAxis(\n        this.w,\n        { theme: this.theme, timeScale: this.timeScale },\n        elgrid\n      );\n      for (let index = 0; index < w.config.yaxis.length; index++) {\n        if (gl.ignoreYAxisIndexes.indexOf(index) !== -1) continue;\n        const oldY = w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}']`\n        );\n        if (!oldY) {\n          this._fastAxisBailReason = \"missingYAxisNode\";\n          return false;\n        }\n        const yParent = oldY.parentNode;\n        if (!yParent) {\n          this._fastAxisBailReason = \"missingYAxisParent\";\n          return false;\n        }\n        const yNext = oldY.nextSibling;\n        oldY.remove();\n        const elYaxis = yAxis.drawYaxis(index);\n        yParent.insertBefore(elYaxis.node, yNext);\n      }\n      if (elgrid !== null) {\n        xAxis.xAxisLabelCorrections();\n        yAxis.setYAxisTextAlignments();\n        w.config.yaxis.map((yaxe, index) => {\n          if (gl.ignoreYAxisIndexes.indexOf(index) === -1) {\n            yAxis.yAxisTitleRotate(index, yaxe.opposite);\n          }\n        });\n      }\n      return true;\n    } catch (e) {\n      this._fastAxisBailReason = \"error: \" + (e && /** @type {any} */\n      e.message);\n      return false;\n    }\n  }\n  /**\n   * Fast update path for data-only series changes.\n   *\n   * Skips rebuilding grid, axes, dimensions, legend, annotations, tooltip DOM,\n   * and toolbar. Only recalculates scales and replots the series paths.\n   * Called automatically by _updateSeries() when the fast path is eligible.\n   *\n   * @param {boolean} animate - Whether to animate the update.\n   * @param {string} [prevAxisScaleSig] - Signature of the on-screen axis scale\n   *   captured by _updateSeries() before parseData recomputed bounds. When the\n   *   recomputed scale differs, the fast path can't repaint the ruler in place,\n   *   so it delegates to a full render. Omitted -> the check is skipped.\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance.\n   */\n  fastUpdate(animate, prevAxisScaleSig) {\n    return new Promise((resolve, reject) => {\n      var _a, _b, _c;\n      try {\n        const w = this.w;\n        const gl = w.globals;\n        gl.shouldAnimate = animate;\n        gl.dataChanged = true;\n        gl.animationEnded = false;\n        PerformanceCache.invalidateSelectors(w);\n        const gl2 = w.globals;\n        gl2.maxY = -Number.MAX_VALUE;\n        gl2.minY = Number.MIN_VALUE;\n        gl2.minYArr = [];\n        gl2.maxYArr = [];\n        gl2.maxX = -Number.MAX_VALUE;\n        gl2.minX = Number.MAX_VALUE;\n        gl2.initialMaxX = -Number.MAX_VALUE;\n        gl2.initialMinX = Number.MAX_VALUE;\n        gl2.yAxisScale = [];\n        gl2.xAxisScale = null;\n        gl2.xAxisTicksPositions = [];\n        gl2.xRange = 0;\n        gl2.yRange = [];\n        gl2.zRange = 0;\n        gl2.xTickAmount = 0;\n        gl2.multiAxisTickAmount = 0;\n        gl2.pointsArray = [];\n        gl2.barCanvasCoords = null;\n        gl2.dataLabelsRects = [];\n        gl2.lastDrawnDataLabelsIndexes = [];\n        gl2.textRectsCache = /* @__PURE__ */ new Map();\n        gl2.domCache = /* @__PURE__ */ new Map();\n        gl2.cachedSelectors = {};\n        gl2.disableZoomIn = false;\n        gl2.disableZoomOut = false;\n        if (gl.axisCharts) {\n          this.core.coreCalculations();\n          if (w.config.xaxis.type !== \"category\") {\n            this.formatters.setLabelFormatters();\n          }\n        }\n        this.formatters.heatmapLabelFormatters();\n        const xyRatios = this.core.xySettings();\n        if (this._zoomPanSelection) this._zoomPanSelection.xyRatios = xyRatios;\n        const newAxisScaleSig = JSON.stringify({\n          y: (gl.yAxisScale || []).map((s) => s ? s.result : null),\n          xMin: gl.minX,\n          xMax: gl.maxX\n        });\n        const scaleChanged = gl.axisCharts && prevAxisScaleSig != null && newAxisScaleSig !== prevAxisScaleSig;\n        if (scaleChanged && !this._fastAxisChromeRefresh(xyRatios)) {\n          this._updateStats.full++;\n          return this.update().then(() => resolve(this)).catch(reject);\n        }\n        if (scaleChanged) {\n          this._updateStats.fastWithAxes++;\n        } else {\n          this._updateStats.fast++;\n        }\n        (_a = this.weave) == null ? void 0 : _a.dispatch(\"afterScales\", { pass: \"fast\", xyRatios });\n        const rr = (\n          /** @type {any} */\n          this.ctx.renderer\n        );\n        const reuseCanvasHost = !!(rr && rr.kind === \"canvas\" && rr.canRepaintInPlace && rr.canRepaintInPlace());\n        if (reuseCanvasHost) rr._repaintHostInPlace = true;\n        const innerEl = w.dom.elGraphical.node;\n        const toRemove = innerEl.querySelectorAll(\n          (reuseCanvasHost ? \"\" : \".apexcharts-canvas-series-wrap, \") + \".apexcharts-plot-series, .apexcharts-series, .apexcharts-datalabels, .apexcharts-datalabels-background\"\n        );\n        toRemove.forEach(\n          (el) => {\n            var _a2;\n            return (_a2 = el.parentNode) == null ? void 0 : _a2.removeChild(el);\n          }\n        );\n        const elGraph = this.core.plotChartType(w.config.series, xyRatios);\n        const gridEl = innerEl.querySelector(\".apexcharts-grid\");\n        const xaxisEl = innerEl.querySelector(\".apexcharts-xaxis\");\n        const graphs = Array.isArray(elGraph) ? elGraph : [elGraph];\n        const anchor = gridEl && w.config.grid.position === \"front\" ? gridEl : xaxisEl;\n        if (anchor) {\n          graphs.forEach((g) => {\n            const node = g && g.node ? g.node : g;\n            if (node) innerEl.insertBefore(node, anchor);\n          });\n        } else {\n          graphs.forEach((g) => {\n            w.dom.elGraphical.add(g);\n          });\n        }\n        const dataLabels = new DataLabels(w, this);\n        dataLabels.bringForward();\n        if (w.config.dataLabels.background.enabled) {\n          dataLabels.dataLabelsBackground();\n        }\n        if (Environment.isBrowser() && w.config.tooltip.enabled && !gl.noData) {\n          (_b = w.globals.tooltip) == null ? void 0 : _b.drawTooltip(xyRatios);\n        }\n        (_c = this.weave) == null ? void 0 : _c.dispatch(\"draw\", { pass: \"fast\", xyRatios });\n        if (typeof w.config.chart.events.updated === \"function\") {\n          w.config.chart.events.updated(this, w);\n        }\n        this.events.fireEvent(\"updated\", [this, w]);\n        enforceLicense(w, this);\n        gl.isDirty = true;\n        resolve(this);\n      } catch (e) {\n        reject(e);\n      }\n    });\n  }\n  /**\n   * Returns all charts in the same `chart.group` (including this instance),\n   * used to synchronise zoom/pan across grouped charts.\n   *\n   * @returns {ApexCharts[]}\n   */\n  getSyncedCharts() {\n    const group = (\n      /** @type {ApexCharts[]} */\n      this.getGroupedCharts()\n    );\n    group.splice(0, 0, this);\n    return group;\n  }\n  /**\n   * Returns all charts in the same `chart.group`, excluding this instance.\n   * Used internally to apply hover/zoom effects to sibling charts.\n   *\n   * @returns {ApexCharts[]}\n   */\n  getGroupedCharts() {\n    return Apex._chartInstances.filter(\n      (ch) => this !== ch.chart && !!this.w.config.chart.group && this.w.config.chart.group === ch.group\n    ).map((ch) => ch.chart);\n  }\n  /**\n   * Retrieves a rendered chart instance by its `chart.id` config value.\n   *\n   * @param {string} id - The chart ID set via `chart.id` in options.\n   * @returns {ApexCharts | undefined}\n   */\n  static getChartByID(id) {\n    const chartId = Utils$1.escapeString(id);\n    if (!Apex._chartInstances) return void 0;\n    const c = Apex._chartInstances.filter(\n      (ch) => ch.id === chartId\n    )[0];\n    return c && c.chart;\n  }\n  /**\n   * Scans the document for elements with a `data-apexcharts` attribute and\n   * `data-options` JSON, then renders a chart in each one automatically.\n   * Useful for non-framework HTML pages.\n   */\n  static initOnLoad() {\n    var _a;\n    const els = document.querySelectorAll(\"[data-apexcharts]\");\n    for (let i = 0; i < els.length; i++) {\n      const el = (\n        /** @type {HTMLElement} */\n        els[i]\n      );\n      const options2 = JSON.parse((_a = els[i].getAttribute(\"data-options\")) != null ? _a : \"\");\n      const apexChart = new _ApexCharts(el, options2);\n      apexChart.render();\n    }\n  }\n  /**\n   * This static method allows users to call chart methods without necessarily from the\n   * instance of the chart in case user has assigned chartID to the targeted chart.\n   * The chartID is used for mapping the instance stored in Apex._chartInstances global variable\n   *\n   * This is helpful in cases when you don't have reference of the chart instance\n   * easily and need to call the method from anywhere.\n   * For eg, in React/Vue applications when you have many parent/child components,\n   * and need easy reference to other charts for performing dynamic operations\n   *\n   * @param {string} chartID - The unique identifier which will be used to call methods\n   * on that chart instance\n   * @param {string} fn - The method name to call\n   * @param {...any} opts - The parameters which are accepted in the original method will be passed here in the same order.\n   */\n  static exec(chartID, fn, ...opts) {\n    const chart = this.getChartByID(chartID);\n    if (!chart) return;\n    chart.w.globals.isExecCalled = true;\n    let ret = null;\n    if (chart.publicMethods.indexOf(fn) !== -1) {\n      ret = /** @type {any} */\n      chart[fn](...opts);\n    }\n    return ret;\n  }\n  /**\n   * Deep-merges `source` into `target` and returns the result.\n   * Thin wrapper around the internal `Utils.extend` utility.\n   *\n   * @param {object} target\n   * @param {object} source\n   * @returns {object}\n   */\n  static merge(target, source) {\n    return Utils$1.extend(target, source);\n  }\n  static getThemePalettes() {\n    return getThemePalettes();\n  }\n  /**\n   * Register additional chart types. Used by sub-entry points so that only\n   * the types they include are bundled.\n   *\n   * @param {Record<string, new (...args: any[]) => any>} typeMap  e.g. { line: Line, area: Line }\n   */\n  static use(typeMap) {\n    register(typeMap);\n  }\n  /**\n   * Register optional feature modules (Exports, Legend, Toolbar,\n   * ZoomPanSelection, KeyboardNavigation, Annotations).\n   *\n   * Call this before rendering any chart. Feature entry files (e.g.\n   * `apexcharts/features/legend`) call this automatically when imported.\n   * Note: Tooltip is part of core and does not need to be registered.\n   *\n   * @param {Record<string, new (...args: any[]) => any>} featureMap  e.g. { legend: Legend, exports: Exports }\n   */\n  static registerFeatures(featureMap) {\n    InitCtxVariables.registerFeatures(featureMap);\n  }\n  /**\n   * Set the license key that unlocks the premium features (storyboard, link /\n   * crossfilter, ink, measure, contextMenu, perspectives, history). Without a\n   * valid key those features still work but the chart shows an \"APEXCHARTS\"\n   * trial watermark; a valid key removes it. Keys are shared across the whole\n   * ApexCharts family (apexgantt, apextree, apexsankey, apex-grid-enterprise,\n   * apexstock), so one customer key works everywhere.\n   *\n   * Call before render(). The watermark is re-evaluated on every render/update,\n   * so a late setLicense(validKey) followed by chart.update() clears it.\n   *\n   * Precedence per chart: `chart.license` (most specific) -> this key ->\n   * `window.Apex.license` -> unlicensed (trial).\n   *\n   * @param {string} key  the `APEX-<base64(JSON)>` license key\n   * @returns {typeof ApexCharts}\n   */\n  static setLicense(key) {\n    LicenseManager.setLicense(key);\n    reevaluateLicenseAcrossCharts();\n    return _ApexCharts;\n  }\n  /**\n   * Register a Weave plugin definition (a plain { name, setup } object).\n   * Lives in core so plugins can always be registered; they only activate when\n   * the Weave host is bundled (`import 'apexcharts/features/weave'`, included in\n   * the full bundle) and listed in a chart's `plugins` config.\n   *\n   * @param {{ name: string, apiVersion?: number, setup: Function, destroy?: Function }} def\n   * @returns {typeof ApexCharts}\n   */\n  static registerPlugin(def) {\n    registerPlugin(def);\n    return _ApexCharts;\n  }\n  /**\n   * Remove a registered Weave plugin definition. Charts already holding an\n   * active instance keep it until their plugins config changes or they are\n   * destroyed; the name simply stops resolving for new activations. Intended\n   * for tests and hot-reload flows.\n   * @param {string} name\n   * @returns {typeof ApexCharts}\n   */\n  static unregisterPlugin(name2) {\n    unregisterPlugin(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Register a non-SVG series renderer (Strata #2). SVG is built in; the canvas\n   * backend registers itself via `import 'apexcharts/features/renderer-canvas'`.\n   * When a `kind` is not registered, selection falls back to SVG.\n   *\n   * @param {string} kind  e.g. 'canvas'\n   * @param {(w: any, ctx: any) => any} factory  returns a Renderer instance\n   */\n  static registerRenderer(kind, factory) {\n    RendererController.registerRenderer(kind, factory);\n  }\n  /**\n   * Register a custom series type (Marks #11): a `{ renderItem }` definition\n   * that draws primitives (path/line/rect/circle/text) per datum. Requires the\n   * Marks feature to be bundled (`import 'apexcharts/features/marks'`, included\n   * in the full bundle); without it this warns and no-ops. Once registered, use\n   * it via `series[].type` or `chart.type`.\n   *\n   * @param {string} name  the type name, e.g. 'dumbbell'\n   * @param {{ renderItem: Function, dataType?: string, yExtent?: Function, tooltip?: Function }} def\n   * @returns {typeof ApexCharts}\n   */\n  static registerSeriesType(name2, def) {\n    const factory = (\n      /** @type {any} */\n      _ApexCharts._customSeriesFactory\n    );\n    if (!factory) {\n      console.warn(\n        `[apexcharts] registerSeriesType(\"${name2}\") requires the Marks feature: import 'apexcharts/features/marks'.`\n      );\n      return _ApexCharts;\n    }\n    if (!def || typeof def.renderItem !== \"function\") {\n      console.warn(\n        `[apexcharts] registerSeriesType(\"${name2}\") needs a def with a renderItem() function.`\n      );\n      return _ApexCharts;\n    }\n    if (hasChartClass(name2) && !isCustom(name2)) {\n      console.warn(\n        `[apexcharts] registerSeriesType(\"${name2}\") would override the built-in \"${name2}\" chart type; pick another name.`\n      );\n      return _ApexCharts;\n    }\n    register({ [name2]: factory(name2, def) });\n    markCustom(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Remove a custom series type registered via registerSeriesType. Built-in\n   * chart types cannot be unregistered. Intended for tests and hot-reload.\n   * @param {string} name\n   * @returns {typeof ApexCharts}\n   */\n  static unregisterSeriesType(name2) {\n    if (isCustom(name2)) unregister(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Facet (#13): register a named theme (palette + design tokens + mode)\n   * referenceable via `theme: { name }`. The theme sits below explicit config\n   * and CSS `--apx-*` tokens, above the built-in palette/mode defaults.\n   *\n   * @param {string} name  the theme name, e.g. 'brand'\n   * @param {any} def  { mode?, palette?, tokens?, monochrome?, accessibility? }\n   * @returns {typeof ApexCharts}\n   */\n  static registerTheme(name2, def) {\n    registerTheme(name2, def);\n    return _ApexCharts;\n  }\n  /**\n   * Remove a theme registered via registerTheme. Charts referencing it by\n   * `theme.name` fall back to the built-in defaults on their next render.\n   * Intended for tests and hot-reload flows.\n   * @param {string} name\n   * @returns {typeof ApexCharts}\n   */\n  static unregisterTheme(name2) {\n    unregisterTheme(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Cadence (#6): register a named easing function referenceable via\n   * `chart.animations.easing: '<name>'`. `fn` maps linear progress t in [0,1]\n   * to eased progress (back/elastic curves may overshoot 1).\n   *\n   * @param {string} name  the easing name, e.g. 'bounce'\n   * @param {(t:number)=>number} fn\n   * @returns {typeof ApexCharts}\n   */\n  static registerEasing(name2, fn) {\n    registerEasing(name2, fn);\n    return _ApexCharts;\n  }\n  /**\n   * Linked Views (#4) Phase 2: get-or-create a crossfilter coordinator by id.\n   * Register one shared record set, then let each chart declare a dimension +\n   * reduction under `chart.link`. Selecting in one chart re-aggregates the\n   * others over the filtered subset.\n   *\n   * Lives in core (always callable) but the engine ships in the `link` feature\n   * (`import 'apexcharts/features/link'`, included in the full bundle); without\n   * it this warns and returns null so the engine shakes out when unused.\n   *\n   * @param {{ id: string, records?: any[] }} opts\n   * @returns {any} the coordinator handle, or null if the feature is absent\n   */\n  static crossfilter(opts) {\n    const factory = (\n      /** @type {any} */\n      _ApexCharts._crossfilterFactory\n    );\n    if (!factory) {\n      console.warn(\n        `[apexcharts] ApexCharts.crossfilter(...) requires the link feature: import 'apexcharts/features/link'.`\n      );\n      return null;\n    }\n    const coordinator = factory(opts);\n    reevaluateLicenseAcrossCharts();\n    return coordinator;\n  }\n  /**\n   * Look up an existing crossfilter coordinator by id (null if none / feature\n   * absent).\n   * @param {string} id\n   * @returns {any}\n   */\n  static getCrossfilter(id) {\n    const get = (\n      /** @type {any} */\n      _ApexCharts._crossfilterGet\n    );\n    return get ? get(id) : null;\n  }\n  /**\n   * Linked Views (#4): clear crossfilter dimming across this chart and every\n   * chart in its `chart.group`. No-op unless the `link` feature is bundled.\n   */\n  clearCrossfilter() {\n    var _a;\n    (_a = this.linkedViews) == null ? void 0 : _a.clearGroup();\n  }\n  /**\n   * Measure ruler (#18): arm a sticky measure-ruler mode (drag A->B on the\n   * plot to read dx/dy/%change/slope). Alternatively hold the measure key\n   * (chart.measure.key, default 'm') and drag. No-op unless the `measure`\n   * feature is bundled and chart.measure.enabled.\n   */\n  startMeasure() {\n    var _a;\n    (_a = this.measure) == null ? void 0 : _a.startMeasure();\n  }\n  /** Measure ruler (#18): leave measure mode. */\n  stopMeasure() {\n    var _a;\n    (_a = this.measure) == null ? void 0 : _a.stopMeasure();\n  }\n  /** Measure ruler (#18): remove all pinned measure rulers. */\n  clearMeasures() {\n    var _a;\n    (_a = this.measure) == null ? void 0 : _a.clearMeasures();\n  }\n  /**\n   * Toggles (show/hide) the series identified by name.\n   * Mirrors a click on the corresponding legend item.\n   *\n   * @param {string} seriesName\n   * @returns {object | undefined} The collapsed series object, if now hidden.\n   */\n  toggleSeries(seriesName) {\n    return this.series.toggleSeries(seriesName);\n  }\n  /**\n   * Highlights or un-highlights a series when the user hovers a legend item.\n   * Called internally by the legend; not typically called by consumers.\n   *\n   * @param {MouseEvent} e\n   * @param {HTMLElement} targetElement - The legend marker element being hovered.\n   */\n  highlightSeriesOnLegendHover(e, targetElement) {\n    return this.series.toggleSeriesOnHover(e, targetElement);\n  }\n  /**\n   * Makes a previously hidden series visible and re-renders.\n   *\n   * @param {string} seriesName\n   */\n  showSeries(seriesName) {\n    this.series.showSeries(seriesName);\n  }\n  /**\n   * Hides a visible series and re-renders.\n   *\n   * @param {string} seriesName\n   */\n  hideSeries(seriesName) {\n    this.series.hideSeries(seriesName);\n  }\n  /**\n   * Highlights (dims all other series) the series identified by name.\n   *\n   * @param {string} seriesName\n   */\n  highlightSeries(seriesName) {\n    this.series.highlightSeries(seriesName);\n  }\n  /**\n   * Returns whether the series identified by name is currently hidden.\n   *\n   * @param {string} seriesName\n   * @returns {boolean}\n   */\n  isSeriesHidden(seriesName) {\n    return this.series.isSeriesHidden(seriesName);\n  }\n  /**\n   * Resets the chart to the initial series and optionally the initial zoom level.\n   *\n   * @param {boolean} [shouldUpdateChart=true] - When true, triggers a re-render.\n   * @param {boolean} [shouldResetZoom=true] - When true, restores the initial zoom level.\n   */\n  resetSeries(shouldUpdateChart = true, shouldResetZoom = true) {\n    this.series.resetSeries(shouldUpdateChart, shouldResetZoom);\n  }\n  /**\n   * Subscribes to a chart event by name.\n   * Supported event names mirror the `chart.events` option keys\n   * (e.g. `'mounted'`, `'updated'`, `'dataPointMouseEnter'`).\n   *\n   * @param {string} name - Event name.\n   * @param {Function} handler - Callback invoked when the event fires.\n   */\n  addEventListener(name2, handler) {\n    this.events.addEventListener(name2, handler);\n  }\n  /**\n   * Removes a previously registered event listener.\n   *\n   * @param {string} name - Event name.\n   * @param {Function} handler - The exact function reference passed to addEventListener.\n   */\n  removeEventListener(name2, handler) {\n    this.events.removeEventListener(name2, handler);\n  }\n  /**\n   * Adds an x-axis annotation dynamically after render.\n   *\n   * @param {XAxisAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addXaxisAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addXaxisAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Adds a y-axis annotation dynamically after render.\n   *\n   * @param {YAxisAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addYaxisAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addYaxisAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Adds a point annotation dynamically after render.\n   *\n   * @param {PointAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addPointAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addPointAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Removes all annotations from the chart.\n   *\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  clearAnnotations(context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    me.lastUpdateOptions = null;\n    (_a = me.annotations) == null ? void 0 : _a.clearAnnotations(me);\n  }\n  /**\n   * Removes a specific annotation by its `id`.\n   *\n   * @param {string} id - The annotation id as set in the annotation config.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  removeAnnotation(id, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    me.lastUpdateOptions = null;\n    (_a = me.annotations) == null ? void 0 : _a.removeAnnotation(me, id);\n  }\n  /**\n   * Returns the inner SVG group element that contains all chart graphics.\n   *\n   * @returns {Element | null}\n   */\n  getChartArea() {\n    const el = this.w.dom.baseEl.querySelector(\".apexcharts-inner\");\n    return el;\n  }\n  /**\n   * Returns the sum of all data points whose x value falls within [minX, maxX].\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @returns {number[]} One total per series.\n   */\n  getSeriesTotalXRange(minX, maxX) {\n    return this.coreUtils.getSeriesTotalsXRange(minX, maxX);\n  }\n  /**\n   * Returns the highest y value in the specified series.\n   *\n   * @param {number} [seriesIndex=0]\n   * @returns {number}\n   */\n  getHighestValueInSeries(seriesIndex = 0) {\n    const range = new Range(this.w);\n    return range.getMinYMaxY(seriesIndex).highestY;\n  }\n  /**\n   * Returns the lowest y value in the specified series.\n   *\n   * @param {number} [seriesIndex=0]\n   * @returns {number}\n   */\n  getLowestValueInSeries(seriesIndex = 0) {\n    const range = new Range(this.w);\n    return range.getMinYMaxY(seriesIndex).lowestY;\n  }\n  /**\n   * Returns the sum of each series (the totals used for percentage calculations).\n   *\n   * @returns {number[]}\n   */\n  getSeriesTotal() {\n    return this.w.globals.seriesTotals;\n  }\n  /**\n   * Returns a curated snapshot of chart state for use in formatters, events,\n   * and external integrations. Prefer this over accessing `chart.w` directly.\n   *\n   * The shape of this object is stable and versioned. `chart.w` is internal\n   * and will be restricted in a future major version.\n   */\n  getState() {\n    const w = this.w;\n    const gl = w.globals;\n    return {\n      // Series data — computed/parsed form used for rendering\n      series: w.seriesData.series,\n      seriesNames: w.seriesData.seriesNames,\n      colors: gl.colors,\n      labels: w.labelData.labels,\n      seriesTotals: gl.seriesTotals,\n      seriesPercent: gl.seriesPercent,\n      seriesXvalues: gl.seriesXvalues,\n      seriesYvalues: gl.seriesYvalues,\n      // Axis bounds — updated after each render\n      minX: gl.minX,\n      maxX: gl.maxX,\n      minY: gl.minY,\n      maxY: gl.maxY,\n      minYArr: gl.minYArr,\n      maxYArr: gl.maxYArr,\n      minXDiff: gl.minXDiff,\n      dataPoints: gl.dataPoints,\n      // Axis scale objects — computed tick/scale results\n      xAxisScale: gl.xAxisScale,\n      yAxisScale: gl.yAxisScale,\n      xTickAmount: gl.xTickAmount,\n      // Axis type flags\n      isXNumeric: w.axisFlags.isXNumeric,\n      // Multi-axis series mapping\n      seriesYAxisMap: gl.seriesYAxisMap,\n      seriesYAxisReverseMap: gl.seriesYAxisReverseMap,\n      // Chart dimensions — updated after each render/resize\n      svgWidth: gl.svgWidth,\n      svgHeight: gl.svgHeight,\n      gridWidth: w.layout.gridWidth,\n      gridHeight: w.layout.gridHeight,\n      // Interactive state\n      selectedDataPoints: w.interact.selectedDataPoints,\n      collapsedSeriesIndices: gl.collapsedSeriesIndices,\n      zoomed: w.interact.zoomed,\n      // Chart-type-specific series data (null when not applicable)\n      seriesX: w.seriesData.seriesX,\n      seriesZ: w.seriesData.seriesZ,\n      seriesCandleO: w.candleData.seriesCandleO,\n      seriesCandleH: w.candleData.seriesCandleH,\n      seriesCandleM: w.candleData.seriesCandleM,\n      seriesCandleL: w.candleData.seriesCandleL,\n      seriesCandleC: w.candleData.seriesCandleC,\n      seriesRangeStart: w.rangeData.seriesRangeStart,\n      seriesRangeEnd: w.rangeData.seriesRangeEnd,\n      seriesGoals: w.seriesData.seriesGoals\n    };\n  }\n  /**\n   * Programmatically selects or deselects a data point.\n   * Equivalent to a user click on the data point.\n   *\n   * @param {number} seriesIndex - Zero-based series index.\n   * @param {number} [dataPointIndex] - Zero-based data point index within the series.\n   * @returns {number[][] | null} Updated selectedDataPoints array, or null.\n   */\n  toggleDataPointSelection(seriesIndex, dataPointIndex) {\n    return this.updateHelpers.toggleDataPointSelection(\n      seriesIndex,\n      dataPointIndex\n    );\n  }\n  /**\n   * Programmatically zooms the x-axis to the given range.\n   * Requires zoom to be enabled (`chart.zoom.enabled: true`).\n   *\n   * @param {number} min - The minimum x value (timestamp or numeric).\n   * @param {number} max - The maximum x value (timestamp or numeric).\n   */\n  zoomX(min, max) {\n    var _a;\n    (_a = this.ctx.toolbar) == null ? void 0 : _a.zoomUpdateOptions(min, max);\n  }\n  /**\n   * Switches the active locale, updating all locale-dependent labels (toolbar tooltips, month names, etc.).\n   *\n   * @param {string} localeName - Must match a locale name defined in `chart.locales`.\n   */\n  setLocale(localeName) {\n    this.localization.setCurrentLocaleValues(localeName);\n  }\n  /**\n   * Exports the chart to a PNG or SVG data URI.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {{ scale?: number, width?: number }} [options]\n   * @returns {Promise<{ imgURI: string } | { blob: Blob }>}\n   */\n  dataURI(options2) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.dataURI(options2);\n  }\n  /**\n   * Returns the chart's SVG markup as a string, optionally scaled.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {number} [scale=1]\n   * @returns {Promise<string>}\n   */\n  getSvgString(scale) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.getSvgString(scale);\n  }\n  /**\n   * Triggers a CSV download of the chart's data.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {{ series?: any, fileName?: string, columnDelimiter?: string, lineDelimiter?: string }} [options]\n   */\n  exportToCSV(options2 = {}) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.exportToCSV(options2);\n  }\n  paper() {\n    return this.w.dom.Paper;\n  }\n  /**\n   * Returns the active series renderer for the last render: `'svg'` (default)\n   * or `'canvas'` (Strata #2). `'auto'`/`'canvas'` resolve to `'svg'` unless the\n   * canvas renderer feature is bundled and no canvas-unsupported feature is in\n   * use. See `chart.renderer` / `chart.rendererThreshold`.\n   *\n   * @returns {'svg' | 'canvas' | 'gpu'}\n   */\n  getActiveRenderer() {\n    return this.rendererController ? this.rendererController.getActiveKind() : \"svg\";\n  }\n  /**\n   * Facet (#13): re-resolve the `--apx-*` design tokens and re-render.\n   *\n   * Tokens are read from the CSS cascade once per render, so a runtime change\n   * that is NOT an OS color-scheme flip (e.g. the host app swaps its own\n   * design-system theme by toggling a class or setting style properties) is\n   * invisible until the next render, and `updateOptions({})` is memoized away.\n   * This busts the memo and re-renders, picking up the current token values.\n   * @returns {Promise<any>}\n   */\n  refreshTokens() {\n    this.lastUpdateOptions = null;\n    return this.update();\n  }\n  /**\n   * Drills into the child level referenced by `id` (a `chart.drilldown.series` entry).\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @param {string|number} id - The drilldown series id to navigate into.\n   * @returns {Promise<ApexCharts>}\n   */\n  drillDown(id) {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillDown(id);\n  }\n  /**\n   * Navigates back one drilldown level.\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @returns {Promise<ApexCharts>}\n   */\n  drillUp() {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillUp();\n  }\n  /**\n   * Navigates back to the root drilldown level.\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @returns {Promise<ApexCharts>}\n   */\n  drillToRoot() {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillToRoot();\n  }\n  // ─── Slice write-back stubs ─────────────────────────────────────────────────\n  /**\n   * Copy own DATA properties of a parse-state slice onto a live w.* slice.\n   * Never Object.assign here: several w.* fields (and, historically, snapshot\n   * fields) are lazy accessors, and [[Get]]-ing an accessor while copying\n   * forces its deferred computation (a deep initialSeries clone plus O(n)\n   * stacked-totals passes on every render/update) and can replace the live\n   * accessor with a materialized value for the life of the instance.\n   * @param {any} target\n   * @param {any} slice\n   */\n  static _writeDataProps(target, slice) {\n    for (const key of Object.keys(slice)) {\n      const d = Object.getOwnPropertyDescriptor(slice, key);\n      if (d && \"value\" in d) target[key] = d.value;\n    }\n  }\n  /**\n   * @param {Partial<import('./types/internal').SeriesData>} slice\n   */\n  _writeParsedSeriesData(slice) {\n    _ApexCharts._writeDataProps(this.w.seriesData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').RangeData>} slice\n   */\n  _writeParsedRangeData(slice) {\n    _ApexCharts._writeDataProps(this.w.rangeData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').CandleData>} slice\n   */\n  _writeParsedCandleData(slice) {\n    _ApexCharts._writeDataProps(this.w.candleData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').LabelData>} slice\n   */\n  _writeParsedLabelData(slice) {\n    _ApexCharts._writeDataProps(this.w.labelData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').AxisFlags>} slice\n   */\n  _writeParsedAxisFlags(slice) {\n    _ApexCharts._writeDataProps(this.w.axisFlags, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').LayoutCoords>} slice\n   */\n  _writeLayoutCoords(slice) {\n    _ApexCharts._writeDataProps(this.w.layout, slice);\n  }\n  _parentResizeCallback() {\n    if (this.w.globals.animationEnded && this.w.config.chart.redrawOnParentResize) {\n      this._windowResize();\n    }\n  }\n  /**\n   * Handle window resize and re-draw the whole chart.\n   */\n  _windowResize() {\n    this.w.globals.resizeTimer = window.setTimeout(() => {\n      const gl = this.w.globals;\n      if (this.core && gl.lastResizeSignature) {\n        const sig = this.core.getResizeSignature();\n        if (sig.w === gl.lastResizeSignature.w && sig.h === gl.lastResizeSignature.h && sig.iw === gl.lastResizeSignature.iw) {\n          return;\n        }\n      }\n      gl.resized = true;\n      gl.dataChanged = false;\n      this.ctx.update();\n    }, 150);\n  }\n  _windowResizeHandler() {\n    var _a;\n    clearTimeout((_a = this.w.globals.resizeTimer) != null ? _a : void 0);\n    let { redrawOnWindowResize: redraw } = this.w.config.chart;\n    if (typeof redraw === \"function\") {\n      redraw = /** @type {any} */\n      redraw();\n    }\n    redraw && this._windowResize();\n  }\n};\n/**\n * Static Perspectives helpers (decode/fromURL), populated by the perspectives\n * feature when imported (`import 'apexcharts/features/perspectives'`); null\n * otherwise. Declared here as a placeholder so core stays free of the\n * Perspectives module while the assignment in the feature file type-checks.\n * @type {any}\n */\n__publicField(_ApexCharts, \"perspectives\", null);\nlet ApexCharts = _ApexCharts;\nclass Exports {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {string} svgString\n   */\n  svgStringToNode(svgString) {\n    const parser = new DOMParser();\n    const svgDoc = parser.parseFromString(svgString, \"image/svg+xml\");\n    return svgDoc.documentElement;\n  }\n  /**\n   * @param {any} svg\n   * @param {number} scale\n   */\n  scaleSvgNode(svg, scale) {\n    const svgWidth = parseFloat(svg.getAttributeNS(null, \"width\"));\n    const svgHeight = parseFloat(svg.getAttributeNS(null, \"height\"));\n    svg.setAttributeNS(null, \"width\", svgWidth * scale);\n    svg.setAttributeNS(null, \"height\", svgHeight * scale);\n    svg.setAttributeNS(null, \"viewBox\", \"0 0 \" + svgWidth + \" \" + svgHeight);\n  }\n  /**\n   * Inline any Strata canvas series layer into the clone as an SVG `<image>`.\n   * A serialized `<canvas>` loses its bitmap, so a canvas-mode export would drop\n   * the series; an `<image>` carrying the canvas `toDataURL()` preserves it in\n   * place. Because it replaces the `<foreignObject>` at the same DOM position,\n   * the grid-behind / annotations-in-front z-order is retained automatically.\n   * No-op in SVG mode (no series canvas present).\n   * @param {any} clonedNode the cloned elWrap about to be serialized\n   */\n  inlineCanvasLayers(clonedNode) {\n    const w = this.w;\n    const XLINK = \"http://www.w3.org/1999/xlink\";\n    const origCanvases = w.dom.elWrap.querySelectorAll(\n      \".apexcharts-series-canvas\"\n    );\n    if (!origCanvases.length) return;\n    const clonedFOs = clonedNode.querySelectorAll(\".apexcharts-canvas-series\");\n    for (let i = 0; i < origCanvases.length && i < clonedFOs.length; i++) {\n      let dataURL;\n      try {\n        dataURL = /** @type {HTMLCanvasElement} */\n        origCanvases[i].toDataURL();\n      } catch (e) {\n        continue;\n      }\n      const fo = clonedFOs[i];\n      const img = document.createElementNS(SVGNS$2, \"image\");\n      img.setAttribute(\"x\", fo.getAttribute(\"x\") || \"0\");\n      img.setAttribute(\"y\", fo.getAttribute(\"y\") || \"0\");\n      img.setAttribute(\"width\", fo.getAttribute(\"width\") || \"0\");\n      img.setAttribute(\"height\", fo.getAttribute(\"height\") || \"0\");\n      img.setAttribute(\"href\", dataURL);\n      img.setAttributeNS(XLINK, \"xlink:href\", dataURL);\n      if (fo.parentNode) fo.parentNode.replaceChild(img, fo);\n    }\n  }\n  /**\n   * `querySelectorAll` as a typed array. Both HTML and SVG elements carry\n   * `style` / `classList`, but `NodeListOf<Element>` does not.\n   * @param {ParentNode} root\n   * @param {string} selector\n   * @returns {Array<HTMLElement | SVGElement>}\n   */\n  queryStyleable(root, selector) {\n    return (\n      /** @type {Array<HTMLElement | SVGElement>} */\n      Array.prototype.slice.call(root.querySelectorAll(selector))\n    );\n  }\n  /**\n   * Applies `styles` only where the element has no inline value for that\n   * property yet.\n   *\n   * The rules being re-applied here came from a stylesheet, so anything a\n   * module set inline has to keep winning exactly like it does in the live\n   * DOM: `legend.fontSize` (Legend.js) and the heatmap gradient legend's\n   * deliberate `display`/`overflow`/`padding` overrides on the legend wrap\n   * (HeatmapGradientLegend.js) would otherwise be clobbered in the export.\n   * @param {HTMLElement | SVGElement} el\n   * @param {Record<string, string>} styles\n   */\n  setStyleDefaults(el, styles) {\n    Object.keys(styles).forEach((prop) => {\n      if (el.style.getPropertyValue(prop) === \"\") {\n        el.style.setProperty(prop, styles[prop]);\n      }\n    });\n  }\n  /**\n   * Re-applies, as inline styles on the clone, the rules that used to reach\n   * the exported SVG through an injected `<style>` block. A strict\n   * Content-Security-Policy without `'unsafe-inline'` blocks that block and\n   * breaks the export, so the export must not depend on one. See #5146.\n   *\n   * Mirrors `src/assets/apexcharts-legend.css`. Interaction-only rules\n   * (`cursor`, `pointer-events`) are carried over for parity even though they\n   * do nothing in a static image; the layout rules are what matter.\n   * @param {HTMLElement} clonedNode the cloned elWrap about to be serialized\n   */\n  applyExportStyles(clonedNode) {\n    const w = this.w;\n    this.queryStyleable(clonedNode, \"style\").forEach((el) => el.remove());\n    this.queryStyleable(\n      clonedNode,\n      [\n        \".apexcharts-tooltip\",\n        \".apexcharts-toolbar\",\n        \".apexcharts-xaxistooltip\",\n        \".apexcharts-yaxistooltip\",\n        \".apexcharts-xcrosshairs\",\n        \".apexcharts-ycrosshairs\",\n        \".apexcharts-zoom-rect\",\n        \".apexcharts-selection-rect\"\n      ].join(\", \")\n    ).forEach((el) => {\n      el.style.setProperty(\"display\", \"none\", \"important\");\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-flip-y\").forEach((el) => {\n      this.setStyleDefaults(el, {\n        transform: \"scaleY(-1) translateY(-100%)\",\n        \"transform-origin\": \"top\",\n        \"transform-box\": \"fill-box\"\n      });\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-flip-x\").forEach((el) => {\n      this.setStyleDefaults(el, {\n        transform: \"scaleX(-1)\",\n        \"transform-origin\": \"center\",\n        \"transform-box\": \"fill-box\"\n      });\n    });\n    if (!w.config.legend.show || !w.dom.elLegendWrap || !w.dom.elLegendWrap.children.length) {\n      return;\n    }\n    this.queryStyleable(clonedNode, \".apexcharts-legend\").forEach((el) => {\n      this.setStyleDefaults(el, {\n        display: \"flex\",\n        overflow: \"auto\",\n        padding: \"0 10px\"\n      });\n      const cl = el.classList;\n      const isSide = cl.contains(\"apx-legend-position-left\") || cl.contains(\"apx-legend-position-right\");\n      const isTopOrBottom = cl.contains(\"apx-legend-position-top\") || cl.contains(\"apx-legend-position-bottom\");\n      if (cl.contains(\"apexcharts-legend-group-horizontal\")) {\n        this.setStyleDefaults(el, { \"flex-direction\": \"column\" });\n      }\n      if (isSide) {\n        this.setStyleDefaults(el, { \"flex-direction\": \"column\", bottom: \"0\" });\n      }\n      if (isTopOrBottom) {\n        this.setStyleDefaults(el, { \"flex-wrap\": \"wrap\" });\n      }\n      if (isSide || isTopOrBottom && cl.contains(\"apexcharts-align-left\")) {\n        this.setStyleDefaults(el, {\n          \"justify-content\": \"flex-start\",\n          \"align-items\": \"flex-start\"\n        });\n      } else if (isTopOrBottom && cl.contains(\"apexcharts-align-center\")) {\n        this.setStyleDefaults(el, {\n          \"justify-content\": \"center\",\n          \"align-items\": \"center\"\n        });\n      } else if (isTopOrBottom && cl.contains(\"apexcharts-align-right\")) {\n        this.setStyleDefaults(el, {\n          \"justify-content\": \"flex-end\",\n          \"align-items\": \"flex-end\"\n        });\n      }\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-legend-group\").forEach(\n      (el) => {\n        this.setStyleDefaults(el, { display: \"flex\" });\n      }\n    );\n    this.queryStyleable(\n      clonedNode,\n      \".apexcharts-legend-group-vertical\"\n    ).forEach((el) => {\n      this.setStyleDefaults(el, { \"flex-direction\": \"column-reverse\" });\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-legend-series\").forEach(\n      (el) => {\n        this.setStyleDefaults(el, {\n          cursor: el.classList.contains(\"apexcharts-no-click\") ? \"auto\" : \"pointer\",\n          \"line-height\": \"normal\",\n          display: \"flex\",\n          \"align-items\": \"center\"\n        });\n      }\n    );\n    this.queryStyleable(clonedNode, \".apexcharts-legend-text\").forEach((el) => {\n      this.setStyleDefaults(el, {\n        position: \"relative\",\n        \"font-size\": \"14px\"\n      });\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-legend-marker\").forEach(\n      (el) => {\n        this.setStyleDefaults(el, {\n          position: \"relative\",\n          display: \"flex\",\n          \"align-items\": \"center\",\n          \"justify-content\": \"center\",\n          cursor: \"pointer\",\n          \"margin-right\": \"1px\"\n        });\n      }\n    );\n    this.queryStyleable(clonedNode, \".apexcharts-inactive-legend\").forEach(\n      (el) => {\n        this.setStyleDefaults(el, { opacity: \"0.45\" });\n      }\n    );\n    this.queryStyleable(\n      clonedNode,\n      \".apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series\"\n    ).forEach((el) => {\n      el.style.setProperty(\"display\", \"none\", \"important\");\n    });\n  }\n  /**\n   * @param {number} [_scale]\n   */\n  getSvgString(_scale) {\n    return new Promise((resolve) => {\n      const w = this.w;\n      let scale = _scale || w.config.chart.toolbar.export.scale || w.config.chart.toolbar.export.width / w.globals.svgWidth;\n      if (!scale) {\n        scale = 1;\n      }\n      const width = w.globals.svgWidth * scale;\n      const height = w.globals.svgHeight * scale;\n      const clonedNode = (\n        /** @type {HTMLElement} */\n        w.dom.elWrap.cloneNode(true)\n      );\n      clonedNode.style.width = width + \"px\";\n      clonedNode.style.height = height + \"px\";\n      this.inlineCanvasLayers(clonedNode);\n      this.applyExportStyles(clonedNode);\n      const serializedNode = new XMLSerializer().serializeToString(clonedNode);\n      let svgString = `\n        <svg xmlns=\"http://www.w3.org/2000/svg\"\n          version=\"1.1\"\n          xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n          class=\"apexcharts-svg\"\n          xmlns:data=\"ApexChartsNS\"\n          transform=\"translate(0, 0)\"\n          width=\"${w.globals.svgWidth}px\" height=\"${w.globals.svgHeight}px\">\n          <foreignObject width=\"100%\" height=\"100%\">\n            <div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"width:${width}px; height:${height}px;\">\n              ${serializedNode}\n            </div>\n          </foreignObject>\n        </svg>\n      `;\n      const svgNode = this.svgStringToNode(svgString);\n      if (scale !== 1) {\n        this.scaleSvgNode(svgNode, scale);\n      }\n      this.convertImagesToBase64(svgNode).then(() => {\n        svgString = new XMLSerializer().serializeToString(svgNode);\n        resolve(svgString.replace(/&nbsp;/g, \"&#160;\"));\n      });\n    });\n  }\n  /**\n   * @param {any} svgNode\n   */\n  convertImagesToBase64(svgNode) {\n    const images = svgNode.getElementsByTagName(\"image\");\n    const promises = Array.from(images).map((img) => {\n      const href = img.getAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\");\n      if (href && !href.startsWith(\"data:\")) {\n        return this.getBase64FromUrl(href).then((base64) => {\n          img.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", base64);\n        }).catch((error) => {\n          console.error(\"Error converting image to base64:\", error);\n        });\n      }\n      return Promise.resolve();\n    });\n    return Promise.all(promises);\n  }\n  /**\n   * @param {string} url\n   */\n  getBase64FromUrl(url) {\n    if (Environment.isSSR()) return Promise.resolve(url);\n    return new Promise((resolve, reject) => {\n      const img = new Image();\n      img.crossOrigin = \"Anonymous\";\n      img.onload = () => {\n        const canvas = document.createElement(\"canvas\");\n        canvas.width = img.width;\n        canvas.height = img.height;\n        const ctx = canvas.getContext(\"2d\");\n        if (ctx) ctx.drawImage(img, 0, 0);\n        resolve(canvas.toDataURL());\n      };\n      img.onerror = reject;\n      img.src = url;\n    });\n  }\n  svgUrl() {\n    return new Promise((resolve) => {\n      this.getSvgString().then((svgData) => {\n        const svgBlob = new Blob([svgData], {\n          type: \"image/svg+xml;charset=utf-8\"\n        });\n        resolve(URL.createObjectURL(svgBlob));\n      });\n    });\n  }\n  /**\n   * @param {Record<string, any> | undefined} options\n   */\n  dataURI(options2) {\n    if (Environment.isSSR()) return Promise.resolve({ imgURI: \"\" });\n    return new Promise((resolve) => {\n      const w = this.w;\n      const scale = options2 ? options2.scale || options2.width / w.globals.svgWidth : 1;\n      const canvas = document.createElement(\"canvas\");\n      canvas.width = w.globals.svgWidth * scale;\n      canvas.height = parseInt(w.dom.elWrap.style.height, 10) * scale;\n      const canvasBg = w.config.chart.background === \"transparent\" || !w.config.chart.background ? \"#fff\" : w.config.chart.background;\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n      ctx.fillStyle = canvasBg;\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\n      this.getSvgString(scale).then((svgData) => {\n        const svgUrl = \"data:image/svg+xml,\" + encodeURIComponent(svgData);\n        const img = new Image();\n        img.crossOrigin = \"anonymous\";\n        img.onload = () => {\n          ctx.drawImage(img, 0, 0);\n          const edgeCanvas = canvas;\n          if (edgeCanvas.msToBlob) {\n            const blob = edgeCanvas.msToBlob();\n            resolve({ blob });\n          } else {\n            const imgURI = canvas.toDataURL(\"image/png\");\n            resolve({ imgURI });\n          }\n        };\n        img.src = svgUrl;\n      });\n    });\n  }\n  exportToSVG() {\n    this.svgUrl().then((url) => {\n      this.triggerDownload(\n        url,\n        this.w.config.chart.toolbar.export.svg.filename,\n        \".svg\"\n      );\n    });\n  }\n  exportToPng() {\n    const scale = this.w.config.chart.toolbar.export.scale;\n    const width = this.w.config.chart.toolbar.export.width;\n    const option = scale ? { scale } : width ? { width } : void 0;\n    this.dataURI(option).then(({ imgURI, blob }) => {\n      if (blob) {\n        navigator.msSaveOrOpenBlob(blob, this.w.globals.chartID + \".png\");\n      } else {\n        this.triggerDownload(\n          imgURI,\n          this.w.config.chart.toolbar.export.png.filename,\n          \".png\"\n        );\n      }\n    });\n  }\n  /** @param {{ series?: any, fileName?: any, columnDelimiter?: string, lineDelimiter?: string }} opts */\n  exportToCSV({\n    series,\n    fileName,\n    columnDelimiter = \",\",\n    lineDelimiter = \"\\n\"\n  }) {\n    const w = this.w;\n    if (!series) series = w.config.series;\n    let columns = [];\n    const rows = [];\n    let result = \"\";\n    const universalBOM = \"\\uFEFF\";\n    const gSeries = w.seriesData.series.map((s, i) => {\n      return w.globals.collapsedSeriesIndices.indexOf(i) === -1 ? s : [];\n    });\n    const csvSafe = (val) => {\n      if (val == null || Utils$1.isNumber(val)) return val;\n      const s = String(val);\n      return /^[=+\\-@\\t\\r]/.test(s) ? `'${s}` : s;\n    };\n    const getFormattedCategory = (cat) => {\n      if (typeof w.config.chart.toolbar.export.csv.categoryFormatter === \"function\") {\n        return w.config.chart.toolbar.export.csv.categoryFormatter(cat);\n      }\n      if (w.config.xaxis.type === \"datetime\" && String(cat).length >= 10) {\n        return new Date(cat).toDateString();\n      }\n      return Utils$1.isNumber(cat) ? cat : csvSafe(cat.split(columnDelimiter).join(\"\"));\n    };\n    const getFormattedValue = (value) => {\n      return typeof w.config.chart.toolbar.export.csv.valueFormatter === \"function\" ? w.config.chart.toolbar.export.csv.valueFormatter(value) : csvSafe(value);\n    };\n    const seriesMaxDataLength = Math.max(\n      ...series.map((s) => {\n        return s.data ? s.data.length : 0;\n      })\n    );\n    const dataFormat = new Data(this.w);\n    const axesUtils = new AxesUtils(this.w, {\n      theme: this.ctx.theme,\n      timeScale: this.ctx.timeScale\n    });\n    const getCat = (i) => {\n      let cat = \"\";\n      if (!w.globals.axisCharts) {\n        cat = w.config.labels[i];\n      } else {\n        if (w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) {\n          if (w.globals.isBarHorizontal) {\n            const lbFormatter = w.formatters.yLabelFormatters[0];\n            const sr = new Series(this.ctx.w);\n            const activeSeries = sr.getActiveConfigSeriesIndex();\n            cat = lbFormatter(w.labelData.labels[i], {\n              seriesIndex: activeSeries,\n              dataPointIndex: i,\n              w\n            });\n          } else {\n            cat = axesUtils.getLabel(\n              w.labelData.labels,\n              w.labelData.timescaleLabels,\n              0,\n              i\n            ).text;\n          }\n        }\n        if (w.config.xaxis.type === \"datetime\") {\n          if (w.config.xaxis.categories.length) {\n            cat = w.config.xaxis.categories[i];\n          } else if (w.config.labels.length) {\n            cat = w.config.labels[i];\n          }\n        }\n      }\n      if (cat === null) return \"nullvalue\";\n      if (Array.isArray(cat)) {\n        cat = cat.join(\" \");\n      }\n      return Utils$1.isNumber(cat) ? cat : cat.split(columnDelimiter).join(\"\");\n    };\n    const getEmptyDataForCsvColumn = () => {\n      return [...Array(seriesMaxDataLength)].map(() => \"\");\n    };\n    const handleAxisRowsColumns = (s, sI) => {\n      var _a, _b, _c, _d, _e, _f;\n      if (columns.length && sI === 0) {\n        rows.push(columns.join(columnDelimiter));\n      }\n      if (s.data) {\n        const rowData = s.data.length ? s.data : getEmptyDataForCsvColumn();\n        for (let i = 0; i < rowData.length; i++) {\n          columns = [];\n          let cat = getCat(i);\n          if (cat === \"nullvalue\") continue;\n          if (!cat) {\n            if (dataFormat.isFormatXY()) {\n              cat = series[sI].data[i].x;\n            } else if (dataFormat.isFormat2DArray()) {\n              cat = series[sI].data[i] ? series[sI].data[i][0] : \"\";\n            }\n          }\n          if (sI === 0) {\n            columns.push(getFormattedCategory(cat));\n            for (let ci = 0; ci < w.seriesData.series.length; ci++) {\n              const value = dataFormat.isFormatXY() ? (_a = series[ci].data[i]) == null ? void 0 : _a.y : gSeries[ci][i];\n              columns.push(getFormattedValue(value));\n            }\n          }\n          if (w.config.chart.type === \"candlestick\" || s.type && s.type === \"candlestick\") {\n            columns.pop();\n            columns.push(w.candleData.seriesCandleO[sI][i]);\n            columns.push(w.candleData.seriesCandleH[sI][i]);\n            columns.push(w.candleData.seriesCandleL[sI][i]);\n            columns.push(w.candleData.seriesCandleC[sI][i]);\n          }\n          if (w.config.chart.type === \"boxPlot\" || s.type && s.type === \"boxPlot\") {\n            columns.pop();\n            columns.push(w.candleData.seriesCandleO[sI][i]);\n            columns.push(w.candleData.seriesCandleH[sI][i]);\n            columns.push(w.candleData.seriesCandleM[sI][i]);\n            columns.push(w.candleData.seriesCandleL[sI][i]);\n            columns.push(w.candleData.seriesCandleC[sI][i]);\n          }\n          if (w.config.chart.type === \"rangeBar\") {\n            columns.pop();\n            columns.push(w.rangeData.seriesRangeStart[sI][i]);\n            columns.push(w.rangeData.seriesRangeEnd[sI][i]);\n          }\n          if (w.config.chart.type === \"violin\" || s.type && s.type === \"violin\") {\n            columns.pop();\n            columns.push((_b = w.violinData.seriesViolinMin[sI]) == null ? void 0 : _b[i]);\n            columns.push((_c = w.violinData.seriesViolinMax[sI]) == null ? void 0 : _c[i]);\n            columns.push((_f = (_e = (_d = w.violinData.seriesViolinPoints[sI]) == null ? void 0 : _d[i]) == null ? void 0 : _e.length) != null ? _f : 0);\n          }\n          if (columns.length) {\n            rows.push(columns.join(columnDelimiter));\n          }\n        }\n      }\n    };\n    const handleUnequalXValues = () => {\n      const categories = /* @__PURE__ */ new Set();\n      const data = {};\n      series.forEach((s, sI) => {\n        s == null ? void 0 : s.data.forEach((dataItem) => {\n          let cat, value;\n          if (dataFormat.isFormatXY()) {\n            cat = dataItem.x;\n            value = dataItem.y;\n          } else if (dataFormat.isFormat2DArray()) {\n            cat = dataItem[0];\n            value = dataItem[1];\n          } else {\n            return;\n          }\n          if (!/** @type {Record<string,any>} */\n          data[cat]) {\n            data[cat] = Array(\n              series.length\n            ).fill(\"\");\n          }\n          data[cat][sI] = getFormattedValue(value);\n          categories.add(cat);\n        });\n      });\n      if (columns.length) {\n        rows.push(columns.join(columnDelimiter));\n      }\n      Array.from(categories).sort().forEach((cat) => {\n        const values = (\n          /** @type {Record<string,any>} */\n          data[cat]\n        );\n        rows.push([getFormattedCategory(cat), ...values].join(columnDelimiter));\n      });\n    };\n    columns.push(w.config.chart.toolbar.export.csv.headerCategory);\n    if (w.config.chart.type === \"boxPlot\") {\n      columns.push(\"minimum\");\n      columns.push(\"q1\");\n      columns.push(\"median\");\n      columns.push(\"q3\");\n      columns.push(\"maximum\");\n    } else if (w.config.chart.type === \"candlestick\") {\n      columns.push(\"open\");\n      columns.push(\"high\");\n      columns.push(\"low\");\n      columns.push(\"close\");\n    } else if (w.config.chart.type === \"rangeBar\") {\n      columns.push(\"minimum\");\n      columns.push(\"maximum\");\n    } else if (w.config.chart.type === \"violin\") {\n      columns.push(\"minimum\");\n      columns.push(\"maximum\");\n      columns.push(\"observations\");\n    } else {\n      series.map((s, sI) => {\n        const sname = (s.name ? s.name : `series-${sI}`) + \"\";\n        if (w.globals.axisCharts) {\n          columns.push(\n            sname.split(columnDelimiter).join(\"\") ? sname.split(columnDelimiter).join(\"\") : `series-${sI}`\n          );\n        }\n      });\n    }\n    if (!w.globals.axisCharts) {\n      columns.push(w.config.chart.toolbar.export.csv.headerValue);\n      rows.push(columns.join(columnDelimiter));\n    }\n    if (!w.globals.allSeriesHasEqualX && w.globals.axisCharts && !w.config.xaxis.categories.length && !w.config.labels.length) {\n      handleUnequalXValues();\n    } else {\n      series.map((s, sI) => {\n        if (w.globals.axisCharts) {\n          handleAxisRowsColumns(s, sI);\n        } else {\n          columns = [];\n          columns.push(getFormattedCategory(w.labelData.labels[sI]));\n          columns.push(getFormattedValue(gSeries[sI]));\n          rows.push(columns.join(columnDelimiter));\n        }\n      });\n    }\n    result += rows.join(lineDelimiter);\n    this.triggerDownload(\n      \"data:text/csv; charset=utf-8,\" + encodeURIComponent(universalBOM + result),\n      fileName ? fileName : w.config.chart.toolbar.export.csv.filename,\n      \".csv\"\n    );\n  }\n  /**\n   * @param {string} href\n   * @param {string} filename\n   * @param {string} ext\n   */\n  triggerDownload(href, filename, ext) {\n    if (Environment.isSSR()) return;\n    const downloadLink = document.createElement(\"a\");\n    downloadLink.href = href;\n    downloadLink.download = (filename ? filename : this.w.globals.chartID) + ext;\n    document.body.appendChild(downloadLink);\n    downloadLink.click();\n    document.body.removeChild(downloadLink);\n  }\n}\nApexCharts.registerFeatures({ exports: Exports });\nconst apexchartsLegendCSS = \".apexcharts-flip-y {\\n  transform: scaleY(-1) translateY(-100%);\\n  transform-origin: top;\\n  transform-box: fill-box;\\n}\\n.apexcharts-flip-x {\\n  transform: scaleX(-1);\\n  transform-origin: center;\\n  transform-box: fill-box;\\n}\\n.apexcharts-legend {\\n  display: flex;\\n  overflow: auto;\\n  padding: 0 10px;\\n}\\n.apexcharts-legend.apexcharts-legend-group-horizontal {\\n  flex-direction: column;\\n}\\n.apexcharts-legend-group {\\n  display: flex;\\n}\\n.apexcharts-legend-group-vertical {\\n  flex-direction: column-reverse;\\n}\\n.apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\n  flex-wrap: wrap\\n}\\n.apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\n  flex-direction: column;\\n  bottom: 0;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\n  justify-content: flex-start;\\n  align-items: flex-start;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\n  justify-content: center;\\n  align-items: center;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\n  justify-content: flex-end;\\n  align-items: flex-end;\\n}\\n.apexcharts-legend-series {\\n  cursor: pointer;\\n  line-height: normal;\\n  display: flex;\\n  align-items: center;\\n}\\n.apexcharts-legend-text {\\n  position: relative;\\n  font-size: 14px;\\n}\\n.apexcharts-legend-text *, .apexcharts-legend-marker * {\\n  pointer-events: none;\\n}\\n.apexcharts-legend-marker {\\n  position: relative;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  cursor: pointer;\\n  margin-right: 1px;\\n}\\n\\n.apexcharts-legend-series.apexcharts-no-click {\\n  cursor: auto;\\n}\\n.apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\n  display: none !important;\\n}\\n.apexcharts-inactive-legend {\\n  opacity: 0.45;\\n} \";\nlet Helpers$3 = class Helpers2 {\n  /**\n   * @param {import('./Legend').default} lgCtx\n   */\n  constructor(lgCtx) {\n    this.w = lgCtx.w;\n    this.lgCtx = lgCtx;\n  }\n  getLegendStyles() {\n    if (Environment.isSSR()) return null;\n    const stylesheet = document.createElement(\"style\");\n    stylesheet.setAttribute(\"type\", \"text/css\");\n    const nonce = this.w.config.chart.nonce;\n    if (nonce) {\n      stylesheet.setAttribute(\"nonce\", nonce);\n    }\n    const rule = document.createTextNode(apexchartsLegendCSS);\n    stylesheet.appendChild(rule);\n    return stylesheet;\n  }\n  getLegendDimensions() {\n    const w = this.w;\n    const currLegendsWrap = w.dom.baseEl.querySelector(\".apexcharts-legend\");\n    if (!currLegendsWrap) {\n      return { clwh: 0, clww: 0 };\n    }\n    const { width: currLegendsWrapWidth, height: currLegendsWrapHeight } = currLegendsWrap.getBoundingClientRect();\n    return {\n      clwh: currLegendsWrapHeight,\n      clww: currLegendsWrapWidth\n    };\n  }\n  appendToForeignObject() {\n    var _a;\n    const legendStyles = this.getLegendStyles();\n    if (this.w.config.chart.injectStyleSheet !== false && legendStyles) {\n      (_a = this.w.dom.elLegendForeign) == null ? void 0 : _a.appendChild(legendStyles);\n    }\n  }\n  /**\n   * @param {number} seriesCnt\n   * @param {boolean} isHidden\n   */\n  toggleDataSeries(seriesCnt, isHidden) {\n    var _a, _b, _c;\n    const w = this.w;\n    if (w.globals.axisCharts || w.config.chart.type === \"radialBar\") {\n      w.globals.resized = true;\n      let seriesEl = null;\n      let realIndex = null;\n      w.globals.risingSeries = [];\n      if (w.globals.axisCharts) {\n        seriesEl = (_a = Array.prototype.find.call(\n          w.dom.baseEl.querySelectorAll(\".apexcharts-series\"),\n          (el) => el.getAttribute(\"data:realIndex\") === String(seriesCnt)\n        )) != null ? _a : null;\n        if (!seriesEl) return;\n        realIndex = parseInt((_b = seriesEl.getAttribute(\"data:realIndex\")) != null ? _b : \"\", 10);\n      } else {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[rel='${seriesCnt + 1}']`\n        );\n        if (!seriesEl) return;\n        realIndex = parseInt((_c = seriesEl.getAttribute(\"rel\")) != null ? _c : \"\", 10) - 1;\n      }\n      if (isHidden) {\n        const seriesToMakeVisible = [\n          {\n            cs: w.globals.collapsedSeries,\n            csi: w.globals.collapsedSeriesIndices\n          },\n          {\n            cs: w.globals.ancillaryCollapsedSeries,\n            csi: w.globals.ancillaryCollapsedSeriesIndices\n          }\n        ];\n        seriesToMakeVisible.forEach((r) => {\n          const cs = (\n            /** @type {any} */\n            r.cs\n          );\n          const csi = (\n            /** @type {any} */\n            r.csi\n          );\n          this.riseCollapsedSeries(\n            cs,\n            csi,\n            /** @type {number} */\n            realIndex\n          );\n        });\n      } else {\n        this.hideSeries({ seriesEl, realIndex });\n      }\n      if (w.config.chart.accessibility.enabled) {\n        const legendItem = w.dom.baseEl.querySelector(\n          `.apexcharts-legend-series[rel=\"${seriesCnt + 1}\"]`\n        );\n        if (legendItem) {\n          const isCollapsed = w.globals.collapsedSeriesIndices.includes(realIndex) || w.globals.ancillaryCollapsedSeriesIndices.includes(realIndex);\n          legendItem.setAttribute(\n            \"aria-pressed\",\n            isCollapsed ? \"true\" : \"false\"\n          );\n          const legendTextEl = legendItem.querySelector(\n            \".apexcharts-legend-text\"\n          );\n          const seriesName = legendTextEl ? legendTextEl.textContent : w.seriesData.seriesNames[seriesCnt];\n          const statusText = isCollapsed ? \"hidden\" : \"visible\";\n          legendItem.setAttribute(\n            \"aria-label\",\n            `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n          );\n        }\n      }\n    } else {\n      w.globals.resized = true;\n      w.globals.risingSeries = [];\n      if (isHidden) {\n        this.riseCollapsedSeries(\n          w.globals.collapsedSeries,\n          w.globals.collapsedSeriesIndices,\n          seriesCnt\n        );\n      } else {\n        const series = this.getSeriesAfterCollapsing({ realIndex: seriesCnt });\n        this.lgCtx.updateSeries(\n          series,\n          w.config.chart.animations.dynamicAnimation.enabled\n        );\n      }\n      if (w.config.chart.accessibility.enabled) {\n        const legendItem = w.dom.baseEl.querySelector(\n          `.apexcharts-legend-series[rel=\"${seriesCnt + 1}\"]`\n        );\n        if (legendItem) {\n          const isCollapsed = w.globals.collapsedSeriesIndices.includes(seriesCnt);\n          legendItem.setAttribute(\n            \"aria-pressed\",\n            isCollapsed ? \"true\" : \"false\"\n          );\n          const legendTextEl = legendItem.querySelector(\n            \".apexcharts-legend-text\"\n          );\n          const seriesName = legendTextEl ? legendTextEl.textContent : w.seriesData.seriesNames[seriesCnt];\n          const statusText = isCollapsed ? \"hidden\" : \"visible\";\n          legendItem.setAttribute(\n            \"aria-label\",\n            `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n          );\n        }\n      }\n    }\n  }\n  /**\n   * Non-axis \"slice\" container. A pie/donut/polarArea slice is normally a\n   * top-level series element (numeric form: `series = [n, n, n]`), but object\n   * form (`series = [{ data: [{ x, y, drilldown }, ...] }]`, which pie/donut\n   * drilldown requires) packs every slice as a data point inside a single\n   * series. Return the array that actually holds the slice values so a\n   * slice/legend index addresses the right thing. Scoped to the pie family so\n   * unit charts (which share this non-axis path) are untouched.\n   * @param {any[]} series\n   * @returns {any[]}\n   */\n  _nonAxisSliceContainer(series) {\n    const type = this.w.config.chart.type;\n    if ((type === \"pie\" || type === \"donut\" || type === \"polarArea\" || type === \"sunburst\") && series.length === 1 && series[0] && typeof series[0] === \"object\" && Array.isArray(series[0].data)) {\n      return series[0].data;\n    }\n    return series;\n  }\n  /**\n   * Read a non-axis slice value (handles `{ x, y }` data points and plain\n   * numbers).\n   * @param {any} sliceEntry\n   * @returns {number}\n   */\n  _readSliceValue(sliceEntry) {\n    if (this.w.config.chart.type === \"unit\" && sliceEntry && Array.isArray(sliceEntry.data)) {\n      return sliceEntry.data;\n    }\n    return sliceEntry && typeof sliceEntry === \"object\" ? sliceEntry.y : sliceEntry;\n  }\n  /**\n   * Write a non-axis slice value in place, preserving `{ x, drilldown, ... }`\n   * on object data points.\n   * @param {any[]} container\n   * @param {number} i\n   * @param {number} value\n   */\n  _writeSliceValue(container, i, value) {\n    const entry = container[i];\n    if (this.w.config.chart.type === \"unit\" && entry && Array.isArray(entry.data)) {\n      entry.data = Array.isArray(value) ? value : [];\n      return;\n    }\n    if (entry && typeof entry === \"object\") {\n      entry.y = value;\n    } else {\n      container[i] = value;\n    }\n  }\n  /** @param {{realIndex: any}} opts */\n  getSeriesAfterCollapsing({ realIndex }) {\n    var _a, _b;\n    const w = this.w;\n    const gl = w.globals;\n    const series = Utils$1.clone(w.config.series);\n    if (gl.axisCharts) {\n      const yaxis = w.config.yaxis[gl.seriesYAxisReverseMap[realIndex]];\n      const collapseData = {\n        index: realIndex,\n        data: series[realIndex].data.slice(),\n        type: series[realIndex].type || w.config.chart.type,\n        // The category name pins the hide across a data update that reorders or\n        // regroups categories (e.g. a storyboard beat): the collapse is\n        // reconciled by name, not index. See Series.reconcileCollapsedByName.\n        name: (gl.seriesNames || [])[realIndex]\n      };\n      if (yaxis && yaxis.show && yaxis.showAlways) {\n        if (gl.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) {\n          gl.ancillaryCollapsedSeries.push(collapseData);\n          gl.ancillaryCollapsedSeriesIndices.push(realIndex);\n        }\n      } else {\n        if (gl.collapsedSeriesIndices.indexOf(realIndex) < 0) {\n          gl.collapsedSeries.push(collapseData);\n          gl.collapsedSeriesIndices.push(realIndex);\n          const removeIndexOfRising = gl.risingSeries.indexOf(realIndex);\n          gl.risingSeries.splice(removeIndexOfRising, 1);\n        }\n      }\n    } else {\n      if (gl.collapsedSeriesIndices.indexOf(realIndex) < 0) {\n        const container = this._nonAxisSliceContainer(series);\n        gl.collapsedSeries.push({\n          index: realIndex,\n          // Store the original slice VALUE so it can be restored on rise. In\n          // object form this is a data point's `y`, not the whole series entry.\n          data: this._readSliceValue(container[realIndex]),\n          type: (\n            /** @type {any} */\n            (_b = (_a = w.config.series[realIndex]) == null ? void 0 : _a.type) != null ? _b : \"line\"\n          ),\n          // Pin the hide by category name so it survives a regroup (see above).\n          name: (gl.seriesNames || [])[realIndex]\n        });\n        gl.collapsedSeriesIndices.push(realIndex);\n      }\n    }\n    const seriesCount = gl.axisCharts ? w.config.series.length : this._nonAxisSliceContainer(series).length;\n    gl.allSeriesCollapsed = gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === seriesCount;\n    return this._getSeriesBasedOnCollapsedState(series);\n  }\n  /** @param {{seriesEl: any, realIndex: any}} opts */\n  hideSeries({ seriesEl, realIndex }) {\n    const w = this.w;\n    const series = this.getSeriesAfterCollapsing({\n      realIndex\n    });\n    const seriesChildren = seriesEl.childNodes;\n    for (let sc = 0; sc < seriesChildren.length; sc++) {\n      if (seriesChildren[sc].classList.contains(\"apexcharts-series-markers-wrap\")) {\n        if (seriesChildren[sc].classList.contains(\"apexcharts-hide\")) {\n          seriesChildren[sc].classList.remove(\"apexcharts-hide\");\n        } else {\n          seriesChildren[sc].classList.add(\"apexcharts-hide\");\n        }\n      }\n    }\n    this.lgCtx.updateSeries(\n      series,\n      w.config.chart.animations.dynamicAnimation.enabled\n    );\n  }\n  /**\n   * @param {any[]} collapsedSeries\n   * @param {number[]} seriesIndices\n   * @param {number} realIndex\n   */\n  riseCollapsedSeries(collapsedSeries, seriesIndices, realIndex) {\n    const w = this.w;\n    let series = Utils$1.clone(w.config.series);\n    if (collapsedSeries.length > 0) {\n      for (let c = 0; c < collapsedSeries.length; c++) {\n        if (collapsedSeries[c].index === realIndex) {\n          if (w.globals.axisCharts) {\n            series[realIndex].data = collapsedSeries[c].data.slice();\n            series[realIndex].hidden = false;\n          } else {\n            const container = this._nonAxisSliceContainer(series);\n            this._writeSliceValue(container, realIndex, collapsedSeries[c].data);\n          }\n          collapsedSeries.splice(c, 1);\n          seriesIndices.splice(c, 1);\n          w.globals.risingSeries.push(realIndex);\n          c--;\n        }\n      }\n      series = this._getSeriesBasedOnCollapsedState(series);\n      this.lgCtx.updateSeries(\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n    }\n  }\n  /**\n   * @param {any[]} series\n   */\n  _getSeriesBasedOnCollapsedState(series) {\n    const w = this.w;\n    let collapsed = 0;\n    if (w.globals.axisCharts) {\n      series.forEach((s, sI) => {\n        if (!(w.globals.collapsedSeriesIndices.indexOf(sI) < 0 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(sI) < 0)) {\n          series[sI].data = [];\n          collapsed++;\n        }\n      });\n    } else {\n      const container = this._nonAxisSliceContainer(series);\n      container.forEach((s, sI) => {\n        if (!(w.globals.collapsedSeriesIndices.indexOf(sI) < 0)) {\n          this._writeSliceValue(container, sI, 0);\n          collapsed++;\n        }\n      });\n    }\n    const seriesCount = w.globals.axisCharts ? series.length : this._nonAxisSliceContainer(series).length;\n    w.globals.allSeriesCollapsed = collapsed === seriesCount;\n    return series;\n  }\n};\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nclass HeatmapGradientLegend {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.svgEl = null;\n    this.arrowEl = null;\n    this.hoverValueEl = null;\n    this._min = 0;\n    this._max = 0;\n    this._geom = null;\n    this._bandHitEls = [];\n    this._activeBandIndex = -1;\n    this._onCellEnter = this._onCellEnter.bind(this);\n    this._onCellLeave = this._onCellLeave.bind(this);\n    this._onBandEnter = this._onBandEnter.bind(this);\n    this._onBandLeave = this._onBandLeave.bind(this);\n  }\n  /** Default value formatter for min/max labels and the hover tooltip. */\n  _getFormatter() {\n    const cfg = this.w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    if (typeof cfg.formatter === \"function\") return cfg.formatter;\n    return (v) => {\n      if (!Number.isFinite(v)) return String(v);\n      const abs = Math.abs(v);\n      if (abs >= 1e3) return v.toFixed(0);\n      if (abs >= 10) return v.toFixed(1);\n      return v.toFixed(2);\n    };\n  }\n  /**\n   * True when the user has opted into the gradient legend variant.\n   * @param {any} w\n   */\n  static isEnabled(w) {\n    var _a, _b, _c, _d;\n    const cfg = (_d = (_c = (_b = (_a = w == null ? void 0 : w.config) == null ? void 0 : _a.plotOptions) == null ? void 0 : _b.heatmap) == null ? void 0 : _c.colorScale) == null ? void 0 : _d.gradientLegend;\n    return !!(cfg && cfg.enabled);\n  }\n  /**\n   * Build the gradient legend DOM into `elLegendWrap`.\n   * Caller is responsible for clearing the wrap first.\n   */\n  draw() {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    if (!elLegendWrap) return;\n    const cfg = w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    const position = w.config.legend.position;\n    const isVertical = position === \"left\" || position === \"right\";\n    const arrowSize = (_b = (_a = cfg.arrow) == null ? void 0 : _a.size) != null ? _b : 8;\n    const arrowGutter = arrowSize + 4;\n    const labelPadAlongStrip = cfg.showLabels ? 28 : 4;\n    const labelPadAcrossStrip = cfg.showLabels ? 20 : 4;\n    const minLabelWidth = cfg.showLabels ? 44 : 0;\n    const stripLength = this._resolveStripLength(isVertical ? cfg.height : cfg.width, isVertical);\n    const stripThickness = cfg.thickness;\n    const svgWidth = isVertical ? Math.max(stripThickness + arrowGutter + 4, minLabelWidth) : stripLength + labelPadAlongStrip * 2;\n    const svgHeight = isVertical ? stripLength + labelPadAcrossStrip * 2 : stripThickness + arrowGutter + 4;\n    const verticalGroupWidth = stripThickness + arrowGutter;\n    const verticalGroupLeftPad = (svgWidth - verticalGroupWidth) / 2;\n    const stripX = isVertical ? position === \"left\" ? verticalGroupLeftPad : verticalGroupLeftPad + arrowGutter : labelPadAlongStrip;\n    const stripY = isVertical ? labelPadAcrossStrip : position === \"top\" ? arrowGutter : 4;\n    const svg = BrowserAPIs.createElementNS(SVG_NS, \"svg\");\n    svg.setAttribute(\"class\", \"apexcharts-heatmap-gradient-legend\");\n    svg.setAttribute(\"width\", String(svgWidth));\n    svg.setAttribute(\"height\", String(svgHeight));\n    svg.setAttribute(\"overflow\", \"visible\");\n    const defs = BrowserAPIs.createElementNS(SVG_NS, \"defs\");\n    const gradId = `apexcharts-heatmap-gradient-${w.globals.cuid}`;\n    const linearGrad = BrowserAPIs.createElementNS(SVG_NS, \"linearGradient\");\n    linearGrad.setAttribute(\"id\", gradId);\n    if (isVertical) {\n      linearGrad.setAttribute(\"x1\", \"0\");\n      linearGrad.setAttribute(\"y1\", \"1\");\n      linearGrad.setAttribute(\"x2\", \"0\");\n      linearGrad.setAttribute(\"y2\", \"0\");\n    } else {\n      linearGrad.setAttribute(\"x1\", \"0\");\n      linearGrad.setAttribute(\"y1\", \"0\");\n      linearGrad.setAttribute(\"x2\", \"1\");\n      linearGrad.setAttribute(\"y2\", \"0\");\n    }\n    const { min, max, stops, bands } = this._computeStops();\n    this._min = min;\n    this._max = max;\n    stops.forEach((s) => {\n      const stopEl = BrowserAPIs.createElementNS(SVG_NS, \"stop\");\n      stopEl.setAttribute(\"offset\", `${(s.percent * 100).toFixed(2)}%`);\n      stopEl.setAttribute(\"stop-color\", s.color);\n      linearGrad.appendChild(stopEl);\n    });\n    defs.appendChild(linearGrad);\n    svg.appendChild(defs);\n    const rect = BrowserAPIs.createElementNS(SVG_NS, \"rect\");\n    rect.setAttribute(\"x\", String(stripX));\n    rect.setAttribute(\"y\", String(stripY));\n    rect.setAttribute(\"width\", String(isVertical ? stripThickness : stripLength));\n    rect.setAttribute(\"height\", String(isVertical ? stripLength : stripThickness));\n    rect.setAttribute(\"rx\", \"2\");\n    rect.setAttribute(\"fill\", `url(#${gradId})`);\n    svg.appendChild(rect);\n    if (cfg.showLabels) {\n      const labelColor = ((_c = cfg.labelStyle) == null ? void 0 : _c.colors) || (Array.isArray(w.config.legend.labels.colors) ? w.config.legend.labels.colors[0] : w.config.legend.labels.colors) || w.config.chart.foreColor;\n      const labelFontSize = ((_d = cfg.labelStyle) == null ? void 0 : _d.fontSize) || \"11px\";\n      const labelFontFamily = ((_e = cfg.labelStyle) == null ? void 0 : _e.fontFamily) || w.config.chart.fontFamily;\n      const fmt = this._getFormatter();\n      const makeLabel = (text, x, y, anchor) => {\n        const t = BrowserAPIs.createElementNS(SVG_NS, \"text\");\n        t.setAttribute(\"x\", String(x));\n        t.setAttribute(\"y\", String(y));\n        t.setAttribute(\"text-anchor\", anchor);\n        t.setAttribute(\"dominant-baseline\", \"middle\");\n        t.setAttribute(\"fill\", labelColor);\n        t.setAttribute(\"font-size\", labelFontSize);\n        if (labelFontFamily) t.setAttribute(\"font-family\", labelFontFamily);\n        t.textContent = String(text);\n        return t;\n      };\n      if (isVertical) {\n        const midX = stripX + stripThickness / 2;\n        svg.appendChild(makeLabel(fmt(min), midX, stripY + stripLength + 10, \"middle\"));\n        svg.appendChild(makeLabel(fmt(max), midX, stripY - 10, \"middle\"));\n      } else {\n        const midY = stripY + stripThickness / 2;\n        svg.appendChild(makeLabel(fmt(min), stripX - 6, midY, \"end\"));\n        svg.appendChild(makeLabel(fmt(max), stripX + stripLength + 6, midY, \"start\"));\n      }\n    }\n    const arrowColor = ((_f = cfg.arrow) == null ? void 0 : _f.color) || w.config.chart.foreColor;\n    const arrow = this._buildArrow(arrowSize, arrowColor, position);\n    svg.appendChild(arrow);\n    this.arrowEl = arrow;\n    this._bandHitEls = [];\n    if (w.config.legend.onItemHover.highlightDataSeries && bands.length > 0) {\n      bands.forEach((b) => {\n        const hit = BrowserAPIs.createElementNS(SVG_NS, \"rect\");\n        if (isVertical) {\n          const yTop = stripY + stripLength - b.p2 * stripLength;\n          const yBot = stripY + stripLength - b.p1 * stripLength;\n          hit.setAttribute(\"x\", String(stripX));\n          hit.setAttribute(\"y\", String(yTop));\n          hit.setAttribute(\"width\", String(stripThickness));\n          hit.setAttribute(\"height\", String(Math.max(0, yBot - yTop)));\n        } else {\n          hit.setAttribute(\"x\", String(stripX + b.p1 * stripLength));\n          hit.setAttribute(\"y\", String(stripY));\n          hit.setAttribute(\n            \"width\",\n            String(Math.max(0, (b.p2 - b.p1) * stripLength))\n          );\n          hit.setAttribute(\"height\", String(stripThickness));\n        }\n        hit.setAttribute(\"fill\", \"transparent\");\n        hit.setAttribute(\"class\", \"apexcharts-heatmap-gradient-band\");\n        hit.setAttribute(\"data:range-index\", String(b.index));\n        hit.style.cursor = \"pointer\";\n        svg.appendChild(hit);\n        this._bandHitEls.push(hit);\n      });\n    }\n    this._geom = {\n      isVertical,\n      position,\n      stripX,\n      stripY,\n      stripLength,\n      stripThickness,\n      arrowSize,\n      svgWidth,\n      svgHeight\n    };\n    if (cfg.showHoverValue) {\n      const tt = BrowserAPIs.createElement(\"div\");\n      tt.classList.add(\"apexcharts-heatmap-gradient-legend-value\");\n      tt.style.position = \"absolute\";\n      tt.style.fontSize = ((_g = cfg.labelStyle) == null ? void 0 : _g.fontSize) || \"11px\";\n      tt.style.fontFamily = ((_h = cfg.labelStyle) == null ? void 0 : _h.fontFamily) || w.config.chart.fontFamily || \"\";\n      tt.style.color = w.config.chart.foreColor;\n      tt.style.background = \"rgba(0,0,0,0.65)\";\n      tt.style.color = \"#fff\";\n      tt.style.padding = \"2px 6px\";\n      tt.style.borderRadius = \"3px\";\n      tt.style.pointerEvents = \"none\";\n      tt.style.whiteSpace = \"nowrap\";\n      tt.style.opacity = \"0\";\n      tt.style.transition = \"opacity 120ms ease\";\n      this.hoverValueEl = tt;\n    }\n    elLegendWrap.classList.add(\"apexcharts-heatmap-gradient-legend-wrap\");\n    elLegendWrap.classList.add(\n      \"apx-legend-position-\" + position\n    );\n    elLegendWrap.appendChild(svg);\n    if (this.hoverValueEl) elLegendWrap.appendChild(this.hoverValueEl);\n    this.svgEl = svg;\n    this._applyWrapAlignment(elLegendWrap, position, isVertical, svgWidth, svgHeight);\n    this._attachHoverListeners();\n    this._attachBandHoverListeners();\n  }\n  /**\n   * Resolve a configured length (number = px, string ending in '%' =\n   * percentage of the chart's SVG width/height) to a pixel length.\n   * @param {number|string} value\n   * @param {boolean} isVertical\n   * @returns {number}\n   */\n  _resolveStripLength(value, isVertical) {\n    const w = this.w;\n    const basis = isVertical ? w.globals.svgHeight || w.config.chart.height || 300 : w.globals.svgWidth || w.config.chart.width || 600;\n    if (typeof value === \"string\") {\n      const trimmed = value.trim();\n      if (trimmed.endsWith(\"%\")) {\n        const pct = parseFloat(trimmed) || 0;\n        return Math.max(20, basis * pct / 100);\n      }\n      const n = parseFloat(trimmed);\n      return Number.isFinite(n) ? n : 200;\n    }\n    if (typeof value === \"number\" && Number.isFinite(value)) return value;\n    return 200;\n  }\n  /**\n   * Position the legend wrap and align the gradient strip within it. The\n   * wrap spans the chart's long axis (full width for top/bottom; full\n   * height for left/right) and uses flexbox to honor the `align` config.\n   * Bypasses the standard `setLegendWrapXY` which sizes the wrap to its\n   * content.\n   * @param {HTMLElement} elLegendWrap\n   * @param {'top'|'right'|'bottom'|'left'} position\n   * @param {boolean} isVertical\n   * @param {number} svgWidth\n   * @param {number} svgHeight\n   */\n  _applyWrapAlignment(elLegendWrap, position, isVertical, svgWidth, svgHeight) {\n    const w = this.w;\n    const cfg = w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    const align = cfg.align || \"center\";\n    const edgePad = 12;\n    const chartWidth = w.globals.svgWidth || w.config.chart.width || 600;\n    const chartHeight = w.globals.svgHeight || w.config.chart.height || 300;\n    const userOffsetX = w.config.legend.offsetX || 0;\n    const userOffsetY = w.config.legend.offsetY || 0;\n    elLegendWrap.style.position = \"absolute\";\n    elLegendWrap.style.display = \"block\";\n    elLegendWrap.style.overflow = \"visible\";\n    elLegendWrap.style.padding = \"0\";\n    elLegendWrap.style.width = svgWidth + \"px\";\n    elLegendWrap.style.height = svgHeight + \"px\";\n    elLegendWrap.style.right = \"auto\";\n    elLegendWrap.style.bottom = \"auto\";\n    if (isVertical) {\n      const availableHeight = chartHeight - svgHeight - edgePad * 2;\n      let y;\n      if (align === \"start\") y = edgePad;\n      else if (align === \"end\") y = edgePad + Math.max(0, availableHeight);\n      else y = edgePad + Math.max(0, availableHeight) / 2;\n      elLegendWrap.style.top = y + userOffsetY + \"px\";\n      if (position === \"left\") {\n        elLegendWrap.style.left = edgePad + userOffsetX + \"px\";\n      } else {\n        elLegendWrap.style.left = chartWidth - svgWidth - edgePad + userOffsetX + \"px\";\n      }\n    } else {\n      const availableWidth = chartWidth - svgWidth - edgePad * 2;\n      let x;\n      if (align === \"start\") x = edgePad;\n      else if (align === \"end\") x = edgePad + Math.max(0, availableWidth);\n      else x = edgePad + Math.max(0, availableWidth) / 2;\n      elLegendWrap.style.left = x + userOffsetX + \"px\";\n      if (position === \"top\") {\n        elLegendWrap.style.top = edgePad + userOffsetY + \"px\";\n      } else {\n        elLegendWrap.style.top = chartHeight - svgHeight - edgePad + userOffsetY + \"px\";\n      }\n    }\n  }\n  /**\n   * Re-position the strip once the final layout is known.\n   *\n   * `_applyWrapAlignment` (called during `draw()`, before `plotCoords()`) can\n   * only pin to the chart's outer edge. This runs after layout — when\n   * `translateX/Y`, `gridWidth/Height` and `xAxisHeight` are populated — and:\n   *   - centers the strip within its reserved band on the perpendicular axis\n   *     (between the title and the plot for `top`; the x-axis and the chart\n   *     bottom for `bottom`; the chart edge and the plot for `left`/`right`),\n   *     so the slack is split evenly instead of dumped on one side, and\n   *   - aligns it along the plot's own extent (so `align: 'center'` centers\n   *     over the heatmap, not the whole canvas).\n   * Honors `legend.offsetX/offsetY` for user nudging. Safe to call repeatedly.\n   */\n  repositionToPlot() {\n    var _a, _b;\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const g = w.globals;\n    const wrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    if (!wrap || !this._geom) return;\n    if (!Number.isFinite(g.gridWidth) || !Number.isFinite(g.gridHeight)) return;\n    const { isVertical, position, svgWidth, svgHeight, stripX, stripY, stripThickness } = this._geom;\n    const align = w.config.plotOptions.heatmap.colorScale.gradientLegend.align || \"center\";\n    const ox = w.config.legend.offsetX || 0;\n    const oy = w.config.legend.offsetY || 0;\n    const dimHelpers = (_b = (_a = this.ctx) == null ? void 0 : _a.dimensions) == null ? void 0 : _b.dimHelpers;\n    const titleArea = dimHelpers ? dimHelpers.getTitleSubtitleCoords(\"title\").height + dimHelpers.getTitleSubtitleCoords(\"subtitle\").height : 0;\n    const xAxisArea = w.layout.xAxisHeight || 0;\n    const alongOffset = (extent, size) => {\n      const avail = Math.max(0, extent - size);\n      if (align === \"start\") return 0;\n      if (align === \"end\") return avail;\n      return avail / 2;\n    };\n    if (isVertical) {\n      wrap.style.top = g.translateY + alongOffset(g.gridHeight, svgHeight) + oy + \"px\";\n      const bandStart = position === \"left\" ? 0 : g.translateX + g.gridWidth;\n      const bandEnd = position === \"left\" ? g.translateX : g.svgWidth;\n      const stripCenter = (bandStart + bandEnd) / 2;\n      wrap.style.left = stripCenter - stripX - stripThickness / 2 + ox + \"px\";\n    } else {\n      wrap.style.left = g.translateX + alongOffset(g.gridWidth, svgWidth) + ox + \"px\";\n      const bandStart = position === \"top\" ? titleArea : g.translateY + g.gridHeight + xAxisArea;\n      const bandEnd = position === \"top\" ? g.translateY : g.svgHeight;\n      const stripCenter = (bandStart + bandEnd) / 2;\n      wrap.style.top = stripCenter - stripY - stripThickness / 2 + oy + \"px\";\n    }\n    BrowserAPIs.requestAnimationFrame(() => this._enforceMinPlotGap());\n  }\n  /**\n   * Guarantee a minimum gap between the strip's chart-facing edge and the plot.\n   * Measured in viewport space (immune to the wrap↔SVG coordinate offset) and\n   * applied as a *relative* shift to the wrap's current position, so it only\n   * nudges a strip that ended up too close — placements with ample room are\n   * left exactly where centering put them. Runs post-paint (see caller).\n   */\n  _enforceMinPlotGap() {\n    const w = this.w;\n    const wrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const strip = this.svgEl && this.svgEl.querySelector(\"rect\");\n    const grid = w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!wrap || !strip || !grid || !this._geom) return;\n    const s = strip.getBoundingClientRect();\n    const gr = grid.getBoundingClientRect();\n    if (!s.width || !s.height || !gr.width || !gr.height) return;\n    const MIN_GAP = 16;\n    const { isVertical, position } = this._geom;\n    if (isVertical) {\n      const gap = position === \"left\" ? gr.left - s.right : s.left - gr.right;\n      if (gap < MIN_GAP) {\n        const curLeft = parseFloat(wrap.style.left) || 0;\n        const shift = MIN_GAP - gap;\n        wrap.style.left = curLeft + (position === \"left\" ? -shift : shift) + \"px\";\n      }\n    } else {\n      const gap = position === \"top\" ? gr.top - s.bottom : s.top - gr.bottom;\n      if (gap < MIN_GAP) {\n        const curTop = parseFloat(wrap.style.top) || 0;\n        const shift = MIN_GAP - gap;\n        wrap.style.top = curTop + (position === \"top\" ? -shift : shift) + \"px\";\n      }\n    }\n  }\n  /**\n   * Tear down listeners (called before re-render).\n   */\n  destroy() {\n    var _a, _b, _c, _d, _e, _f, _g;\n    for (let i = 0; i < this._bandHitEls.length; i++) {\n      const el = this._bandHitEls[i];\n      (_a = el.removeEventListener) == null ? void 0 : _a.call(el, \"mousemove\", this._onBandEnter);\n      (_b = el.removeEventListener) == null ? void 0 : _b.call(el, \"mouseout\", this._onBandLeave);\n    }\n    this._bandHitEls = [];\n    this._activeBandIndex = -1;\n    if (!((_c = this.ctx) == null ? void 0 : _c.events)) return;\n    try {\n      (_e = (_d = this.ctx.events).removeEventListener) == null ? void 0 : _e.call(\n        _d,\n        \"dataPointMouseEnter\",\n        this._onCellEnter\n      );\n      (_g = (_f = this.ctx.events).removeEventListener) == null ? void 0 : _g.call(\n        _f,\n        \"dataPointMouseLeave\",\n        this._onCellLeave\n      );\n    } catch (_) {\n    }\n  }\n  /** Wire mousemove/mouseout on each per-band hit-region (ranges mode). */\n  _attachBandHoverListeners() {\n    if (!Environment.isBrowser()) return;\n    for (let i = 0; i < this._bandHitEls.length; i++) {\n      const el = this._bandHitEls[i];\n      el.addEventListener(\"mousemove\", this._onBandEnter);\n      el.addEventListener(\"mouseout\", this._onBandLeave);\n    }\n  }\n  /**\n   * Hovering a gradient band highlights its cells and dims the rest. Guarded\n   * so the repeated mousemove stream only re-applies on an actual band change.\n   * @param {Event} e\n   */\n  _onBandEnter(e) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.currentTarget\n    );\n    const idx = parseInt((_a = target.getAttribute(\"data:range-index\")) != null ? _a : \"-1\", 10);\n    if (idx < 0 || idx === this._activeBandIndex) return;\n    this._activeBandIndex = idx;\n    (_d = (_c = (_b = this.ctx) == null ? void 0 : _b.events) == null ? void 0 : _c.fireEvent) == null ? void 0 : _d.call(_c, \"legendHover\", [this.ctx, idx, w]);\n    new Series(w).highlightRangeInSeries(idx, \"highlight\");\n  }\n  /** Leaving a band clears the highlight. */\n  _onBandLeave() {\n    if (this._activeBandIndex < 0) return;\n    const idx = this._activeBandIndex;\n    this._activeBandIndex = -1;\n    new Series(this.w).highlightRangeInSeries(idx, \"reset\");\n  }\n  _attachHoverListeners() {\n    var _a, _b;\n    if (!Environment.isBrowser()) return;\n    if (!((_b = (_a = this.ctx) == null ? void 0 : _a.events) == null ? void 0 : _b.addEventListener)) return;\n    this.ctx.events.addEventListener(\n      \"dataPointMouseEnter\",\n      this._onCellEnter\n    );\n    this.ctx.events.addEventListener(\n      \"dataPointMouseLeave\",\n      this._onCellLeave\n    );\n  }\n  /**\n   * dataPointMouseEnter fires as `(e, ctx, { seriesIndex, dataPointIndex, w })`.\n   * Graphics._fireEvent forwards listener args in the same shape.\n   * @param {...any} args\n   */\n  _onCellEnter(...args) {\n    var _a, _b;\n    const w = this.w;\n    if (!this.arrowEl) return;\n    const opts = args[args.length - 1];\n    if (!opts || typeof opts !== \"object\") return;\n    const i = opts.seriesIndex;\n    const j = opts.dataPointIndex;\n    if (typeof i !== \"number\" || typeof j !== \"number\") return;\n    if (w.config.chart.type !== \"heatmap\") return;\n    const row = (_b = (_a = w.seriesData) == null ? void 0 : _a.series) == null ? void 0 : _b[i];\n    const val = row == null ? void 0 : row[j];\n    if (val == null || Number.isNaN(val)) return;\n    this._positionArrow(val);\n  }\n  _onCellLeave() {\n    if (!this.arrowEl) return;\n    this.arrowEl.setAttribute(\"opacity\", \"0\");\n    if (this.hoverValueEl) {\n      this.hoverValueEl.style.opacity = \"0\";\n    }\n  }\n  /**\n   * Move the arrow to the position corresponding to `val` along the strip.\n   * @param {number} val\n   */\n  _positionArrow(val) {\n    if (!this.arrowEl || !this._geom) return;\n    const { isVertical, position, stripX, stripY, stripLength, stripThickness, arrowSize } = this._geom;\n    const min = this._min;\n    const max = this._max;\n    const span = max - min;\n    let pct;\n    if (span === 0) {\n      pct = 0.5;\n    } else {\n      pct = (val - min) / span;\n    }\n    if (pct < 0) pct = 0;\n    if (pct > 1) pct = 1;\n    if (isVertical) {\n      const yCenter = stripY + stripLength - pct * stripLength;\n      let tipX, baseX;\n      if (position === \"left\") {\n        tipX = stripX + stripThickness;\n        baseX = tipX + arrowSize;\n      } else {\n        tipX = stripX;\n        baseX = tipX - arrowSize;\n      }\n      const points = [\n        `${tipX},${yCenter}`,\n        `${baseX},${yCenter - arrowSize / 2}`,\n        `${baseX},${yCenter + arrowSize / 2}`\n      ].join(\" \");\n      this.arrowEl.setAttribute(\"points\", points);\n    } else {\n      const xCenter = stripX + pct * stripLength;\n      let tipY, baseY;\n      if (position === \"top\") {\n        tipY = stripY + stripThickness;\n        baseY = tipY + arrowSize;\n      } else {\n        tipY = stripY;\n        baseY = tipY - arrowSize;\n      }\n      const points = [\n        `${xCenter},${tipY}`,\n        `${xCenter - arrowSize / 2},${baseY}`,\n        `${xCenter + arrowSize / 2},${baseY}`\n      ].join(\" \");\n      this.arrowEl.setAttribute(\"points\", points);\n    }\n    this.arrowEl.setAttribute(\"opacity\", \"1\");\n    if (this.hoverValueEl) {\n      const fmt = this._getFormatter();\n      this.hoverValueEl.textContent = fmt(val);\n      if (isVertical) {\n        const yCenter = stripY + stripLength - pct * stripLength;\n        if (position === \"left\") {\n          this.hoverValueEl.style.left = `${stripX + stripThickness + arrowSize + 8}px`;\n        } else {\n          this.hoverValueEl.style.left = `${stripX - arrowSize - 8}px`;\n          this.hoverValueEl.style.transform = \"translateX(-100%)\";\n        }\n        this.hoverValueEl.style.top = `${yCenter - 9}px`;\n      } else {\n        const xCenter = stripX + pct * stripLength;\n        this.hoverValueEl.style.left = `${xCenter}px`;\n        this.hoverValueEl.style.transform = \"translateX(-50%)\";\n        if (position === \"top\") {\n          this.hoverValueEl.style.top = `${stripY + stripThickness + arrowSize + 8}px`;\n        } else {\n          this.hoverValueEl.style.top = `${stripY - arrowSize - 18}px`;\n        }\n      }\n      this.hoverValueEl.style.opacity = \"1\";\n    }\n  }\n  /**\n   * @param {number} size\n   * @param {string} color\n   * @param {'top'|'right'|'bottom'|'left'} _position\n   */\n  _buildArrow(size, color, _position) {\n    const polygon = BrowserAPIs.createElementNS(SVG_NS, \"polygon\");\n    polygon.setAttribute(\"fill\", color);\n    polygon.setAttribute(\"opacity\", \"0\");\n    polygon.setAttribute(\"class\", \"apexcharts-heatmap-gradient-arrow\");\n    polygon.setAttribute(\"points\", \"0,0 0,0 0,0\");\n    polygon.setAttribute(\"pointer-events\", \"none\");\n    return polygon;\n  }\n  /**\n   * Build gradient stops + return effective min/max.\n   * - If `colorScale.ranges` is set, stops are placed at each range boundary\n   *   so the gradient reflects the user's discrete palette.\n   * - Otherwise, samples N stops from the same shadeColor function the cells\n   *   use, so the strip visually matches the heatmap.\n   * @returns {{ min: number, max: number, stops: Array<{percent:number,color:string}>, bands: Array<{index:number,p1:number,p2:number}> }}\n   */\n  _computeStops() {\n    var _a, _b;\n    const w = this.w;\n    const cs = w.config.plotOptions.heatmap.colorScale;\n    const cfg = cs.gradientLegend;\n    let dataMin = Infinity;\n    let dataMax = -Infinity;\n    const rows = ((_a = w.seriesData) == null ? void 0 : _a.series) || [];\n    for (let i = 0; i < rows.length; i++) {\n      const row = rows[i];\n      if (!row) continue;\n      for (let j = 0; j < row.length; j++) {\n        const v = row[j];\n        if (v == null || Number.isNaN(v)) continue;\n        if (v < dataMin) dataMin = v;\n        if (v > dataMax) dataMax = v;\n      }\n    }\n    if (!Number.isFinite(dataMin)) dataMin = 0;\n    if (!Number.isFinite(dataMax)) dataMax = 0;\n    let min = dataMin;\n    let max = dataMax;\n    if (typeof cs.min !== \"undefined\") {\n      min = cs.min < dataMin ? cs.min : dataMin;\n    }\n    if (typeof cs.max !== \"undefined\") {\n      max = cs.max > dataMax ? cs.max : dataMax;\n    }\n    const stops = [];\n    const bands = [];\n    if (cs.ranges && cs.ranges.length > 0) {\n      const ranges = cs.ranges.map((r, originalIndex) => __spreadProps(__spreadValues({}, r), {\n        _originalIndex: originalIndex\n      })).sort((a, b) => a.from - b.from);\n      const lo = ranges[0].from;\n      const hi = ranges[ranges.length - 1].to;\n      min = lo;\n      max = hi;\n      const span = hi - lo || 1;\n      ranges.forEach((r) => {\n        const p1 = (r.from - lo) / span;\n        const p2 = (r.to - lo) / span;\n        stops.push({ percent: (p1 + p2) / 2, color: r.color });\n        bands.push({ index: r._originalIndex, p1, p2 });\n      });\n    } else {\n      const baseColor = w.globals.colors[0] || \"#008FFB\";\n      const utils = new Utils$1();\n      const shadeIntensity = (_b = w.config.plotOptions.heatmap.shadeIntensity) != null ? _b : 0.5;\n      const hasNegs = (\n        /** @type {any} */\n        w.globals.hasNegs\n      );\n      const n = Math.max(2, cfg.stops || 16);\n      for (let s = 0; s < n; s++) {\n        const t = s / (n - 1);\n        const v = min + t * (max - min);\n        const total = Math.abs(max) + Math.abs(min);\n        const percent_v = total === 0 ? 0 : 100 * v / total;\n        let colorShadePercent;\n        if (hasNegs) {\n          if (w.config.plotOptions.heatmap.reverseNegativeShade) {\n            colorShadePercent = percent_v < 0 ? percent_v / 100 * (shadeIntensity * 1.25) : (1 - percent_v / 100) * (shadeIntensity * 1.25);\n          } else {\n            colorShadePercent = percent_v <= 0 ? 1 - (1 + percent_v / 100) * shadeIntensity : (1 - percent_v / 100) * shadeIntensity;\n          }\n        } else {\n          colorShadePercent = 1 - percent_v / 100;\n        }\n        if (colorShadePercent > 1) colorShadePercent = 1;\n        if (colorShadePercent < -1) colorShadePercent = -1;\n        const shaded = w.config.plotOptions.heatmap.enableShades ? utils.shadeColor(\n          w.config.theme.mode === \"dark\" ? colorShadePercent * -1 : colorShadePercent,\n          baseColor\n        ) : baseColor;\n        stops.push({ percent: t, color: shaded });\n      }\n    }\n    return { min, max, stops, bands };\n  }\n}\nclass Legend {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.updateSeries = (...a) => ctx.updateHelpers._updateSeries(...a);\n    this.onLegendClick = this.onLegendClick.bind(this);\n    this.onLegendHovered = this.onLegendHovered.bind(this);\n    this.isBarsDistributed = this.w.config.chart.type === \"bar\" && this.w.config.plotOptions.bar.distributed && this.w.config.series.length === 1;\n    this.legendHelpers = new Helpers$3(this);\n  }\n  init() {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    this.isBarsDistributed = cnf.chart.type === \"bar\" && cnf.plotOptions.bar.distributed && cnf.series.length === 1;\n    const showLegendAlways = cnf.legend.showForSingleSeries && this.w.seriesData.series.length === 1 || this.isBarsDistributed || // Heatmap legends are colorScale-driven (discrete ranges or the\n    // gradient strip), not series-driven, so they must render even for a\n    // single-row heatmap.\n    cnf.chart.type === \"heatmap\" || this.w.seriesData.series.length > 1;\n    this.legendHelpers.appendToForeignObject();\n    if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) {\n      const elLegendWrap = (\n        /** @type {HTMLElement} */\n        w.dom.elLegendWrap\n      );\n      while (elLegendWrap.firstChild) {\n        elLegendWrap.removeChild(elLegendWrap.firstChild);\n      }\n      if (this.heatmapGradientLegend) {\n        this.heatmapGradientLegend.destroy();\n        this.heatmapGradientLegend = null;\n      }\n      if (cnf.chart.type === \"heatmap\" && HeatmapGradientLegend.isEnabled(w)) {\n        this.heatmapGradientLegend = new HeatmapGradientLegend(w, this.ctx);\n        this.heatmapGradientLegend.draw();\n      } else {\n        this.drawLegends();\n        if (cnf.legend.position === \"bottom\" || cnf.legend.position === \"top\") {\n          this.legendAlignHorizontal();\n        } else if (cnf.legend.position === \"right\" || cnf.legend.position === \"left\") {\n          this.legendAlignVertical();\n        }\n      }\n    }\n  }\n  createLegendMarker({ i, fillcolor }) {\n    const w = this.w;\n    const elMarker = BrowserAPIs.createElement(\"span\");\n    elMarker.classList.add(\"apexcharts-legend-marker\");\n    const mShape = w.config.legend.markers.shape || w.config.markers.shape;\n    let shape = mShape;\n    if (Array.isArray(mShape)) {\n      shape = mShape[i];\n    }\n    const mSize = Array.isArray(w.config.legend.markers.size) ? parseFloat(w.config.legend.markers.size[i]) : parseFloat(w.config.legend.markers.size);\n    const mOffsetX = Array.isArray(w.config.legend.markers.offsetX) ? parseFloat(w.config.legend.markers.offsetX[i]) : parseFloat(w.config.legend.markers.offsetX);\n    const mOffsetY = Array.isArray(w.config.legend.markers.offsetY) ? parseFloat(w.config.legend.markers.offsetY[i]) : parseFloat(w.config.legend.markers.offsetY);\n    const mBorderWidth = Array.isArray(w.config.legend.markers.strokeWidth) ? parseFloat(w.config.legend.markers.strokeWidth[i]) : parseFloat(w.config.legend.markers.strokeWidth);\n    const mStyle = elMarker.style;\n    mStyle.height = (mSize + mBorderWidth) * 2 + \"px\";\n    mStyle.width = (mSize + mBorderWidth) * 2 + \"px\";\n    mStyle.left = mOffsetX + \"px\";\n    mStyle.top = mOffsetY + \"px\";\n    if (w.config.legend.markers.customHTML) {\n      mStyle.background = \"transparent\";\n      mStyle.color = fillcolor[i];\n      if (Array.isArray(w.config.legend.markers.customHTML)) {\n        if (w.config.legend.markers.customHTML[i]) {\n          elMarker.innerHTML = w.config.legend.markers.customHTML[i]();\n        }\n      } else {\n        elMarker.innerHTML = w.config.legend.markers.customHTML();\n      }\n    } else {\n      const markers = new Markers(this.ctx.w, this.ctx);\n      const markerConfig = markers.getMarkerConfig({\n        cssClass: `apexcharts-legend-marker apexcharts-marker apexcharts-marker-${shape}`,\n        seriesIndex: i,\n        strokeWidth: mBorderWidth,\n        size: mSize\n      });\n      const SVGLib = Environment.isBrowser() ? (\n        /** @type {any} */\n        window.SVG\n      ) : (\n        /** @type {any} */\n        global.SVG\n      );\n      const SVGMarker = SVGLib().addTo(elMarker).size(\"100%\", \"100%\");\n      const marker = new Graphics(this.w).drawMarker(0, 0, __spreadProps(__spreadValues({}, markerConfig), {\n        pointFillColor: Array.isArray(fillcolor) ? fillcolor[i] : markerConfig.pointFillColor,\n        shape\n      }));\n      const shapesEls = w.dom.Paper.find(\n        \".apexcharts-legend-marker.apexcharts-marker\"\n      );\n      shapesEls.forEach((shapeEl) => {\n        if (shapeEl.node.classList.contains(\"apexcharts-marker-triangle\")) {\n          shapeEl.node.style.transform = \"translate(50%, 45%)\";\n        } else {\n          shapeEl.node.style.transform = \"translate(50%, 50%)\";\n        }\n      });\n      SVGMarker.add(marker);\n    }\n    return elMarker;\n  }\n  drawLegends() {\n    var _a;\n    const me = this;\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const fontFamily = w.config.legend.fontFamily;\n    let legendNames = w.seriesData.seriesNames;\n    let fillcolor = w.config.legend.markers.fillColors ? w.config.legend.markers.fillColors.slice() : w.globals.colors.slice();\n    if (w.config.chart.type === \"heatmap\") {\n      const ranges = w.config.plotOptions.heatmap.colorScale.ranges;\n      legendNames = ranges.map((colorScale) => {\n        return colorScale.name ? colorScale.name : colorScale.from + \" - \" + colorScale.to;\n      });\n      fillcolor = ranges.map((color) => color.color);\n    } else if (this.isBarsDistributed) {\n      legendNames = w.labelData.labels.slice();\n    }\n    if (w.config.legend.customLegendItems.length) {\n      legendNames = w.config.legend.customLegendItems;\n    }\n    const legendFormatter = w.formatters.legendFormatter;\n    const isLegendInversed = w.config.legend.inverseOrder;\n    const legendGroups = [];\n    if (w.labelData.seriesGroups.length > 1 && w.config.legend.clusterGroupedSeries) {\n      w.labelData.seriesGroups.forEach((_, gi) => {\n        legendGroups[gi] = BrowserAPIs.createElement(\"div\");\n        legendGroups[gi].classList.add(\n          \"apexcharts-legend-group\",\n          `apexcharts-legend-group-${gi}`\n        );\n        if (w.config.legend.clusterGroupedSeriesOrientation === \"horizontal\") {\n          elLegendWrap.classList.add(\"apexcharts-legend-group-horizontal\");\n        } else {\n          legendGroups[gi].classList.add(\"apexcharts-legend-group-vertical\");\n        }\n      });\n    }\n    for (let i = isLegendInversed ? legendNames.length - 1 : 0; isLegendInversed ? i >= 0 : i <= legendNames.length - 1; isLegendInversed ? i-- : i++) {\n      const text = legendFormatter(legendNames[i], { seriesIndex: i, w });\n      let collapsedSeries = false;\n      let ancillaryCollapsedSeries = false;\n      if (w.globals.collapsedSeries.length > 0) {\n        for (let c = 0; c < w.globals.collapsedSeries.length; c++) {\n          if (w.globals.collapsedSeries[c].index === i) {\n            collapsedSeries = true;\n          }\n        }\n      }\n      if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) {\n        for (let c = 0; c < w.globals.ancillaryCollapsedSeriesIndices.length; c++) {\n          if (w.globals.ancillaryCollapsedSeriesIndices[c] === i) {\n            ancillaryCollapsedSeries = true;\n          }\n        }\n      }\n      const elMarker = this.createLegendMarker({ i, fillcolor });\n      Graphics.setAttrs(elMarker, {\n        rel: i + 1,\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      if (collapsedSeries || ancillaryCollapsedSeries) {\n        elMarker.classList.add(\"apexcharts-inactive-legend\");\n      }\n      const elLegend = BrowserAPIs.createElement(\"div\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n        elLegend.setAttribute(\"role\", \"button\");\n        elLegend.setAttribute(\"tabindex\", \"0\");\n        const seriesName = Array.isArray(text) ? text.join(\" \") : text;\n        const isCollapsed = collapsedSeries || ancillaryCollapsedSeries;\n        const statusText = isCollapsed ? \"hidden\" : \"visible\";\n        elLegend.setAttribute(\n          \"aria-label\",\n          `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n        );\n        elLegend.setAttribute(\"aria-pressed\", isCollapsed ? \"true\" : \"false\");\n      }\n      const elLegendText = BrowserAPIs.createElement(\"span\");\n      elLegendText.classList.add(\"apexcharts-legend-text\");\n      elLegendText.innerHTML = Array.isArray(text) ? text.join(\" \") : text;\n      let textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : Array.isArray(w.config.legend.labels.colors) ? (_a = w.config.legend.labels.colors) == null ? void 0 : _a[i] : w.config.legend.labels.colors;\n      if (!textColor) {\n        textColor = w.config.chart.foreColor;\n      }\n      elLegendText.style.color = textColor;\n      elLegendText.style.fontSize = w.config.legend.fontSize;\n      elLegendText.style.fontWeight = w.config.legend.fontWeight;\n      elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily;\n      Graphics.setAttrs(elLegendText, {\n        rel: i + 1,\n        i,\n        \"data:default-text\": encodeURIComponent(text),\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      elLegend.appendChild(elMarker);\n      elLegend.appendChild(elLegendText);\n      const coreUtils = new CoreUtils(this.w);\n      if (!w.config.legend.showForZeroSeries) {\n        const total = coreUtils.getSeriesTotalByIndex(i);\n        if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n          elLegend.classList.add(\"apexcharts-hidden-zero-series\");\n        }\n      }\n      if (!w.config.legend.showForNullSeries) {\n        if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n          elLegend.classList.add(\"apexcharts-hidden-null-series\");\n        }\n      }\n      if (legendGroups.length) {\n        w.labelData.seriesGroups.forEach((group, gi) => {\n          var _a2, _b;\n          if (group.includes(\n            /** @type {Record<string,any>} */\n            (_b = (_a2 = w.config.series[i]) == null ? void 0 : _a2.name) != null ? _b : \"\"\n          )) {\n            elLegendWrap.appendChild(legendGroups[gi]);\n            legendGroups[gi].appendChild(elLegend);\n          }\n        });\n      } else {\n        elLegendWrap.appendChild(elLegend);\n      }\n      elLegendWrap.classList.add(\n        `apexcharts-align-${w.config.legend.horizontalAlign}`\n      );\n      elLegendWrap.classList.add(\n        \"apx-legend-position-\" + w.config.legend.position\n      );\n      elLegend.classList.add(\"apexcharts-legend-series\");\n      elLegend.style.margin = `${w.config.legend.itemMargin.vertical}px ${w.config.legend.itemMargin.horizontal}px`;\n      elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + \"px\" : \"\";\n      elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + \"px\" : \"\";\n      Graphics.setAttrs(elLegend, {\n        rel: i + 1,\n        seriesName: Utils$1.escapeString(legendNames[i]),\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      if (collapsedSeries || ancillaryCollapsedSeries) {\n        elLegend.classList.add(\"apexcharts-inactive-legend\");\n      }\n      if (!w.config.legend.onItemClick.toggleDataSeries) {\n        elLegend.classList.add(\"apexcharts-no-click\");\n      }\n    }\n    w.dom.elWrap.addEventListener(\"click\", me.onLegendClick, true);\n    if (w.config.legend.onItemHover.highlightDataSeries && w.config.legend.customLegendItems.length === 0) {\n      w.dom.elWrap.addEventListener(\"mousemove\", me.onLegendHovered, true);\n      w.dom.elWrap.addEventListener(\"mouseout\", me.onLegendHovered, true);\n    }\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n      w.dom.elWrap.addEventListener(\n        \"keydown\",\n        me.onLegendKeyDown.bind(me),\n        true\n      );\n    }\n  }\n  /**\n   * @param {number} offsetX\n   * @param {number} offsetY\n   */\n  setLegendWrapXY(offsetX, offsetY) {\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const legendHeight = elLegendWrap.clientHeight;\n    let x = 0;\n    let y = 0;\n    if (w.config.legend.position === \"bottom\") {\n      y = w.globals.svgHeight - Math.min(legendHeight, w.globals.svgHeight / 2) - 5;\n    } else if (w.config.legend.position === \"top\") {\n      const dim = new Dimensions(this.w, this.ctx);\n      const titleH = dim.dimHelpers.getTitleSubtitleCoords(\"title\").height;\n      const subtitleH = dim.dimHelpers.getTitleSubtitleCoords(\"subtitle\").height;\n      y = (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0);\n    }\n    elLegendWrap.style.position = \"absolute\";\n    x = x + offsetX + w.config.legend.offsetX;\n    y = y + offsetY + w.config.legend.offsetY;\n    elLegendWrap.style.left = x + \"px\";\n    elLegendWrap.style.top = y + \"px\";\n    if (w.config.legend.position === \"right\") {\n      elLegendWrap.style.left = \"auto\";\n      elLegendWrap.style.right = 25 + w.config.legend.offsetX + \"px\";\n    }\n    const fixedHeigthWidth = (\n      /** @type {const} */\n      [\"width\", \"height\"]\n    );\n    fixedHeigthWidth.forEach((hw) => {\n      if (elLegendWrap && elLegendWrap.style[hw]) {\n        elLegendWrap.style[hw] = parseInt(String(w.config.legend[hw]), 10) + \"px\";\n      }\n    });\n  }\n  legendAlignHorizontal() {\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    elLegendWrap.style.right = \"0\";\n    const dimensions = new Dimensions(this.w, this.ctx);\n    const titleRect = dimensions.dimHelpers.getTitleSubtitleCoords(\"title\");\n    const subtitleRect = dimensions.dimHelpers.getTitleSubtitleCoords(\"subtitle\");\n    const offsetX = 20;\n    let offsetY = 0;\n    if (w.config.legend.position === \"top\") {\n      offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 10;\n    }\n    this.setLegendWrapXY(offsetX, offsetY);\n  }\n  legendAlignVertical() {\n    const w = this.w;\n    const lRect = this.legendHelpers.getLegendDimensions();\n    const offsetY = 20;\n    let offsetX = 0;\n    if (w.config.legend.position === \"left\") {\n      offsetX = 20;\n    }\n    if (w.config.legend.position === \"right\") {\n      offsetX = w.globals.svgWidth - lRect.clww - 10;\n    }\n    this.setLegendWrapXY(offsetX, offsetY);\n  }\n  /**\n   * @param {MouseEvent} e\n   */\n  onLegendHovered(e) {\n    var _a;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const hoverOverLegend = target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\");\n    if (w.config.chart.type !== \"heatmap\" && !this.isBarsDistributed) {\n      if (!target.classList.contains(\"apexcharts-inactive-legend\") && hoverOverLegend) {\n        const series = new Series(this.ctx.w);\n        series.toggleSeriesOnHover(e, target);\n      }\n    } else {\n      if (hoverOverLegend) {\n        const seriesCnt = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"0\", 10) - 1;\n        this.ctx.events.fireEvent(\"legendHover\", [this.ctx, seriesCnt, this.w]);\n        const series = new Series(this.ctx.w);\n        if (e.type === \"mousemove\") {\n          series.highlightRangeInSeries(seriesCnt, \"highlight\");\n        } else if (e.type === \"mouseout\") {\n          series.highlightRangeInSeries(seriesCnt, \"reset\");\n        }\n      }\n    }\n  }\n  /**\n   * @param {KeyboardEvent} e\n   */\n  onLegendKeyDown(e) {\n    const me = this;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const isLegendItem = target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\");\n    if (!isLegendItem) return;\n    if (e.key === \"Enter\" || e.key === \" \") {\n      e.preventDefault();\n      const rel = target.getAttribute(\"rel\");\n      me.onLegendClick(e);\n      if (rel !== null && w.config.legend.onItemClick.toggleDataSeries) {\n        requestAnimationFrame(() => {\n          const restored = w.dom.baseEl.querySelector(\n            `.apexcharts-legend-series[rel=\"${rel}\"]`\n          );\n          if (restored) restored.focus();\n        });\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   */\n  onLegendClick(e) {\n    var _a;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    if (w.config.legend.customLegendItems.length) return;\n    if (target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\")) {\n      const seriesCnt = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"0\", 10) - 1;\n      const isHidden = target.getAttribute(\"data:collapsed\") === \"true\";\n      const legendClick = this.w.config.chart.events.legendClick;\n      if (typeof legendClick === \"function\") {\n        legendClick(this.ctx, seriesCnt, this.w);\n      }\n      this.ctx.events.fireEvent(\"legendClick\", [this.ctx, seriesCnt, this.w]);\n      const markerClick = this.w.config.legend.markers.onClick;\n      if (typeof markerClick === \"function\" && target.classList.contains(\"apexcharts-legend-marker\")) {\n        markerClick(this.ctx, seriesCnt, this.w);\n        this.ctx.events.fireEvent(\"legendMarkerClick\", [\n          this.ctx,\n          seriesCnt,\n          this.w\n        ]);\n      }\n      const clickAllowed = w.config.chart.type !== \"treemap\" && w.config.chart.type !== \"heatmap\" && !this.isBarsDistributed;\n      if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) {\n        this.legendHelpers.toggleDataSeries(seriesCnt, isHidden);\n      }\n    }\n  }\n}\nApexCharts.registerFeatures({ legend: Legend });\nconst icoPan = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 9 2 12l3 3\"/>\\n    <path d=\"M9 5l3-3 3 3\"/>\\n    <path d=\"M15 19l-3 3-3-3\"/>\\n    <path d=\"M19 9l3 3-3 3\"/>\\n    <path d=\"M2 12h20\"/>\\n    <path d=\"M12 2v20\"/>\\n</svg>\\n';\nconst icoZoom = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <circle cx=\"11\" cy=\"11\" r=\"7\"/>\\n    <path d=\"m21 21-4.3-4.3M8 11h6M11 8v6\"/>\\n</svg>\\n';\nconst icoReset = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/>\\n    <path d=\"M3 3v5h5\"/>\\n</svg>\\n';\nconst icoZoomIn = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M12 5v14M5 12h14\"/>\\n</svg>\\n';\nconst icoZoomOut = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 12h14\"/>\\n</svg>\\n';\nconst icoSelect = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 3a2 2 0 0 0-2 2\"/>\\n    <path d=\"M19 3a2 2 0 0 1 2 2\"/>\\n    <path d=\"M21 19a2 2 0 0 1-2 2\"/>\\n    <path d=\"M5 21a2 2 0 0 1-2-2\"/>\\n    <path d=\"M9 3h1M14 3h1M9 21h1M14 21h1M3 9v1M3 14v1M21 9v1M21 14v1\"/>\\n</svg>\\n';\nconst icoMeasure = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.4 2.4 0 0 1 0-3.4l2.6-2.6a2.4 2.4 0 0 1 3.4 0Z\"/>\\n    <path d=\"m14.5 12.5 2-2\"/>\\n    <path d=\"m11.5 9.5 2-2\"/>\\n    <path d=\"m8.5 6.5 2-2\"/>\\n    <path d=\"m17.5 15.5 2-2\"/>\\n</svg>\\n';\nconst icoMenu = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M4 6h16M4 12h16M4 18h16\"/>\\n</svg>\\n';\nclass Toolbar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.ev = this.w.config.chart.events;\n    this.selectedClass = \"apexcharts-selected\";\n    this.localeValues = this.w.globals.locale.toolbar;\n    this.minX = w.globals.minX;\n    this.maxX = w.globals.maxX;\n    this.elZoom = null;\n    this.elZoomIn = null;\n    this.elZoomOut = null;\n    this.elPan = null;\n    this.elSelection = null;\n    this.elMeasure = null;\n    this.elZoomReset = null;\n    this.elMenuIcon = null;\n    this.elMenu = null;\n    this.elMenuItems = [];\n    this.t = null;\n  }\n  createToolbar() {\n    var _a, _b;\n    const w = this.w;\n    const createDiv = () => {\n      return BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n    };\n    const createBtn = () => {\n      const btn = (\n        /** @type {HTMLButtonElement} */\n        BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"button\")\n      );\n      btn.setAttribute(\"type\", \"button\");\n      return btn;\n    };\n    const elToolbarWrap = createDiv();\n    elToolbarWrap.setAttribute(\"class\", \"apexcharts-toolbar\");\n    elToolbarWrap.style.top = w.config.chart.toolbar.offsetY + \"px\";\n    elToolbarWrap.style.right = -w.config.chart.toolbar.offsetX + 3 + \"px\";\n    w.dom.elWrap.appendChild(elToolbarWrap);\n    this.elZoom = createBtn();\n    this.elZoomIn = createBtn();\n    this.elZoomOut = createBtn();\n    this.elPan = createBtn();\n    this.elSelection = createBtn();\n    this.elMeasure = createBtn();\n    this.elZoomReset = createBtn();\n    this.elMenuIcon = createBtn();\n    this.elMenu = createDiv();\n    this.elCustomIcons = [];\n    this.t = w.config.chart.toolbar.tools;\n    if (Array.isArray(this.t.customIcons)) {\n      for (let i = 0; i < this.t.customIcons.length; i++) {\n        this.elCustomIcons.push(createBtn());\n      }\n    }\n    const toolbarControls = [];\n    const appendZoomControl = (type, el, ico) => {\n      const tool = type.toLowerCase();\n      if (this.t[tool] && w.config.chart.zoom.enabled) {\n        toolbarControls.push({\n          el,\n          icon: typeof this.t[tool] === \"string\" ? this.t[tool] : ico,\n          title: (\n            /** @type {any} */\n            this.localeValues[type]\n          ),\n          class: `apexcharts-${tool}-icon`\n        });\n      }\n    };\n    appendZoomControl(\"zoomIn\", this.elZoomIn, icoZoomIn);\n    appendZoomControl(\"zoomOut\", this.elZoomOut, icoZoomOut);\n    const zoomSelectionCtrls = (z) => {\n      if (this.t[z] && w.config.chart[z].enabled) {\n        toolbarControls.push({\n          el: z === \"zoom\" ? this.elZoom : this.elSelection,\n          icon: typeof this.t[z] === \"string\" ? this.t[z] : z === \"zoom\" ? icoZoom : icoSelect,\n          title: (\n            /** @type {any} */\n            this.localeValues[z === \"zoom\" ? \"selectionZoom\" : \"selection\"]\n          ),\n          class: `apexcharts-${z}-icon`\n        });\n      }\n    };\n    zoomSelectionCtrls(\"zoom\");\n    zoomSelectionCtrls(\"selection\");\n    if (this.t.pan && w.config.chart.zoom.enabled) {\n      toolbarControls.push({\n        el: this.elPan,\n        icon: typeof this.t.pan === \"string\" ? this.t.pan : icoPan,\n        title: this.localeValues.pan,\n        class: \"apexcharts-pan-icon\"\n      });\n    }\n    if (this.t.measure && w.config.chart.measure && w.config.chart.measure.enabled) {\n      toolbarControls.push({\n        el: this.elMeasure,\n        icon: typeof this.t.measure === \"string\" ? this.t.measure : icoMeasure,\n        title: (\n          /** @type {any} */\n          this.localeValues.measure || \"Measure\"\n        ),\n        class: \"apexcharts-measure-icon\"\n      });\n    }\n    appendZoomControl(\"reset\", this.elZoomReset, icoReset);\n    if (this.t.download) {\n      toolbarControls.push({\n        el: this.elMenuIcon,\n        icon: typeof this.t.download === \"string\" ? this.t.download : icoMenu,\n        title: this.localeValues.menu,\n        class: \"apexcharts-menu-icon\"\n      });\n    }\n    for (let i = 0; i < this.elCustomIcons.length; i++) {\n      toolbarControls.push({\n        el: this.elCustomIcons[i],\n        icon: this.t.customIcons[i].icon,\n        title: this.t.customIcons[i].title,\n        index: this.t.customIcons[i].index,\n        class: \"apexcharts-toolbar-custom-icon \" + this.t.customIcons[i].class\n      });\n    }\n    toolbarControls.forEach((t, index) => {\n      if (t.index) {\n        Utils$1.moveIndexInArray(toolbarControls, index, t.index);\n      }\n    });\n    for (let i = 0; i < toolbarControls.length; i++) {\n      Graphics.setAttrs(toolbarControls[i].el, {\n        class: toolbarControls[i].class,\n        title: toolbarControls[i].title,\n        \"aria-label\": toolbarControls[i].title\n      });\n      toolbarControls[i].el.innerHTML = toolbarControls[i].icon;\n      elToolbarWrap.appendChild(toolbarControls[i].el);\n    }\n    if (this.elZoom.parentNode) {\n      this.elZoom.setAttribute(\"aria-pressed\", String(!!w.interact.zoomEnabled));\n    }\n    if (this.elSelection.parentNode) {\n      this.elSelection.setAttribute(\n        \"aria-pressed\",\n        String(!!w.interact.selectionEnabled)\n      );\n    }\n    if (this.elPan.parentNode) {\n      this.elPan.setAttribute(\"aria-pressed\", String(!!w.interact.panEnabled));\n    }\n    if (this.elMeasure.parentNode) {\n      this.elMeasure.setAttribute(\n        \"aria-pressed\",\n        String(!!w.interact.measureEnabled)\n      );\n    }\n    if (this.elMenuIcon.parentNode) {\n      this.elMenuIcon.setAttribute(\"aria-haspopup\", \"true\");\n      this.elMenuIcon.setAttribute(\"aria-expanded\", \"false\");\n    }\n    this._createHamburgerMenu(elToolbarWrap);\n    if (w.interact.zoomEnabled) {\n      this.elZoom.classList.add(this.selectedClass);\n    } else if (w.interact.panEnabled) {\n      this.elPan.classList.add(this.selectedClass);\n    } else if (w.interact.selectionEnabled) {\n      this.elSelection.classList.add(this.selectedClass);\n    } else if (w.interact.measureEnabled && this.elMeasure) {\n      this.elMeasure.classList.add(this.selectedClass);\n      (_b = (_a = this.ctx.measure) == null ? void 0 : _a.startMeasure) == null ? void 0 : _b.call(_a);\n    }\n    this.addToolbarEventListeners();\n  }\n  /**\n   * @param {Element} parent\n   */\n  _createHamburgerMenu(parent) {\n    this.elMenuItems = [];\n    parent.appendChild(\n      /** @type {Node} */\n      this.elMenu\n    );\n    Graphics.setAttrs(this.elMenu, {\n      class: \"apexcharts-menu\",\n      role: \"menu\"\n    });\n    const menuItems = [\n      {\n        name: \"exportSVG\",\n        title: this.localeValues.exportToSVG\n      },\n      {\n        name: \"exportPNG\",\n        title: this.localeValues.exportToPNG\n      },\n      {\n        name: \"exportCSV\",\n        title: this.localeValues.exportToCSV\n      }\n    ];\n    for (let i = 0; i < menuItems.length; i++) {\n      this.elMenuItems.push(\n        BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\")\n      );\n      this.elMenuItems[i].innerHTML = menuItems[i].title;\n      Graphics.setAttrs(this.elMenuItems[i], {\n        class: `apexcharts-menu-item ${menuItems[i].name}`,\n        title: menuItems[i].title,\n        role: \"menuitem\",\n        tabindex: \"-1\"\n      });\n      this.elMenu.appendChild(this.elMenuItems[i]);\n    }\n  }\n  addToolbarEventListeners() {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    (_a = this.elZoomReset) == null ? void 0 : _a.addEventListener(\"click\", this.handleZoomReset.bind(this));\n    (_b = this.elSelection) == null ? void 0 : _b.addEventListener(\n      \"click\",\n      this.toggleZoomSelection.bind(this, \"selection\")\n    );\n    (_c = this.elZoom) == null ? void 0 : _c.addEventListener(\n      \"click\",\n      this.toggleZoomSelection.bind(this, \"zoom\")\n    );\n    (_d = this.elZoomIn) == null ? void 0 : _d.addEventListener(\"click\", this.handleZoomIn.bind(this));\n    (_e = this.elZoomOut) == null ? void 0 : _e.addEventListener(\"click\", this.handleZoomOut.bind(this));\n    (_f = this.elPan) == null ? void 0 : _f.addEventListener(\"click\", this.togglePanning.bind(this));\n    (_g = this.elMeasure) == null ? void 0 : _g.addEventListener(\"click\", this.toggleMeasure.bind(this));\n    (_h = this.elMenuIcon) == null ? void 0 : _h.addEventListener(\"click\", this.toggleMenu.bind(this));\n    this.elMenuItems.forEach((m) => {\n      if (m.classList.contains(\"exportSVG\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"svg\"));\n      } else if (m.classList.contains(\"exportPNG\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"png\"));\n      } else if (m.classList.contains(\"exportCSV\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"csv\"));\n      }\n    });\n    for (let i = 0; i < this.t.customIcons.length; i++) {\n      this.elCustomIcons[i].addEventListener(\n        \"click\",\n        this.t.customIcons[i].click.bind(this, this.ctx, this.ctx.w)\n      );\n    }\n    const toolbarButtons = [\n      this.elZoomReset,\n      this.elSelection,\n      this.elZoom,\n      this.elZoomIn,\n      this.elZoomOut,\n      this.elPan,\n      this.elMeasure,\n      this.elMenuIcon,\n      ...this.elCustomIcons\n    ];\n    toolbarButtons.forEach((btn) => {\n      btn.addEventListener(\"keydown\", (e) => {\n        if (e.key === \"Enter\" || e.key === \" \") {\n          e.preventDefault();\n          const btnClass = btn.className;\n          btn.click();\n          requestAnimationFrame(() => {\n            const baseEl = this.w.dom.baseEl;\n            if (!baseEl) return;\n            const apexClass = btnClass.split(\" \").find((c) => c.startsWith(\"apexcharts-\"));\n            if (!apexClass) return;\n            const restored = baseEl.querySelector(`.${apexClass}`);\n            if (restored) restored.focus();\n          });\n        }\n      });\n    });\n    (_i = this.elMenuIcon) == null ? void 0 : _i.addEventListener(\n      \"keydown\",\n      (e) => {\n        var _a2;\n        if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n          e.preventDefault();\n          if (!((_a2 = this.elMenu) == null ? void 0 : _a2.classList.contains(\"apexcharts-menu-open\"))) {\n            this.toggleMenu();\n          }\n          window.setTimeout(() => {\n            const idx = e.key === \"ArrowDown\" ? 0 : this.elMenuItems.length - 1;\n            if (this.elMenuItems[idx])\n              this.elMenuItems[idx].focus();\n          }, 20);\n        }\n      }\n    );\n    this.elMenuItems.forEach((m, idx) => {\n      m.addEventListener(\"keydown\", (e) => {\n        var _a2;\n        if (e.key === \"ArrowDown\") {\n          e.preventDefault();\n          const next = this.elMenuItems[idx + 1] || this.elMenuItems[0];\n          next.focus();\n        } else if (e.key === \"ArrowUp\") {\n          e.preventDefault();\n          const prev = this.elMenuItems[idx - 1] || this.elMenuItems[this.elMenuItems.length - 1];\n          prev.focus();\n        } else if (e.key === \"Escape\" || e.key === \"Tab\") {\n          this._closeMenu();\n          (_a2 = this.elMenuIcon) == null ? void 0 : _a2.focus();\n          if (e.key === \"Tab\") ;\n          else {\n            e.preventDefault();\n          }\n        } else if (e.key === \"Enter\" || e.key === \" \") {\n          e.preventDefault();\n          m.click();\n        }\n      });\n    });\n  }\n  /**\n   * @param {string} type\n   */\n  toggleZoomSelection(type) {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      const tb = ch.ctx.toolbar;\n      const enabledType = type === \"selection\" ? \"selectionEnabled\" : \"zoomEnabled\";\n      const wasEnabled = !!ch.w.globals[enabledType];\n      tb.toggleOtherControls();\n      const el = type === \"selection\" ? tb.elSelection : tb.elZoom;\n      if (!wasEnabled) {\n        ch.w.globals[enabledType] = true;\n        el.classList.add(tb.selectedClass);\n      }\n      el.setAttribute(\"aria-pressed\", String(!!ch.w.globals[enabledType]));\n    });\n  }\n  /**\n   * Toggle the measure ruler tool. Mutually exclusive with zoom/pan/selection\n   * (toggleOtherControls deselects those and disarms any active measure), so a\n   * fresh enable arms the ruler via the Measure module's sticky mode.\n   */\n  toggleMeasure() {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const enabling = !w.interact.measureEnabled;\n    this.toggleOtherControls();\n    if (enabling) {\n      w.interact.measureEnabled = true;\n      (_a = this.elMeasure) == null ? void 0 : _a.classList.add(this.selectedClass);\n      (_c = (_b = this.ctx.measure) == null ? void 0 : _b.startMeasure) == null ? void 0 : _c.call(_b);\n    }\n    (_d = this.elMeasure) == null ? void 0 : _d.setAttribute(\n      \"aria-pressed\",\n      String(w.interact.measureEnabled)\n    );\n  }\n  getToolbarIconsReference() {\n    const w = this.w;\n    if (!this.elZoom) {\n      this.elZoom = w.dom.baseEl.querySelector(\".apexcharts-zoom-icon\");\n    }\n    if (!this.elPan) {\n      this.elPan = w.dom.baseEl.querySelector(\".apexcharts-pan-icon\");\n    }\n    if (!this.elSelection) {\n      this.elSelection = w.dom.baseEl.querySelector(\n        \".apexcharts-selection-icon\"\n      );\n    }\n    if (!this.elMeasure) {\n      this.elMeasure = w.dom.baseEl.querySelector(\".apexcharts-measure-icon\");\n    }\n  }\n  /**\n   * @param {string} type\n   */\n  enableZoomPanFromToolbar(type) {\n    this.toggleOtherControls();\n    type === \"pan\" ? this.w.interact.panEnabled = true : this.w.interact.zoomEnabled = true;\n    const el = type === \"pan\" ? this.elPan : this.elZoom;\n    const el2 = type === \"pan\" ? this.elZoom : this.elPan;\n    if (el) {\n      el.classList.add(this.selectedClass);\n    }\n    if (el2) {\n      el2.classList.remove(this.selectedClass);\n    }\n  }\n  togglePanning() {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      const tb = ch.ctx.toolbar;\n      const wasEnabled = !!ch.w.interact.panEnabled;\n      tb.toggleOtherControls();\n      if (!wasEnabled) {\n        ch.w.interact.panEnabled = true;\n        tb.elPan.classList.add(tb.selectedClass);\n      }\n      tb.elPan.setAttribute(\"aria-pressed\", String(!!ch.w.interact.panEnabled));\n    });\n  }\n  toggleOtherControls() {\n    var _a, _b, _c;\n    const w = this.w;\n    w.interact.panEnabled = false;\n    w.interact.zoomEnabled = false;\n    w.interact.selectionEnabled = false;\n    if (w.interact.measureEnabled) {\n      w.interact.measureEnabled = false;\n      (_b = (_a = this.ctx.measure) == null ? void 0 : _a.stopMeasure) == null ? void 0 : _b.call(_a);\n      (_c = this.elMeasure) == null ? void 0 : _c.setAttribute(\"aria-pressed\", \"false\");\n    }\n    this.getToolbarIconsReference();\n    const toggleEls = [this.elPan, this.elSelection, this.elZoom, this.elMeasure];\n    toggleEls.forEach((el) => {\n      if (el) {\n        el.classList.remove(this.selectedClass);\n      }\n    });\n  }\n  /**\n   * Read the current x-range from globals at click time.\n   * Toolbar instance is kept alive across updates (Phase 8 lazy\n   * instantiation), so cached this.minX/maxX go stale after a zoom.\n   * @returns {{minX: number, maxX: number}}\n   */\n  _currentXRange() {\n    const w = this.w;\n    if (w.axisFlags.isRangeBar) {\n      return { minX: w.globals.minY, maxX: w.globals.maxY };\n    }\n    return { minX: w.globals.minX, maxX: w.globals.maxX };\n  }\n  handleZoomIn() {\n    const w = this.w;\n    const { minX, maxX } = this._currentXRange();\n    this.minX = minX;\n    this.maxX = maxX;\n    const centerX = (minX + maxX) / 2;\n    const newMinX = (minX + centerX) / 2;\n    const newMaxX = (maxX + centerX) / 2;\n    const newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n    if (!w.interact.disableZoomIn) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  handleZoomOut() {\n    const w = this.w;\n    const { minX, maxX } = this._currentXRange();\n    this.minX = minX;\n    this.maxX = maxX;\n    if (w.config.xaxis.type === \"datetime\" && new Date(minX).getUTCFullYear() < 1e3) {\n      return;\n    }\n    const centerX = (minX + maxX) / 2;\n    const newMinX = minX - (centerX - minX);\n    const newMaxX = maxX - (centerX - maxX);\n    const newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n    if (!w.interact.disableZoomOut) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  /**\n   * @param {number} newMinX\n   * @param {number} newMaxX\n   */\n  _getNewMinXMaxX(newMinX, newMaxX) {\n    const shouldFloor = this.w.config.xaxis.convertedCatToNumeric;\n    return {\n      minX: shouldFloor ? Math.floor(newMinX) : newMinX,\n      maxX: shouldFloor ? Math.floor(newMaxX) : newMaxX\n    };\n  }\n  /**\n   * @param {number} newMinX\n   * @param {number} newMaxX\n   */\n  zoomUpdateOptions(newMinX, newMaxX) {\n    const w = this.w;\n    if (newMinX === void 0 && newMaxX === void 0) {\n      this.handleZoomReset();\n      return;\n    }\n    if (w.config.xaxis.convertedCatToNumeric) {\n      if (newMinX < 1) {\n        newMinX = 1;\n        newMaxX = w.globals.dataPoints;\n      }\n      if (newMaxX - newMinX < 2) {\n        return;\n      }\n    }\n    let xaxis = {\n      min: newMinX,\n      max: newMaxX\n    };\n    const beforeZoomRange = this.getBeforeZoomRange(\n      xaxis,\n      /** @type {any} */\n      void 0\n    );\n    if (beforeZoomRange) {\n      xaxis = beforeZoomRange.xaxis;\n    }\n    const options2 = {\n      xaxis\n    };\n    if (!w.globals.initialConfig) return;\n    const yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n    if (!w.config.chart.group) {\n      options2.yaxis = yaxis;\n    }\n    this.w.interact.zoomed = true;\n    this.ctx.updateHelpers._updateOptions(\n      options2,\n      false,\n      this.w.config.chart.animations.dynamicAnimation.enabled\n    );\n    this.zoomCallback(xaxis, yaxis);\n  }\n  /**\n   * @param {Record<string, any>} xaxis\n   * @param {Record<string, any>} yaxis\n   */\n  zoomCallback(xaxis, yaxis) {\n    if (typeof this.ev.zoomed === \"function\") {\n      this.ev.zoomed(this.ctx, { xaxis, yaxis });\n      this.ctx.events.fireEvent(\"zoomed\", { xaxis, yaxis });\n    }\n  }\n  /**\n   * @param {Record<string, any>} xaxis\n   * @param {Record<string, any>} yaxis\n   */\n  getBeforeZoomRange(xaxis, yaxis) {\n    let newRange = null;\n    if (typeof this.ev.beforeZoom === \"function\") {\n      newRange = this.ev.beforeZoom(this, { xaxis, yaxis });\n    }\n    return newRange;\n  }\n  toggleMenu() {\n    window.setTimeout(() => {\n      var _a, _b, _c;\n      if ((_a = this.elMenu) == null ? void 0 : _a.classList.contains(\"apexcharts-menu-open\")) {\n        this._closeMenu();\n      } else {\n        (_b = this.elMenu) == null ? void 0 : _b.classList.add(\"apexcharts-menu-open\");\n        (_c = this.elMenuIcon) == null ? void 0 : _c.setAttribute(\"aria-expanded\", \"true\");\n      }\n    }, 0);\n  }\n  _closeMenu() {\n    var _a, _b;\n    (_a = this.elMenu) == null ? void 0 : _a.classList.remove(\"apexcharts-menu-open\");\n    (_b = this.elMenuIcon) == null ? void 0 : _b.setAttribute(\"aria-expanded\", \"false\");\n  }\n  /**\n   * @param {string} type\n   */\n  handleDownload(type) {\n    const w = this.w;\n    const exprt = new Exports(this.w, this.ctx);\n    switch (type) {\n      case \"svg\":\n        exprt.exportToSVG();\n        break;\n      case \"png\":\n        exprt.exportToPng();\n        break;\n      case \"csv\":\n        exprt.exportToCSV({\n          series: w.config.series,\n          columnDelimiter: w.config.chart.toolbar.export.csv.columnDelimiter\n        });\n        break;\n    }\n  }\n  handleZoomReset() {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      const w = ch.w;\n      if (!w.interact.zoomed) return;\n      w.globals.lastXAxis.min = w.globals.initialConfig.xaxis.min;\n      w.globals.lastXAxis.max = w.globals.initialConfig.xaxis.max;\n      ch.updateHelpers.revertDefaultAxisMinMax();\n      if (typeof w.config.chart.events.beforeResetZoom === \"function\") {\n        const resetZoomRange = w.config.chart.events.beforeResetZoom(ch, w);\n        if (resetZoomRange) {\n          ch.updateHelpers.revertDefaultAxisMinMax(resetZoomRange);\n        }\n      }\n      if (typeof w.config.chart.events.zoomed === \"function\") {\n        ch.ctx.toolbar.zoomCallback({\n          min: w.config.xaxis.min,\n          max: w.config.xaxis.max\n        });\n      }\n      const series = ch.ctx.series.emptyCollapsedSeries(\n        Utils$1.clone(w.globals.initialSeries)\n      );\n      ch.updateHelpers._updateSeries(\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n      w.interact.zoomed = false;\n    });\n  }\n  destroy() {\n    this.elZoom = null;\n    this.elZoomIn = null;\n    this.elZoomOut = null;\n    this.elPan = null;\n    this.elSelection = null;\n    this.elMeasure = null;\n    this.elZoomReset = null;\n    this.elMenuIcon = null;\n  }\n}\nclass AxisMapping {\n  /**\n   * Pixels per data-unit on the x-axis. Derived from `minX..maxX` so it is the\n   * exact inverse used by both {@link dataXToPx} and {@link pxToDataX}.\n   * @param {import('../types/internal').ChartStateW} w\n   * @returns {number}\n   */\n  static xRatio(w) {\n    const gw = w.layout.gridWidth || 1;\n    return (w.globals.maxX - w.globals.minX) / gw;\n  }\n  /**\n   * Data-x -> pixels from the plot origin (usable as an SVG `x` attribute).\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} dataX\n   * @returns {number}\n   */\n  static dataXToPx(w, dataX) {\n    return (dataX - w.globals.minX) / AxisMapping.xRatio(w);\n  }\n  /**\n   * Pixels from the plot origin -> data-x. Feed it `screenX - svgLeft - translateX`.\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} px\n   * @returns {number}\n   */\n  static pxToDataX(w, px) {\n    return w.globals.minX + px * AxisMapping.xRatio(w);\n  }\n}\nconst WHEEL_ZOOM_PIXELS_PER_2X = 240;\nconst INERTIA_MIN_RELEASE_VELOCITY = 0.05;\nconst INERTIA_DEFAULT_FRICTION = 0.92;\nconst INERTIA_STOP_VELOCITY = 0.02;\nconst FRAME_MS_60FPS = 16.6667;\nconst PAN_NUDGE_DIVISOR = 15;\nclass ZoomPanSelection extends Toolbar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    super(w, ctx);\n    this.w = w;\n    this.ctx = ctx;\n    this.dragged = false;\n    this.graphics = new Graphics(this.w);\n    this.eventList = [\n      \"mousedown\",\n      \"mouseleave\",\n      \"mousemove\",\n      \"touchstart\",\n      \"touchmove\",\n      \"mouseup\",\n      \"touchend\"\n    ];\n    this.clientX = 0;\n    this.clientY = 0;\n    this.startX = 0;\n    this.endX = 0;\n    this.dragX = 0;\n    this.startY = 0;\n    this.endY = 0;\n    this.dragY = 0;\n    this.moveDirection = \"none\";\n  }\n  /** @param {{xyRatios: any}} opts */\n  init({ xyRatios }) {\n    const w = this.w;\n    const me = this;\n    this.xyRatios = xyRatios;\n    this.zoomRect = this.graphics.drawRect(0, 0, 0, 0);\n    this.selectionRect = this.graphics.drawRect(0, 0, 0, 0);\n    this.constraints = new Box(0, 0, w.layout.gridWidth, w.layout.gridHeight);\n    this.zoomRect.node.classList.add(\"apexcharts-zoom-rect\");\n    this.selectionRect.node.classList.add(\"apexcharts-selection-rect\");\n    w.dom.Paper.add(this.zoomRect);\n    w.dom.Paper.add(this.selectionRect);\n    if (w.config.chart.selection.type === \"x\") {\n      this.slDraggableRect = this.selectionRect.draggable({\n        minX: 0,\n        minY: 0,\n        maxX: w.layout.gridWidth,\n        maxY: w.layout.gridHeight\n      }).on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    } else if (w.config.chart.selection.type === \"y\") {\n      this.slDraggableRect = this.selectionRect.draggable({\n        minX: 0,\n        maxX: w.layout.gridWidth\n      }).on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    } else {\n      this.slDraggableRect = this.selectionRect.draggable().on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    }\n    this.preselectedSelection();\n    this.hoverArea = /** @type {Element} */\n    w.dom.baseEl.querySelector(`${w.globals.chartClass} .apexcharts-svg`);\n    if (!this.hoverArea) return;\n    this.hoverArea.classList.add(\"apexcharts-zoomable\");\n    this.eventList.forEach((event) => {\n      var _a;\n      (_a = this.hoverArea) == null ? void 0 : _a.addEventListener(\n        event,\n        me.svgMouseEvents.bind(me, xyRatios),\n        {\n          capture: false,\n          passive: true\n        }\n      );\n    });\n    if (w.config.chart.zoom.enabled && w.config.chart.zoom.allowMouseWheelZoom) {\n      this.hoverArea.addEventListener(\"wheel\", me.mouseWheelEvent.bind(me), {\n        capture: false,\n        passive: false\n      });\n    }\n    if (this._momentumEnabled()) {\n      [\"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\"].forEach(\n        (event) => {\n          var _a;\n          (_a = this.hoverArea) == null ? void 0 : _a.addEventListener(event, me.momentumTouch.bind(me), {\n            capture: false,\n            passive: false\n          });\n        }\n      );\n    }\n  }\n  // remove the event listeners which were previously added on hover area\n  destroy() {\n    if (this.slDraggableRect) {\n      this.slDraggableRect.draggable(false);\n      this.slDraggableRect.off();\n      this.selectionRect.off();\n    }\n    this.selectionRect = null;\n    this.zoomRect = null;\n  }\n  /**\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @param {any} e\n   */\n  svgMouseEvents(xyRatios, e) {\n    const w = this.w;\n    const toolbar = this.ctx.toolbar;\n    if (w.interact.momentum && w.interact.momentum.busy) return;\n    if (this._momentumEnabled() && e.touches && e.touches.length > 1) {\n      return;\n    }\n    const zoomtype = w.interact.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type;\n    const autoSelected = w.config.chart.toolbar.autoSelected;\n    if (autoSelected !== \"measure\") {\n      if (e.shiftKey) {\n        w.interact.shiftWasPressed = true;\n        toolbar.enableZoomPanFromToolbar(autoSelected === \"pan\" ? \"zoom\" : \"pan\");\n      } else {\n        if (w.interact.shiftWasPressed) {\n          toolbar.enableZoomPanFromToolbar(autoSelected);\n          w.interact.shiftWasPressed = false;\n        }\n      }\n    }\n    if (!e.target) return;\n    const tc = e.target.classList;\n    let pc;\n    if (e.target.parentNode && e.target.parentNode !== null) {\n      pc = e.target.parentNode.classList;\n    }\n    const falsePositives = tc.contains(\"apexcharts-legend-marker\") || tc.contains(\"apexcharts-legend-text\") || pc && pc.contains(\"apexcharts-toolbar\");\n    if (falsePositives) return;\n    this.clientX = e.type === \"touchmove\" || e.type === \"touchstart\" ? e.touches[0].clientX : e.type === \"touchend\" ? e.changedTouches[0].clientX : e.clientX;\n    this.clientY = e.type === \"touchmove\" || e.type === \"touchstart\" ? e.touches[0].clientY : e.type === \"touchend\" ? e.changedTouches[0].clientY : e.clientY;\n    if (e.type === \"mousedown\" && e.which === 1 || e.type === \"touchstart\") {\n      const gridRectDim = this._gridRect();\n      if (!gridRectDim) return;\n      this.startX = this._screenXToPlotPx(this.clientX);\n      this.startY = this.clientY - gridRectDim.top;\n      this.dragged = false;\n      this.w.interact.mousedown = true;\n    }\n    if (e.type === \"mousemove\" && e.which === 1 || e.type === \"touchmove\") {\n      this.dragged = true;\n      if (w.interact.panEnabled) {\n        w.interact.selection = null;\n        if (this.w.interact.mousedown) {\n          this.panDragging({\n            context: this,\n            zoomtype,\n            xyRatios: this.xyRatios\n          });\n        }\n      } else {\n        if (this.w.interact.mousedown && w.interact.zoomEnabled || this.w.interact.mousedown && w.interact.selectionEnabled) {\n          this.selection = this.selectionDrawing({\n            context: this,\n            zoomtype\n          });\n        }\n      }\n    }\n    if (e.type === \"mouseup\" || e.type === \"touchend\" || e.type === \"mouseleave\") {\n      this.handleMouseUp({ zoomtype });\n    }\n    this.makeSelectionRectDraggable();\n  }\n  /** @param {{ zoomtype?: any, isResized?: any }} opts */\n  handleMouseUp({ zoomtype, isResized }) {\n    const w = this.w;\n    const gridRectDim = this._gridRect();\n    if (gridRectDim && (this.w.interact.mousedown || isResized)) {\n      this.endX = this._screenXToPlotPx(this.clientX);\n      this.endY = this.clientY - gridRectDim.top;\n      this.dragX = Math.abs(this.endX - this.startX);\n      this.dragY = Math.abs(this.endY - this.startY);\n      if (w.interact.zoomEnabled || w.interact.selectionEnabled) {\n        this.selectionDrawn({\n          context: this,\n          zoomtype\n        });\n      }\n    }\n    if (w.interact.zoomEnabled) {\n      this.hideSelectionRect(this.selectionRect);\n    }\n    this.dragged = false;\n    this.w.interact.mousedown = false;\n  }\n  // ---------------------------------------------------------------------------\n  // Wheel zoom: continuous, cursor-anchored zoom on mouse wheel / trackpad.\n  //\n  // Each wheel event multiplies a pending zoom factor scaled to its deltaY (so\n  // a trackpad's stream of tiny deltas and a discrete wheel's ±100 notches both\n  // feel proportional), and the accumulated factor is applied at most once per\n  // animation frame through the same immediate, animation-free fast path the\n  // touch pinch uses (_applyXRange). Deliberately instant, trading-chart style:\n  // no per-step morph and no easing between steps (an animated variant was\n  // tried and rejected). The original implementation instead ran a fixed\n  // 0.5x/1.5x animated update at most once per 400ms and dropped every wheel\n  // event in between, which read as lag on continuous scrolling.\n  //\n  // Like Momentum (see the comment above momentumTouch), applying a frame\n  // triggers _updateOptions, which destroys and recreates this instance\n  // mid-gesture, so all wheel-gesture state lives on w.interact.wheel rather\n  // than on the instance.\n  // ---------------------------------------------------------------------------\n  /** Lazily-created, re-render-surviving wheel-gesture state. */\n  _wheel() {\n    const it = this.w.interact;\n    if (!it.wheel) {\n      it.wheel = {\n        factor: 1,\n        clientX: 0,\n        /** @type {number|null} */\n        rafId: null,\n        /** @type {any} */\n        endTimer: null\n      };\n    }\n    return it.wheel;\n  }\n  /**\n   * @param {any} e\n   */\n  mouseWheelEvent(e) {\n    e.preventDefault();\n    const st = this._wheel();\n    let dy = e.deltaY;\n    if (e.deltaMode === 1) dy *= 33;\n    else if (e.deltaMode === 2) dy *= 330;\n    st.factor *= Math.pow(2, dy / WHEEL_ZOOM_PIXELS_PER_2X);\n    st.clientX = e.clientX;\n    if (st.rafId == null) {\n      st.rafId = requestAnimationFrame(() => this._applyWheelZoom());\n    }\n    if (st.endTimer) clearTimeout(st.endTimer);\n    st.endTimer = setTimeout(() => this._endWheelZoom(), 150);\n  }\n  /**\n   * Apply the zoom factor accumulated since the last animation frame, keeping\n   * the data value under the cursor pinned (both zooming in and out).\n   */\n  _applyWheelZoom() {\n    const w = this.w;\n    const st = this._wheel();\n    st.rafId = null;\n    const scale = st.factor;\n    st.factor = 1;\n    if (scale === 1 || w.globals.isDestroyed) return;\n    const gridRectDim = this._gridRect();\n    if (!gridRectDim || !gridRectDim.width) return;\n    const { min, max } = this._currentXWindow();\n    const range = max - min;\n    const mouseX = Math.min(\n      Math.max((st.clientX - gridRectDim.left) / gridRectDim.width, 0),\n      1\n    );\n    let newRange = range * scale;\n    const bounds = this._clampBounds();\n    if (bounds) {\n      const minXDiff = w.globals.minXDiff > 0 && isFinite(w.globals.minXDiff) ? w.globals.minXDiff : 0;\n      const minRange = Math.max(minXDiff * 2, (bounds.max - bounds.min) * 1e-6);\n      if (newRange < minRange) newRange = minRange;\n      if (newRange > bounds.max - bounds.min) newRange = bounds.max - bounds.min;\n    }\n    const anchor = min + mouseX * range;\n    let newMinX = anchor - mouseX * newRange;\n    let newMaxX = newMinX + newRange;\n    const eps = range * 1e-9;\n    if (Math.abs(newMinX - min) < eps && Math.abs(newMaxX - max) < eps) return;\n    if (isNaN(newMinX) || isNaN(newMaxX)) return;\n    const beforeZoomRange = this.getBeforeZoomRange(\n      { min: newMinX, max: newMaxX },\n      /** @type {any} */\n      void 0\n    );\n    if (beforeZoomRange && beforeZoomRange.xaxis) {\n      newMinX = beforeZoomRange.xaxis.min;\n      newMaxX = beforeZoomRange.xaxis.max;\n    }\n    this._applyXRange(newMinX, newMaxX, true);\n  }\n  /** Fire the zoomed callback once the wheel gesture settles (mirrors _endPinch). */\n  _endWheelZoom() {\n    const w = this.w;\n    const st = this._wheel();\n    st.endTimer = null;\n    if (w.globals.isDestroyed || !w.interact.zoomed) return;\n    const { min, max } = this._currentXWindow();\n    const yaxis = w.globals.initialConfig ? Utils$1.clone(w.globals.initialConfig.yaxis) : [];\n    const toolbar = this.ctx.toolbar;\n    if (toolbar) toolbar.zoomCallback({ min, max }, yaxis);\n  }\n  makeSelectionRectDraggable() {\n    const w = this.w;\n    if (!this.selectionRect) return;\n    const rectDim = this.selectionRect.node.getBoundingClientRect();\n    if (rectDim.width > 0 && rectDim.height > 0) {\n      this.selectionRect.select(false).resize(false);\n      this.selectionRect.select({\n        createRot: () => {\n        },\n        updateRot: () => {\n        },\n        createHandle: (group, p, index, pointArr, handleName) => {\n          if (handleName === \"l\" || handleName === \"r\")\n            return group.circle(8).css({ \"stroke-width\": 1, stroke: \"#333\", fill: \"#fff\" });\n          return group.circle(0);\n        },\n        updateHandle: (group, p) => {\n          return group.center(p[0], p[1]);\n        }\n      }).resize().on(\"resize\", () => {\n        var _a;\n        if (w.interact.selectionEnabled) {\n          w.interact.selection = {\n            x: parseFloat(this.selectionRect.node.getAttribute(\"x\")),\n            y: parseFloat(this.selectionRect.node.getAttribute(\"y\")),\n            width: parseFloat(this.selectionRect.node.getAttribute(\"width\")),\n            height: parseFloat(this.selectionRect.node.getAttribute(\"height\"))\n          };\n          clearTimeout((_a = this.w.globals.selectionResizeTimer) != null ? _a : void 0);\n          this.w.globals.selectionResizeTimer = window.setTimeout(() => {\n            this._emitSelectionFromRect();\n          }, 30);\n        } else {\n          const zoomtype = w.interact.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type;\n          this.handleMouseUp({ zoomtype, isResized: true });\n        }\n      });\n    }\n  }\n  preselectedSelection() {\n    const w = this.w;\n    const xyRatios = this.xyRatios;\n    if (!w.interact.zoomEnabled) {\n      if (typeof w.interact.selection !== \"undefined\" && w.interact.selection !== null) {\n        this.drawSelectionRect(__spreadProps(__spreadValues({}, w.interact.selection), {\n          translateX: w.layout.translateX,\n          translateY: w.layout.translateY\n        }));\n      } else {\n        if (w.config.chart.selection.xaxis.min !== void 0 && w.config.chart.selection.xaxis.max !== void 0) {\n          let x = AxisMapping.dataXToPx(w, w.config.chart.selection.xaxis.min);\n          let width = AxisMapping.dataXToPx(w, w.config.chart.selection.xaxis.max) - x;\n          if (w.axisFlags.isRangeBar) {\n            x = (w.config.chart.selection.xaxis.min - w.globals.yAxisScale[0].niceMin) / xyRatios.invertedYRatio;\n            width = (w.config.chart.selection.xaxis.max - w.config.chart.selection.xaxis.min) / xyRatios.invertedYRatio;\n          }\n          const selectionRect = {\n            x,\n            y: 0,\n            width,\n            height: w.layout.gridHeight,\n            translateX: w.layout.translateX,\n            translateY: w.layout.translateY,\n            selectionEnabled: true\n          };\n          this.drawSelectionRect(selectionRect);\n          this.makeSelectionRectDraggable();\n          if (typeof w.config.chart.events.selection === \"function\") {\n            w.config.chart.events.selection(this.ctx, {\n              xaxis: {\n                min: w.config.chart.selection.xaxis.min,\n                max: w.config.chart.selection.xaxis.max\n              },\n              yaxis: {}\n            });\n          }\n        }\n      }\n    }\n  }\n  /** @param {{x: any, y: any, width: any, height: any, translateX: any, translateY: any}} opts */\n  drawSelectionRect({ x, y, width, height, translateX = 0, translateY = 0 }) {\n    const w = this.w;\n    const zoomRect = this.zoomRect;\n    const selectionRect = this.selectionRect;\n    if (this.dragged || w.interact.selection !== null) {\n      const scalingAttrs = {\n        transform: \"translate(\" + translateX + \", \" + translateY + \")\"\n      };\n      if (w.interact.zoomEnabled && this.dragged) {\n        if (width < 0) width = 1;\n        zoomRect.attr({\n          x,\n          y,\n          width,\n          height,\n          fill: w.config.chart.zoom.zoomedArea.fill.color,\n          \"fill-opacity\": w.config.chart.zoom.zoomedArea.fill.opacity,\n          stroke: w.config.chart.zoom.zoomedArea.stroke.color,\n          \"stroke-width\": w.config.chart.zoom.zoomedArea.stroke.width,\n          \"stroke-opacity\": w.config.chart.zoom.zoomedArea.stroke.opacity\n        });\n        Graphics.setAttrs(zoomRect.node, scalingAttrs);\n      }\n      if (w.interact.selectionEnabled) {\n        selectionRect.attr({\n          x,\n          y,\n          width: width > 0 ? width : 0,\n          height: height > 0 ? height : 0,\n          fill: w.config.chart.selection.fill.color,\n          \"fill-opacity\": w.config.chart.selection.fill.opacity,\n          stroke: w.config.chart.selection.stroke.color,\n          \"stroke-width\": w.config.chart.selection.stroke.width,\n          \"stroke-dasharray\": w.config.chart.selection.stroke.dashArray,\n          \"stroke-opacity\": w.config.chart.selection.stroke.opacity\n        });\n        Graphics.setAttrs(selectionRect.node, scalingAttrs);\n      }\n    }\n  }\n  /**\n   * @param {any} rect\n   */\n  hideSelectionRect(rect) {\n    if (rect) {\n      rect.attr({\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n      });\n    }\n  }\n  selectionDrawing({ context, zoomtype }) {\n    const w = this.w;\n    const me = context;\n    const gridRectDim = this._gridRect();\n    if (!gridRectDim) return;\n    const startX = me.startX - 1;\n    const startY = me.startY;\n    let inversedX = false;\n    let inversedY = false;\n    const left = this._screenXToPlotPx(me.clientX);\n    const top = me.clientY - gridRectDim.top;\n    let selectionWidth = left - startX;\n    let selectionHeight = top - startY;\n    let selectionRect = {\n      translateX: w.layout.translateX,\n      translateY: w.layout.translateY\n    };\n    if (Math.abs(selectionWidth + startX) > w.layout.gridWidth) {\n      selectionWidth = w.layout.gridWidth - startX;\n    } else if (left < 0) {\n      selectionWidth = startX;\n    }\n    if (startX > left) {\n      inversedX = true;\n      selectionWidth = Math.abs(selectionWidth);\n    }\n    if (startY > top) {\n      inversedY = true;\n      selectionHeight = Math.abs(selectionHeight);\n    }\n    if (zoomtype === \"x\") {\n      selectionRect = {\n        x: inversedX ? startX - selectionWidth : startX,\n        y: 0,\n        width: selectionWidth,\n        height: w.layout.gridHeight\n      };\n    } else if (zoomtype === \"y\") {\n      selectionRect = {\n        x: 0,\n        y: inversedY ? startY - selectionHeight : startY,\n        width: w.layout.gridWidth,\n        height: selectionHeight\n      };\n    } else {\n      selectionRect = {\n        x: inversedX ? startX - selectionWidth : startX,\n        y: inversedY ? startY - selectionHeight : startY,\n        width: selectionWidth,\n        height: selectionHeight\n      };\n    }\n    selectionRect = __spreadProps(__spreadValues({}, selectionRect), {\n      translateX: w.layout.translateX,\n      translateY: w.layout.translateY\n    });\n    me.drawSelectionRect(selectionRect);\n    me.selectionDragging(\"resizing\");\n    return selectionRect;\n  }\n  /**\n   * @param {string} type\n   * @param {CustomEvent} e\n   */\n  selectionDragging(type, e) {\n    var _a;\n    const w = this.w;\n    if (!e) return;\n    e.preventDefault();\n    const { handler, box } = e.detail;\n    const constraints = (\n      /** @type {any} */\n      this.constraints\n    );\n    let { x, y } = box;\n    if (x < constraints.x) {\n      x = constraints.x;\n    }\n    if (y < constraints.y) {\n      y = constraints.y;\n    }\n    if (box.x2 > constraints.x2) {\n      x = constraints.x2 - box.w;\n    }\n    if (box.y2 > constraints.y2) {\n      y = constraints.y2 - box.h;\n    }\n    handler.move(x, y);\n    const selRect = this.selectionRect;\n    let timerInterval = 0;\n    if (type === \"resizing\") {\n      timerInterval = 30;\n    }\n    const getSelAttr = (attr) => {\n      return parseFloat(selRect.node.getAttribute(attr));\n    };\n    const draggedProps = {\n      x: getSelAttr(\"x\"),\n      y: getSelAttr(\"y\"),\n      width: getSelAttr(\"width\"),\n      height: getSelAttr(\"height\")\n    };\n    w.interact.selection = draggedProps;\n    const link = w.config.chart.link;\n    const linkActive = !!(link && (link.enabled || typeof link.dimension === \"function\"));\n    if ((typeof w.config.chart.events.selection === \"function\" || linkActive) && w.interact.selectionEnabled) {\n      clearTimeout((_a = this.w.globals.selectionResizeTimer) != null ? _a : void 0);\n      this.w.globals.selectionResizeTimer = window.setTimeout(() => {\n        this._emitSelectionFromRect();\n      }, timerInterval);\n    }\n  }\n  /**\n   * Recompute the reported x/y range from the CURRENT persistent selection rect\n   * (via the shared AxisMapping) and notify listeners: chart.events.selection,\n   * brushScrolled, and the crossfilter coordinator. Shared by the rect-body drag\n   * (selectionDragging) and the handle resize (makeSelectionRectDraggable) so\n   * every gesture re-reports through ONE mapping and the reported range always\n   * matches the rect the user sees. No dragged/threshold gate: reaching here\n   * already means the user moved or resized the persistent rect.\n   */\n  _emitSelectionFromRect() {\n    var _a;\n    const w = this.w;\n    if (!w.interact.selectionEnabled) return;\n    const link = w.config.chart.link;\n    const linkActive = !!(link && (link.enabled || typeof link.dimension === \"function\"));\n    if (typeof w.config.chart.events.selection !== \"function\" && !linkActive) {\n      return;\n    }\n    const gridRectDim = this._gridRect();\n    if (!gridRectDim) return;\n    const selectionRect = this.selectionRect.node.getBoundingClientRect();\n    const xyRatios = this.xyRatios;\n    let minX, maxX, minY, maxY;\n    const relLeft = this._screenXToPlotPx(selectionRect.left);\n    const relRight = this._screenXToPlotPx(selectionRect.right);\n    if (!w.axisFlags.isRangeBar) {\n      if (!w.globals.xAxisScale) return;\n      minX = AxisMapping.pxToDataX(w, relLeft);\n      maxX = AxisMapping.pxToDataX(w, relRight);\n      minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0];\n      maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0];\n    } else {\n      minX = w.globals.yAxisScale[0].niceMin + relLeft * xyRatios.invertedYRatio;\n      maxX = w.globals.yAxisScale[0].niceMin + relRight * xyRatios.invertedYRatio;\n      minY = 0;\n      maxY = 1;\n    }\n    const xyAxis = {\n      xaxis: { min: minX, max: maxX },\n      yaxis: { min: minY, max: maxY }\n    };\n    if (typeof w.config.chart.events.selection === \"function\") {\n      w.config.chart.events.selection(this.ctx, xyAxis);\n    }\n    if (w.config.chart.brush.enabled && w.config.chart.events.brushScrolled !== void 0) {\n      w.config.chart.events.brushScrolled(this.ctx, xyAxis);\n    }\n    (_a = this.ctx.linkedViews) == null ? void 0 : _a.onSourceSelection(xyAxis.xaxis);\n  }\n  /** @param {{context: any, zoomtype: any}} opts */\n  selectionDrawn({ context, zoomtype }) {\n    var _a;\n    const w = this.w;\n    const me = context;\n    const xyRatios = this.xyRatios;\n    const toolbar = this.ctx.toolbar;\n    const selRect = w.interact.zoomEnabled ? me.zoomRect.node.getBoundingClientRect() : me.selectionRect.node.getBoundingClientRect();\n    const gridRectDim = me._gridRect();\n    if (!gridRectDim) return;\n    const localStartX = this._screenXToPlotPx(selRect.left);\n    const localEndX = this._screenXToPlotPx(selRect.right);\n    const localStartY = selRect.top - gridRectDim.top;\n    const localEndY = selRect.bottom - gridRectDim.top;\n    let xLowestValue, xHighestValue;\n    if (!w.axisFlags.isRangeBar) {\n      xLowestValue = AxisMapping.pxToDataX(w, localStartX);\n      xHighestValue = AxisMapping.pxToDataX(w, localEndX);\n    } else {\n      xLowestValue = w.globals.yAxisScale[0].niceMin + localStartX * xyRatios.invertedYRatio;\n      xHighestValue = w.globals.yAxisScale[0].niceMin + localEndX * xyRatios.invertedYRatio;\n    }\n    const yHighestValue = [];\n    const yLowestValue = [];\n    w.config.yaxis.forEach((yaxe, index) => {\n      const seriesIndex = w.globals.seriesYAxisMap[index][0];\n      const highestVal = w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[seriesIndex] * localStartY;\n      const lowestVal = w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[seriesIndex] * localEndY;\n      yHighestValue.push(highestVal);\n      yLowestValue.push(lowestVal);\n    });\n    if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) {\n      if (w.interact.zoomEnabled) {\n        if (!w.globals.initialConfig) return;\n        let yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n        let xaxis = Utils$1.clone(w.globals.initialConfig.xaxis);\n        w.interact.zoomed = true;\n        if (w.config.xaxis.convertedCatToNumeric) {\n          xLowestValue = Math.floor(xLowestValue);\n          xHighestValue = Math.floor(xHighestValue);\n          if (xLowestValue < 1) {\n            xLowestValue = 1;\n            xHighestValue = w.globals.dataPoints;\n          }\n          if (xHighestValue - xLowestValue < 2) {\n            xHighestValue = xLowestValue + 1;\n          }\n        }\n        if (zoomtype === \"xy\" || zoomtype === \"x\") {\n          xaxis = {\n            min: xLowestValue,\n            max: xHighestValue\n          };\n        }\n        if (zoomtype === \"xy\" || zoomtype === \"y\") {\n          yaxis.forEach((yaxe, index) => {\n            yaxis[index].min = yLowestValue[index];\n            yaxis[index].max = yHighestValue[index];\n          });\n        }\n        if (toolbar) {\n          const beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis);\n          if (beforeZoomRange) {\n            xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis;\n            yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxis : yaxis;\n          }\n        }\n        const options2 = {\n          xaxis\n        };\n        if (!w.config.chart.group) {\n          options2.yaxis = yaxis;\n        }\n        me.ctx.updateHelpers._updateOptions(\n          options2,\n          false,\n          me.w.config.chart.animations.dynamicAnimation.enabled\n        );\n        if (typeof w.config.chart.events.zoomed === \"function\") {\n          toolbar.zoomCallback(xaxis, yaxis);\n        }\n      } else if (w.interact.selectionEnabled) {\n        let yaxis = null;\n        let xaxis = null;\n        xaxis = {\n          min: xLowestValue,\n          max: xHighestValue\n        };\n        if (zoomtype === \"xy\" || zoomtype === \"y\") {\n          const yaxisCopy = (\n            /** @type {ApexYAxis[]} */\n            Utils$1.clone(w.config.yaxis)\n          );\n          yaxis = yaxisCopy;\n          yaxisCopy.forEach((yaxe, index) => {\n            yaxisCopy[index].min = yLowestValue[index];\n            yaxisCopy[index].max = yHighestValue[index];\n          });\n        }\n        w.interact.selection = me.selection;\n        if (typeof w.config.chart.events.selection === \"function\") {\n          w.config.chart.events.selection(me.ctx, {\n            xaxis,\n            yaxis\n          });\n        }\n        (_a = me.ctx.linkedViews) == null ? void 0 : _a.onSourceSelection(xaxis);\n      }\n    }\n  }\n  /** @param {{ context?: any, zoomtype?: any, xyRatios?: any }} opts */\n  panDragging({ context }) {\n    var _a;\n    const w = this.w;\n    const me = context;\n    if (typeof w.interact.lastClientPosition.x !== \"undefined\") {\n      const deltaX = w.interact.lastClientPosition.x - me.clientX;\n      const deltaY = ((_a = w.interact.lastClientPosition.y) != null ? _a : 0) - me.clientY;\n      if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) {\n        this.moveDirection = \"left\";\n      } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) {\n        this.moveDirection = \"right\";\n      } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) {\n        this.moveDirection = \"up\";\n      } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) {\n        this.moveDirection = \"down\";\n      }\n    }\n    w.interact.lastClientPosition = {\n      x: me.clientX,\n      y: me.clientY\n    };\n    const xLowestValue = w.axisFlags.isRangeBar ? w.globals.minY : w.globals.minX;\n    const xHighestValue = w.axisFlags.isRangeBar ? w.globals.maxY : w.globals.maxX;\n    me.panScrolled(xLowestValue, xHighestValue);\n  }\n  // delayedPanScrolled() {\n  //   const w = this.w\n  //   let newMinX = w.globals.minX\n  //   let newMaxX = w.globals.maxX\n  //   const centerX = (w.globals.maxX - w.globals.minX) / 2\n  //   if (this.moveDirection === 'left') {\n  //     newMinX = w.globals.minX + centerX\n  //     newMaxX = w.globals.maxX + centerX\n  //   } else if (this.moveDirection === 'right') {\n  //     newMinX = w.globals.minX - centerX\n  //     newMaxX = w.globals.maxX - centerX\n  //   }\n  //   newMinX = Math.floor(newMinX)\n  //   newMaxX = Math.floor(newMaxX)\n  //   this.updateScrolledChart(\n  //     { xaxis: { min: newMinX, max: newMaxX } },\n  //     newMinX,\n  //     newMaxX\n  //   )\n  // }\n  /**\n   * @param {number} xLowestValue\n   * @param {number} xHighestValue\n   */\n  panScrolled(xLowestValue, xHighestValue) {\n    var _a, _b;\n    const w = this.w;\n    const xyRatios = this.xyRatios;\n    if (!w.globals.initialConfig) return;\n    const yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n    let xRatio = xyRatios.xRatio;\n    let minX = w.globals.minX;\n    let maxX = w.globals.maxX;\n    if (w.axisFlags.isRangeBar) {\n      xRatio = xyRatios.invertedYRatio;\n      minX = w.globals.minY;\n      maxX = w.globals.maxY;\n    }\n    if (this.moveDirection === \"left\") {\n      xLowestValue = minX + w.layout.gridWidth / PAN_NUDGE_DIVISOR * xRatio;\n      xHighestValue = maxX + w.layout.gridWidth / PAN_NUDGE_DIVISOR * xRatio;\n    } else if (this.moveDirection === \"right\") {\n      xLowestValue = minX - w.layout.gridWidth / PAN_NUDGE_DIVISOR * xRatio;\n      xHighestValue = maxX - w.layout.gridWidth / PAN_NUDGE_DIVISOR * xRatio;\n    }\n    if (!w.axisFlags.isRangeBar) {\n      const clampMin = (_a = w.globals.dataReducerRawMinX) != null ? _a : w.globals.initialMinX;\n      const clampMax = (_b = w.globals.dataReducerRawMaxX) != null ? _b : w.globals.initialMaxX;\n      if (xLowestValue < clampMin || xHighestValue > clampMax) {\n        xLowestValue = minX;\n        xHighestValue = maxX;\n      }\n    }\n    const xaxis = {\n      min: xLowestValue,\n      max: xHighestValue\n    };\n    const options2 = {\n      xaxis\n    };\n    if (!w.config.chart.group) {\n      options2.yaxis = yaxis;\n    }\n    this.updateScrolledChart(options2, xLowestValue, xHighestValue);\n  }\n  /**\n   * @param {object} options\n   * @param {number} xLowestValue\n   * @param {number} xHighestValue\n   */\n  updateScrolledChart(options2, xLowestValue, xHighestValue) {\n    const w = this.w;\n    this.ctx.updateHelpers._updateOptions(options2, false, false);\n    if (typeof w.config.chart.events.scrolled === \"function\") {\n      const args = {\n        xaxis: {\n          min: xLowestValue,\n          max: xHighestValue\n        }\n      };\n      w.config.chart.events.scrolled(this.ctx, args);\n      this.ctx.events.fireEvent(\"scrolled\", args);\n    }\n  }\n  // ---------------------------------------------------------------------------\n  // Momentum: multi-touch pinch-zoom, two-finger pan and kinetic inertia.\n  //\n  // Every _updateOptions destroys and recreates this instance, and applying a\n  // gesture frame IS an _updateOptions, so the gesture must not depend on the\n  // instance surviving. All runtime state lives on w.interact.momentum (the\n  // interaction slice that persists across re-renders, like the crude pan's\n  // lastClientPosition). The instance that received touchstart keeps driving\n  // the gesture off the persistent state; inertia is a self-contained rAF loop\n  // that stops on w.globals.isDestroyed (a real destroy) rather than being\n  // cancelled by the per-update destroy().\n  // ---------------------------------------------------------------------------\n  _momentumEnabled() {\n    return this._pinchEnabled() || this._panInertiaEnabled();\n  }\n  _pinchEnabled() {\n    const c = this.w.config.chart;\n    return !!(c.zoom && c.zoom.enabled && c.zoom.pinch);\n  }\n  _panInertiaEnabled() {\n    const c = this.w.config.chart;\n    return !!(c.pan && c.pan.inertia);\n  }\n  /** Lazily-created, re-render-surviving gesture state on the interaction slice. */\n  _m() {\n    const it = this.w.interact;\n    if (!it.momentum) {\n      it.momentum = {\n        busy: false,\n        /** @type {any} */\n        pinch: null,\n        /** @type {any} */\n        panState: null,\n        /** @type {{x:number,t:number}[]} */\n        samples: [],\n        /** @type {number|null} */\n        inertiaRAF: null\n      };\n    }\n    return it.momentum;\n  }\n  /** Current x data-window (rangeBars carry the datetime domain on y). */\n  _currentXWindow() {\n    const w = this.w;\n    return w.axisFlags.isRangeBar ? { min: w.globals.minY, max: w.globals.maxY } : { min: w.globals.minX, max: w.globals.maxX };\n  }\n  /** Live grid rect from the current DOM. Never cache the grid node on the\n   * instance: a full render replaces this whole instance, but the fast update\n   * path (fastUpdate/_fastAxisChromeRefresh) keeps the instance while swapping\n   * the grid node, and a cached node would go stale (detached nodes report an\n   * all-zero bounding rect, silently corrupting selection geometry). */\n  _gridRect() {\n    const baseEl = this.w.dom.baseEl;\n    const grid = baseEl && baseEl.querySelector(\".apexcharts-grid\");\n    return grid ? grid.getBoundingClientRect() : null;\n  }\n  /**\n   * Convert an absolute (client) x pixel to the plot-origin coordinate space\n   * that bar placement and the selection rect transform both use:\n   * `screenX - svgLeft - translateX`. This is the ONLY correct reference for the\n   * numeric/datetime x mapping (see AxisMapping): do NOT measure from the\n   * `.apexcharts-grid` box and subtract barPadForNumericAxis, because on a\n   * numeric bar chart that box extends barPad to the LEFT of the plot origin, so\n   * the two corrections are a fragile pair that only cancels while the grid box\n   * happens to extend exactly barPad. Anchoring on translateX (the same origin\n   * the bars use) is stable regardless of grid padding.\n   * @param {number} screenX\n   * @returns {number}\n   */\n  _screenXToPlotPx(screenX) {\n    const baseEl = this.w.dom.baseEl;\n    const svg = baseEl && baseEl.querySelector(\".apexcharts-svg\");\n    const svgLeft = svg ? svg.getBoundingClientRect().left : 0;\n    return screenX - svgLeft - this.w.layout.translateX;\n  }\n  /**\n   * Raw data bounds to clamp against. When zoom-aware downsampling is active,\n   * the raw stash tracks the full domain; fall back to the initial window.\n   * Returns null for rangeBars (no raw-x clamp available).\n   * @returns {{min:number, max:number}|null}\n   */\n  _clampBounds() {\n    var _a, _b;\n    const w = this.w;\n    if (w.axisFlags.isRangeBar) return null;\n    return {\n      min: (_a = w.globals.dataReducerRawMinX) != null ? _a : w.globals.initialMinX,\n      max: (_b = w.globals.dataReducerRawMaxX) != null ? _b : w.globals.initialMaxX\n    };\n  }\n  /**\n   * Apply an x-window immediately (no animation), mirroring panScrolled but\n   * pixel-accurate: clamp to the raw bounds (preserving window width so a pan\n   * stops flush at the edge rather than shrinking), floor for category axes,\n   * then route through the fast _updateOptions path.\n   * @param {number} newMinX @param {number} newMaxX @param {boolean} isZoom\n   * @returns {{minX:number, maxX:number}|false} applied window, or false if rejected\n   */\n  _applyXRange(newMinX, newMaxX, isZoom) {\n    const w = this.w;\n    if (!w.globals.initialConfig) return false;\n    const cur = this._currentXWindow();\n    const zoomingOut = isZoom && newMaxX - newMinX > cur.max - cur.min;\n    const bounds = this._clampBounds();\n    if (bounds) {\n      const range = newMaxX - newMinX;\n      if (newMinX < bounds.min) {\n        newMinX = bounds.min;\n        newMaxX = newMinX + range;\n      }\n      if (newMaxX > bounds.max) {\n        newMaxX = bounds.max;\n        newMinX = newMaxX - range;\n      }\n      if (newMinX < bounds.min) newMinX = bounds.min;\n    }\n    if (w.config.xaxis.convertedCatToNumeric) {\n      newMinX = Math.floor(newMinX);\n      newMaxX = zoomingOut ? Math.ceil(newMaxX) : Math.floor(newMaxX);\n      if (newMinX < 1) newMinX = 1;\n      if (bounds && newMaxX > bounds.max) newMaxX = Math.floor(bounds.max);\n      if (newMaxX - newMinX < 2) return false;\n    }\n    if (!(newMaxX > newMinX)) return false;\n    const options2 = { xaxis: { min: newMinX, max: newMaxX } };\n    if (!w.config.chart.group) {\n      options2.yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n    }\n    if (isZoom) w.interact.zoomed = true;\n    this.ctx.updateHelpers._updateOptions(options2, false, false);\n    return { minX: newMinX, maxX: newMaxX };\n  }\n  _cancelInertia() {\n    const m = this._m();\n    if (m.inertiaRAF != null) {\n      cancelAnimationFrame(m.inertiaRAF);\n      m.inertiaRAF = null;\n    }\n  }\n  _fireScrolled() {\n    const w = this.w;\n    if (typeof w.config.chart.events.scrolled !== \"function\") return;\n    const { min, max } = this._currentXWindow();\n    const args = { xaxis: { min, max } };\n    w.config.chart.events.scrolled(this.ctx, args);\n    this.ctx.events.fireEvent(\"scrolled\", args);\n  }\n  /** @param {number} x @param {number} t */\n  _pushSample(x, t) {\n    const s = this._m().samples;\n    s.push({ x, t });\n    while (s.length > 6) s.shift();\n  }\n  /**\n   * Single passive:false handler for all touch phases. Two fingers => pinch /\n   * two-finger pan (zoom). One finger, in pan mode => kinetic pan with inertia.\n   * @param {any} e\n   */\n  momentumTouch(e) {\n    const w = this.w;\n    const m = this._m();\n    const type = e.type;\n    if (type === \"touchstart\") {\n      this._cancelInertia();\n      const gridRectDim = this._gridRect();\n      if (!gridRectDim) return;\n      if (e.touches.length >= 2 && this._pinchEnabled()) {\n        e.preventDefault();\n        m.busy = true;\n        m.panState = null;\n        this._beginPinch(e, gridRectDim);\n      } else if (e.touches.length === 1 && this._panInertiaEnabled() && w.interact.panEnabled) {\n        m.busy = true;\n        m.pinch = null;\n        const t = e.touches[0];\n        const win = this._currentXWindow();\n        const gw = w.layout.gridWidth || 1;\n        m.panState = {\n          startX: t.clientX,\n          startY: t.clientY,\n          axis: null,\n          // decided on first move (rails)\n          minX0: win.min,\n          maxX0: win.max,\n          ratio0: (win.max - win.min) / gw\n        };\n        m.samples = [{ x: t.clientX, t: e.timeStamp }];\n      }\n      return;\n    }\n    if (type === \"touchmove\") {\n      if (m.pinch && e.touches.length >= 2) {\n        e.preventDefault();\n        this._movePinch(e);\n      } else if (m.panState && e.touches.length === 1) {\n        this._movePan(e);\n      }\n      return;\n    }\n    if (m.pinch) {\n      if (e.touches.length < 2) this._endPinch();\n    } else if (m.panState) {\n      if (e.touches.length === 0) this._endPan();\n    }\n    if (e.touches.length === 0) {\n      w.interact.mousedown = false;\n      this.dragged = false;\n      if (m.inertiaRAF == null && !m.pinch && !m.panState) {\n        m.busy = false;\n      }\n    }\n  }\n  /** @param {any} e @param {DOMRect} gridRectDim */\n  _beginPinch(e, gridRectDim) {\n    const w = this.w;\n    const t0 = e.touches[0];\n    const t1 = e.touches[1];\n    const dist = Math.hypot(t1.clientX - t0.clientX, t1.clientY - t0.clientY) || 1;\n    const cx = (t0.clientX + t1.clientX) / 2 - gridRectDim.left - w.globals.barPadForNumericAxis;\n    const { min, max } = this._currentXWindow();\n    this._m().pinch = {\n      d0: dist,\n      cx0: cx,\n      minX0: min,\n      maxX0: max,\n      gridWidth: w.layout.gridWidth || 1\n    };\n  }\n  /** @param {any} e */\n  _movePinch(e) {\n    const w = this.w;\n    const p = this._m().pinch;\n    if (!p) return;\n    const gridRectDim = this._gridRect();\n    if (!gridRectDim) return;\n    const t0 = e.touches[0];\n    const t1 = e.touches[1];\n    const dist = Math.hypot(t1.clientX - t0.clientX, t1.clientY - t0.clientY) || 1;\n    const cx = (t0.clientX + t1.clientX) / 2 - gridRectDim.left - w.globals.barPadForNumericAxis;\n    const range0 = p.maxX0 - p.minX0;\n    const newRange = range0 * (p.d0 / dist);\n    const anchorData = p.minX0 + p.cx0 / p.gridWidth * range0;\n    let newMinX = anchorData - cx / p.gridWidth * newRange;\n    let newMaxX = newMinX + newRange;\n    const bounds = this._clampBounds();\n    if (bounds) {\n      const minXDiff = w.globals.minXDiff > 0 && isFinite(w.globals.minXDiff) ? w.globals.minXDiff : 0;\n      const minRange = Math.max(minXDiff * 2, (bounds.max - bounds.min) * 1e-6);\n      if (newMaxX - newMinX < minRange) {\n        const mid = (newMinX + newMaxX) / 2;\n        newMinX = mid - minRange / 2;\n        newMaxX = mid + minRange / 2;\n      }\n    }\n    this._applyXRange(newMinX, newMaxX, true);\n  }\n  _endPinch() {\n    const w = this.w;\n    const m = this._m();\n    m.pinch = null;\n    const { min, max } = this._currentXWindow();\n    const xaxis = { min, max };\n    const yaxis = w.globals.initialConfig ? Utils$1.clone(w.globals.initialConfig.yaxis) : [];\n    const toolbar = this.ctx.toolbar;\n    if (toolbar) toolbar.zoomCallback(xaxis, yaxis);\n  }\n  /** @param {any} e */\n  _movePan(e) {\n    const m = this._m();\n    const s = m.panState;\n    const t = e.touches[0];\n    if (!s.axis) {\n      const dx = Math.abs(t.clientX - s.startX);\n      const dy = Math.abs(t.clientY - s.startY);\n      if (dx < 6 && dy < 6) {\n        this._pushSample(t.clientX, e.timeStamp);\n        return;\n      }\n      if (dy > dx) {\n        m.busy = false;\n        m.panState = null;\n        return;\n      }\n      s.axis = \"x\";\n    }\n    if (s.axis !== \"x\") return;\n    e.preventDefault();\n    const totalDeltaPx = t.clientX - s.startX;\n    const deltaData = totalDeltaPx * s.ratio0;\n    this._pushSample(t.clientX, e.timeStamp);\n    this._applyXRange(s.minX0 - deltaData, s.maxX0 - deltaData, false);\n  }\n  _endPan() {\n    const m = this._m();\n    const s = m.panState;\n    m.panState = null;\n    let vel = 0;\n    const samples = m.samples;\n    if (samples.length >= 2) {\n      const a = samples[0];\n      const b = samples[samples.length - 1];\n      const dt = b.t - a.t;\n      if (dt > 0) vel = (b.x - a.x) / dt;\n    }\n    m.samples = [];\n    if (s && s.axis === \"x\" && this._panInertiaEnabled() && Math.abs(vel) > INERTIA_MIN_RELEASE_VELOCITY) {\n      this._startInertia(vel);\n    } else {\n      m.busy = false;\n      this._fireScrolled();\n    }\n  }\n  /**\n   * Kinetic glide after a one-finger pan release: decay the velocity by\n   * `friction` each frame and shift the window, stopping at the data edge\n   * (clamp, not elastic overshoot). The loop is w-driven, so it keeps running\n   * across the re-renders each frame triggers and stops only on a real destroy.\n   * @param {number} vel0 px/ms, sign is the finger direction\n   */\n  _startInertia(vel0) {\n    const w = this.w;\n    const m = this._m();\n    const cfgFriction = w.config.chart.pan && w.config.chart.pan.friction;\n    const friction = typeof cfgFriction === \"number\" ? Math.min(Math.max(cfgFriction, 0.5), 0.999) : INERTIA_DEFAULT_FRICTION;\n    let vel = vel0;\n    let lastT = null;\n    m.busy = true;\n    const step = (ts) => {\n      if (w.globals.isDestroyed) {\n        m.inertiaRAF = null;\n        m.busy = false;\n        return;\n      }\n      if (lastT == null) {\n        lastT = ts;\n        m.inertiaRAF = requestAnimationFrame(step);\n        return;\n      }\n      const dt = ts - lastT;\n      lastT = ts;\n      vel *= Math.pow(friction, dt / FRAME_MS_60FPS);\n      if (Math.abs(vel) < INERTIA_STOP_VELOCITY) {\n        m.inertiaRAF = null;\n        m.busy = false;\n        this._fireScrolled();\n        return;\n      }\n      const win = this._currentXWindow();\n      const gw = w.layout.gridWidth || 1;\n      const ratio = (win.max - win.min) / gw;\n      const deltaData = vel * dt * ratio;\n      const applied = this._applyXRange(\n        win.min - deltaData,\n        win.max - deltaData,\n        false\n      );\n      const bounds = this._clampBounds();\n      const hitEdge = !applied || bounds && (deltaData > 0 && applied.minX <= bounds.min + (bounds.max - bounds.min) * 1e-6 || deltaData < 0 && applied.maxX >= bounds.max - (bounds.max - bounds.min) * 1e-6);\n      if (hitEdge) {\n        m.inertiaRAF = null;\n        m.busy = false;\n        this._fireScrolled();\n        return;\n      }\n      m.inertiaRAF = requestAnimationFrame(step);\n    };\n    m.inertiaRAF = requestAnimationFrame(step);\n  }\n}\nApexCharts.registerFeatures({\n  toolbar: Toolbar,\n  zoomPanSelection: ZoomPanSelection\n});\nlet Helpers$2 = class Helpers3 {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {number | null} [annoIndex]\n   */\n  setOrientations(anno, annoIndex = null) {\n    var _a, _b;\n    const w = this.w;\n    if (anno.label.orientation === \"vertical\") {\n      const i = annoIndex !== null ? annoIndex : 0;\n      const xAnno = w.dom.baseEl.querySelector(\n        `.apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='${i}']`\n      );\n      if (xAnno !== null) {\n        const xAnnoCoord = (\n          /** @type {SVGGraphicsElement} */\n          xAnno.getBBox()\n        );\n        xAnno.setAttribute(\n          \"x\",\n          String(\n            parseFloat((_a = xAnno.getAttribute(\"x\")) != null ? _a : \"0\") - xAnnoCoord.height + 4\n          )\n        );\n        const yOffset = anno.label.position === \"top\" ? xAnnoCoord.width : -xAnnoCoord.width;\n        xAnno.setAttribute(\n          \"y\",\n          String(parseFloat((_b = xAnno.getAttribute(\"y\")) != null ? _b : \"0\") + yOffset)\n        );\n        const { x, y } = this.annoCtx.graphics.rotateAroundCenter(xAnno);\n        xAnno.setAttribute(\"transform\", `rotate(-90 ${x} ${y})`);\n      }\n    }\n  }\n  /**\n   * @param {any} annoEl\n   * @param {Record<string, any>} anno\n   */\n  addBackgroundToAnno(annoEl, anno) {\n    const w = this.w;\n    if (!annoEl || !anno.label.text || !String(anno.label.text).trim()) {\n      return null;\n    }\n    const gridEl = w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!gridEl) return null;\n    const elGridRect = gridEl.getBoundingClientRect();\n    const gridBBox = (\n      /** @type {SVGGraphicsElement} */\n      gridEl.getBBox()\n    );\n    const zoom = elGridRect.width / gridBBox.width || 1;\n    const coords = annoEl.getBoundingClientRect();\n    let {\n      left: pleft,\n      right: pright,\n      top: ptop,\n      bottom: pbottom\n    } = anno.label.style.padding;\n    if (anno.label.orientation === \"vertical\") {\n      [ptop, pbottom, pleft, pright] = [pleft, pright, ptop, pbottom];\n    }\n    const x1 = (coords.left - elGridRect.left) / zoom - pleft;\n    const y1 = (coords.top - elGridRect.top) / zoom - ptop;\n    const elRect = this.annoCtx.graphics.drawRect(\n      x1 - w.globals.barPadForNumericAxis,\n      y1,\n      coords.width / zoom + pleft + pright,\n      coords.height / zoom + ptop + pbottom,\n      anno.label.borderRadius,\n      anno.label.style.background,\n      1,\n      anno.label.borderWidth,\n      anno.label.borderColor,\n      0\n    );\n    if (anno.id) {\n      elRect.node.classList.add(anno.id);\n    }\n    return elRect;\n  }\n  annotationsBackground() {\n    const w = this.w;\n    const add = (anno, i, type) => {\n      const annoLabel = w.dom.baseEl.querySelector(\n        `.apexcharts-${type}-annotations .apexcharts-${type}-annotation-label[rel='${i}']`\n      );\n      if (annoLabel) {\n        const parent = annoLabel.parentNode;\n        const elRect = this.addBackgroundToAnno(annoLabel, anno);\n        if (elRect) {\n          parent == null ? void 0 : parent.insertBefore(elRect.node, annoLabel);\n          const labelX = annoLabel.getAttribute(\"x\");\n          if (labelX !== null) {\n            applyProgressiveReveal(elRect, parseFloat(labelX), w);\n          }\n          if (anno.label.mouseEnter) {\n            elRect.node.addEventListener(\n              \"mouseenter\",\n              anno.label.mouseEnter.bind(this, anno)\n            );\n          }\n          if (anno.label.mouseLeave) {\n            elRect.node.addEventListener(\n              \"mouseleave\",\n              anno.label.mouseLeave.bind(this, anno)\n            );\n          }\n          if (anno.label.click) {\n            elRect.node.addEventListener(\n              \"click\",\n              anno.label.click.bind(this, anno)\n            );\n          }\n        }\n      }\n    };\n    w.config.annotations.xaxis.forEach(\n      (anno, i) => add(anno, i, \"xaxis\")\n    );\n    w.config.annotations.yaxis.forEach(\n      (anno, i) => add(anno, i, \"yaxis\")\n    );\n    w.config.annotations.points.forEach(\n      (anno, i) => add(anno, i, \"point\")\n    );\n  }\n  /**\n   * @param {string} type\n   * @param {Record<string, any>} anno\n   */\n  getY1Y2(type, anno) {\n    var _a, _b;\n    const w = this.w;\n    const y = type === \"y1\" ? anno.y : anno.y2;\n    let yP;\n    let clipped = false;\n    if (this.annoCtx.invertAxis) {\n      const labels = w.config.xaxis.convertedCatToNumeric ? w.labelData.categoryLabels : w.labelData.labels;\n      const catIndex = labels.indexOf(y);\n      const xLabel = w.dom.baseEl.querySelector(\n        `.apexcharts-yaxis-texts-g text:nth-child(${catIndex + 1})`\n      );\n      yP = xLabel ? parseFloat((_a = xLabel.getAttribute(\"y\")) != null ? _a : \"0\") : (w.layout.gridHeight / labels.length - 1) * (catIndex + 1) - w.globals.barHeight;\n      if (anno.seriesIndex !== void 0 && w.globals.barHeight) {\n        yP -= w.globals.barHeight / 2 * (w.seriesData.series.length - 1) - w.globals.barHeight * anno.seriesIndex;\n      }\n    } else {\n      const yAxisMap = w.globals.seriesYAxisMap[anno.yAxisIndex];\n      if (!yAxisMap || yAxisMap[0] == null || !w.config.yaxis[anno.yAxisIndex]) {\n        return { yP: 0, clipped: true };\n      }\n      const seriesIndex = yAxisMap[0];\n      const yPos = w.config.yaxis[anno.yAxisIndex].logarithmic ? new CoreUtils(this.w).getLogVal(\n        w.config.yaxis[anno.yAxisIndex].logBase,\n        y,\n        seriesIndex\n      ) / /** @type {any} */\n      w.globals.yLogRatio[seriesIndex] : (y - w.globals.minYArr[seriesIndex]) / (w.globals.yRange[seriesIndex] / w.layout.gridHeight);\n      yP = w.layout.gridHeight - Math.min(Math.max(yPos, 0), w.layout.gridHeight);\n      clipped = yPos > w.layout.gridHeight || yPos < 0;\n      if (anno.marker && (anno.y === void 0 || anno.y === null)) {\n        yP = 0;\n      }\n      if ((_b = w.config.yaxis[anno.yAxisIndex]) == null ? void 0 : _b.reversed) {\n        yP = yPos;\n      }\n    }\n    if (typeof y === \"string\" && y.includes(\"px\")) {\n      yP = parseFloat(y);\n    }\n    return { yP, clipped };\n  }\n  /**\n   * @param {string} type\n   * @param {Record<string, any>} anno\n   */\n  getX1X2(type, anno) {\n    const w = this.w;\n    const x = type === \"x1\" ? anno.x : anno.x2;\n    const min = this.annoCtx.invertAxis ? w.globals.minY : w.globals.minX;\n    const max = this.annoCtx.invertAxis ? w.globals.maxY : w.globals.maxX;\n    const range = this.annoCtx.invertAxis ? w.globals.yRange[0] : w.globals.xRange;\n    let clipped = false;\n    let xP = this.annoCtx.inversedReversedAxis ? (max - x) / (range / w.layout.gridWidth) : (x - min) / (range / w.layout.gridWidth);\n    if ((w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) && !this.annoCtx.invertAxis && !w.axisFlags.dataFormatXNumeric) {\n      if (!w.config.chart.sparkline.enabled) {\n        xP = this.getStringX(x);\n      }\n    }\n    if (typeof x === \"string\" && x.includes(\"px\")) {\n      xP = parseFloat(x);\n    }\n    if ((x === void 0 || x === null) && anno.marker) {\n      xP = w.layout.gridWidth;\n    }\n    if (anno.seriesIndex !== void 0 && w.globals.barWidth && !this.annoCtx.invertAxis) {\n      xP -= w.globals.barWidth / 2 * (w.seriesData.series.length - 1) - w.globals.barWidth * anno.seriesIndex;\n    }\n    if (typeof xP !== \"number\") {\n      xP = 0;\n      clipped = true;\n    }\n    if (parseFloat(xP.toFixed(10)) > parseFloat(w.layout.gridWidth.toFixed(10))) {\n      xP = w.layout.gridWidth;\n      clipped = true;\n    } else if (xP < 0) {\n      xP = 0;\n      clipped = true;\n    }\n    return { x: xP, clipped };\n  }\n  /**\n   * @param {number} x\n   */\n  getStringX(x) {\n    var _a;\n    const w = this.w;\n    let rX = x;\n    if (w.config.xaxis.convertedCatToNumeric && w.labelData.categoryLabels.length) {\n      const strX = String(x);\n      x = w.labelData.categoryLabels.findIndex(\n        (l) => String(l) === strX\n      ) + 1;\n    }\n    const catIndex = w.labelData.labels.map(\n      (item) => Array.isArray(item) ? item.join(\" \") : item\n    ).indexOf(x);\n    const xLabel = w.dom.baseEl.querySelector(\n      `.apexcharts-xaxis-texts-g text:nth-child(${catIndex + 1})`\n    );\n    if (xLabel) {\n      rX = parseFloat((_a = xLabel.getAttribute(\"x\")) != null ? _a : \"0\");\n    }\n    return rX;\n  }\n};\nclass XAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.invertAxis = this.annoCtx.invertAxis;\n    this.helpers = new Helpers$2(this.annoCtx);\n  }\n  /**\n   * @param {XAxisAnnotations} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addXaxisAnnotation(anno, parent, index) {\n    const w = this.w;\n    const result = this.helpers.getX1X2(\"x1\", anno);\n    let x1 = result.x;\n    const clipX1 = result.clipped;\n    let clipX2 = true;\n    let x2;\n    const text = anno.label.text;\n    const strokeDashArray = anno.strokeDashArray;\n    if (!Utils$1.isNumber(x1)) return;\n    if (anno.x2 === null || typeof anno.x2 === \"undefined\") {\n      if (!clipX1) {\n        const line = this.annoCtx.graphics.drawLine(\n          x1 + anno.offsetX,\n          // x1\n          0 + anno.offsetY,\n          // y1\n          x1 + anno.offsetX,\n          // x2\n          w.layout.gridHeight + anno.offsetY,\n          // y2\n          anno.borderColor,\n          // lineColor\n          strokeDashArray,\n          //dashArray\n          anno.borderWidth\n        );\n        parent.appendChild(line.node);\n        if (anno.id) {\n          line.node.classList.add(anno.id);\n        }\n        applyProgressiveReveal(line, x1 + anno.offsetX, w);\n      }\n    } else {\n      const result2 = this.helpers.getX1X2(\"x2\", anno);\n      x2 = result2.x;\n      clipX2 = result2.clipped;\n      if (x2 < x1) {\n        const temp = x1;\n        x1 = x2;\n        x2 = temp;\n      }\n      const rect = this.annoCtx.graphics.drawRect(\n        x1 + anno.offsetX,\n        // x1\n        0 + anno.offsetY,\n        // y1\n        x2 - x1,\n        // x2\n        w.layout.gridHeight + anno.offsetY,\n        // y2\n        0,\n        // radius\n        anno.fillColor,\n        // color\n        anno.opacity,\n        // opacity,\n        1,\n        // strokeWidth\n        anno.borderColor,\n        // strokeColor\n        strokeDashArray\n        // stokeDashArray\n      );\n      rect.node.classList.add(\"apexcharts-annotation-rect\");\n      rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n      parent.appendChild(rect.node);\n      if (anno.id) {\n        rect.node.classList.add(anno.id);\n      }\n      applyProgressiveReveal(rect, x1 + anno.offsetX, w);\n    }\n    if (!(clipX1 && clipX2)) {\n      const textRects = this.annoCtx.graphics.getTextRects(\n        text,\n        anno.label.style.fontSize\n      );\n      const textY = anno.label.position === \"top\" ? 4 : anno.label.position === \"center\" ? w.layout.gridHeight / 2 + (anno.label.orientation === \"vertical\" ? textRects.width / 2 : 0) : w.layout.gridHeight;\n      const elText = this.annoCtx.graphics.drawText({\n        x: x1 + anno.label.offsetX,\n        y: textY + anno.label.offsetY - (anno.label.orientation === \"vertical\" ? anno.label.position === \"top\" ? textRects.width / 2 - 12 : -textRects.width / 2 : 0),\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-xaxis-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n      applyProgressiveReveal(elText, x1 + anno.label.offsetX, w);\n      this.annoCtx.helpers.setOrientations(anno, index);\n    }\n  }\n  drawXAxisAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-xaxis-annotations\"\n    });\n    w.config.annotations.xaxis.map(\n      (anno, index) => {\n        this.addXaxisAnnotation(anno, elg.node, index);\n      }\n    );\n    return elg;\n  }\n}\nclass YAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.helpers = new Helpers$2(this.annoCtx);\n    this.axesUtils = new AxesUtils(this.annoCtx.w, {\n      theme: this.annoCtx.theme,\n      timeScale: this.annoCtx.timeScale\n    });\n  }\n  /**\n   * @param {YAxisAnnotations} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addYaxisAnnotation(anno, parent, index) {\n    const w = this.w;\n    const strokeDashArray = anno.strokeDashArray;\n    let result = this.helpers.getY1Y2(\"y1\", anno);\n    let y1 = result.yP;\n    const clipY1 = result.clipped;\n    let y2;\n    let clipY2 = true;\n    let drawn = false;\n    const text = anno.label.text;\n    if (anno.y2 === null || typeof anno.y2 === \"undefined\") {\n      if (!clipY1) {\n        drawn = true;\n        const line = this.annoCtx.graphics.drawLine(\n          0 + anno.offsetX,\n          // x1\n          y1 + anno.offsetY,\n          // y1\n          this._getYAxisAnnotationWidth(anno),\n          // x2\n          y1 + anno.offsetY,\n          // y2\n          anno.borderColor,\n          // lineColor\n          strokeDashArray,\n          // dashArray\n          anno.borderWidth\n        );\n        parent.appendChild(line.node);\n        if (anno.id) {\n          line.node.classList.add(anno.id);\n        }\n      }\n    } else {\n      result = this.helpers.getY1Y2(\"y2\", anno);\n      y2 = result.yP;\n      clipY2 = result.clipped;\n      if (y2 > y1) {\n        const temp = y1;\n        y1 = y2;\n        y2 = temp;\n      }\n      if (!(clipY1 && clipY2)) {\n        drawn = true;\n        const rect = this.annoCtx.graphics.drawRect(\n          0 + anno.offsetX,\n          // x1\n          y2 + anno.offsetY,\n          // y1\n          this._getYAxisAnnotationWidth(anno),\n          // x2\n          y1 - y2,\n          // y2\n          0,\n          // radius\n          anno.fillColor,\n          // color\n          anno.opacity,\n          // opacity,\n          1,\n          // strokeWidth\n          anno.borderColor,\n          // strokeColor\n          strokeDashArray\n          // stokeDashArray\n        );\n        rect.node.classList.add(\"apexcharts-annotation-rect\");\n        rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n        parent.appendChild(rect.node);\n        if (anno.id) {\n          rect.node.classList.add(anno.id);\n        }\n      }\n    }\n    if (drawn) {\n      const textX = anno.label.position === \"right\" ? w.layout.gridWidth : anno.label.position === \"center\" ? w.layout.gridWidth / 2 : 0;\n      const elText = this.annoCtx.graphics.drawText({\n        x: textX + anno.label.offsetX,\n        y: (y2 != null ? y2 : y1) + anno.label.offsetY - 3,\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-yaxis-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n    }\n  }\n  /**\n   * @param {YAxisAnnotations} anno\n   */\n  _getYAxisAnnotationWidth(anno) {\n    const w = this.w;\n    let width = w.layout.gridWidth;\n    if (anno.width.indexOf(\"%\") > -1) {\n      width = w.layout.gridWidth * parseInt(anno.width, 10) / 100;\n    } else {\n      width = parseInt(anno.width, 10);\n    }\n    return width + anno.offsetX;\n  }\n  drawYAxisAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-yaxis-annotations\"\n    });\n    w.config.annotations.yaxis.forEach(\n      (anno, index) => {\n        anno.yAxisIndex = this.axesUtils.translateYAxisIndex(anno.yAxisIndex);\n        if (!(this.axesUtils.isYAxisHidden(anno.yAxisIndex) && this.axesUtils.yAxisAllSeriesCollapsed(anno.yAxisIndex))) {\n          this.addYaxisAnnotation(anno, elg.node, index);\n        }\n      }\n    );\n    return elg;\n  }\n}\nclass PointAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.helpers = new Helpers$2(this.annoCtx);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addPointAnnotation(anno, parent, index) {\n    const w = this.w;\n    if (w.globals.collapsedSeriesIndices.indexOf(anno.seriesIndex) > -1) {\n      return;\n    }\n    const resultX = this.helpers.getX1X2(\"x1\", anno);\n    const x = resultX.x;\n    const clipX = resultX.clipped;\n    const resultY = this.helpers.getY1Y2(\"y1\", anno);\n    const y = resultY.yP;\n    const clipY = resultY.clipped;\n    if (!Utils$1.isNumber(x)) return;\n    if (!(clipY || clipX)) {\n      const optsPoints = {\n        pSize: anno.marker.size,\n        pointStrokeWidth: anno.marker.strokeWidth,\n        pointFillColor: anno.marker.fillColor,\n        pointStrokeColor: anno.marker.strokeColor,\n        shape: anno.marker.shape,\n        pRadius: anno.marker.radius,\n        class: `apexcharts-point-annotation-marker ${anno.marker.cssClass} ${anno.id ? anno.id : \"\"}`\n      };\n      let point = this.annoCtx.graphics.drawMarker(\n        x + anno.marker.offsetX,\n        y + anno.marker.offsetY,\n        optsPoints\n      );\n      parent.appendChild(point.node);\n      const tooltipTargets = [point.node];\n      applyProgressiveReveal(point, x, w);\n      const text = anno.label.text ? anno.label.text : \"\";\n      const elText = this.annoCtx.graphics.drawText({\n        x: x + anno.label.offsetX,\n        y: y + anno.label.offsetY - anno.marker.size - parseFloat(anno.label.style.fontSize) / 1.6,\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-point-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n      applyProgressiveReveal(elText, x, w);\n      if (anno.customSVG.SVG) {\n        const g = this.annoCtx.graphics.group({\n          class: \"apexcharts-point-annotations-custom-svg \" + anno.customSVG.cssClass\n        });\n        g.attr({\n          transform: `translate(${x + anno.customSVG.offsetX}, ${y + anno.customSVG.offsetY})`\n        });\n        g.node.innerHTML = anno.customSVG.SVG;\n        parent.appendChild(g.node);\n        tooltipTargets.push(g.node);\n      }\n      if (anno.image.path) {\n        const imgWidth = anno.image.width ? anno.image.width : 20;\n        const imgHeight = anno.image.height ? anno.image.height : 20;\n        point = this.annoCtx.addImage({\n          x: x + anno.image.offsetX - imgWidth / 2,\n          y: y + anno.image.offsetY - imgHeight / 2,\n          width: imgWidth,\n          height: imgHeight,\n          path: anno.image.path,\n          appendTo: \".apexcharts-point-annotations\"\n        });\n        tooltipTargets.push(point.node);\n      }\n      if (anno.tooltip && anno.tooltip.enabled) {\n        tooltipTargets.forEach((node) => {\n          node.addEventListener(\"mouseenter\", () => {\n            this.showPointTooltip(anno, node);\n          });\n          node.addEventListener(\"mouseleave\", () => {\n            this.hidePointTooltip();\n          });\n        });\n      }\n      if (anno.mouseEnter) {\n        point.node.addEventListener(\n          \"mouseenter\",\n          anno.mouseEnter.bind(this, anno)\n        );\n      }\n      if (anno.mouseLeave) {\n        point.node.addEventListener(\n          \"mouseleave\",\n          anno.mouseLeave.bind(this, anno)\n        );\n      }\n      if (anno.click) {\n        point.node.addEventListener(\"click\", anno.click.bind(this, anno));\n      }\n    }\n  }\n  /**\n   * Lazily create (once per chart) and return the shared HTML element used to\n   * render point-annotation tooltips. Reuses the `.apexcharts-tooltip` glass\n   * styling; the `.apexcharts-annotation-tooltip` modifier adds padding and\n   * text wrapping for free-form content.\n   * @returns {HTMLElement}\n   */\n  getPointTooltipEl() {\n    const w = this.w;\n    let el = (\n      /** @type {HTMLElement | null} */\n      w.dom.elWrap.querySelector(\".apexcharts-annotation-tooltip\")\n    );\n    if (!el) {\n      el = /** @type {HTMLElement} */\n      BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n      el.classList.add(\"apexcharts-tooltip\", \"apexcharts-annotation-tooltip\");\n      w.dom.elWrap.appendChild(el);\n    }\n    return el;\n  }\n  /**\n   * Resolve the tooltip markup for a point annotation. Precedence:\n   * `tooltip.formatter` (fn) -> `tooltip.text` -> `label.text`. Arrays are\n   * joined with line breaks.\n   * @param {Record<string, any>} anno\n   * @returns {string}\n   */\n  getPointTooltipContent(anno) {\n    const w = this.w;\n    const tt = anno.tooltip || {};\n    if (typeof tt.formatter === \"function\") {\n      return tt.formatter({\n        annotation: anno,\n        seriesIndex: anno.seriesIndex,\n        id: anno.id,\n        w\n      });\n    }\n    let content = tt.text != null ? tt.text : anno.label && anno.label.text;\n    if (Array.isArray(content)) {\n      content = content.join(\"<br/>\");\n    }\n    return content == null ? \"\" : String(content);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} targetNode the hovered marker / image / custom-SVG node\n   */\n  showPointTooltip(anno, targetNode) {\n    const w = this.w;\n    const content = this.getPointTooltipContent(anno);\n    if (!content) return;\n    const el = this.getPointTooltipEl();\n    el.innerHTML = content;\n    const theme = anno.tooltip.theme || w.config.tooltip.theme || \"light\";\n    el.classList.remove(\"apexcharts-theme-light\", \"apexcharts-theme-dark\");\n    el.classList.add(`apexcharts-theme-${theme}`);\n    el.classList.add(\"apexcharts-active\");\n    const wrapRect = w.dom.elWrap.getBoundingClientRect();\n    const markRect = targetNode.getBoundingClientRect();\n    const ttRect = el.getBoundingClientRect();\n    const offsetX = anno.tooltip.offsetX || 0;\n    const offsetY = anno.tooltip.offsetY || 0;\n    let left = markRect.left - wrapRect.left + markRect.width / 2 - ttRect.width / 2;\n    let top = markRect.top - wrapRect.top - ttRect.height - 10;\n    left = Math.max(0, Math.min(left, wrapRect.width - ttRect.width));\n    if (top < 0) {\n      top = markRect.top - wrapRect.top + markRect.height + 10;\n    }\n    el.style.left = left + offsetX + \"px\";\n    el.style.top = top + offsetY + \"px\";\n  }\n  hidePointTooltip() {\n    const el = (\n      /** @type {HTMLElement | null} */\n      this.w.dom.elWrap.querySelector(\".apexcharts-annotation-tooltip\")\n    );\n    if (el) {\n      el.classList.remove(\"apexcharts-active\");\n    }\n  }\n  drawPointAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-point-annotations\"\n    });\n    w.config.annotations.points.map(\n      (anno, index) => {\n        this.addPointAnnotation(anno, elg.node, index);\n      }\n    );\n    return elg;\n  }\n}\nclass Annotations {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w, { theme = null, timeScale = null } = {}) {\n    this.w = w;\n    this.theme = theme;\n    this.timeScale = timeScale;\n    this.invertAxis = void 0;\n    this.inversedReversedAxis = void 0;\n    this.graphics = new Graphics(this.w);\n    if (this.w.globals.isBarHorizontal) {\n      this.invertAxis = true;\n    }\n    this.helpers = new Helpers$2(this);\n    this.xAxisAnnotations = new XAnnotations(this);\n    this.yAxisAnnotations = new YAnnotations(this);\n    this.pointsAnnotations = new PointAnnotations(this);\n    if (this.w.globals.isBarHorizontal && this.w.config.yaxis[0].reversed) {\n      this.inversedReversedAxis = true;\n    }\n    this.xDivision = this.w.layout.gridWidth / this.w.globals.dataPoints;\n  }\n  drawAxesAnnotations() {\n    const w = this.w;\n    if (w.globals.axisCharts && w.globals.dataPoints) {\n      const yAnnotations = this.yAxisAnnotations.drawYAxisAnnotations();\n      const xAnnotations = this.xAxisAnnotations.drawXAxisAnnotations();\n      const pointAnnotations = this.pointsAnnotations.drawPointAnnotations();\n      const initialAnim = w.config.chart.animations.enabled;\n      const annoArray = [yAnnotations, xAnnotations, pointAnnotations];\n      const annoElArray = [\n        xAnnotations.node,\n        yAnnotations.node,\n        pointAnnotations.node\n      ];\n      const progressiveAnnos = w.config.chart.type === \"line\" || w.config.chart.type === \"area\" || w.config.chart.type === \"rangeArea\";\n      const skipGroupHide = [progressiveAnnos, false, progressiveAnnos];\n      for (let i = 0; i < 3; i++) {\n        w.dom.elGraphical.add(annoArray[i]);\n        if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n          if (w.config.chart.type !== \"scatter\" && w.config.chart.type !== \"bubble\" && w.globals.dataPoints > 1 && !skipGroupHide[i]) {\n            annoElArray[i].classList.add(\"apexcharts-element-hidden\");\n          }\n        }\n        w.globals.delayedElements.push({ el: annoElArray[i], index: 0 });\n      }\n      this.helpers.annotationsBackground();\n    }\n  }\n  drawImageAnnos() {\n    const w = this.w;\n    w.config.annotations.images.map((s) => {\n      this.addImage(s);\n    });\n  }\n  drawTextAnnos() {\n    const w = this.w;\n    w.config.annotations.texts.map((t) => {\n      this.addText(t);\n    });\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addXaxisAnnotation(anno, parent, index) {\n    this.xAxisAnnotations.addXaxisAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addYaxisAnnotation(anno, parent, index) {\n    this.yAxisAnnotations.addYaxisAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addPointAnnotation(anno, parent, index) {\n    this.pointsAnnotations.addPointAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  addText(params) {\n    const {\n      x,\n      y,\n      text,\n      textAnchor,\n      foreColor,\n      fontSize,\n      fontFamily,\n      fontWeight,\n      cssClass,\n      backgroundColor,\n      borderWidth,\n      strokeDashArray,\n      borderRadius,\n      borderColor,\n      appendTo = \".apexcharts-svg\",\n      paddingLeft = 4,\n      paddingRight = 4,\n      paddingBottom = 2,\n      paddingTop = 2\n    } = params;\n    const w = this.w;\n    const elText = this.graphics.drawText({\n      x,\n      y,\n      text,\n      textAnchor: textAnchor || \"start\",\n      fontSize: fontSize || \"12px\",\n      fontWeight: fontWeight || \"regular\",\n      fontFamily: fontFamily || w.config.chart.fontFamily,\n      foreColor: foreColor || w.config.chart.foreColor,\n      cssClass: \"apexcharts-text \" + cssClass ? cssClass : \"\"\n    });\n    const parent = w.dom.baseEl.querySelector(appendTo);\n    if (parent) {\n      parent.appendChild(elText.node);\n    }\n    const textRect = elText.bbox();\n    if (text) {\n      const elRect = this.graphics.drawRect(\n        textRect.x - paddingLeft,\n        textRect.y - paddingTop,\n        textRect.width + paddingLeft + paddingRight,\n        textRect.height + paddingBottom + paddingTop,\n        borderRadius,\n        backgroundColor ? backgroundColor : \"transparent\",\n        1,\n        borderWidth,\n        borderColor,\n        strokeDashArray\n      );\n      parent.insertBefore(elRect.node, elText.node);\n    }\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  addImage(params) {\n    const w = this.w;\n    const {\n      path,\n      x = 0,\n      y = 0,\n      width = 20,\n      height = 20,\n      appendTo = \".apexcharts-svg\"\n    } = params;\n    const img = w.dom.Paper.image(path);\n    img.size(width, height).move(x, y);\n    const parent = w.dom.baseEl.querySelector(appendTo);\n    if (parent) {\n      parent.appendChild(img.node);\n    }\n    return img;\n  }\n  // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addXaxisAnnotationExternal(params, pushToMemory, context) {\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"xaxis\",\n      contextMethod: context.addXaxisAnnotation\n    });\n    return context;\n  }\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addYaxisAnnotationExternal(params, pushToMemory, context) {\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"yaxis\",\n      contextMethod: context.addYaxisAnnotation\n    });\n    return context;\n  }\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addPointAnnotationExternal(params, pushToMemory, context) {\n    if (typeof this.invertAxis === \"undefined\") {\n      this.invertAxis = context.w.globals.isBarHorizontal;\n    }\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"point\",\n      contextMethod: context.addPointAnnotation\n    });\n    return context;\n  }\n  /** @param {{params: any, pushToMemory: any, context: any, type: any, contextMethod: any}} opts */\n  addAnnotationExternal({\n    params,\n    pushToMemory,\n    context,\n    type,\n    contextMethod\n  }) {\n    const me = context;\n    const w = me.w;\n    const parent = w.dom.baseEl.querySelector(`.apexcharts-${type}-annotations`);\n    const index = parent.childNodes.length + 1;\n    const options2 = new Options();\n    const axesAnno = Object.assign(\n      {},\n      type === \"xaxis\" ? options2.xAxisAnnotation : type === \"yaxis\" ? options2.yAxisAnnotation : options2.pointAnnotation\n    );\n    const anno = Utils$1.extend(axesAnno, params);\n    switch (type) {\n      case \"xaxis\":\n        this.addXaxisAnnotation(anno, parent, index);\n        break;\n      case \"yaxis\":\n        this.addYaxisAnnotation(anno, parent, index);\n        break;\n      case \"point\":\n        this.addPointAnnotation(anno, parent, index);\n        break;\n    }\n    const axesAnnoLabel = w.dom.baseEl.querySelector(\n      `.apexcharts-${type}-annotations .apexcharts-${type}-annotation-label[rel='${index}']`\n    );\n    const elRect = this.helpers.addBackgroundToAnno(axesAnnoLabel, anno);\n    if (elRect) {\n      parent.insertBefore(elRect.node, axesAnnoLabel);\n    }\n    if (pushToMemory) {\n      w.globals.memory.methodsToExec.push({\n        context: me,\n        id: anno.id ? anno.id : Utils$1.randomId(),\n        method: contextMethod,\n        label: \"addAnnotation\",\n        params\n      });\n    }\n    return context;\n  }\n  /**\n   * Remove the shared point-annotation hover tooltip node.\n   *\n   * `hidePointTooltip` is wired only to the marker's `mouseleave`; if the marker\n   * is torn down while hovered (clearAnnotations / removeAnnotation / a redraw),\n   * that never fires and the tooltip is left `.apexcharts-active`. A stale active\n   * annotation tooltip then permanently suppresses the series tooltip (see the\n   * guard in Tooltip.drawTooltip added by b1369f5ab). Removing the node clears\n   * both the ghost box and the stale state; it is recreated on the next hover.\n   * @param {any} w\n   */\n  _removeAnnotationTooltip(w) {\n    const el = w.dom.elWrap && w.dom.elWrap.querySelector(\".apexcharts-annotation-tooltip\");\n    if (el && el.parentNode) {\n      el.parentNode.removeChild(el);\n    }\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  clearAnnotations(ctx) {\n    const w = ctx.w;\n    this._removeAnnotationTooltip(w);\n    const annos = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\"\n    );\n    for (let i = w.globals.memory.methodsToExec.length - 1; i >= 0; i--) {\n      if (w.globals.memory.methodsToExec[i].label === \"addText\" || w.globals.memory.methodsToExec[i].label === \"addAnnotation\") {\n        w.globals.memory.methodsToExec.splice(i, 1);\n      }\n    }\n    Array.prototype.forEach.call(annos, (a) => {\n      while (a.firstChild) {\n        a.removeChild(a.firstChild);\n      }\n    });\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {string} id\n   */\n  removeAnnotation(ctx, id) {\n    const w = ctx.w;\n    this._removeAnnotationTooltip(w);\n    const annos = w.dom.baseEl.querySelectorAll(`.${id}`);\n    if (annos) {\n      w.globals.memory.methodsToExec.map((m, i) => {\n        if (m.id === id) {\n          w.globals.memory.methodsToExec.splice(i, 1);\n        }\n      });\n      Object.keys(w.config.annotations).forEach((key) => {\n        const annotationArray = w.config.annotations[key];\n        if (Array.isArray(annotationArray)) {\n          w.config.annotations[key] = annotationArray.filter((m) => m.id !== id);\n        }\n      });\n      Array.prototype.forEach.call(annos, (a) => {\n        a.parentElement.removeChild(a);\n      });\n    }\n  }\n}\nApexCharts.registerFeatures({ annotations: Annotations });\nclass KeyboardNavigation {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.seriesIndex = 0;\n    this.dataPointIndex = 0;\n    this.active = false;\n    this._tooltipDismissed = false;\n    this._focusedEl = null;\n    this._hoveredBarEl = null;\n    this._enlargedScatterMarker = null;\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n    this._onLegendClick = this._onLegendClick.bind(this);\n    this._onPointerDown = this._onPointerDown.bind(this);\n    this._lastPointerDownAt = 0;\n  }\n  // ─── Public API ───────────────────────────────────────────────────────────\n  /**\n   * Called after the chart and tooltip have been fully rendered.\n   * Attaches event listeners and makes the SVG keyboard-focusable.\n   */\n  init() {\n    const w = this.w;\n    const svgEl = w.dom.Paper.node;\n    if (!svgEl) return;\n    svgEl.setAttribute(\"tabindex\", \"0\");\n    svgEl.addEventListener(\"focus\", this._onFocus);\n    svgEl.addEventListener(\"blur\", this._onBlur);\n    svgEl.addEventListener(\"mousedown\", this._onPointerDown, { capture: true });\n    svgEl.addEventListener(\"pointerdown\", this._onPointerDown, {\n      capture: true\n    });\n    svgEl.addEventListener(\"touchstart\", this._onPointerDown, {\n      capture: true,\n      passive: true\n    });\n    svgEl.addEventListener(\"keydown\", this._onKeyDown, { passive: false });\n    this.ctx.events.addEventListener(\"legendClick\", this._onLegendClick);\n  }\n  /**\n   * Removes all event listeners. Called from chart.destroy().\n   */\n  destroy() {\n    const w = this.w;\n    const svgEl = w.dom.Paper && w.dom.Paper.node;\n    this.ctx.events.removeEventListener(\"legendClick\", this._onLegendClick);\n    if (!svgEl) return;\n    svgEl.removeEventListener(\"focus\", this._onFocus);\n    svgEl.removeEventListener(\"blur\", this._onBlur);\n    svgEl.removeEventListener(\"keydown\", this._onKeyDown);\n    svgEl.removeEventListener(\n      \"mousedown\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n    svgEl.removeEventListener(\n      \"pointerdown\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n    svgEl.removeEventListener(\n      \"touchstart\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n  }\n  // Records the timestamp of the most recent pointer-down inside the SVG.\n  // `_onFocus` reads this to distinguish keyboard-driven focus (no recent\n  // pointer activity) from mouse-driven focus (pointer event within the\n  // last 100 ms). Stays a no-op for keyboard users.\n  _onPointerDown() {\n    this._lastPointerDownAt = Date.now();\n  }\n  /**\n   * Called from Events.js keydown handler. Navigation keys are already handled\n   * by the direct SVG listener (which can call preventDefault). This entry\n   * point is intentionally a no-op — Events.js still fires the public keyDown\n   * callback and fireEvent('keydown') independently.\n   * @param {Event} _e\n   */\n  handleKey(_e) {\n  }\n  // ─── Focus / blur ─────────────────────────────────────────────────────────\n  _onFocus() {\n    if (!this._isNavEnabled()) return;\n    if (Date.now() - this._lastPointerDownAt < 100) {\n      return;\n    }\n    this.active = true;\n    this._clampCursor();\n    this._snapToVisibleRange();\n    this._showCurrentPoint();\n  }\n  _onBlur() {\n    this.active = false;\n    this._tooltipDismissed = false;\n    this._hideFocus();\n  }\n  // Called when the user clicks a legend item (collapse/expand a series).\n  // Hide the keyboard-nav tooltip — the chart is about to re-render and the\n  // current position may no longer be valid.\n  _onLegendClick() {\n    if (!this.active) return;\n    this.active = false;\n    this._hideFocus();\n  }\n  // ─── Key handler ──────────────────────────────────────────────────────────\n  /**\n   * @param {KeyboardEvent} e\n   */\n  _onKeyDown(e) {\n    var _a, _b, _c;\n    if (!this._isNavEnabled() || !this.active) return;\n    if (e.shiftKey && (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") && this._canPan()) {\n      e.preventDefault();\n      this._panBy(e.key === \"ArrowRight\" ? 1 : -1);\n      return;\n    }\n    switch (e.key) {\n      case \"ArrowRight\":\n        e.preventDefault();\n        this._move(0, 1);\n        break;\n      case \"ArrowLeft\":\n        e.preventDefault();\n        this._move(0, -1);\n        break;\n      case \"ArrowUp\":\n        e.preventDefault();\n        this._move(-1, 0);\n        break;\n      case \"ArrowDown\":\n        e.preventDefault();\n        this._move(1, 0);\n        break;\n      case \"Home\":\n        e.preventDefault();\n        this.dataPointIndex = 0;\n        this._skipNullForward();\n        this._showCurrentPoint();\n        break;\n      case \"End\":\n        e.preventDefault();\n        this.dataPointIndex = this._getDataPointCount(this.seriesIndex) - 1;\n        this._skipNullBackward();\n        this._showCurrentPoint();\n        break;\n      case \"Enter\":\n      case \" \":\n        e.preventDefault();\n        this._fireClick();\n        break;\n      case \"+\":\n      case \"=\":\n        if (this._canZoom()) {\n          e.preventDefault();\n          (_a = this.ctx.toolbar) == null ? void 0 : _a.handleZoomIn();\n          this._announce(\"Zoomed in\");\n        }\n        break;\n      case \"-\":\n      case \"_\":\n        if (this._canZoom()) {\n          e.preventDefault();\n          (_b = this.ctx.toolbar) == null ? void 0 : _b.handleZoomOut();\n          this._announce(\"Zoomed out\");\n        }\n        break;\n      case \"0\":\n        if (this._canZoom() && this.w.interact.zoomed) {\n          e.preventDefault();\n          (_c = this.ctx.toolbar) == null ? void 0 : _c.handleZoomReset();\n          this._announce(\"Zoom reset\");\n        }\n        break;\n      case \"Escape\":\n        e.preventDefault();\n        if (!this._tooltipDismissed) {\n          this._tooltipDismissed = true;\n          this._hideFocus();\n        } else {\n          this.active = false;\n          this._tooltipDismissed = false;\n          this._hideFocus();\n        }\n        break;\n    }\n  }\n  // ─── Zoom / pan (keyboard alternatives for drag gestures) ─────────────────\n  _canZoom() {\n    const w = this.w;\n    return Boolean(\n      w.globals.axisCharts && w.config.chart.zoom && w.config.chart.zoom.enabled\n    );\n  }\n  _canPan() {\n    return this._canZoom();\n  }\n  /**\n   * Shift the visible x-range by ~10% in the given direction.\n   * @param {number} direction +1 = right, -1 = left\n   */\n  _panBy(direction) {\n    const w = this.w;\n    const toolbar = this.ctx.toolbar;\n    if (!toolbar) return;\n    const minX = Number(w.globals.minX);\n    const maxX = Number(w.globals.maxX);\n    if (!isFinite(minX) || !isFinite(maxX) || minX === maxX) return;\n    const span = maxX - minX;\n    const step = span * 0.1 * direction;\n    toolbar.zoomUpdateOptions(minX + step, maxX + step);\n    this._announce(direction > 0 ? \"Panned right\" : \"Panned left\");\n  }\n  // ─── Navigation ───────────────────────────────────────────────────────────\n  /**\n   * @param {number} dSeries\n   * @param {number} dPoint\n   */\n  _move(dSeries, dPoint) {\n    const w = this.w;\n    const wrapAround = w.config.chart.accessibility.keyboard.navigation.wrapAround;\n    if (dSeries !== 0) {\n      const ttCtx = this.w.globals.tooltip;\n      if (ttCtx && ttCtx.tConfig && ttCtx.tConfig.shared) {\n        const j = this.dataPointIndex;\n        const isActuallyShared = ttCtx.tooltipUtil && ttCtx.tooltipUtil.isXoverlap(j) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n        if (isActuallyShared) return;\n      }\n      const total = this._getSeriesCount();\n      let si = this.seriesIndex + dSeries;\n      let attempts = 0;\n      while (attempts < total) {\n        if (si < 0) si = wrapAround ? total - 1 : 0;\n        if (si >= total) si = wrapAround ? 0 : total - 1;\n        if (!w.globals.collapsedSeriesIndices.includes(si)) break;\n        si += dSeries;\n        attempts++;\n      }\n      this.seriesIndex = si;\n      const dpCount = this._getDataPointCount(si);\n      if (this.dataPointIndex >= dpCount) {\n        this.dataPointIndex = dpCount - 1;\n      }\n    }\n    if (dPoint !== 0) {\n      const dpCount = this._getDataPointCount(this.seriesIndex);\n      let di = this.dataPointIndex + dPoint;\n      if (di < 0) di = wrapAround ? dpCount - 1 : 0;\n      if (di >= dpCount) di = wrapAround ? 0 : dpCount - 1;\n      this.dataPointIndex = di;\n      if (dPoint > 0) {\n        this._skipNullForward();\n      } else {\n        this._skipNullBackward();\n      }\n      if (!this._isDataPointVisible(this.seriesIndex, this.dataPointIndex)) {\n        this._snapToVisibleRangeInDirection(dPoint);\n      }\n    }\n    this._showCurrentPoint();\n  }\n  /** Advance dataPointIndex forward past any nulls */\n  _skipNullForward() {\n    const w = this.w;\n    const si = this.seriesIndex;\n    const dpCount = this._getDataPointCount(si);\n    let di = this.dataPointIndex;\n    let attempts = 0;\n    if (!Array.isArray(w.seriesData.series[si])) return;\n    while (attempts < dpCount && w.seriesData.series[si][di] === null) {\n      di = (di + 1) % dpCount;\n      attempts++;\n    }\n    this.dataPointIndex = di;\n  }\n  /** Retreat dataPointIndex backward past any nulls */\n  _skipNullBackward() {\n    const w = this.w;\n    const si = this.seriesIndex;\n    const dpCount = this._getDataPointCount(si);\n    let di = this.dataPointIndex;\n    let attempts = 0;\n    if (!Array.isArray(w.seriesData.series[si])) return;\n    while (attempts < dpCount && w.seriesData.series[si][di] === null) {\n      di = (di - 1 + dpCount) % dpCount;\n      attempts++;\n    }\n    this.dataPointIndex = di;\n  }\n  // ─── Display ──────────────────────────────────────────────────────────────\n  _showCurrentPoint() {\n    const { seriesIndex: i, dataPointIndex: j } = this;\n    const w = this.w;\n    const ttCtx = w.globals.tooltip;\n    if (!ttCtx || !ttCtx.ttItems) return;\n    w.interact.capturedSeriesIndex = i;\n    w.interact.capturedDataPointIndex = j;\n    this._applyFocusClass(i, j);\n    this._showTooltip(\n      i,\n      j,\n      /** @type {any} */\n      ttCtx\n    );\n  }\n  _hideFocus() {\n    const w = this.w;\n    const ttCtx = (\n      /** @type {any} */\n      w.globals.tooltip\n    );\n    this._removeFocusClass();\n    this._leaveHoveredBar();\n    if (!ttCtx) return;\n    if (ttCtx.marker) {\n      ttCtx.marker.resetPointsSize();\n    }\n    this._enlargedScatterMarker = null;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (tooltipEl) {\n      tooltipEl.classList.remove(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n      }\n    }\n    w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    if (xcrosshairs) xcrosshairs.classList.remove(\"apexcharts-active\");\n  }\n  // ─── Tooltip display per chart type ───────────────────────────────────────\n  /**\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltip(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return;\n    const cachedDims = ttCtx.getCachedDimensions();\n    ttCtx.tooltipRect = {\n      x: 0,\n      y: 0,\n      ttWidth: cachedDims.ttWidth || 0,\n      ttHeight: cachedDims.ttHeight || 0\n    };\n    this._setSyntheticEvent(i, j, ttCtx);\n    w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n    tooltipEl.classList.add(\"apexcharts-active\");\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      tooltipEl.removeAttribute(\"aria-hidden\");\n    }\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      this._showTooltipNonAxis(i, j, ttCtx, tooltipEl);\n    } else if (type === \"radialBar\") {\n      this._showTooltipRadialBar(i, j, ttCtx, tooltipEl);\n    } else if (type === \"heatmap\" || type === \"treemap\") {\n      this._showTooltipHeatTree(i, j, ttCtx, tooltipEl, type);\n    } else if (type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\") {\n      this._showTooltipBar(i, j, ttCtx);\n    } else {\n      this._showTooltipAxisLine(i, j, ttCtx);\n    }\n  }\n  /**\n   * Set ttCtx.e to a synthetic mouse-event-like object whose clientX/Y point\n   * to the centre of the current data-point element.  This ensures that any\n   * positioning helper that reads ttCtx.e (followCursor path in moveTooltip,\n   * moveStickyTooltipOverBars, moveDynamicPointsOnHover, etc.) gets valid\n   * coordinates rather than crashing on undefined.\n   *\n   * For chart types that don't have a concrete SVG element per data point\n   * (pie, radialBar) we fall back to the SVG centre.\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _setSyntheticEvent(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    let clientX = 0;\n    let clientY = 0;\n    const el = this._getFocusableElement(i, j);\n    if (el) {\n      const rect = el.getBoundingClientRect();\n      clientX = rect.left + rect.width / 2;\n      clientY = rect.top + rect.height / 2;\n    } else if (w.globals.pointsArray && w.globals.pointsArray[i] && w.globals.pointsArray[i][j]) {\n      const pt = w.globals.pointsArray[i][j];\n      const elGrid = ttCtx.getElGrid && ttCtx.getElGrid();\n      if (elGrid) {\n        const gridRect = elGrid.getBoundingClientRect();\n        clientX = gridRect.left + (pt[0] || 0);\n        clientY = gridRect.top + (pt[1] || 0);\n      }\n    } else {\n      const svgEl = w.dom.Paper && w.dom.Paper.node;\n      if (svgEl) {\n        const svgRect = svgEl.getBoundingClientRect();\n        clientX = svgRect.left + svgRect.width / 2;\n        clientY = svgRect.top + svgRect.height / 2;\n      }\n    }\n    if (type === \"line\" || type === \"area\" || type === \"rangeArea\" || type === \"scatter\" || type === \"bubble\" || type === \"radar\") {\n      if (w.globals.pointsArray && w.globals.pointsArray[i] && w.globals.pointsArray[i][j]) {\n        const pt = w.globals.pointsArray[i][j];\n        const elGrid = ttCtx.getElGrid && ttCtx.getElGrid();\n        if (elGrid) {\n          const gridRect = elGrid.getBoundingClientRect();\n          clientX = gridRect.left + (pt[0] || 0);\n          clientY = gridRect.top + (pt[1] || 0);\n        }\n      }\n    }\n    ttCtx.e = { type: \"mousemove\", clientX, clientY };\n  }\n  /**\n   * bar / column / candlestick / boxPlot / rangeBar\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltipBar(i, j, ttCtx) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const shared = ttCtx.tConfig.shared && (ttCtx.tooltipUtil.isXoverlap(j) || w.globals.isBarHorizontal) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n    const rangeData = (\n      /** @type {any} */\n      (_d = (_c = (_b = (_a = w.rangeData.seriesRange) == null ? void 0 : _a[i]) == null ? void 0 : _b[j]) == null ? void 0 : _c.y) == null ? void 0 : _d[0]\n    );\n    ttCtx.tooltipLabels.drawSeriesTexts(__spreadProps(__spreadValues(__spreadValues({\n      ttItems: ttCtx.ttItems,\n      i,\n      j\n    }, (rangeData == null ? void 0 : rangeData.y1) !== void 0 && { y1: rangeData.y1 }), (rangeData == null ? void 0 : rangeData.y2) !== void 0 && { y2: rangeData.y2 }), {\n      shared\n    }));\n    const parent = `.apexcharts-series[data\\\\:realIndex='${i}']`;\n    const elPath = w.dom.Paper.findOne(\n      `${parent} path[j='${j}'], ${parent} circle[j='${j}'], ${parent} rect[j='${j}']`\n    );\n    if (elPath) {\n      this._leaveHoveredBar();\n      const graphics = new Graphics(this.w, this.ctx);\n      graphics.pathMouseEnter(elPath, null);\n      this._hoveredBarEl = elPath;\n    }\n    if (w.globals.isBarHorizontal) {\n      const barDomEl = elPath && elPath.node;\n      if (barDomEl) {\n        const wrapRect = w.dom.elWrap.getBoundingClientRect();\n        const barRect = barDomEl.getBoundingClientRect();\n        const barCx = barRect.left - wrapRect.left;\n        const barCy = barRect.top - wrapRect.top;\n        const bh = barRect.height;\n        const bw = barRect.width;\n        const ttWidth = ttCtx.tooltipRect.ttWidth || 0;\n        const ttHeight = ttCtx.tooltipRect.ttHeight || 0;\n        const y = barCy + bh / 2 - ttHeight / 2;\n        let x = barCx + bw;\n        const baselineX = ttCtx.xyRatios && ttCtx.xyRatios.baseLineInvertedY != null ? ttCtx.xyRatios.baseLineInvertedY : wrapRect.width / 2;\n        if (barCx < baselineX) {\n          x = barCx - ttWidth;\n        }\n        const tooltipEl = ttCtx.getElTooltip();\n        if (tooltipEl) {\n          tooltipEl.style.left = x + \"px\";\n          tooltipEl.style.top = y + \"px\";\n        }\n      }\n    } else {\n      ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, i);\n    }\n  }\n  /**\n   * line / area / scatter / bubble / radar / rangeArea\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltipAxisLine(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const sharedConfigured = ttCtx.tConfig.shared;\n    const shared = sharedConfigured && ttCtx.tooltipUtil.isXoverlap(j) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      j,\n      shared\n    });\n    const isScatterLike = type === \"scatter\" || type === \"bubble\";\n    const hasVisibleMarkers = w.globals.markers.largestSize > 0;\n    if (isScatterLike) {\n      this._showScatterBubblePoint(i, j, ttCtx);\n    } else if (hasVisibleMarkers) {\n      if (shared) {\n        ttCtx.marker.enlargePoints(j);\n      } else {\n        ttCtx.tooltipPosition.moveDynamicPointOnHover(j, i);\n      }\n    } else if (shared) {\n      ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n    } else {\n      ttCtx.tooltipPosition.moveDynamicPointOnHover(j, i);\n    }\n  }\n  /**\n   * Scatter / bubble: find the specific marker element for (seriesIndex i,\n   * dataPointIndex j), resize only that element, and position the tooltip at\n   * its coordinates — mirroring what Position.moveMarkers does for mouse hover.\n   *\n   * Unlike enlargePoints(j) which queries ALL series for rel===j (causing\n   * multiple bubbles to enlarge and tooltip to land on the wrong one), this\n   * method queries by both series index AND data-point index for precision.\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showScatterBubblePoint(i, j, ttCtx) {\n    const baseEl = this.w.dom.baseEl;\n    if (this._enlargedScatterMarker) {\n      ttCtx.marker.oldPointSize(this._enlargedScatterMarker);\n      this._enlargedScatterMarker = null;\n    }\n    const seriesEl = baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${i}']`\n    );\n    if (!seriesEl) return;\n    const markerEl = seriesEl.querySelector(`.apexcharts-marker[rel='${j}']`);\n    if (!markerEl) return;\n    ttCtx.marker.enlargeCurrentPoint(j, markerEl);\n    this._enlargedScatterMarker = markerEl;\n  }\n  /**\n   * pie / donut / polarArea\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   */\n  _showTooltipNonAxis(i, j, ttCtx, tooltipEl) {\n    var _a, _b;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i: j,\n      shared: false\n    });\n    const tooltipBound = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipBound.width || ttCtx.tooltipRect.ttWidth || 0;\n    const ttHeight = tooltipBound.height || ttCtx.tooltipRect.ttHeight || 0;\n    const sliceEl = w.dom.baseEl.querySelector(`.apexcharts-pie-area[j='${j}']`);\n    if (sliceEl) {\n      const cx = parseFloat((_a = sliceEl.getAttribute(\"data:cx\")) != null ? _a : \"\");\n      const cy = parseFloat((_b = sliceEl.getAttribute(\"data:cy\")) != null ? _b : \"\");\n      if (!isNaN(cx) && !isNaN(cy)) {\n        const svgBound = w.dom.Paper.node.getBoundingClientRect();\n        const wrapBound = w.dom.elWrap.getBoundingClientRect();\n        const offsetX = svgBound.left - wrapBound.left;\n        const offsetY = svgBound.top - wrapBound.top;\n        tooltipEl.style.left = offsetX + cx - ttWidth / 2 + \"px\";\n        tooltipEl.style.top = offsetY + cy - ttHeight - 10 + \"px\";\n      }\n    }\n  }\n  /**\n   * radialBar — one ring per series, single value each\n   * @param {number} i\n   * @param {any} _j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   */\n  _showTooltipRadialBar(i, _j, ttCtx, tooltipEl) {\n    var _a;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      shared: false\n    });\n    const { ttWidth = 0, ttHeight = 0 } = ttCtx.getCachedDimensions();\n    const arcEl = w.dom.baseEl.querySelector(\n      `.apexcharts-radialbar-series[data\\\\:realIndex='${i}'] path`\n    );\n    if (arcEl) {\n      const angle = parseFloat((_a = arcEl.getAttribute(\"data:angle\")) != null ? _a : \"\") || 0;\n      const initialAngle = w.config.plotOptions.radialBar.startAngle || 0;\n      const midAngle = initialAngle + angle / 2;\n      const centerX = w.layout.gridWidth / 2;\n      const centerY = w.layout.gridHeight / 2;\n      const radialSize = w.globals.radialSize || Math.min(w.layout.gridWidth, w.layout.gridHeight) / 2;\n      const seriesCount = w.seriesData.series.length;\n      const trackSize = radialSize / Math.max(seriesCount, 1);\n      const outerRadius = radialSize - i * trackSize;\n      const innerRadius = outerRadius - trackSize;\n      const ringRadius = (outerRadius + innerRadius) / 2;\n      const centroid = Utils$1.polarToCartesian(\n        centerX,\n        centerY,\n        ringRadius,\n        midAngle\n      );\n      const x = centroid.x + (w.layout.translateX || 0);\n      const y = centroid.y + (w.layout.translateY || 0);\n      tooltipEl.style.left = x - ttWidth / 2 + \"px\";\n      tooltipEl.style.top = y - ttHeight - 10 + \"px\";\n    }\n  }\n  /**\n   * heatmap / treemap — position tooltip using element bounding rect\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   * @param {string} type\n   */\n  _showTooltipHeatTree(i, j, ttCtx, tooltipEl, type) {\n    var _a, _b;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      j,\n      shared: false\n    });\n    const tooltipRect = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipRect.width || ttCtx.tooltipRect.ttWidth || 0;\n    const ttHeight = tooltipRect.height || ttCtx.tooltipRect.ttHeight || 0;\n    const rectClass = type === \"heatmap\" ? \"apexcharts-heatmap-rect\" : \"apexcharts-treemap-rect\";\n    const cell = w.dom.baseEl.querySelector(`.${rectClass}[i='${i}'][j='${j}']`);\n    if (cell) {\n      const wrapRect = w.dom.elWrap.getBoundingClientRect();\n      const cellRect = cell.getBoundingClientRect();\n      const cellCx = cellRect.left - wrapRect.left;\n      const cellCy = cellRect.top - wrapRect.top;\n      const cellWidth = cellRect.width;\n      const cellHeight = cellRect.height;\n      const cx = parseFloat((_a = cell.getAttribute(\"cx\")) != null ? _a : \"\");\n      const cellWidthAttr = parseFloat((_b = cell.getAttribute(\"width\")) != null ? _b : \"\");\n      ttCtx.tooltipPosition.moveXCrosshairs(cx + cellWidthAttr / 2);\n      let x = cellCx + cellWidth + ttWidth / 2;\n      const y = cellCy + cellHeight / 2 - ttHeight / 2;\n      if (cellCx + cellWidth > w.layout.gridWidth / 2) {\n        x = cellCx - ttWidth / 2;\n      }\n      tooltipEl.style.left = x + \"px\";\n      tooltipEl.style.top = y + \"px\";\n    }\n  }\n  // ─── Focus class management ───────────────────────────────────────────────\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  _applyFocusClass(i, j) {\n    this._removeFocusClass();\n    const el = this._getFocusableElement(i, j);\n    if (el) {\n      el.classList.add(\"apexcharts-keyboard-focused\");\n      el.setAttribute(\"role\", \"img\");\n      const label = this._buildPointLabel(i, j);\n      if (label) el.setAttribute(\"aria-label\", label);\n      this._focusedEl = el;\n    }\n  }\n  _removeFocusClass() {\n    if (this._focusedEl) {\n      this._focusedEl.classList.remove(\"apexcharts-keyboard-focused\");\n      this._focusedEl.removeAttribute(\"role\");\n      this._focusedEl.removeAttribute(\"aria-label\");\n      this._focusedEl = null;\n    }\n  }\n  /**\n   * Build an accessible label for the data point at (i, j) using the same\n   * formatters the visible tooltip / axis labels use, so SR output matches\n   * the visual presentation.\n   * @param {number} i\n   * @param {number} j\n   * @returns {string}\n   */\n  _buildPointLabel(i, j) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const type = w.config.chart.type;\n    const seriesNames = w.seriesData.seriesNames || [];\n    const series = w.seriesData.series || [];\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      const sliceLabel = (_b = ((_a = w.labelData) == null ? void 0 : _a.labels) && w.labelData.labels[j]) != null ? _b : \"\";\n      const value = Array.isArray(series) ? series[j] : \"\";\n      return sliceLabel ? `${sliceLabel}: ${value}` : `${value}`;\n    }\n    if (type === \"radialBar\") {\n      const seriesName2 = seriesNames[i] || `Series ${i + 1}`;\n      const value = Array.isArray(series) ? series[i] : \"\";\n      return `${seriesName2}: ${value}`;\n    }\n    const seriesName = seriesNames[i] || `Series ${i + 1}`;\n    const row = Array.isArray(series[i]) ? series[i] : [];\n    const rawValue = row[j];\n    let formattedValue = rawValue == null ? \"\" : String(rawValue);\n    const yFormatter = (_d = (_c = w.formatters) == null ? void 0 : _c.yLabelFormatters) == null ? void 0 : _d[i];\n    if (typeof yFormatter === \"function\") {\n      try {\n        formattedValue = yFormatter(rawValue, {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n      } catch (e) {\n      }\n    }\n    let category = \"\";\n    const categoryLabels = (_e = w.labelData) == null ? void 0 : _e.categoryLabels;\n    const seriesX = (_g = (_f = w.seriesData) == null ? void 0 : _f.seriesX) == null ? void 0 : _g[i];\n    if (Array.isArray(categoryLabels) && categoryLabels[j] != null) {\n      category = String(categoryLabels[j]);\n    } else if (Array.isArray(seriesX) && seriesX[j] != null) {\n      const xFormatter = (_h = w.formatters) == null ? void 0 : _h.xLabelFormatter;\n      if (typeof xFormatter === \"function\") {\n        try {\n          category = String(\n            xFormatter(seriesX[j], { seriesIndex: i, dataPointIndex: j, w })\n          );\n        } catch (e) {\n          category = String(seriesX[j]);\n        }\n      } else {\n        category = String(seriesX[j]);\n      }\n    }\n    return category ? `${seriesName}: ${formattedValue}, ${category}` : `${seriesName}: ${formattedValue}`;\n  }\n  _leaveHoveredBar() {\n    if (this._hoveredBarEl) {\n      const graphics = new Graphics(this.w, this.ctx);\n      graphics.pathMouseLeave(this._hoveredBarEl, null);\n      this._hoveredBarEl = null;\n    }\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  _getFocusableElement(i, j) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const baseEl = w.dom.baseEl;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return baseEl.querySelector(`.apexcharts-pie-area[j='${j}']`);\n    }\n    if (type === \"heatmap\") {\n      return baseEl.querySelector(\n        `.apexcharts-heatmap-rect[i='${i}'][j='${j}']`\n      );\n    }\n    if (type === \"treemap\") {\n      return baseEl.querySelector(\n        `.apexcharts-treemap-rect[i='${i}'][j='${j}']`\n      );\n    }\n    if (type === \"radialBar\") {\n      return baseEl.querySelector(\n        `.apexcharts-radialbar-series[data\\\\:realIndex='${i}'] path`\n      );\n    }\n    if (type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\") {\n      return baseEl.querySelector(\n        `.apexcharts-series[data\\\\:realIndex='${i}'] path[j='${j}']`\n      );\n    }\n    const marker = baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${i}'] .apexcharts-marker[rel='${j}']`\n    );\n    return marker || null;\n  }\n  // ─── Click / Enter ────────────────────────────────────────────────────────\n  _fireClick() {\n    const w = this.w;\n    const ttCtx = w.globals.tooltip;\n    if (!ttCtx) return;\n    const syntheticEvent = {\n      type: \"mouseup\",\n      clientX: 0,\n      clientY: 0\n    };\n    ttCtx.markerClick(syntheticEvent, this.seriesIndex, this.dataPointIndex);\n  }\n  // ─── Helpers ──────────────────────────────────────────────────────────────\n  _isNavEnabled() {\n    const a11y = this.w.config.chart.accessibility;\n    return a11y.enabled && a11y.keyboard.enabled && a11y.keyboard.navigation.enabled;\n  }\n  _getSeriesCount() {\n    const w = this.w;\n    const type = w.config.chart.type;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return 1;\n    }\n    return w.seriesData.series.length;\n  }\n  /**\n   * @param {number} si\n   */\n  _getDataPointCount(si) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return w.seriesData.series.length;\n    }\n    const series = w.seriesData.series;\n    return series[si] && Array.isArray(series[si]) ? series[si].length : 0;\n  }\n  _clampCursor() {\n    const seriesCount = this._getSeriesCount();\n    if (this.seriesIndex >= seriesCount) this.seriesIndex = seriesCount - 1;\n    if (this.seriesIndex < 0) this.seriesIndex = 0;\n    const dpCount = this._getDataPointCount(this.seriesIndex);\n    if (this.dataPointIndex >= dpCount) this.dataPointIndex = dpCount - 1;\n    if (this.dataPointIndex < 0) this.dataPointIndex = 0;\n  }\n  /**\n   * When the chart is zoomed in, the current dataPointIndex may point to a\n   * data point that is outside the visible viewport. Snap the cursor to the\n   * first data point whose x-value falls within [minX, maxX].\n   *\n   * Only adjusts when w.seriesData.seriesX is populated (numeric/datetime axes).\n   * Category-only charts (seriesX entries are strings or auto-indices) are\n   * unaffected — all points are always visible.\n   */\n  _snapToVisibleRange() {\n    const w = this.w;\n    const gl = w.globals;\n    const si = this.seriesIndex;\n    if (!w.interact.zoomed) return;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX || !seriesX.length) return;\n    const minX = gl.minX;\n    const maxX = gl.maxX;\n    if (minX === void 0 || maxX === void 0) return;\n    const currentX = seriesX[this.dataPointIndex];\n    if (currentX >= minX && currentX <= maxX) return;\n    const dpCount = seriesX.length;\n    for (let di = 0; di < dpCount; di++) {\n      if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n        this.dataPointIndex = di;\n        return;\n      }\n    }\n  }\n  /**\n   * Snap to the nearest visible data point in the given navigation direction.\n   * direction > 0 → find the first visible point (left boundary of zoomed range)\n   * direction < 0 → find the last visible point (right boundary of zoomed range)\n   * @param {number} direction\n   */\n  _snapToVisibleRangeInDirection(direction) {\n    const w = this.w;\n    const gl = w.globals;\n    const si = this.seriesIndex;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX || !seriesX.length) return;\n    const minX = gl.minX;\n    const maxX = gl.maxX;\n    if (minX === void 0 || maxX === void 0) return;\n    const dpCount = seriesX.length;\n    if (direction >= 0) {\n      for (let di = 0; di < dpCount; di++) {\n        if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n          this.dataPointIndex = di;\n          return;\n        }\n      }\n    } else {\n      for (let di = dpCount - 1; di >= 0; di--) {\n        if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n          this.dataPointIndex = di;\n          return;\n        }\n      }\n    }\n  }\n  /**\n   * Check whether the data point at (si, di) is within the current visible\n   * x-axis range. Used to skip out-of-viewport points during keyboard nav.\n   * @param {number} si\n   * @param {number} di\n   */\n  _isDataPointVisible(si, di) {\n    const w = this.w;\n    const gl = w.globals;\n    if (!w.interact.zoomed) return true;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX) return true;\n    const x = seriesX[di];\n    if (x === void 0) return true;\n    return x >= gl.minX && x <= gl.maxX;\n  }\n  /**\n   * Push a short status message to the visually-hidden aria-live region so\n   * screen readers announce zoom / pan / reset events that have no inherent\n   * tooltip update. Silently no-op if the region is missing or announcements\n   * are disabled.\n   * @param {string} message\n   */\n  _announce(message) {\n    const w = this.w;\n    if (!w.config.chart.accessibility.announcements.enabled) return;\n    const baseEl = w.dom.baseEl;\n    if (!baseEl) return;\n    const region = baseEl.querySelector(\".apexcharts-sr-status\");\n    if (!region) return;\n    region.textContent = \"\";\n    setTimeout(() => {\n      region.textContent = message;\n    }, 0);\n  }\n}\nApexCharts.registerFeatures({ keyboardNavigation: KeyboardNavigation });\nconst BAR_FAMILY = /* @__PURE__ */ new Set([\"bar\", \"funnel\", \"pyramid\"]);\nconst RADIAL_FAMILY = /* @__PURE__ */ new Set([\"pie\", \"donut\", \"polarArea\", \"radialBar\", \"gauge\"]);\nconst UNIT_FAMILY = /* @__PURE__ */ new Set([\"unit\"]);\nfunction familyOf(type) {\n  if (BAR_FAMILY.has(type)) return \"bar\";\n  if (RADIAL_FAMILY.has(type)) return \"radial\";\n  if (UNIT_FAMILY.has(type)) return \"unit\";\n  return null;\n}\nclass MorphTypeChange {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._snapshot = null;\n  }\n  /**\n   * @param {string} fromType\n   * @param {string} toType\n   * @returns {boolean}\n   */\n  canMorphTypes(fromType, toType) {\n    if (fromType === toType) return false;\n    const ff = familyOf(fromType);\n    const tf = familyOf(toType);\n    if (!ff || !tf) return false;\n    return true;\n  }\n  /**\n   * @param {string} fromType\n   * @param {string} toType\n   * @param {any} newSeries\n   * @returns {boolean}\n   */\n  isCompatibleSeriesShape(fromType, toType, newSeries) {\n    if (!Array.isArray(newSeries) || newSeries.length === 0) return false;\n    const ff = familyOf(fromType);\n    const tf = familyOf(toType);\n    if (tf === \"radial\" || tf === \"unit\") {\n      if (newSeries.every((v) => typeof v === \"number\")) return true;\n      return newSeries.length === 1 && newSeries[0] && typeof newSeries[0] === \"object\" && Array.isArray(newSeries[0].data);\n    }\n    if (tf === \"bar\") {\n      return newSeries.every(\n        (s) => s && typeof s === \"object\" && Array.isArray(s.data)\n      );\n    }\n    return ff !== null && tf !== null;\n  }\n  /**\n   * Capture the live DOM of the *current* (outgoing) chart and stash it on\n   * this module. Called from `apexcharts._updateOptions` before the config\n   * merge that flips `chart.type`.\n   *\n   * Returns true if a morph is queued — caller doesn't need the value, but\n   * tests use it.\n   *\n   * @param {{ fromType: string, toType: string, newSeries: any }} args\n   * @returns {boolean}\n   */\n  captureBeforeDestroy({ fromType, toType, newSeries }) {\n    this._snapshot = null;\n    if (!Environment.isBrowser()) return false;\n    const animCfg = this.w.config.chart.animations;\n    if (!animCfg || animCfg.enabled === false) return false;\n    if (animCfg.chartTypeMorph && animCfg.chartTypeMorph.enabled === false)\n      return false;\n    if (animCfg.respectReducedMotion && prefersReducedMotion()) return false;\n    if (!this.canMorphTypes(fromType, toType)) return false;\n    if (!this.isCompatibleSeriesShape(fromType, toType, newSeries)) return false;\n    const captured = this._captureFromDOM(fromType);\n    if (!captured.length) return false;\n    const mapping = this._buildMapping(captured, fromType, toType, newSeries);\n    if (mapping.size === 0) return false;\n    this._snapshot = {\n      fromType,\n      toType,\n      mapping,\n      oldLayout: {\n        translateX: this.w.layout.translateX || 0,\n        translateY: this.w.layout.translateY || 0\n      }\n    };\n    this.w.globals.previousPaths = [];\n    return true;\n  }\n  /**\n   * Walk the outgoing chart's DOM and collect path `d` strings keyed by\n   * (realIndex, j). The selectors are scoped to the chart family — bar\n   * elements have `pathTo` set; pie/radial elements use their final `d`.\n   *\n   * @param {string} fromType\n   * @returns {Array<{ realIndex: number, j: number, d: string, fill: string|null }>}\n   */\n  _captureFromDOM(fromType) {\n    var _a;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!baseEl) return [];\n    const captured = [];\n    const fam = familyOf(fromType);\n    if (fam === \"bar\") {\n      const seriesNodes = baseEl.querySelectorAll(\n        \".apexcharts-bar-series .apexcharts-series\"\n      );\n      seriesNodes.forEach((seriesNode) => {\n        var _a2;\n        const realIndex = parseInt(\n          (_a2 = seriesNode.getAttribute(\"data:realIndex\")) != null ? _a2 : \"0\",\n          10\n        );\n        const paths = seriesNode.querySelectorAll(\"path[pathTo]\");\n        paths.forEach((p, j) => {\n          const d = p.getAttribute(\"pathTo\") || p.getAttribute(\"d\");\n          if (!d) return;\n          captured.push({\n            realIndex,\n            j,\n            d,\n            fill: p.getAttribute(\"fill\")\n          });\n        });\n      });\n    } else if (fam === \"radial\") {\n      if (fromType === \"radialBar\" || fromType === \"gauge\") {\n        const centerX = this.w.layout.gridWidth / 2;\n        const centerY = Math.min(this.w.layout.gridWidth, this.w.layout.gridHeight) / 2;\n        const rings = baseEl.querySelectorAll(\n          \".apexcharts-radial-series .apexcharts-radialbar-area\"\n        );\n        rings.forEach((p) => {\n          var _a2;\n          const parent = (\n            /** @type {Element|null} */\n            p.parentElement\n          );\n          const realIndex = parseInt(\n            (_a2 = parent == null ? void 0 : parent.getAttribute(\"data:realIndex\")) != null ? _a2 : \"0\",\n            10\n          );\n          const rawD = p.getAttribute(\"d\");\n          if (!rawD) return;\n          const strokeWidth = parseFloat(p.getAttribute(\"stroke-width\") || \"0\");\n          const d = strokeWidth > 1 ? this._radialArcToFilledSegment(\n            rawD,\n            strokeWidth,\n            centerX,\n            centerY\n          ) || rawD : rawD;\n          captured.push({\n            realIndex,\n            j: 0,\n            d,\n            fill: p.getAttribute(\"stroke\")\n          });\n        });\n      } else {\n        const slices = baseEl.querySelectorAll(\n          \".apexcharts-pie-series .apexcharts-pie-area\"\n        );\n        slices.forEach(\n          (p, i) => {\n            const d = p.getAttribute(\"d\");\n            if (!d) return;\n            captured.push({\n              realIndex: i,\n              j: 0,\n              d,\n              fill: p.getAttribute(\"fill\")\n            });\n          }\n        );\n      }\n    }\n    return captured;\n  }\n  /**\n   * Convert a radialBar's stroked open-arc `d` (\"M x1 y1 A r r 0 large sweep\n   * x2 y2\") into a closed donut-segment polygon whose FILLED rendering\n   * visually matches the original stroked arc — needed because the morph\n   * target (pie/donut/polarArea) renders by fill, not stroke. Returns null\n   * if the input doesn't match the expected M-then-A shape.\n   *\n   * @param {string} rawD\n   * @param {number} strokeWidth\n   * @param {number} centerX\n   * @param {number} centerY\n   * @returns {string | null}\n   */\n  _radialArcToFilledSegment(rawD, strokeWidth, centerX, centerY) {\n    const m = rawD.match(\n      /M\\s*(-?[\\d.]+)\\s+(-?[\\d.]+)\\s+A\\s*(-?[\\d.]+)\\s+(?:-?[\\d.]+)\\s+(?:-?[\\d.]+)\\s+(\\d)\\s+(\\d)\\s+(-?[\\d.]+)\\s+(-?[\\d.]+)/\n    );\n    if (!m) return null;\n    const x1 = parseFloat(m[1]);\n    const y1 = parseFloat(m[2]);\n    const r = parseFloat(m[3]);\n    const large = parseInt(m[4], 10);\n    const sweep = parseInt(m[5], 10);\n    const x2 = parseFloat(m[6]);\n    const y2 = parseFloat(m[7]);\n    if (!isFinite(r) || r <= 0) return null;\n    const half = strokeWidth / 2;\n    const rOuter = r + half;\n    const rInner = Math.max(0, r - half);\n    const proj = (px, py, newR) => {\n      const dx = px - centerX;\n      const dy = py - centerY;\n      const dist = Math.sqrt(dx * dx + dy * dy);\n      if (dist === 0) return { x: centerX, y: centerY };\n      const k = newR / dist;\n      return { x: centerX + dx * k, y: centerY + dy * k };\n    };\n    const o1 = proj(x1, y1, rOuter);\n    const o2 = proj(x2, y2, rOuter);\n    const i1 = proj(x1, y1, rInner);\n    const i2 = proj(x2, y2, rInner);\n    const sweepBack = sweep ? 0 : 1;\n    return `M ${o1.x} ${o1.y} A ${rOuter} ${rOuter} 0 ${large} ${sweep} ${o2.x} ${o2.y} L ${i2.x} ${i2.y} A ${rInner} ${rInner} 0 ${large} ${sweepBack} ${i1.x} ${i1.y} Z`;\n  }\n  /**\n   * Build a closed donut-segment path for the given polar arc geometry. Used\n   * by Radial.drawArcs when morphing FROM a filled wedge (pie/donut/polarArea)\n   * TO a radialBar arc: the final radialBar is rendered as a stroked open arc,\n   * but during the morph we tween d toward this closed-segment form (which\n   * looks identical to the stroked arc when filled with the same color) so\n   * the in-between frames remain visually consistent filled shapes rather\n   * than a thick-outlined wedge.\n   *\n   * @param {number} centerX\n   * @param {number} centerY\n   * @param {number} ringRadius - centerline radius of the radialBar ring\n   * @param {number} strokeWidth - the ring's stroke thickness\n   * @param {number} startAngleDeg - in degrees, 0° = top (12 o'clock)\n   * @param {number} endAngleDeg\n   * @returns {string}\n   */\n  buildRingSegmentPath(centerX, centerY, ringRadius, strokeWidth, startAngleDeg, endAngleDeg) {\n    const halfStroke = strokeWidth / 2;\n    const rOuter = ringRadius + halfStroke;\n    const rInner = Math.max(0, ringRadius - halfStroke);\n    const sRad = (startAngleDeg - 90) * Math.PI / 180;\n    const eRad = (endAngleDeg - 90) * Math.PI / 180;\n    const oStart = {\n      x: centerX + rOuter * Math.cos(sRad),\n      y: centerY + rOuter * Math.sin(sRad)\n    };\n    const oEnd = {\n      x: centerX + rOuter * Math.cos(eRad),\n      y: centerY + rOuter * Math.sin(eRad)\n    };\n    const iStart = {\n      x: centerX + rInner * Math.cos(sRad),\n      y: centerY + rInner * Math.sin(sRad)\n    };\n    const iEnd = {\n      x: centerX + rInner * Math.cos(eRad),\n      y: centerY + rInner * Math.sin(eRad)\n    };\n    const sweep = endAngleDeg > startAngleDeg ? 1 : 0;\n    const large = Math.abs(endAngleDeg - startAngleDeg) > 180 ? 1 : 0;\n    return `M ${oStart.x} ${oStart.y} A ${rOuter} ${rOuter} 0 ${large} ${sweep} ${oEnd.x} ${oEnd.y} L ${iEnd.x} ${iEnd.y} A ${rInner} ${rInner} 0 ${large} ${1 - sweep} ${iStart.x} ${iStart.y} Z`;\n  }\n  /**\n   * @returns {string | null} the chart-type the active snapshot was captured\n   *   from, or null when no morph is in flight.\n   */\n  getFromType() {\n    return this._snapshot ? this._snapshot.fromType : null;\n  }\n  /**\n   * Build a (targetKey → captured) map. The targetKey matches the lookup\n   * pattern each chart-type renderer uses when it asks\n   * `getInitialPathFor(realIndex, j)`.\n   *\n   * Strategy: flatten the captured items into a linear sequence (matching the\n   * source chart's natural DOM iteration order: series-then-point for bar,\n   * ring-by-ring for radial), then walk the target's iteration positions in\n   * the same order and pair them up 1:1. This handles every supported shape\n   * without per-pair branching:\n   *\n   *   - bar (1 series, N pts) ↔ radial-family (N items)  → linear[k] ↔ k\n   *   - bar (M series, 1 pt)  ↔ radial-family (M items)  → linear[k] ↔ k\n   *   - radial-family (N items) ↔ bar (any matching shape) → linear[k] ↔ flat target\n   *   - radial-family ↔ radial-family                    → linear[k] ↔ k\n   *\n   * @param {Array<{ realIndex: number, j: number, d: string, fill: string|null }>} captured\n   * @param {string} _fromType\n   * @param {string} toType\n   * @param {any} newSeries - the series array being passed to the new chart;\n   *   used only to derive the bar target's (realIndex, j) iteration positions.\n   */\n  _buildMapping(captured, _fromType, toType, newSeries) {\n    const map = /* @__PURE__ */ new Map();\n    const tf = familyOf(toType);\n    const flat = captured.slice().sort((a, b) => a.realIndex - b.realIndex || a.j - b.j);\n    if (tf === \"radial\" || tf === \"unit\") {\n      flat.forEach((c, i) => {\n        map.set(`${i}:0`, { d: c.d, fill: c.fill });\n      });\n      return map;\n    }\n    if (tf === \"bar\") {\n      const positions = [];\n      const series = Array.isArray(newSeries) ? newSeries : [];\n      series.forEach((s, seriesIdx) => {\n        const data = s && Array.isArray(s.data) ? s.data : [];\n        for (let j = 0; j < data.length; j++) {\n          positions.push({ realIndex: seriesIdx, j });\n        }\n      });\n      flat.forEach((c, i) => {\n        const pos = positions[i];\n        if (pos) {\n          map.set(`${pos.realIndex}:${pos.j}`, { d: c.d, fill: c.fill });\n        }\n      });\n      return map;\n    }\n    return map;\n  }\n  isActive() {\n    return this._snapshot !== null;\n  }\n  /**\n   * @param {number} realIndex\n   * @param {number} j\n   * @returns {string | null}\n   */\n  getInitialPathFor(realIndex, j) {\n    if (!this._snapshot) return null;\n    const entry = this._snapshot.mapping.get(`${realIndex}:${j}`);\n    if (!entry) return null;\n    const dx = this._snapshot.oldLayout.translateX - (this.w.layout.translateX || 0);\n    const dy = this._snapshot.oldLayout.translateY - (this.w.layout.translateY || 0);\n    return dx === 0 && dy === 0 ? entry.d : this._translatePathD(entry.d, dx, dy);\n  }\n  /**\n   * Offset every absolute coordinate in an SVG path `d` by (dx, dy).\n   *\n   * Assumes the path uses only uppercase (absolute) commands — every path\n   * ApexCharts generates does. Relative-command paths would pass through\n   * unchanged at the lowercase, which is also semantically correct (deltas\n   * don't shift under a parent translate).\n   *\n   * @param {string} d\n   * @param {number} dx\n   * @param {number} dy\n   * @returns {string}\n   */\n  _translatePathD(d, dx, dy) {\n    if (dx === 0 && dy === 0) return d;\n    const commands = parsePath(d);\n    return commands.map(\n      /** @param {any[]} c */\n      (c) => {\n        const cmd = c[0];\n        if (cmd === \"Z\") return \"Z\";\n        if (cmd === \"M\" || cmd === \"L\" || cmd === \"T\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy}`;\n        }\n        if (cmd === \"H\") return `${cmd} ${c[1] + dx}`;\n        if (cmd === \"V\") return `${cmd} ${c[1] + dy}`;\n        if (cmd === \"C\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy} ${c[3] + dx} ${c[4] + dy} ${c[5] + dx} ${c[6] + dy}`;\n        }\n        if (cmd === \"S\" || cmd === \"Q\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy} ${c[3] + dx} ${c[4] + dy}`;\n        }\n        if (cmd === \"A\") {\n          return `${cmd} ${c[1]} ${c[2]} ${c[3]} ${c[4]} ${c[5]} ${c[6] + dx} ${c[7] + dy}`;\n        }\n        return c.join(\" \");\n      }\n    ).join(\" \");\n  }\n  /**\n   * The centre point (in the NEW chart's screen space) of the captured shape\n   * for cluster `i`. Kept for callers that only need a point; the unit renderer\n   * uses getInitialBBoxFor so its dots fill the shape rather than stack on a\n   * single point.\n   * @param {number} i\n   * @returns {{ x: number, y: number } | null}\n   */\n  getInitialCenterFor(i) {\n    const box = this.getInitialBBoxFor(i);\n    if (!box) return null;\n    return { x: box.x + box.width / 2, y: box.y + box.height / 2 };\n  }\n  /**\n   * The bounding box (in the NEW chart's screen space) of the captured shape\n   * for cluster `i`. The unit (dot-cluster) renderer distributes the cluster's\n   * dots ACROSS this box as their start positions, so a tall bar visibly breaks\n   * apart into a tall column of dots that then swarm into the cluster.\n   * @param {number} i\n   * @returns {{ x: number, y: number, width: number, height: number } | null}\n   */\n  getInitialBBoxFor(i) {\n    if (!this._snapshot) return null;\n    const entry = this._snapshot.mapping.get(`${i}:0`);\n    if (!entry) return null;\n    const box = this._pathBBox(entry.d);\n    if (!box) return null;\n    const dx = this._snapshot.oldLayout.translateX - (this.w.layout.translateX || 0);\n    const dy = this._snapshot.oldLayout.translateY - (this.w.layout.translateY || 0);\n    return {\n      x: box.minX + dx,\n      y: box.minY + dy,\n      width: box.maxX - box.minX,\n      height: box.maxY - box.minY\n    };\n  }\n  /**\n   * Bounding box of an absolute-command SVG path `d`. Good enough as the burst\n   * footprint (we only need where the shape sat, not exact geometry).\n   * @param {string} d\n   * @returns {{ minX:number, minY:number, maxX:number, maxY:number } | null}\n   */\n  _pathBBox(d) {\n    const commands = parsePath(d);\n    let minX = Infinity;\n    let minY = Infinity;\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    let seen = false;\n    commands.forEach(\n      /** @param {any[]} c */\n      (c) => {\n        const cmd = c[0];\n        if (cmd === \"Z\") return;\n        let pairs = [];\n        if (cmd === \"H\") pairs = [[c[1], (minY + maxY) / 2 || c[1]]];\n        else if (cmd === \"V\") pairs = [[(minX + maxX) / 2 || c[1], c[1]]];\n        else if (cmd === \"A\") pairs = [[c[6], c[7]]];\n        else {\n          for (let k = 1; k + 1 < c.length; k += 2) pairs.push([c[k], c[k + 1]]);\n        }\n        pairs.forEach(([x, y]) => {\n          if (!isFinite(x) || !isFinite(y)) return;\n          seen = true;\n          if (x < minX) minX = x;\n          if (x > maxX) maxX = x;\n          if (y < minY) minY = y;\n          if (y > maxY) maxY = y;\n        });\n      }\n    );\n    if (!seen) return null;\n    return { minX, minY, maxX, maxY };\n  }\n  /**\n   * @param {number} realIndex\n   * @param {number} j\n   * @returns {string | null}\n   */\n  getInitialFillFor(realIndex, j) {\n    if (!this._snapshot) return null;\n    const entry = this._snapshot.mapping.get(`${realIndex}:${j}`);\n    return entry ? entry.fill : null;\n  }\n  /** @returns {number} */\n  getSpeed() {\n    const animCfg = this.w.config.chart.animations;\n    return animCfg.chartTypeMorph && animCfg.chartTypeMorph.speed || animCfg.speed || 600;\n  }\n  /**\n   * Fade newly-mounted axes / grid / legend / titles from opacity 0 → 1 in\n   * parallel with the morph. Without this the chart's chrome would pop in\n   * abruptly while the series elements are still mid-tween, which reads as a\n   * jarring layout shift.\n   */\n  applyChromeFade() {\n    var _a;\n    if (!this._snapshot || !Environment.isBrowser()) return;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!baseEl) return;\n    const speed = this.getSpeed();\n    const chromeSelectors = [\n      \".apexcharts-xaxis\",\n      \".apexcharts-yaxis\",\n      \".apexcharts-grid\",\n      \".apexcharts-gridlines-horizontal\",\n      \".apexcharts-gridlines-vertical\",\n      \".apexcharts-legend\",\n      \".apexcharts-title-text\",\n      \".apexcharts-subtitle-text\"\n    ];\n    chromeSelectors.forEach((sel) => {\n      baseEl.querySelectorAll(sel).forEach((el) => {\n        if (!el.style) return;\n        el.style.opacity = \"0\";\n        el.style.transition = `opacity ${speed}ms ease-out`;\n        BrowserAPIs.requestAnimationFrame(() => {\n          el.style.opacity = \"1\";\n        });\n        setTimeout(() => {\n          el.style.transition = \"\";\n          el.style.opacity = \"\";\n        }, speed + 80);\n      });\n    });\n    setTimeout(() => this.cleanup(), speed + 100);\n  }\n  cleanup() {\n    this._snapshot = null;\n  }\n}\nApexCharts.registerFeatures({ morphTypeChange: MorphTypeChange });\nconst XHTML$1 = \"http://www.w3.org/1999/xhtml\";\nclass Breadcrumb {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {import('./Drilldown').default} drilldown\n   */\n  constructor(w, ctx, drilldown) {\n    this.w = w;\n    this.ctx = ctx;\n    this.drilldown = drilldown;\n  }\n  /**\n   * @param {Array<string|number>} path - ['root', id, id, ...]\n   */\n  render(path) {\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const elWrap = w.dom.elWrap;\n    if (!elWrap) return;\n    const existing = elWrap.querySelector(\".apexcharts-breadcrumb\");\n    if (existing && existing.parentNode) {\n      existing.parentNode.removeChild(existing);\n    }\n    const cfg = w.config.drilldown && w.config.drilldown.breadcrumb;\n    if (!cfg || cfg.show === false) return;\n    if (this.drilldown.depth === 0) return;\n    const nav = BrowserAPIs.createElementNS(XHTML$1, \"nav\");\n    nav.setAttribute(\"class\", \"apexcharts-breadcrumb\");\n    nav.setAttribute(\"aria-label\", \"Drilldown breadcrumb\");\n    this._position(nav, cfg);\n    const separator = cfg.separator != null ? cfg.separator : \" / \";\n    path.forEach((id, i) => {\n      if (i > 0) {\n        const sep = BrowserAPIs.createElementNS(XHTML$1, \"span\");\n        sep.setAttribute(\"class\", \"apexcharts-breadcrumb-separator\");\n        sep.setAttribute(\"aria-hidden\", \"true\");\n        sep.textContent = separator;\n        nav.appendChild(sep);\n      }\n      const label = this._label(id, i);\n      const isCurrent = i === path.length - 1;\n      if (isCurrent) {\n        const cur = BrowserAPIs.createElementNS(XHTML$1, \"span\");\n        cur.setAttribute(\n          \"class\",\n          \"apexcharts-breadcrumb-item apexcharts-breadcrumb-current\"\n        );\n        cur.setAttribute(\"aria-current\", \"page\");\n        cur.textContent = label;\n        nav.appendChild(cur);\n      } else {\n        const btn = (\n          /** @type {HTMLButtonElement} */\n          BrowserAPIs.createElementNS(XHTML$1, \"button\")\n        );\n        btn.setAttribute(\"type\", \"button\");\n        btn.setAttribute(\"class\", \"apexcharts-breadcrumb-item\");\n        if (i === 0) {\n          const arrow = BrowserAPIs.createElementNS(XHTML$1, \"span\");\n          arrow.setAttribute(\"class\", \"apexcharts-breadcrumb-arrow\");\n          arrow.setAttribute(\"aria-hidden\", \"true\");\n          arrow.textContent = \"←\";\n          btn.appendChild(arrow);\n        }\n        const text = BrowserAPIs.createElementNS(XHTML$1, \"span\");\n        text.setAttribute(\"class\", \"apexcharts-breadcrumb-label\");\n        text.textContent = label;\n        btn.appendChild(text);\n        btn.addEventListener(\"click\", () => this.drilldown.drillToLevel(i));\n        nav.appendChild(btn);\n      }\n    });\n    elWrap.appendChild(nav);\n    this._avoidChromeOverlap(nav);\n  }\n  /**\n   * The breadcrumb is an absolute overlay, so at its default top-left it can\n   * sit on top of a left-aligned title (or subtitle). After mounting, push it\n   * below any chart chrome it intersects. (Sunburst's self-contained\n   * breadcrumb applies the same rule.)\n   * @param {HTMLElement} nav\n   */\n  _avoidChromeOverlap(nav) {\n    const w = this.w;\n    const chrome = (\n      /** @type {Element[]} */\n      [\".apexcharts-title-text\", \".apexcharts-subtitle-text\"].map((s) => w.dom.baseEl.querySelector(s)).filter((el) => el !== null)\n    );\n    if (!chrome.length) return;\n    const wrapTop = w.dom.elWrap.getBoundingClientRect().top;\n    for (let pass = 0; pass < chrome.length + 1; pass++) {\n      const nr = nav.getBoundingClientRect();\n      const hit = chrome.find((el) => {\n        const r = el.getBoundingClientRect();\n        return nr.left < r.right && nr.right > r.left && nr.top < r.bottom && nr.bottom > r.top;\n      });\n      if (!hit) break;\n      nav.style.top = `${hit.getBoundingClientRect().bottom - wrapTop + 4}px`;\n    }\n  }\n  /**\n   * @param {string|number} id\n   * @param {number} index\n   * @returns {string}\n   */\n  _label(id, index) {\n    const cfg = this.w.config.drilldown.breadcrumb;\n    let label;\n    if (index === 0) {\n      label = cfg.rootLabel != null ? cfg.rootLabel : \"All\";\n    } else {\n      const list = (this.w.config.drilldown.series || []).find(\n        (s) => s && s.id === id\n      );\n      label = list && list.name || String(id);\n    }\n    if (typeof cfg.formatter === \"function\") {\n      return cfg.formatter(label, { index, depth: this.drilldown.depth });\n    }\n    return label;\n  }\n  /**\n   * @param {HTMLElement} nav\n   * @param {Record<string, any>} cfg\n   */\n  _position(nav, cfg) {\n    const ox = cfg.offsetX || 0;\n    const oy = cfg.offsetY || 0;\n    nav.style.position = \"absolute\";\n    nav.style.top = oy + \"px\";\n    if (cfg.position === \"top-right\") {\n      nav.style.right = -ox + 3 + \"px\";\n    } else {\n      nav.style.left = ox + \"px\";\n    }\n  }\n}\nconst MAX_DEPTH = 32;\nclass Drilldown {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.stack = [];\n    this.rootSnapshot = null;\n    this._wired = false;\n    this.breadcrumb = new Breadcrumb(w, ctx, this);\n    this._onPointSelect = this._onPointSelect.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    this.init();\n  }\n  init() {\n    const w = this.w;\n    if (!w.config.drilldown || !w.config.drilldown.enabled) return;\n    if (this._wired) return;\n    this._wired = true;\n    this.ctx.addEventListener(\"dataPointSelection\", this._onPointSelect);\n    this.ctx.addEventListener(\"mounted\", this._afterRender);\n    this.ctx.addEventListener(\"updated\", this._afterRender);\n  }\n  // ─── Observable state ──────────────────────────────────────────────────────\n  /** @returns {Array<string|number>} e.g. ['root', '2024-quarters'] */\n  get path() {\n    return [\"root\", ...this.stack.map((f) => f.id)];\n  }\n  /** @returns {number} 0 at root */\n  get depth() {\n    return this.stack.length;\n  }\n  // ─── Navigation API ────────────────────────────────────────────────────────\n  /**\n   * Drill into the child level with the given id.\n   * @param {string|number} id\n   * @param {any} [triggerPoint] - the clicked data point (for events / async ctx)\n   * @param {{ seriesIndex?: number, dataPointIndex?: number }} [meta]\n   * @returns {Promise<any>}\n   */\n  drillDown(id, triggerPoint, meta) {\n    const child = this._resolveChild(id);\n    if (child) return this._drillInto(child, triggerPoint, meta);\n    if (typeof this.w.config.drilldown.onDrillDown === \"function\") {\n      return this._drillDownAsync(id, triggerPoint, meta);\n    }\n    console.warn(\n      `ApexCharts: drilldown id \"${id}\" not found in chart.drilldown.series, and no onDrillDown resolver is set.`\n    );\n    return Promise.resolve(this.ctx);\n  }\n  /**\n   * Navigate back one level.\n   * @returns {Promise<any>}\n   */\n  drillUp() {\n    return this.drillToLevel(this.stack.length - 1);\n  }\n  /**\n   * Navigate back to the root view.\n   * @returns {Promise<any>}\n   */\n  drillToRoot() {\n    return this.drillToLevel(0);\n  }\n  /**\n   * Navigate to an arbitrary depth (0 = root). Used by breadcrumb clicks.\n   * @param {number} targetDepth\n   * @returns {Promise<any>}\n   */\n  drillToLevel(targetDepth) {\n    const cur = this.stack.length;\n    if (targetDepth < 0 || targetDepth >= cur) return Promise.resolve(this.ctx);\n    const from = this.path[this.path.length - 1];\n    const restore = targetDepth === 0 ? this.rootSnapshot : this.stack[targetDepth].restore;\n    this.stack = this.stack.slice(0, targetDepth);\n    const to = this.path[this.path.length - 1];\n    return this._apply(this._viewFromSnapshot(restore), \"up\", { from, to });\n  }\n  // ─── Internals ─────────────────────────────────────────────────────────────\n  /**\n   * @param {string|number} id\n   * @returns {any|null}\n   */\n  _resolveChild(id) {\n    const list = this.w.config.drilldown && this.w.config.drilldown.series;\n    if (!Array.isArray(list)) return null;\n    return list.find((s) => s && s.id === id) || null;\n  }\n  /**\n   * @param {any} child\n   * @param {any} [triggerPoint]\n   * @param {object} [meta]\n   * @returns {Promise<any>}\n   */\n  _drillInto(child, triggerPoint, meta) {\n    if (this.stack.length >= MAX_DEPTH) {\n      console.warn(`ApexCharts: drilldown max depth (${MAX_DEPTH}) reached.`);\n      return Promise.resolve(this.ctx);\n    }\n    if (!this.rootSnapshot) this.rootSnapshot = this._snapshot();\n    const from = this.path[this.path.length - 1];\n    this.stack.push({ id: child.id, name: child.name, restore: this._snapshot() });\n    return this._apply(this._viewFromChild(child), \"down\", {\n      from,\n      to: child.id,\n      point: triggerPoint,\n      seriesIndex: meta && meta.seriesIndex,\n      dataPointIndex: meta && meta.dataPointIndex\n    });\n  }\n  /**\n   * Minimal async resolver (loading overlay lands in Phase 3).\n   * @param {string|number|null} id\n   * @param {any} point\n   * @param {object} [meta]\n   * @returns {Promise<any>}\n   */\n  _drillDownAsync(id, point, meta) {\n    const fn = this.w.config.drilldown.onDrillDown;\n    let result;\n    try {\n      result = fn({\n        point,\n        seriesIndex: meta && meta.seriesIndex,\n        dataPointIndex: meta && meta.dataPointIndex\n      });\n    } catch (error) {\n      this._fire(\"drillDownError\", { id, error });\n      return Promise.resolve(this.ctx);\n    }\n    return Promise.resolve(result).then(\n      (child) => {\n        if (!child || !child.data) return this.ctx;\n        return this._drillInto(child, point, meta);\n      },\n      (error) => {\n        this._fire(\"drillDownError\", { id, error });\n        return this.ctx;\n      }\n    );\n  }\n  /**\n   * Capture the overridable surface of the current view so it can be restored.\n   * Only fields that some drilldown.series entry can change are cloned; series\n   * and chart.type/stacked are always captured.\n   * @returns {object}\n   */\n  _snapshot() {\n    const c = this.w.config;\n    const fields = this._overrideFields();\n    const snap = { series: this._uncollapseSeries(Utils$1.clone(c.series)) };\n    if (Array.isArray(c.labels) && c.labels.length) {\n      snap.labels = Utils$1.clone(c.labels);\n    }\n    snap.chart = { type: c.chart.type, stacked: c.chart.stacked };\n    if (fields.has(\"xaxis\")) snap.xaxis = Utils$1.clone(c.xaxis);\n    if (fields.has(\"yaxis\")) snap.yaxis = Utils$1.clone(c.yaxis);\n    if (fields.has(\"colors\")) snap.colors = c.colors ? Utils$1.clone(c.colors) : void 0;\n    if (fields.has(\"plotOptions\")) snap.plotOptions = Utils$1.clone(c.plotOptions);\n    if (fields.has(\"fill\")) snap.fill = Utils$1.clone(c.fill);\n    if (fields.has(\"legend\")) snap.legend = Utils$1.clone(c.legend);\n    return snap;\n  }\n  /**\n   * Restore any legend-collapsed slices/series to their original values in a\n   * cloned series array, so a drill snapshot captures the pre-collapse data.\n   * Mirrors legend Helpers' collapse addressing: object-form pie/donut packs\n   * every slice as a data point inside `series[0].data`; numeric pie stores a\n   * slice per top-level element; axis series carry a `data` array. No-op when\n   * nothing is collapsed.\n   * @param {any[]} series\n   * @returns {any[]}\n   */\n  _uncollapseSeries(series) {\n    const w = this.w;\n    const gl = w.globals;\n    const entries = [\n      ...gl.collapsedSeries || [],\n      ...gl.ancillaryCollapsedSeries || []\n    ];\n    if (!entries.length) return series;\n    const type = w.config.chart.type;\n    const objectFormPie = (type === \"pie\" || type === \"donut\" || type === \"polarArea\") && series.length === 1 && series[0] && typeof series[0] === \"object\" && Array.isArray(series[0].data);\n    const container = objectFormPie ? series[0].data : series;\n    for (const entry of entries) {\n      const i = entry.index;\n      if (gl.axisCharts) {\n        if (series[i]) {\n          series[i].data = Array.isArray(entry.data) ? entry.data.slice() : entry.data;\n        }\n      } else if (container[i] && typeof container[i] === \"object\") {\n        container[i].y = entry.data;\n      } else if (container[i] !== void 0) {\n        container[i] = entry.data;\n      }\n    }\n    return series;\n  }\n  /**\n   * Union of overridable fields across all declared drilldown levels. Ensures a\n   * deep drillToRoot restores everything any intermediate level may have changed.\n   * @returns {Set<string>}\n   */\n  _overrideFields() {\n    const fields = /* @__PURE__ */ new Set();\n    const list = this.w.config.drilldown && this.w.config.drilldown.series || [];\n    for (const s of list) {\n      if (!s) continue;\n      if (s.xaxis) fields.add(\"xaxis\");\n      if (s.yaxis) fields.add(\"yaxis\");\n      if (s.colors) fields.add(\"colors\");\n      if (s.plotOptions) fields.add(\"plotOptions\");\n      if (s.fill) fields.add(\"fill\");\n      if (s.legend) fields.add(\"legend\");\n    }\n    return fields;\n  }\n  /**\n   * Copy the optional view fields shared by a drilldown child level and a\n   * restore snapshot (`xaxis`, `yaxis`, `colors`, `plotOptions`, `fill`,\n   * `legend`) from `src` onto `view`, only when present.\n   * @param {Record<string, any>} view @param {Record<string, any>} src\n   */\n  _copyOptionalViewFields(view, src) {\n    if (src.xaxis) view.xaxis = src.xaxis;\n    if (src.yaxis) view.yaxis = src.yaxis;\n    if (src.colors) view.colors = src.colors;\n    if (src.plotOptions) view.plotOptions = src.plotOptions;\n    if (src.fill) view.fill = src.fill;\n    if (src.legend) view.legend = src.legend;\n  }\n  /**\n   * Build an updateOptions/updateSeries payload for drilling INTO a child level.\n   * Works for axis charts and pie/donut alike: both accept series objects with a\n   * `data` array of `{ x, y }` points (pie derives slice labels from `x`).\n   * @param {any} child\n   * @returns {Record<string, any>}\n   */\n  _viewFromChild(child) {\n    const view = {};\n    if (Array.isArray(child.series)) {\n      view.series = child.series;\n    } else {\n      view.series = [{ name: child.name || \"\", data: child.data }];\n    }\n    const chart = {};\n    if (child.chart && child.chart.type) chart.type = child.chart.type;\n    if (child.chart && child.chart.stacked != null) chart.stacked = child.chart.stacked;\n    if (Object.keys(chart).length) view.chart = chart;\n    this._copyOptionalViewFields(view, child);\n    return view;\n  }\n  /**\n   * Build an updateOptions payload from a restore-snapshot.\n   * @param {Record<string, any>} snap\n   * @returns {Record<string, any>}\n   */\n  _viewFromSnapshot(snap) {\n    const view = { series: snap.series, chart: snap.chart };\n    if (snap.labels && snap.labels.length) view.labels = snap.labels;\n    this._copyOptionalViewFields(view, snap);\n    return view;\n  }\n  /**\n   * Apply a view by delegating to the right update path, firing drill events\n   * around it.\n   * @param {Record<string, any>} view\n   * @param {'down'|'up'} direction\n   * @param {object} meta\n   * @returns {Promise<any>}\n   */\n  _apply(view, direction, meta) {\n    const w = this.w;\n    w.interact.selectedDataPoints = [];\n    w.globals.collapsedSeries = [];\n    w.globals.collapsedSeriesIndices = [];\n    w.globals.ancillaryCollapsedSeries = [];\n    w.globals.ancillaryCollapsedSeriesIndices = [];\n    w.globals.allSeriesCollapsed = false;\n    w.globals.risingSeries = [];\n    const animate = (!w.config.drilldown.animation || w.config.drilldown.animation.enabled !== false) && w.config.chart.animations.enabled !== false;\n    if (direction === \"down\") this._fire(\"drillDownStart\", meta);\n    const runUpdate = (anim) => this.ctx.updateOptions(view, false, anim, false, false);\n    const done = () => {\n      this._fire(direction === \"down\" ? \"drillDownEnd\" : \"drillUp\", meta);\n      return this.ctx;\n    };\n    if (animate && this._zoomEnabled()) {\n      const origin = this._triggerOrigin(meta);\n      if (origin) {\n        return this._zoomDrill(origin, direction, () => runUpdate(false)).then(done);\n      }\n    }\n    return runUpdate(animate).then(done);\n  }\n  /** @returns {boolean} whether trigger-point zoom is configured on. */\n  _zoomEnabled() {\n    const a = this.w.config.drilldown && this.w.config.drilldown.animation;\n    return !!(a && a.zoomFromPoint);\n  }\n  /** @returns {SVGSVGElement|null} the chart's root <svg> node, if present. */\n  _svgNode() {\n    const paper = this.w.dom && this.w.dom.Paper;\n    return paper && paper.node ? paper.node : null;\n  }\n  /**\n   * The group wrapping ONLY the data marks (bars/cells/tiles) — not the axes,\n   * grid, or titles. Animating this keeps the chart frame still while the marks\n   * move. Covers bar/line/area (`.apexcharts-plot-series`), heatmap, and treemap.\n   * @returns {SVGElement|null}\n   */\n  _markGroup() {\n    const svg = this._svgNode();\n    if (!svg || typeof svg.querySelector !== \"function\") return null;\n    return svg.querySelector(\n      \".apexcharts-plot-series, .apexcharts-heatmap, .apexcharts-treemap\"\n    );\n  }\n  /**\n   * Centre of the clicked point in the SVG's view-box pixel space, used as the\n   * transform-origin for the mark-group scale (which uses `transform-box:\n   * view-box`, so the origin is resolved in SVG coordinates and stays stable\n   * across the parent and child renders). Falls back to the mark group's centre\n   * when there is no trigger point (e.g. drillUp / imperative drill). Returns\n   * null when the marks / SVG / WAAPI are unavailable (SSR / old browsers).\n   * @param {object} meta\n   * @returns {{ x: number, y: number }|null}\n   */\n  _triggerOrigin(meta) {\n    if (!Environment.isBrowser()) return null;\n    const svg = this._svgNode();\n    const group = this._markGroup();\n    if (!svg || !group || typeof group.animate !== \"function\" || typeof svg.getBoundingClientRect !== \"function\") {\n      return null;\n    }\n    const svgRect = svg.getBoundingClientRect();\n    let el = null;\n    if (meta && meta.seriesIndex != null && meta.dataPointIndex != null && this.w.dom.baseEl) {\n      el = this.w.dom.baseEl.querySelector(\n        `[index=\"${meta.seriesIndex}\"][j=\"${meta.dataPointIndex}\"]`\n      );\n    }\n    if (el && typeof el.getBoundingClientRect === \"function\") {\n      const r = el.getBoundingClientRect();\n      return {\n        x: r.left + r.width / 2 - svgRect.left,\n        y: r.top + r.height / 2 - svgRect.top\n      };\n    }\n    const gRect = group.getBoundingClientRect();\n    return {\n      x: gRect.left + gRect.width / 2 - svgRect.left,\n      y: gRect.top + gRect.height / 2 - svgRect.top\n    };\n  }\n  /**\n   * Run the \"expand from the clicked point\" choreography around an instant\n   * (un-animated) update. Only the data-mark group is animated — the axes, grid,\n   * and titles stay fixed, so the effect doesn't drag the whole chart frame. The\n   * current marks fade out near-in-place (a quick fade, not a balloon), the child\n   * renders invisibly underneath, then the child marks unfold outward from the\n   * clicked point: a horizontal-biased scale anchored there, so the bars read as\n   * emerging from the column you clicked. Drilling up has no trigger column, so\n   * it settles gently from the marks' centre.\n   *\n   * `transform-box: view-box` resolves the origin in SVG coordinates, so the same\n   * origin applies cleanly to the parent and the freshly-rendered child group.\n   * @param {{ x: number, y: number }} origin\n   * @param {'down'|'up'} direction\n   * @param {() => Promise<any>} runUpdate\n   * @returns {Promise<void>}\n   */\n  _zoomDrill(origin, direction, runUpdate) {\n    return __async(this, null, function* () {\n      const dur = this._zoomDuration();\n      const down = direction === \"down\";\n      const outDur = Math.round(dur * 0.55);\n      const outTo = down ? \"scale(1.03)\" : \"scale(0.97)\";\n      const inFrom = down ? \"scaleX(0.55) scaleY(0.85)\" : \"scale(1.04)\";\n      const anchor = (el) => {\n        el.style.transformBox = \"view-box\";\n        el.style.transformOrigin = `${origin.x}px ${origin.y}px`;\n      };\n      const clear = (el) => {\n        el.style.transform = \"\";\n        el.style.opacity = \"\";\n        el.style.transformOrigin = \"\";\n        el.style.transformBox = \"\";\n      };\n      const outGroup = this._markGroup();\n      let outAnim = null;\n      if (outGroup) {\n        anchor(outGroup);\n        outAnim = outGroup.animate(\n          [\n            { transform: \"scale(1)\", opacity: 1 },\n            { transform: outTo, opacity: 0 }\n          ],\n          { duration: outDur, easing: \"ease-in\", fill: \"forwards\" }\n        );\n        try {\n          yield outAnim.finished;\n        } catch (e) {\n        }\n      }\n      yield runUpdate();\n      const inGroup = this._markGroup();\n      if (inGroup) {\n        anchor(inGroup);\n        inGroup.style.opacity = \"0\";\n        inGroup.style.transform = inFrom;\n        if (outAnim && outGroup === inGroup) outAnim.cancel();\n        const inAnim = inGroup.animate(\n          [\n            { transform: inFrom, opacity: 0 },\n            { transform: \"scale(1)\", opacity: 1 }\n          ],\n          // Decelerating ease so the unfold settles softly into place.\n          { duration: dur, easing: \"cubic-bezier(0.16, 1, 0.3, 1)\", fill: \"forwards\" }\n        );\n        try {\n          yield inAnim.finished;\n        } catch (e) {\n        }\n        clear(inGroup);\n        inAnim.cancel();\n      }\n    });\n  }\n  /** @returns {number} per-phase zoom duration in ms. */\n  _zoomDuration() {\n    const a = this.w.config.drilldown && this.w.config.drilldown.animation;\n    const speed = a && typeof a.speed === \"number\" ? a.speed : 260;\n    return Math.max(80, speed);\n  }\n  /**\n   * Fire a drill event through both the config callback and the listener registry.\n   * @param {string} name\n   * @param {object} payload\n   */\n  _fire(name2, payload) {\n    const cb = this.w.config.chart.events && this.w.config.chart.events[name2];\n    if (typeof cb === \"function\") cb(payload, this.ctx, this.w);\n    this.ctx.events.fireEvent(name2, [payload, this.ctx, this.w]);\n  }\n  // ─── Click + post-render hooks ───────────────────────────────────────────────\n  /**\n   * @param {Event} _event\n   * @param {any} _ctx\n   * @param {{ seriesIndex?: number, dataPointIndex?: number }} opts\n   */\n  _onPointSelect(_event, _ctx, opts) {\n    if (!opts) return void 0;\n    const point = this._pointAt(opts.seriesIndex, opts.dataPointIndex);\n    if (point && typeof point === \"object\" && point.drilldown != null) {\n      return this.drillDown(point.drilldown, point, opts);\n    }\n    if (typeof this.w.config.drilldown.onDrillDown === \"function\") {\n      return this._drillDownAsync(null, point, opts);\n    }\n    return void 0;\n  }\n  /**\n   * @param {number|undefined} seriesIndex\n   * @param {number|undefined} dataPointIndex\n   * @returns {any|null}\n   */\n  _pointAt(seriesIndex, dataPointIndex) {\n    const series = this.w.config.series;\n    if (!Array.isArray(series) || seriesIndex == null || dataPointIndex == null) {\n      return null;\n    }\n    const s = series[seriesIndex];\n    if (!s || !Array.isArray(s.data)) return null;\n    return s.data[dataPointIndex] != null ? s.data[dataPointIndex] : null;\n  }\n  _afterRender() {\n    if (!this.w.config.drilldown || !this.w.config.drilldown.enabled) return;\n    this._markDrillableTargets();\n    this.breadcrumb.render(this.path);\n  }\n  /**\n   * Add the drilldown-target cursor class to every point that carries a\n   * `drilldown` field. Best-effort and cosmetic — a missed selector is harmless.\n   */\n  _markDrillableTargets() {\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const baseEl = w.dom.baseEl;\n    const series = w.config.series;\n    if (!baseEl || !Array.isArray(series)) return;\n    series.forEach((s, i) => {\n      const data = s && Array.isArray(s.data) ? s.data : null;\n      if (!data) return;\n      data.forEach((point, j) => {\n        if (!point || typeof point !== \"object\" || point.drilldown == null) return;\n        const nodes = baseEl.querySelectorAll(`[index=\"${i}\"][j=\"${j}\"]`);\n        nodes.forEach(\n          (node) => node.classList.add(\"apexcharts-drilldown-target\")\n        );\n      });\n    });\n  }\n}\nApexCharts.registerFeatures({ drilldown: Drilldown });\nconst VIEWSTATE_VERSION = 1;\nfunction axisWindow(min, max) {\n  const hasMin = min !== void 0 && min !== null;\n  const hasMax = max !== void 0 && max !== null;\n  if (!hasMin && !hasMax) return null;\n  return { min: hasMin ? min : null, max: hasMax ? max : null };\n}\nfunction cloneSelection(sel) {\n  if (!Array.isArray(sel)) return [];\n  return sel.map((a) => Array.isArray(a) ? a.slice() : a);\n}\nfunction annotationKind(method, ctx) {\n  if (typeof method !== \"function\" || !ctx) return null;\n  if (method === ctx.addXaxisAnnotation) return \"xaxis\";\n  if (method === ctx.addYaxisAnnotation) return \"yaxis\";\n  if (method === ctx.addPointAnnotation) return \"point\";\n  return null;\n}\nfunction addMethodName(kind) {\n  switch (kind) {\n    case \"xaxis\":\n      return \"addXaxisAnnotation\";\n    case \"yaxis\":\n      return \"addYaxisAnnotation\";\n    case \"point\":\n      return \"addPointAnnotation\";\n    default:\n      return null;\n  }\n}\nfunction captureAnnotations(w, ctx) {\n  const staticAnno = w.config.annotations ? Utils$1.clone(w.config.annotations) : null;\n  const dynamic = [];\n  const mem = w.globals.memory && w.globals.memory.methodsToExec || [];\n  for (const entry of mem) {\n    if (!entry || entry.label !== \"addAnnotation\") continue;\n    const kind = annotationKind(entry.method, ctx);\n    if (!kind) continue;\n    dynamic.push({ kind, params: Utils$1.clone(entry.params) });\n  }\n  return { static: staticAnno, dynamic };\n}\nfunction captureMeasure(ctx) {\n  const m = ctx && ctx.measure;\n  if (!m || typeof m.getPins !== \"function\") return null;\n  const pins = m.getPins();\n  return Array.isArray(pins) && pins.length ? { pins } : null;\n}\nfunction captureViewState(w, ctx) {\n  var _a, _b;\n  const cfgX = w.config.xaxis || {};\n  const cfgYArr = Array.isArray(w.config.yaxis) ? w.config.yaxis : w.config.yaxis ? [w.config.yaxis] : [];\n  const yWindows = cfgYArr.map(\n    (y) => axisWindow(y && y.min, y && y.max)\n  );\n  const anyY = yWindows.some((yw) => yw !== null);\n  const theme = w.config.theme;\n  const drilldown = ctx && ctx.drilldown;\n  return {\n    v: VIEWSTATE_VERSION,\n    window: {\n      xaxis: axisWindow(cfgX.min, cfgX.max),\n      yaxis: anyY ? yWindows : null\n    },\n    zoomed: !!w.interact.zoomed,\n    collapsed: (w.globals.collapsedSeriesIndices || []).slice(),\n    ancillaryCollapsed: (w.globals.ancillaryCollapsedSeriesIndices || []).slice(),\n    selectedDataPoints: cloneSelection(w.interact.selectedDataPoints),\n    theme: theme ? { mode: (_a = theme.mode) != null ? _a : null, palette: (_b = theme.palette) != null ? _b : null } : null,\n    locale: w.config.chart && w.config.chart.defaultLocale || null,\n    annotations: captureAnnotations(w, ctx),\n    drill: drilldown && drilldown.depth > 0 ? { path: drilldown.path.slice() } : null,\n    measure: captureMeasure(ctx)\n  };\n}\nfunction applyCollapsedSet(ctx, targetCollapsed, targetAncillary) {\n  const w = ctx.w;\n  if (targetCollapsed == null && targetAncillary == null) return;\n  const names = w.globals.seriesNames || [];\n  const target = /* @__PURE__ */ new Set([\n    ...targetCollapsed || [],\n    ...targetAncillary || []\n  ]);\n  const current = /* @__PURE__ */ new Set([\n    ...w.globals.collapsedSeriesIndices || [],\n    ...w.globals.ancillaryCollapsedSeriesIndices || []\n  ]);\n  for (let realIndex = 0; realIndex < names.length; realIndex++) {\n    const name2 = names[realIndex];\n    if (name2 == null) continue;\n    const shouldCollapse = target.has(realIndex);\n    const isCollapsed = current.has(realIndex);\n    if (shouldCollapse && !isCollapsed) {\n      ctx.hideSeries(name2);\n    } else if (!shouldCollapse && isCollapsed) {\n      ctx.showSeries(name2);\n    }\n  }\n}\nfunction restoreSelection(ctx, selectedDataPoints) {\n  if (!Array.isArray(selectedDataPoints)) return;\n  ctx.w.interact.selectedDataPoints = cloneSelection(selectedDataPoints);\n}\nfunction applyViewState(ctx, view, { animate = true, mergeOptions } = {}) {\n  var _a, _b;\n  if (!ctx || !view) return;\n  if (typeof view.v === \"number\" && view.v > VIEWSTATE_VERSION) {\n    console.warn(\n      `[apexcharts] ViewState v${view.v} is newer than this build understands (v${VIEWSTATE_VERSION}); applying best-effort.`\n    );\n  }\n  ctx.clearAnnotations();\n  const options2 = mergeOptions ? Utils$1.clone(mergeOptions) : {};\n  const xw = view.window && view.window.xaxis;\n  options2.xaxis = Object.assign(\n    {},\n    options2.xaxis,\n    xw ? { min: (_a = xw.min) != null ? _a : void 0, max: (_b = xw.max) != null ? _b : void 0 } : { min: void 0, max: void 0 }\n  );\n  const yw = view.window && view.window.yaxis;\n  if (Array.isArray(yw)) {\n    options2.yaxis = yw.map(\n      (y) => {\n        var _a2, _b2;\n        return y ? { min: (_a2 = y.min) != null ? _a2 : void 0, max: (_b2 = y.max) != null ? _b2 : void 0 } : {};\n      }\n    );\n  }\n  if (view.theme) {\n    const theme = {};\n    if (view.theme.mode != null) theme.mode = view.theme.mode;\n    if (view.theme.palette != null) theme.palette = view.theme.palette;\n    if (Object.keys(theme).length) {\n      options2.theme = Object.assign({}, options2.theme, theme);\n    }\n  }\n  if (view.annotations && view.annotations.static) {\n    options2.annotations = Utils$1.clone(view.annotations.static);\n  }\n  ctx.updateOptions(\n    options2,\n    false,\n    animate,\n    false,\n    false\n  );\n  applyViewInteraction(ctx, view);\n}\nfunction applyViewInteraction(ctx, view) {\n  if (!ctx || !view) return;\n  const w = ctx.w;\n  w.interact.zoomed = !!view.zoomed;\n  applyCollapsedSet(ctx, view.collapsed, view.ancillaryCollapsed);\n  if (view.annotations && Array.isArray(view.annotations.dynamic)) {\n    view.annotations.dynamic.forEach((a) => {\n      const method = addMethodName(a.kind);\n      if (method && typeof ctx[method] === \"function\") {\n        ctx[method](a.params, true);\n      }\n    });\n  }\n  restoreSelection(ctx, view.selectedDataPoints);\n  if (view.locale && view.locale !== w.config.chart.defaultLocale) {\n    ctx.setLocale(view.locale);\n  }\n  if (ctx.measure && typeof ctx.measure.setPins === \"function\") {\n    ctx.measure.setPins(view.measure && view.measure.pins || []);\n  }\n}\nconst PERSPECTIVE_VERSION = 1;\nconst HASH_KEY = \"apex\";\nfunction toBase64(str) {\n  if (typeof Buffer !== \"undefined\") {\n    return Buffer.from(str, \"utf-8\").toString(\"base64\");\n  }\n  const bytes = new TextEncoder().encode(str);\n  let bin = \"\";\n  for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);\n  return btoa(bin);\n}\nfunction fromBase64(b64) {\n  if (typeof Buffer !== \"undefined\") {\n    return Buffer.from(b64, \"base64\").toString(\"utf-8\");\n  }\n  const bin = atob(b64);\n  const bytes = new Uint8Array(bin.length);\n  for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\n  return new TextDecoder().decode(bytes);\n}\nfunction base64urlEncode(str) {\n  return toBase64(str).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\nfunction base64urlDecode(b64url) {\n  let b64 = b64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  while (b64.length % 4) b64 += \"=\";\n  return fromBase64(b64);\n}\nfunction stripFunctions(obj) {\n  try {\n    return JSON.parse(JSON.stringify(obj));\n  } catch (e) {\n    return void 0;\n  }\n}\nclass Perspectives {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._saved = [];\n    this._counter = 0;\n    this._used = false;\n  }\n  /**\n   * Capture the current chart view as a Perspective token.\n   * @returns {{ v: number, view: object, options?: Record<string, any> }}\n   */\n  capture() {\n    const view = captureViewState(this.w, this.ctx);\n    const token = (\n      /** @type {any} */\n      { v: PERSPECTIVE_VERSION, view }\n    );\n    const options2 = this._serializableDelta();\n    if (options2 && Object.keys(options2).length) token.options = options2;\n    return token;\n  }\n  /**\n   * Build the whitelisted, function-free option override recorded in the token.\n   * @returns {Record<string, any>}\n   * @private\n   */\n  _serializableDelta() {\n    const cfg = this.w.config;\n    const whitelist = cfg.chart && cfg.chart.perspectives && cfg.chart.perspectives.serializeOptions || [\"theme\", \"xaxis\", \"yaxis\", \"title\", \"subtitle\"];\n    const delta = {};\n    whitelist.forEach((path) => {\n      if (cfg[path] !== void 0) {\n        const stripped = stripFunctions(cfg[path]);\n        if (stripped !== void 0) delta[path] = stripped;\n      }\n    });\n    return delta;\n  }\n  /**\n   * Encode a token (or the current capture) to a compact base64url string.\n   * JSON.stringify drops any functions embedded in annotation params / option\n   * overrides by construction: a shared link carries data; the opening page\n   * supplies its own functions from config.\n   * @param {any} [token]\n   * @returns {string}\n   */\n  encode(token) {\n    const t = token || this.capture();\n    return base64urlEncode(JSON.stringify(t));\n  }\n  /**\n   * Decode a base64url token string. Never throws: returns null on any error\n   * or version mismatch (with a console warning).\n   * @param {string} str\n   * @returns {any | null}\n   */\n  decode(str) {\n    return Perspectives.decode(str);\n  }\n  /**\n   * Encode the current capture into a `#apex=<token>` URL hash fragment on the\n   * current location. Browser-only; returns '' under SSR.\n   * @returns {string}\n   */\n  toURL() {\n    if (!Environment.isBrowser()) return \"\";\n    const encoded = this.encode(this.capture());\n    const url = new URL(window.location.href);\n    url.hash = `${HASH_KEY}=${encoded}`;\n    return url.toString();\n  }\n  /**\n   * Restore a perspective. Accepts a token object or an encoded string. When\n   * the chart is grouped, applies to every synced chart.\n   *\n   * The token's option overrides and `opts.mergeOptions` are folded into the\n   * view restore's ONE updateOptions call (mergeOptions wins over\n   * token.options; the view's own fields win over both). A single render is\n   * deliberate: a second immediate updateOptions would kill the first one's\n   * animation mid-flight, and a chart.type change applied this way morphs\n   * (morph feature) inside the same re-render instead of being re-rendered\n   * over. Consumed by Storyboard for per-beat option payloads.\n   *\n   * @param {any} tokenOrString\n   * @param {{ animate?: boolean, mergeOptions?: Record<string, any> }} [opts]\n   */\n  apply(tokenOrString, opts = {}) {\n    const token = typeof tokenOrString === \"string\" ? Perspectives.decode(tokenOrString) : tokenOrString;\n    if (!token || !token.view) return;\n    this._used = true;\n    enforceLicense(this.w, this.ctx);\n    const animate = opts.animate !== void 0 ? opts.animate : true;\n    const combined = Utils$1.extend(\n      token.options ? Utils$1.clone(token.options) : {},\n      opts.mergeOptions || {}\n    );\n    const mergeOptions = Object.keys(combined).length ? combined : void 0;\n    const targets = this.w.config.chart.group ? this.ctx.getSyncedCharts() : [this.ctx];\n    targets.forEach((chart) => {\n      applyViewState(chart, token.view, { animate, mergeOptions });\n    });\n  }\n  /**\n   * Save the current view under a name in the in-memory registry.\n   * @param {string} name\n   * @returns {string} generated id\n   */\n  save(name2) {\n    const id = `perspective-${++this._counter}`;\n    this._saved.push({ id, name: name2 || id, token: this.capture() });\n    this._used = true;\n    enforceLicense(this.w, this.ctx);\n    return id;\n  }\n  /**\n   * List saved perspectives.\n   * @returns {{ id: string, name: string, token: any }[]}\n   */\n  list() {\n    return this._saved.map((s) => ({ id: s.id, name: s.name, token: s.token }));\n  }\n  /**\n   * Delete a saved perspective by id.\n   * @param {string} id\n   */\n  delete(id) {\n    const i = this._saved.findIndex((s) => s.id === id);\n    if (i > -1) this._saved.splice(i, 1);\n  }\n  /** Drop the saved-views registry (called on full destroy). */\n  teardown() {\n    this._saved = [];\n    this._counter = 0;\n  }\n  // ── static, pure helpers (available once the feature is imported) ─────────\n  /**\n   * @param {string} str base64url token\n   * @returns {any | null}\n   */\n  static decode(str) {\n    if (typeof str !== \"string\" || !str) return null;\n    try {\n      const token = JSON.parse(base64urlDecode(str));\n      if (!token || typeof token !== \"object\") return null;\n      if (token.v !== PERSPECTIVE_VERSION) {\n        console.warn(\n          `apexcharts: unsupported perspective version ${token.v} (expected ${PERSPECTIVE_VERSION}).`\n        );\n        return null;\n      }\n      return token;\n    } catch (e) {\n      console.warn(\"apexcharts: failed to decode perspective token.\", e);\n      return null;\n    }\n  }\n  /**\n   * Parse a `#apex=<token>` fragment out of an href (or the current location in\n   * a browser). Pure and Node-safe when given an explicit href.\n   * @param {string} [href]\n   * @returns {any | null}\n   */\n  static fromURL(href) {\n    try {\n      const target = href || (Environment.isBrowser() ? window.location.href : \"\");\n      if (!target) return null;\n      const url = new URL(target);\n      const hash = url.hash.replace(/^#/, \"\");\n      if (!hash) return null;\n      const pair = hash.split(\"&\").map((p) => p.split(\"=\")).find((p) => p[0] === HASH_KEY);\n      if (!pair || pair[1] == null) return null;\n      return Perspectives.decode(decodeURIComponent(pair[1]));\n    } catch (e) {\n      return null;\n    }\n  }\n}\nApexCharts.registerFeatures({ perspectives: Perspectives });\nApexCharts.perspectives = {\n  /** @param {string} str */\n  decode: (str) => {\n    markPerspectivesTokenDecoded();\n    return Perspectives.decode(str);\n  },\n  /** @param {string} [href] */\n  fromURL: (href) => {\n    markPerspectivesTokenDecoded();\n    return Perspectives.fromURL(href);\n  }\n};\nclass Storyboard {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._beats = [];\n    this._observer = null;\n    this._activeIndex = -1;\n    this._animate = true;\n    this._warnedNoPerspectives = false;\n    this._used = false;\n  }\n  /**\n   * Bind beats to scroll position. Rebinding replaces the previous binding.\n   * @param {{\n   *   beats?: Array<{ el?: Element, selector?: string, key?: string, view?: any, announce?: string, onEnter?: (chart: any, info: StoryboardBeatInfo) => void }>,\n   *   scroller?: Element | string,\n   *   offset?: number,\n   *   animate?: boolean,\n   * }} [opts]\n   * @returns {number} the number of beats bound\n   */\n  bind(opts = {}) {\n    var _a;\n    this.unbind();\n    if (!Environment.isBrowser()) return 0;\n    const doc = this.ctx.el && this.ctx.el.ownerDocument;\n    if (!doc || typeof IntersectionObserver === \"undefined\") return 0;\n    let root = null;\n    if (opts.scroller) {\n      root = typeof opts.scroller === \"string\" ? doc.querySelector(opts.scroller) : opts.scroller;\n    }\n    this._beats = this._resolveBeats(doc, root, opts.beats);\n    if (!this._beats.length) return 0;\n    this._animate = opts.animate !== false;\n    const offset = Math.min(Math.max((_a = opts.offset) != null ? _a : 0.5, 0), 1);\n    const top = +(offset * 100).toFixed(3);\n    const bottom = +(100 - offset * 100).toFixed(3);\n    this._observer = new IntersectionObserver(\n      (entries) => this._onIntersect(entries),\n      { root, rootMargin: `-${top}% 0px -${bottom}%`, threshold: 0 }\n    );\n    this._beats.forEach((b) => {\n      var _a2;\n      return (_a2 = this._observer) == null ? void 0 : _a2.observe(b.el);\n    });\n    this._used = true;\n    enforceLicense(this.w, this.ctx);\n    return this._beats.length;\n  }\n  /**\n   * Normalize the beats option, or auto-discover [data-apex-beat] elements in\n   * document order when no explicit list is given.\n   * @param {Document} doc\n   * @param {Element | null} root\n   * @param {Array<any>} [beatsOpt]\n   * @returns {StoryboardBeat[]}\n   * @private\n   */\n  _resolveBeats(doc, root, beatsOpt) {\n    const beats = [];\n    if (Array.isArray(beatsOpt)) {\n      beatsOpt.forEach((b, i) => {\n        var _a, _b;\n        if (!b) return;\n        const el = b.el && typeof b.el === \"object\" ? b.el : b.selector ? doc.querySelector(b.selector) : null;\n        if (!el) {\n          console.warn(\n            `apexcharts: storyboard beat ${i} has no resolvable element; skipped.`\n          );\n          return;\n        }\n        beats.push({\n          el,\n          key: (_b = (_a = b.key) != null ? _a : el.getAttribute(\"data-apex-beat\")) != null ? _b : String(i),\n          view: b.view,\n          options: b.options,\n          announce: b.announce,\n          onEnter: typeof b.onEnter === \"function\" ? b.onEnter : void 0\n        });\n      });\n      return beats;\n    }\n    const scope = root || doc;\n    scope.querySelectorAll(\"[data-apex-beat]\").forEach((el, i) => {\n      beats.push({\n        el,\n        key: el.getAttribute(\"data-apex-beat\") || String(i),\n        view: el.getAttribute(\"data-apex-view\") || void 0,\n        options: void 0,\n        announce: el.getAttribute(\"data-apex-announce\") || void 0,\n        onEnter: void 0\n      });\n    });\n    return beats;\n  }\n  /**\n   * @param {IntersectionObserverEntry[]} entries\n   * @private\n   */\n  _onIntersect(entries) {\n    entries.forEach((entry) => {\n      const idx = this._beats.findIndex((b) => b.el === entry.target);\n      if (idx < 0) return;\n      if (entry.isIntersecting) {\n        this._activate(idx);\n      } else if (idx === this._activeIndex && entry.rootBounds) {\n        if (entry.boundingClientRect.top >= entry.rootBounds.bottom && idx > 0) {\n          this._activate(idx - 1);\n        }\n      }\n    });\n  }\n  /**\n   * Activate a beat: apply its view token, run its callback, announce it and\n   * fire `beatChange`. Idempotent per beat (re-activating the current beat is\n   * a no-op), so IO chatter never re-applies a view.\n   * @param {number} idx\n   * @param {{ animate?: boolean }} [opts]\n   * @private\n   */\n  _activate(idx, opts = {}) {\n    var _a, _b;\n    if (idx === this._activeIndex) return;\n    const beat = this._beats[idx];\n    if (!beat) return;\n    const direction = idx > this._activeIndex ? \"down\" : \"up\";\n    this._activeIndex = idx;\n    const animate = (opts.animate !== void 0 ? opts.animate : this._animate) && !prefersReducedMotion();\n    if (beat.view != null || beat.options) {\n      if (this.ctx.perspectives) {\n        const v = (_a = beat.view) != null ? _a : {};\n        const token = typeof v === \"string\" || v.view ? v : { view: this._normalizeView(v) };\n        this.ctx.perspectives.apply(token, {\n          animate,\n          mergeOptions: beat.options\n        });\n      } else if (!this._warnedNoPerspectives) {\n        this._warnedNoPerspectives = true;\n        console.warn(\n          'apexcharts: storyboard beats carry views but the perspectives feature is not bundled. import \"apexcharts/features/storyboard\" (which includes it) or drive beats via onEnter.'\n        );\n      }\n    }\n    const info = { index: idx, key: beat.key, el: beat.el, direction };\n    if (beat.onEnter) beat.onEnter(this.ctx, info);\n    if (beat.announce) this._announce(beat.announce);\n    if (typeof this.w.config.chart.events.beatChange === \"function\") {\n      this.w.config.chart.events.beatChange(this.ctx, info);\n    }\n    (_b = this.ctx.events) == null ? void 0 : _b.fireEvent(\"beatChange\", [this.ctx, info]);\n  }\n  /**\n   * Fill in the parts of a hand-authored (bare) ViewState that would\n   * otherwise LEAK between beats. updateOptions merges objects, so a beat\n   * listing only xaxis annotations would keep a previous beat's point\n   * annotations; padding every annotation kind with an empty array makes\n   * each beat fully describe its own state, which is what allows scrubbing\n   * in both directions. Full tokens (from capture()/encode()) already carry\n   * the complete set and never pass through here.\n   * @param {any} view\n   * @returns {any}\n   * @private\n   */\n  _normalizeView(view) {\n    const provided = view.annotations && view.annotations.static || {};\n    return __spreadProps(__spreadValues({}, view), {\n      annotations: {\n        static: __spreadValues({\n          points: [],\n          xaxis: [],\n          yaxis: [],\n          texts: [],\n          images: []\n        }, provided),\n        dynamic: view.annotations && view.annotations.dynamic || []\n      }\n    });\n  }\n  /**\n   * Programmatically jump to a beat by index or author key (also usable\n   * without scrolling, e.g. from next/prev buttons).\n   * @param {number | string} indexOrKey\n   * @param {{ animate?: boolean }} [opts]\n   */\n  goTo(indexOrKey, opts = {}) {\n    const idx = typeof indexOrKey === \"number\" ? indexOrKey : this._beats.findIndex((b) => b.key === indexOrKey);\n    if (idx >= 0 && idx < this._beats.length) this._activate(idx, opts);\n  }\n  /**\n   * @returns {{ index: number, key: string | null } | null} the active beat\n   */\n  current() {\n    if (this._activeIndex < 0) return null;\n    const beat = this._beats[this._activeIndex];\n    return { index: this._activeIndex, key: beat ? beat.key : null };\n  }\n  /** Disconnect the observer and drop the beat list. */\n  unbind() {\n    if (this._observer) {\n      this._observer.disconnect();\n      this._observer = null;\n    }\n    this._beats = [];\n    this._activeIndex = -1;\n    this._used = false;\n    enforceLicense(this.w, this.ctx);\n  }\n  /** Full-destroy cleanup (called from Destroy). */\n  teardown() {\n    this.unbind();\n  }\n  /**\n   * Push a beat's announcement to the chart's visually-hidden aria-live\n   * status region so screen-reader users follow the story too. No-op when\n   * announcements are disabled or the region is absent.\n   * @param {string} message\n   * @private\n   */\n  _announce(message) {\n    const w = this.w;\n    if (!w.config.chart.accessibility.announcements.enabled) return;\n    const baseEl = w.dom.baseEl;\n    if (!baseEl) return;\n    const region = baseEl.querySelector(\".apexcharts-sr-status\");\n    if (!region) return;\n    region.textContent = \"\";\n    setTimeout(() => {\n      region.textContent = message;\n    }, 0);\n  }\n}\nApexCharts.registerFeatures({ storyboard: Storyboard });\nfunction isEditableTarget(node) {\n  if (!node) return false;\n  const tag = node.tagName;\n  return tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\" || node.isContentEditable === true;\n}\nclass History {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.stack = [];\n    this.pointer = -1;\n    this.applying = false;\n    this._batching = false;\n    this._counter = 0;\n    this._coalesceTimer = null;\n    this._settleTimer = null;\n    this._pendingLabel = void 0;\n    this._keydownTarget = null;\n    this._pointerTarget = null;\n    this._engaged = false;\n    this._wired = false;\n    this._readConfig();\n    this._onMounted = this._onMounted.bind(this);\n    this._onUpdated = this._onUpdated.bind(this);\n    this._onSelection = this._onSelection.bind(this);\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onPointerDown = this._onPointerDown.bind(this);\n    this.init();\n  }\n  /**\n   * (Re)read chart.history config. Called at construction and again on every\n   * mounted/updated event so `updateOptions({ chart: { history: {...} } })`\n   * takes effect at runtime: enabling wires the keyboard + starts capturing,\n   * disabling stops capturing (the stack is kept for a later re-enable).\n   */\n  _readConfig() {\n    const w = this.w;\n    const cfg = w.config.chart && w.config.chart.history || {};\n    this.enabled = !!cfg.enabled;\n    this.maxDepth = cfg.maxDepth > 0 ? cfg.maxDepth : 100;\n    this.coalesceMs = cfg.coalesceMs != null ? cfg.coalesceMs : 250;\n    this.keyboard = cfg.keyboard !== false;\n  }\n  /** Re-sync config, then wire/unwire the keyboard to match. */\n  _syncConfig() {\n    this._readConfig();\n    if (this.enabled && this.keyboard) this._wireKeyboard();\n    else this._unwireKeyboard();\n  }\n  init() {\n    if (this._wired) return;\n    this._wired = true;\n    this.ctx.addEventListener(\"mounted\", this._onMounted);\n    this.ctx.addEventListener(\"updated\", this._onUpdated);\n    this.ctx.addEventListener(\"scrolled\", this._onUpdated);\n    this.ctx.addEventListener(\"dataPointSelection\", this._onSelection);\n    if (this.enabled && this.keyboard) this._wireKeyboard();\n  }\n  /**\n   * Keyboard: Cmd/Ctrl+Z = undo, Shift+Cmd/Ctrl+Z or Ctrl+Y = redo. Bound on\n   * the document (not the chart element) because pointer gestures that create\n   * an undo step (annotation drag, zoom, pan) call preventDefault and so never\n   * move focus into the chart, leaving an el-scoped listener unreachable. To\n   * stay non-intrusive it acts only when this chart is \"engaged\" (see\n   * _onKeyDown): a capture-phase pointerdown marks engagement so the shortcut\n   * follows the chart the user last touched, and defers to text editing.\n   */\n  _wireKeyboard() {\n    if (this._keydownTarget) return;\n    const el = (\n      /** @type {any} */\n      this.ctx.el\n    );\n    const doc = el && el.ownerDocument;\n    if (!Environment.isBrowser() || !doc) return;\n    doc.addEventListener(\"keydown\", this._onKeyDown);\n    doc.addEventListener(\"pointerdown\", this._onPointerDown, true);\n    doc.addEventListener(\"mousedown\", this._onPointerDown, true);\n    this._keydownTarget = doc;\n    this._pointerTarget = doc;\n  }\n  _unwireKeyboard() {\n    if (this._keydownTarget) {\n      this._keydownTarget.removeEventListener(\"keydown\", this._onKeyDown);\n      this._keydownTarget = null;\n    }\n    if (this._pointerTarget) {\n      this._pointerTarget.removeEventListener(\"pointerdown\", this._onPointerDown, true);\n      this._pointerTarget.removeEventListener(\"mousedown\", this._onPointerDown, true);\n      this._pointerTarget = null;\n    }\n    this._engaged = false;\n  }\n  // ─── Event handlers ─────────────────────────────────────────────────────\n  _onMounted() {\n    this._syncConfig();\n    if (!this.enabled) return;\n    if (this.stack.length === 0) this._commit(\"initial\", true);\n  }\n  _onUpdated() {\n    this._syncConfig();\n    if (!this.enabled) return;\n    if (this.applying) {\n      this._refreshSettle();\n      return;\n    }\n    this._schedule(\"update\");\n  }\n  _onSelection() {\n    if (!this.enabled || this.applying) return;\n    this._schedule(\"selection\");\n  }\n  /**\n   * Mark whether the chart is engaged: a capture-phase pointerdown inside `el`\n   * engages it (runs before feature handlers stopPropagation), one elsewhere\n   * releases it. Capture phase so an annotation/zoom gesture that stops\n   * propagation still registers.\n   * @param {any} e\n   */\n  _onPointerDown(e) {\n    const el = (\n      /** @type {any} */\n      this.ctx.el\n    );\n    this._engaged = !!(el && e.target && el.contains(e.target));\n  }\n  /**\n   * @param {KeyboardEvent} e\n   */\n  _onKeyDown(e) {\n    if (!(e.metaKey || e.ctrlKey)) return;\n    const key = (e.key || \"\").toLowerCase();\n    if (key !== \"z\" && key !== \"y\") return;\n    const el = (\n      /** @type {any} */\n      this.ctx.el\n    );\n    if (!el) return;\n    const doc = el.ownerDocument;\n    const active = doc && doc.activeElement;\n    if (isEditableTarget(active)) return;\n    if (!(el.contains(active) || this._engaged)) return;\n    const redo = key === \"y\" || e.shiftKey;\n    e.preventDefault();\n    if (redo) this.redo();\n    else this.undo();\n  }\n  // ─── Capture (coalesced) ────────────────────────────────────────────────\n  /**\n   * @param {string} label\n   */\n  _schedule(label) {\n    if (this.applying || this._batching || !this.enabled) return;\n    this._pendingLabel = label;\n    if (this.coalesceMs > 0 && Environment.isBrowser()) {\n      clearTimeout(this._coalesceTimer);\n      this._coalesceTimer = setTimeout(\n        () => this._commit(this._pendingLabel),\n        this.coalesceMs\n      );\n    } else {\n      this._commit(label);\n    }\n  }\n  /**\n   * @param {string} [label]\n   * @param {boolean} [force] bypass the applying/batching guard (baseline / transaction)\n   */\n  _commit(label, force) {\n    clearTimeout(this._coalesceTimer);\n    this._coalesceTimer = null;\n    if (!force && (this.applying || this._batching)) return;\n    const cp = this._capture(label);\n    const current = this.stack[this.pointer];\n    if (current && current.sig === cp.sig) return;\n    if (this.pointer < this.stack.length - 1) {\n      this.stack.splice(this.pointer + 1);\n    }\n    this.stack.push(cp);\n    this.pointer = this.stack.length - 1;\n    while (this.stack.length > this.maxDepth) {\n      this.stack.shift();\n      this.pointer--;\n    }\n    this._emitChange();\n  }\n  /**\n   * @param {string} [label]\n   */\n  _capture(label) {\n    const view = captureViewState(this.w, this.ctx);\n    const { config, seriesSig } = this._cloneConfigCOW();\n    return {\n      id: `hist-${++this._counter}`,\n      view,\n      config,\n      seriesSig,\n      label: label || \"change\",\n      at: Environment.isBrowser() ? Date.now() : 0,\n      origin: \"local\",\n      // reserved for per-user scoping (Live Rooms)\n      sig: this._signature(view, config)\n    };\n  }\n  /**\n   * Clone w.config, sharing the previous checkpoint's cloned series when the\n   * live series CONTENT is unchanged (copy-on-write). Sharing is decided by a\n   * value signature, not reference identity: callers commonly mutate a kept\n   * series array in place and pass the same reference back to updateSeries, and\n   * an identity check would share a stale clone for exactly that case. The\n   * stringify is not extra cost: _signature already serialises the series as\n   * part of dedup.\n   * @returns {{ config: any, seriesSig: string|null }}\n   */\n  _cloneConfigCOW() {\n    const w = this.w;\n    const prev = this.stack[this.pointer];\n    let seriesSig = null;\n    try {\n      seriesSig = JSON.stringify(w.config.series);\n    } catch (e) {\n      seriesSig = null;\n    }\n    let cloned;\n    if (prev && seriesSig !== null && prev.seriesSig === seriesSig) {\n      const _a = w.config, { series: _series } = _a, rest = __objRest(_a, [\"series\"]);\n      cloned = Utils$1.clone(rest);\n      cloned.series = prev.config.series;\n    } else {\n      cloned = Utils$1.clone(w.config);\n    }\n    return { config: cloned, seriesSig };\n  }\n  /**\n   * Data-level signature for dedup. Functions are dropped by JSON (fine: a\n   * checkpoint whose only change is a function reference is not a meaningful\n   * undo step). Runs once per committed checkpoint, not per raw event.\n   * @param {any} view\n   * @param {any} config\n   * @returns {string}\n   */\n  _signature(view, config) {\n    try {\n      return JSON.stringify(view) + \"|\" + JSON.stringify(config);\n    } catch (e) {\n      return `nosig-${this._counter}`;\n    }\n  }\n  // ─── Restore ────────────────────────────────────────────────────────────\n  /**\n   * @param {any} cp\n   * @param {boolean} animate\n   */\n  _restore(cp, animate) {\n    if (!cp) return;\n    this.applying = true;\n    let p;\n    try {\n      this.ctx.clearAnnotations();\n      p = this.ctx.updateOptions(Utils$1.clone(cp.config), false, animate, false, false);\n    } catch (e) {\n      this.applying = false;\n      throw e;\n    }\n    Promise.resolve(p).then(() => {\n      if (this.w.globals.isDestroyed) {\n        this.applying = false;\n        return;\n      }\n      applyViewInteraction(this.ctx, cp.view);\n      this._refreshSettle();\n      this._emitChange();\n    }).catch(() => {\n      this.applying = false;\n    });\n  }\n  /**\n   * Hold `applying` true until the restore's burst of async 'updated' events\n   * has drained (one macrotask after the last one). Refreshed by _onUpdated.\n   */\n  _refreshSettle() {\n    if (!Environment.isBrowser()) {\n      this.applying = false;\n      return;\n    }\n    clearTimeout(this._settleTimer);\n    this._settleTimer = setTimeout(() => {\n      this.applying = false;\n    }, 0);\n  }\n  // ─── Public API ─────────────────────────────────────────────────────────\n  /**\n   * Commit a checkpoint of the current state now (a discrete undo step). Used by\n   * callers that mutate `w.config` without going through a full re-render (e.g.\n   * Ink Layer's targeted annotation redraws, which fire no 'updated' event).\n   * No-op when disabled or while a restore is applying.\n   * @param {string} [label]\n   */\n  snapshot(label) {\n    if (!this.enabled || this.applying) return;\n    this._commit(label || \"change\");\n  }\n  /**\n   * @param {boolean} [animate]\n   */\n  undo(animate = true) {\n    if (!this.canUndo()) return;\n    this.pointer--;\n    this._restore(this.stack[this.pointer], animate);\n  }\n  /**\n   * @param {boolean} [animate]\n   */\n  redo(animate = true) {\n    if (!this.canRedo()) return;\n    this.pointer++;\n    this._restore(this.stack[this.pointer], animate);\n  }\n  canUndo() {\n    return this.pointer > 0;\n  }\n  canRedo() {\n    return this.pointer > -1 && this.pointer < this.stack.length - 1;\n  }\n  /**\n   * @param {string} id\n   * @param {boolean} [animate]\n   */\n  jump(id, animate = true) {\n    const idx = this.stack.findIndex((c) => c.id === id);\n    if (idx === -1 || idx === this.pointer) return;\n    this.pointer = idx;\n    this._restore(this.stack[idx], animate);\n  }\n  /** Clear the history, keeping the current state as the new baseline. */\n  clear() {\n    clearTimeout(this._coalesceTimer);\n    this._coalesceTimer = null;\n    const current = this.stack[this.pointer];\n    this.stack = current ? [current] : [];\n    this.pointer = this.stack.length - 1;\n    this._emitChange();\n  }\n  /**\n   * Group multiple edits into a single undo step. `fn` may be async; await your\n   * updateOptions/updateSeries calls inside it so the intermediate 'updated'\n   * events are suppressed and only one checkpoint is committed afterwards.\n   * @param {() => (void | Promise<any>)} fn\n   * @param {{ label?: string }} [opts]\n   * @returns {Promise<void>}\n   */\n  transaction(fn, opts = {}) {\n    if (typeof fn !== \"function\") return Promise.resolve();\n    const wasBatching = this._batching;\n    this._batching = true;\n    return Promise.resolve().then(() => fn()).finally(() => {\n      this._batching = wasBatching;\n      if (!wasBatching) this._commit(opts.label || \"transaction\", true);\n    });\n  }\n  /**\n   * @returns {{ id: string, label: string, at: number }[]}\n   */\n  entries() {\n    return this.stack.map((c) => ({ id: c.id, label: c.label, at: c.at }));\n  }\n  /** Lightweight state for the historyChange event / a history-rail UI. */\n  state() {\n    return {\n      canUndo: this.canUndo(),\n      canRedo: this.canRedo(),\n      index: this.pointer,\n      length: this.stack.length\n    };\n  }\n  _emitChange() {\n    this.ctx.events.fireEvent(\"historyChange\", [this.ctx, this.state()]);\n  }\n  /** Drop the stack + detach listeners (called on full destroy). */\n  teardown() {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    clearTimeout(this._coalesceTimer);\n    clearTimeout(this._settleTimer);\n    this._coalesceTimer = null;\n    this._settleTimer = null;\n    this._unwireKeyboard();\n    if (this._wired) {\n      (_b = (_a = this.ctx).removeEventListener) == null ? void 0 : _b.call(_a, \"mounted\", this._onMounted);\n      (_d = (_c = this.ctx).removeEventListener) == null ? void 0 : _d.call(_c, \"updated\", this._onUpdated);\n      (_f = (_e = this.ctx).removeEventListener) == null ? void 0 : _f.call(_e, \"scrolled\", this._onUpdated);\n      (_h = (_g = this.ctx).removeEventListener) == null ? void 0 : _h.call(_g, \"dataPointSelection\", this._onSelection);\n    }\n    this.stack = [];\n    this.pointer = -1;\n    this._wired = false;\n  }\n}\nApexCharts.registerFeatures({ history: History });\nconst WEAVE_API_VERSION = 1;\nconst PLUGIN_CHART_METHODS = [\n  \"updateOptions\",\n  \"updateSeries\",\n  \"appendData\",\n  \"appendSeries\",\n  \"toggleSeries\",\n  \"showSeries\",\n  \"hideSeries\",\n  \"highlightSeries\",\n  \"isSeriesHidden\",\n  \"zoomX\",\n  \"addXaxisAnnotation\",\n  \"addYaxisAnnotation\",\n  \"addPointAnnotation\",\n  \"clearAnnotations\",\n  \"removeAnnotation\",\n  \"dataURI\",\n  \"exportToCSV\"\n];\nfunction buildBoundPublicMethods(ctx) {\n  const out = {};\n  PLUGIN_CHART_METHODS.forEach((m) => {\n    if (typeof ctx[m] === \"function\") out[m] = ctx[m].bind(ctx);\n  });\n  return Object.freeze(out);\n}\nfunction makeLayerHandle(g, graphics) {\n  const add = (el) => {\n    if (el) g.add(el);\n    return el;\n  };\n  const handle = {\n    get node() {\n      return g.node;\n    },\n    /** @param {any} opts */\n    path(opts = {}) {\n      const {\n        d = \"\",\n        stroke = \"#000\",\n        width = 1,\n        fill = \"none\",\n        opacity = 1,\n        dash = 0,\n        className = \"\"\n      } = opts;\n      return add(\n        graphics.drawPath({\n          d,\n          stroke,\n          strokeWidth: width,\n          fill,\n          fillOpacity: fill === \"none\" ? 0 : opacity,\n          strokeOpacity: opacity,\n          strokeDashArray: dash,\n          classes: className\n        })\n      );\n    },\n    /** @param {any} opts */\n    line(opts = {}) {\n      const { x1, y1, x2, y2, stroke = \"#000\", width = 1, dash = 0 } = opts;\n      return add(graphics.drawLine(x1, y1, x2, y2, stroke, dash, width));\n    },\n    /** @param {any} opts */\n    rect(opts = {}) {\n      const {\n        x = 0,\n        y = 0,\n        w = 0,\n        h = 0,\n        r = 0,\n        fill = \"#000\",\n        stroke = null,\n        opacity = 1\n      } = opts;\n      return add(\n        graphics.drawRect(\n          x,\n          y,\n          w,\n          h,\n          r,\n          fill,\n          opacity,\n          stroke != null ? 1 : null,\n          stroke\n        )\n      );\n    },\n    /** @param {any} opts */\n    circle(opts = {}) {\n      const { cx = 0, cy = 0, r = 0, fill = \"#000\", stroke = null } = opts;\n      return add(\n        graphics.drawCircle(r, { cx, cy, fill, stroke: stroke || \"none\" })\n      );\n    },\n    /** @param {any} opts */\n    text(opts = {}) {\n      const {\n        x = 0,\n        y = 0,\n        text = \"\",\n        color,\n        size,\n        anchor = \"start\",\n        weight\n      } = opts;\n      return add(\n        graphics.drawText({\n          x,\n          y,\n          text,\n          textAnchor: anchor,\n          fontSize: size,\n          foreColor: color,\n          fontWeight: weight\n        })\n      );\n    },\n    clear() {\n      const node = g.node;\n      while (node.firstChild) node.removeChild(node.firstChild);\n      return handle;\n    }\n  };\n  return handle;\n}\nfunction buildPluginAPI(host, record) {\n  const ctx = host.ctx;\n  const w = host.w;\n  const api = {\n    name: record.def.name,\n    version: WEAVE_API_VERSION,\n    // Live: reconcile refreshes record.options when the chart's plugins config\n    // changes, so updateOptions({ plugins: [{ name, options }] }) reconfigures\n    // an active plugin in place. The returned object is frozen.\n    get options() {\n      return record.options;\n    },\n    // ── lifecycle subscription ──\n    /**\n     * @param {string} hook\n     * @param {Function} fn\n     */\n    on(hook, fn) {\n      const m = record.handlers;\n      if (!m.has(hook)) m.set(hook, []);\n      m.get(hook).push(fn);\n      return api;\n    },\n    /**\n     * @param {string} hook\n     * @param {Function} fn\n     */\n    off(hook, fn) {\n      const a = record.handlers.get(hook);\n      if (a) {\n        const i = a.indexOf(fn);\n        if (i > -1) a.splice(i, 1);\n      }\n      return api;\n    },\n    // ── per-plugin, per-chart scratch state (survives updates, dropped on\n    //    destroy). The api object is frozen, but this object is mutable. ──\n    store: {},\n    // ── drawing (renderer-agnostic) ──\n    // Call this INSIDE each draw handler: the host wipes plugin layers at the\n    // start of every draw pass, so a handle cached across draws points at a\n    // detached node and its writes vanish silently.\n    /** @param {any} [opts] */\n    layer(opts) {\n      return host._layer(record.def.name, opts || {});\n    },\n    // ── reads ──\n    get scales() {\n      return host._currentScales;\n    },\n    // Served from the per-dispatch snapshot when one exists (invalidated at\n    // every dispatch), so reading api.data in a loop does not rebuild the\n    // point arrays on each property access.\n    get data() {\n      return host._lastData || (host._lastData = host._dataSnapshot());\n    },\n    theme: Object.freeze({\n      get mode() {\n        return w.config.theme.mode;\n      },\n      get foreColor() {\n        return w.config.chart.foreColor;\n      },\n      /** @param {number} i */\n      seriesColor(i) {\n        return w.globals.colors[i];\n      },\n      /** @param {string} name */\n      token(name2) {\n        return host._token(name2);\n      }\n    }),\n    // ── curated actions (bound public methods only; NEVER raw w) ──\n    chart: buildBoundPublicMethods(ctx),\n    // ── custom events out to the host app ──\n    /**\n     * Fires as `plugin:<pluginName>:<name>` on the chart's event bus. The\n     * namespace is not optional: the bus also carries the internal lifecycle\n     * events ('updated', 'mounted', ...), and an un-namespaced emit could\n     * trigger every internal subscriber (history capture, re-render hooks).\n     * Listen with chart.addEventListener('plugin:myplugin:myevent', fn).\n     * @param {string} name\n     * @param {any} [detail]\n     */\n    emit(name2, detail) {\n      ctx.events.fireEvent(`plugin:${record.def.name}:${name2}`, [ctx, detail]);\n    },\n    // ── host element (read; lazy: baseEl is not set until render) ──\n    get el() {\n      return w.dom.baseEl;\n    }\n  };\n  return Object.freeze(api);\n}\nclass WeaveHost {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.active = [];\n    this._layers = /* @__PURE__ */ new Map();\n    this._currentScales = null;\n    this._lastPluginsRef = null;\n    this._lastData = null;\n    this._updatedWired = false;\n    this._onUpdated = this._onUpdated.bind(this);\n    this._init();\n  }\n  _init() {\n    const list = this.w.config.plugins || [];\n    list.map((entry, i) => ({\n      entry,\n      order: entry.order != null ? entry.order : i\n    })).sort((a, b) => a.order - b.order).forEach((o) => this._activate(o.entry));\n    this._lastPluginsRef = this.w.config.plugins;\n    this._wireUpdated();\n  }\n  _wireUpdated() {\n    if (this._updatedWired) return;\n    this.ctx.addEventListener(\"updated\", this._onUpdated);\n    this._updatedWired = true;\n  }\n  _onUpdated() {\n    this.dispatch(\"afterUpdate\", { pass: \"update\" });\n  }\n  /**\n   * @param {any} entry { name, options?, order? }\n   */\n  _activate(entry) {\n    const def = getPlugin(entry.name);\n    if (!def) {\n      console.error(`[apexcharts] plugin \"${entry.name}\" is not registered.`);\n      return;\n    }\n    const v = def.apiVersion != null ? def.apiVersion : 1;\n    if (Math.trunc(v) !== WEAVE_API_VERSION) {\n      console.error(\n        `[apexcharts] plugin \"${def.name}\" targets Weave API v${v}, host is v${WEAVE_API_VERSION}; skipped.`\n      );\n      return;\n    }\n    const record = {\n      def,\n      options: Object.freeze(__spreadValues({}, entry.options || {})),\n      handlers: /* @__PURE__ */ new Map(),\n      disabled: false,\n      failures: 0,\n      api: null\n    };\n    record.api = buildPluginAPI(this, record);\n    this.active.push(record);\n    this._guard(record, \"setup\", () => def.setup(record.api));\n  }\n  /**\n   * @param {string} hook\n   * @param {{ pass?: string, xyRatios?: any }} [extra]\n   */\n  dispatch(hook, extra) {\n    if (hook === \"draw\") {\n      this._reconcile();\n      this._resetLayers();\n    }\n    this._lastData = null;\n    if (!this.active.length) return;\n    if (hook === \"afterParse\") {\n      this._currentScales = null;\n    } else if (extra && \"xyRatios\" in extra) {\n      this._setScales(extra.xyRatios);\n    }\n    const pass = extra && extra.pass || \"full\";\n    let data = null;\n    for (const record of this.active) {\n      if (record.disabled) continue;\n      const fns = record.handlers.get(hook);\n      if (!fns || !fns.length) continue;\n      if (data === null) {\n        data = this._dataSnapshot();\n        this._lastData = data;\n      }\n      const payload = {\n        api: record.api,\n        scales: this._currentScales,\n        data,\n        pass,\n        hook\n      };\n      for (const fn of fns.slice()) {\n        this._guard(record, hook, () => fn(payload));\n      }\n    }\n  }\n  /**\n   * @param {any} record\n   * @param {string} where\n   * @param {Function} fn\n   */\n  _guard(record, where, fn) {\n    if (record.disabled) return;\n    try {\n      fn();\n    } catch (e) {\n      console.error(\n        `[apexcharts] plugin \"${record.def.name}\" threw in \"${where}\":`,\n        e\n      );\n      record.failures = (record.failures || 0) + 1;\n      if (record.failures >= 3) {\n        record.disabled = true;\n        console.error(\n          `[apexcharts] plugin \"${record.def.name}\" disabled after repeated errors.`\n        );\n      }\n    }\n  }\n  // ─── Scales facade ──────────────────────────────────────────────────────\n  /**\n   * Build api.scales from the SAME xyRatios the series were drawn with, so\n   * plugin pixels align with series pixels by construction.\n   * @param {any} xyRatios\n   */\n  _setScales(xyRatios) {\n    const w = this.w;\n    const gl = w.globals;\n    const L = w.layout;\n    if (!xyRatios || !gl.axisCharts) {\n      this._currentScales = null;\n      return;\n    }\n    const xRatio = xyRatios.xRatio;\n    const yRatio = xyRatios.yRatio || [];\n    const yr = (axis) => yRatio[axis] != null ? yRatio[axis] : yRatio[0];\n    const maxY = (axis) => gl.maxYArr[axis] != null ? gl.maxYArr[axis] : gl.maxY;\n    const minY = (axis) => gl.minYArr[axis] != null ? gl.minYArr[axis] : gl.minY;\n    this._currentScales = {\n      /** @param {number} v */\n      x: (v) => L.translateX + (v - gl.minX) / xRatio,\n      /**\n       * @param {number} v\n       * @param {number} [axis]\n       */\n      y: (v, axis = 0) => L.translateY + (maxY(axis) - v) / yr(axis),\n      domainX: [gl.minX, gl.maxX],\n      /** @param {number} [axis] */\n      domainY: (axis = 0) => [minY(axis), maxY(axis)],\n      gridWidth: L.gridWidth,\n      gridHeight: L.gridHeight,\n      ratios: xyRatios\n    };\n  }\n  // ─── Read-only data snapshot ────────────────────────────────────────────\n  /**\n   * @returns {any[]} defensive per-series snapshot (never the live slice)\n   */\n  _dataSnapshot() {\n    const w = this.w;\n    const gl = w.globals;\n    const series = w.seriesData.series || [];\n    const seriesX = w.seriesData.seriesX || [];\n    return series.map((sData, i) => {\n      const xs = seriesX[i] || [];\n      const points = (sData || []).map((y, j) => ({\n        x: xs[j] != null ? xs[j] : j,\n        y\n      }));\n      return {\n        name: gl.seriesNames ? gl.seriesNames[i] : void 0,\n        hidden: (gl.collapsedSeriesIndices || []).includes(i),\n        color: gl.colors ? gl.colors[i] : void 0,\n        points\n      };\n    });\n  }\n  // ─── Theme tokens ───────────────────────────────────────────────────────\n  /**\n   * @param {string} name\n   * @returns {any}\n   */\n  _token(name2) {\n    const w = this.w;\n    const gl = w.globals;\n    switch (name2) {\n      case \"foreColor\":\n        return w.config.chart.foreColor;\n      case \"background\":\n        return w.config.chart.background;\n      case \"accent\":\n      case \"primary\":\n        return gl.colors ? gl.colors[0] : void 0;\n      default:\n        if (/^series-\\d+$/.test(name2)) {\n          return gl.colors ? gl.colors[Number(name2.split(\"-\")[1])] : void 0;\n        }\n        return void 0;\n    }\n  }\n  // ─── Layers ─────────────────────────────────────────────────────────────\n  /**\n   * @param {string} name\n   * @param {{ z?: 'front'|'behind', className?: string }} opts\n   */\n  _layer(name2, { z = \"front\", className = \"\" } = {}) {\n    let g = this._layers.get(name2);\n    if (!g) {\n      g = this.ctx.graphics.group({\n        class: `apexcharts-plugin-${name2} ${className}`.trim()\n      });\n      const parent = this.w.dom.elGraphical.node;\n      if (z === \"behind\") parent.insertBefore(g.node, parent.firstChild);\n      else parent.appendChild(g.node);\n      g.node.setAttribute(\"aria-hidden\", \"true\");\n      this._layers.set(name2, g);\n    }\n    return makeLayerHandle(g, this.ctx.graphics);\n  }\n  /**\n   * Remove all plugin layers. Run at the start of every `draw` because\n   * fastUpdate only removes series/data-label groups (not arbitrary plugin\n   * groups), so without this, fast-path redraws would duplicate plugin output.\n   */\n  _resetLayers() {\n    const el = this.w.dom.elGraphical;\n    const parent = el && el.node;\n    if (parent) {\n      const groups = parent.querySelectorAll('g[class*=\"apexcharts-plugin-\"]');\n      Array.prototype.forEach.call(groups, (n) => n.remove());\n    }\n    this._layers.clear();\n  }\n  // ─── Config-change reconciliation ───────────────────────────────────────\n  /**\n   * Diff w.config.plugins by name: teardown removed, activate added; unchanged\n   * plugins keep their instance + store, but their `options` are refreshed from\n   * the new entry (api.options is a live getter), so\n   * updateOptions({ plugins: [{ name, options }] }) reconfigures in place.\n   * Skipped when the plugins array reference is unchanged (fast redraws), so it\n   * costs nothing on hover.\n   */\n  _reconcile() {\n    const plugins = this.w.config.plugins || [];\n    if (plugins === this._lastPluginsRef) return;\n    this._lastPluginsRef = plugins;\n    const desired = new Map(\n      plugins.map((e, i) => [\n        e.name,\n        { entry: e, order: e.order != null ? e.order : i }\n      ])\n    );\n    for (let i = this.active.length - 1; i >= 0; i--) {\n      const r = this.active[i];\n      const want = desired.get(r.def.name);\n      if (!want) {\n        this._guard(r, \"destroy\", () => r.def.destroy && r.def.destroy(r.api));\n        this.active.splice(i, 1);\n      } else {\n        r.options = Object.freeze(__spreadValues({}, want.entry.options || {}));\n      }\n    }\n    const activeNames = new Set(this.active.map((r) => r.def.name));\n    const toAdd = [];\n    desired.forEach((v, name2) => {\n      if (!activeNames.has(name2)) toAdd.push(v);\n    });\n    toAdd.sort((a, b) => a.order - b.order).forEach((v) => this._activate(v.entry));\n  }\n  /**\n   * @param {boolean} [isUpdating]\n   */\n  teardown(isUpdating) {\n    if (!isUpdating) {\n      this.dispatch(\"destroy\");\n      for (const record of this.active) {\n        this._guard(record, \"destroy\", () => record.def.destroy && record.def.destroy(record.api));\n      }\n      this.active = [];\n      if (this._updatedWired) {\n        this.ctx.removeEventListener && this.ctx.removeEventListener(\"updated\", this._onUpdated);\n        this._updatedWired = false;\n      }\n    }\n    this._layers.clear();\n  }\n}\nApexCharts.registerFeatures({ weave: WeaveHost });\nconst STYLE_KEYS = {\n  fill: \"fill\",\n  stroke: \"stroke\",\n  \"stroke-width\": \"strokeWidth\",\n  \"stroke-dasharray\": \"strokeDash\",\n  \"stroke-linecap\": \"lineCap\",\n  \"fill-opacity\": \"fillOpacity\",\n  \"stroke-opacity\": \"strokeOpacity\",\n  \"fill-rule\": \"fillRule\"\n};\nconst NEVER = Symbol(\"never\");\nconst SHAPE_ID = {\n  circle: 0,\n  square: 1,\n  rect: 1,\n  triangle: 2,\n  diamond: 3,\n  star: 4,\n  sparkle: 5,\n  cross: 6,\n  plus: 7,\n  line: 8\n};\nconst SHAPE_NAME = [\n  \"circle\",\n  \"square\",\n  \"triangle\",\n  \"diamond\",\n  \"star\",\n  \"sparkle\",\n  \"cross\",\n  \"plus\",\n  \"line\"\n];\nconst NOOP_RUNNER = {\n  /** @returns {any} */\n  attr() {\n    return NOOP_RUNNER;\n  },\n  plot() {\n    return NOOP_RUNNER;\n  },\n  during() {\n    return NOOP_RUNNER;\n  },\n  after(fn) {\n    if (typeof fn === \"function\") fn();\n    return NOOP_RUNNER;\n  },\n  animate() {\n    return NOOP_RUNNER;\n  },\n  delay() {\n    return NOOP_RUNNER;\n  },\n  loop() {\n    return NOOP_RUNNER;\n  },\n  finish() {\n    return NOOP_RUNNER;\n  },\n  stop() {\n    return NOOP_RUNNER;\n  }\n};\nconst SHARED_MARKER_NODE = {\n  nodeName: \"path\",\n  style: {},\n  classList: { add() {\n  }, remove() {\n  }, toggle() {\n  }, contains: () => false },\n  setAttribute() {\n  },\n  getAttribute: () => null,\n  removeAttribute() {\n  },\n  hasAttribute: () => false,\n  addEventListener() {\n  },\n  removeEventListener() {\n  },\n  appendChild() {\n  },\n  getBBox: () => ({ x: 0, y: 0, width: 0, height: 0 })\n};\nconst SHARED_GROUP = {\n  __isCanvasMark: true,\n  node: {\n    nodeName: \"g\",\n    instance: null,\n    style: {},\n    classList: { add() {\n    }, remove() {\n    }, toggle() {\n    }, contains: () => false },\n    setAttribute() {\n    },\n    getAttribute: () => null,\n    removeAttribute() {\n    },\n    addEventListener() {\n    },\n    removeEventListener() {\n    },\n    appendChild() {\n    },\n    getBBox: () => ({ x: 0, y: 0, width: 0, height: 0 })\n  },\n  /** @returns {any} */\n  attr() {\n    return SHARED_GROUP;\n  },\n  add() {\n    return SHARED_GROUP;\n  },\n  addTo() {\n    return SHARED_GROUP;\n  },\n  remove() {\n    return SHARED_GROUP;\n  },\n  clear() {\n    return SHARED_GROUP;\n  },\n  css() {\n    return SHARED_GROUP;\n  },\n  hide() {\n    return SHARED_GROUP;\n  },\n  show() {\n    return SHARED_GROUP;\n  },\n  removeClass() {\n    return SHARED_GROUP;\n  },\n  animate() {\n    return NOOP_RUNNER;\n  }\n};\nclass CanvasMarkerRef {\n  /**\n   * @param {CanvasGraphics} g\n   * @param {number} i\n   */\n  constructor(g, i) {\n    this.__isCanvasMark = true;\n    this._g = g;\n    this._i = i;\n  }\n  get node() {\n    return SHARED_MARKER_NODE;\n  }\n  /**\n   * @param {any} a\n   * @param {any} [v]\n   * @returns {any}\n   */\n  attr(a, v) {\n    if (typeof a === \"string\") {\n      if (a === \"fill\" && v !== void 0) this._g._setMarkerFill(this._i, v);\n      return v === void 0 ? null : this;\n    }\n    if (a && a.fill !== void 0) this._g._setMarkerFill(this._i, a.fill);\n    return this;\n  }\n  /** @param {any} _c */\n  add(_c) {\n    return this;\n  }\n  /** @param {any} _p */\n  addTo(_p) {\n    return this;\n  }\n  remove() {\n    return this;\n  }\n  /** @param {any} _s */\n  css(_s) {\n    return this;\n  }\n  /** @param {any} _v */\n  fill(_v) {\n    if (_v !== void 0) this._g._setMarkerFill(this._i, _v);\n    return this;\n  }\n  /** @param {any} _v */\n  stroke(_v) {\n    return this;\n  }\n  hide() {\n    return this;\n  }\n  show() {\n    return this;\n  }\n  /** @param {string} _c */\n  removeClass(_c) {\n    return this;\n  }\n  animate() {\n    return NOOP_RUNNER;\n  }\n}\nconst SHARED_RECT_REF = {\n  __isCanvasMark: true,\n  node: SHARED_MARKER_NODE,\n  /** @returns {any} */\n  attr() {\n    return SHARED_RECT_REF;\n  },\n  add() {\n    return SHARED_RECT_REF;\n  },\n  addTo() {\n    return SHARED_RECT_REF;\n  },\n  remove() {\n    return SHARED_RECT_REF;\n  },\n  /** @returns {any} */\n  css() {\n    return SHARED_RECT_REF;\n  },\n  animate() {\n    return NOOP_RUNNER;\n  }\n};\nclass CanvasMark {\n  /** @param {any} cmd */\n  constructor(cmd) {\n    this.__isCanvasMark = true;\n    this._cmd = cmd;\n    const self = this;\n    this.node = {\n      nodeName: cmd ? cmd.tag : \"g\",\n      instance: this,\n      style: {},\n      classList: { add() {\n      }, remove() {\n      }, toggle() {\n      }, contains: () => false },\n      /** @param {string} k @param {any} v */\n      setAttribute(k, v) {\n        self._applyAttr(k, v);\n      },\n      getAttribute: () => null,\n      removeAttribute() {\n      },\n      hasAttribute: () => false,\n      addEventListener() {\n      },\n      removeEventListener() {\n      },\n      appendChild() {\n      },\n      getBBox: () => ({ x: 0, y: 0, width: 0, height: 0 })\n    };\n  }\n  /**\n   * @param {string} k\n   * @param {any} v\n   */\n  _applyAttr(k, v) {\n    const cmd = this._cmd;\n    if (!cmd) return;\n    const sk = STYLE_KEYS[k];\n    if (sk !== void 0) cmd[sk] = v;\n  }\n  /**\n   * @param {any} a\n   * @param {any} [v]\n   * @returns {any}\n   */\n  attr(a, v) {\n    if (typeof a === \"string\") {\n      if (v === void 0) return null;\n      this._applyAttr(a, v);\n      return this;\n    }\n    for (const k in a) {\n      if (a[k] !== void 0) this._applyAttr(k, a[k]);\n    }\n    return this;\n  }\n  /** @param {any} _c */\n  add(_c) {\n    return this;\n  }\n  /** @param {any} _p */\n  addTo(_p) {\n    return this;\n  }\n  remove() {\n    return this;\n  }\n  clear() {\n    return this;\n  }\n  /** @param {any} _s */\n  css(_s) {\n    return this;\n  }\n  /** @param {any} v */\n  fill(v) {\n    if (typeof v === \"object\") return this.attr(v);\n    return this.attr(\"fill\", v);\n  }\n  /** @param {any} v */\n  stroke(v) {\n    if (typeof v === \"object\") {\n      if (v.color !== void 0) this.attr(\"stroke\", v.color);\n      if (v.width !== void 0) this.attr(\"stroke-width\", v.width);\n      return this;\n    }\n    return this.attr(\"stroke\", v);\n  }\n  /** @param {string} d */\n  plot(d) {\n    if (typeof d === \"string\" && this._cmd && this._cmd.tag === \"path\") {\n      this._cmd.d = d;\n    }\n    return this;\n  }\n  hide() {\n    return this;\n  }\n  show() {\n    return this;\n  }\n  /** @param {string} _c */\n  removeClass(_c) {\n    return this;\n  }\n  bbox() {\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n  animate() {\n    return NOOP_RUNNER;\n  }\n}\nclass CanvasGraphics {\n  /** @param {any} w */\n  constructor(w) {\n    this.w = w;\n    this._g = new Graphics(w);\n    this._list = [];\n    this._mx = new Float64Array(16);\n    this._my = new Float64Array(16);\n    this._msize = new Float64Array(16);\n    this._mshape = new Int16Array(16);\n    this._mstyle = new Int32Array(16);\n    this._msi = new Int32Array(16);\n    this._mn = 0;\n    this._mcap = 16;\n    this._crx = new Float64Array(16);\n    this._cry = new Float64Array(16);\n    this._crw = new Float64Array(16);\n    this._crh = new Float64Array(16);\n    this._crstyle = new Int32Array(16);\n    this._crsi = new Int32Array(16);\n    this._crdi = new Int32Array(16);\n    this._crn = 0;\n    this._crcap = 16;\n    this._cellRadius = 0;\n    this._styles = [];\n    this._styleMap = /* @__PURE__ */ new Map();\n    this._lf = NEVER;\n    this._ls = NEVER;\n    this._lsw = NEVER;\n    this._ld = NEVER;\n    this._lfo = NEVER;\n    this._lso = NEVER;\n    this._lid = -1;\n    this._lofFill = NEVER;\n    this._lofBase = -1;\n    this._lofId = -1;\n    this._rlf = NEVER;\n    this._rls = NEVER;\n    this._rlsw = NEVER;\n    this._rlfo = NEVER;\n    this._rlso = NEVER;\n    this._rlid = -1;\n  }\n  _resetStyleCache() {\n    this._lf = NEVER;\n    this._ls = NEVER;\n    this._lsw = NEVER;\n    this._ld = NEVER;\n    this._lfo = NEVER;\n    this._lso = NEVER;\n    this._lid = -1;\n    this._lofFill = NEVER;\n    this._lofBase = -1;\n    this._lofId = -1;\n    this._rlf = NEVER;\n    this._rls = NEVER;\n    this._rlsw = NEVER;\n    this._rlfo = NEVER;\n    this._rlso = NEVER;\n    this._rlid = -1;\n  }\n  /** Start a fresh scene (columnar marker store + object-command list). */\n  reset() {\n    this._list = [];\n    this._mn = 0;\n    this._styles = [];\n    this._styleMap = /* @__PURE__ */ new Map();\n    this._resetStyleCache();\n    const series = this.w.config.series || [];\n    let cap = 16;\n    for (let i = 0; i < series.length; i++) {\n      const d = series[i] && series[i].data;\n      if (Array.isArray(d)) cap += d.length;\n    }\n    cap = Math.ceil(cap * 1.15) + 16;\n    if (cap > this._mcap) this._allocMarkers(cap);\n    this._crn = 0;\n    this._cellRadius = 0;\n    if (cap > this._crcap) this._allocRects(cap);\n  }\n  /** @param {number} cap */\n  _allocRects(cap) {\n    this._crcap = cap;\n    this._crx = new Float64Array(cap);\n    this._cry = new Float64Array(cap);\n    this._crw = new Float64Array(cap);\n    this._crh = new Float64Array(cap);\n    this._crstyle = new Int32Array(cap);\n    this._crsi = new Int32Array(cap);\n    this._crdi = new Int32Array(cap);\n  }\n  /** Grow the rect columns (rare: capacity estimate was low). */\n  _growRects() {\n    const cap = this._crcap * 2;\n    const nx = new Float64Array(cap);\n    nx.set(this._crx);\n    this._crx = nx;\n    const ny = new Float64Array(cap);\n    ny.set(this._cry);\n    this._cry = ny;\n    const nw = new Float64Array(cap);\n    nw.set(this._crw);\n    this._crw = nw;\n    const nh = new Float64Array(cap);\n    nh.set(this._crh);\n    this._crh = nh;\n    const nst = new Int32Array(cap);\n    nst.set(this._crstyle);\n    this._crstyle = nst;\n    const nsi = new Int32Array(cap);\n    nsi.set(this._crsi);\n    this._crsi = nsi;\n    const ndi = new Int32Array(cap);\n    ndi.set(this._crdi);\n    this._crdi = ndi;\n    this._crcap = cap;\n  }\n  /** @param {number} cap */\n  _allocMarkers(cap) {\n    this._mcap = cap;\n    this._mx = new Float64Array(cap);\n    this._my = new Float64Array(cap);\n    this._msize = new Float64Array(cap);\n    this._mshape = new Int16Array(cap);\n    this._mstyle = new Int32Array(cap);\n    this._msi = new Int32Array(cap);\n  }\n  /** Grow the marker columns (rare: capacity estimate was low). */\n  _growMarkers() {\n    const cap = this._mcap * 2;\n    const nx = new Float64Array(cap);\n    nx.set(this._mx);\n    this._mx = nx;\n    const ny = new Float64Array(cap);\n    ny.set(this._my);\n    this._my = ny;\n    const ns = new Float64Array(cap);\n    ns.set(this._msize);\n    this._msize = ns;\n    const nsh = new Int16Array(cap);\n    nsh.set(this._mshape);\n    this._mshape = nsh;\n    const nst = new Int32Array(cap);\n    nst.set(this._mstyle);\n    this._mstyle = nst;\n    const nsi = new Int32Array(cap);\n    nsi.set(this._msi);\n    this._msi = nsi;\n    this._mcap = cap;\n  }\n  displayList() {\n    return this._list;\n  }\n  markerCount() {\n    return this._mn;\n  }\n  /**\n   * Intern a marker style; returns its palette id. Keeps the per-point columns\n   * numeric (no retained per-point object).\n   * @param {any} fill @param {any} stroke @param {any} sw @param {any} dash\n   * @param {any} fo @param {any} so\n   * @returns {number}\n   */\n  _internStyle(fill, stroke, sw, dash, fo, so) {\n    const key = `${fill}|${stroke}|${sw}|${dash}|${fo}|${so}`;\n    const cached = this._styleMap.get(key);\n    if (cached !== void 0) return cached;\n    const id = this._styles.length;\n    this._styles.push({\n      fill,\n      stroke,\n      strokeWidth: sw,\n      strokeDash: dash,\n      fillOpacity: fo,\n      strokeOpacity: so\n    });\n    this._styleMap.set(key, id);\n    return id;\n  }\n  /**\n   * Override a recorded marker's fill (scatter sets a per-point fill via `attr`\n   * right after drawMarker). Like the draw path, the string-key intern is cached\n   * on (base style, fill) so the Map/string work stays OFF the per-point path\n   * (it otherwise mixes with the `_mstyle[i]` typed-array write → the ~80× slow\n   * path). For a scatter series the base + fill are uniform, so it interns once.\n   * @param {number} i @param {any} fill\n   */\n  _setMarkerFill(i, fill) {\n    const base = this._mstyle[i];\n    if (fill === this._lofFill && base === this._lofBase) {\n      this._mstyle[i] = this._lofId;\n      return;\n    }\n    const s = this._styles[base];\n    if (!s || s.fill === fill) {\n      this._lofFill = fill;\n      this._lofBase = base;\n      this._lofId = base;\n      return;\n    }\n    const id = this._internStyle(\n      fill,\n      s.stroke,\n      s.strokeWidth,\n      s.strokeDash,\n      s.fillOpacity,\n      s.strokeOpacity\n    );\n    this._mstyle[i] = id;\n    this._lofFill = fill;\n    this._lofBase = base;\n    this._lofId = id;\n  }\n  /** @param {number} i @returns {any} the style object for a marker index */\n  markerStyle(i) {\n    return this._styles[this._mstyle[i]];\n  }\n  /** @param {number} i @returns {number} series (realIndex) of a marker, -1 if none */\n  markerSeries(i) {\n    return this._msi[i];\n  }\n  /** @param {number} id @returns {string} */\n  shapeName(id) {\n    return SHAPE_NAME[id] || \"circle\";\n  }\n  // ── columnar rect cell (heatmap): parallel unboxed arrays, no per-cell object ──\n  /**\n   * Record a heatmap-style cell (a filled, optionally stroked rect). Geometry\n   * and style are captured up front into the columns; the returned handle is a\n   * shared no-op (the emit site sets nothing back on it in canvas mode).\n   * @param {number} x @param {number} y @param {number} w @param {number} h\n   * @param {any} opts {fill, fillOpacity, stroke, strokeWidth, radius, seriesIndex, dataPointIndex}\n   * @returns {any}\n   */\n  drawRectCell(x, y, w, h, opts = {}) {\n    const styleId = this._rectStyleId(opts);\n    if (this._crn >= this._crcap) this._growRects();\n    const i = this._crn++;\n    this._crx[i] = x || 0;\n    this._cry[i] = y || 0;\n    this._crw[i] = w > 0 ? w : 0;\n    this._crh[i] = h > 0 ? h : 0;\n    this._crstyle[i] = styleId;\n    this._crsi[i] = opts.seriesIndex == null ? -1 : opts.seriesIndex;\n    this._crdi[i] = opts.dataPointIndex == null ? -1 : opts.dataPointIndex;\n    if (opts.radius) this._cellRadius = opts.radius;\n    return SHARED_RECT_REF;\n  }\n  /**\n   * Resolve (and dedupe) a rect-cell style → shared-palette id. A last-style\n   * cache keeps the Map/string work off the path for runs of same-style cells.\n   * @param {any} opts\n   * @returns {number}\n   */\n  _rectStyleId(opts) {\n    const fill = opts.fill;\n    const stroke = opts.stroke;\n    const sw = opts.strokeWidth;\n    const fo = opts.fillOpacity;\n    const so = opts.strokeOpacity;\n    if (fill === this._rlf && stroke === this._rls && sw === this._rlsw && fo === this._rlfo && so === this._rlso) {\n      return this._rlid;\n    }\n    const id = this._internStyle(fill, stroke, sw, 0, fo, so);\n    this._rlf = fill;\n    this._rls = stroke;\n    this._rlsw = sw;\n    this._rlfo = fo;\n    this._rlso = so;\n    this._rlid = id;\n    return id;\n  }\n  /** @returns {number} number of recorded rect cells */\n  rectCount() {\n    return this._crn;\n  }\n  /** @param {number} i @returns {any} the style object for a rect cell */\n  rectStyle(i) {\n    return this._styles[this._crstyle[i]];\n  }\n  /** @param {number} i @returns {number} series (realIndex) of a cell, -1 if none */\n  rectSeries(i) {\n    return this._crsi[i];\n  }\n  /**\n   * @param {string} tag\n   * @param {number} z\n   * @returns {any}\n   */\n  _cmd(tag, z) {\n    const cmd = {\n      tag,\n      z: z || 0,\n      fill: void 0,\n      stroke: void 0,\n      strokeWidth: void 0,\n      strokeDash: void 0,\n      lineCap: void 0,\n      fillOpacity: void 0,\n      strokeOpacity: void 0,\n      fillRule: void 0\n    };\n    this._list.push(cmd);\n    return cmd;\n  }\n  // ── organizational (groups don't paint or record) ──\n  // Series draw() creates a wrap group PER POINT (scatter.draw / plotChartMarkers\n  // run per point), so allocating a handle per group is ~50k heavy allocations\n  // at scale: enough transient churn to tip V8 into a GC blow-up. Groups carry\n  // no paint state in canvas mode (attr/add are no-ops), so every group shares\n  // one singleton: zero per-point allocation.\n  /** @param {any} _attrs */\n  group(_attrs) {\n    return SHARED_GROUP;\n  }\n  // ── per-point marker (line/area markers, scatter, bubble): COLUMNAR ──\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} opts\n   */\n  drawMarker(x, y, opts = {}) {\n    var _a;\n    const styleId = this._markerStyleId(opts);\n    if (this._mn >= this._mcap) this._growMarkers();\n    const i = this._mn++;\n    this._mx[i] = x || 0;\n    this._my[i] = typeof y === \"number\" ? y : NaN;\n    this._msize[i] = opts.pSize || 0;\n    this._mshape[i] = (_a = SHAPE_ID[opts.shape || \"circle\"]) != null ? _a : 0;\n    this._mstyle[i] = styleId;\n    this._msi[i] = opts.seriesIndex == null ? -1 : opts.seriesIndex;\n    return new CanvasMarkerRef(this, i);\n  }\n  /**\n   * Resolve (and dedupe) a marker style → palette id. A last-style cache keeps\n   * the Map/string work off the path when consecutive markers share a style\n   * (the common case), so intern runs once per style run.\n   * @param {any} opts\n   * @returns {number}\n   */\n  _markerStyleId(opts) {\n    const shape = opts.shape || \"circle\";\n    const strokeTinted = shape === \"line\" || shape === \"plus\" || shape === \"cross\";\n    const fill = strokeTinted ? \"none\" : opts.pointFillColor;\n    const stroke = strokeTinted ? opts.pointFillColor : opts.pointStrokeColor;\n    const sw = opts.pointStrokeWidth;\n    const dash = opts.pointStrokeDashArray;\n    const fo = opts.pointFillOpacity;\n    const so = strokeTinted ? opts.pointFillOpacity : opts.pointStrokeOpacity;\n    if (fill === this._lf && stroke === this._ls && sw === this._lsw && dash === this._ld && fo === this._lfo && so === this._lso) {\n      return this._lid;\n    }\n    const id = this._internStyle(fill, stroke, sw, dash, fo, so);\n    this._lf = fill;\n    this._ls = stroke;\n    this._lsw = sw;\n    this._ld = dash;\n    this._lfo = fo;\n    this._lso = so;\n    this._lid = id;\n    return id;\n  }\n  // ── series body path (line/area/bar): object command ──\n  /** @param {any} opts */\n  renderPaths(opts) {\n    const cmd = this._cmd(\"path\", opts.realIndex);\n    cmd.d = opts.pathTo;\n    if (opts.pathToNumeric) {\n      cmd.nxs = opts.pathToNumeric.xs;\n      cmd.nys = opts.pathToNumeric.ys;\n      cmd.ncloseY = opts.pathToNumeric.closeY;\n    }\n    cmd.stroke = opts.stroke;\n    cmd.strokeWidth = opts.strokeWidth;\n    cmd.fill = opts.fill;\n    cmd.lineCap = opts.strokeLinecap;\n    cmd.si = opts.realIndex;\n    this.w.globals.animationEnded = true;\n    return new CanvasMark(cmd);\n  }\n  /** @param {any} opts */\n  drawPath(opts) {\n    const cmd = this._cmd(\"path\", 0);\n    cmd.d = opts.d;\n    cmd.stroke = opts.stroke;\n    cmd.strokeWidth = opts.strokeWidth;\n    cmd.fill = opts.fill;\n    cmd.fillOpacity = opts.fillOpacity;\n    cmd.strokeOpacity = opts.strokeOpacity;\n    cmd.lineCap = opts.strokeLinecap;\n    cmd.strokeDash = opts.strokeDashArray;\n    return new CanvasMark(cmd);\n  }\n  // ── remaining primitives (contract completeness / Marks #11 forward-compat) ──\n  /**\n   * @param {number} x1 @param {number} y1 @param {number} x2 @param {number} y2\n   * @param {string} lineColor @param {any} dashArray @param {number} strokeWidth\n   */\n  drawLine(x1, y1, x2, y2, lineColor = \"#a8a8a8\", dashArray = 0, strokeWidth = 1) {\n    const cmd = this._cmd(\"line\", 0);\n    cmd.lx1 = x1;\n    cmd.ly1 = y1;\n    cmd.lx2 = x2;\n    cmd.ly2 = y2;\n    cmd.stroke = lineColor;\n    cmd.strokeDash = dashArray;\n    cmd.strokeWidth = strokeWidth;\n    return new CanvasMark(cmd);\n  }\n  /**\n   * Mirrors Graphics.drawRect's full signature (including stroke), so callers\n   * that stroke rects (Marks api.rect, chart code) paint the same on canvas.\n   * @param {number} x1 @param {number} y1 @param {number} x2 @param {number} y2\n   * @param {number} radius @param {string} color @param {number} opacity\n   * @param {number|null} [strokeWidth] @param {string|null} [strokeColor]\n   * @param {any} [strokeDashArray]\n   */\n  drawRect(x1 = 0, y1 = 0, x2 = 0, y2 = 0, radius = 0, color = \"#fefefe\", opacity = 1, strokeWidth = null, strokeColor = null, strokeDashArray = 0) {\n    const cmd = this._cmd(\"rect\", 0);\n    cmd.x1 = x1;\n    cmd.y1 = y1;\n    cmd.rw = x2 > 0 ? x2 : 0;\n    cmd.rh = y2 > 0 ? y2 : 0;\n    cmd.radius = radius;\n    cmd.fill = color;\n    cmd.fillOpacity = opacity;\n    if (strokeColor != null) {\n      cmd.stroke = strokeColor;\n      cmd.strokeWidth = strokeWidth == null ? 1 : strokeWidth;\n      cmd.strokeDash = strokeDashArray;\n    }\n    return new CanvasMark(cmd);\n  }\n  /**\n   * @param {number} radius\n   * @param {any} attrs\n   */\n  drawCircle(radius, attrs = null) {\n    const cmd = this._cmd(\"circle\", 0);\n    cmd.r = radius < 0 ? 0 : radius;\n    if (attrs) {\n      cmd.cx = attrs.cx;\n      cmd.cy = attrs.cy;\n      if (attrs.fill !== void 0) cmd.fill = attrs.fill;\n      if (attrs.stroke !== void 0) cmd.stroke = attrs.stroke;\n    }\n    return new CanvasMark(cmd);\n  }\n  /** @param {any} opts */\n  drawText(opts) {\n    const cmd = this._cmd(\"text\", 0);\n    cmd.text = Array.isArray(opts.text) ? opts.text.join(\" \") : opts.text;\n    cmd.tx = opts.x;\n    cmd.ty = opts.y;\n    cmd.textAnchor = opts.textAnchor || \"start\";\n    cmd.fontSize = opts.fontSize;\n    cmd.fontFamily = opts.fontFamily;\n    cmd.fill = opts.foreColor;\n    return new CanvasMark(cmd);\n  }\n  /**\n   * Resolve a marker's SVG path `d` (non-circle shapes) lazily at paint time.\n   * @param {number} x @param {number} y @param {number} shapeId @param {number} size\n   * @returns {string}\n   */\n  markerPath(x, y, shapeId, size) {\n    return this._g.getMarkerPath(x, y, SHAPE_NAME[shapeId] || \"circle\", size);\n  }\n}\nconst TWO_PI = Math.PI * 2;\nconst DPR_CAP = 2;\nclass CanvasCompositor {\n  /** @param {any} w */\n  constructor(w) {\n    this.w = w;\n    this._host = null;\n    this._canvas = null;\n    this._c2d = null;\n    this._margin = 0;\n    this._dpr = 1;\n    this._dim = null;\n    this._alpha = 1;\n    this._unitPaths = /* @__PURE__ */ new Map();\n    this._markerBatches = 0;\n  }\n  /** Marker style-batches applied during the last paint() (dev/test hook). */\n  markerBatchCount() {\n    return this._markerBatches;\n  }\n  /**\n   * Opacity multiplier for a series index under the active dim spec: 1 for the\n   * highlighted series (or when not dimming, or for unidentified marks), else\n   * the inactive opacity.\n   * @param {number} si\n   * @returns {number}\n   */\n  _seriesAlpha(si) {\n    const d = this._dim;\n    if (!d || d.active == null || d.active < 0 || si == null || si < 0) return 1;\n    return si === d.active ? 1 : d.opacity == null ? 0.2 : d.opacity;\n  }\n  _plotDims() {\n    var _a;\n    const gw = Math.max(0, Math.ceil(this.w.layout.gridWidth || 0));\n    const gh = Math.max(0, Math.ceil(this.w.layout.gridHeight || 0));\n    const largest = ((_a = this.w.globals.markers) == null ? void 0 : _a.largestSize) || 0;\n    const margin = Math.ceil(largest + 8);\n    return { gw, gh, margin };\n  }\n  /**\n   * Create (or recreate) the foreignObject + canvas sized to the plot rect and\n   * return the SVGElement host that `plotChartType` inserts into the tree.\n   * @returns {any}\n   */\n  createHost() {\n    const win = BrowserAPIs.getWindow();\n    this._dpr = Math.min(DPR_CAP, win && win.devicePixelRatio || 1);\n    const { gw, gh, margin } = this._plotDims();\n    this._margin = margin;\n    const w = gw + margin * 2;\n    const h = gh + margin * 2;\n    const fo = BrowserAPIs.createElementNS(SVGNS$2, \"foreignObject\");\n    fo.setAttribute(\"x\", String(-margin));\n    fo.setAttribute(\"y\", String(-margin));\n    fo.setAttribute(\"width\", String(w));\n    fo.setAttribute(\"height\", String(h));\n    fo.setAttribute(\"class\", \"apexcharts-canvas-series\");\n    fo.style.overflow = \"visible\";\n    const canvas = (\n      /** @type {any} */\n      BrowserAPIs.createElement(\"canvas\")\n    );\n    canvas.setAttribute(\"class\", \"apexcharts-series-canvas\");\n    canvas.width = Math.max(1, Math.round(w * this._dpr));\n    canvas.height = Math.max(1, Math.round(h * this._dpr));\n    canvas.style.width = w + \"px\";\n    canvas.style.height = h + \"px\";\n    canvas.style.pointerEvents = \"none\";\n    fo.appendChild(canvas);\n    this._canvas = canvas;\n    this._c2d = canvas.getContext(\"2d\");\n    this._host = new SVGElement(fo);\n    return this._host;\n  }\n  getHost() {\n    return this._host;\n  }\n  clear() {\n    if (!this._c2d || !this._canvas) return;\n    this._c2d.setTransform(1, 0, 0, 1, 0, 0);\n    this._c2d.clearRect(0, 0, this._canvas.width, this._canvas.height);\n  }\n  /**\n   * Re-check devicePixelRatio before painting: a restyle() repaint after the\n   * window moved between monitors would otherwise keep the stale backing-store\n   * scale (blurry or over-sized) until the next full render rebuilds the host.\n   * The canvas CSS size is unchanged; only the backing store is resized.\n   */\n  _syncDpr() {\n    if (!this._canvas) return;\n    const win = BrowserAPIs.getWindow();\n    const dpr = Math.min(DPR_CAP, win && win.devicePixelRatio || 1);\n    if (dpr === this._dpr) return;\n    this._dpr = dpr;\n    const wCss = parseFloat(this._canvas.style.width) || 0;\n    const hCss = parseFloat(this._canvas.style.height) || 0;\n    this._canvas.width = Math.max(1, Math.round(wCss * dpr));\n    this._canvas.height = Math.max(1, Math.round(hCss * dpr));\n  }\n  /**\n   * Paint the recorded scene: object commands (series bodies / rects / lines /\n   * text) first, then the columnar markers on top (matching SVG z-order where\n   * markers sit above the series path). `shim` supplies the columnar marker\n   * arrays + lazy non-circle marker geometry.\n   * @param {any[]} list\n   * @param {any} shim\n   * @param {{active:number, opacity:number}|null} [dim] per-series dim spec\n   *   (hover / legend restyle); null repaints at full opacity.\n   */\n  paint(list, shim2, dim = null) {\n    const ctx = this._c2d;\n    if (!ctx) return;\n    this._dim = dim || null;\n    this._syncDpr();\n    this.clear();\n    const dpr = this._dpr;\n    const m = this._margin;\n    ctx.setTransform(dpr, 0, 0, dpr, m * dpr, m * dpr);\n    if (list.length) {\n      const ordered = list.length > 1 ? list.map((c, i) => [c, i]).sort(\n        (a, b) => a[0].z === b[0].z ? a[1] - b[1] : a[0].z - b[0].z\n      ).map((pair) => pair[0]) : list;\n      for (let i = 0; i < ordered.length; i++) {\n        const c = ordered[i];\n        this._alpha = this._dim ? this._seriesAlpha(c.si) : 1;\n        this._paintOne(ctx, c);\n      }\n    }\n    this._paintRects(ctx, shim2);\n    this._paintMarkers(ctx, shim2);\n    this._alpha = 1;\n  }\n  /**\n   * Paint the columnar rect cells (heatmap) as STYLE BATCHES: one fill/stroke\n   * state application per run of consecutive same-style cells, then a fast\n   * fillRect (or a roundRect path when the shared corner radius is non-zero)\n   * per cell. Clipped to the plot rect so cells never bleed into the canvas\n   * margin (mirrors the SVG gridRectMask). Per-cell globalAlpha carries the\n   * hover/legend dim multiplier when a dim spec is active.\n   * @param {any} ctx\n   * @param {any} shim\n   */\n  _paintRects(ctx, shim2) {\n    const n = shim2.rectCount ? shim2.rectCount() : 0;\n    if (!n) return;\n    const rx = shim2._crx;\n    const ry = shim2._cry;\n    const rw = shim2._crw;\n    const rh = shim2._crh;\n    const rstyle = shim2._crstyle;\n    const radius = shim2._cellRadius || 0;\n    const cx = (\n      /** @type {any} */\n      ctx\n    );\n    const useRound = radius > 0 && typeof cx.roundRect === \"function\";\n    const dimming = !!this._dim;\n    const gw = Math.max(0, this.w.layout.gridWidth || 0);\n    const gh = Math.max(0, this.w.layout.gridHeight || 0);\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(0, 0, gw, gh);\n    ctx.clip();\n    let i = 0;\n    while (i < n) {\n      const styleId = rstyle[i];\n      const style = shim2.rectStyle(i);\n      if (!style) {\n        i++;\n        continue;\n      }\n      const fill = style.fill;\n      const doFill = fill && fill !== \"none\" && !(typeof fill === \"string\" && fill.indexOf(\"url(\") === 0);\n      const stroke = style.stroke;\n      const sw = style.strokeWidth == null ? 0 : Number(style.strokeWidth);\n      const doStroke = stroke && stroke !== \"none\" && sw > 0 && !(typeof stroke === \"string\" && stroke.indexOf(\"url(\") === 0);\n      if (doFill) ctx.fillStyle = fill;\n      if (doStroke) {\n        ctx.strokeStyle = stroke;\n        ctx.lineWidth = sw;\n        ctx.setLineDash([]);\n      }\n      const baseFillA = style.fillOpacity == null ? 1 : Number(style.fillOpacity);\n      const baseStrokeA = style.strokeOpacity == null ? 1 : Number(style.strokeOpacity);\n      let j = i;\n      while (j < n && rstyle[j] === styleId) {\n        const w = rw[j];\n        const h = rh[j];\n        if (w > 0 && h > 0) {\n          const f = dimming ? this._seriesAlpha(shim2.rectSeries(j)) : 1;\n          if (useRound) {\n            ctx.beginPath();\n            cx.roundRect(rx[j], ry[j], w, h, radius);\n            if (doFill) {\n              ctx.globalAlpha = baseFillA * f;\n              ctx.fill();\n            }\n            if (doStroke) {\n              ctx.globalAlpha = baseStrokeA * f;\n              ctx.stroke();\n            }\n          } else {\n            if (doFill) {\n              ctx.globalAlpha = baseFillA * f;\n              ctx.fillRect(rx[j], ry[j], w, h);\n            }\n            if (doStroke) {\n              ctx.globalAlpha = baseStrokeA * f;\n              ctx.strokeRect(rx[j], ry[j], w, h);\n            }\n          }\n        }\n        j++;\n      }\n      i = j;\n    }\n    ctx.globalAlpha = 1;\n    ctx.restore();\n  }\n  /**\n   * Reusable unit Path2D for a (shape, size): the shape's geometry built at the\n   * origin once, then translated per marker via setTransform. Returns null when\n   * the geometry string cannot be parsed.\n   * @param {any} shim\n   * @param {number} shapeId\n   * @param {number} size\n   * @returns {any}\n   */\n  _unitPath(shim2, shapeId, size) {\n    const key = shapeId + \"|\" + size;\n    let p = this._unitPaths.get(key);\n    if (p === void 0) {\n      try {\n        p = new Path2D(shim2.markerPath(0, 0, shapeId, size));\n      } catch (e) {\n        p = null;\n      }\n      this._unitPaths.set(key, p);\n    }\n    return p;\n  }\n  /**\n   * Markers paint as STYLE BATCHES: one fill/stroke state application per run\n   * of consecutive same-style markers (a uniform single-series scatter is\n   * exactly one batch), then per-marker geometry inside the run. Per-marker\n   * geometry stays painter's-ordered (fill+stroke per marker) so overlapping\n   * semi-transparent markers composite exactly as SVG does.\n   * @param {any} ctx\n   * @param {any} shim\n   */\n  _paintMarkers(ctx, shim2) {\n    this._markerBatches = 0;\n    const n = shim2.markerCount();\n    if (!n) return;\n    const mx = shim2._mx;\n    const my = shim2._my;\n    const msize = shim2._msize;\n    const mshape = shim2._mshape;\n    const mstyle = shim2._mstyle;\n    const dimming = !!this._dim;\n    if (!dimming) this._alpha = 1;\n    let i = 0;\n    while (i < n) {\n      const styleId = mstyle[i];\n      const shapeId = mshape[i];\n      const style = shim2.markerStyle(i);\n      if (!style) {\n        i++;\n        continue;\n      }\n      const doFill = this._applyFill(ctx, style);\n      const doStroke = this._applyStroke(ctx, style);\n      this._markerBatches++;\n      const baseFillA = style.fillOpacity == null ? 1 : Number(style.fillOpacity);\n      const baseStrokeA = style.strokeOpacity == null ? 1 : Number(style.strokeOpacity);\n      if (shapeId === 0) {\n        let j = i;\n        while (j < n && mshape[j] === 0 && mstyle[j] === styleId) {\n          const r = msize[j] || 0;\n          const y = my[j];\n          if (r > 0 && y === y) {\n            ctx.beginPath();\n            ctx.arc(mx[j], y, r, 0, TWO_PI);\n            if (dimming) {\n              const f = this._seriesAlpha(shim2.markerSeries(j));\n              if (doFill) {\n                ctx.globalAlpha = baseFillA * f;\n                ctx.fill();\n              }\n              if (doStroke) {\n                ctx.globalAlpha = baseStrokeA * f;\n                ctx.stroke();\n              }\n            } else {\n              if (doFill) ctx.fill();\n              if (doStroke) ctx.stroke();\n            }\n          }\n          j++;\n        }\n        ctx.globalAlpha = 1;\n        i = j;\n      } else {\n        const dpr = this._dpr;\n        const m = this._margin;\n        let j = i;\n        while (j < n && mshape[j] === shapeId && mstyle[j] === styleId) {\n          const y = my[j];\n          const size = msize[j];\n          if (y === y && size > 0) {\n            const p = this._unitPath(shim2, shapeId, size);\n            if (p) {\n              ctx.setTransform(dpr, 0, 0, dpr, (m + mx[j]) * dpr, (m + y) * dpr);\n              const f = dimming ? this._seriesAlpha(shim2.markerSeries(j)) : 1;\n              if (doFill) {\n                ctx.globalAlpha = baseFillA * f;\n                ctx.fill(p);\n              }\n              if (doStroke) {\n                ctx.globalAlpha = baseStrokeA * f;\n                ctx.stroke(p);\n              }\n            }\n          }\n          j++;\n        }\n        ctx.setTransform(dpr, 0, 0, dpr, m * dpr, m * dpr);\n        ctx.globalAlpha = 1;\n        i = j;\n      }\n    }\n  }\n  /**\n   * Paint a series path from its numeric fast-path coords: a direct\n   * moveTo/lineTo loop over the typed arrays, no Path2D and no d-string\n   * parse. `ncloseY` (areas) closes the polygon down to the baseline exactly\n   * like the string form's `L xLast bottom L x0 bottom z` tail.\n   * @param {any} ctx\n   * @param {any} cmd\n   */\n  _paintNumericPath(ctx, cmd) {\n    const xs = cmd.nxs;\n    const ys = cmd.nys;\n    const n = xs.length;\n    if (!n) return;\n    ctx.beginPath();\n    ctx.moveTo(xs[0], ys[0]);\n    for (let k = 1; k < n; k++) {\n      ctx.lineTo(xs[k], ys[k]);\n    }\n    if (cmd.ncloseY != null) {\n      ctx.lineTo(xs[n - 1], cmd.ncloseY);\n      ctx.lineTo(xs[0], cmd.ncloseY);\n      ctx.closePath();\n    }\n    if (this._applyFill(ctx, cmd)) {\n      ctx.fill(cmd.fillRule === \"evenodd\" ? \"evenodd\" : \"nonzero\");\n    }\n    if (this._applyStroke(ctx, cmd)) {\n      ctx.stroke();\n    }\n    ctx.globalAlpha = 1;\n  }\n  /**\n   * @param {any} ctx\n   * @param {any} cmd style-bearing flat command\n   */\n  _paintOne(ctx, cmd) {\n    switch (cmd.tag) {\n      case \"path\": {\n        if (cmd.nxs) {\n          this._paintNumericPath(ctx, cmd);\n          break;\n        }\n        if (!cmd.d) return;\n        if (!cmd.path2d) {\n          try {\n            cmd.path2d = new Path2D(cmd.d);\n          } catch (e) {\n            return;\n          }\n        }\n        this._fillStrokePath(ctx, cmd, cmd.path2d);\n        break;\n      }\n      case \"rect\": {\n        const p = new Path2D();\n        if (cmd.radius && typeof /** @type {any} */\n        p.roundRect === \"function\") {\n          p.roundRect(cmd.x1, cmd.y1, cmd.rw, cmd.rh, cmd.radius);\n        } else {\n          p.rect(cmd.x1, cmd.y1, cmd.rw, cmd.rh);\n        }\n        this._fillStrokePath(ctx, cmd, p);\n        break;\n      }\n      case \"circle\": {\n        if (!(cmd.r > 0)) return;\n        ctx.beginPath();\n        ctx.arc(cmd.cx, cmd.cy, cmd.r, 0, TWO_PI);\n        this._fillStroke(ctx, cmd);\n        break;\n      }\n      case \"line\": {\n        ctx.beginPath();\n        ctx.moveTo(cmd.lx1, cmd.ly1);\n        ctx.lineTo(cmd.lx2, cmd.ly2);\n        this._strokeOnly(ctx, cmd);\n        break;\n      }\n      case \"text\": {\n        if (cmd.text == null) return;\n        ctx.save();\n        ctx.globalAlpha = this._alpha;\n        ctx.fillStyle = cmd.fill || \"#000\";\n        const size = cmd.fontSize || \"11px\";\n        ctx.font = `${typeof size === \"number\" ? size + \"px\" : size} ${cmd.fontFamily || \"Helvetica, Arial, sans-serif\"}`;\n        ctx.textAlign = cmd.textAnchor === \"middle\" ? \"center\" : cmd.textAnchor === \"end\" ? \"right\" : \"left\";\n        ctx.fillText(String(cmd.text), cmd.tx, cmd.ty);\n        ctx.restore();\n        break;\n      }\n    }\n  }\n  /**\n   * @param {any} ctx\n   * @param {any} style\n   * @param {any} path2d\n   */\n  _fillStrokePath(ctx, style, path2d) {\n    if (this._applyFill(ctx, style)) {\n      ctx.fill(path2d, style.fillRule === \"evenodd\" ? \"evenodd\" : \"nonzero\");\n    }\n    if (this._applyStroke(ctx, style)) {\n      ctx.stroke(path2d);\n    }\n    ctx.globalAlpha = 1;\n  }\n  /**\n   * @param {any} ctx\n   * @param {any} style\n   */\n  _fillStroke(ctx, style) {\n    if (this._applyFill(ctx, style)) ctx.fill();\n    if (this._applyStroke(ctx, style)) ctx.stroke();\n    ctx.globalAlpha = 1;\n  }\n  /**\n   * @param {any} ctx\n   * @param {any} style\n   */\n  _strokeOnly(ctx, style) {\n    if (this._applyStroke(ctx, style)) ctx.stroke();\n    ctx.globalAlpha = 1;\n  }\n  /**\n   * Set fill state. Returns false when there's nothing to fill.\n   * @param {any} ctx\n   * @param {any} style\n   */\n  _applyFill(ctx, style) {\n    const fill = style.fill;\n    if (!fill || fill === \"none\") return false;\n    if (typeof fill === \"string\" && fill.indexOf(\"url(\") === 0) return false;\n    ctx.globalAlpha = (style.fillOpacity == null ? 1 : Number(style.fillOpacity)) * this._alpha;\n    ctx.fillStyle = fill;\n    return true;\n  }\n  /**\n   * Set stroke state. Returns false when there's nothing to stroke.\n   * @param {any} ctx\n   * @param {any} style\n   */\n  _applyStroke(ctx, style) {\n    const stroke = style.stroke;\n    const sw = style.strokeWidth == null ? 1 : Number(style.strokeWidth);\n    if (!stroke || stroke === \"none\" || !(sw > 0)) return false;\n    if (typeof stroke === \"string\" && stroke.indexOf(\"url(\") === 0) return false;\n    ctx.globalAlpha = (style.strokeOpacity == null ? 1 : Number(style.strokeOpacity)) * this._alpha;\n    ctx.strokeStyle = stroke;\n    ctx.lineWidth = sw;\n    ctx.lineCap = style.lineCap || \"butt\";\n    const dash = style.strokeDash;\n    if (dash && dash !== 0) {\n      ctx.setLineDash(Array.isArray(dash) ? dash : [Number(dash)]);\n    } else {\n      ctx.setLineDash([]);\n    }\n    return true;\n  }\n  /** Series bitmap for the export composite bridge (P4). @returns {string|null} */\n  toDataURL() {\n    return this._canvas ? this._canvas.toDataURL() : null;\n  }\n  destroy() {\n    this._host = null;\n    this._canvas = null;\n    this._c2d = null;\n    this._unitPaths.clear();\n  }\n}\nclass CanvasRenderer {\n  /**\n   * @param {any} w\n   * @param {any} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.kind = \"canvas\";\n    this._g = new CanvasGraphics(w);\n    this._compositor = new CanvasCompositor(w);\n  }\n  // ── lifecycle ──\n  /** Start a fresh series display list for this render pass. */\n  beginSeries() {\n    this._g.reset();\n  }\n  /**\n   * Finalize the pass: paint the recorded display list and return the SVG host\n   * (a `<foreignObject><canvas>`) for `plotChartType` to composite into the tree.\n   * @returns {any}\n   */\n  present() {\n    const host = this._compositor.createHost();\n    this._compositor.paint(this._g.displayList(), this._g);\n    return host;\n  }\n  /** Fast-path wipe of the series layer. */\n  clear() {\n    this._compositor.clear();\n  }\n  /**\n   * Whether the existing <canvas> host can be repainted in place (it exists\n   * and is still mounted). Used by the data-only fast update path to skip\n   * recreating the foreignObject + backing store on every tick.\n   * @returns {boolean}\n   */\n  canRepaintInPlace() {\n    const host = this._compositor.getHost();\n    return !!(host && host.node && host.node.isConnected);\n  }\n  /** Repaint the freshly recorded display list into the EXISTING canvas. */\n  repaintInPlace() {\n    this._compositor.paint(this._g.displayList(), this._g);\n  }\n  // ── emit primitives (delegate to the display-list shim) ──\n  /** @param {any} attrs */\n  group(attrs) {\n    return this._g.group(attrs);\n  }\n  /** @param {any} opts */\n  drawPath(opts) {\n    return this._g.drawPath(opts);\n  }\n  /** @param {any[]} args */\n  drawLine(...args) {\n    return (\n      /** @type {any} */\n      this._g.drawLine(...args)\n    );\n  }\n  /** @param {any[]} args */\n  drawRect(...args) {\n    return (\n      /** @type {any} */\n      this._g.drawRect(...args)\n    );\n  }\n  /**\n   * Columnar heatmap-cell rect (dense same-shape rects): recorded into typed\n   * arrays, painted as style batches. Distinct from drawRect (object command)\n   * so 100k cells don't allocate 100k retained commands.\n   * @param {number} x @param {number} y @param {number} w @param {number} h\n   * @param {any} opts\n   */\n  drawRectCell(x, y, w, h, opts) {\n    return this._g.drawRectCell(x, y, w, h, opts);\n  }\n  /**\n   * @param {number} r\n   * @param {any} attrs\n   */\n  drawCircle(r, attrs) {\n    return this._g.drawCircle(r, attrs);\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} opts\n   */\n  drawMarker(x, y, opts) {\n    return this._g.drawMarker(x, y, opts);\n  }\n  /** @param {any} opts */\n  renderPaths(opts) {\n    return this._g.renderPaths(opts);\n  }\n  /** @param {any} opts */\n  drawText(opts) {\n    return this._g.drawText(opts);\n  }\n  // ── capabilities ──\n  /** @param {string} feature */\n  supports(feature) {\n    return feature === \"solidFill\" || feature === \"dashArray\";\n  }\n  // ── interaction ──\n  // Line/area/bar/scatter tooltips resolve via coordinate lookup (pointsArray),\n  // so those need no per-mark query. Heatmap cells, however, are hovered by\n  // point (the SVG path hit-tests the <rect> under the cursor); with cells on\n  // canvas there is no node, so hitTest resolves the columnar rect store.\n  /**\n   * Find the cell under a plot-local point (0,0 = plot origin, the same space\n   * as the recorded cell geometry). Reverse scan so a later-painted cell wins\n   * when cells overlap (continuous-x edges). A linear scan stays well under a\n   * frame even at 100k cells (~100k integer compares). Returns the cell's\n   * series/dataPoint index plus its geometry for tooltip positioning, or null\n   * when the point is off every cell.\n   * @param {number} px\n   * @param {number} py\n   * @returns {({seriesIndex:number,dataPointIndex:number,x:number,y:number,width:number,height:number})|null}\n   */\n  hitTest(px, py) {\n    const g = this._g;\n    const n = g.rectCount ? g.rectCount() : 0;\n    if (!n) return null;\n    const rx = g._crx;\n    const ry = g._cry;\n    const rw = g._crw;\n    const rh = g._crh;\n    for (let k = n - 1; k >= 0; k--) {\n      const w = rw[k];\n      const h = rh[k];\n      if (w <= 0 || h <= 0) continue;\n      if (px >= rx[k] && px < rx[k] + w && py >= ry[k] && py < ry[k] + h) {\n        return {\n          seriesIndex: g._crsi[k],\n          dataPointIndex: g._crdi[k],\n          x: rx[k],\n          y: ry[k],\n          width: w,\n          height: h\n        };\n      }\n    }\n    return null;\n  }\n  /**\n   * Repaint the retained series scene with a per-series dim spec (hover /\n   * legend restyle). No geometry recompute: reuses the display list + marker\n   * columns recorded at render time. Pass null to repaint at full opacity.\n   * @param {{active:number, opacity:number}|null} [dim]\n   */\n  restyle(dim) {\n    this._compositor.paint(this._g.displayList(), this._g, dim || null);\n  }\n  // ── export ── toBitmap() and the compositor's toDataURL() back\n  //    Exports.inlineCanvasLayers, which inlines the series bitmap as an SVG\n  //    <image> so PNG/SVG export includes the canvas layer in correct z-order.\n  /** @returns {{dataURL:string,x:number,y:number,w:number,h:number}|null} */\n  toBitmap() {\n    const url = this._compositor.toDataURL();\n    if (!url) return null;\n    const gl = this.w.globals;\n    const cfg = this.w.config.chart;\n    const margin = this._compositor._margin;\n    return {\n      dataURL: url,\n      x: (gl.translateX || 0) + (cfg.offsetX || 0) - margin,\n      y: (gl.translateY || 0) + (cfg.offsetY || 0) - margin,\n      w: (this.w.layout.gridWidth || 0) + margin * 2,\n      h: (this.w.layout.gridHeight || 0) + margin * 2\n    };\n  }\n  destroy() {\n    this._compositor.destroy();\n  }\n}\nApexCharts.registerRenderer(\n  \"canvas\",\n  /**\n   * @param {any} w\n   * @param {any} ctx\n   */\n  (w, ctx) => new CanvasRenderer(w, ctx)\n);\nfunction makeCustomSeriesClass(name2, def) {\n  const cls = class CustomSeries {\n    /**\n     * @param {any} w @param {any} ctx @param {any} xyRatios\n     */\n    constructor(w, ctx, xyRatios) {\n      this.w = w;\n      this.ctx = ctx;\n      this.xyRatios = xyRatios;\n      this._warned = false;\n    }\n    /**\n     * @param {any[]} series parsed y-arrays (one per drawn series)\n     * @param {string} [_ctype]\n     * @param {number[]} [seriesIndices] realIndex per entry (combo dispatch)\n     * @returns {any} the wrap group\n     */\n    draw(series, _ctype, seriesIndices) {\n      var _a, _b;\n      const w = this.w;\n      const graphics = new Graphics(w, this.ctx);\n      const emit = seriesEmitter(this.ctx, graphics);\n      const ret = graphics.group({ class: \"apexcharts-marks-series\" });\n      series.forEach((_s, idx) => {\n        var _a2;\n        const realIndex = Array.isArray(seriesIndices) ? seriesIndices[idx] : idx;\n        const elSeries = graphics.group({\n          class: \"apexcharts-series\",\n          rel: realIndex + 1,\n          seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n          \"data:realIndex\": realIndex\n        });\n        const scales = this._scales(\n          realIndex,\n          (w.seriesData.series[realIndex] || []).length\n        );\n        const color = w.globals.colors[realIndex];\n        const rawData = (\n          /** @type {any} */\n          ((_a2 = w.config.series[realIndex]) == null ? void 0 : _a2.data) || []\n        );\n        const xvals = w.seriesData.seriesX[realIndex] || [];\n        const yvals = w.seriesData.series[realIndex] || [];\n        w.globals.seriesXvalues[realIndex] = [];\n        w.globals.seriesYvalues[realIndex] = [];\n        if (typeof w.globals.pointsArray[realIndex] === \"undefined\") {\n          w.globals.pointsArray[realIndex] = [];\n        }\n        for (let j = 0; j < yvals.length; j++) {\n          const yVal = yvals[j];\n          if (yVal === null || typeof yVal === \"undefined\") continue;\n          const xVal = xvals[j];\n          const xPx = scales.xAt(j, xVal);\n          const yPx = scales.y(yVal);\n          const api = this._api(emit, elSeries, realIndex, j);\n          try {\n            def.renderItem({\n              datum: rawData[j],\n              x: xPx,\n              y: yPx,\n              scales,\n              api,\n              seriesIndex: realIndex,\n              dataPointIndex: j,\n              color\n            });\n          } catch (e) {\n            if (!this._warned) {\n              console.warn(\n                `[apexcharts] renderItem for series type \"${name2}\" threw; skipping datum:`,\n                e\n              );\n              this._warned = true;\n            }\n          }\n          w.globals.seriesXvalues[realIndex][j] = xPx;\n          w.globals.seriesYvalues[realIndex][j] = yPx;\n          w.globals.pointsArray[realIndex][j] = [xPx, yPx];\n        }\n        graphics.setupEventDelegation(elSeries, \".apexcharts-marks-mark\");\n        ret.add(elSeries);\n      });\n      (_b = (_a = this.ctx.animations) == null ? void 0 : _a.animationCompleted) == null ? void 0 : _b.call(_a, ret);\n      return ret;\n    }\n    /**\n     * Series-space (elGraphical-local, translate-free) scales, matching how the\n     * built-ins compute pixels, so custom marks align with axes and gridlines\n     * and paint correctly on the elGraphical-local canvas.\n     * @param {number} realIndex\n     * @param {number} [nPts] number of data points (for categorical band sizing)\n     */\n    _scales(realIndex, nPts) {\n      var _a, _b, _c, _d;\n      const gl = this.w.globals;\n      const cnf = this.w.config;\n      const xRatio = this.xyRatios.xRatio;\n      const yRatioArr = this.xyRatios.yRatio;\n      const axis = (_b = (_a = gl.seriesYAxisReverseMap) == null ? void 0 : _a[realIndex]) != null ? _b : 0;\n      const yr = Array.isArray(yRatioArr) ? (_c = yRatioArr[axis]) != null ? _c : yRatioArr[0] : yRatioArr;\n      const maxYArr = (\n        /** @type {any} */\n        gl.maxYArr\n      );\n      const maxY = Array.isArray(maxYArr) && maxYArr.length ? (_d = maxYArr[axis]) != null ? _d : gl.maxY : gl.maxY;\n      const gridWidth = gl.gridWidth;\n      const gridHeight = gl.gridHeight;\n      const catMode = !gl.isXNumeric;\n      const n = nPts || gl.dataPoints || 1;\n      const bandW = n > 0 ? gridWidth / n : gridWidth;\n      const tickOn = cnf.xaxis.tickPlacement === \"on\";\n      const x = (v) => xRatio ? (v - gl.minX) / xRatio : gridWidth / 2;\n      const y = (v) => (maxY - v) / yr;\n      const xAt = (index, v) => {\n        if (!catMode) return x(v);\n        if (tickOn && n > 1) return index / (n - 1) * gridWidth;\n        return (index + 0.5) * bandW;\n      };\n      const step = gl.minXDiff || 1;\n      const band = catMode ? bandW : xRatio ? step / xRatio : gridWidth;\n      return {\n        x,\n        xAt,\n        y,\n        gridWidth,\n        gridHeight,\n        band\n      };\n    }\n    /**\n     * Per-datum primitive API. Each call emits immediately (canvas-aware via\n     * `emit`), tags the node with the datum's identity, and adds it to the\n     * series group; on canvas the tag/add are inert (marks live on the canvas,\n     * events are coordinate-based).\n     * @param {any} emit @param {any} elSeries @param {number} realIndex @param {number} j\n     */\n    _api(emit, elSeries, realIndex, j) {\n      const tag = (el) => {\n        if (el) {\n          try {\n            el.node.setAttribute(\"index\", String(realIndex));\n            el.node.setAttribute(\"j\", String(j));\n            el.node.classList.add(\"apexcharts-marks-mark\");\n          } catch (e) {\n          }\n          elSeries.add(el);\n        }\n        return el;\n      };\n      return {\n        /** @param {any} o */\n        path: (o = {}) => {\n          var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n          return tag(\n            emit.drawPath({\n              d: o.d || \"\",\n              stroke: (_a = o.stroke) != null ? _a : \"#000\",\n              strokeWidth: (_c = (_b = o.width) != null ? _b : o.strokeWidth) != null ? _c : 1,\n              fill: (_d = o.fill) != null ? _d : \"none\",\n              fillOpacity: (_f = o.fillOpacity) != null ? _f : o.fill && o.fill !== \"none\" ? (_e = o.opacity) != null ? _e : 1 : 0,\n              strokeOpacity: (_h = (_g = o.strokeOpacity) != null ? _g : o.opacity) != null ? _h : 1,\n              strokeDashArray: (_i = o.dash) != null ? _i : 0,\n              strokeLinecap: o.lineCap\n            })\n          );\n        },\n        /** @param {any} o */\n        line: (o = {}) => {\n          var _a, _b, _c, _d;\n          return tag(\n            emit.drawLine(\n              o.x1,\n              o.y1,\n              o.x2,\n              o.y2,\n              (_a = o.stroke) != null ? _a : \"#000\",\n              (_b = o.dash) != null ? _b : 0,\n              (_d = (_c = o.width) != null ? _c : o.strokeWidth) != null ? _d : 1\n            )\n          );\n        },\n        /** @param {any} o */\n        rect: (o = {}) => {\n          var _a, _b, _c, _d, _e, _f, _g, _h;\n          return tag(\n            emit.drawRect(\n              (_a = o.x) != null ? _a : 0,\n              (_b = o.y) != null ? _b : 0,\n              (_c = o.w) != null ? _c : 0,\n              (_d = o.h) != null ? _d : 0,\n              (_e = o.r) != null ? _e : 0,\n              (_f = o.fill) != null ? _f : \"#000\",\n              (_g = o.opacity) != null ? _g : 1,\n              o.stroke != null ? (_h = o.strokeWidth) != null ? _h : 1 : null,\n              o.stroke\n            )\n          );\n        },\n        /** @param {any} o */\n        circle: (o = {}) => {\n          var _a, _b, _c, _d, _e;\n          return tag(\n            emit.drawCircle((_a = o.r) != null ? _a : 0, {\n              cx: (_b = o.cx) != null ? _b : 0,\n              cy: (_c = o.cy) != null ? _c : 0,\n              fill: (_d = o.fill) != null ? _d : \"#000\",\n              stroke: o.stroke || \"none\",\n              \"stroke-width\": (_e = o.strokeWidth) != null ? _e : o.stroke ? 1 : 0\n            })\n          );\n        },\n        /** @param {any} o */\n        text: (o = {}) => {\n          var _a, _b, _c, _d;\n          return tag(\n            emit.drawText({\n              x: (_a = o.x) != null ? _a : 0,\n              y: (_b = o.y) != null ? _b : 0,\n              text: (_c = o.text) != null ? _c : \"\",\n              textAnchor: (_d = o.anchor) != null ? _d : \"start\",\n              fontSize: o.size,\n              foreColor: o.color,\n              fontWeight: o.weight\n            })\n          );\n        }\n      };\n    }\n  };\n  cls.dataType = def.dataType || \"xy\";\n  cls.yExtent = typeof def.yExtent === \"function\" ? def.yExtent : null;\n  return cls;\n}\nApexCharts._customSeriesFactory = makeCustomSeriesClass;\nconst DARK_QUERY = \"(prefers-color-scheme: dark)\";\nconst CONTRAST_QUERY = \"(prefers-contrast: more)\";\nclass OSThemeWatcher {\n  /**\n   * @param {any} w @param {any} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    if (w.config.theme.follow !== \"os\" || !Environment.isBrowser()) return;\n    const media = this._ensureMedia();\n    if (!media) return;\n    this._applyToConfig(media);\n    this._ensureListeners(media);\n  }\n  /**\n   * Create (once per instance) the MediaQueryLists and stash them on `ctx` so\n   * they persist across the re-render that `updateOptions` triggers.\n   * @returns {{dark: MediaQueryList|null, contrast: MediaQueryList|null, handler: null|(()=>void)}|null}\n   */\n  _ensureMedia() {\n    if (!this.ctx._osThemeMedia) {\n      const dark = BrowserAPIs.matchMedia(DARK_QUERY);\n      const contrast = BrowserAPIs.matchMedia(CONTRAST_QUERY);\n      if (!dark && !contrast) return null;\n      this.ctx._osThemeMedia = { dark, contrast, handler: null };\n    }\n    return this.ctx._osThemeMedia;\n  }\n  /**\n   * Write the OS-resolved mode / high-contrast onto the live `w.config.theme`.\n   * @param {{dark: MediaQueryList|null, contrast: MediaQueryList|null}} media\n   */\n  _applyToConfig(media) {\n    const theme = this.w.config.theme;\n    if (media.dark) {\n      theme.mode = media.dark.matches ? \"dark\" : \"light\";\n    }\n    if (media.contrast && media.contrast.matches) {\n      theme.accessibility = theme.accessibility || {};\n      theme.accessibility.colorBlindMode = \"highContrast\";\n    }\n  }\n  /**\n   * Attach the `change` listener once. The handler closes over `ctx` + `media`\n   * (both stable across re-renders), NOT over `this` (a fresh watcher is built\n   * each create), so it never goes stale.\n   * @param {{dark: MediaQueryList|null, contrast: MediaQueryList|null, handler: null|(()=>void)}} media\n   */\n  _ensureListeners(media) {\n    if (media.handler) return;\n    const ctx = this.ctx;\n    const handler = () => {\n      const m = ctx._osThemeMedia;\n      if (!m) return;\n      const themeOpt = { mode: m.dark && m.dark.matches ? \"dark\" : \"light\" };\n      if (m.contrast && m.contrast.matches) {\n        themeOpt.accessibility = { colorBlindMode: \"highContrast\" };\n      } else {\n        themeOpt.accessibility = { colorBlindMode: \"\" };\n      }\n      ctx.updateOptions({ theme: themeOpt }, false, true, false);\n    };\n    OSThemeWatcher._add(media.dark, handler);\n    OSThemeWatcher._add(media.contrast, handler);\n    media.handler = handler;\n  }\n  /** Remove the listeners and drop the stashed media. Called on full destroy. */\n  teardown() {\n    const media = this.ctx._osThemeMedia;\n    if (!media) return;\n    if (media.handler) {\n      OSThemeWatcher._remove(media.dark, media.handler);\n      OSThemeWatcher._remove(media.contrast, media.handler);\n    }\n    this.ctx._osThemeMedia = null;\n  }\n  /**\n   * @param {MediaQueryList|null} mql @param {()=>void} handler\n   */\n  static _add(mql, handler) {\n    if (!mql) return;\n    if (typeof mql.addEventListener === \"function\") {\n      mql.addEventListener(\"change\", handler);\n    } else if (typeof /** @type {any} */\n    mql.addListener === \"function\") {\n      mql.addListener(handler);\n    }\n  }\n  /**\n   * @param {MediaQueryList|null} mql @param {()=>void} handler\n   */\n  static _remove(mql, handler) {\n    if (!mql) return;\n    if (typeof mql.removeEventListener === \"function\") {\n      mql.removeEventListener(\"change\", handler);\n    } else if (typeof /** @type {any} */\n    mql.removeListener === \"function\") {\n      mql.removeListener(handler);\n    }\n  }\n}\nApexCharts.registerFeatures({ osThemeWatcher: OSThemeWatcher });\nconst REGISTRY_KEY = \"__apexcharts_crossfilters__\";\nfunction cleanFloat(x) {\n  if (!Number.isFinite(x)) return x;\n  const n = Number(x.toPrecision(12));\n  return Object.is(n, -0) ? 0 : n;\n}\nfunction isNum(v) {\n  return typeof v === \"number\" && Number.isFinite(v);\n}\nfunction makeReducer(reduce) {\n  if (typeof reduce === \"function\") return reduce;\n  if (reduce && typeof reduce === \"object\") {\n    if (typeof reduce.sum === \"string\") {\n      const f = reduce.sum;\n      return (rows) => rows.reduce((a, r) => a + (Number(r[f]) || 0), 0);\n    }\n    if (typeof reduce.avg === \"string\") {\n      const f = reduce.avg;\n      return (rows) => rows.length ? rows.reduce((a, r) => a + (Number(r[f]) || 0), 0) / rows.length : 0;\n    }\n    if (typeof reduce.min === \"string\") {\n      const f = reduce.min;\n      return (rows) => rows.length ? Math.min(...rows.map((r) => Number(r[f]) || 0)) : 0;\n    }\n    if (typeof reduce.max === \"string\") {\n      const f = reduce.max;\n      return (rows) => rows.length ? Math.max(...rows.map((r) => Number(r[f]) || 0)) : 0;\n    }\n  }\n  return (rows) => rows.length;\n}\nfunction applyOrder(keys, order) {\n  if (typeof order === \"function\") return keys.slice().sort(order);\n  if (order === \"asc\") return keys.slice().sort((a, b) => a > b ? 1 : a < b ? -1 : 0);\n  if (order === \"desc\") return keys.slice().sort((a, b) => a < b ? 1 : a > b ? -1 : 0);\n  return keys;\n}\nfunction categoryDomain(records, accessor, order) {\n  const seen = /* @__PURE__ */ new Set();\n  const keys = [];\n  for (let i = 0; i < records.length; i++) {\n    const k = accessor(records[i]);\n    if (k == null) continue;\n    if (!seen.has(k)) {\n      seen.add(k);\n      keys.push(k);\n    }\n  }\n  return applyOrder(keys, order);\n}\nfunction matrixDomain(records, accessor, order) {\n  const xSeen = /* @__PURE__ */ new Set();\n  const ySeen = /* @__PURE__ */ new Set();\n  const xLabels = [];\n  const yLabels = [];\n  for (let i = 0; i < records.length; i++) {\n    const pair = accessor(records[i]);\n    if (!pair) continue;\n    const x = pair[0];\n    const y = pair[1];\n    if (x != null && !xSeen.has(x)) {\n      xSeen.add(x);\n      xLabels.push(x);\n    }\n    if (y != null && !ySeen.has(y)) {\n      ySeen.add(y);\n      yLabels.push(y);\n    }\n  }\n  return { xLabels: applyOrder(xLabels, order), yLabels: applyOrder(yLabels, order) };\n}\nfunction rangeEdges(records, accessor, bins) {\n  if (bins && Array.isArray(bins.thresholds) && bins.thresholds.length >= 2) {\n    const t = Array.from(new Set(bins.thresholds.filter(isNum))).sort(\n      (a, b) => a - b\n    );\n    return t.length >= 2 ? t.map(cleanFloat) : [0, 1];\n  }\n  let min = Infinity;\n  let max = -Infinity;\n  for (let i = 0; i < records.length; i++) {\n    const v = accessor(records[i]);\n    if (!isNum(v)) continue;\n    if (v < min) min = v;\n    if (v > max) max = v;\n  }\n  if (min === Infinity) return [0, 1];\n  if (min === max) {\n    const pad = Math.abs(min) > 0 ? Math.abs(min) : 1;\n    return [cleanFloat(min), cleanFloat(min + pad)];\n  }\n  if (bins && isNum(bins.width) && bins.width > 0) {\n    const w2 = bins.width;\n    const start = Math.floor(min / w2) * w2;\n    let end = Math.ceil(max / w2) * w2;\n    if (end <= start) end = start + w2;\n    const count2 = Math.max(1, Math.round((end - start) / w2));\n    const edges2 = new Array(count2 + 1);\n    for (let i = 0; i <= count2; i++) edges2[i] = cleanFloat(start + i * w2);\n    return edges2;\n  }\n  const count = bins && isNum(bins.count) && bins.count >= 1 ? Math.floor(bins.count) : 30;\n  const w = (max - min) / count;\n  const edges = new Array(count + 1);\n  for (let i = 0; i <= count; i++) edges[i] = cleanFloat(min + i * w);\n  edges[count] = cleanFloat(max);\n  return edges;\n}\nfunction binIndexOf(v, edges) {\n  if (!isNum(v)) return -1;\n  const last = edges.length - 1;\n  if (v < edges[0] || v > edges[last]) return -1;\n  if (v === edges[last]) return last - 1;\n  for (let i = 0; i < last; i++) {\n    if (v >= edges[i] && v < edges[i + 1]) return i;\n  }\n  return -1;\n}\nfunction binCenters(edges) {\n  const centers = [];\n  for (let i = 0; i < edges.length - 1; i++) {\n    centers.push(cleanFloat((edges[i] + edges[i + 1]) / 2));\n  }\n  return centers;\n}\nclass Crossfilter {\n  /**\n   * @param {string} id\n   * @param {any[]} [records]\n   */\n  constructor(id, records) {\n    this.id = id;\n    this.records = Array.isArray(records) ? records : [];\n    this.dims = /* @__PURE__ */ new Map();\n    this._listeners = /* @__PURE__ */ new Map();\n  }\n  // ----- registry ---------------------------------------------------------\n  /** @returns {Map<string, Crossfilter>} */\n  static _store() {\n    const g = (\n      /** @type {any} */\n      globalThis\n    );\n    if (!g[REGISTRY_KEY]) g[REGISTRY_KEY] = /* @__PURE__ */ new Map();\n    return g[REGISTRY_KEY];\n  }\n  /**\n   * Get-or-create a coordinator by id. Passing `records` on an existing\n   * coordinator swaps its dataset (re-aggregates).\n   * @param {{id:string, records?:any[]}} opts\n   * @returns {Crossfilter}\n   */\n  static getOrCreate(opts) {\n    if (!opts || typeof opts.id !== \"string\") {\n      throw new Error(\"ApexCharts.crossfilter requires an { id } string.\");\n    }\n    const store = Crossfilter._store();\n    let cf = store.get(opts.id);\n    if (cf) {\n      if (opts.records) cf.setRecords(opts.records);\n      return cf;\n    }\n    cf = new Crossfilter(opts.id, opts.records);\n    store.set(opts.id, cf);\n    return cf;\n  }\n  /** @param {string} id @returns {Crossfilter|null} */\n  static get(id) {\n    return Crossfilter._store().get(id) || null;\n  }\n  // ----- data + dimensions ------------------------------------------------\n  /**\n   * Swap the shared dataset and recompute every dimension's domain. Existing\n   * filters are kept where still valid (categorical keys no longer present are\n   * pruned); the change is broadcast.\n   * @param {any[]} records\n   */\n  setRecords(records) {\n    this.records = Array.isArray(records) ? records : [];\n    this.dims.forEach((dim) => this._recomputeDomain(dim));\n    this._emit(\"records\", this.state());\n    this._emit(\"change\", this.state());\n    return this;\n  }\n  /**\n   * Register (or replace) a chart's dimension + reduction.\n   * @param {string} chartId\n   * @param {{\n   *   dimension:(row:any)=>any, reduce?:any, type?:'category'|'range',\n   *   bins?:{width?:number,count?:number,thresholds?:number[]},\n   *   order?:'first-seen'|'asc'|'desc'|((a:any,b:any)=>number),\n   *   filter?:any }} spec\n   */\n  registerDimension(chartId, spec) {\n    if (!spec || typeof spec.dimension !== \"function\") {\n      throw new Error(\n        `crossfilter.registerDimension(\"${chartId}\") needs a dimension function.`\n      );\n    }\n    const type = spec.type || (spec.bins ? \"range\" : \"category\");\n    const dim = {\n      accessor: spec.dimension,\n      reducer: makeReducer(spec.reduce),\n      type,\n      bins: spec.bins,\n      order: spec.order,\n      /** @type {Set<any>|[number,number]|null} */\n      filter: null,\n      /** @type {any[]} */\n      labels: [],\n      /** @type {number[]|null} */\n      edges: null\n    };\n    this.dims.set(chartId, dim);\n    this._recomputeDomain(dim);\n    if (spec.filter != null) this._setFilterOn(dim, spec.filter);\n    return this;\n  }\n  /** @param {string} chartId @returns {boolean} */\n  hasDimension(chartId) {\n    return this.dims.has(chartId);\n  }\n  /** @param {string} chartId */\n  removeDimension(chartId) {\n    const dim = this.dims.get(chartId);\n    const hadFilter = dim ? this._hasFilter(dim) : false;\n    this.dims.delete(chartId);\n    if (hadFilter) this._emit(\"change\", this.state());\n    return this;\n  }\n  /** @param {any} dim */\n  _recomputeDomain(dim) {\n    if (dim.type === \"matrix\") {\n      const dom = matrixDomain(this.records, dim.accessor, dim.order);\n      dim.xLabels = dom.xLabels;\n      dim.yLabels = dom.yLabels;\n      dim.edges = null;\n      return;\n    }\n    if (dim.type === \"range\") {\n      dim.edges = rangeEdges(this.records, dim.accessor, dim.bins);\n      dim.labels = binCenters(dim.edges);\n    } else {\n      dim.labels = categoryDomain(this.records, dim.accessor, dim.order);\n      dim.edges = null;\n      if (dim.filter instanceof Set) {\n        const domain = new Set(dim.labels);\n        Array.from(dim.filter).forEach((k) => {\n          if (!domain.has(k)) dim.filter.delete(k);\n        });\n      }\n    }\n  }\n  // ----- filters ----------------------------------------------------------\n  /**\n   * Set (replace) a chart's filter. Categorical: an array/Set of keys (or null\n   * to clear). Range: a `[min,max]` tuple (or null to clear).\n   * @param {string} chartId\n   * @param {any[]|Set<any>|[number,number]|null} filter\n   */\n  filter(chartId, filter) {\n    const dim = this.dims.get(chartId);\n    if (!dim) return this;\n    this._setFilterOn(dim, filter);\n    this._emit(\"change\", this.state());\n    return this;\n  }\n  /**\n   * Toggle one categorical key in a chart's filter Set (multi-select, OR).\n   * @param {string} chartId @param {any} key\n   */\n  toggleKey(chartId, key) {\n    const dim = this.dims.get(chartId);\n    if (!dim || dim.type !== \"category\") return this;\n    if (!(dim.filter instanceof Set)) dim.filter = /* @__PURE__ */ new Set();\n    const set = (\n      /** @type {Set<any>} */\n      dim.filter\n    );\n    if (set.has(key)) set.delete(key);\n    else set.add(key);\n    if (set.size === 0) dim.filter = null;\n    this._emit(\"change\", this.state());\n    return this;\n  }\n  /** @param {any} dim @param {any} filter */\n  _setFilterOn(dim, filter) {\n    if (filter == null) {\n      dim.filter = null;\n      return;\n    }\n    if (dim.type === \"range\") {\n      if (Array.isArray(filter) && filter.length === 2 && filter.every(isNum)) {\n        dim.filter = [Math.min(filter[0], filter[1]), Math.max(filter[0], filter[1])];\n      } else {\n        dim.filter = null;\n      }\n      return;\n    }\n    const set = filter instanceof Set ? new Set(filter) : new Set(filter);\n    dim.filter = set.size ? set : null;\n  }\n  /**\n   * Clear one chart's filter.\n   * @param {string} chartId\n   */\n  clear(chartId) {\n    const dim = this.dims.get(chartId);\n    if (dim) dim.filter = null;\n    this._emit(\"change\", this.state());\n    return this;\n  }\n  /** Clear all filters across every dimension. */\n  reset() {\n    this.dims.forEach((dim) => {\n      dim.filter = null;\n    });\n    this._emit(\"change\", this.state());\n    return this;\n  }\n  /** @param {any} dim @returns {boolean} does this dimension have an active filter */\n  _hasFilter(dim) {\n    if (dim.filter == null) return false;\n    if (dim.filter instanceof Set) return dim.filter.size > 0;\n    return true;\n  }\n  /** @param {any} dim @param {any} row @returns {boolean} does row pass this dim's filter */\n  _passes(dim, row) {\n    if (!this._hasFilter(dim)) return true;\n    const v = dim.accessor(row);\n    if (dim.filter instanceof Set) return dim.filter.has(v);\n    if (!isNum(v)) return false;\n    return v >= dim.filter[0] && v <= dim.filter[1];\n  }\n  // ----- aggregation ------------------------------------------------------\n  /**\n   * Records passing every ACTIVE filter except the one on `exceptChartId`\n   * (pass null/undefined to apply all filters).\n   * @param {string|null} [exceptChartId]\n   * @returns {any[]}\n   */\n  filteredRecords(exceptChartId) {\n    const active = [];\n    this.dims.forEach((dim, id) => {\n      if (id === exceptChartId) return;\n      if (this._hasFilter(dim)) active.push(dim);\n    });\n    if (active.length === 0) return this.records;\n    return this.records.filter((row) => active.every((dim) => this._passes(dim, row)));\n  }\n  /** Rows passing ALL active filters (the fully filtered set). @returns {any[]} */\n  filteredRows() {\n    return this.filteredRecords(null);\n  }\n  /**\n   * The crossfilter aggregation for one chart: reduce over records passing all\n   * OTHER charts' filters, bucketed by this chart's dimension. Category/range\n   * dims return `{type, labels, values, keys, edges?}`; a matrix (2D) dim\n   * returns `{type:'matrix', xLabels, yLabels, matrix}`.\n   * @param {string} chartId\n   * @returns {any}\n   */\n  aggregateFor(chartId) {\n    const dim = this.dims.get(chartId);\n    if (!dim) return { type: \"category\", labels: [], values: [], keys: [] };\n    const rows = this.filteredRecords(chartId);\n    if (dim.type === \"matrix\") {\n      const xIndex = new Map(dim.xLabels.map((k, i) => [k, i]));\n      const yIndex = new Map(dim.yLabels.map((k, i) => [k, i]));\n      const buckets = dim.yLabels.map(() => dim.xLabels.map(() => []));\n      for (let i = 0; i < rows.length; i++) {\n        const pair = dim.accessor(rows[i]);\n        if (!pair) continue;\n        const xi = xIndex.get(pair[0]);\n        const yi = yIndex.get(pair[1]);\n        if (xi != null && yi != null) buckets[yi][xi].push(rows[i]);\n      }\n      return {\n        type: \"matrix\",\n        xLabels: dim.xLabels.slice(),\n        yLabels: dim.yLabels.slice(),\n        matrix: buckets.map((brow) => brow.map((cell) => dim.reducer(cell)))\n      };\n    }\n    if (dim.type === \"range\") {\n      const edges = dim.edges || [0, 1];\n      const nBins = edges.length - 1;\n      const buckets = Array.from({ length: nBins }, () => []);\n      for (let i = 0; i < rows.length; i++) {\n        const idx = binIndexOf(dim.accessor(rows[i]), edges);\n        if (idx >= 0) buckets[idx].push(rows[i]);\n      }\n      return {\n        type: \"range\",\n        labels: binCenters(edges),\n        // plot bars at bin centers, not lower edges\n        values: buckets.map((b) => dim.reducer(b)),\n        keys: buckets.map((_, i) => [edges[i], edges[i + 1]]),\n        edges\n      };\n    }\n    const index = /* @__PURE__ */ new Map();\n    dim.labels.forEach((k) => index.set(k, []));\n    for (let i = 0; i < rows.length; i++) {\n      const k = dim.accessor(rows[i]);\n      const bucket = index.get(k);\n      if (bucket) bucket.push(rows[i]);\n    }\n    return {\n      type: \"category\",\n      labels: dim.labels.slice(),\n      values: dim.labels.map(\n        (k) => dim.reducer(index.get(k) || [])\n      ),\n      keys: dim.labels.slice()\n    };\n  }\n  /**\n   * Aggregate every registered chart.\n   * @returns {Record<string, ReturnType<Crossfilter['aggregateFor']>>}\n   */\n  aggregateAll() {\n    const out = {};\n    this.dims.forEach((_dim, id) => {\n      out[id] = this.aggregateFor(id);\n    });\n    return out;\n  }\n  // ----- state + events ---------------------------------------------------\n  /**\n   * A serializable snapshot: active filters, filtered/total record counts.\n   * @returns {{filters:Record<string, any[]|[number,number]>, filteredCount:number, total:number}}\n   */\n  state() {\n    const filters = {};\n    this.dims.forEach((dim, id) => {\n      if (!this._hasFilter(dim)) return;\n      filters[id] = dim.filter instanceof Set ? Array.from(dim.filter) : dim.filter.slice();\n    });\n    return {\n      filters,\n      filteredCount: this.filteredRows().length,\n      total: this.records.length\n    };\n  }\n  /** @param {string} chartId @returns {any} the current filter (Set copy / range copy / null) */\n  filterOf(chartId) {\n    const dim = this.dims.get(chartId);\n    if (!dim || !this._hasFilter(dim)) return null;\n    return dim.filter instanceof Set ? new Set(dim.filter) : dim.filter.slice();\n  }\n  /**\n   * Subscribe to an event ('change' | 'records'). Returns an unsubscribe fn.\n   * @param {string} event @param {Function} cb\n   */\n  on(event, cb) {\n    let set = this._listeners.get(event);\n    if (!set) {\n      set = /* @__PURE__ */ new Set();\n      this._listeners.set(event, set);\n    }\n    set.add(cb);\n    return () => this.off(event, cb);\n  }\n  /** @param {string} event @param {Function} cb */\n  off(event, cb) {\n    var _a;\n    (_a = this._listeners.get(event)) == null ? void 0 : _a.delete(cb);\n    return this;\n  }\n  /** @param {string} event @param {any} payload */\n  _emit(event, payload) {\n    var _a;\n    (_a = this._listeners.get(event)) == null ? void 0 : _a.forEach((cb) => {\n      try {\n        cb(payload);\n      } catch (e) {\n        console.error(e);\n      }\n    });\n  }\n  // ----- data table (presentation helper) ---------------------------------\n  // Renders the filtered rows into a user-provided element and keeps it in sync\n  // on every filter change. Only the passed `el` is touched (no window/document\n  // globals), so the engine stays SSR-safe and unit-testable.\n  /** @param {string} s @returns {string} HTML-escaped */\n  _esc(s) {\n    return String(s == null ? \"\" : s).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n  }\n  /**\n   * @param {Array<string|{field:string,label?:string,format?:(v:any,row:any)=>any}>|undefined} columns\n   * @returns {Array<{field:string,label:string,format?:Function}>}\n   */\n  _resolveColumns(columns) {\n    if (Array.isArray(columns) && columns.length) {\n      return columns.map(\n        (c) => typeof c === \"string\" ? { field: c, label: c } : { field: c.field, label: c.label || c.field, format: c.format }\n      );\n    }\n    const first = this.records[0];\n    const fields = first ? Object.keys(first) : [];\n    return fields.map((f) => ({ field: f, label: f }));\n  }\n  /**\n   * @param {Array<{field:string,label:string,format?:Function}>} columns\n   * @param {any[]} rows @param {number} total\n   * @returns {string}\n   */\n  _tableHTML(columns, rows, total) {\n    const head = \"<thead><tr>\" + columns.map((c) => `<th>${this._esc(c.label)}</th>`).join(\"\") + \"</tr></thead>\";\n    const body = \"<tbody>\" + rows.map(\n      (row) => \"<tr>\" + columns.map((c) => {\n        const raw = row[c.field];\n        const val = c.format ? c.format(raw, row) : raw;\n        return `<td>${this._esc(val)}</td>`;\n      }).join(\"\") + \"</tr>\"\n    ).join(\"\") + \"</tbody>\";\n    const caption = `<caption>${rows.length} of ${total} rows</caption>`;\n    return `<table class=\"apexcharts-cf-table\">${caption}${head}${body}</table>`;\n  }\n  /**\n   * Bind an HTML table of the filtered rows to `el`; it re-renders on every\n   * filter change. Returns a handle with refresh()/destroy().\n   * @param {HTMLElement} el\n   * @param {{columns?:any[], page?:number, pageSize?:number}} [opts]\n   */\n  dataTable(el, opts) {\n    if (!el) return { refresh() {\n    }, destroy() {\n    } };\n    const o = opts || {};\n    const columns = this._resolveColumns(o.columns);\n    const pageSize = o.pageSize || 0;\n    const page = o.page || 0;\n    const render = () => {\n      const rows = this.filteredRows();\n      const shown = pageSize ? rows.slice(page * pageSize, page * pageSize + pageSize) : rows;\n      el.innerHTML = this._tableHTML(columns, shown, rows.length);\n    };\n    render();\n    const off = this.on(\"change\", render);\n    return {\n      refresh: render,\n      destroy: () => {\n        off();\n        el.innerHTML = \"\";\n      }\n    };\n  }\n  /** Remove this coordinator from the registry and drop all state. */\n  destroy() {\n    Crossfilter._store().delete(this.id);\n    this.dims.clear();\n    this._listeners.clear();\n    this.records = [];\n  }\n}\nconst MARK_SELECTOR = [\n  \".apexcharts-bar-area\",\n  \".apexcharts-candlestick-area\",\n  \".apexcharts-boxPlot-area\",\n  \".apexcharts-rangebar-area\",\n  \".apexcharts-marker\"\n].join(\", \");\nconst FILTER_MARK_SELECTOR = [\n  \".apexcharts-pie-area\",\n  \".apexcharts-bar-area\"\n].join(\", \");\nconst DIMMED_CLASS = \"apexcharts-crossfilter-dimmed\";\nconst PIE_TYPES = [\"pie\", \"donut\", \"polarArea\", \"radialBar\"];\nclass LinkedViews {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._dimmed = false;\n    this._wired = false;\n    this._pending = false;\n    this._lastValues = null;\n    this._onPointSelect = this._onPointSelect.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    this._onChange = this._onChange.bind(this);\n    if (this._mode() === \"filter\") this._initEngine();\n  }\n  /** @returns {'highlight'|'filter'|'off'} */\n  _mode() {\n    const link = this.w.config.chart.link;\n    if (link && typeof link.dimension === \"function\") return \"filter\";\n    if (link && link.enabled) return \"highlight\";\n    return \"off\";\n  }\n  _enabled() {\n    const link = this.w.config.chart.link;\n    return !!(link && link.enabled);\n  }\n  /**\n   * The source chart's rectangle brush produced a data-x range. In FILTER mode\n   * this becomes a `[min,max]` range filter on the chart's dimension (the other\n   * charts re-aggregate). In HIGHLIGHT mode (P1) it dims out-of-range marks\n   * across the group. Called (null-safe) from ZoomPanSelection selectionDrawn /\n   * selectionDragging.\n   * @param {{min:number, max:number}} xaxis\n   */\n  onSourceSelection(xaxis) {\n    var _a;\n    const mode = this._mode();\n    if (mode === \"off\") return;\n    if (!xaxis || xaxis.min == null || xaxis.max == null) return;\n    let min = Math.min(xaxis.min, xaxis.max);\n    let max = Math.max(xaxis.min, xaxis.max);\n    const gMinX = this.w.globals.minX;\n    const gMaxX = this.w.globals.maxX;\n    if (isFinite(gMinX) && isFinite(gMaxX) && gMaxX > gMinX) {\n      const tol = (gMaxX - gMinX) * 1e-6;\n      if (min - gMinX <= tol) min = gMinX;\n      if (gMaxX - max <= tol) max = gMaxX;\n    }\n    if (mode === \"filter\") {\n      const cf = this._cf();\n      if (!cf) return;\n      cf.filter(this._chartId(), [min, max]);\n      this._fireFilterChange(cf, [min, max]);\n      return;\n    }\n    this._group().forEach((ch) => {\n      var _a2;\n      (_a2 = ch == null ? void 0 : ch.linkedViews) == null ? void 0 : _a2.applyDim(min, max);\n    });\n    const args = { xaxis: { min, max }, sourceChartID: this.w.globals.chartID };\n    if (typeof this.w.config.chart.events.crossFilter === \"function\") {\n      this.w.config.chart.events.crossFilter(this.ctx, args);\n    }\n    (_a = this.ctx.events) == null ? void 0 : _a.fireEvent(\"crossFilter\", [this.ctx, args]);\n  }\n  /** self + grouped siblings (dedup-safe; getGroupedCharts excludes self). */\n  _group() {\n    const siblings = typeof this.ctx.getGroupedCharts === \"function\" ? this.ctx.getGroupedCharts() : [];\n    return [this.ctx, ...siblings];\n  }\n  /**\n   * Dim this chart's marks whose x is outside [min,max]; un-dim those inside.\n   * No re-render, so mark identities are preserved.\n   * @param {number} min @param {number} max\n   */\n  applyDim(min, max) {\n    if (!this._enabled()) return;\n    const w = this.w;\n    const baseEl = w.dom.baseEl;\n    if (!baseEl) return;\n    const dimOpacity = w.config.chart.link.dimOpacity;\n    if (w.dom.elWrap && typeof dimOpacity === \"number\") {\n      w.dom.elWrap.style.setProperty(\"--apx-cf-dim\", String(dimOpacity));\n    }\n    const seriesX = w.globals.seriesX || [];\n    const marks = baseEl.querySelectorAll(MARK_SELECTOR);\n    marks.forEach((node) => {\n      const jAttr = node.getAttribute(\"j\");\n      if (jAttr === null) return;\n      const j = parseInt(jAttr, 10);\n      const iAttr = node.getAttribute(\"index\");\n      const i = iAttr === null ? 0 : parseInt(iAttr, 10);\n      const row = seriesX[i] || seriesX[0];\n      if (!row) return;\n      const x = row[j];\n      if (x == null) return;\n      node.classList.toggle(DIMMED_CLASS, x < min || x > max);\n    });\n    this._dimmed = true;\n  }\n  /** Remove dimming from this chart only. */\n  clear() {\n    const baseEl = this.w.dom.baseEl;\n    if (!baseEl) return;\n    baseEl.querySelectorAll(\".\" + DIMMED_CLASS).forEach((n) => n.classList.remove(DIMMED_CLASS));\n    this._dimmed = false;\n  }\n  /** Clear dimming across the whole group (backs chart.clearCrossfilter). */\n  clearGroup() {\n    if (this._mode() === \"filter\") {\n      const cf = this._cf();\n      if (cf) cf.reset();\n      return;\n    }\n    this._group().forEach((ch) => {\n      var _a;\n      return (_a = ch == null ? void 0 : ch.linkedViews) == null ? void 0 : _a.clear();\n    });\n  }\n  // ─── FILTER mode (crossfilter engine glue) ───────────────────────────────\n  /**\n   * The chart's stable internal id (keys its dimension in the coordinator).\n   * Always set by the ApexCharts constructor (falls back to a cuid).\n   * @returns {string}\n   */\n  _chartId() {\n    return (\n      /** @type {string} */\n      this.w.globals.chartID\n    );\n  }\n  /** @returns {import('./Crossfilter').default|null} the coordinator, or null */\n  _cf() {\n    const link = this.w.config.chart.link;\n    const id = link && (link.id || this.w.config.chart.group);\n    return id ? Crossfilter.get(id) : null;\n  }\n  _isPie() {\n    return PIE_TYPES.indexOf(this.w.config.chart.type) !== -1;\n  }\n  _isHeatmap() {\n    return this.w.config.chart.type === \"heatmap\";\n  }\n  /**\n   * Before the first render: resolve the coordinator, register this chart's\n   * dimension, inject the initial aggregated series into w.config (so the first\n   * paint is already aggregated, no empty flash), and wire the listeners.\n   */\n  _initEngine() {\n    const cf = this._cf();\n    const link = this.w.config.chart.link;\n    if (!cf) {\n      const id = link && link.id || this.w.config.chart.group;\n      console.warn(\n        `[apexcharts] chart.link.dimension is set but no crossfilter coordinator \"${id}\" exists. Call ApexCharts.crossfilter({ id, records }) before creating the chart.`\n      );\n      return;\n    }\n    const chartId = this._chartId();\n    if (!cf.hasDimension(chartId)) {\n      cf.registerDimension(chartId, {\n        dimension: link.dimension,\n        reduce: link.reduce,\n        // heatmap => 2D matrix dimension (accessor returns [xKey, yKey]).\n        type: link.type || (this._isHeatmap() ? \"matrix\" : void 0),\n        bins: link.bins,\n        order: link.order\n      });\n    }\n    this._injectSeries(cf.aggregateFor(chartId));\n    this._wire(cf);\n  }\n  /**\n   * Build the chart's series value from an aggregation, shaped by chart type:\n   *   matrix (heatmap) -> [{ name:yKey, data:[{x:xKey, y:value}] }]\n   *   pie/donut  -> number[]\n   *   axis + category -> [{ name, data:number[] }] (categories set separately)\n   *   axis + range    -> [{ name, data:[x,value][] }] on a numeric/time x-axis\n   * @param {any} agg\n   */\n  _seriesFromAgg(agg) {\n    if (agg.type === \"matrix\") {\n      return agg.yLabels.map((yl, yi) => ({\n        name: String(yl),\n        data: agg.xLabels.map((xl, xi) => ({\n          x: String(xl),\n          y: agg.matrix[yi][xi]\n        }))\n      }));\n    }\n    if (this._isPie()) return agg.values.slice();\n    const name2 = this.w.config.chart.link.seriesName || \"Count\";\n    if (agg.type === \"range\") {\n      return [{ name: name2, data: agg.labels.map((x, i) => [x, agg.values[i]]) }];\n    }\n    return [{ name: name2, data: agg.values.slice() }];\n  }\n  /**\n   * Value signature used to skip a reflow when only dimming changed.\n   * @param {any} agg\n   */\n  _sigOf(agg) {\n    return JSON.stringify(agg.matrix || agg.values);\n  }\n  /**\n   * Write the aggregation into w.config as the chart's series/labels. Runs once\n   * before the first paint; later updates go through updateSeries.\n   * @param {any} agg\n   */\n  _injectSeries(agg) {\n    const w = this.w;\n    this._lastValues = this._sigOf(agg);\n    w.config.series = this._seriesFromAgg(agg);\n    if (agg.type === \"matrix\") return;\n    if (this._isPie()) {\n      w.config.labels = agg.labels.map(String);\n    } else if (agg.type === \"category\") {\n      if (!w.config.xaxis) w.config.xaxis = {};\n      w.config.xaxis.categories = agg.labels.map(String);\n    } else if (agg.type === \"range\") {\n      this._pinRangeDomain(agg.edges);\n    }\n  }\n  /**\n   * Pin the numeric/datetime x-axis to the outer bin edges of a range-binned\n   * dimension (unless the user set xaxis.min/max explicitly). See _injectSeries.\n   * @param {number[]|null|undefined} edges\n   */\n  _pinRangeDomain(edges) {\n    if (!Array.isArray(edges) || edges.length < 2) return;\n    const w = this.w;\n    if (!w.config.xaxis) w.config.xaxis = /** @type {any} */\n    {};\n    if (w.config.xaxis.min == null) w.config.xaxis.min = edges[0];\n    if (w.config.xaxis.max == null) w.config.xaxis.max = edges[edges.length - 1];\n  }\n  /** @param {import('./Crossfilter').default} cf */\n  _wire(cf) {\n    if (this._wired) return;\n    this._wired = true;\n    this.ctx.addEventListener(\"dataPointSelection\", this._onPointSelect);\n    this.ctx.addEventListener(\"mounted\", this._afterRender);\n    this.ctx.addEventListener(\"updated\", this._afterRender);\n    cf.on(\"change\", this._onChange);\n  }\n  /**\n   * A pie slice / bar was clicked: toggle its bucket key on the coordinator.\n   * @param {any} _e @param {any} _ctx @param {{dataPointIndex?:number}} opts\n   */\n  _onPointSelect(_e, _ctx, opts) {\n    if (this._mode() !== \"filter\" || !opts || opts.dataPointIndex == null) return;\n    const cf = this._cf();\n    if (!cf) return;\n    const chartId = this._chartId();\n    const agg = cf.aggregateFor(chartId);\n    if (agg.type === \"matrix\") return;\n    const key = agg.keys[opts.dataPointIndex];\n    if (key == null) return;\n    cf.toggleKey(chartId, key);\n    this._fireFilterChange(cf, key);\n  }\n  /** Coordinator filter changed: re-aggregate this chart on a microtask so the\n   *  triggering click handler unwinds before we destroy/redraw the DOM. */\n  _onChange() {\n    if (this._mode() !== \"filter\" || this._pending) return;\n    this._pending = true;\n    Promise.resolve().then(() => {\n      this._pending = false;\n      if (this.w.globals.isDestroyed) return;\n      this._applyAggregation();\n    });\n  }\n  /**\n   * Pull this chart's crossfilter aggregation and push it through updateSeries\n   * (animated). When the values are unchanged (e.g. only this chart's own\n   * filter moved, which it ignores for itself), skip the reflow and just\n   * refresh the self-dim.\n   */\n  _applyAggregation() {\n    if (this._mode() !== \"filter\") return;\n    const cf = this._cf();\n    if (!cf) return;\n    const agg = cf.aggregateFor(this._chartId());\n    const sig = this._sigOf(agg);\n    if (sig === this._lastValues) {\n      this._applySelfDim();\n      return;\n    }\n    this._lastValues = sig;\n    this.ctx.updateSeries(this._seriesFromAgg(agg), true);\n  }\n  _afterRender() {\n    if (this._mode() !== \"filter\") return;\n    const series = this.w.config.series;\n    if (!series || series.length === 0) {\n      this._reassertSeries();\n      return;\n    }\n    this._applySelfDim();\n  }\n  /** Restore the aggregated series after an external updateSeries emptied it.\n   *  Deferred a microtask so the triggering update fully unwinds first. */\n  _reassertSeries() {\n    if (this._pending) return;\n    this._pending = true;\n    Promise.resolve().then(() => {\n      this._pending = false;\n      if (this.w.globals.isDestroyed) return;\n      const cf = this._cf();\n      if (!cf) return;\n      const agg = cf.aggregateFor(this._chartId());\n      const series = this._seriesFromAgg(agg);\n      if (!series.length) return;\n      this._lastValues = this._sigOf(agg);\n      this.ctx.updateSeries(series, true);\n    });\n  }\n  /**\n   * Dim this chart's own buckets that are not in its own filter (no filter ->\n   * none dimmed). Categorical: dim buckets whose key is not in the selected Set.\n   * Range: dim bins lying fully outside the selected `[min,max]`. Keyed by each\n   * mark's `j` (dataPointIndex) -> the aggregation key.\n   */\n  _applySelfDim() {\n    const cf = this._cf();\n    if (!cf) return;\n    const w = this.w;\n    const baseEl = w.dom.baseEl;\n    if (!baseEl) return;\n    const chartId = this._chartId();\n    const filter = cf.filterOf(chartId);\n    const dimOpacity = w.config.chart.link.dimOpacity;\n    if (w.dom.elWrap && typeof dimOpacity === \"number\") {\n      w.dom.elWrap.style.setProperty(\"--apx-cf-dim\", String(dimOpacity));\n    }\n    const isCategory = filter instanceof Set;\n    const isRange = Array.isArray(filter);\n    const keys = cf.aggregateFor(chartId).keys;\n    baseEl.querySelectorAll(FILTER_MARK_SELECTOR).forEach((node) => {\n      const jAttr = node.getAttribute(\"j\");\n      if (jAttr === null) return;\n      const key = keys[parseInt(jAttr, 10)];\n      let dim = false;\n      if (isCategory) {\n        dim = !/** @type {Set<any>} */\n        filter.has(key);\n      } else if (isRange && Array.isArray(key)) {\n        dim = key[1] <= filter[0] || key[0] >= filter[1];\n      }\n      node.classList.toggle(DIMMED_CLASS, dim);\n    });\n    this._dimmed = !!filter;\n  }\n  /**\n   * Fire the `filterChange` event on this (source) chart.\n   * @param {import('./Crossfilter').default} cf @param {any} key\n   */\n  _fireFilterChange(cf, key) {\n    var _a;\n    const args = __spreadProps(__spreadValues({}, cf.state()), {\n      sourceChartID: this._chartId(),\n      key\n    });\n    const events = this.w.config.chart.events;\n    if (typeof events.filterChange === \"function\") {\n      events.filterChange(this.ctx, args);\n    }\n    (_a = this.ctx.events) == null ? void 0 : _a.fireEvent(\"filterChange\", [this.ctx, args]);\n  }\n  teardown() {\n    var _a, _b, _c, _d, _e, _f;\n    this.clear();\n    if (this._wired) {\n      (_b = (_a = this.ctx).removeEventListener) == null ? void 0 : _b.call(_a, \"dataPointSelection\", this._onPointSelect);\n      (_d = (_c = this.ctx).removeEventListener) == null ? void 0 : _d.call(_c, \"mounted\", this._afterRender);\n      (_f = (_e = this.ctx).removeEventListener) == null ? void 0 : _f.call(_e, \"updated\", this._afterRender);\n      const cf = this._cf();\n      if (cf) {\n        cf.off(\"change\", this._onChange);\n        cf.removeDimension(this._chartId());\n      }\n      this._wired = false;\n    }\n  }\n}\nApexCharts.registerFeatures({ linkedViews: LinkedViews });\nconst AC = (\n  /** @type {any} */\n  ApexCharts\n);\nAC._crossfilterFactory = (opts) => Crossfilter.getOrCreate(opts);\nAC._crossfilterGet = (id) => Crossfilter.get(id);\nconst DRAG_CLASS = \"apexcharts-ink-draggable\";\nconst TYPES = [\"point\", \"xaxis\", \"yaxis\"];\nconst EDGE_PX = 8;\nconst CLICK_SLOP_PX = 2;\nconst FONT_STEPS = [10, 11, 12, 14, 17, 20];\nconst MARKER_SHAPES = [\"circle\", \"square\", \"diamond\", \"triangle\"];\nconst SHAPE_GLYPHS = {\n  circle: \"●\",\n  square: \"■\",\n  diamond: \"◆\",\n  triangle: \"▲\"\n};\nconst NOTE_COLORS = [\n  \"#ffffff\",\n  \"#334155\",\n  \"#2563eb\",\n  \"#16a34a\",\n  \"#d97706\",\n  \"#dc2626\"\n];\nconst TRASH_ICON = '<svg viewBox=\"0 0 24 24\" width=\"13\" height=\"13\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 6h18M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/></svg>';\nclass InkLayer {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._wired = false;\n    this._drag = null;\n    this._editor = null;\n    this._creating = false;\n    this._createSeq = 0;\n    this._attach = this._attach.bind(this);\n    this._onRerender = this._onRerender.bind(this);\n    this._onMove = this._onMove.bind(this);\n    this._onUp = this._onUp.bind(this);\n    this._onCreateClick = this._onCreateClick.bind(this);\n    this._onDocDownEditor = this._onDocDownEditor.bind(this);\n    if (this._enabledGlobally() || this._hasDraggable() || this._paletteEnabled()) {\n      this._wire();\n    }\n  }\n  _enabledGlobally() {\n    const ink = this.w.config.chart.ink;\n    return !!(ink && ink.enabled);\n  }\n  _paletteEnabled() {\n    const ink = this.w.config.chart.ink;\n    return !!(ink && ink.palette);\n  }\n  _snapEnabled() {\n    const ink = this.w.config.chart.ink;\n    return !!(ink && ink.snap);\n  }\n  // ─── P5: snap to gridlines ────────────────────────────────────────────────\n  /** @param {number} v @param {number[]} ticks @returns {number} nearest tick */\n  _nearest(v, ticks) {\n    let best = v;\n    let bd = Infinity;\n    for (let i = 0; i < ticks.length; i++) {\n      const d = Math.abs(ticks[i] - v);\n      if (d < bd) {\n        bd = d;\n        best = ticks[i];\n      }\n    }\n    return best;\n  }\n  /**\n   * Snap an x value to the nearest x gridline (numeric axes only).\n   * @param {number} x\n   */\n  _snapX(x) {\n    if (!this._snapEnabled() || typeof x !== \"number\") return x;\n    const s = this.w.globals.xAxisScale;\n    return s && Array.isArray(s.result) && s.result.length ? this._nearest(x, s.result) : x;\n  }\n  /**\n   * Snap a y value to the nearest y gridline.\n   * @param {number} y @param {number} si\n   */\n  _snapY(y, si) {\n    if (!this._snapEnabled() || typeof y !== \"number\") return y;\n    const scales = this.w.globals.yAxisScale;\n    const s = scales && scales[si];\n    return s && Array.isArray(s.result) && s.result.length ? this._nearest(y, s.result) : y;\n  }\n  /** @param {string} type @returns {any[]} the config annotations of a type */\n  _annoList(type) {\n    const a = this.w.config.annotations;\n    if (!a) return [];\n    const key = type === \"point\" ? \"points\" : type;\n    return Array.isArray(a[key]) ? a[key] : [];\n  }\n  /** @param {any} anno */\n  _isDraggable(anno) {\n    if (!anno) return false;\n    if (anno.draggable === true) return true;\n    if (anno.draggable === false) return false;\n    return this._enabledGlobally();\n  }\n  _hasDraggable() {\n    return TYPES.some((t) => this._annoList(t).some((p) => this._isDraggable(p)));\n  }\n  _wire() {\n    if (this._wired) return;\n    this._wired = true;\n    this.ctx.addEventListener(\"mounted\", this._onRerender);\n    this.ctx.addEventListener(\"updated\", this._onRerender);\n  }\n  /**\n   * A full (re)render rebuilds the SVG and may swap the annotations config\n   * (updateOptions, undo restore), so an open editor card points at stale\n   * state: drop it (without committing) before rebinding handlers. Targeted\n   * redraws call _attach() directly and keep the card open.\n   */\n  _onRerender() {\n    this._closeEditor(false);\n    this._attach();\n    if (this._creating) {\n      const svg = this.w.dom.Paper && this.w.dom.Paper.node;\n      if (svg) {\n        svg.style.cursor = \"crosshair\";\n        svg.addEventListener(\"click\", this._onCreateClick, true);\n      }\n    }\n  }\n  /**\n   * After each (re)render, bind drag + edit handlers to every draggable\n   * annotation's elements. Idempotent via a per-node flag so a targeted redraw\n   * re-runs this without double-binding the untouched annotations.\n   */\n  _attach() {\n    const w = this.w;\n    const baseEl = w.dom.baseEl;\n    if (!baseEl) return;\n    TYPES.forEach((type) => {\n      this._annoList(type).forEach((anno, index) => {\n        if (!this._isDraggable(anno)) return;\n        if (!anno.id) {\n          anno.id = \"apexcharts-ink-\" + type + \"-\" + index + \"-\" + w.globals.chartID;\n        }\n        baseEl.querySelectorAll(\".\" + anno.id).forEach((el) => {\n          if (el.__inkBound) return;\n          el.__inkBound = true;\n          el.style.cursor = \"move\";\n          el.classList.add(DRAG_CLASS);\n          el.addEventListener(\n            \"mousedown\",\n            (e) => this._onDown(e, type, index)\n          );\n          el.addEventListener(\n            \"touchstart\",\n            (e) => this._onDown(e, type, index)\n          );\n          el.addEventListener(\"dblclick\", (e) => {\n            e.preventDefault();\n            e.stopPropagation();\n            this._startEdit(type, index, { select: true });\n          });\n        });\n      });\n    });\n    if (this._paletteEnabled()) this._renderPalette();\n  }\n  // ─── drag / resize ────────────────────────────────────────────────────────\n  /**\n   * @param {any} e @param {string} type @param {number} index\n   */\n  _onDown(e, type, index) {\n    if (e.button && e.button !== 0) return;\n    const w = this.w;\n    const doc = w.dom.baseEl && w.dom.baseEl.ownerDocument;\n    if (!doc) return;\n    e.stopPropagation();\n    if (e.cancelable) e.preventDefault();\n    const isTouch = e.type === \"touchstart\";\n    const ev = isTouch ? e.touches[0] : e;\n    const svgRoot = w.dom.Paper && w.dom.Paper.node;\n    const ctm = svgRoot && svgRoot.getScreenCTM ? svgRoot.getScreenCTM() : null;\n    const anno = this._annoList(type)[index];\n    let mode = \"move\";\n    let rect = null;\n    let origX = 0;\n    let origW = 0;\n    if (type === \"xaxis\" && anno.x2 != null) {\n      rect = w.dom.baseEl.querySelector(\".apexcharts-annotation-rect.\" + anno.id);\n      if (rect) {\n        const r = rect.getBoundingClientRect();\n        if (Math.abs(ev.clientX - r.left) <= EDGE_PX) mode = \"resize-x1\";\n        else if (Math.abs(ev.clientX - r.right) <= EDGE_PX) mode = \"resize-x2\";\n        origX = parseFloat(rect.getAttribute(\"x\")) || 0;\n        origW = parseFloat(rect.getAttribute(\"width\")) || 0;\n      }\n    }\n    this._drag = {\n      type,\n      index,\n      anno,\n      els: Array.from(w.dom.baseEl.querySelectorAll(\".\" + anno.id)),\n      mode,\n      rect,\n      origX,\n      origW,\n      startX: ev.clientX,\n      startY: ev.clientY,\n      scaleX: ctm && ctm.a ? ctm.a : 1,\n      scaleY: ctm && ctm.d ? ctm.d : 1,\n      dxPixel: 0,\n      dyPixel: 0,\n      moved: false\n    };\n    doc.addEventListener(\"mousemove\", this._onMove);\n    doc.addEventListener(\"touchmove\", this._onMove, { passive: false });\n    doc.addEventListener(\"mouseup\", this._onUp);\n    doc.addEventListener(\"touchend\", this._onUp);\n  }\n  /** @param {any} me */\n  _onMove(me) {\n    const d = this._drag;\n    if (!d) return;\n    if (me.cancelable) me.preventDefault();\n    const mev = me.type === \"touchmove\" ? me.touches[0] : me;\n    d.dxPixel = (mev.clientX - d.startX) / d.scaleX;\n    d.dyPixel = (mev.clientY - d.startY) / d.scaleY;\n    if (Math.abs(d.dxPixel) > CLICK_SLOP_PX || Math.abs(d.dyPixel) > CLICK_SLOP_PX) {\n      d.moved = true;\n    }\n    if (d.mode === \"move\") {\n      const t = `translate(${d.dxPixel} ${d.dyPixel})`;\n      d.els.forEach((el) => el.setAttribute(\"transform\", t));\n    } else if (d.rect) {\n      if (d.mode === \"resize-x1\") {\n        d.rect.setAttribute(\"x\", d.origX + d.dxPixel);\n        d.rect.setAttribute(\"width\", Math.max(1, d.origW - d.dxPixel));\n      } else if (d.mode === \"resize-x2\") {\n        d.rect.setAttribute(\"width\", Math.max(1, d.origW + d.dxPixel));\n      }\n    }\n  }\n  _onUp() {\n    const d = this._drag;\n    this._drag = null;\n    this._teardownDocListeners();\n    if (!d || !d.moved) {\n      if (d) {\n        d.els.forEach((el) => el.removeAttribute(\"transform\"));\n        this._startEdit(d.type, d.index);\n      }\n      return;\n    }\n    const anno = this._annoList(d.type)[d.index];\n    if (!anno) return;\n    this._applyDelta(d, anno);\n    d.els.forEach((el) => el.removeAttribute(\"transform\"));\n    this._redrawAnno(d.type, anno, d.index);\n    this._checkpoint(\"ink:drag\");\n    this._fireDragged(d.type, anno, d.index);\n  }\n  /**\n   * Record a Rewind (undo) checkpoint for an ink edit. Targeted redraws fire no\n   * 'updated' event, so History would otherwise miss them. No-op when the\n   * history feature is absent or disabled.\n   * @param {string} label\n   */\n  _checkpoint(label) {\n    var _a, _b;\n    (_b = (_a = this.ctx.history) == null ? void 0 : _a.snapshot) == null ? void 0 : _b.call(_a, label);\n  }\n  /**\n   * Mutate the annotation's config from the pixel drag delta (type + mode aware).\n   * @param {any} d @param {any} anno\n   */\n  _applyDelta(d, anno) {\n    const w = this.w;\n    const dxData = w.layout.gridWidth ? d.dxPixel * (w.globals.xRange / w.layout.gridWidth) : 0;\n    if (d.type === \"point\") {\n      const { newX, newY } = this._invertPoint(anno, d.dxPixel, d.dyPixel);\n      anno.x = this._snapX(newX);\n      if (newY != null) {\n        const yi = anno.yAxisIndex || 0;\n        const map = w.globals.seriesYAxisMap;\n        anno.y = this._snapY(newY, map && map[yi] ? map[yi][0] : 0);\n      }\n      return;\n    }\n    if (d.type === \"xaxis\") {\n      if (typeof anno.x !== \"number\") return;\n      if (d.mode === \"move\") {\n        if (typeof anno.x2 === \"number\") {\n          anno.x += dxData;\n          anno.x2 += dxData;\n        } else {\n          anno.x = this._snapX(anno.x + dxData);\n        }\n      } else if (d.mode === \"resize-x1\" || d.mode === \"resize-x2\") {\n        const xIsLeft = anno.x2 == null || anno.x <= anno.x2;\n        const grow = d.mode === \"resize-x2\" ? !xIsLeft : xIsLeft;\n        if (grow) anno.x = this._snapX(anno.x + dxData);\n        else if (typeof anno.x2 === \"number\") anno.x2 = this._snapX(anno.x2 + dxData);\n      }\n      return;\n    }\n    if (d.type === \"yaxis\") {\n      const yi = anno.yAxisIndex || 0;\n      const map = w.globals.seriesYAxisMap;\n      const si = map && map[yi] ? map[yi][0] : 0;\n      const yRange = w.globals.yRange ? w.globals.yRange[si] : null;\n      if (yRange == null || !w.layout.gridHeight) return;\n      const dyData = -d.dyPixel * (yRange / w.layout.gridHeight);\n      if (typeof anno.y2 === \"number\") {\n        if (typeof anno.y === \"number\") anno.y += dyData;\n        anno.y2 += dyData;\n      } else if (typeof anno.y === \"number\") {\n        anno.y = this._snapY(anno.y + dyData, si);\n      }\n    }\n  }\n  /**\n   * Invert a pixel drag delta to a point annotation's data x/y.\n   * @param {any} anno @param {number} dxPixel @param {number} dyPixel\n   * @returns {{newX:any, newY:any}}\n   */\n  _invertPoint(anno, dxPixel, dyPixel) {\n    const w = this.w;\n    const categoryX = (w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) && !w.axisFlags.dataFormatXNumeric;\n    let newX = anno.x;\n    if (!categoryX && typeof anno.x === \"number\" && w.layout.gridWidth) {\n      newX = anno.x + dxPixel * (w.globals.xRange / w.layout.gridWidth);\n    }\n    let newY = anno.y;\n    const yi = anno.yAxisIndex || 0;\n    const map = w.globals.seriesYAxisMap;\n    const si = map && map[yi] ? map[yi][0] : 0;\n    const yRange = w.globals.yRange ? w.globals.yRange[si] : null;\n    const logY = w.config.yaxis[yi] && w.config.yaxis[yi].logarithmic;\n    if (typeof anno.y === \"number\" && yRange != null && !logY && w.layout.gridHeight) {\n      newY = anno.y - dyPixel * (yRange / w.layout.gridHeight);\n    }\n    return { newX, newY };\n  }\n  /**\n   * Targeted redraw of one annotation: drop its elements and re-add the shape +\n   * label + label background at the current config coordinates (no full chart\n   * re-render, and repeat-safe unlike updateOptions({})).\n   * @param {string} type @param {any} anno @param {number} index\n   */\n  _redrawAnno(type, anno, index) {\n    const w = this.w;\n    const baseEl = w.dom.baseEl;\n    const annotations = this.ctx.annotations;\n    if (!baseEl || !annotations) return;\n    baseEl.querySelectorAll(\".\" + anno.id).forEach((el) => el.remove());\n    const group = baseEl.querySelector(\".apexcharts-\" + type + \"-annotations\");\n    if (!group) return;\n    if (type === \"point\" && annotations.pointsAnnotations) {\n      annotations.pointsAnnotations.addPointAnnotation(anno, group, index);\n    } else if (type === \"xaxis\" && annotations.xAxisAnnotations) {\n      annotations.xAxisAnnotations.addXaxisAnnotation(anno, group, index);\n    } else if (type === \"yaxis\" && annotations.yAxisAnnotations) {\n      annotations.yAxisAnnotations.addYaxisAnnotation(anno, group, index);\n    }\n    const labelEl = baseEl.querySelector(\n      \".apexcharts-\" + type + \"-annotation-label.\" + anno.id\n    );\n    if (labelEl && annotations.helpers && anno.label && anno.label.text) {\n      const elRect = annotations.helpers.addBackgroundToAnno(labelEl, anno);\n      if (elRect && labelEl.parentNode) {\n        labelEl.parentNode.insertBefore(elRect.node, labelEl);\n      }\n    }\n    this._attach();\n  }\n  /**\n   * Dispatch an ink annotation lifecycle event both to the user callback\n   * (`chart.events[name]`) and the internal event bus, in that order.\n   * @param {string} name @param {any} args\n   */\n  _fireAnnotationEvent(name2, args) {\n    var _a;\n    const events = this.w.config.chart.events;\n    if (typeof events[name2] === \"function\") {\n      events[name2](this.ctx, args);\n    }\n    (_a = this.ctx.events) == null ? void 0 : _a.fireEvent(name2, [this.ctx, args]);\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireDragged(type, anno, index) {\n    const args = { type, id: anno.id, index, x: anno.x, y: anno.y };\n    if (anno.x2 != null) args.x2 = anno.x2;\n    if (anno.y2 != null) args.y2 = anno.y2;\n    this._fireAnnotationEvent(\"annotationDragged\", args);\n  }\n  // ─── P3: click-to-create ─────────────────────────────────────────────────\n  /**\n   * Enter create mode: the next click on the plot area drops a new draggable\n   * point annotation there and opens its label editor.\n   */\n  startCreate() {\n    if (this._creating) return;\n    const svg = this.w.dom.Paper && this.w.dom.Paper.node;\n    if (!svg) return;\n    this._creating = true;\n    svg.style.cursor = \"crosshair\";\n    svg.addEventListener(\"click\", this._onCreateClick, true);\n    this._syncPalette();\n  }\n  /** Leave create mode. */\n  stopCreate() {\n    if (!this._creating) return;\n    this._creating = false;\n    const svg = this.w.dom.Paper && this.w.dom.Paper.node;\n    if (svg) {\n      svg.style.cursor = \"\";\n      svg.removeEventListener(\"click\", this._onCreateClick, true);\n    }\n    this._syncPalette();\n  }\n  /** @param {any} e */\n  _onCreateClick(e) {\n    if (!this._creating) return;\n    e.preventDefault();\n    e.stopPropagation();\n    const pos = this._pixelToData(e.clientX, e.clientY);\n    this.stopCreate();\n    if (!pos) return;\n    this.createAt(pos.x, pos.y);\n  }\n  /**\n   * Create a draggable note at data coordinates and open its editor card.\n   * Public: the context menu's \"Add note here\" routes here so its notes are\n   * config-backed too, and thus draggable, editable, persistable and undoable.\n   * @param {any} x @param {any} y @param {{text?: string}} [opts]\n   * @returns {any} the created annotation config\n   */\n  createAt(x, y, opts = {}) {\n    const w = this.w;\n    this._wire();\n    this._createSeq += 1;\n    const id = \"apexcharts-ink-new-\" + this._createSeq + \"-\" + w.globals.chartID;\n    const anno = Utils$1.extend(new Options().pointAnnotation, {\n      x,\n      y,\n      id,\n      draggable: true,\n      label: { text: opts.text || \"Note\" }\n    });\n    if (!w.config.annotations) w.config.annotations = {};\n    if (!Array.isArray(w.config.annotations.points)) w.config.annotations.points = [];\n    w.config.annotations.points.push(anno);\n    const index = w.config.annotations.points.length - 1;\n    this._redrawAnno(\"point\", anno, index);\n    this._checkpoint(\"ink:create\");\n    this._fireCreated(\"point\", anno, index);\n    this._startEdit(\"point\", index, { select: true });\n    return anno;\n  }\n  /**\n   * Create a draggable dashed LINE annotation at a data value and open its\n   * editor card: axis 'x' drops a vertical line at a data x, axis 'y' a\n   * horizontal line at a data y. Public: the context menu's \"Annotate here\"\n   * routes here so its lines are config-backed too, and thus draggable,\n   * editable, persistable and undoable. Lines only: x2/y2 are never set, so\n   * this can never produce a range rectangle.\n   * @param {'x'|'y'} axis @param {any} val\n   * @param {{text?: string, strokeDashArray?: number, color?: string, select?: boolean}} [opts]\n   * @returns {any} the created annotation config\n   */\n  createLineAt(axis, val, opts = {}) {\n    const w = this.w;\n    this._wire();\n    this._createSeq += 1;\n    const id = \"apexcharts-ink-new-\" + this._createSeq + \"-\" + w.globals.chartID;\n    const type = axis === \"y\" ? \"yaxis\" : \"xaxis\";\n    const defaults = type === \"yaxis\" ? new Options().yAxisAnnotation : new Options().xAxisAnnotation;\n    const over = {\n      id,\n      draggable: true,\n      strokeDashArray: opts.strokeDashArray != null ? opts.strokeDashArray : 4,\n      label: { text: opts.text || \"\" }\n    };\n    if (opts.color) {\n      over.borderColor = opts.color;\n      over.label.borderColor = opts.color;\n    }\n    if (type === \"yaxis\") over.y = val;\n    else over.x = val;\n    const anno = Utils$1.extend(defaults, over);\n    if (!w.config.annotations) w.config.annotations = {};\n    if (!Array.isArray(w.config.annotations[type])) w.config.annotations[type] = [];\n    w.config.annotations[type].push(anno);\n    const index = w.config.annotations[type].length - 1;\n    this._redrawAnno(type, anno, index);\n    this._checkpoint(\"ink:create\");\n    this._fireCreated(type, anno, index);\n    if (opts.select !== false) this._startEdit(type, index, { select: true });\n    return anno;\n  }\n  /**\n   * Convert a client-space point to data coordinates (absolute, for create).\n   * @param {number} clientX @param {number} clientY\n   * @returns {{x:any, y:any}|null}\n   */\n  _pixelToData(clientX, clientY) {\n    const w = this.w;\n    const gridEl = w.dom.baseEl && w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!gridEl) return null;\n    const g = gridEl.getBoundingClientRect();\n    if (!g.width || !g.height) return null;\n    const fx = (clientX - g.left) / g.width;\n    const fy = (clientY - g.top) / g.height;\n    const minX = w.globals.minX;\n    const xRange = w.globals.xRange;\n    const minY = w.globals.minYArr && w.globals.minYArr[0] != null ? w.globals.minYArr[0] : w.globals.minY;\n    const yRange = w.globals.yRange && w.globals.yRange[0] != null ? w.globals.yRange[0] : w.globals.maxY - w.globals.minY;\n    let x = minX + fx * xRange;\n    const y = minY + (1 - fy) * yRange;\n    const categoryX = (w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) && !w.axisFlags.dataFormatXNumeric;\n    if (categoryX) x = Math.round(x);\n    return { x, y };\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireCreated(type, anno, index) {\n    const args = { type, id: anno.id, index };\n    if (typeof anno.x !== \"undefined\") args.x = anno.x;\n    if (typeof anno.y !== \"undefined\") args.y = anno.y;\n    this._fireAnnotationEvent(\"annotationCreated\", args);\n  }\n  // ─── P3: tool palette ────────────────────────────────────────────────────\n  /** Render a minimal \"add note\" toggle into the chart wrap (once per render). */\n  _renderPalette() {\n    const w = this.w;\n    const elWrap = w.dom.elWrap;\n    if (!elWrap || elWrap.querySelector(\".apexcharts-ink-palette\")) return;\n    const doc = elWrap.ownerDocument;\n    const bar = doc.createElement(\"div\");\n    bar.className = \"apexcharts-ink-palette\";\n    const s = bar.style;\n    s.position = \"absolute\";\n    s.top = \"6px\";\n    s.left = \"6px\";\n    s.zIndex = \"15\";\n    const btn = doc.createElement(\"button\");\n    btn.type = \"button\";\n    btn.className = \"apexcharts-ink-add\";\n    btn.textContent = \"+ Note\";\n    const bs = btn.style;\n    bs.cursor = \"pointer\";\n    bs.font = \"12px sans-serif\";\n    bs.padding = \"4px 9px\";\n    bs.borderRadius = \"5px\";\n    bs.border = \"1px solid #6366f1\";\n    bs.color = \"#4338ca\";\n    bs.background = \"#fff\";\n    btn.addEventListener(\"click\", (e) => {\n      e.stopPropagation();\n      if (this._creating) this.stopCreate();\n      else this.startCreate();\n    });\n    bar.appendChild(btn);\n    elWrap.appendChild(bar);\n    this._syncPalette();\n  }\n  /** Reflect create-mode state on the palette button. */\n  _syncPalette() {\n    const elWrap = this.w.dom.elWrap;\n    const btn = (\n      /** @type {any} */\n      elWrap && elWrap.querySelector(\".apexcharts-ink-add\")\n    );\n    if (!btn) return;\n    if (this._creating) {\n      btn.style.background = \"#6366f1\";\n      btn.style.color = \"#fff\";\n      btn.textContent = \"Click chart...\";\n    } else {\n      btn.style.background = \"#fff\";\n      btn.style.color = \"#4338ca\";\n      btn.textContent = \"+ Note\";\n    }\n  }\n  // ─── P2 + P6: the floating note editor card ──────────────────────────────\n  // Click (or double-click) an ink-managed annotation to open a small card\n  // anchored to it: rename inline, recolor via accent swatches, toggle bold,\n  // step the font size, size/reshape the marker (points), or delete the note.\n  /** @returns {string[]} the accent swatches offered by the editor */\n  _noteColors() {\n    const ink = this.w.config.chart.ink;\n    return ink && Array.isArray(ink.noteColors) && ink.noteColors.length ? ink.noteColors : NOTE_COLORS;\n  }\n  /**\n   * Perceived-luminance check so text/border contrast follows the accent.\n   * @param {string} hex\n   */\n  static _isLight(hex) {\n    const h = String(hex || \"\").replace(\"#\", \"\");\n    const full = h.length === 3 ? h.split(\"\").map((c) => c + c).join(\"\") : h;\n    const n = parseInt(full, 16);\n    if (isNaN(n) || full.length !== 6) return false;\n    const r = n >> 16 & 255;\n    const g = n >> 8 & 255;\n    const b = n & 255;\n    return (0.299 * r + 0.587 * g + 0.114 * b) / 255 > 0.72;\n  }\n  /** @param {any} style */\n  static _isBold(style) {\n    const fw = style && style.fontWeight;\n    return fw === \"bold\" || parseInt(String(fw), 10) >= 600;\n  }\n  /**\n   * Small icon/text button for the editor card. mousedown is prevented so the\n   * text input keeps focus while formatting.\n   * @param {any} doc @param {string} content @param {string} title\n   * @param {Function} onClick @param {string} [extraClass] @param {boolean} [isSvg]\n   */\n  _cardBtn(doc, content, title, onClick, extraClass, isSvg) {\n    const b = doc.createElement(\"button\");\n    b.type = \"button\";\n    b.className = \"apexcharts-ink-btn\" + (extraClass ? \" \" + extraClass : \"\");\n    b.title = title;\n    b.setAttribute(\"aria-label\", title);\n    if (isSvg) b.innerHTML = content;\n    else b.textContent = content;\n    b.addEventListener(\"mousedown\", (e) => e.preventDefault());\n    b.addEventListener(\"click\", (e) => {\n      e.stopPropagation();\n      onClick();\n    });\n    return b;\n  }\n  /**\n   * Uppercase row caption (\"Label\" / \"Line\" / \"Marker\") for the editor card.\n   * @param {any} doc @param {string} text\n   */\n  _cardLabel(doc, text) {\n    const lab = doc.createElement(\"span\");\n    lab.className = \"apexcharts-ink-cardlabel\";\n    lab.textContent = text;\n    return lab;\n  }\n  /**\n   * Color swatch button for the editor card. mousedown is prevented so the\n   * text input keeps focus while restyling.\n   * @param {any} doc @param {string} c\n   * @param {(c: string) => void} pick @param {string} [extraClass]\n   */\n  _mkSwatch(doc, c, pick, extraClass) {\n    const sw = doc.createElement(\"button\");\n    sw.type = \"button\";\n    sw.className = \"apexcharts-ink-swatch\" + (extraClass ? \" \" + extraClass : \"\");\n    sw.title = c;\n    sw.setAttribute(\"aria-label\", \"Color \" + c);\n    sw.dataset.color = c;\n    sw.style.background = c;\n    sw.addEventListener(\"mousedown\", (e) => e.preventDefault());\n    sw.addEventListener(\"click\", (e) => {\n      e.stopPropagation();\n      pick(c);\n    });\n    return sw;\n  }\n  /**\n   * Open the floating editor card for an annotation.\n   * @param {string} type @param {number} index\n   * @param {{select?: boolean}} [opts] select: preselect the text (create / dblclick)\n   */\n  _startEdit(type, index, opts = {}) {\n    const w = this.w;\n    const anno = this._annoList(type)[index];\n    const baseEl = w.dom.baseEl;\n    const elWrap = w.dom.elWrap;\n    if (!anno || !anno.id || !baseEl || !elWrap) return;\n    this._closeEditor(false);\n    const doc = baseEl.ownerDocument;\n    const card = doc.createElement(\"div\");\n    card.className = \"apexcharts-ink-card\";\n    card.setAttribute(\"role\", \"dialog\");\n    card.setAttribute(\"aria-label\", \"Edit note\");\n    card.style.visibility = \"hidden\";\n    const rowText = doc.createElement(\"div\");\n    rowText.className = \"apexcharts-ink-card-row\";\n    const input = doc.createElement(\"input\");\n    input.type = \"text\";\n    input.className = \"apexcharts-ink-editor\";\n    input.placeholder = \"Note text\";\n    input.value = anno.label && anno.label.text || \"\";\n    rowText.appendChild(input);\n    rowText.appendChild(\n      this._cardBtn(\n        doc,\n        TRASH_ICON,\n        \"Delete note\",\n        () => this._deleteAnno(),\n        \"apexcharts-ink-btn--delete\",\n        true\n      )\n    );\n    card.appendChild(rowText);\n    const rowStyle = doc.createElement(\"div\");\n    rowStyle.className = \"apexcharts-ink-card-row\";\n    if (type !== \"point\") {\n      rowStyle.appendChild(this._cardLabel(doc, \"Label\"));\n    }\n    this._noteColors().forEach((c) => {\n      rowStyle.appendChild(this._mkSwatch(doc, c, (col) => this._applyColor(col)));\n    });\n    const sep = doc.createElement(\"span\");\n    sep.className = \"apexcharts-ink-sep\";\n    rowStyle.appendChild(sep);\n    rowStyle.appendChild(\n      this._cardBtn(doc, \"B\", \"Bold\", () => this._toggleBold(), \"apexcharts-ink-btn--bold\")\n    );\n    rowStyle.appendChild(this._cardBtn(doc, \"A-\", \"Smaller text\", () => this._stepFont(-1)));\n    rowStyle.appendChild(this._cardBtn(doc, \"A+\", \"Larger text\", () => this._stepFont(1)));\n    card.appendChild(rowStyle);\n    if (type !== \"point\") {\n      const rowLine = doc.createElement(\"div\");\n      rowLine.className = \"apexcharts-ink-card-row\";\n      rowLine.appendChild(this._cardLabel(doc, \"Line\"));\n      this._noteColors().forEach((c) => {\n        rowLine.appendChild(\n          this._mkSwatch(\n            doc,\n            c,\n            (col) => this._applyLineColor(col),\n            \"apexcharts-ink-swatch--line\"\n          )\n        );\n      });\n      card.appendChild(rowLine);\n    }\n    if (type === \"point\") {\n      const rowMarker = doc.createElement(\"div\");\n      rowMarker.className = \"apexcharts-ink-card-row\";\n      rowMarker.appendChild(this._cardLabel(doc, \"Marker\"));\n      rowMarker.appendChild(\n        this._cardBtn(doc, \"-\", \"Smaller marker\", () => this._stepMarker(-1))\n      );\n      const sizeOut = doc.createElement(\"span\");\n      sizeOut.className = \"apexcharts-ink-marker-size\";\n      rowMarker.appendChild(sizeOut);\n      rowMarker.appendChild(\n        this._cardBtn(doc, \"+\", \"Larger marker\", () => this._stepMarker(1))\n      );\n      rowMarker.appendChild(\n        this._cardBtn(\n          doc,\n          SHAPE_GLYPHS.circle,\n          \"Marker shape\",\n          () => this._cycleShape(),\n          \"apexcharts-ink-btn--shape\"\n        )\n      );\n      card.appendChild(rowMarker);\n    }\n    elWrap.appendChild(card);\n    this._editor = { card, input, type, index };\n    this._positionCard();\n    this._syncCard();\n    card.style.visibility = \"\";\n    input.focus();\n    if (opts.select) input.select();\n    card.addEventListener(\"keydown\", (e) => {\n      if (e.key === \"Escape\") {\n        e.preventDefault();\n        e.stopPropagation();\n        this._closeEditor(false);\n      } else if (e.key === \"Enter\" && e.target === input) {\n        e.preventDefault();\n        this._closeEditor(true);\n      }\n    });\n    doc.addEventListener(\"mousedown\", this._onDocDownEditor, true);\n    doc.addEventListener(\"touchstart\", this._onDocDownEditor, true);\n  }\n  /**\n   * Commit + close on any press outside the card.\n   * @param {any} e\n   */\n  _onDocDownEditor(e) {\n    const ed = this._editor;\n    if (!ed || ed.card.contains(e.target)) return;\n    this._closeEditor(true);\n  }\n  /**\n   * Anchor the card to the annotation's label (below it, or above when there\n   * is no room), clamped inside the chart wrap. Re-run after each restyle\n   * since the label rect changes.\n   */\n  _positionCard() {\n    const ed = this._editor;\n    if (!ed) return;\n    const w = this.w;\n    const baseEl = w.dom.baseEl;\n    const elWrap = w.dom.elWrap;\n    const anno = this._annoList(ed.type)[ed.index];\n    if (!baseEl || !elWrap || !anno) return;\n    const anchor = baseEl.querySelector(\n      \".apexcharts-\" + ed.type + \"-annotation-label.\" + anno.id\n    ) || baseEl.querySelector(\".\" + anno.id);\n    if (!anchor) return;\n    const wrapRect = elWrap.getBoundingClientRect();\n    const aRect = anchor.getBoundingClientRect();\n    const cw = ed.card.offsetWidth;\n    const ch = ed.card.offsetHeight;\n    let left = Math.round(aRect.left - wrapRect.left);\n    let top = Math.round(aRect.bottom - wrapRect.top) + 8;\n    if (top + ch > elWrap.clientHeight - 4) {\n      top = Math.round(aRect.top - wrapRect.top) - ch - 8;\n    }\n    if (left + cw > elWrap.clientWidth - 4) left = elWrap.clientWidth - cw - 4;\n    ed.card.style.left = Math.max(4, left) + \"px\";\n    ed.card.style.top = Math.max(4, top) + \"px\";\n  }\n  /** Reflect the annotation's current style on the card controls. */\n  _syncCard() {\n    const ed = this._editor;\n    if (!ed) return;\n    const anno = this._annoList(ed.type)[ed.index];\n    if (!anno) return;\n    const style = anno.label && anno.label.style || {};\n    const bg = String(style.background || \"\").toLowerCase();\n    ed.card.querySelectorAll(\".apexcharts-ink-swatch:not(.apexcharts-ink-swatch--line)\").forEach((sw) => {\n      sw.classList.toggle(\n        \"apexcharts-ink-swatch--active\",\n        (sw.dataset.color || \"\").toLowerCase() === bg\n      );\n    });\n    const stroke = String(anno.borderColor || \"\").toLowerCase();\n    ed.card.querySelectorAll(\".apexcharts-ink-swatch--line\").forEach((sw) => {\n      sw.classList.toggle(\n        \"apexcharts-ink-swatch--active\",\n        (sw.dataset.color || \"\").toLowerCase() === stroke\n      );\n    });\n    const boldBtn = ed.card.querySelector(\".apexcharts-ink-btn--bold\");\n    if (boldBtn) {\n      boldBtn.classList.toggle(\"apexcharts-ink-btn--active\", InkLayer._isBold(style));\n    }\n    const m = anno.marker || {};\n    const sizeOut = ed.card.querySelector(\".apexcharts-ink-marker-size\");\n    if (sizeOut) {\n      sizeOut.textContent = String(typeof m.size === \"number\" ? m.size : 4);\n    }\n    const shapeBtn = ed.card.querySelector(\".apexcharts-ink-btn--shape\");\n    if (shapeBtn) {\n      shapeBtn.textContent = SHAPE_GLYPHS[m.shape] || SHAPE_GLYPHS.circle;\n    }\n  }\n  /**\n   * Commit the input's text into the annotation (the card stays open). Also\n   * runs before any style apply so typed-but-unconfirmed text survives the\n   * redraw.\n   * @param {any} ed\n   */\n  _commitTextOf(ed) {\n    const anno = this._annoList(ed.type)[ed.index];\n    if (!anno) return;\n    const text = ed.input.value;\n    if (!anno.label) anno.label = {};\n    if (anno.label.text === text) return;\n    anno.label.text = text;\n    this._redrawAnno(ed.type, anno, ed.index);\n    this._checkpoint(\"ink:edit\");\n    this._fireEdited(ed.type, anno, ed.index);\n  }\n  /**\n   * Close the editor card. commit=true also commits the pending text. Style\n   * edits apply immediately and are not rolled back by Escape; use undo.\n   * @param {boolean} commit\n   */\n  _closeEditor(commit) {\n    const ed = this._editor;\n    if (!ed) return;\n    this._editor = null;\n    const doc = this.w.dom.baseEl && this.w.dom.baseEl.ownerDocument;\n    if (doc) {\n      doc.removeEventListener(\"mousedown\", this._onDocDownEditor, true);\n      doc.removeEventListener(\"touchstart\", this._onDocDownEditor, true);\n    }\n    if (ed.card.parentNode) ed.card.parentNode.removeChild(ed.card);\n    if (commit) this._commitTextOf(ed);\n  }\n  /**\n   * Apply a config mutation from a card control: commit pending text, mutate,\n   * redraw, checkpoint for undo, then refresh + re-anchor the card.\n   * @param {string} label @param {(anno: any) => void} mutate\n   */\n  _applyStyle(label, mutate) {\n    const ed = this._editor;\n    if (!ed) return;\n    const anno = this._annoList(ed.type)[ed.index];\n    if (!anno) return;\n    this._commitTextOf(ed);\n    if (!anno.label) anno.label = {};\n    if (!anno.label.style) anno.label.style = {};\n    mutate(anno);\n    this._redrawAnno(ed.type, anno, ed.index);\n    this._checkpoint(label);\n    this._fireStyled(ed.type, anno, ed.index);\n    this._syncCard();\n    this._positionCard();\n  }\n  /**\n   * Apply an accent color: label chip + marker (points) or line/range fill\n   * (axis annotations), with text/border contrast following the luminance.\n   * @param {string} c\n   */\n  _applyColor(c) {\n    const ed = this._editor;\n    if (!ed) return;\n    const light = InkLayer._isLight(c);\n    this._applyStyle(\"ink:style\", (anno) => {\n      anno.label.style.background = c;\n      anno.label.style.color = light ? \"#334155\" : \"#ffffff\";\n      anno.label.borderColor = light ? \"#cbd5e1\" : c;\n      if (ed.type === \"point\") {\n        if (!anno.marker) anno.marker = {};\n        anno.marker.strokeColor = light ? \"#334155\" : c;\n        anno.marker.fillColor = light ? \"#ffffff\" : c;\n      }\n    });\n  }\n  /**\n   * Line-stroke color for axis annotations, separate from the label chip.\n   * @param {string} c\n   */\n  _applyLineColor(c) {\n    const ed = this._editor;\n    if (!ed || ed.type === \"point\") return;\n    this._applyStyle(\"ink:style\", (anno) => {\n      anno.borderColor = c;\n      if (anno.x2 != null || anno.y2 != null) anno.fillColor = c;\n    });\n  }\n  /**\n   * Step the label font size through the preset scale.\n   * @param {number} dir\n   */\n  _stepFont(dir) {\n    this._applyStyle(\"ink:style\", (anno) => {\n      const cur = parseFloat(anno.label.style.fontSize) || 11;\n      let i = 0;\n      for (let k = 1; k < FONT_STEPS.length; k++) {\n        if (Math.abs(FONT_STEPS[k] - cur) < Math.abs(FONT_STEPS[i] - cur)) i = k;\n      }\n      i = Math.min(FONT_STEPS.length - 1, Math.max(0, i + dir));\n      anno.label.style.fontSize = FONT_STEPS[i] + \"px\";\n    });\n  }\n  _toggleBold() {\n    this._applyStyle(\"ink:style\", (anno) => {\n      anno.label.style.fontWeight = InkLayer._isBold(anno.label.style) ? 400 : 700;\n    });\n  }\n  /**\n   * Grow/shrink the point marker.\n   * @param {number} dir\n   */\n  _stepMarker(dir) {\n    this._applyStyle(\"ink:style\", (anno) => {\n      if (!anno.marker) anno.marker = {};\n      const cur = typeof anno.marker.size === \"number\" ? anno.marker.size : 4;\n      anno.marker.size = Math.min(14, Math.max(2, cur + dir));\n    });\n  }\n  /** Cycle the point marker shape (circle, square, diamond, triangle). */\n  _cycleShape() {\n    this._applyStyle(\"ink:style\", (anno) => {\n      if (!anno.marker) anno.marker = {};\n      const i = MARKER_SHAPES.indexOf(anno.marker.shape);\n      anno.marker.shape = MARKER_SHAPES[(i + 1) % MARKER_SHAPES.length];\n    });\n  }\n  /** Delete the annotation the editor is open on (undoable via Rewind). */\n  _deleteAnno() {\n    const ed = this._editor;\n    if (!ed) return;\n    const list = this._annoList(ed.type);\n    const anno = list[ed.index];\n    this._closeEditor(false);\n    if (!anno) return;\n    const baseEl = this.w.dom.baseEl;\n    if (baseEl && anno.id) {\n      baseEl.querySelectorAll(\".\" + anno.id).forEach((el) => el.remove());\n    }\n    list.splice(ed.index, 1);\n    for (let i = ed.index; i < list.length; i++) {\n      this._redrawAnno(ed.type, list[i], i);\n    }\n    this._checkpoint(\"ink:delete\");\n    this._fireDeleted(ed.type, anno, ed.index);\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireEdited(type, anno, index) {\n    const args = { type, id: anno.id, index, text: anno.label ? anno.label.text : \"\" };\n    this._fireAnnotationEvent(\"annotationEdited\", args);\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireStyled(type, anno, index) {\n    const args = { type, id: anno.id, index, label: anno.label, marker: anno.marker };\n    this._fireAnnotationEvent(\"annotationStyled\", args);\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireDeleted(type, anno, index) {\n    const args = { type, id: anno.id, index };\n    this._fireAnnotationEvent(\"annotationDeleted\", args);\n  }\n  // ─── lifecycle ────────────────────────────────────────────────────────────\n  _teardownDocListeners() {\n    const doc = this.w.dom.baseEl && this.w.dom.baseEl.ownerDocument;\n    if (!doc) return;\n    doc.removeEventListener(\"mousemove\", this._onMove);\n    doc.removeEventListener(\"touchmove\", this._onMove);\n    doc.removeEventListener(\"mouseup\", this._onUp);\n    doc.removeEventListener(\"touchend\", this._onUp);\n  }\n  teardown() {\n    var _a, _b, _c, _d;\n    this._teardownDocListeners();\n    this._closeEditor(false);\n    this.stopCreate();\n    this._drag = null;\n    if (this._wired) {\n      (_b = (_a = this.ctx).removeEventListener) == null ? void 0 : _b.call(_a, \"mounted\", this._onRerender);\n      (_d = (_c = this.ctx).removeEventListener) == null ? void 0 : _d.call(_c, \"updated\", this._onRerender);\n      this._wired = false;\n    }\n  }\n}\nApexCharts.registerFeatures({ ink: InkLayer });\nclass Measure {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.graphics = new Graphics(w);\n    this.pins = [];\n    this.drag = null;\n    this.armed = false;\n    this.persistent = false;\n    this.pane = null;\n    this._seedActive = false;\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onKeyUp = this._onKeyUp.bind(this);\n    this._onDown = this._onDown.bind(this);\n    this._onMove = this._onMove.bind(this);\n    this._onUp = this._onUp.bind(this);\n    this._onSeedDown = this._onSeedDown.bind(this);\n    this._onSeedKey = this._onSeedKey.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    ctx.addEventListener(\"mounted\", this._afterRender);\n    ctx.addEventListener(\"updated\", this._afterRender);\n    this._bindKeys();\n  }\n  _cfg() {\n    return this.w.config.chart.measure || {};\n  }\n  _enabled() {\n    return this.w.globals.axisCharts && this._cfg().enabled === true;\n  }\n  _mode() {\n    return this._cfg().mode === \"free\" ? \"free\" : \"span\";\n  }\n  /**\n   * Nearest first-series data point to a data x (used to snap span endpoints\n   * onto the series line).\n   * @param {number} dataX\n   * @returns {{x:number,y:number}|null}\n   */\n  _snapToSeries(dataX) {\n    const s0 = (\n      /** @type {any} */\n      (this.w.config.series || [])[0]\n    );\n    if (!s0) return null;\n    const pts = this._points(s0.data || []);\n    if (!pts.length) return null;\n    let best = pts[0];\n    let bd = Math.abs(pts[0].x - dataX);\n    for (let i = 1; i < pts.length; i++) {\n      const d = Math.abs(pts[i].x - dataX);\n      if (d < bd) {\n        bd = d;\n        best = pts[i];\n      }\n    }\n    return best;\n  }\n  /**\n   * Resolve a raw projected point to the endpoint that is actually drawn: span\n   * mode snaps x to the nearest first-series data point (y follows the line);\n   * free mode keeps the raw point.\n   * @param {{x:number,y:number,gx:number,gy:number}} raw\n   */\n  _resolve(raw) {\n    if (this._mode() === \"free\") return raw;\n    const snapped = this._snapToSeries(raw.x);\n    if (!snapped) return raw;\n    const g = this._dataToGrid(snapped.x, snapped.y);\n    return { x: snapped.x, y: snapped.y, gx: g.gx, gy: g.gy };\n  }\n  _doc() {\n    return this.w.dom.baseEl && this.w.dom.baseEl.ownerDocument;\n  }\n  /** Bind the measure-key listeners once on the owner document. */\n  _bindKeys() {\n    if (this._keysBound) return;\n    const doc = this._doc();\n    if (!doc) return;\n    doc.addEventListener(\"keydown\", this._onKeyDown);\n    doc.addEventListener(\"keyup\", this._onKeyUp);\n    this._keysBound = true;\n  }\n  /** @param {any} e */\n  _onKeyDown(e) {\n    if (!this._enabled() || this.persistent) return;\n    const key = this._cfg().key || \"m\";\n    if (e.key && e.key.toLowerCase() === String(key).toLowerCase()) {\n      this._arm();\n    } else if (e.key === \"Escape\") {\n      this._cancelDrag();\n    }\n  }\n  /** @param {any} e */\n  _onKeyUp(e) {\n    if (this.persistent) return;\n    const key = this._cfg().key || \"m\";\n    if (e.key && e.key.toLowerCase() === String(key).toLowerCase()) {\n      if (!this.drag) this._disarm();\n    }\n  }\n  /** Public: arm a sticky measure mode (survives key release) until stopped. */\n  startMeasure() {\n    if (!this._enabled()) return;\n    this.persistent = true;\n    this._arm();\n  }\n  /** Public: leave measure mode. */\n  stopMeasure() {\n    this.persistent = false;\n    this._cancelDrag();\n    this._disarm();\n  }\n  /**\n   * Public: begin a measurement anchored at a client-space point (used by the\n   * context menu's \"Measure from here\"). Endpoint A is fixed at (cx,cy), the\n   * ruler follows the cursor, and the next pointer press sets B and pins it.\n   * Escape cancels. No-op unless the measure tool is enabled.\n   * @param {number} cx @param {number} cy\n   */\n  seedFromClient(cx, cy) {\n    if (!this._enabled()) return;\n    this._cancelDrag();\n    this._endSeed(false);\n    const a = this._project(cx, cy);\n    this.drag = { a, b: a };\n    this._seedActive = true;\n    const doc = this._doc();\n    if (doc) {\n      doc.addEventListener(\"mousemove\", this._onMove);\n      doc.addEventListener(\"touchmove\", this._onMove, { passive: false });\n      doc.addEventListener(\"mousedown\", this._onSeedDown, true);\n      doc.addEventListener(\"touchstart\", this._onSeedDown, true);\n      doc.addEventListener(\"keydown\", this._onSeedKey, true);\n    }\n    this._renderLive();\n  }\n  /** @param {any} e */\n  _onSeedDown(e) {\n    if (!this._seedActive || !this.drag) return;\n    e.preventDefault();\n    e.stopPropagation();\n    const { cx, cy } = this._clientXY(e);\n    this.drag.b = this._project(cx, cy);\n    this._endSeed(true);\n  }\n  /** @param {any} e */\n  _onSeedKey(e) {\n    if (e.key === \"Escape\") this._endSeed(false);\n  }\n  /**\n   * Finish (commit) or cancel a \"measure from here\" seed and detach listeners.\n   * @param {boolean} commit\n   */\n  _endSeed(commit) {\n    var _a, _b;\n    if (!this._seedActive) return;\n    this._seedActive = false;\n    const doc = this._doc();\n    if (doc) {\n      doc.removeEventListener(\"mousemove\", this._onMove);\n      doc.removeEventListener(\"touchmove\", this._onMove);\n      doc.removeEventListener(\"mousedown\", this._onSeedDown, true);\n      doc.removeEventListener(\"touchstart\", this._onSeedDown, true);\n      doc.removeEventListener(\"keydown\", this._onSeedKey, true);\n    }\n    const d = this.drag;\n    this.drag = null;\n    this._clearLive();\n    if (!commit || !d) return;\n    const a = this._resolve(d.a);\n    const b = this._resolve(d.b);\n    if (Math.abs(a.gx - b.gx) < 2 && Math.abs(a.gy - b.gy) < 2) return;\n    const mode = this._mode();\n    if (this._cfg().pinOnRelease !== false) {\n      this.pins.push({ xa: a.x, ya: a.y, xb: b.x, yb: b.y, mode });\n      this._renderPins();\n      (_b = (_a = this.ctx.history) == null ? void 0 : _a.snapshot) == null ? void 0 : _b.call(_a, \"measure\");\n    }\n    this._fireMeasured(a, b);\n  }\n  /** Public: remove all pinned rulers. */\n  clearMeasures() {\n    var _a, _b;\n    this.pins = [];\n    this._renderPins();\n    (_b = (_a = this.ctx.history) == null ? void 0 : _a.snapshot) == null ? void 0 : _b.call(_a, \"clear measures\");\n  }\n  /**\n   * Snapshot of the pinned rulers as JSON-safe plain data. This is the piece of\n   * state ViewState / Perspectives (shareable URL) / Rewind (undo) persist:\n   * pins already live in data space, so they round-trip and re-project.\n   * Returns a deep copy so callers cannot mutate ours.\n   * @returns {Array<{xa:number,ya:number,xb:number,yb:number,mode:string}>}\n   */\n  getPins() {\n    return this.pins.map((p) => ({\n      xa: p.xa,\n      ya: p.ya,\n      xb: p.xb,\n      yb: p.yb,\n      mode: p.mode === \"free\" ? \"free\" : \"span\"\n    }));\n  }\n  /**\n   * Replace the pinned rulers with a restored set and redraw. Accepts the shape\n   * getPins() returns; a nullish / non-array value (or an old token without\n   * measure state) clears all pins. Non-finite entries are dropped. Does NOT\n   * record a Rewind step (the restore itself is the caller's undo boundary).\n   * @param {any} pins\n   */\n  setPins(pins) {\n    this.pins = Array.isArray(pins) ? pins.filter(\n      (p) => p && isFinite(p.xa) && isFinite(p.ya) && isFinite(p.xb) && isFinite(p.yb)\n    ).map((p) => ({\n      xa: +p.xa,\n      ya: +p.ya,\n      xb: +p.xb,\n      yb: +p.yb,\n      mode: p.mode === \"free\" ? \"free\" : \"span\"\n    })) : [];\n    this._renderPins();\n  }\n  /**\n   * Normalize a series `data` array into {x,y} points (numeric/datetime x or\n   * category index). Non-finite / non-scalar (range/candle) points drop out.\n   * @param {any[]} data\n   * @returns {Array<{x:number,y:number}>}\n   */\n  _points(data) {\n    const out = [];\n    for (let i = 0; i < data.length; i++) {\n      const p = data[i];\n      let x;\n      let y;\n      if (Array.isArray(p)) {\n        x = +p[0];\n        y = +p[1];\n      } else if (p && typeof p === \"object\") {\n        x = +p.x;\n        y = +p.y;\n      } else {\n        x = i;\n        y = +p;\n      }\n      if (isFinite(x) && isFinite(y)) out.push({ x, y });\n    }\n    return out;\n  }\n  /** Lay the transparent capture pane over the plot so our pointer handlers own\n   *  the drag (ZoomPanSelection never sees it). */\n  _arm() {\n    if (this.armed || !this._enabled()) return;\n    const w = this.w;\n    const parent = w.dom.elGraphical;\n    if (!parent) return;\n    this.armed = true;\n    const pane = this.graphics.drawRect(0, 0, w.layout.gridWidth, w.layout.gridHeight);\n    pane.node.setAttribute(\"class\", \"apexcharts-measure-capture\");\n    pane.node.setAttribute(\"fill\", \"transparent\");\n    pane.node.style.cursor = \"crosshair\";\n    pane.node.style.pointerEvents = \"all\";\n    pane.node.addEventListener(\"mousedown\", this._onDown);\n    pane.node.addEventListener(\"touchstart\", this._onDown, { passive: false });\n    parent.add(pane);\n    this.pane = pane;\n  }\n  _disarm() {\n    this.armed = false;\n    if (this.pane) {\n      this.pane.node.removeEventListener(\"mousedown\", this._onDown);\n      this.pane.node.removeEventListener(\"touchstart\", this._onDown);\n      const p = this.pane.node;\n      if (p.parentNode) p.parentNode.removeChild(p);\n      this.pane = null;\n    }\n  }\n  /** @param {any} e @returns {{cx:number,cy:number}} */\n  _clientXY(e) {\n    const t = e.touches && e.touches[0] ? e.touches[0] : e;\n    return { cx: t.clientX, cy: t.clientY };\n  }\n  _gridRect() {\n    const g = this.w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    return g ? g.getBoundingClientRect() : null;\n  }\n  /** [min,max] for the primary y-axis, preferring the rendered nice scale. */\n  _yRange() {\n    const g = this.w.globals;\n    const s = g.yAxisScale && g.yAxisScale[0];\n    if (s && isFinite(s.niceMin) && isFinite(s.niceMax) && s.niceMax !== s.niceMin) {\n      return [s.niceMin, s.niceMax];\n    }\n    return [g.minY, g.maxY];\n  }\n  /**\n   * Client pixel -> { x, y (data), gx, gy (grid-local SVG units) }.\n   * @param {number} cx @param {number} cy\n   */\n  _project(cx, cy) {\n    const w = this.w;\n    const rect = this._gridRect();\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const clamp = (v) => v < 0 ? 0 : v > 1 ? 1 : v;\n    const fx = rect ? clamp((cx - rect.left) / rect.width) : 0;\n    const fy = rect ? clamp((cy - rect.top) / rect.height) : 0;\n    const [ymin, ymax] = this._yRange();\n    const x = w.globals.minX + fx * (w.globals.maxX - w.globals.minX);\n    const y = ymax - fy * (ymax - ymin);\n    return { x, y, gx: fx * gw, gy: fy * gh };\n  }\n  /**\n   * Data (x,y) -> grid-local SVG coords, for redrawing pinned rulers.\n   * @param {number} x @param {number} y\n   */\n  _dataToGrid(x, y) {\n    const w = this.w;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const xr = w.globals.maxX - w.globals.minX || 1;\n    const [ymin, ymax] = this._yRange();\n    const yr = ymax - ymin || 1;\n    return {\n      gx: (x - w.globals.minX) / xr * gw,\n      gy: gh - (y - ymin) / yr * gh\n    };\n  }\n  /** @param {any} e */\n  _onDown(e) {\n    if (!this.armed) return;\n    e.preventDefault();\n    e.stopPropagation();\n    const { cx, cy } = this._clientXY(e);\n    const a = this._project(cx, cy);\n    this.drag = { a, b: a };\n    const doc = this._doc();\n    if (doc) {\n      doc.addEventListener(\"mousemove\", this._onMove);\n      doc.addEventListener(\"mouseup\", this._onUp);\n      doc.addEventListener(\"touchmove\", this._onMove, { passive: false });\n      doc.addEventListener(\"touchend\", this._onUp);\n    }\n    this._renderLive();\n  }\n  /** @param {any} e */\n  _onMove(e) {\n    if (!this.drag) return;\n    if (e.cancelable) e.preventDefault();\n    const { cx, cy } = this._clientXY(e);\n    this.drag.b = this._project(cx, cy);\n    this._renderLive();\n  }\n  /** @param {any} _e */\n  _onUp(_e) {\n    var _a, _b;\n    const doc = this._doc();\n    if (doc) {\n      doc.removeEventListener(\"mousemove\", this._onMove);\n      doc.removeEventListener(\"mouseup\", this._onUp);\n      doc.removeEventListener(\"touchmove\", this._onMove);\n      doc.removeEventListener(\"touchend\", this._onUp);\n    }\n    if (!this.drag) return;\n    const rawA = this.drag.a;\n    const rawB = this.drag.b;\n    this.drag = null;\n    this._clearLive();\n    if (Math.abs(rawA.gx - rawB.gx) < 2 && Math.abs(rawA.gy - rawB.gy) < 2) {\n      if (!this.persistent) this._disarm();\n      return;\n    }\n    const mode = this._mode();\n    const a = this._resolve(rawA);\n    const b = this._resolve(rawB);\n    if (this._cfg().pinOnRelease !== false) {\n      this.pins.push({ xa: a.x, ya: a.y, xb: b.x, yb: b.y, mode });\n      this._renderPins();\n      (_b = (_a = this.ctx.history) == null ? void 0 : _a.snapshot) == null ? void 0 : _b.call(_a, \"measure\");\n    }\n    this._fireMeasured(a, b);\n    if (!this.persistent) this._disarm();\n  }\n  _cancelDrag() {\n    const doc = this._doc();\n    if (doc) {\n      doc.removeEventListener(\"mousemove\", this._onMove);\n      doc.removeEventListener(\"mouseup\", this._onUp);\n      doc.removeEventListener(\"touchmove\", this._onMove);\n      doc.removeEventListener(\"touchend\", this._onUp);\n    }\n    this.drag = null;\n    this._clearLive();\n  }\n  /**\n   * @param {{x:number,y:number}} a @param {{x:number,y:number}} b\n   * @returns {{dx:number,dy:number,pct:number,slope:number}}\n   */\n  _stats(a, b) {\n    const dx = b.x - a.x;\n    const dy = b.y - a.y;\n    return {\n      dx,\n      dy,\n      pct: a.y !== 0 ? dy / Math.abs(a.y) * 100 : NaN,\n      slope: dx !== 0 ? dy / dx : NaN\n    };\n  }\n  /** @param {number} v */\n  _fmt(v) {\n    if (!isFinite(v)) return \"n/a\";\n    const a = Math.abs(v);\n    if (a !== 0 && (a < 0.01 || a >= 1e6)) return v.toExponential(2);\n    return String(Math.round(v * 100) / 100);\n  }\n  /** getComputedStyle of the graphical layer (browser only), for CSS vars. */\n  _computedStyle() {\n    if (!Environment.isBrowser()) return null;\n    const node = this.w.dom.elGraphical && this.w.dom.elGraphical.node;\n    if (!node || typeof getComputedStyle !== \"function\") return null;\n    try {\n      return getComputedStyle(node);\n    } catch (e) {\n      return null;\n    }\n  }\n  /**\n   * Resolve a color: explicit config value, else a `--apx-measure-*` CSS custom\n   * property, else the built-in default.\n   * @param {any} cfgVal @param {string} varName @param {string} fallback\n   * @param {CSSStyleDeclaration|null} [cs]\n   */\n  _resolveColor(cfgVal, varName, fallback, cs) {\n    if (cfgVal) return cfgVal;\n    const style = cs !== void 0 ? cs : this._computedStyle();\n    const v = style ? style.getPropertyValue(varName).trim() : \"\";\n    return v || fallback;\n  }\n  /** Resolved semantic colors (config -> CSS var -> built-in default). */\n  _colors() {\n    const c = this._cfg().colors || {};\n    const cs = this._computedStyle();\n    return {\n      up: this._resolveColor(c.up, \"--apx-measure-up\", \"#16a34a\", cs),\n      down: this._resolveColor(c.down, \"--apx-measure-down\", \"#dc2626\", cs),\n      neutral: this._resolveColor(c.neutral, \"--apx-measure-neutral\", \"#64748b\", cs),\n      guide: this._resolveColor(c.guide, \"--apx-measure-guide\", \"#94a3b8\", cs)\n    };\n  }\n  /** @param {number} dy */\n  _dirColor(dy) {\n    const c = this._colors();\n    return dy === 0 ? c.neutral : dy > 0 ? c.up : c.down;\n  }\n  /** @param {number} dy */\n  _dirClass(dy) {\n    return dy === 0 ? \"apexcharts-measure-flat\" : dy > 0 ? \"apexcharts-measure-up\" : \"apexcharts-measure-down\";\n  }\n  /**\n   * Format a percentage, via `measure.format.percent` when set.\n   * @param {number} p\n   */\n  _fmtPct(p) {\n    if (!isFinite(p)) return \"n/a\";\n    const f = this._cfg().format && this._cfg().format.percent;\n    if (typeof f === \"function\") {\n      try {\n        const s = f(p);\n        if (s != null) return String(s);\n      } catch (e) {\n      }\n    }\n    return (p >= 0 ? \"+\" : \"\") + this._fmt(p) + \"%\";\n  }\n  /**\n   * The readout lines for a ruler: `measure.label` override, else the default\n   * per-mode text.\n   * @param {{x:number,y:number}} a @param {{x:number,y:number}} b\n   * @param {{dx:number,dy:number,pct:number,slope:number}} st @param {string} mode\n   * @returns {string[]}\n   */\n  _label(a, b, st, mode) {\n    const fn = this._cfg().label;\n    if (typeof fn === \"function\") {\n      const out = fn({\n        from: { x: a.x, y: a.y },\n        to: { x: b.x, y: b.y },\n        dx: st.dx,\n        dy: st.dy,\n        percentChange: st.pct,\n        slope: st.slope,\n        mode\n      });\n      return Array.isArray(out) ? out.map(String) : [String(out)];\n    }\n    if (mode === \"span\") {\n      const arrow = st.dy === 0 ? \"\" : st.dy > 0 ? \" ↑\" : \" ↓\";\n      const pct = isFinite(st.pct) ? \"(\" + this._fmtPct(st.pct) + \")\" : \"\";\n      return [this._fmtY(st.dy) + \"  \" + pct + arrow, this._fmtX(a.x) + \"  to  \" + this._fmtX(b.x)];\n    }\n    return [\"Δx \" + this._fmtDx(st.dx), \"Δy \" + this._fmtY(st.dy), this._fmtPct(st.pct)];\n  }\n  /**\n   * Format an x delta, treating datetime x as a day count.\n   * @param {number} dx\n   */\n  _fmtDx(dx) {\n    if (this.w.config.xaxis.type === \"datetime\") {\n      const days = dx / 864e5;\n      return Math.round(days * 10) / 10 + \"d\";\n    }\n    return this._fmt(dx);\n  }\n  /**\n   * Format a y value (a delta) via the y-axis label formatter when present.\n   * @param {number} v\n   */\n  _fmtY(v) {\n    const cf = this._cfg().format && this._cfg().format.y;\n    if (typeof cf === \"function\") {\n      try {\n        const s = cf(v);\n        if (s != null) return String(s);\n      } catch (e) {\n      }\n    }\n    const f = this.w.globals.yLabelFormatters && this.w.globals.yLabelFormatters[0];\n    if (typeof f === \"function\") {\n      try {\n        const s = f(v, { seriesIndex: 0, dataPointIndex: -1, w: this.w });\n        if (s != null && s !== \"\") return String(s);\n      } catch (e) {\n      }\n    }\n    return this._fmt(v);\n  }\n  /**\n   * Format an x value: a short date for datetime x, else the x-label formatter\n   * or a plain number.\n   * @param {number} x\n   */\n  _fmtX(x) {\n    const w = this.w;\n    const cf = this._cfg().format && this._cfg().format.x;\n    if (typeof cf === \"function\") {\n      try {\n        const s = cf(x);\n        if (s != null) return String(s);\n      } catch (e) {\n      }\n    }\n    if (w.config.xaxis.type === \"datetime\") {\n      const d = new Date(x);\n      return d.toLocaleDateString(void 0, {\n        day: \"numeric\",\n        month: \"short\",\n        year: \"numeric\"\n      });\n    }\n    const f = w.globals.xLabelFormatter;\n    if (typeof f === \"function\") {\n      try {\n        const s = f(x, { w });\n        if (s != null && s !== \"\") return String(s);\n      } catch (e) {\n      }\n    }\n    return this._fmt(x);\n  }\n  /** The live overlay group, created lazily inside elGraphical. */\n  _liveGroup() {\n    const w = this.w;\n    if (this._live && this._live.node && this._live.node.parentNode) {\n      return this._live;\n    }\n    const g = this.graphics.group({ class: \"apexcharts-measure-live\" });\n    g.node.style.pointerEvents = \"none\";\n    if (w.dom.elGraphical) w.dom.elGraphical.add(g);\n    this._live = g;\n    return g;\n  }\n  _clearLive() {\n    if (this._live && this._live.node) {\n      const n = this._live.node;\n      if (n.parentNode) n.parentNode.removeChild(n);\n    }\n    this._live = null;\n  }\n  _renderLive() {\n    if (!this.drag) return;\n    const g = this._liveGroup();\n    while (g.node.firstChild) g.node.removeChild(g.node.firstChild);\n    const a = this._resolve(this.drag.a);\n    const b = this._resolve(this.drag.b);\n    this._drawRuler(g, a, b, false, this._mode());\n  }\n  /** Redraw all pinned rulers into a fresh group (called after each render). */\n  _renderPins() {\n    const w = this.w;\n    const old = w.dom.baseEl && w.dom.baseEl.querySelector(\".apexcharts-measure-pins\");\n    if (old && old.parentNode) old.parentNode.removeChild(old);\n    if (!this.pins.length || !w.dom.elGraphical) return;\n    const g = this.graphics.group({ class: \"apexcharts-measure-pins\" });\n    g.node.style.pointerEvents = \"none\";\n    w.dom.elGraphical.add(g);\n    this.pins.forEach((p) => {\n      const a = __spreadProps(__spreadValues({}, this._dataToGrid(p.xa, p.ya)), { x: p.xa, y: p.ya });\n      const b = __spreadProps(__spreadValues({}, this._dataToGrid(p.xb, p.yb)), { x: p.xb, y: p.yb });\n      this._drawRuler(g, a, b, true, p.mode || \"span\");\n    });\n  }\n  /**\n   * Draw one ruler into `g`, dispatching on style.\n   * @param {any} g\n   * @param {{gx:number,gy:number,x:number,y:number}} a\n   * @param {{gx:number,gy:number,x:number,y:number}} b\n   * @param {boolean} [pinned]\n   * @param {string} [mode] 'span' (finance-style band, default) | 'free'\n   */\n  _drawRuler(g, a, b, pinned, mode) {\n    const st = this._stats(a, b);\n    const rg = this.graphics.group({\n      class: \"apexcharts-measure-ruler \" + this._dirClass(st.dy) + (pinned ? \" apexcharts-measure-pinned\" : \"\")\n    });\n    if ((mode || this._mode()) === \"free\") this._drawFree(rg, a, b, st);\n    else this._drawSpan(rg, a, b, st);\n    g.add(rg);\n  }\n  /** Endpoint dots on the series line (skipped when markers:false).\n   * @param {any} g @param {{gx:number,gy:number}} p @param {string} color */\n  _dot(g, p, color) {\n    if (this._cfg().markers === false) return;\n    const dot = this.graphics.drawMarker(p.gx, p.gy, {\n      pSize: 4,\n      shape: \"circle\",\n      pointFillColor: color,\n      pointFillOpacity: 1,\n      pointStrokeColor: \"#fff\",\n      pointStrokeWidth: 2,\n      pointStrokeOpacity: 1\n    });\n    g.add(dot);\n  }\n  /** Draw the readout label box + text into `g` at (bx,by).\n   * @param {any} g @param {string[]} lines @param {number} bx @param {number} by\n   * @param {number} boxW @param {number} boxH @param {string} color */\n  _readout(g, lines, bx, by, boxW, boxH, color) {\n    const box = this.graphics.drawRect(bx, by, boxW, boxH, 4);\n    box.node.setAttribute(\"class\", \"apexcharts-measure-label-bg\");\n    box.attr({ fill: \"#ffffff\", \"fill-opacity\": 0.95, stroke: color, \"stroke-width\": 1 });\n    g.add(box);\n    const label = this.graphics.drawText({\n      x: bx + 9,\n      y: by + 15,\n      text: lines,\n      textAnchor: \"start\",\n      fontSize: \"11px\",\n      foreColor: \"#1e293b\",\n      cssClass: \"apexcharts-measure-label\"\n    });\n    g.add(label);\n  }\n  /**\n   * Finance-style ruler: vertical guides + shaded band + endpoints on the\n   * series line + a top readout. Guides/band/markers are individually\n   * toggleable via config.\n   * @param {any} g\n   * @param {{gx:number,gy:number,x:number,y:number}} a\n   * @param {{gx:number,gy:number,x:number,y:number}} b\n   * @param {{dx:number,dy:number,pct:number,slope:number}} st\n   */\n  _drawSpan(g, a, b, st) {\n    const w = this.w;\n    const cfg = this._cfg();\n    const gh = w.layout.gridHeight;\n    const color = this._dirColor(st.dy);\n    const lx = Math.min(a.gx, b.gx);\n    const rx = Math.max(a.gx, b.gx);\n    if (cfg.band !== false) {\n      const band = this.graphics.drawRect(lx, 0, Math.max(0, rx - lx), gh, 0);\n      band.node.setAttribute(\"class\", \"apexcharts-measure-band\");\n      band.attr({ fill: color, \"fill-opacity\": 0.09, stroke: \"none\" });\n      g.add(band);\n    }\n    if (cfg.guides !== false) {\n      [a, b].forEach((p) => {\n        const vline = this.graphics.drawLine(p.gx, 0, p.gx, gh, this._colors().guide, 4, 1);\n        vline.node.setAttribute(\"class\", \"apexcharts-measure-vline\");\n        g.add(vline);\n      });\n    }\n    [a, b].forEach((p) => this._dot(g, p, color));\n    const lines = this._label(a, b, st, \"span\");\n    const longest = lines.reduce((m, s) => Math.max(m, s.length), 0);\n    const boxW = Math.max(148, longest * 6.4);\n    const boxH = 20 + lines.length * 15;\n    let bx = (lx + rx) / 2 - boxW / 2;\n    bx = Math.max(2, Math.min(bx, w.layout.gridWidth - boxW - 2));\n    this._readout(g, lines, bx, 4, boxW, boxH, color);\n  }\n  /**\n   * Free 2D ruler: a diagonal line between two arbitrary points + a readout.\n   * @param {any} g\n   * @param {{gx:number,gy:number,x:number,y:number}} a\n   * @param {{gx:number,gy:number,x:number,y:number}} b\n   * @param {{dx:number,dy:number,pct:number,slope:number}} st\n   */\n  _drawFree(g, a, b, st) {\n    const color = this._dirColor(st.dy);\n    const line = this.graphics.drawLine(a.gx, a.gy, b.gx, b.gy, color, 0, 2);\n    line.node.setAttribute(\"class\", \"apexcharts-measure-line\");\n    g.add(line);\n    [a, b].forEach((p) => this._dot(g, p, color));\n    const lines = this._label(a, b, st, \"free\");\n    const longest = lines.reduce((m, s) => Math.max(m, s.length), 0);\n    const boxW = Math.max(72, longest * 6.2);\n    const boxH = 16 + lines.length * 15;\n    let bx = (a.gx + b.gx) / 2 + 8;\n    let by = (a.gy + b.gy) / 2 - boxH / 2;\n    bx = Math.max(2, Math.min(bx, this.w.layout.gridWidth - boxW - 2));\n    by = Math.max(2, Math.min(by, this.w.layout.gridHeight - boxH - 2));\n    this._readout(g, lines, bx, by, boxW, boxH, color);\n  }\n  /**\n   * @param {{x:number,y:number}} a @param {{x:number,y:number}} b\n   */\n  _fireMeasured(a, b) {\n    const st = this._stats(a, b);\n    const payload = {\n      from: { x: a.x, y: a.y },\n      to: { x: b.x, y: b.y },\n      dx: st.dx,\n      dy: st.dy,\n      percentChange: st.pct,\n      slope: st.slope\n    };\n    const fn = this.w.config.chart.events.measured;\n    if (typeof fn === \"function\") fn(this.ctx, payload);\n    this.ctx.events.fireEvent(\"measured\", [this.ctx, payload]);\n  }\n  /** Re-project the measure pins after each render. */\n  _afterRender() {\n    if (!this._enabled()) return;\n    if (this.w.interact.measureEnabled && !this.persistent) {\n      this.persistent = true;\n    }\n    if (this.pins.length) this._renderPins();\n    if (this.persistent && !this.drag) {\n      this._disarm();\n      this._arm();\n    }\n  }\n  teardown() {\n    this._cancelDrag();\n    this._endSeed(false);\n    this._disarm();\n    const doc = this._doc();\n    if (doc && this._keysBound) {\n      doc.removeEventListener(\"keydown\", this._onKeyDown);\n      doc.removeEventListener(\"keyup\", this._onKeyUp);\n    }\n    this._keysBound = false;\n    this.pins = [];\n  }\n}\nApexCharts.registerFeatures({ measure: Measure });\nclass ContextMenu {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.menu = null;\n    this._items = [];\n    this._focusIndex = -1;\n    this._trigger = null;\n    this._onContext = this._onContext.bind(this);\n    this._onDocDown = this._onDocDown.bind(this);\n    this._onKey = this._onKey.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    ctx.addEventListener(\"mounted\", this._afterRender);\n    ctx.addEventListener(\"updated\", this._afterRender);\n  }\n  _cfg() {\n    return this.w.config.chart.contextMenu || {};\n  }\n  _enabled() {\n    return this._cfg().enabled === true;\n  }\n  _doc() {\n    return this.w.dom.baseEl && this.w.dom.baseEl.ownerDocument;\n  }\n  /** (Re)attach the contextmenu trigger to the freshly (re)built SVG. */\n  _afterRender() {\n    this._detachTrigger();\n    this.close();\n    if (!this._enabled() || !Environment.isBrowser()) return;\n    const svg = this.w.dom.Paper && this.w.dom.Paper.node;\n    if (!svg) return;\n    svg.addEventListener(\"contextmenu\", this._onContext);\n    this._trigger = svg;\n  }\n  _detachTrigger() {\n    if (this._trigger) {\n      this._trigger.removeEventListener(\"contextmenu\", this._onContext);\n      this._trigger = null;\n    }\n  }\n  /** @param {any} e */\n  _onContext(e) {\n    if (!this._enabled()) return;\n    e.preventDefault();\n    this.open(e.clientX, e.clientY);\n  }\n  /**\n   * Client pixel -> data {x,y} via the grid client-rect fraction (scale\n   * independent). Null when the grid is not measurable.\n   * @param {number} cx @param {number} cy\n   * @returns {{x:number,y:number}|null}\n   */\n  _clientToData(cx, cy) {\n    const w = this.w;\n    const grid = w.dom.baseEl && w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!grid) return null;\n    const r = grid.getBoundingClientRect();\n    if (!r.width || !r.height) return null;\n    const clamp = (v) => v < 0 ? 0 : v > 1 ? 1 : v;\n    const fx = clamp((cx - r.left) / r.width);\n    const fy = clamp((cy - r.top) / r.height);\n    const x = w.globals.minX + fx * (w.globals.maxX - w.globals.minX);\n    const s = w.globals.yAxisScale && w.globals.yAxisScale[0];\n    const ymin = s && isFinite(s.niceMin) ? s.niceMin : w.globals.minY;\n    const ymax = s && isFinite(s.niceMax) ? s.niceMax : w.globals.maxY;\n    const y = ymax - fy * (ymax - ymin);\n    return { x, y };\n  }\n  /**\n   * Resolve the configured items into runnable entries, dropping built-ins\n   * whose dependency is absent (e.g. measure not enabled).\n   * @param {any} context\n   * @returns {Array<{id:string,label:string,run:Function}>}\n   */\n  _resolveItems(context) {\n    const cfg = this._cfg();\n    const raw = Array.isArray(cfg.items) && cfg.items.length ? cfg.items : [\"annotate\", \"xline\", \"yline\", \"measure\"];\n    const labels = cfg.labels || {};\n    const out = [];\n    raw.forEach((it) => {\n      if (typeof it === \"string\") {\n        if (it === \"annotate\") {\n          out.push({\n            id: \"annotate\",\n            label: labels.annotate || \"Add note here\",\n            run: () => this._annotate(context)\n          });\n        } else if (it === \"xline\") {\n          out.push({\n            id: \"xline\",\n            label: labels.xline || \"Annotate here\",\n            run: () => this._line(context, \"x\")\n          });\n        } else if (it === \"yline\") {\n          out.push({\n            id: \"yline\",\n            label: labels.yline || \"Mark this level\",\n            run: () => this._line(context, \"y\")\n          });\n        } else if (it === \"measure\") {\n          const m = this.ctx.measure;\n          const on = m && this.w.config.chart.measure && this.w.config.chart.measure.enabled;\n          if (on) {\n            out.push({\n              id: \"measure\",\n              label: labels.measure || \"Measure from here\",\n              run: () => m.seedFromClient(context.clientX, context.clientY)\n            });\n          }\n        }\n      } else if (it && typeof it === \"object\" && typeof it.onClick === \"function\") {\n        out.push({\n          id: it.id || \"custom\",\n          label: it.label || \"Action\",\n          run: () => it.onClick(this.ctx, context)\n        });\n      }\n    });\n    return out;\n  }\n  /** @param {any} context */\n  _annotate(context) {\n    if (context.x == null || context.y == null) return;\n    const cfg = this._cfg();\n    const ink = this.ctx.ink;\n    if (ink && typeof ink.createAt === \"function\") {\n      ink.createAt(context.x, context.y, { text: cfg.noteText || \"Note\" });\n      return;\n    }\n    this.ctx.addPointAnnotation(\n      {\n        x: context.x,\n        y: context.y,\n        marker: { size: 5 },\n        label: {\n          text: cfg.noteText || \"Note\",\n          style: { background: \"#fff\", color: \"#334155\" }\n        }\n      },\n      true\n    );\n  }\n  /**\n   * The 'xline' / 'yline' items: drop a dashed line annotation at the clicked\n   * data point ('x' = vertical line at the clicked x, 'y' = horizontal line\n   * at the clicked y). Lines only: no x2/y2 is ever set, so this never\n   * creates a range rectangle. Both items share chart.contextMenu.line\n   * ({ text, strokeDashArray, color }) for styling.\n   * @param {any} context @param {'x'|'y'} axis\n   */\n  _line(context, axis) {\n    const lc = this._cfg().line || {};\n    const val = axis === \"x\" ? context.x : context.y;\n    if (val == null) return;\n    const ink = this.ctx.ink;\n    if (ink && typeof ink.createLineAt === \"function\") {\n      ink.createLineAt(axis, val, {\n        text: lc.text,\n        strokeDashArray: lc.strokeDashArray,\n        color: lc.color\n      });\n      return;\n    }\n    const anno = {\n      strokeDashArray: lc.strokeDashArray != null ? lc.strokeDashArray : 4\n    };\n    if (lc.text) anno.label = { text: lc.text };\n    if (lc.color) {\n      anno.borderColor = lc.color;\n      anno.label = Utils$1.extend(anno.label || {}, { borderColor: lc.color });\n    }\n    if (axis === \"x\") {\n      this.ctx.addXaxisAnnotation(Utils$1.extend(anno, { x: val }), true);\n    } else {\n      this.ctx.addYaxisAnnotation(Utils$1.extend(anno, { y: val }), true);\n    }\n  }\n  /**\n   * Open the menu at a client-space point.\n   * @param {number} clientX @param {number} clientY\n   */\n  open(clientX, clientY) {\n    this.close();\n    const w = this.w;\n    const elWrap = w.dom.elWrap;\n    const doc = this._doc();\n    if (!elWrap || !doc) return;\n    const data = this._clientToData(clientX, clientY);\n    const g = w.globals;\n    const context = {\n      x: data ? data.x : null,\n      y: data ? data.y : null,\n      seriesIndex: g.capturedSeriesIndex >= 0 ? g.capturedSeriesIndex : null,\n      dataPointIndex: g.capturedDataPointIndex >= 0 ? g.capturedDataPointIndex : null,\n      clientX,\n      clientY\n    };\n    const items = this._resolveItems(context);\n    if (!items.length) return;\n    this._items = items;\n    const menu = doc.createElement(\"div\");\n    menu.className = \"apexcharts-context-menu\";\n    menu.setAttribute(\"role\", \"menu\");\n    menu.style.position = \"absolute\";\n    menu.style.visibility = \"hidden\";\n    items.forEach((it, i) => {\n      const btn = doc.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"apexcharts-context-menu-item\";\n      btn.setAttribute(\"role\", \"menuitem\");\n      btn.tabIndex = -1;\n      btn.textContent = it.label;\n      btn.addEventListener(\"click\", (ev) => {\n        ev.stopPropagation();\n        this._activate(i);\n      });\n      btn.addEventListener(\"mouseenter\", () => this._focus(i));\n      menu.appendChild(btn);\n    });\n    elWrap.appendChild(menu);\n    this.menu = menu;\n    const wrapRect = elWrap.getBoundingClientRect();\n    let left = clientX - wrapRect.left;\n    let top = clientY - wrapRect.top;\n    const mw = menu.offsetWidth;\n    const mh = menu.offsetHeight;\n    const maxLeft = Math.max(0, elWrap.clientWidth - mw);\n    const maxTop = Math.max(0, elWrap.clientHeight - mh);\n    if (left > maxLeft) left = maxLeft;\n    if (top > maxTop) top = maxTop;\n    menu.style.left = Math.max(0, left) + \"px\";\n    menu.style.top = Math.max(0, top) + \"px\";\n    menu.style.visibility = \"visible\";\n    doc.addEventListener(\"mousedown\", this._onDocDown, true);\n    doc.addEventListener(\"keydown\", this._onKey, true);\n    this._focus(0);\n  }\n  /** @param {number} i */\n  _focus(i) {\n    if (!this.menu) return;\n    const btns = this.menu.querySelectorAll(\".apexcharts-context-menu-item\");\n    if (this._focusIndex >= 0 && btns[this._focusIndex]) {\n      btns[this._focusIndex].classList.remove(\"apexcharts-context-menu-item--active\");\n    }\n    this._focusIndex = i;\n    if (btns[i]) {\n      btns[i].classList.add(\"apexcharts-context-menu-item--active\");\n      if (typeof btns[i].focus === \"function\") btns[i].focus();\n    }\n  }\n  /** @param {number} i */\n  _activate(i) {\n    const it = this._items[i];\n    this.close();\n    if (it) it.run();\n  }\n  /** @param {any} e */\n  _onDocDown(e) {\n    if (this.menu && this.menu.contains(e.target)) return;\n    this.close();\n  }\n  /** @param {any} e */\n  _onKey(e) {\n    if (!this.menu || !this._items.length) return;\n    if (e.key === \"Escape\") {\n      e.preventDefault();\n      this.close();\n    } else if (e.key === \"ArrowDown\") {\n      e.preventDefault();\n      this._focus((this._focusIndex + 1) % this._items.length);\n    } else if (e.key === \"ArrowUp\") {\n      e.preventDefault();\n      this._focus((this._focusIndex - 1 + this._items.length) % this._items.length);\n    } else if (e.key === \"Enter\" || e.key === \" \") {\n      e.preventDefault();\n      this._activate(this._focusIndex < 0 ? 0 : this._focusIndex);\n    }\n  }\n  close() {\n    const doc = this._doc();\n    if (doc) {\n      doc.removeEventListener(\"mousedown\", this._onDocDown, true);\n      doc.removeEventListener(\"keydown\", this._onKey, true);\n    }\n    if (this.menu && this.menu.parentNode) {\n      this.menu.parentNode.removeChild(this.menu);\n    }\n    this.menu = null;\n    this._items = [];\n    this._focusIndex = -1;\n  }\n  teardown() {\n    this.close();\n    this._detachTrigger();\n  }\n}\nApexCharts.registerFeatures({ contextMenu: ContextMenu });\nclass BarDataLabels {\n  /**\n   * @param {import('../../../charts/Bar').default} barCtx\n   */\n  constructor(barCtx) {\n    this.w = barCtx.w;\n    this.barCtx = barCtx;\n    this.totalFormatter = this.w.config.plotOptions.bar.dataLabels.total.formatter;\n    if (!this.totalFormatter) {\n      this.totalFormatter = this.w.config.dataLabels.formatter;\n    }\n  }\n  /** handleBarDataLabels is used to calculate the positions for the data-labels\n   * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels()\n   * After calculating, it also calls the function to draw data labels\n   * @memberof Bar\n   * @param {Record<string, any>} opts - bar properties used throughout the bar drawing function\n   * @return {object} dataLabels node-element which you can append later\n   **/\n  handleBarDataLabels(opts) {\n    const {\n      x,\n      y,\n      y1,\n      y2,\n      i,\n      j,\n      realIndex,\n      columnGroupIndex,\n      series,\n      barHeight,\n      barWidth,\n      barXPosition,\n      barYPosition,\n      visibleSeries\n    } = opts;\n    const w = this.w;\n    const graphics = new Graphics(this.barCtx.w);\n    const strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth;\n    let bcx;\n    let bcy;\n    if (w.axisFlags.isXNumeric && !w.globals.isBarHorizontal) {\n      bcx = x + barWidth * (visibleSeries + 1);\n      bcy = y + barHeight * (visibleSeries + 1) - strokeWidth;\n    } else {\n      bcx = x + barWidth * visibleSeries;\n      bcy = y + barHeight * visibleSeries;\n    }\n    let dataLabels = null;\n    let totalDataLabels = null;\n    let dataLabelsX = x;\n    let dataLabelsY = y;\n    let dataLabelsPos = (\n      /** @type {any} */\n      {}\n    );\n    const dataLabelsConfig = w.config.dataLabels;\n    const barDataLabelsConfig = this.barCtx.barOptions.dataLabels;\n    const barTotalDataLabelsConfig = this.barCtx.barOptions.dataLabels.total;\n    if (typeof barYPosition !== \"undefined\" && (this.barCtx.isRangeBar || this.barCtx.isPyramid)) {\n      bcy = barYPosition;\n      dataLabelsY = barYPosition;\n    }\n    if (typeof barXPosition !== \"undefined\" && this.barCtx.isVerticalGroupedRangeBar) {\n      bcx = barXPosition;\n      dataLabelsX = barXPosition;\n    }\n    const offX = resolveDataLabelOffset(\n      dataLabelsConfig.offsetX,\n      w,\n      realIndex,\n      j\n    );\n    const offY = resolveDataLabelOffset(\n      dataLabelsConfig.offsetY,\n      w,\n      realIndex,\n      j\n    );\n    let textRects = {\n      width: 0,\n      height: 0\n    };\n    if (w.config.dataLabels.enabled) {\n      const yLabel = w.seriesData.series[realIndex][j];\n      textRects = graphics.getTextRects(\n        w.config.dataLabels.formatter ? w.config.dataLabels.formatter(yLabel, __spreadProps(__spreadValues({}, w), {\n          seriesIndex: realIndex,\n          dataPointIndex: j,\n          w\n        })) : w.formatters.yLabelFormatters[0](yLabel),\n        parseFloat(dataLabelsConfig.style.fontSize).toString()\n      );\n    }\n    const params = {\n      x,\n      y,\n      i,\n      j,\n      realIndex,\n      columnGroupIndex,\n      bcx,\n      bcy,\n      barHeight,\n      barWidth,\n      textRects,\n      strokeWidth,\n      dataLabelsX,\n      dataLabelsY,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      offX,\n      offY\n    };\n    if (this.barCtx.isHorizontal) {\n      dataLabelsPos = this.calculateBarsDataLabelsPosition(params);\n    } else {\n      dataLabelsPos = this.calculateColumnsDataLabelsPosition(params);\n    }\n    dataLabels = this.drawCalculatedDataLabels({\n      x: dataLabelsPos.dataLabelsX,\n      y: dataLabelsPos.dataLabelsY,\n      val: this.barCtx.isRangeBar ? [y1, y2] : w.config.chart.stackType === \"100%\" ? series[realIndex][j] : w.seriesData.series[realIndex][j],\n      i: realIndex,\n      j,\n      barWidth,\n      barHeight,\n      textRects,\n      dataLabelsConfig\n    });\n    if (w.config.chart.stacked && barTotalDataLabelsConfig.enabled) {\n      totalDataLabels = this.drawTotalDataLabels({\n        x: dataLabelsPos.totalDataLabelsX,\n        y: dataLabelsPos.totalDataLabelsY,\n        barWidth,\n        barHeight,\n        realIndex,\n        textAnchor: dataLabelsPos.totalDataLabelsAnchor,\n        val: this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig,\n        barTotalDataLabelsConfig\n      });\n    }\n    return {\n      dataLabelsPos,\n      dataLabels,\n      totalDataLabels\n    };\n  }\n  /** @param {{realIndex: any, j: any}} opts */\n  getStackedTotalDataLabel({ realIndex, j }) {\n    const w = this.w;\n    let val = this.barCtx.stackedSeriesTotals[j];\n    if (this.totalFormatter) {\n      val = this.totalFormatter(val, __spreadProps(__spreadValues({}, w), {\n        seriesIndex: realIndex,\n        dataPointIndex: j,\n        w\n      }));\n    }\n    return val;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  calculateColumnsDataLabelsPosition(opts) {\n    const w = this.w;\n    let {\n      i,\n      j,\n      realIndex,\n      y,\n      bcx,\n      barWidth,\n      barHeight,\n      textRects,\n      dataLabelsX,\n      dataLabelsY,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      strokeWidth,\n      offX,\n      offY\n    } = opts;\n    let totalDataLabelsY;\n    let totalDataLabelsX;\n    const totalDataLabelsAnchor = \"middle\";\n    const totalDataLabelsBcx = bcx;\n    barHeight = Math.abs(barHeight);\n    const vertical = w.config.plotOptions.bar.dataLabels.orientation === \"vertical\";\n    const { zeroEncounters } = this.barCtx.barHelpers.getZeroValueEncounters({\n      i,\n      j\n    });\n    bcx = bcx - strokeWidth / 2;\n    const dataPointsDividedWidth = w.layout.gridWidth / w.globals.dataPoints;\n    if (this.barCtx.isVerticalGroupedRangeBar) {\n      dataLabelsX += barWidth / 2;\n    } else {\n      if (w.axisFlags.isXNumeric) {\n        dataLabelsX = bcx - barWidth / 2 + offX;\n      } else {\n        dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX;\n      }\n      if (!w.config.chart.stacked && zeroEncounters > 0 && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        dataLabelsX -= barWidth * zeroEncounters;\n      }\n    }\n    if (vertical) {\n      const offsetDLX = 2;\n      dataLabelsX = dataLabelsX + textRects.height / 2 - strokeWidth / 2 - offsetDLX;\n    }\n    const valIsNegative = w.seriesData.series[i][j] < 0;\n    let newY = y;\n    if (this.barCtx.isReversed) {\n      newY = y + (valIsNegative ? barHeight : -barHeight);\n    }\n    switch (barDataLabelsConfig.position) {\n      case \"center\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight / 2 + offY;\n          } else {\n            dataLabelsY = newY + barHeight / 2 - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight / 2 + textRects.height / 2 + offY;\n          } else {\n            dataLabelsY = newY + barHeight / 2 + textRects.height / 2 - offY;\n          }\n        }\n        break;\n      case \"bottom\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight + offY;\n          } else {\n            dataLabelsY = newY + barHeight - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight + textRects.height + strokeWidth + offY;\n          } else {\n            dataLabelsY = newY + barHeight - textRects.height / 2 + strokeWidth - offY;\n          }\n        }\n        break;\n      case \"top\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY + offY;\n          } else {\n            dataLabelsY = newY - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - textRects.height / 2 - offY;\n          } else {\n            dataLabelsY = newY + textRects.height + offY;\n          }\n        }\n        break;\n    }\n    let lowestPrevY = newY;\n    w.labelData.seriesGroups.forEach((sg) => {\n      var _a;\n      (_a = this.barCtx[sg.join(\",\")]) == null ? void 0 : _a.prevY.forEach(\n        (arr) => {\n          if (valIsNegative) {\n            lowestPrevY = Math.max(arr[j], lowestPrevY);\n          } else {\n            lowestPrevY = Math.min(arr[j], lowestPrevY);\n          }\n        }\n      );\n    });\n    if (this.barCtx.lastActiveBarSerieIndex === realIndex && barTotalDataLabelsConfig.enabled) {\n      const ADDITIONAL_OFFY = 18;\n      const graphics = new Graphics(this.barCtx.w);\n      const totalLabeltextRects = graphics.getTextRects(\n        this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig.fontSize\n      );\n      if (valIsNegative) {\n        totalDataLabelsY = lowestPrevY - totalLabeltextRects.height / 2 - offY - barTotalDataLabelsConfig.offsetY + ADDITIONAL_OFFY;\n      } else {\n        totalDataLabelsY = lowestPrevY + totalLabeltextRects.height + offY + barTotalDataLabelsConfig.offsetY - ADDITIONAL_OFFY;\n      }\n      const xDivision = dataPointsDividedWidth;\n      totalDataLabelsX = totalDataLabelsBcx + (w.axisFlags.isXNumeric ? -barWidth * w.globals.barGroups.length / 2 : w.globals.barGroups.length * barWidth / 2 - (w.globals.barGroups.length - 1) * barWidth - xDivision) + barTotalDataLabelsConfig.offsetX;\n    }\n    if (!w.config.chart.stacked) {\n      if (dataLabelsY < 0) {\n        dataLabelsY = 0 + strokeWidth;\n      } else if (dataLabelsY + textRects.height / 3 > w.layout.gridHeight) {\n        dataLabelsY = w.layout.gridHeight - strokeWidth;\n      }\n    }\n    return {\n      bcx,\n      bcy: y,\n      dataLabelsX,\n      dataLabelsY,\n      totalDataLabelsX,\n      totalDataLabelsY,\n      totalDataLabelsAnchor\n    };\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  calculateBarsDataLabelsPosition(opts) {\n    var _a;\n    const w = this.w;\n    let {\n      x,\n      i,\n      j,\n      realIndex,\n      bcy,\n      barHeight,\n      barWidth,\n      textRects,\n      dataLabelsX,\n      strokeWidth,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      offX,\n      offY\n    } = opts;\n    const dataPointsDividedHeight = w.layout.gridHeight / w.globals.dataPoints;\n    const { zeroEncounters } = this.barCtx.barHelpers.getZeroValueEncounters({\n      i,\n      j\n    });\n    barWidth = Math.abs(barWidth);\n    let dataLabelsY;\n    if (this.barCtx.isPyramid) {\n      const centerOffset = (_a = textRects.centerOffset) != null ? _a : 0;\n      dataLabelsY = bcy + barHeight / 2 + offY - centerOffset;\n    } else {\n      dataLabelsY = bcy - (this.barCtx.isRangeBar ? 0 : dataPointsDividedHeight) + barHeight / 2 + textRects.height / 2 + offY - 3;\n    }\n    if (!w.config.chart.stacked && zeroEncounters > 0 && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n      dataLabelsY -= barHeight * zeroEncounters;\n    }\n    let totalDataLabelsX;\n    let totalDataLabelsY;\n    let totalDataLabelsAnchor = \"start\";\n    const valIsNegative = w.seriesData.series[i][j] < 0;\n    let newX = x;\n    if (this.barCtx.isReversed) {\n      newX = x + (valIsNegative ? -barWidth : barWidth);\n      totalDataLabelsAnchor = valIsNegative ? \"start\" : \"end\";\n    }\n    if (this.barCtx.isPyramid) {\n      dataLabelsX = w.layout.gridWidth / 2 + offX;\n    } else {\n      switch (barDataLabelsConfig.position) {\n        case \"center\":\n          if (valIsNegative) {\n            dataLabelsX = newX + barWidth / 2 - offX;\n          } else {\n            dataLabelsX = Math.max(textRects.width / 2, newX - barWidth / 2) + offX;\n          }\n          break;\n        case \"bottom\":\n          if (valIsNegative) {\n            dataLabelsX = newX + barWidth - strokeWidth - offX;\n          } else {\n            dataLabelsX = newX - barWidth + strokeWidth + offX;\n          }\n          break;\n        case \"top\":\n          if (valIsNegative) {\n            dataLabelsX = newX - strokeWidth - offX;\n          } else {\n            dataLabelsX = newX - strokeWidth + offX;\n          }\n          break;\n      }\n    }\n    let lowestPrevX = newX;\n    w.labelData.seriesGroups.forEach((sg) => {\n      var _a2;\n      (_a2 = this.barCtx[sg.join(\",\")]) == null ? void 0 : _a2.prevX.forEach(\n        (arr) => {\n          if (valIsNegative) {\n            lowestPrevX = Math.min(arr[j], lowestPrevX);\n          } else {\n            lowestPrevX = Math.max(arr[j], lowestPrevX);\n          }\n        }\n      );\n    });\n    if (this.barCtx.lastActiveBarSerieIndex === realIndex && barTotalDataLabelsConfig.enabled) {\n      const graphics = new Graphics(this.barCtx.w);\n      const totalLabeltextRects = graphics.getTextRects(\n        this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig.fontSize\n      );\n      if (valIsNegative) {\n        totalDataLabelsX = lowestPrevX - strokeWidth - offX - barTotalDataLabelsConfig.offsetX;\n        totalDataLabelsAnchor = \"end\";\n      } else {\n        totalDataLabelsX = lowestPrevX + offX + barTotalDataLabelsConfig.offsetX + (this.barCtx.isReversed ? -(barWidth + strokeWidth) : strokeWidth);\n      }\n      totalDataLabelsY = dataLabelsY - textRects.height / 2 + totalLabeltextRects.height / 2 + barTotalDataLabelsConfig.offsetY + strokeWidth;\n      if (w.globals.barGroups.length > 1) {\n        totalDataLabelsY = totalDataLabelsY - w.globals.barGroups.length / 2 * (barHeight / 2);\n      }\n    }\n    if (!w.config.chart.stacked) {\n      if (dataLabelsConfig.textAnchor === \"start\") {\n        if (dataLabelsX - textRects.width < 0) {\n          dataLabelsX = valIsNegative ? textRects.width + strokeWidth - offX : strokeWidth + offX;\n        } else if (dataLabelsX + textRects.width > w.layout.gridWidth) {\n          dataLabelsX = valIsNegative ? w.layout.gridWidth - strokeWidth : w.layout.gridWidth - textRects.width - strokeWidth;\n        }\n      } else if (dataLabelsConfig.textAnchor === \"middle\") {\n        if (dataLabelsX - textRects.width / 2 < 0) {\n          dataLabelsX = textRects.width / 2 + strokeWidth;\n        } else if (dataLabelsX + textRects.width / 2 > w.layout.gridWidth) {\n          dataLabelsX = w.layout.gridWidth - textRects.width / 2 - strokeWidth;\n        }\n      } else if (dataLabelsConfig.textAnchor === \"end\") {\n        if (dataLabelsX < 1) {\n          dataLabelsX = textRects.width + strokeWidth;\n        } else if (dataLabelsX + 1 > w.layout.gridWidth) {\n          dataLabelsX = w.layout.gridWidth - textRects.width - strokeWidth;\n        }\n      }\n    }\n    return {\n      bcx: x,\n      bcy,\n      dataLabelsX,\n      dataLabelsY,\n      totalDataLabelsX,\n      totalDataLabelsY,\n      totalDataLabelsAnchor\n    };\n  }\n  /** @param {{x: any, y: any, val: any, i: any, j: any, textRects: any, barHeight: any, barWidth: any, dataLabelsConfig: any}} opts */\n  drawCalculatedDataLabels({\n    x,\n    y,\n    val,\n    i,\n    // = realIndex\n    j,\n    textRects,\n    barHeight,\n    barWidth,\n    dataLabelsConfig\n  }) {\n    var _a, _b;\n    const w = this.w;\n    let rotate = \"rotate(0)\";\n    if (w.config.plotOptions.bar.dataLabels.orientation === \"vertical\")\n      rotate = `rotate(-90, ${x}, ${y})`;\n    const dataLabels = new DataLabels(this.barCtx.w, this.barCtx.ctx);\n    const graphics = new Graphics(this.barCtx.w);\n    const formatter = dataLabelsConfig.formatter;\n    let elDataLabelsWrap = null;\n    const isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1;\n    if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) {\n      elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-data-labels\",\n        transform: rotate\n      });\n      const dlCfg = w.config.dataLabels;\n      if (((_a = dlCfg.animate) == null ? void 0 : _a.enabled) || ((_b = dlCfg.countUp) == null ? void 0 : _b.enabled)) {\n        elDataLabelsWrap.node.setAttribute(\n          \"data:dlKey\",\n          `${i}::${datumKey(w, i, j)}`\n        );\n        elDataLabelsWrap.node.setAttribute(\"data:dlJ\", String(j));\n        if (typeof val === \"number\" && isFinite(val)) {\n          elDataLabelsWrap.node.setAttribute(\"data:dlVal\", String(val));\n        }\n      }\n      let text = \"\";\n      if (typeof val !== \"undefined\") {\n        text = formatter(val, __spreadProps(__spreadValues({}, w), {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        }));\n      }\n      if (!val && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        text = \"\";\n      }\n      const valIsNegative = w.seriesData.series[i][j] < 0;\n      const position = w.config.plotOptions.bar.dataLabels.position;\n      if (w.config.plotOptions.bar.dataLabels.orientation === \"vertical\") {\n        if (position === \"top\") {\n          if (valIsNegative) dataLabelsConfig.textAnchor = \"end\";\n          else dataLabelsConfig.textAnchor = \"start\";\n        }\n        if (position === \"center\") {\n          dataLabelsConfig.textAnchor = \"middle\";\n        }\n        if (position === \"bottom\") {\n          if (valIsNegative) dataLabelsConfig.textAnchor = \"end\";\n          else dataLabelsConfig.textAnchor = \"start\";\n        }\n      }\n      if (this.barCtx.isRangeBar && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) {\n        const txRect = graphics.getTextRects(\n          text,\n          parseFloat(dataLabelsConfig.style.fontSize).toString()\n        );\n        if (barWidth < txRect.width) {\n          text = \"\";\n        }\n      }\n      if (w.config.chart.stacked && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) {\n        if (this.barCtx.isHorizontal) {\n          if (textRects.width / 1.6 > Math.abs(barWidth)) {\n            text = \"\";\n          }\n        } else {\n          if (textRects.height / 1.6 > Math.abs(barHeight)) {\n            text = \"\";\n          }\n        }\n      }\n      const modifiedDataLabelsConfig = __spreadValues({}, dataLabelsConfig);\n      if (this.barCtx.isHorizontal) {\n        if (val < 0) {\n          if (dataLabelsConfig.textAnchor === \"start\") {\n            modifiedDataLabelsConfig.textAnchor = \"end\";\n          } else if (dataLabelsConfig.textAnchor === \"end\") {\n            modifiedDataLabelsConfig.textAnchor = \"start\";\n          }\n        }\n      }\n      dataLabels.plotDataLabelsText({\n        x,\n        y,\n        text,\n        i,\n        j,\n        parent: elDataLabelsWrap,\n        dataLabelsConfig: modifiedDataLabelsConfig,\n        alwaysDrawDataLabel: true,\n        offsetCorrection: true\n      });\n    }\n    return elDataLabelsWrap;\n  }\n  /** @param {{ x?: any, y?: any, val?: any, realIndex?: any, textAnchor?: any, barWidth?: any, barHeight?: any, dataLabelsConfig?: any, barTotalDataLabelsConfig?: any }} opts */\n  drawTotalDataLabels({\n    x,\n    y,\n    val,\n    realIndex,\n    textAnchor,\n    barTotalDataLabelsConfig\n  }) {\n    const graphics = new Graphics(this.barCtx.w);\n    let totalDataLabelText;\n    if (barTotalDataLabelsConfig.enabled && typeof x !== \"undefined\" && typeof y !== \"undefined\" && this.barCtx.lastActiveBarSerieIndex === realIndex) {\n      totalDataLabelText = graphics.drawText({\n        x,\n        y,\n        foreColor: barTotalDataLabelsConfig.style.color,\n        text: val,\n        textAnchor,\n        fontFamily: barTotalDataLabelsConfig.style.fontFamily,\n        fontSize: barTotalDataLabelsConfig.style.fontSize,\n        fontWeight: barTotalDataLabelsConfig.style.fontWeight\n      });\n    }\n    return totalDataLabelText;\n  }\n}\nlet Helpers$1 = class Helpers4 {\n  /**\n   * @param {Record<string, any>} barCtx\n   */\n  constructor(barCtx) {\n    this.w = barCtx.w;\n    this.barCtx = barCtx;\n  }\n  /**\n   * @param {any[]} series\n   */\n  initVariables(series) {\n    const w = this.w;\n    this.barCtx.series = series;\n    this.barCtx.totalItems = 0;\n    this.barCtx.seriesLen = 0;\n    this.barCtx.visibleI = -1;\n    this.barCtx.visibleItems = 1;\n    for (let sl = 0; sl < series.length; sl++) {\n      if (series[sl].length > 0) {\n        this.barCtx.seriesLen = this.barCtx.seriesLen + 1;\n        this.barCtx.totalItems += series[sl].length;\n      }\n      if (w.axisFlags.isXNumeric) {\n        for (let j = 0; j < series[sl].length; j++) {\n          if (w.seriesData.seriesX[sl][j] > w.globals.minX && w.seriesData.seriesX[sl][j] < w.globals.maxX) {\n            this.barCtx.visibleItems++;\n          }\n        }\n      } else {\n        this.barCtx.visibleItems = w.globals.dataPoints;\n      }\n    }\n    this.arrBorderRadius = this.createBorderRadiusArr(w.seriesData.series);\n    if (Utils$1.isSafari()) {\n      this.arrBorderRadius = this.arrBorderRadius.map(\n        (brArr) => (\n          /**\n           * @param {any} _\n           */\n          brArr.map((_) => \"none\")\n        )\n      );\n    }\n    if (this.barCtx.seriesLen === 0) {\n      this.barCtx.seriesLen = 1;\n    }\n  }\n  /**\n   * @param {number} realIndex\n   */\n  initialPositions(realIndex) {\n    const w = this.w;\n    let x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW;\n    let dataPoints = w.globals.dataPoints;\n    if (this.barCtx.isRangeBar) {\n      dataPoints = w.labelData.labels.length;\n    }\n    let seriesLen = this.barCtx.seriesLen;\n    if (w.config.plotOptions.bar.rangeBarGroupRows) {\n      seriesLen = 1;\n    }\n    if (this.barCtx.isHorizontal) {\n      yDivision = w.layout.gridHeight / dataPoints;\n      barHeight = yDivision / seriesLen;\n      if (w.axisFlags.isXNumeric) {\n        yDivision = w.layout.gridHeight / this.barCtx.totalItems;\n        barHeight = yDivision / this.barCtx.seriesLen;\n      }\n      barHeight = barHeight * parseInt(this.barCtx.barOptions.barHeight, 10) / 100;\n      if (String(this.barCtx.barOptions.barHeight).indexOf(\"%\") === -1) {\n        barHeight = parseInt(this.barCtx.barOptions.barHeight, 10);\n      }\n      zeroW = this.barCtx.baseLineInvertedY + w.globals.padHorizontal + (this.barCtx.isReversed ? w.layout.gridWidth : 0) - (this.barCtx.isReversed ? this.barCtx.baseLineInvertedY * 2 : 0);\n      if (this.barCtx.isFunnel) {\n        zeroW = w.layout.gridWidth / 2;\n      }\n      y = (yDivision - barHeight * this.barCtx.seriesLen) / 2;\n    } else {\n      xDivision = w.layout.gridWidth / this.barCtx.visibleItems;\n      if (w.config.xaxis.convertedCatToNumeric) {\n        xDivision = w.layout.gridWidth / w.globals.dataPoints;\n      }\n      barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n      if (w.axisFlags.isXNumeric) {\n        const xRatio = this.barCtx.xRatio;\n        if (w.globals.minXDiff && w.globals.minXDiff !== 0.5 && w.globals.minXDiff / xRatio > 0) {\n          xDivision = w.globals.minXDiff / xRatio;\n        }\n        barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n        if (barWidth < 1) {\n          barWidth = 1;\n        }\n      }\n      if (String(this.barCtx.barOptions.columnWidth).indexOf(\"%\") === -1) {\n        barWidth = parseInt(this.barCtx.barOptions.columnWidth, 10);\n      }\n      zeroH = w.layout.gridHeight - this.barCtx.baseLineY[this.barCtx.translationsIndex] - (this.barCtx.isReversed ? w.layout.gridHeight : 0) + (this.barCtx.isReversed ? this.barCtx.baseLineY[this.barCtx.translationsIndex] * 2 : 0);\n      if (w.axisFlags.isXNumeric) {\n        const xForNumericX = this.barCtx.getBarXForNumericXAxis({\n          x,\n          j: 0,\n          realIndex,\n          barWidth\n        });\n        x = xForNumericX.x;\n      } else {\n        x = w.globals.padHorizontal + Utils$1.noExponents(xDivision - barWidth * this.barCtx.seriesLen) / 2;\n      }\n    }\n    w.globals.barHeight = barHeight;\n    w.globals.barWidth = barWidth;\n    return {\n      x,\n      y,\n      yDivision,\n      xDivision,\n      barHeight,\n      barWidth,\n      zeroH,\n      zeroW\n    };\n  }\n  /**\n   * @param {Record<string, any>} ctx\n   */\n  initializeStackedPrevVars(ctx) {\n    const w = ctx.w;\n    w.labelData.seriesGroups.forEach((group) => {\n      if (!ctx[group]) ctx[group] = {};\n      ctx[group].prevY = [];\n      ctx[group].prevX = [];\n      ctx[group].prevYF = [];\n      ctx[group].prevXF = [];\n      ctx[group].prevYVal = [];\n      ctx[group].prevXVal = [];\n    });\n  }\n  /**\n   * @param {Record<string, any>} ctx\n   */\n  initializeStackedXYVars(ctx) {\n    const w = ctx.w;\n    w.labelData.seriesGroups.forEach((group) => {\n      if (!ctx[group]) ctx[group] = {};\n      ctx[group].xArrj = [];\n      ctx[group].xArrjF = [];\n      ctx[group].xArrjVal = [];\n      ctx[group].yArrj = [];\n      ctx[group].yArrjF = [];\n      ctx[group].yArrjVal = [];\n    });\n  }\n  /**\n   * @param {any[]} series\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  getPathFillColor(series, i, j, realIndex) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const fill = new Fill(this.barCtx.w);\n    let fillColor = null;\n    const seriesNumber = this.barCtx.barOptions.distributed ? j : i;\n    let useRangeColor = false;\n    if (this.barCtx.barOptions.colors.ranges.length > 0) {\n      const colorRange = this.barCtx.barOptions.colors.ranges;\n      colorRange.map((range) => {\n        if (series[i][j] >= range.from && series[i][j] <= range.to) {\n          fillColor = range.color;\n          useRangeColor = true;\n        }\n      });\n    }\n    const pathFill = fill.fillPath({\n      seriesNumber: this.barCtx.barOptions.distributed ? seriesNumber : realIndex,\n      dataPointIndex: j,\n      color: fillColor,\n      value: series[i][j],\n      fillConfig: (_a = w.config.series[i].data[j]) == null ? void 0 : _a.fill,\n      fillType: ((_c = (_b = w.config.series[i].data[j]) == null ? void 0 : _b.fill) == null ? void 0 : _c.type) ? (_d = w.config.series[i].data[j]) == null ? void 0 : _d.fill.type : Array.isArray(w.config.fill.type) ? w.config.fill.type[realIndex] : w.config.fill.type\n    });\n    return {\n      color: pathFill,\n      useRangeColor\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  getStrokeWidth(i, j, realIndex) {\n    let strokeWidth = 0;\n    const w = this.w;\n    if (typeof this.barCtx.series[i][j] === \"undefined\" || this.barCtx.series[i][j] === null || w.config.chart.type === \"bar\" && !this.barCtx.series[i][j]) {\n      this.barCtx.isNullValue = true;\n    } else {\n      this.barCtx.isNullValue = false;\n    }\n    if (w.config.stroke.show) {\n      if (!this.barCtx.isNullValue) {\n        strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth;\n      }\n    }\n    return strokeWidth;\n  }\n  /**\n   * @param {any[]} series\n   */\n  createBorderRadiusArr(series) {\n    var _a;\n    const w = this.w;\n    const alwaysApplyRadius = !this.w.config.chart.stacked || w.config.plotOptions.bar.borderRadius <= 0;\n    const numSeries = series.length;\n    const numColumns = ((_a = series[0]) == null ? void 0 : _a.length) | 0;\n    const output = Array.from(\n      { length: numSeries },\n      () => Array(numColumns).fill(alwaysApplyRadius ? \"top\" : \"none\")\n    );\n    if (alwaysApplyRadius) return output;\n    const chartType = this.w.config.chart.type;\n    for (let j = 0; j < numColumns; j++) {\n      const positiveIndices = [];\n      const negativeIndices = [];\n      let nonZeroCount = 0;\n      for (let i = 0; i < numSeries; i++) {\n        const value = series[i][j];\n        if (value > 0) {\n          positiveIndices.push(i);\n          nonZeroCount++;\n        } else if (value < 0) {\n          negativeIndices.push(i);\n          nonZeroCount++;\n        }\n      }\n      if (positiveIndices.length > 0 && negativeIndices.length === 0) {\n        if (positiveIndices.length === 1) {\n          output[positiveIndices[0]][j] = chartType === \"bar\" && numColumns === 1 ? \"top\" : \"both\";\n        } else {\n          const firstPositiveIndex = positiveIndices[0];\n          const lastPositiveIndex = positiveIndices[positiveIndices.length - 1];\n          for (const i of positiveIndices) {\n            if (i === firstPositiveIndex) {\n              output[i][j] = chartType === \"bar\" && numColumns === 1 ? \"top\" : \"bottom\";\n            } else if (i === lastPositiveIndex) {\n              output[i][j] = \"top\";\n            } else {\n              output[i][j] = \"none\";\n            }\n          }\n        }\n      } else if (negativeIndices.length > 0 && positiveIndices.length === 0) {\n        if (negativeIndices.length === 1) {\n          output[negativeIndices[0]][j] = \"both\";\n        } else {\n          const highestNegativeIndex = Math.max(...negativeIndices);\n          const lowestNegativeIndex = Math.min(...negativeIndices);\n          for (const i of negativeIndices) {\n            if (i === highestNegativeIndex) {\n              output[i][j] = \"bottom\";\n            } else if (i === lowestNegativeIndex) {\n              output[i][j] = \"top\";\n            } else {\n              output[i][j] = \"none\";\n            }\n          }\n        }\n      } else if (positiveIndices.length > 0 && negativeIndices.length > 0) {\n        const lastPositiveIndex = positiveIndices[positiveIndices.length - 1];\n        for (const i of positiveIndices) {\n          if (i === lastPositiveIndex) {\n            output[i][j] = \"top\";\n          } else {\n            output[i][j] = \"none\";\n          }\n        }\n        const highestNegativeIndex = Math.max(...negativeIndices);\n        for (const i of negativeIndices) {\n          if (i === highestNegativeIndex) {\n            output[i][j] = \"bottom\";\n          } else {\n            output[i][j] = \"none\";\n          }\n        }\n      } else if (nonZeroCount === 1) {\n        const index = positiveIndices[0] || negativeIndices[0];\n        output[index][j] = \"both\";\n      }\n    }\n    return output;\n  }\n  /** @param {{ j?: any, i?: any, x1?: any, x2?: any, y1?: any, y2?: any, bc?: any, elSeries?: any }} opts */\n  barBackground({ j, i, x1, x2, y1, y2, elSeries }) {\n    const w = this.w;\n    const graphics = new Graphics(this.barCtx.w);\n    const sr = new Series(this.barCtx.w);\n    const activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n    if (this.barCtx.barOptions.colors.backgroundBarColors.length > 0 && activeSeriesIndex === i) {\n      if (j >= this.barCtx.barOptions.colors.backgroundBarColors.length) {\n        j %= this.barCtx.barOptions.colors.backgroundBarColors.length;\n      }\n      const bcolor = this.barCtx.barOptions.colors.backgroundBarColors[j];\n      const rect = graphics.drawRect(\n        typeof x1 !== \"undefined\" ? x1 : 0,\n        typeof y1 !== \"undefined\" ? y1 : 0,\n        typeof x2 !== \"undefined\" ? x2 : w.layout.gridWidth,\n        typeof y2 !== \"undefined\" ? y2 : w.layout.gridHeight,\n        this.barCtx.barOptions.colors.backgroundBarRadius,\n        bcolor,\n        this.barCtx.barOptions.colors.backgroundBarOpacity\n      );\n      elSeries.add(rect);\n      rect.node.classList.add(\"apexcharts-backgroundBar\");\n    }\n  }\n  /** @param {{ barWidth?: any, barXPosition?: any, y1?: any, y2?: any, yRatio?: any, strokeWidth?: any, isReversed?: any, series?: any, seriesGroup?: any, realIndex?: any, i?: any, j?: any, w?: any }} opts */\n  getColumnPaths({\n    barWidth,\n    barXPosition,\n    y1,\n    y2,\n    strokeWidth,\n    isReversed,\n    series,\n    seriesGroup,\n    realIndex,\n    i,\n    j,\n    w\n  }) {\n    var _a, _b, _c;\n    const graphics = new Graphics(this.barCtx.w);\n    strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth;\n    if (!strokeWidth) strokeWidth = 0;\n    let bW = barWidth;\n    let bXP = barXPosition;\n    if ((_a = w.config.series[realIndex].data[j]) == null ? void 0 : _a.columnWidthOffset) {\n      bXP = barXPosition - w.config.series[realIndex].data[j].columnWidthOffset / 2;\n      bW = barWidth + w.config.series[realIndex].data[j].columnWidthOffset;\n    }\n    const strokeCenter = strokeWidth / 2;\n    const x1 = bXP + strokeCenter;\n    const x2 = bXP + bW - strokeCenter;\n    const direction = (series[i][j] >= 0 ? 1 : -1) * (isReversed ? -1 : 1);\n    y1 += 1e-3 - strokeCenter * direction;\n    y2 += 1e-3 + strokeCenter * direction;\n    const sl = graphics.line(x2, y1);\n    const closing = w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\";\n    let pathTo = graphics.move(x1, y1) + graphics.line(x1, y2) + graphics.line(x2, y2) + sl + closing;\n    if (this.arrBorderRadius[realIndex][j] !== \"none\") {\n      pathTo = graphics.roundPathCorners(\n        pathTo,\n        w.config.plotOptions.bar.borderRadius\n      );\n    }\n    let pathFrom = null;\n    const morphFrom = (_c = (_b = this.barCtx.ctx) == null ? void 0 : _b.morphTypeChange) == null ? void 0 : _c.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\n      pathFrom = graphics.move(x1, y1) + graphics.line(x1, y1) + sl + sl + sl + sl + sl + graphics.line(x1, y1) + closing;\n    }\n    if (w.config.chart.stacked) {\n      let _ctx = this.barCtx;\n      _ctx = this.barCtx[seriesGroup];\n      _ctx.yArrj.push(y2 - strokeCenter * direction);\n      _ctx.yArrjF.push(Math.abs(y1 - y2 + strokeWidth * direction));\n      _ctx.yArrjVal.push(this.barCtx.series[i][j]);\n    }\n    return {\n      pathTo,\n      pathFrom\n    };\n  }\n  /**\n   * Build a trapezoidal funnel-stage path. Used when\n   * `plotOptions.funnel.shape === 'trapezoid'` is active alongside `isFunnel`.\n   *\n   * Each stage is a 4-corner polygon whose top width matches the current\n   * stage's value and bottom width matches the next stage's value, producing\n   * continuous sloped sides between consecutive stages.\n   *\n   * For the last stage, the bottom width is configurable:\n   * - `lastShape: 'flat'`  → bottom width = top width (parallel sides)\n   * - `lastShape: 'taper'` → bottom width = 0 (taper to a point)\n   *\n   * @param {{ barYPosition: number, barHeight: number, series: any[][], i: number, j: number, realIndex: number, strokeWidth: number, w: any }} opts\n   */\n  getFunnelTrapezoidPaths({\n    barYPosition,\n    barHeight,\n    series,\n    i,\n    j,\n    realIndex,\n    strokeWidth,\n    w\n  }) {\n    var _a, _b;\n    const graphics = new Graphics(this.barCtx.w);\n    const center = w.layout.gridWidth / 2;\n    const halfWidthFor = (v) => Math.abs(v / this.barCtx.invertedYRatio) / 2;\n    const topHalf = halfWidthFor(series[i][j]);\n    const lastIdx = series[i].length - 1;\n    const isLast = j === lastIdx;\n    const lastShape = w.config.plotOptions.funnel.lastShape === \"taper\" ? \"taper\" : \"flat\";\n    let bottomHalf;\n    if (isLast) {\n      bottomHalf = lastShape === \"taper\" ? 0 : topHalf;\n    } else {\n      bottomHalf = halfWidthFor(series[i][j + 1]);\n    }\n    const strokeCenter = strokeWidth / 2;\n    const y1 = barYPosition + strokeCenter;\n    const y2 = barYPosition + barHeight - strokeCenter;\n    const topLeftX = center - topHalf;\n    const topRightX = center + topHalf;\n    const bottomLeftX = center - bottomHalf;\n    const bottomRightX = center + bottomHalf;\n    const pathTo = graphics.move(topLeftX, y1) + graphics.line(topRightX, y1) + graphics.line(bottomRightX, y2) + graphics.line(bottomLeftX, y2) + \" Z\";\n    let pathFrom = null;\n    const morphFrom = (_b = (_a = this.barCtx.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\n      pathFrom = graphics.move(center, y1) + graphics.line(center, y1) + graphics.line(center, y2) + graphics.line(center, y2) + \" Z\";\n    }\n    return {\n      pathTo,\n      pathFrom,\n      // x is the right edge of the wider (top) side — used by dataLabel\n      // positioning helpers that expect a \"right\" reference.\n      x: topRightX,\n      x1: topLeftX,\n      barXPosition: center\n    };\n  }\n  /**\n   * Pre-compute the per-segment layout for a value-proportional pyramid.\n   *\n   * Each segment is a horizontal slice of a triangle whose apex sits at the\n   * top of the plot area (width = 0) and whose base spans `gridWidth` at the\n   * bottom. The vertical extent of each slice is its share of the total\n   * series value, so areas track value contribution and segments share\n   * edges (no gaps). The first data point is the apex, the last is the base.\n   *\n   * @param {any[]} seriesData - 1D array of values for a single series row\n   * @returns {{ y: number, height: number, topHalf: number, bottomHalf: number }[]}\n   */\n  computePyramidLayout(seriesData) {\n    const w = this.w;\n    const gridHeight = w.layout.gridHeight;\n    const gridWidth = w.layout.gridWidth;\n    const values = seriesData.map(\n      /** @param {any} v */\n      (v) => Math.abs(Number(v) || 0)\n    );\n    const total = values.reduce(\n      /** @param {number} a @param {number} b */\n      (a, b) => a + b,\n      0\n    );\n    if (total === 0 || gridHeight <= 0) {\n      return values.map(() => ({ y: 0, height: 0, topHalf: 0, bottomHalf: 0 }));\n    }\n    const halfWidth = gridWidth / 2;\n    let cumulative = 0;\n    const layout = [];\n    for (let j = 0; j < values.length; j++) {\n      const topRatio = cumulative / total;\n      cumulative += values[j];\n      const bottomRatio = cumulative / total;\n      const topY = topRatio * gridHeight;\n      const bottomY = bottomRatio * gridHeight;\n      layout.push({\n        y: topY,\n        height: bottomY - topY,\n        topHalf: topRatio * halfWidth,\n        bottomHalf: bottomRatio * halfWidth\n      });\n    }\n    return layout;\n  }\n  /**\n   * Build a single pyramid stage path. Geometry is precomputed by\n   * `computePyramidLayout`; this method only renders that geometry into an\n   * SVG path string plus a `pathFrom` for entry/morph animations.\n   *\n   * @param {{ barYPosition: number, barHeight: number, topHalf: number, bottomHalf: number, realIndex: number, j: number, strokeWidth: number, w: any }} opts\n   */\n  getPyramidPaths({\n    barYPosition,\n    barHeight,\n    topHalf,\n    bottomHalf,\n    realIndex,\n    j,\n    strokeWidth,\n    w\n  }) {\n    var _a, _b;\n    const graphics = new Graphics(this.barCtx.w);\n    const center = w.layout.gridWidth / 2;\n    const strokeCenter = strokeWidth / 2;\n    const y1 = barYPosition + strokeCenter;\n    const y2 = barYPosition + barHeight - strokeCenter;\n    const topLeftX = center - topHalf;\n    const topRightX = center + topHalf;\n    const bottomLeftX = center - bottomHalf;\n    const bottomRightX = center + bottomHalf;\n    const pathTo = graphics.move(topLeftX, y1) + graphics.line(topRightX, y1) + graphics.line(bottomRightX, y2) + graphics.line(bottomLeftX, y2) + \" Z\";\n    let pathFrom = null;\n    const morphFrom = (_b = (_a = this.barCtx.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\n      pathFrom = graphics.move(center, y1) + graphics.line(center, y1) + graphics.line(center, y2) + graphics.line(center, y2) + \" Z\";\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: topRightX,\n      x1: topLeftX,\n      barXPosition: center\n    };\n  }\n  /** @param {{ barYPosition?: any, barHeight?: any, x1?: any, x2?: any, strokeWidth?: any, isReversed?: any, series?: any, seriesGroup?: any, realIndex?: any, i?: any, j?: any, w?: any }} opts */\n  getBarpaths({\n    barYPosition,\n    barHeight,\n    x1,\n    x2,\n    strokeWidth,\n    isReversed,\n    series,\n    seriesGroup,\n    realIndex,\n    i,\n    j,\n    w\n  }) {\n    var _a, _b, _c;\n    const graphics = new Graphics(this.barCtx.w);\n    strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth;\n    if (!strokeWidth) strokeWidth = 0;\n    let bYP = barYPosition;\n    let bH = barHeight;\n    if ((_a = w.config.series[realIndex].data[j]) == null ? void 0 : _a.barHeightOffset) {\n      bYP = barYPosition - w.config.series[realIndex].data[j].barHeightOffset / 2;\n      bH = barHeight + w.config.series[realIndex].data[j].barHeightOffset;\n    }\n    const strokeCenter = strokeWidth / 2;\n    const y1 = bYP + strokeCenter;\n    const y2 = bYP + bH - strokeCenter;\n    const direction = (series[i][j] >= 0 ? 1 : -1) * (isReversed ? -1 : 1);\n    x1 += 1e-3 + strokeCenter * direction;\n    x2 += 1e-3 - strokeCenter * direction;\n    const isFunnel = this.barCtx.isFunnel;\n    const fromX = isFunnel ? (x1 + x2) / 2 : x1;\n    const sl = graphics.line(x1, y2);\n    const closing = w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\";\n    let pathTo = graphics.move(x1, y1) + graphics.line(x2, y1) + graphics.line(x2, y2) + sl + closing;\n    if (this.arrBorderRadius[realIndex][j] !== \"none\") {\n      pathTo = graphics.roundPathCorners(\n        pathTo,\n        w.config.plotOptions.bar.borderRadius\n      );\n    }\n    let pathFrom = null;\n    const morphFrom = (_c = (_b = this.barCtx.ctx) == null ? void 0 : _b.morphTypeChange) == null ? void 0 : _c.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\n      const slFrom = isFunnel ? graphics.line(fromX, y2) : sl;\n      pathFrom = graphics.move(fromX, y1) + graphics.line(fromX, y1) + slFrom + slFrom + slFrom + slFrom + slFrom + graphics.line(fromX, y1) + closing;\n    }\n    if (w.config.chart.stacked) {\n      let _ctx = this.barCtx;\n      _ctx = this.barCtx[seriesGroup];\n      _ctx.xArrj.push(x2 + strokeCenter * direction);\n      _ctx.xArrjF.push(Math.abs(x1 - x2 - strokeWidth * direction));\n      _ctx.xArrjVal.push(this.barCtx.series[i][j]);\n    }\n    return {\n      pathTo,\n      pathFrom\n    };\n  }\n  /**\n   * @param {number} value\n   * @param {number} zeroW\n   */\n  getXForValue(value, zeroW, zeroPositionForNull = true) {\n    let xForVal = zeroPositionForNull ? zeroW : null;\n    if (typeof value !== \"undefined\" && value !== null) {\n      xForVal = zeroW + value / this.barCtx.invertedYRatio - (this.barCtx.isReversed ? value / this.barCtx.invertedYRatio : 0) * 2;\n    }\n    return xForVal;\n  }\n  /**\n   * @param {number} value\n   * @param {number} zeroH\n   * @param {number} translationsIndex\n   */\n  getYForValue(value, zeroH, translationsIndex, zeroPositionForNull = true) {\n    let yForVal = zeroPositionForNull ? zeroH : null;\n    if (typeof value !== \"undefined\" && value !== null) {\n      yForVal = zeroH - value / this.barCtx.yRatio[translationsIndex] + (this.barCtx.isReversed ? value / this.barCtx.yRatio[translationsIndex] : 0) * 2;\n    }\n    return yForVal;\n  }\n  /**\n   * @param {string} type\n   * @param {number} zeroW\n   * @param {number} zeroH\n   * @param {number} i\n   * @param {number} j\n   * @param {number} translationsIndex\n   */\n  getGoalValues(type, zeroW, zeroH, i, j, translationsIndex) {\n    const w = this.w;\n    const goals = [];\n    const pushGoal = (value, attrs) => {\n      goals.push({\n        [type]: type === \"x\" ? this.getXForValue(value, zeroW, false) : this.getYForValue(value, zeroH, translationsIndex, false),\n        attrs\n      });\n    };\n    if (w.seriesData.seriesGoals[i] && w.seriesData.seriesGoals[i][j] && Array.isArray(w.seriesData.seriesGoals[i][j])) {\n      w.seriesData.seriesGoals[i][j].forEach((goal) => {\n        pushGoal(goal.value, goal);\n      });\n    }\n    if (this.barCtx.barOptions.isDumbbell && w.rangeData.seriesRange.length) {\n      const colors = this.barCtx.barOptions.dumbbellColors ? this.barCtx.barOptions.dumbbellColors : w.globals.colors;\n      const commonAttrs = {\n        strokeHeight: type === \"x\" ? 0 : w.globals.markers.size[i],\n        strokeWidth: type === \"x\" ? w.globals.markers.size[i] : 0,\n        strokeDashArray: 0,\n        strokeLineCap: \"round\",\n        strokeColor: Array.isArray(colors[i]) ? colors[i][0] : colors[i]\n      };\n      pushGoal(w.rangeData.seriesRangeStart[i][j], commonAttrs);\n      pushGoal(w.rangeData.seriesRangeEnd[i][j], __spreadProps(__spreadValues({}, commonAttrs), {\n        strokeColor: Array.isArray(colors[i]) ? colors[i][1] : colors[i]\n      }));\n    }\n    return goals;\n  }\n  /** @param {{barXPosition: any, barYPosition: any, goalX: any, goalY: any, barWidth: any, barHeight: any}} opts */\n  drawGoalLine({\n    barXPosition,\n    barYPosition,\n    goalX,\n    goalY,\n    barWidth,\n    barHeight\n  }) {\n    const hasGoals = Array.isArray(goalX) && goalX.length > 0 || Array.isArray(goalY) && goalY.length > 0;\n    if (!hasGoals) {\n      return null;\n    }\n    const graphics = new Graphics(this.barCtx.w);\n    const lineGroup = graphics.group({\n      className: \"apexcharts-bar-goals-groups\"\n    });\n    lineGroup.node.classList.add(\"apexcharts-element-hidden\");\n    this.barCtx.w.globals.delayedElements.push({\n      el: lineGroup.node\n    });\n    lineGroup.attr(\n      \"clip-path\",\n      `url(#gridRectMarkerMask${this.barCtx.w.globals.cuid})`\n    );\n    let line = null;\n    if (this.barCtx.isHorizontal) {\n      if (Array.isArray(goalX)) {\n        goalX.forEach((goal) => {\n          if (goal.x >= -1 && goal.x <= graphics.w.layout.gridWidth + 1) {\n            const sHeight = typeof goal.attrs.strokeHeight !== \"undefined\" ? goal.attrs.strokeHeight : barHeight / 2;\n            const y = barYPosition + sHeight + barHeight / 2;\n            line = graphics.drawLine(\n              goal.x,\n              y - sHeight * 2,\n              goal.x,\n              y,\n              goal.attrs.strokeColor ? goal.attrs.strokeColor : void 0,\n              goal.attrs.strokeDashArray,\n              goal.attrs.strokeWidth ? goal.attrs.strokeWidth : 2,\n              goal.attrs.strokeLineCap\n            );\n            lineGroup.add(line);\n          }\n        });\n      }\n    } else {\n      if (Array.isArray(goalY)) {\n        goalY.forEach((goal) => {\n          if (goal.y >= -1 && goal.y <= graphics.w.layout.gridHeight + 1) {\n            const sWidth = typeof goal.attrs.strokeWidth !== \"undefined\" ? goal.attrs.strokeWidth : barWidth / 2;\n            const x = barXPosition + sWidth + barWidth / 2;\n            line = graphics.drawLine(\n              x - sWidth * 2,\n              goal.y,\n              x,\n              goal.y,\n              goal.attrs.strokeColor ? goal.attrs.strokeColor : void 0,\n              goal.attrs.strokeDashArray,\n              goal.attrs.strokeHeight ? goal.attrs.strokeHeight : 2,\n              goal.attrs.strokeLineCap\n            );\n            lineGroup.add(line);\n          }\n        });\n      }\n    }\n    return lineGroup;\n  }\n  /** @param {{prevPaths: any, currPaths: any, color: any, realIndex: any, j: any}} opts */\n  drawBarShadow({ prevPaths, currPaths, color, realIndex, j }) {\n    const w = this.w;\n    const { x: prevX2, x1: prevX1, barYPosition: prevY1 } = prevPaths;\n    const { x: currX2, x1: currX1, barYPosition: currY1 } = currPaths;\n    const prevY2 = prevY1 + currPaths.barHeight;\n    const graphics = new Graphics(this.barCtx.w);\n    const utils = new Utils$1();\n    const shadowPath = graphics.move(prevX1, prevY2) + graphics.line(prevX2, prevY2) + graphics.line(currX2, currY1) + graphics.line(currX1, currY1) + graphics.line(prevX1, prevY2) + (w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\");\n    return graphics.drawPath({\n      d: shadowPath,\n      fill: utils.shadeColor(0.5, Utils$1.rgb2hex(color)),\n      stroke: \"none\",\n      strokeWidth: 0,\n      fillOpacity: 1,\n      classes: \"apexcharts-bar-shadow apexcharts-decoration-element\"\n    });\n  }\n  /** @param {{i: any, j: any}} opts */\n  getZeroValueEncounters({ i, j }) {\n    var _a;\n    const w = this.w;\n    let nonZeroColumns = 0;\n    let zeroEncounters = 0;\n    const seriesIndices = w.config.plotOptions.bar.horizontal ? w.seriesData.series.map((_, _i) => _i) : ((_a = w.globals.columnSeries) == null ? void 0 : _a.i.map((_i) => _i)) || [];\n    seriesIndices.forEach((_si) => {\n      const val = w.globals.seriesPercent[_si][j];\n      if (val) {\n        nonZeroColumns++;\n      }\n      if (_si < i && val === 0) {\n        zeroEncounters++;\n      }\n    });\n    return {\n      nonZeroColumns,\n      zeroEncounters\n    };\n  }\n  /**\n   * @param {number} seriesIndex\n   */\n  getGroupIndex(seriesIndex) {\n    const w = this.w;\n    const groupIndex = w.labelData.seriesGroups.findIndex(\n      (group) => (\n        // w.config.series[i].name may be undefined, so use\n        // w.seriesData.seriesNames[i], which has default names for those\n        // series. w.labelData.seriesGroups[] uses the same default naming.\n        group.indexOf(w.seriesData.seriesNames[seriesIndex]) > -1\n      )\n    );\n    const cGI = this.barCtx.columnGroupIndices;\n    let columnGroupIndex = cGI.indexOf(groupIndex);\n    if (columnGroupIndex < 0) {\n      cGI.push(groupIndex);\n      columnGroupIndex = cGI.length - 1;\n    }\n    return { groupIndex, columnGroupIndex };\n  }\n};\nclass Bar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  constructor(w, ctx, xyRatios) {\n    this.ctx = ctx;\n    this.w = w;\n    this.barOptions = w.config.plotOptions.bar;\n    this.isHorizontal = this.barOptions.horizontal;\n    this.strokeWidth = w.config.stroke.width;\n    this.isNullValue = false;\n    this.isRangeBar = w.rangeData.seriesRange.length && this.isHorizontal;\n    this.isVerticalGroupedRangeBar = !w.globals.isBarHorizontal && w.rangeData.seriesRange.length && w.config.plotOptions.bar.rangeBarGroupRows;\n    this.isFunnel = this.barOptions.isFunnel;\n    this.isPyramid = this.barOptions.isPyramid;\n    this.pyramidLayout = null;\n    this.xyRatios = xyRatios;\n    this.xRatio = 0;\n    this.yRatio = [];\n    this.invertedXRatio = 0;\n    this.invertedYRatio = 0;\n    this.baseLineY = [];\n    this.baseLineInvertedY = 0;\n    if (this.xyRatios !== null) {\n      this.xRatio = xyRatios.xRatio;\n      this.yRatio = xyRatios.yRatio;\n      this.invertedXRatio = xyRatios.invertedXRatio;\n      this.invertedYRatio = xyRatios.invertedYRatio;\n      this.baseLineY = xyRatios.baseLineY;\n      this.baseLineInvertedY = xyRatios.baseLineInvertedY;\n    }\n    this.yaxisIndex = 0;\n    this.translationsIndex = 0;\n    this.seriesLen = 0;\n    this.pathArr = [];\n    this._prevKeyed = null;\n    this._ltCache = null;\n    this._layoutShiftCache = null;\n    this.series = [];\n    this.elSeries = null;\n    this.visibleI = 0;\n    this.isReversed = false;\n    const ser = new Series(this.w);\n    this.lastActiveBarSerieIndex = ser.getActiveConfigSeriesIndex(\"desc\", [\n      \"bar\",\n      \"column\"\n    ]);\n    this.columnGroupIndices = [];\n    const barSeriesIndices = ser.getBarSeriesIndices();\n    const coreUtils = new CoreUtils(this.w);\n    this.stackedSeriesTotals = coreUtils.getStackedSeriesTotals(\n      this.w.config.series.map((s, i) => {\n        return barSeriesIndices.indexOf(i) === -1 ? i : -1;\n      }).filter((s) => {\n        return s !== -1;\n      })\n    );\n    this.barHelpers = new Helpers$1(this);\n  }\n  /** primary draw method which is called on bar object\n   * @memberof Bar\n   * @param {any[]} series - user supplied series values\n   * @param {number} seriesIndex - the index by which series will be drawn on the svg\n   * @return {Element} element which is supplied to parent chart draw method for appending\n   **/\n  draw(series, seriesIndex) {\n    var _a, _b, _c;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const coreUtils = new CoreUtils(this.w);\n    series = coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-bar-series apexcharts-plot-series\"\n    });\n    if (w.config.dataLabels.enabled) {\n      if (this.totalItems > this.barOptions.dataLabels.maxItems) {\n        console.warn(\n          \"WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts\"\n        );\n      }\n    }\n    for (let i = 0, bc = 0; i < series.length; i++, bc++) {\n      let x, y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        rel: i + 1,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n        this.translationsIndex = realIndex;\n      }\n      const translationsIndex = this.translationsIndex;\n      this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n      if (this.isPyramid) {\n        this.pyramidLayout = this.barHelpers.computePyramidLayout(series[i]);\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      let barHeight = initPositions.barHeight;\n      let barWidth = initPositions.barWidth;\n      y = initY;\n      x = initX;\n      if (!this.isHorizontal) {\n        xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      }\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      w.globals.delayedElements.push({\n        el: elDataLabelsWrap.node,\n        // On a layout-changing update the labels must stay hidden through the\n        // reflow morph (the updateOptions flow otherwise reveals them at\n        // frame 0, where they float over sliding bars). When dataLabels.animate\n        // is on the labels instead RIDE the morph (see DataLabelTransition), so\n        // keep them visible: holding would hide the very motion we want to show.\n        holdUntilComplete: !((_a = w.config.dataLabels.animate) == null ? void 0 : _a.enabled) && this.isLengthTransition(realIndex)\n      });\n      elDataLabelsWrap.node.classList.add(\"apexcharts-element-hidden\");\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const elBarShadows = graphics.group({\n        class: \"apexcharts-bar-shadows\"\n      });\n      w.globals.delayedElements.push({\n        el: elBarShadows.node\n      });\n      elBarShadows.node.classList.add(\"apexcharts-element-hidden\");\n      for (let j = 0; j < series[i].length; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        const pathsParams = {\n          indexes: {\n            i,\n            j,\n            realIndex,\n            translationsIndex,\n            bc\n          },\n          x,\n          y,\n          strokeWidth,\n          elSeries\n        };\n        if (this.isHorizontal) {\n          paths = this.drawBarPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            barHeight,\n            zeroW,\n            yDivision\n          }));\n          barWidth = this.series[i][j] / this.invertedYRatio;\n        } else {\n          paths = this.drawColumnPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            xDivision,\n            barWidth,\n            zeroH\n          }));\n          barHeight = this.series[i][j] / this.yRatio[translationsIndex];\n        }\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        if (this.isFunnel && !this.isPyramid && this.barOptions.isFunnel3d && ((_b = w.config.plotOptions.funnel) == null ? void 0 : _b.shape) !== \"trapezoid\" && this.pathArr.length && j > 0) {\n          const barShadow = this.barHelpers.drawBarShadow({\n            color: typeof pathFill.color === \"string\" && ((_c = pathFill.color) == null ? void 0 : _c.indexOf(\"url\")) === -1 ? pathFill.color : Utils$1.hexToRgba(w.globals.colors[i]),\n            prevPaths: this.pathArr[this.pathArr.length - 1],\n            currPaths: paths,\n            realIndex,\n            j\n          });\n          elBarShadows.add(barShadow);\n          if (w.config.chart.dropShadow.enabled) {\n            const filters = new Filters(this.w);\n            filters.dropShadow(barShadow, w.config.chart.dropShadow, realIndex);\n          }\n        }\n        this.pathArr.push(paths);\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        if (j > 0) {\n          xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n        }\n        yArrj.push(y);\n        this.renderSeries(__spreadProps(__spreadValues({\n          realIndex,\n          pathFill: pathFill.color\n        }, pathFill.useRangeColor ? { lineFill: pathFill.color } : {}), {\n          j,\n          i,\n          columnGroupIndex,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          barHeight: Math.abs(paths.barHeight ? paths.barHeight : barHeight),\n          barWidth: Math.abs(paths.barWidth ? paths.barWidth : barWidth),\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          elBarShadows,\n          visibleSeries: this.visibleI,\n          type: \"bar\"\n        }));\n      }\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      if (w.globals.previousPaths.length > 0) {\n        const newKeys = [];\n        for (let j = 0; j < series[i].length; j++) {\n          newKeys.push(datumKey(w, realIndex, j));\n        }\n        renderBarExitGhosts({\n          w,\n          elSeries,\n          record: this._prevRecord(realIndex),\n          newKeys,\n          isHorizontal: this.isHorizontal,\n          speed: w.config.chart.animations.dynamicAnimation.speed\n        });\n      }\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{ realIndex?: any, pathFill?: any, lineFill?: any, j?: any, i?: any, columnGroupIndex?: any, pathFrom?: any, pathTo?: any, strokeWidth?: any, elSeries?: any, x?: any, y?: any, y1?: any, y2?: any, series?: any, barHeight?: any, barWidth?: any, barXPosition?: any, barYPosition?: any, elDataLabelsWrap?: any, elGoalsMarkers?: any, elBarShadows?: any, visibleSeries?: any, type?: any, classes?: any }} opts */\n  renderSeries({\n    realIndex,\n    pathFill,\n    lineFill,\n    j,\n    i,\n    columnGroupIndex,\n    pathFrom,\n    pathTo,\n    strokeWidth,\n    elSeries,\n    x,\n    // x pos\n    y,\n    // y pos\n    y1,\n    // absolute value\n    y2,\n    // absolute value\n    series,\n    barHeight,\n    barWidth,\n    barXPosition,\n    barYPosition,\n    elDataLabelsWrap,\n    elGoalsMarkers,\n    elBarShadows,\n    visibleSeries,\n    type,\n    classes\n  }) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const emit = seriesEmitter(this.ctx, graphics);\n    let skipDrawing = false;\n    if (!elSeries._bindingsDelegated) {\n      elSeries._bindingsDelegated = true;\n      graphics.setupEventDelegation(elSeries, `.apexcharts-${type}-area`);\n    }\n    if (!lineFill) {\n      let fetchColor = function(i2) {\n        const exp = w.config.stroke.colors;\n        let c;\n        if (Array.isArray(exp) && exp.length > 0) {\n          c = exp[i2];\n          if (!c) c = \"\";\n          if (typeof c === \"function\") {\n            return c({\n              value: w.seriesData.series[i2][j],\n              dataPointIndex: j,\n              w\n            });\n          }\n        }\n        return c;\n      };\n      const checkAvailableColor = typeof w.globals.stroke.colors[realIndex] === \"function\" ? fetchColor(realIndex) : w.globals.stroke.colors[realIndex];\n      lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : checkAvailableColor;\n    }\n    const barDataLabels = new BarDataLabels(this);\n    const dataLabelsObj = (\n      /** @type {any} */\n      barDataLabels.handleBarDataLabels({\n        x,\n        y,\n        y1,\n        y2,\n        i,\n        j,\n        series,\n        realIndex,\n        columnGroupIndex,\n        barHeight,\n        barWidth,\n        barXPosition,\n        barYPosition,\n        visibleSeries\n      })\n    );\n    if (!w.globals.isBarHorizontal) {\n      if (dataLabelsObj.dataLabelsPos.dataLabelsX + Math.max(barWidth, w.globals.barPadForNumericAxis) < 0 || dataLabelsObj.dataLabelsPos.dataLabelsX - Math.max(barWidth, w.globals.barPadForNumericAxis) > w.layout.gridWidth) {\n        skipDrawing = true;\n      }\n    }\n    if (\n      /** @type {Record<string,any>} */\n      w.config.series[i].data[j] && /** @type {Record<string,any>} */\n      w.config.series[i].data[j].strokeColor\n    ) {\n      lineFill = /** @type {Record<string,any>} */\n      w.config.series[i].data[j].strokeColor;\n    }\n    if (this.isNullValue) {\n      pathFill = \"none\";\n    }\n    const animCfg = w.config.chart.animations;\n    const gradCfg = animCfg.animateGradually;\n    const staggerEnabled = gradCfg && gradCfg.enabled !== false && !(w.globals.dataChanged && this.isLayoutShift(realIndex));\n    let delay = 0;\n    if (staggerEnabled) {\n      const totalBars = w.globals.dataPoints || 1;\n      const configStep = gradCfg.delay || 0;\n      const baseDelayMs = Math.min(\n        configStep,\n        animCfg.speed * 0.5 / Math.max(1, totalBars)\n      );\n      let delayMs = computeStagger({\n        style: \"sequential\",\n        index: j,\n        baseDelay: baseDelayMs\n      });\n      if (w.config.chart.stacked) {\n        delayMs += i * baseDelayMs * 0.5;\n      }\n      const delayFactor = configStep || 1;\n      delay = delayMs / delayFactor;\n    }\n    if (!skipDrawing) {\n      const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n      const dataChangeSpeed = morphActive ? this.ctx.morphTypeChange.getSpeed() : w.config.chart.animations.dynamicAnimation.speed;\n      const renderedPath = (\n        /** @type {any} */\n        emit.renderPaths({\n          i,\n          j,\n          realIndex,\n          pathFrom,\n          pathTo,\n          stroke: lineFill,\n          strokeWidth,\n          strokeLineCap: w.config.stroke.lineCap,\n          fill: pathFill,\n          animationDelay: delay,\n          initialSpeed: w.config.chart.animations.speed,\n          dataChangeSpeed,\n          className: `apexcharts-${type}-area ${classes}`,\n          chartType: type,\n          bindEventsOnPaths: false\n        })\n      );\n      renderedPath.attr(\"clip-path\", `url(#gridRectBarMask${w.globals.cuid})`);\n      const forecast = w.config.forecastDataPoints;\n      if (forecast.count > 0) {\n        if (j >= w.globals.dataPoints - forecast.count) {\n          renderedPath.node.setAttribute(\"stroke-dasharray\", forecast.dashArray);\n          renderedPath.node.setAttribute(\"stroke-width\", forecast.strokeWidth);\n          renderedPath.node.setAttribute(\"fill-opacity\", forecast.fillOpacity);\n        }\n      }\n      if (typeof y1 !== \"undefined\" && typeof y2 !== \"undefined\") {\n        renderedPath.attr(\"data-range-y1\", y1);\n        renderedPath.attr(\"data-range-y2\", y2);\n      }\n      const filters = new Filters(this.w);\n      filters.setSelectionFilter(renderedPath, realIndex, j);\n      elSeries.add(renderedPath);\n      renderedPath.attr({\n        cy: dataLabelsObj.dataLabelsPos.bcy,\n        cx: dataLabelsObj.dataLabelsPos.bcx,\n        j,\n        val: w.seriesData.series[i][j],\n        barHeight,\n        barWidth,\n        // Datum identity for the next update's keyed join (see\n        // LengthTransition): survivors match by key, not array position.\n        \"data:pathKey\": datumKey(w, realIndex, j)\n      });\n      if (emit.kind === \"canvas\") {\n        if (!w.globals.barCanvasCoords) w.globals.barCanvasCoords = {};\n        if (!w.globals.barCanvasCoords[realIndex]) {\n          w.globals.barCanvasCoords[realIndex] = {};\n        }\n        w.globals.barCanvasCoords[realIndex][j] = {\n          cx: dataLabelsObj.dataLabelsPos.bcx,\n          cy: dataLabelsObj.dataLabelsPos.bcy,\n          barWidth\n        };\n      }\n      if (dataLabelsObj.dataLabels !== null) {\n        elDataLabelsWrap.add(dataLabelsObj.dataLabels);\n      }\n      if (dataLabelsObj.totalDataLabels) {\n        elDataLabelsWrap.add(dataLabelsObj.totalDataLabels);\n      }\n      elSeries.add(elDataLabelsWrap);\n      if (elGoalsMarkers) {\n        elSeries.add(elGoalsMarkers);\n      }\n      if (elBarShadows) {\n        elSeries.add(elBarShadows);\n      }\n    }\n    return elSeries;\n  }\n  /** @param {{indexes: any, barHeight: any, strokeWidth: any, zeroW: any, x: any, y: any, yDivision: any, elSeries: any}} opts */\n  drawBarPaths({\n    indexes,\n    barHeight,\n    strokeWidth,\n    zeroW,\n    x,\n    y,\n    yDivision,\n    elSeries\n  }) {\n    const w = this.w;\n    const i = indexes.i;\n    const j = indexes.j;\n    let barYPosition;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight;\n      barYPosition = y + barHeight * this.visibleI;\n    } else {\n      if (w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        const { nonZeroColumns, zeroEncounters } = this.barHelpers.getZeroValueEncounters({ i, j });\n        if (nonZeroColumns > 0) {\n          barHeight = this.seriesLen * barHeight / nonZeroColumns;\n        }\n        barYPosition = y + barHeight * this.visibleI;\n        barYPosition -= barHeight * zeroEncounters;\n      } else {\n        barYPosition = y + barHeight * this.visibleI;\n      }\n    }\n    const useTrapezoid = this.isFunnel && w.config.plotOptions.funnel.shape === \"trapezoid\";\n    const pyramidSeg = this.isPyramid && this.pyramidLayout ? this.pyramidLayout[j] : null;\n    const usePyramid = !!pyramidSeg;\n    if (pyramidSeg) {\n      barYPosition = pyramidSeg.y;\n      barHeight = pyramidSeg.height;\n    } else if (this.isFunnel && !useTrapezoid) {\n      const _zeroW = zeroW != null ? zeroW : 0;\n      zeroW = _zeroW - /** @type {number} */\n      /** @type {any} */\n      (this.barHelpers.getXForValue(\n        /** @type {any} */\n        this.series[i][j],\n        _zeroW\n      ) - _zeroW) / 2;\n    }\n    x = this.barHelpers.getXForValue(\n      /** @type {any} */\n      this.series[i][j],\n      zeroW != null ? zeroW : 0\n    );\n    let paths;\n    if (pyramidSeg) {\n      paths = /** @type {any} */\n      this.barHelpers.getPyramidPaths({\n        barYPosition,\n        barHeight,\n        topHalf: pyramidSeg.topHalf,\n        bottomHalf: pyramidSeg.bottomHalf,\n        realIndex: indexes.realIndex,\n        j,\n        strokeWidth,\n        w\n      });\n    } else if (useTrapezoid) {\n      paths = /** @type {any} */\n      this.barHelpers.getFunnelTrapezoidPaths({\n        barYPosition,\n        barHeight,\n        series: (\n          /** @type {any} */\n          this.series\n        ),\n        i,\n        j,\n        realIndex: indexes.realIndex,\n        strokeWidth,\n        w\n      });\n    } else {\n      paths = /** @type {any} */\n      this.barHelpers.getBarpaths({\n        barYPosition,\n        barHeight,\n        x1: zeroW,\n        x2: x,\n        strokeWidth,\n        isReversed: this.isReversed,\n        series: this.series,\n        realIndex: indexes.realIndex,\n        i,\n        j,\n        w\n      });\n    }\n    if (useTrapezoid || usePyramid) {\n      zeroW = paths.x1;\n      x = paths.x;\n    }\n    if (!w.axisFlags.isXNumeric && !usePyramid) {\n      y = y + yDivision;\n    }\n    if (usePyramid) {\n      y = barYPosition;\n    }\n    this.barHelpers.barBackground({\n      j,\n      i,\n      y1: barYPosition - barHeight * this.visibleI,\n      y2: barHeight * this.seriesLen,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      x1: zeroW,\n      x,\n      y,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        indexes.realIndex,\n        j,\n        0\n      ),\n      barYPosition,\n      barHeight\n    };\n  }\n  /** @param {{indexes: any, x: any, y: any, xDivision: any, barWidth: any, zeroH: any, strokeWidth: any, elSeries: any}} opts */\n  drawColumnPaths({\n    indexes,\n    x,\n    y,\n    xDivision,\n    barWidth,\n    zeroH,\n    strokeWidth,\n    elSeries\n  }) {\n    const w = this.w;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    const i = indexes.i;\n    const j = indexes.j;\n    const bc = indexes.bc;\n    let barXPosition;\n    if (w.axisFlags.isXNumeric) {\n      const xForNumericX = this.getBarXForNumericXAxis({\n        x,\n        j,\n        realIndex,\n        barWidth\n      });\n      x = xForNumericX.x;\n      barXPosition = xForNumericX.barXPosition;\n    } else {\n      if (w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        const { nonZeroColumns, zeroEncounters } = this.barHelpers.getZeroValueEncounters({ i, j });\n        if (nonZeroColumns > 0) {\n          barWidth = this.seriesLen * barWidth / nonZeroColumns;\n        }\n        barXPosition = x + barWidth * this.visibleI;\n        barXPosition -= barWidth * zeroEncounters;\n      } else {\n        barXPosition = x + barWidth * this.visibleI;\n      }\n    }\n    y = this.barHelpers.getYForValue(\n      /** @type {any} */\n      this.series[i][j],\n      zeroH,\n      translationsIndex\n    );\n    const paths = (\n      /** @type {any} */\n      this.barHelpers.getColumnPaths({\n        barXPosition,\n        barWidth,\n        y1: zeroH,\n        y2: y,\n        strokeWidth,\n        isReversed: this.isReversed,\n        series: this.series,\n        realIndex,\n        i,\n        j,\n        w\n      })\n    );\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    this.barHelpers.barBackground({\n      bc,\n      j,\n      i,\n      x1: barXPosition - strokeWidth / 2 - barWidth * this.visibleI,\n      x2: barWidth * this.seriesLen + strokeWidth / 2,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      x,\n      y,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        realIndex,\n        j,\n        translationsIndex\n      ),\n      barXPosition,\n      barWidth\n    };\n  }\n  /** @param {{x: any, barWidth: any, realIndex: any, j: any}} opts */\n  getBarXForNumericXAxis({ x, barWidth, realIndex, j }) {\n    const w = this.w;\n    let sxI = realIndex;\n    if (!w.seriesData.seriesX[realIndex].length) {\n      sxI = w.globals.maxValsInArrayIndex;\n    }\n    if (Utils$1.isNumber(w.seriesData.seriesX[sxI][j])) {\n      x = AxisMapping.dataXToPx(w, w.seriesData.seriesX[sxI][j]) - barWidth * this.seriesLen / 2;\n    }\n    return {\n      barXPosition: x + barWidth * this.visibleI,\n      x\n    };\n  }\n  /**\n   * The captured previous-render record for a series (last match wins, same\n   * as the historical scan order).\n   *\n   * @param {number} realIndex\n   * @returns {any | null}\n   */\n  _prevRecord(realIndex) {\n    const w = this.w;\n    let record = null;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if (gpp.paths && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(String(realIndex), 10)) {\n        record = gpp;\n      }\n    }\n    return record;\n  }\n  /**\n   * Previous paths of a series re-keyed by datum key (stamped as\n   * `data:pathKey` on each bar path and captured by Series.getPreviousPaths).\n   * Returns null when the previous render carries no keys (so the caller\n   * falls back to positional matching).\n   *\n   * @param {number} realIndex\n   * @returns {Map<string, {d: string}> | null}\n   */\n  _prevKeyedPaths(realIndex) {\n    if (!this._prevKeyed) this._prevKeyed = {};\n    if (this._prevKeyed[realIndex] !== void 0) {\n      return this._prevKeyed[realIndex];\n    }\n    const record = this._prevRecord(realIndex);\n    let map = null;\n    if (record && record.paths.every((p) => p.key != null)) {\n      const keyed = /* @__PURE__ */ new Map();\n      record.paths.forEach((p) => {\n        keyed.set(p.key, p);\n      });\n      map = keyed;\n    }\n    this._prevKeyed[realIndex] = map;\n    return map;\n  }\n  /**\n   * Whether this series' update changes its datum layout (points entered,\n   * exited, or changed identity). Layout-changing updates run all survivors\n   * on one shared clock (no per-bar stagger) so the reflow reads as a single\n   * coordinated motion; pure value updates keep the stagger.\n   *\n   * @param {number} realIndex\n   * @returns {boolean}\n   */\n  isLengthTransition(realIndex) {\n    var _a, _b;\n    if (!this._ltCache) this._ltCache = {};\n    if (this._ltCache[realIndex] !== void 0) return this._ltCache[realIndex];\n    const w = this.w;\n    let result = false;\n    if (lengthTransitionEnabled(w) && w.globals.previousPaths.length > 0) {\n      const record = this._prevRecord(realIndex);\n      const dataLen = (_b = (_a = w.seriesData.series[realIndex]) == null ? void 0 : _a.length) != null ? _b : 0;\n      if (!record) {\n        result = dataLen > 0;\n      } else if (record.paths.length !== dataLen) {\n        result = true;\n      } else {\n        const keyed = this._prevKeyedPaths(realIndex);\n        if (keyed) {\n          for (let j = 0; j < dataLen; j++) {\n            if (!keyed.has(datumKey(w, realIndex, j))) {\n              result = true;\n              break;\n            }\n          }\n        }\n      }\n    }\n    this._ltCache[realIndex] = result;\n    return result;\n  }\n  /**\n   * Whether this update moves survivors to new slots: a length change\n   * (enter/exit, via isLengthTransition) OR a pure reorder (a \"bar chart race\"\n   * swap, same datum set in a new order). Used to drop the per-bar stagger so\n   * all bars slide on one shared clock, staying locked to the axis/data labels.\n   * Broader than isLengthTransition, which is deliberately enter/exit-only\n   * (exit ghosts / baseline enters must not fire on a plain reorder).\n   * @param {number} realIndex\n   */\n  isLayoutShift(realIndex) {\n    if (this.isLengthTransition(realIndex)) return true;\n    if (!this._layoutShiftCache) this._layoutShiftCache = {};\n    if (this._layoutShiftCache[realIndex] !== void 0) {\n      return this._layoutShiftCache[realIndex];\n    }\n    const sj = seriesJoin(this.w, realIndex, true, true);\n    const result = !!(sj && sj.join.changed);\n    this._layoutShiftCache[realIndex] = result;\n    return result;\n  }\n  /**\n   * Resolve `pathFrom` for a bar on data update, joining old and new datums\n   * by KEY (category label / x value) so survivors keep their identity across\n   * inserts, prepends, and removals. Three outcomes:\n   *\n   *  - survivor with stable shape → the previous `d` (smooth reflow morph);\n   *  - survivor whose command count changed (corner state flipped, e.g. bar\n   *    became new top-of-stack) → `pathTo` (pathFrom === pathTo, a snap);\n   *  - genuinely new datum (key absent from the previous render, or the whole\n   *    series is new) → null, telling the path builder to use its\n   *    grow-from-baseline enter path.\n   *\n   * Falls back to positional (index j) matching when the previous render\n   * carries no datum keys.\n   *\n   * @param {number} realIndex - stable series index from `data:realIndex`\n   * @param {number} j - data-point index within the series\n   * @param {string} pathTo - the freshly-built path for this bar (post-roundPathCorners)\n   * @returns {string | null}\n   **/\n  getPreviousPath(realIndex, j, pathTo) {\n    const w = this.w;\n    const record = this._prevRecord(realIndex);\n    if (!record) {\n      return lengthTransitionEnabled(w) ? null : pathTo;\n    }\n    let oldD = null;\n    let isNewDatum = false;\n    const keyed = this._prevKeyedPaths(realIndex);\n    if (keyed) {\n      const prev = keyed.get(datumKey(w, realIndex, j));\n      if (prev) {\n        oldD = prev.d;\n      } else {\n        isNewDatum = true;\n      }\n    } else if (typeof record.paths[j] !== \"undefined\") {\n      oldD = record.paths[j].d;\n    } else {\n      isNewDatum = true;\n    }\n    if (oldD && Bar.pathCommandCount(oldD) === Bar.pathCommandCount(pathTo)) {\n      return oldD;\n    }\n    if (isNewDatum && lengthTransitionEnabled(w)) {\n      return null;\n    }\n    return pathTo;\n  }\n  /**\n   * Count SVG path commands (M, L, C, Q, Z, etc.). Used to detect whether\n   * two paths can be morphed safely — SVG.js requires matching command counts.\n   *\n   * @param {string} d\n   * @returns {number}\n   */\n  static pathCommandCount(d) {\n    if (!d) return 0;\n    const matches = d.match(/[A-Za-z]/g);\n    return matches ? matches.length : 0;\n  }\n}\nclass BarStacked extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {number} seriesIndex\n   */\n  draw(series, seriesIndex) {\n    const w = this.w;\n    this.graphics = new Graphics(this.w);\n    this.bar = new Bar(this.w, this.ctx, this.xyRatios);\n    const coreUtils = new CoreUtils(this.w);\n    series = coreUtils.getLogSeries(series);\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    if (w.config.chart.stackType === \"100%\") {\n      series = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex.map(\n          (_) => w.globals.seriesPercent[_]\n        )\n      ) : w.globals.seriesPercent.slice();\n    }\n    this.series = series;\n    this.barHelpers.initializeStackedPrevVars(this);\n    const ret = this.graphics.group({\n      class: \"apexcharts-bar-series apexcharts-plot-series\"\n    });\n    let x = 0;\n    let y = 0;\n    for (let i = 0, bc = 0; i < series.length; i++, bc++) {\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { groupIndex, columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      this.groupCtx = /** @type {any} */\n      this[\n        /** @type {any} */\n        w.labelData.seriesGroups[groupIndex]\n      ];\n      const xArrValues = [];\n      const yArrValues = [];\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n      let elSeries = this.graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      const elDataLabelsWrap = this.graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = this.graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const initPositions = this.initialPositions(\n        x,\n        y,\n        void 0,\n        void 0,\n        void 0,\n        void 0,\n        translationsIndex\n      );\n      const {\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroH,\n        // zeroH is the baseline where 0 meets y axis\n        zeroW\n        // zeroW is the baseline where 0 meets x axis\n      } = initPositions;\n      let barHeight = initPositions.barHeight;\n      let barWidth = initPositions.barWidth;\n      y = initPositions.y;\n      x = initPositions.x;\n      w.globals.barHeight = barHeight;\n      w.globals.barWidth = barWidth;\n      this.barHelpers.initializeStackedXYVars(this);\n      if (this.groupCtx.prevY.length === 1 && /**\n       * @param {number} val\n       */\n      this.groupCtx.prevY[0].every((val) => isNaN(val))) {\n        this.groupCtx.prevY[0] = this.groupCtx.prevY[0].map(() => zeroH);\n        this.groupCtx.prevYF[0] = this.groupCtx.prevYF[0].map(() => 0);\n      }\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const commonPathOpts = {\n          indexes: { i, j, realIndex, translationsIndex, bc },\n          strokeWidth,\n          x,\n          y,\n          elSeries,\n          columnGroupIndex,\n          seriesGroup: w.labelData.seriesGroups[groupIndex]\n        };\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        if (this.isHorizontal) {\n          paths = this.drawStackedBarPaths(__spreadProps(__spreadValues({}, commonPathOpts), {\n            zeroW,\n            barHeight,\n            yDivision\n          }));\n          barWidth = this.series[i][j] / this.invertedYRatio;\n        } else {\n          paths = this.drawStackedColumnPaths(__spreadProps(__spreadValues({}, commonPathOpts), {\n            xDivision,\n            barWidth,\n            zeroH\n          }));\n          barHeight = this.series[i][j] / this.yRatio[translationsIndex];\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        xArrValues.push(x);\n        yArrValues.push(y);\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        let classes = \"\";\n        const flipClass = w.globals.isBarHorizontal ? \"apexcharts-flip-x\" : \"apexcharts-flip-y\";\n        if (this.barHelpers.arrBorderRadius[realIndex][j] === \"bottom\" && w.seriesData.series[realIndex][j] > 0 || this.barHelpers.arrBorderRadius[realIndex][j] === \"top\" && w.seriesData.series[realIndex][j] < 0) {\n          classes = flipClass;\n        }\n        elSeries = this.renderSeries(__spreadProps(__spreadValues({\n          realIndex,\n          pathFill: pathFill.color\n        }, pathFill.useRangeColor ? { lineFill: pathFill.color } : {}), {\n          j,\n          i,\n          columnGroupIndex,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          barHeight,\n          barWidth,\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          type: \"bar\",\n          visibleSeries: columnGroupIndex,\n          classes\n        }));\n      }\n      w.globals.seriesXvalues[realIndex] = xArrValues;\n      w.globals.seriesYvalues[realIndex] = yArrValues;\n      this.groupCtx.prevY.push(this.groupCtx.yArrj);\n      this.groupCtx.prevYF.push(this.groupCtx.yArrjF);\n      this.groupCtx.prevYVal.push(this.groupCtx.yArrjVal);\n      this.groupCtx.prevX.push(this.groupCtx.xArrj);\n      this.groupCtx.prevXF.push(this.groupCtx.xArrjF);\n      this.groupCtx.prevXVal.push(this.groupCtx.xArrjVal);\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number | undefined} xDivision\n   * @param {number | undefined} yDivision\n   * @param {number | undefined} zeroH\n   * @param {number | undefined} zeroW\n   * @param {number} translationsIndex\n   */\n  initialPositions(x, y, xDivision, yDivision, zeroH, zeroW, translationsIndex) {\n    const w = this.w;\n    let barHeight, barWidth;\n    if (this.isHorizontal) {\n      yDivision = w.layout.gridHeight / w.globals.dataPoints;\n      const userBarHeight = w.config.plotOptions.bar.barHeight;\n      if (String(userBarHeight).indexOf(\"%\") === -1) {\n        barHeight = parseInt(userBarHeight, 10);\n      } else {\n        barHeight = yDivision * parseInt(userBarHeight, 10) / 100;\n      }\n      zeroW = w.globals.padHorizontal + (this.isReversed ? w.layout.gridWidth - this.baseLineInvertedY : this.baseLineInvertedY);\n      y = (yDivision - barHeight) / 2;\n    } else {\n      xDivision = w.layout.gridWidth / w.globals.dataPoints;\n      barWidth = xDivision;\n      const userColumnWidth = w.config.plotOptions.bar.columnWidth;\n      if (w.axisFlags.isXNumeric && w.globals.dataPoints > 1) {\n        xDivision = w.globals.minXDiff / this.xRatio;\n        barWidth = xDivision * parseInt(this.barOptions.columnWidth, 10) / 100;\n      } else if (String(userColumnWidth).indexOf(\"%\") === -1) {\n        barWidth = parseInt(userColumnWidth, 10);\n      } else {\n        barWidth *= parseInt(userColumnWidth, 10) / 100;\n      }\n      if (this.isReversed) {\n        zeroH = this.baseLineY[translationsIndex];\n      } else {\n        zeroH = w.layout.gridHeight - this.baseLineY[translationsIndex];\n      }\n      x = w.globals.padHorizontal + (xDivision - barWidth) / 2;\n    }\n    const subDivisions = w.globals.barGroups.length || 1;\n    return {\n      x,\n      y,\n      yDivision,\n      xDivision,\n      barHeight: (barHeight != null ? barHeight : 0) / subDivisions,\n      barWidth: (barWidth != null ? barWidth : 0) / subDivisions,\n      zeroH,\n      zeroW\n    };\n  }\n  /** @param {{indexes: any, barHeight: any, strokeWidth: any, zeroW: any, x: any, y: any, columnGroupIndex: any, seriesGroup: any, yDivision: any, elSeries: any}} opts */\n  drawStackedBarPaths({\n    indexes,\n    barHeight,\n    strokeWidth,\n    zeroW,\n    x,\n    y,\n    columnGroupIndex,\n    seriesGroup,\n    yDivision,\n    elSeries\n  }) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const barYPosition = y + columnGroupIndex * barHeight;\n    let barXPosition;\n    const i = indexes.i;\n    const j = indexes.j;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    let prevBarW = 0;\n    for (let k = 0; k < this.groupCtx.prevXF.length; k++) {\n      prevBarW = prevBarW + this.groupCtx.prevXF[k][j];\n    }\n    let gsi = i;\n    if (\n      /** @type {Record<string,any>} */\n      w.config.series[realIndex].name\n    ) {\n      gsi = seriesGroup.indexOf(\n        /** @type {Record<string,any>} */\n        w.config.series[realIndex].name\n      );\n    }\n    if (gsi > 0) {\n      let bXP = zeroW;\n      if (this.groupCtx.prevXVal[gsi - 1][j] < 0) {\n        bXP = /** @type {any} */\n        ((_a = this.series[i]) == null ? void 0 : _a[j]) >= 0 ? this.groupCtx.prevX[gsi - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2 : this.groupCtx.prevX[gsi - 1][j];\n      } else if (this.groupCtx.prevXVal[gsi - 1][j] >= 0) {\n        bXP = /** @type {any} */\n        ((_b = this.series[i]) == null ? void 0 : _b[j]) >= 0 ? this.groupCtx.prevX[gsi - 1][j] : this.groupCtx.prevX[gsi - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2;\n      }\n      barXPosition = bXP;\n    } else {\n      barXPosition = zeroW;\n    }\n    if (\n      /** @type {any} */\n      ((_c = this.series[i]) == null ? void 0 : _c[j]) === null\n    ) {\n      x = barXPosition;\n    } else {\n      x = barXPosition + /** @type {any} */\n      ((_d = this.series[i]) == null ? void 0 : _d[j]) / this.invertedYRatio - (this.isReversed ? (\n        /** @type {any} */\n        ((_e = this.series[i]) == null ? void 0 : _e[j]) / this.invertedYRatio\n      ) : 0) * 2;\n    }\n    const paths = this.barHelpers.getBarpaths({\n      barYPosition,\n      barHeight,\n      x1: barXPosition,\n      x2: x,\n      strokeWidth,\n      isReversed: this.isReversed,\n      series: this.series,\n      realIndex: indexes.realIndex,\n      seriesGroup,\n      i,\n      j,\n      w\n    });\n    this.barHelpers.barBackground({\n      j,\n      i,\n      y1: barYPosition,\n      y2: barHeight,\n      elSeries\n    });\n    y = y + yDivision;\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        realIndex,\n        j,\n        translationsIndex\n      ),\n      barXPosition,\n      barYPosition,\n      x,\n      y\n    };\n  }\n  /** @param {{indexes: any, x: any, y: any, xDivision: any, barWidth: any, zeroH: any, columnGroupIndex: any, seriesGroup: any, elSeries: any}} opts */\n  drawStackedColumnPaths({\n    indexes,\n    x,\n    y,\n    xDivision,\n    barWidth,\n    zeroH,\n    columnGroupIndex,\n    seriesGroup,\n    elSeries\n  }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const w = this.w;\n    const i = indexes.i;\n    const j = indexes.j;\n    const bc = indexes.bc;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    if (w.axisFlags.isXNumeric) {\n      let seriesVal = w.seriesData.seriesX[realIndex][j];\n      if (!seriesVal) seriesVal = 0;\n      x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2 * w.globals.barGroups.length;\n    }\n    const barXPosition = x + columnGroupIndex * barWidth;\n    let barYPosition;\n    let prevBarH = 0;\n    for (let k = 0; k < this.groupCtx.prevYF.length; k++) {\n      prevBarH = prevBarH + (!isNaN(this.groupCtx.prevYF[k][j]) ? this.groupCtx.prevYF[k][j] : 0);\n    }\n    let gsi = i;\n    if (seriesGroup) {\n      gsi = seriesGroup.indexOf(w.seriesData.seriesNames[realIndex]);\n    }\n    if (gsi > 0 && !w.axisFlags.isXNumeric || gsi > 0 && w.axisFlags.isXNumeric && w.seriesData.seriesX[realIndex - 1][j] === w.seriesData.seriesX[realIndex][j]) {\n      let bYP;\n      let prevYValue;\n      const p = Math.min(this.yRatio.length + 1, realIndex + 1);\n      if (this.groupCtx.prevY[gsi - 1] !== void 0 && this.groupCtx.prevY[gsi - 1].length) {\n        for (let ii = 1; ii < p; ii++) {\n          if (!isNaN((_a = this.groupCtx.prevY[gsi - ii]) == null ? void 0 : _a[j])) {\n            prevYValue = this.groupCtx.prevY[gsi - ii][j];\n            break;\n          }\n        }\n      }\n      for (let ii = 1; ii < p; ii++) {\n        if (((_b = this.groupCtx.prevYVal[gsi - ii]) == null ? void 0 : _b[j]) < 0) {\n          bYP = /** @type {any} */\n          ((_c = this.series[i]) == null ? void 0 : _c[j]) >= 0 ? prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2 : prevYValue;\n          break;\n        } else if (((_d = this.groupCtx.prevYVal[gsi - ii]) == null ? void 0 : _d[j]) >= 0) {\n          bYP = /** @type {any} */\n          ((_e = this.series[i]) == null ? void 0 : _e[j]) >= 0 ? prevYValue : prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2;\n          break;\n        }\n      }\n      if (typeof bYP === \"undefined\") bYP = w.layout.gridHeight;\n      if (\n        /**\n         * @param {number} val\n         */\n        ((_f = this.groupCtx.prevYF[0]) == null ? void 0 : _f.every((val) => val === 0)) && this.groupCtx.prevYF.slice(1, gsi).every(\n          (arr) => arr.every((val) => isNaN(val))\n        )\n      ) {\n        barYPosition = zeroH;\n      } else {\n        barYPosition = bYP;\n      }\n    } else {\n      barYPosition = zeroH;\n    }\n    if (\n      /** @type {any} */\n      (_g = this.series[i]) == null ? void 0 : _g[j]\n    ) {\n      y = barYPosition - /** @type {any} */\n      ((_h = this.series[i]) == null ? void 0 : _h[j]) / this.yRatio[translationsIndex] + (this.isReversed ? (\n        /** @type {any} */\n        ((_i = this.series[i]) == null ? void 0 : _i[j]) / this.yRatio[translationsIndex]\n      ) : 0) * 2;\n    } else {\n      y = barYPosition;\n    }\n    const paths = this.barHelpers.getColumnPaths({\n      barXPosition,\n      barWidth,\n      y1: barYPosition,\n      y2: y,\n      yRatio: this.yRatio[translationsIndex],\n      strokeWidth: this.strokeWidth,\n      isReversed: this.isReversed,\n      series: this.series,\n      seriesGroup,\n      realIndex: indexes.realIndex,\n      i,\n      j,\n      w\n    });\n    this.barHelpers.barBackground({\n      bc,\n      j,\n      i,\n      x1: barXPosition,\n      x2: barWidth,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        realIndex,\n        j,\n        0\n      ),\n      barXPosition,\n      x: w.axisFlags.isXNumeric ? x : x + xDivision,\n      y\n    };\n  }\n}\nfunction buildJitterGroups({\n  w,\n  points,\n  seedA,\n  seedB,\n  center,\n  halfExtent,\n  alongFn,\n  isHorizontal,\n  options: options2,\n  clampAt\n}) {\n  const opts = options2;\n  if (!opts || opts.show === false) return [];\n  if (!points || !points.length) return [];\n  const maxPoints = opts.maxPoints || 3e3;\n  const stride = points.length > maxPoints ? Math.ceil(points.length / maxPoints) : 1;\n  const r = opts.size != null ? opts.size : 2.5;\n  const jitterFrac = opts.jitter != null ? opts.jitter : 0.5;\n  const jitterPx = halfExtent * jitterFrac;\n  const constrain = opts.constrainToViolin !== false && typeof clampAt === \"function\";\n  const isSquare = opts.shape === \"square\";\n  const scale = opts.colorScale;\n  const useScale = scale && Array.isArray(scale.colors) && scale.colors.length > 0;\n  const steps = useScale ? Math.max(2, scale.steps || 24) : 1;\n  const sMin = useScale && scale.min != null ? scale.min : w.globals.minY;\n  const sMax = useScale && scale.max != null ? scale.max : w.globals.maxY;\n  const span = sMax - sMin || 1;\n  const buckets = useScale ? new Array(steps).fill(\"\") : [\"\"];\n  for (let k = 0; k < points.length; k += stride) {\n    const v = points[k];\n    const a = alongFn(v);\n    let off = (hash01(seedA * 7919 + seedB * 100003 + k) - 0.5) * 2 * jitterPx;\n    if (constrain) {\n      const cap = (\n        /** @type {(v:number)=>number} */\n        clampAt(v)\n      );\n      if (off > cap) off = cap;\n      if (off < -cap) off = -cap;\n    }\n    const px = isHorizontal ? a : center + off;\n    const py = isHorizontal ? center + off : a;\n    const sub = isSquare ? squareSubPath(px, py, r) : circleSubPath(px, py, r);\n    if (useScale) {\n      let t = (v - sMin) / span;\n      if (t < 0) t = 0;\n      if (t > 1) t = 1;\n      buckets[Math.round(t * (steps - 1))] += sub;\n    } else {\n      buckets[0] += sub;\n    }\n  }\n  if (!useScale) {\n    return buckets[0] ? [{ fill: null, d: buckets[0] }] : [];\n  }\n  const groups = [];\n  for (let b = 0; b < steps; b++) {\n    if (!buckets[b]) continue;\n    groups.push({\n      fill: rampColorAt(scale.colors, b / (steps - 1)),\n      d: buckets[b]\n    });\n  }\n  return groups;\n}\nfunction renderJitter({\n  graphics,\n  w,\n  elSeries,\n  pointsByCat,\n  options: options2,\n  distributed,\n  realIndex,\n  wrapClass,\n  pointClass\n}) {\n  if (!options2 || options2.show === false || !pointsByCat.length) return;\n  const pOpacity = options2.opacity != null ? options2.opacity : 0.9;\n  const strokeColor = options2.strokeColor != null ? options2.strokeColor : \"#fff\";\n  const strokeW = options2.strokeWidth != null ? options2.strokeWidth : 1;\n  const willAnimateIn = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged;\n  const elPointsWrap = graphics.group({\n    class: willAnimateIn ? `${wrapClass} apexcharts-element-hidden` : wrapClass\n  });\n  if (willAnimateIn) {\n    w.globals.delayedElements.push({ el: elPointsWrap.node });\n  }\n  pointsByCat.forEach(({ groups, j }) => {\n    const catColor = distributed ? w.globals.colors[j] : w.globals.colors[realIndex];\n    const fc = options2.fillColor;\n    const defaultFill = fc === \"series\" ? catColor : fc === \"series-dark\" ? darkenColor(catColor, 0.45) : fc || darkenColor(catColor, 0.45);\n    groups.forEach((g) => {\n      const elPoints = graphics.drawPath({\n        d: g.d,\n        fill: g.fill != null ? g.fill : defaultFill,\n        stroke: strokeW > 0 ? strokeColor : \"none\",\n        strokeWidth: strokeW,\n        fillOpacity: pOpacity,\n        classes: pointClass\n      });\n      elPoints.attr(\"data:realIndex\", realIndex);\n      elPoints.attr(\"j\", j);\n      elPoints.attr(\"clip-path\", `url(#gridRectBarMask${w.globals.cuid})`);\n      elPoints.node.style.pointerEvents = \"none\";\n      elPointsWrap.add(elPoints);\n    });\n  });\n  elSeries.add(elPointsWrap);\n}\nfunction darkenColor(color, amount) {\n  const rgb = Utils$1.parseHex(color);\n  if (!rgb) return color;\n  const f = Math.max(0, 1 - amount);\n  return `rgb(${Math.round(rgb[0] * f)},${Math.round(rgb[1] * f)},${Math.round(rgb[2] * f)})`;\n}\nfunction rampColorAt(colors, t) {\n  if (!colors.length) return \"#000\";\n  if (colors.length === 1) return colors[0];\n  const x = Math.max(0, Math.min(1, t)) * (colors.length - 1);\n  const i = Math.floor(x);\n  const frac = x - i;\n  const c0 = Utils$1.parseHex(colors[i]) || [0, 0, 0];\n  const c1 = Utils$1.parseHex(colors[Math.min(i + 1, colors.length - 1)]) || c0;\n  const mix = (a, b) => Math.round(a + (b - a) * frac);\n  return `rgb(${mix(c0[0], c1[0])},${mix(c0[1], c1[1])},${mix(c0[2], c1[2])})`;\n}\nfunction hash01(n) {\n  let h = (n ^ 2654435769) >>> 0;\n  h = Math.imul(h ^ h >>> 16, 73244475);\n  h = Math.imul(h ^ h >>> 16, 73244475);\n  return ((h ^ h >>> 16) >>> 0) / 4294967296;\n}\nfunction circleSubPath(px, py, r) {\n  return `M ${px - r} ${py} a ${r} ${r} 0 1 0 ${2 * r} 0 a ${r} ${r} 0 1 0 ${-2 * r} 0 `;\n}\nfunction squareSubPath(px, py, r) {\n  return `M ${px - r} ${py - r} h ${2 * r} v ${2 * r} h ${-2 * r} z `;\n}\nclass BoxCandleStick extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} seriesIndex\n   */\n  // @ts-ignore -- BoxCandleStick.draw has an extra ctype param compared to Bar.draw\n  draw(series, ctype, seriesIndex) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const type = w.globals.comboCharts ? ctype : w.config.chart.type;\n    const fill = new Fill(this.w);\n    this.candlestickOptions = this.w.config.plotOptions.candlestick;\n    this.boxOptions = this.w.config.plotOptions.boxPlot;\n    this.isHorizontal = w.config.plotOptions.bar.horizontal;\n    this.isOHLC = this.candlestickOptions && this.candlestickOptions.type === \"ohlc\";\n    this.coreUtils = new CoreUtils(this.w);\n    series = this.coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = this.coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: `apexcharts-${type}-series apexcharts-plot-series`\n    });\n    for (let i = 0; i < series.length; i++) {\n      this.isBoxPlot = w.config.chart.type === \"boxPlot\" || /** @type {Record<string,any>} */\n      w.config.series[i].type === \"boxPlot\";\n      let x;\n      let y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        barHeight,\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        barWidth,\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      y = initY;\n      x = initX;\n      xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const boxPointsOpts = this.isBoxPlot ? this.boxOptions.points : null;\n      const pointsByCat = [];\n      const gridW = w.layout.gridWidth;\n      const cullBuffer = barWidth != null ? barWidth : 0;\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        const pathsParams = {\n          indexes: {\n            i,\n            j,\n            realIndex,\n            translationsIndex\n          },\n          x,\n          y,\n          strokeWidth,\n          elSeries\n        };\n        if (this.isHorizontal) {\n          paths = this.drawHorizontalBoxPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            yDivision,\n            barHeight,\n            zeroW\n          }));\n        } else {\n          paths = this.drawVerticalBoxPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            xDivision,\n            barWidth,\n            zeroH,\n            cullBounds: { lo: -cullBuffer, hi: gridW + cullBuffer }\n          }));\n        }\n        y = paths.y;\n        x = paths.x;\n        if (j > 0) {\n          xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n        }\n        yArrj.push(y);\n        if (paths.culled) {\n          continue;\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        paths.pathTo.forEach(\n          (pathTo, pi) => {\n            const lineFill = !this.isBoxPlot && this.candlestickOptions.wick.useFillColor ? paths.color[pi] : w.globals.stroke.colors[i];\n            const pathFill = fill.fillPath({\n              seriesNumber: realIndex,\n              dataPointIndex: j,\n              color: paths.color[pi],\n              value: series[i][j]\n            });\n            this.renderSeries({\n              realIndex,\n              pathFill,\n              lineFill,\n              j,\n              i,\n              pathFrom: paths.pathFrom,\n              pathTo,\n              strokeWidth,\n              elSeries,\n              x,\n              y,\n              series,\n              columnGroupIndex,\n              barHeight,\n              barWidth,\n              elDataLabelsWrap,\n              elGoalsMarkers,\n              visibleSeries: this.visibleI,\n              type: w.config.chart.type\n            });\n          }\n        );\n        if (boxPointsOpts && boxPointsOpts.show !== false) {\n          const pts = (_a = w.candleData.seriesBoxPoints[realIndex]) == null ? void 0 : _a[j];\n          if (pts && pts.length) {\n            const logVal = (v) => (\n              /** @type {any} */\n              this.coreUtils.getLogValAtSeriesIndex(\n                v,\n                realIndex\n              )\n            );\n            let center, halfExtent, alongFn;\n            if (this.isHorizontal) {\n              const yRatio = this.invertedYRatio;\n              const bh = barHeight != null ? barHeight : 0;\n              const z = zeroW != null ? zeroW : 0;\n              center = paths.barYPosition + bh / 2;\n              halfExtent = bh / 2;\n              alongFn = (v) => z + logVal(v) / yRatio;\n            } else {\n              const yRatio = this.yRatio[translationsIndex];\n              const bw = barWidth != null ? barWidth : 0;\n              const z = zeroH != null ? zeroH : 0;\n              center = paths.barXPosition + bw / 2;\n              halfExtent = bw / 2;\n              alongFn = (v) => z - logVal(v) / yRatio;\n            }\n            const groups = buildJitterGroups({\n              w,\n              points: pts,\n              seedA: realIndex,\n              seedB: j,\n              center,\n              halfExtent,\n              alongFn,\n              isHorizontal: this.isHorizontal,\n              options: boxPointsOpts\n            });\n            if (groups.length) pointsByCat.push({ groups, j });\n          }\n        }\n      }\n      if (boxPointsOpts) {\n        renderJitter({\n          graphics,\n          w,\n          elSeries,\n          pointsByCat,\n          options: boxPointsOpts,\n          distributed: w.config.plotOptions.bar.distributed,\n          realIndex,\n          wrapClass: \"apexcharts-boxPlot-points-wrap\",\n          pointClass: \"apexcharts-boxPlot-points\"\n        });\n      }\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, zeroH: any, strokeWidth: any, cullBounds?: {lo: number, hi: number}|null}} opts */\n  drawVerticalBoxPaths({\n    indexes,\n    x,\n    xDivision,\n    barWidth,\n    zeroH,\n    strokeWidth,\n    cullBounds = null\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const i = indexes.i;\n    const j = indexes.j;\n    const { colors: candleColors } = w.config.plotOptions.candlestick;\n    const { colors: boxColors } = this.boxOptions;\n    const realIndex = indexes.realIndex;\n    const getColor = (color2) => Array.isArray(color2) ? color2[realIndex] : color2;\n    const colorPos = getColor(candleColors.upward);\n    const colorNeg = getColor(candleColors.downward);\n    const yRatio = this.yRatio[indexes.translationsIndex];\n    const ohlc = this.getOHLCValue(realIndex, j);\n    let l1 = zeroH;\n    let l2 = zeroH;\n    let color = ohlc.o < ohlc.c ? [colorPos] : [colorNeg];\n    if (this.isBoxPlot) {\n      color = [getColor(boxColors.lower), getColor(boxColors.upper)];\n    }\n    let y1 = Math.min(ohlc.o, ohlc.c);\n    let y2 = Math.max(ohlc.o, ohlc.c);\n    let m = ohlc.m;\n    if (w.axisFlags.isXNumeric) {\n      x = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n    }\n    const barXPosition = x + barWidth * this.visibleI;\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      y1 = zeroH;\n      y2 = zeroH;\n    } else {\n      y1 = zeroH - y1 / yRatio;\n      y2 = zeroH - y2 / yRatio;\n      l1 = zeroH - ohlc.h / yRatio;\n      l2 = zeroH - ohlc.l / yRatio;\n      m = zeroH - ohlc.m / yRatio;\n    }\n    if (cullBounds && (barXPosition + barWidth < cullBounds.lo || barXPosition > cullBounds.hi)) {\n      return {\n        pathTo: null,\n        pathFrom: null,\n        x: w.axisFlags.isXNumeric ? x : x + xDivision,\n        y: y2,\n        barXPosition,\n        color,\n        culled: true\n      };\n    }\n    let pathTo;\n    if (this.isOHLC) {\n      const centerX = barXPosition + barWidth / 2;\n      const openY = zeroH - ohlc.o / yRatio;\n      const closeY = zeroH - ohlc.c / yRatio;\n      pathTo = [\n        graphics.move(centerX, l1) + graphics.line(centerX, l2) + graphics.move(centerX, openY) + graphics.line(barXPosition, openY) + graphics.move(centerX, closeY) + graphics.line(barXPosition + barWidth, closeY)\n      ];\n    } else if (this.isBoxPlot) {\n      pathTo = [\n        graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 4, l1) + graphics.line(barXPosition + barWidth - barWidth / 4, l1) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, m) + graphics.line(barXPosition, m) + graphics.line(barXPosition, y1 + strokeWidth / 2),\n        graphics.move(barXPosition, m) + graphics.line(barXPosition + barWidth, m) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth - barWidth / 4, l2) + graphics.line(barXPosition + barWidth / 4, l2) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition, y2) + graphics.line(barXPosition, m) + \"z\"\n      ];\n    } else {\n      pathTo = [\n        graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2)\n      ];\n    }\n    let pathFrom = null;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo[0]);\n    }\n    if (pathFrom == null) {\n      pathFrom = graphics.move(barXPosition + barWidth / 2, y1) + graphics.move(barXPosition, y1);\n    }\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x,\n      y: y2,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        realIndex,\n        j,\n        indexes.translationsIndex\n      ),\n      barXPosition,\n      color\n    };\n  }\n  /** @param {{indexes: any, y: any, yDivision: any, barHeight: any, zeroW: any, strokeWidth: any}} opts */\n  drawHorizontalBoxPaths({\n    indexes,\n    y,\n    yDivision,\n    barHeight,\n    zeroW,\n    strokeWidth\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const i = indexes.i;\n    const j = indexes.j;\n    const realIndex = indexes.realIndex;\n    const { colors: candleColors } = w.config.plotOptions.candlestick;\n    const { colors: boxColors } = this.boxOptions;\n    const getColor = (color2) => Array.isArray(color2) ? color2[realIndex] : color2;\n    const yRatio = this.invertedYRatio;\n    const ohlc = this.getOHLCValue(realIndex, j);\n    let color = ohlc.o < ohlc.c ? [getColor(candleColors.upward)] : [getColor(candleColors.downward)];\n    if (this.isBoxPlot) {\n      color = [getColor(boxColors.lower), getColor(boxColors.upper)];\n    }\n    let l1 = zeroW;\n    let l2 = zeroW;\n    let x1 = Math.min(ohlc.o, ohlc.c);\n    let x2 = Math.max(ohlc.o, ohlc.c);\n    let m = ohlc.m;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.invertedXRatio - barHeight / 2;\n    }\n    const barYPosition = y + barHeight * this.visibleI;\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      x1 = zeroW;\n      x2 = zeroW;\n    } else {\n      x1 = zeroW + x1 / yRatio;\n      x2 = zeroW + x2 / yRatio;\n      l1 = zeroW + ohlc.h / yRatio;\n      l2 = zeroW + ohlc.l / yRatio;\n      m = zeroW + ohlc.m / yRatio;\n    }\n    const pathTo = [\n      graphics.move(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight / 2) + graphics.line(l1, barYPosition + barHeight / 2) + graphics.line(l1, barYPosition + barHeight / 2 - barHeight / 4) + graphics.line(l1, barYPosition + barHeight / 2 + barHeight / 4) + graphics.line(l1, barYPosition + barHeight / 2) + graphics.line(x1, barYPosition + barHeight / 2) + graphics.line(x1, barYPosition + barHeight) + graphics.line(m, barYPosition + barHeight) + graphics.line(m, barYPosition) + graphics.line(x1 + strokeWidth / 2, barYPosition),\n      graphics.move(m, barYPosition) + graphics.line(m, barYPosition + barHeight) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x2, barYPosition + barHeight / 2) + graphics.line(l2, barYPosition + barHeight / 2) + graphics.line(l2, barYPosition + barHeight - barHeight / 4) + graphics.line(l2, barYPosition + barHeight / 4) + graphics.line(l2, barYPosition + barHeight / 2) + graphics.line(x2, barYPosition + barHeight / 2) + graphics.line(x2, barYPosition) + graphics.line(m, barYPosition) + \"z\"\n    ];\n    let pathFrom = null;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo[0]);\n    }\n    if (pathFrom == null) {\n      pathFrom = graphics.move(x1, barYPosition + barHeight / 2) + graphics.move(x1, barYPosition);\n    }\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: x2,\n      y,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        realIndex,\n        j,\n        0\n      ),\n      barYPosition,\n      color\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  getOHLCValue(i, j) {\n    const w = this.w;\n    const coreUtils = this.coreUtils;\n    const getCandleVal = (arr) => arr[i] && arr[i][j] != null ? (\n      /** @type {any} */\n      coreUtils.getLogValAtSeriesIndex(arr[i][j], i)\n    ) : 0;\n    const h = getCandleVal(w.candleData.seriesCandleH);\n    const o = getCandleVal(w.candleData.seriesCandleO);\n    const m = getCandleVal(w.candleData.seriesCandleM);\n    const c = getCandleVal(w.candleData.seriesCandleC);\n    const l = getCandleVal(w.candleData.seriesCandleL);\n    return {\n      o: this.isBoxPlot ? h : o,\n      h: this.isBoxPlot ? o : h,\n      m,\n      l: this.isBoxPlot ? c : l,\n      c: this.isBoxPlot ? l : c\n    };\n  }\n}\nconst tangents = (points) => {\n  const m = finiteDifferences(points);\n  const n = points.length - 1;\n  const ε = 1e-6;\n  const tgts = [];\n  let a, b, d, s;\n  for (let i = 0; i < n; i++) {\n    d = slope(points[i], points[i + 1]);\n    if (Math.abs(d) < ε) {\n      m[i] = m[i + 1] = 0;\n    } else {\n      a = m[i] / d;\n      b = m[i + 1] / d;\n      s = a * a + b * b;\n      if (s > 9) {\n        s = d * 3 / Math.sqrt(s);\n        m[i] = s * a;\n        m[i + 1] = s * b;\n      }\n    }\n  }\n  for (let i = 0; i <= n; i++) {\n    s = (points[Math.min(n, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n    tgts.push([s || 0, m[i] * s || 0]);\n  }\n  return tgts;\n};\nconst svgPath = (points) => {\n  let p = \"\";\n  for (let i = 0; i < points.length; i++) {\n    const point = points[i];\n    const n = point.length;\n    if (n > 4) {\n      p += `C${point[0]}, ${point[1]}`;\n      p += `, ${point[2]}, ${point[3]}`;\n      p += `, ${point[4]}, ${point[5]}`;\n    } else if (n > 2) {\n      p += `S${point[0]}, ${point[1]}`;\n      p += `, ${point[2]}, ${point[3]}`;\n    }\n  }\n  return p;\n};\nconst spline = {\n  /**\n   * Convert 'points' to bezier\n   * @param {any[]} points\n   * @returns {any[]}\n   */\n  points(points) {\n    const tgts = tangents(points);\n    const p = points[1];\n    const p0 = points[0];\n    const pts = [];\n    const t = tgts[1];\n    const t0 = tgts[0];\n    pts.push(p0, [\n      p0[0] + t0[0],\n      p0[1] + t0[1],\n      p[0] - t[0],\n      p[1] - t[1],\n      p[0],\n      p[1]\n    ]);\n    for (let i = 2, n = tgts.length; i < n; i++) {\n      const p2 = points[i];\n      const t2 = tgts[i];\n      pts.push([p2[0] - t2[0], p2[1] - t2[1], p2[0], p2[1]]);\n    }\n    return pts;\n  },\n  /**\n   * Slice out a segment of 'points'\n   * @param {any[]} points\n   * @param {Number} start\n   * @param {Number} end\n   * @returns {any[]}\n   */\n  slice(points, start, end) {\n    const pts = points.slice(start, end);\n    if (start) {\n      if (end - start > 1 && pts[1].length < 6) {\n        const n = pts[0].length;\n        pts[1] = [\n          pts[0][n - 2] * 2 - pts[0][n - 4],\n          pts[0][n - 1] * 2 - pts[0][n - 3]\n        ].concat(pts[1]);\n      }\n      pts[0] = pts[0].slice(-2);\n    }\n    return pts;\n  }\n};\nfunction slope(p0, p1) {\n  return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n}\nfunction finiteDifferences(points) {\n  const m = [];\n  let p0 = points[0];\n  let p1 = points[1];\n  let d = m[0] = slope(p0, p1);\n  let i = 1;\n  for (let n = points.length - 1; i < n; i++) {\n    p0 = p1;\n    p1 = points[i + 1];\n    m[i] = (d + (d = slope(p0, p1))) * 0.5;\n  }\n  m[i] = d;\n  return m;\n}\nclass Violin extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} [seriesIndex]\n   */\n  // @ts-ignore -- Violin.draw has extra ctype param compared to Bar.draw\n  draw(series, ctype, seriesIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    this.violinOptions = w.config.plotOptions.violin;\n    this.pointsOptions = this.violinOptions.points;\n    this.bandwidthScale = this.violinOptions.bandwidthScale || 1;\n    this.normalize = this.violinOptions.normalize || \"individual\";\n    this.distributed = w.config.plotOptions.bar.distributed;\n    this.isHorizontal = w.config.plotOptions.bar.horizontal;\n    this.coreUtils = new CoreUtils(this.w);\n    series = this.coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = this.coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-violin-series apexcharts-plot-series\"\n    });\n    for (let i = 0; i < series.length; i++) {\n      let x;\n      let y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: \"apexcharts-series\",\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        barHeight,\n        yDivision,\n        zeroW,\n        x: initX,\n        barWidth,\n        xDivision,\n        zeroH\n      } = initPositions;\n      y = initY;\n      x = initX;\n      xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      this.seriesMaxWeight = 0;\n      if (this.normalize === \"group\") {\n        const dens = w.violinData.seriesViolinDensity[realIndex] || [];\n        dens.forEach((d) => {\n          if (d && d.maxWeight > this.seriesMaxWeight) {\n            this.seriesMaxWeight = d.maxWeight;\n          }\n        });\n      }\n      const pointsByViolin = [];\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const paths = this.isHorizontal ? this.drawHorizontalViolin({\n          indexes: { i, j, realIndex, translationsIndex },\n          y,\n          yDivision,\n          barHeight,\n          zeroW\n        }) : this.drawVerticalViolin({\n          indexes: { i, j, realIndex, translationsIndex },\n          x,\n          xDivision,\n          barWidth,\n          zeroH\n        });\n        x = paths.x;\n        y = paths.y;\n        if (j > 0) {\n          xArrj.push(paths.center);\n        }\n        yArrj.push(paths.alongRepresentative);\n        const pointGroups = this.buildPointsSubPath({\n          realIndex,\n          j,\n          center: paths.center,\n          halfExtent: paths.halfExtent,\n          alongFn: paths.alongFn,\n          density: paths.density,\n          maxWeight: paths.maxWeight\n        });\n        if (pointGroups.length) pointsByViolin.push({ groups: pointGroups, j });\n        const pathFill = fill.fillPath({\n          // distributed → color per category (data point) instead of per series\n          seriesNumber: this.distributed ? j : realIndex,\n          dataPointIndex: j,\n          color: this.distributed ? w.globals.colors[j] : void 0,\n          value: series[i][j]\n        });\n        this.renderSeries({\n          realIndex,\n          pathFill,\n          lineFill: w.globals.stroke.colors[realIndex],\n          j,\n          i,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          columnGroupIndex,\n          barHeight,\n          barWidth,\n          elDataLabelsWrap,\n          visibleSeries: this.visibleI,\n          type: \"violin\"\n        });\n        const bodyEl = elSeries.node.querySelector(\n          `path.apexcharts-violin-area[j='${j}']`\n        );\n        if (bodyEl && isFinite(paths.alongRepresentative)) {\n          bodyEl.setAttribute(\n            this.isHorizontal ? \"cx\" : \"cy\",\n            `${paths.alongRepresentative}`\n          );\n        }\n      }\n      renderJitter({\n        graphics,\n        w,\n        elSeries,\n        pointsByCat: pointsByViolin,\n        options: this.pointsOptions,\n        distributed: this.distributed,\n        realIndex,\n        wrapClass: \"apexcharts-violin-points-wrap\",\n        pointClass: \"apexcharts-violin-points\"\n      });\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, zeroH: any}} opts */\n  drawVerticalViolin({ indexes, x, xDivision, barWidth, zeroH }) {\n    var _a;\n    const w = this.w;\n    const { realIndex, j, translationsIndex } = indexes;\n    const yRatio = this.yRatio[translationsIndex];\n    if (w.axisFlags.isXNumeric) {\n      x = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n    }\n    const barXPosition = x + barWidth * this.visibleI;\n    const center = barXPosition + barWidth / 2;\n    const halfExtent = barWidth / 2;\n    const density = this.getDensity(realIndex, j);\n    const maxWeight = this.effectiveMaxWeight(density);\n    const alongFn = (v) => zeroH - this.logVal(v, realIndex) / yRatio;\n    const pathTo = this.buildBodyPath({\n      nodes: density.nodes,\n      center,\n      halfExtent,\n      maxWeight,\n      vertical: true,\n      alongFn,\n      collapsed: false\n    });\n    let pathFrom = null;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\n      pathFrom = this.buildBodyPath({\n        nodes: density.nodes,\n        center,\n        halfExtent,\n        maxWeight,\n        vertical: true,\n        alongFn,\n        collapsed: true\n      });\n    }\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x,\n      y: zeroH,\n      center,\n      halfExtent,\n      alongFn,\n      density,\n      maxWeight,\n      alongRepresentative: alongFn((_a = this.series[indexes.i][j]) != null ? _a : 0)\n    };\n  }\n  /** @param {{indexes: any, y: any, yDivision: any, barHeight: any, zeroW: any}} opts */\n  drawHorizontalViolin({ indexes, y, yDivision, barHeight, zeroW }) {\n    var _a;\n    const w = this.w;\n    const { realIndex, j } = indexes;\n    const yRatio = this.invertedYRatio;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.invertedXRatio - barHeight / 2;\n    }\n    const barYPosition = y + barHeight * this.visibleI;\n    const center = barYPosition + barHeight / 2;\n    const halfExtent = barHeight / 2;\n    const density = this.getDensity(realIndex, j);\n    const maxWeight = this.effectiveMaxWeight(density);\n    const alongFn = (v) => zeroW + this.logVal(v, realIndex) / yRatio;\n    const pathTo = this.buildBodyPath({\n      nodes: density.nodes,\n      center,\n      halfExtent,\n      maxWeight,\n      vertical: false,\n      alongFn,\n      collapsed: false\n    });\n    let pathFrom = null;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\n      pathFrom = this.buildBodyPath({\n        nodes: density.nodes,\n        center,\n        halfExtent,\n        maxWeight,\n        vertical: false,\n        alongFn,\n        collapsed: true\n      });\n    }\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: zeroW,\n      y,\n      center,\n      halfExtent,\n      alongFn,\n      maxWeight,\n      density,\n      alongRepresentative: alongFn((_a = this.series[indexes.i][j]) != null ? _a : 0)\n    };\n  }\n  /**\n   * Read the parsed density for one violin and return sorted, de-duplicated\n   * nodes (strictly increasing value — a hard requirement for the spline).\n   * @param {number} realIndex\n   * @param {number} j\n   */\n  getDensity(realIndex, j) {\n    var _a;\n    const w = this.w;\n    const d = (_a = w.violinData.seriesViolinDensity[realIndex]) == null ? void 0 : _a[j];\n    if (!d || !d.values.length) {\n      return { nodes: [], maxWeight: 0 };\n    }\n    const order = d.values.map(\n      (_, k) => k\n    );\n    order.sort(\n      (a, b) => d.values[a] - d.values[b]\n    );\n    const nodes = [];\n    let prevV = null;\n    for (const k of order) {\n      const v = d.values[k];\n      if (prevV !== null && v === prevV) continue;\n      nodes.push({ v, w: d.weights[k] });\n      prevV = v;\n    }\n    return { nodes, maxWeight: d.maxWeight };\n  }\n  /**\n   * The peak weight used to scale a violin's width: its own ('individual') or\n   * the densest violin in the series ('group', preserving relative widths).\n   * @param {{maxWeight:number}} density\n   */\n  effectiveMaxWeight(density) {\n    return this.normalize === \"group\" && this.seriesMaxWeight > 0 ? this.seriesMaxWeight : density.maxWeight;\n  }\n  /**\n   * Build the closed, smooth violin outline. The value axis is the monotonic\n   * parameter for the spline (vertical → Y, horizontal → X); the spline is fed\n   * with that axis first and the control points swapped back to screen space.\n   *\n   * @param {{nodes:{v:number,w:number}[], center:number, halfExtent:number, maxWeight:number, vertical:boolean, alongFn:(v:number)=>number, collapsed:boolean}} opts\n   */\n  buildBodyPath({\n    nodes,\n    center,\n    halfExtent,\n    maxWeight,\n    vertical,\n    alongFn,\n    collapsed\n  }) {\n    const graphics = new Graphics(this.w);\n    if (nodes.length === 0) {\n      const a = alongFn(0);\n      return vertical ? graphics.move(center, a) + graphics.line(center, a) : graphics.move(a, center) + graphics.line(a, center);\n    }\n    const wpxOf = (weight) => {\n      if (collapsed || maxWeight <= 0) return 0;\n      const wp = weight / maxWeight * halfExtent * this.bandwidthScale;\n      return Math.min(halfExtent, Math.max(0, wp));\n    };\n    const rightPts = [];\n    const leftPts = [];\n    for (let k = 0; k < nodes.length; k++) {\n      const a = alongFn(nodes[k].v);\n      const wp = wpxOf(nodes[k].w);\n      if (vertical) {\n        rightPts.push([center + wp, a]);\n        leftPts.push([center - wp, a]);\n      } else {\n        rightPts.push([a, center + wp]);\n        leftPts.push([a, center - wp]);\n      }\n    }\n    leftPts.reverse();\n    return this.smoothSegment(rightPts, vertical, false) + this.smoothSegment(leftPts, vertical, true) + \"z\";\n  }\n  /**\n   * Emit one edge as a smooth (monotone-cubic) path segment, or a polyline\n   * when there are too few nodes for a spline.\n   *\n   * @param {[number,number][]} screenPts ordered screen points for this edge\n   * @param {boolean} monotonicIsY true when the value axis is vertical\n   * @param {boolean} continued false → start with M; true → start with L (joins the previous edge)\n   */\n  smoothSegment(screenPts, monotonicIsY, continued) {\n    const graphics = new Graphics(this.w);\n    const first = screenPts[0];\n    let d = continued ? graphics.line(first[0], first[1]) : graphics.move(first[0], first[1]);\n    const usePolyline = screenPts.length < 3 || !this.strictlyMonotonic(screenPts, monotonicIsY);\n    if (usePolyline) {\n      for (let k = 1; k < screenPts.length; k++) {\n        d += graphics.line(screenPts[k][0], screenPts[k][1]);\n      }\n      return d;\n    }\n    const input = screenPts.map(\n      ([px, py]) => monotonicIsY ? [py, px] : [px, py]\n    );\n    const bez = spline.points(input);\n    const out = monotonicIsY ? bez.map(swapPairs) : bez;\n    d += svgPath(out);\n    return d;\n  }\n  /**\n   * @param {[number,number][]} screenPts\n   * @param {boolean} monotonicIsY\n   */\n  strictlyMonotonic(screenPts, monotonicIsY) {\n    const axis = monotonicIsY ? 1 : 0;\n    for (let k = 1; k < screenPts.length; k++) {\n      if (screenPts[k][axis] === screenPts[k - 1][axis]) return false;\n    }\n    return true;\n  }\n  /**\n   * Build the jitter sub-paths for one violin, grouped for rendering. Returns\n   * `[]` when points are hidden or absent. Normally one group (single dot\n   * colour); with `points.colorScale` the dots are bucketed by value into shade\n   * groups, each carrying its ramp colour. Offsets are a deterministic index\n   * hash (SSR-safe); points beyond maxPoints are stride-thinned.\n   *\n   * @param {{realIndex:number, j:number, center:number, halfExtent:number, alongFn:(v:number)=>number, density:{nodes:{v:number,w:number}[], maxWeight:number}, maxWeight:number}} opts\n   * @returns {{fill:string|null, d:string}[]}\n   */\n  buildPointsSubPath({\n    realIndex,\n    j,\n    center,\n    halfExtent,\n    alongFn,\n    density,\n    maxWeight\n  }) {\n    var _a;\n    return buildJitterGroups({\n      w: this.w,\n      points: (_a = this.w.violinData.seriesViolinPoints[realIndex]) == null ? void 0 : _a[j],\n      seedA: realIndex,\n      seedB: j,\n      center,\n      halfExtent,\n      alongFn,\n      isHorizontal: this.isHorizontal,\n      options: this.pointsOptions,\n      // Violin clamps jitter to the density half-width at each value so dots\n      // stay inside the shape.\n      clampAt: (v) => this.halfWidthAtValue(v, density, halfExtent, maxWeight)\n    });\n  }\n  /**\n   * Density half-width (pixels) at a given value — used to keep jitter inside\n   * the violin. Linear interpolation between the two nearest density nodes.\n   * @param {number} value\n   * @param {{nodes:{v:number,w:number}[], maxWeight:number}} density\n   * @param {number} halfExtent\n   * @param {number} [maxWeightOverride] use the group max for 'group' normalize\n   */\n  halfWidthAtValue(value, density, halfExtent, maxWeightOverride) {\n    const { nodes } = density;\n    const maxWeight = maxWeightOverride != null ? maxWeightOverride : density.maxWeight;\n    if (!nodes.length || maxWeight <= 0) return 0;\n    const toPx = (weight) => Math.min(\n      halfExtent,\n      weight / maxWeight * halfExtent * this.bandwidthScale\n    );\n    if (value <= nodes[0].v) return toPx(nodes[0].w);\n    if (value >= nodes[nodes.length - 1].v)\n      return toPx(nodes[nodes.length - 1].w);\n    for (let k = 1; k < nodes.length; k++) {\n      if (value <= nodes[k].v) {\n        const a = nodes[k - 1];\n        const b = nodes[k];\n        const t = b.v === a.v ? 0 : (value - a.v) / (b.v - a.v);\n        return toPx(a.w + (b.w - a.w) * t);\n      }\n    }\n    return 0;\n  }\n  /**\n   * Apply the y-axis log transform to a value when that axis is logarithmic,\n   * mirroring BoxCandleStick. Linear axes return the value unchanged.\n   * @param {number} value\n   * @param {number} realIndex\n   */\n  logVal(value, realIndex) {\n    return (\n      /** @type {any} */\n      this.coreUtils.getLogValAtSeriesIndex(\n        value,\n        realIndex\n      )\n    );\n  }\n}\nfunction swapPairs(arr) {\n  const out = [];\n  for (let k = 0; k < arr.length; k += 2) {\n    out.push(arr[k + 1], arr[k]);\n  }\n  return out;\n}\nclass TreemapHelpers {\n  /**\n   * @param {import('../../../types/internal').ChartStateW} w\n   * @param {import('../../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n  }\n  checkColorRange() {\n    const w = this.w;\n    let negRange = false;\n    const chartOpts = w.config.plotOptions[w.config.chart.type];\n    if (chartOpts.colorScale.ranges.length > 0) {\n      chartOpts.colorScale.ranges.map((range) => {\n        if (range.from <= 0) {\n          negRange = true;\n        }\n      });\n    }\n    return negRange;\n  }\n  /**\n   * @param {string} chartType\n   * @param {number} i\n   * @param {number} j\n   * @param {any} negRange\n   */\n  getShadeColor(chartType, i, j, negRange) {\n    const w = this.w;\n    let colorShadePercent = 1;\n    const shadeIntensity = w.config.plotOptions[chartType].shadeIntensity;\n    const colorProps = this.determineColor(chartType, i, j);\n    if (\n      /** @type {any} */\n      w.globals.hasNegs || negRange\n    ) {\n      if (w.config.plotOptions[chartType].reverseNegativeShade) {\n        if (colorProps.percent < 0) {\n          colorShadePercent = colorProps.percent / 100 * (shadeIntensity * 1.25);\n        } else {\n          colorShadePercent = (1 - colorProps.percent / 100) * (shadeIntensity * 1.25);\n        }\n      } else {\n        if (colorProps.percent <= 0) {\n          colorShadePercent = 1 - (1 + colorProps.percent / 100) * shadeIntensity;\n        } else {\n          colorShadePercent = (1 - colorProps.percent / 100) * shadeIntensity;\n        }\n      }\n    } else {\n      colorShadePercent = 1 - colorProps.percent / 100;\n      if (chartType === \"treemap\") {\n        colorShadePercent = (1 - colorProps.percent / 100) * (shadeIntensity * 1.25);\n      }\n    }\n    let color = colorProps.color;\n    const utils = new Utils$1();\n    if (w.config.plotOptions[chartType].enableShades) {\n      if (this.w.config.theme.mode === \"dark\") {\n        const shadeColor = utils.shadeColor(\n          colorShadePercent * -1,\n          colorProps.color\n        );\n        color = Utils$1.hexToRgba(\n          Utils$1.isColorHex(shadeColor) ? shadeColor : Utils$1.rgb2hex(shadeColor),\n          w.config.fill.opacity\n        );\n      } else {\n        const shadeColor = utils.shadeColor(colorShadePercent, colorProps.color);\n        color = Utils$1.hexToRgba(\n          Utils$1.isColorHex(shadeColor) ? shadeColor : Utils$1.rgb2hex(shadeColor),\n          w.config.fill.opacity\n        );\n      }\n    }\n    return { color, colorProps };\n  }\n  /**\n   * @param {string} chartType\n   * @param {number} i\n   * @param {number} j\n   */\n  determineColor(chartType, i, j) {\n    const w = this.w;\n    const val = w.seriesData.series[i][j];\n    const chartOpts = w.config.plotOptions[chartType];\n    let seriesNumber = chartOpts.colorScale.inverse ? j : i;\n    if (chartOpts.distributed && w.config.chart.type === \"treemap\") {\n      seriesNumber = j;\n    }\n    let color = w.globals.colors[seriesNumber];\n    let foreColor = null;\n    let min;\n    let max;\n    if (!chartOpts.distributed && chartType === \"heatmap\") {\n      min = w.globals.minY;\n      max = w.globals.maxY;\n    } else {\n      const row = w.seriesData.series[i];\n      min = row.length ? row[0] : 0;\n      max = min;\n      for (let k = 1; k < row.length; k++) {\n        if (row[k] < min) min = row[k];\n        if (row[k] > max) max = row[k];\n      }\n    }\n    if (typeof chartOpts.colorScale.min !== \"undefined\") {\n      min = chartOpts.colorScale.min < w.globals.minY ? chartOpts.colorScale.min : w.globals.minY;\n      max = chartOpts.colorScale.max > w.globals.maxY ? chartOpts.colorScale.max : w.globals.maxY;\n    }\n    const total = Math.abs(max) + Math.abs(min);\n    let percent = total === 0 ? 0 : 100 * val / total;\n    if (chartOpts.colorScale.ranges.length > 0) {\n      const colorRange = chartOpts.colorScale.ranges;\n      colorRange.map((range) => {\n        if (val >= range.from && val <= range.to) {\n          color = range.color;\n          foreColor = range.foreColor ? range.foreColor : null;\n          min = range.from;\n          max = range.to;\n          const rTotal = Math.abs(max) + Math.abs(min);\n          percent = rTotal === 0 ? 0 : 100 * val / rTotal;\n        }\n      });\n    }\n    return {\n      color,\n      foreColor,\n      percent\n    };\n  }\n  /** @param {{ text?: any, x?: any, y?: any, i?: any, j?: any, colorProps?: any, fontSize?: any, series?: any }} opts */\n  calculateDataLabels({ text, x, y, i, j, colorProps, fontSize }) {\n    const w = this.w;\n    const dataLabelsConfig = w.config.dataLabels;\n    const graphics = new Graphics(this.w);\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    let elDataLabelsWrap = null;\n    if (dataLabelsConfig.enabled) {\n      elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-data-labels\"\n      });\n      const offX = resolveDataLabelOffset(dataLabelsConfig.offsetX, w, i, j);\n      const offY = resolveDataLabelOffset(dataLabelsConfig.offsetY, w, i, j);\n      const dataLabelsX = x + offX;\n      const dataLabelsY = y + parseFloat(dataLabelsConfig.style.fontSize) / 3 + offY;\n      dataLabels.plotDataLabelsText({\n        x: dataLabelsX,\n        y: dataLabelsY,\n        text,\n        i,\n        j,\n        color: colorProps.foreColor,\n        parent: elDataLabelsWrap,\n        fontSize,\n        dataLabelsConfig\n      });\n    }\n    return elDataLabelsWrap;\n  }\n}\nclass HeatMap {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  constructor(w, ctx, xyRatios) {\n    this.ctx = ctx;\n    this.w = w;\n    this.xRatio = xyRatios.xRatio;\n    this.yRatio = xyRatios.yRatio;\n    this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n    this.helpers = new TreemapHelpers(w, ctx);\n    this.rectRadius = this.w.config.plotOptions.heatmap.radius;\n    this.strokeWidth = this.w.config.stroke.show ? this.w.config.stroke.width : 0;\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const emit = seriesEmitter(this.ctx, graphics);\n    const useCanvas = emit !== graphics && typeof emit.drawRectCell === \"function\";\n    const ret = graphics.group({\n      class: \"apexcharts-heatmap\"\n    });\n    ret.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n    const xDivision = w.layout.gridWidth / w.globals.dataPoints;\n    const yDivision = w.layout.gridHeight / w.seriesData.series.length;\n    const isContinuousX = (w.config.xaxis.type === \"numeric\" || w.config.xaxis.type === \"datetime\") && w.axisFlags.isXNumeric && this.xRatio > 0;\n    let binPx = xDivision;\n    if (isContinuousX) {\n      const diff = w.globals.minXDiff;\n      binPx = Number.isFinite(diff) && diff > 0 ? diff / this.xRatio : xDivision;\n    }\n    const cellFillOpacity = Array.isArray(w.config.fill.opacity) ? (_a = w.config.fill.opacity[0]) != null ? _a : 1 : (_b = w.config.fill.opacity) != null ? _b : 1;\n    let y1 = 0;\n    let rev = false;\n    this.negRange = this.helpers.checkColorRange();\n    const heatSeries = series.slice();\n    if (w.config.yaxis[0].reversed) {\n      rev = true;\n      heatSeries.reverse();\n    }\n    for (let i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) {\n      const elSeries = graphics.group({\n        class: `apexcharts-series apexcharts-heatmap-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, i);\n      if (!useCanvas) {\n        graphics.setupEventDelegation(elSeries, \".apexcharts-heatmap-rect\");\n      }\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(elSeries, shadow, i);\n      }\n      let x1 = 0;\n      const shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity;\n      let j = 0;\n      for (let dIndex = 0; dIndex < w.globals.dataPoints; dIndex++) {\n        if (!isContinuousX && w.seriesData.seriesX.length && !w.globals.allSeriesHasEqualX) {\n          if (w.globals.minX + w.globals.minXDiff * dIndex < w.seriesData.seriesX[i][j]) {\n            x1 = x1 + xDivision;\n            continue;\n          }\n        }\n        if (j >= heatSeries[i].length) break;\n        const cellW = isContinuousX ? binPx : xDivision;\n        if (isContinuousX) {\n          const xVal = w.seriesData.seriesX[i] ? w.seriesData.seriesX[i][j] : null;\n          if (xVal == null || xVal !== xVal) {\n            j++;\n            continue;\n          }\n          x1 = (xVal - w.globals.minX) / this.xRatio - binPx / 2;\n        }\n        const heatColor = this.helpers.getShadeColor(\n          w.config.chart.type,\n          i,\n          j,\n          this.negRange\n        );\n        let color = heatColor.color;\n        const heatColorProps = heatColor.colorProps;\n        if (w.config.fill.type === \"image\") {\n          const fill = new Fill(this.w);\n          color = fill.fillPath({\n            seriesNumber: i,\n            dataPointIndex: j,\n            opacity: (\n              /** @type {any} */\n              w.globals.hasNegs ? heatColorProps.percent < 0 ? 1 - (1 + heatColorProps.percent / 100) : shadeIntensity + heatColorProps.percent / 100 : heatColorProps.percent / 100\n            ),\n            patternID: Utils$1.randomId(),\n            width: w.config.fill.image.width ? w.config.fill.image.width : cellW,\n            height: w.config.fill.image.height ? w.config.fill.image.height : yDivision\n          });\n        }\n        const radius = this.rectRadius;\n        const stroke = w.config.plotOptions.heatmap.useFillColorAsStroke ? color : w.globals.stroke.colors[0];\n        if (useCanvas) {\n          emit.drawRectCell(x1, y1, cellW, yDivision, {\n            fill: color,\n            fillOpacity: cellFillOpacity,\n            stroke,\n            strokeWidth: this.strokeWidth,\n            radius,\n            seriesIndex: i,\n            dataPointIndex: j\n          });\n        } else {\n          const rect = graphics.drawRect(x1, y1, cellW, yDivision, radius);\n          rect.attr({\n            cx: x1,\n            cy: y1\n          });\n          rect.node.classList.add(\"apexcharts-heatmap-rect\");\n          elSeries.add(rect);\n          rect.attr({\n            fill: color,\n            i,\n            index: i,\n            j,\n            val: series[i][j],\n            \"stroke-width\": this.strokeWidth,\n            stroke,\n            color\n          });\n          if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n            let speed = 1;\n            if (!w.globals.resized) {\n              speed = w.config.chart.animations.speed;\n            }\n            this.animateHeatMap(rect, x1, y1, cellW, yDivision, speed, i, j);\n          }\n          if (w.globals.dataChanged) {\n            let speed = 1;\n            if (this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n              speed = this.dynamicAnim.speed;\n              let colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color;\n              if (!colorFrom) colorFrom = \"rgba(255, 255, 255, 0)\";\n              this.animateHeatColor(\n                rect,\n                Utils$1.isColorHex(colorFrom) ? colorFrom : Utils$1.rgb2hex(colorFrom),\n                Utils$1.isColorHex(color) ? color : Utils$1.rgb2hex(color),\n                speed\n              );\n            }\n          }\n        }\n        const formatter = w.config.dataLabels.formatter;\n        const formattedText = formatter(w.seriesData.series[i][j], {\n          value: w.seriesData.series[i][j],\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n        const dataLabels = this.helpers.calculateDataLabels({\n          text: formattedText,\n          x: x1 + cellW / 2,\n          y: y1 + yDivision / 2,\n          i,\n          j,\n          colorProps: heatColorProps,\n          series: heatSeries\n        });\n        if (dataLabels !== null) {\n          elSeries.add(dataLabels);\n        }\n        if (!isContinuousX) x1 = x1 + xDivision;\n        j++;\n      }\n      y1 = y1 + yDivision;\n      ret.add(elSeries);\n    }\n    const yAxisScale = (\n      /** @type {any[]} */\n      w.globals.yAxisScale[0].result.slice()\n    );\n    if (w.config.yaxis[0].reversed) {\n      yAxisScale.unshift(\"\");\n    } else {\n      yAxisScale.push(\"\");\n    }\n    w.globals.yAxisScale[0].result = yAxisScale;\n    return ret;\n  }\n  /**\n   * @param {any} el\n   * @param {number} x\n   * @param {number} y\n   * @param {number} width\n   * @param {number} height\n   * @param {number} speed\n   * @param {number} [row] - series index (heatmap row)\n   * @param {number} [col] - data point index (heatmap column)\n   */\n  animateHeatMap(el, x, y, width, height, speed, row = 0, col = 0) {\n    const w = this.w;\n    const animations = new Animations(this.w);\n    const animCfg = w.config.chart.animations;\n    const gradCfg = animCfg.animateGradually;\n    const staggerEnabled = gradCfg && gradCfg.enabled !== false;\n    let delay = 0;\n    if (staggerEnabled) {\n      const seriesCount = (w.seriesData.series || []).length || 1;\n      const pointsCount = w.globals.dataPoints || 1;\n      const maxDiag = seriesCount + pointsCount - 2;\n      const baseDelay = Math.min(\n        gradCfg.delay || 0,\n        speed * 0.5 / Math.max(1, maxDiag)\n      );\n      delay = computeStagger({\n        style: \"diagonal\",\n        index: col,\n        row,\n        col,\n        baseDelay\n      });\n    }\n    animations.animateRect(\n      el,\n      {\n        x: x + width / 2,\n        y: y + height / 2,\n        width: 0,\n        height: 0\n      },\n      {\n        x,\n        y,\n        width,\n        height\n      },\n      speed,\n      () => {\n        animations.animationCompleted(el);\n      },\n      delay\n    );\n  }\n  /**\n   * @param {any} el\n   * @param {string} colorFrom\n   * @param {string} colorTo\n   * @param {number} speed\n   */\n  animateHeatColor(el, colorFrom, colorTo, speed) {\n    el.attr({\n      fill: colorFrom\n    }).animate(speed).attr({\n      fill: colorTo\n    });\n  }\n}\nclass Helpers5 {\n  /**\n   * @param {import('../../../charts/Line').default} lineCtx\n   */\n  constructor(lineCtx) {\n    this.w = lineCtx.w;\n    this.lineCtx = lineCtx;\n  }\n  /**\n   * @param {number} i\n   * @param {any[]} series\n   */\n  sameValueSeriesFix(i, series) {\n    const w = this.w;\n    if (w.config.fill.type === \"gradient\" || w.config.fill.type[i] === \"gradient\") {\n      const coreUtils = new CoreUtils(this.lineCtx.w);\n      if (coreUtils.seriesHaveSameValues(i)) {\n        const gSeries = series[i].slice();\n        gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 1e-6;\n        series[i] = gSeries;\n      }\n    }\n    return series;\n  }\n  /** @param {{series: any, realIndex: any, x: any, y: any, i: any, j: any, prevY: any}} opts */\n  calculatePoints({ series, realIndex, x, y, i, j, prevY }) {\n    const w = this.w;\n    const ptX = [];\n    const ptY = [];\n    let xPT1st = this.lineCtx.categoryAxisCorrection + w.config.markers.offsetX;\n    if (w.axisFlags.isXNumeric) {\n      xPT1st = (w.seriesData.seriesX[realIndex][0] - w.globals.minX) / this.lineCtx.xRatio + w.config.markers.offsetX;\n    }\n    if (j === 0) {\n      ptX.push(xPT1st);\n      ptY.push(\n        Utils$1.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null\n      );\n    }\n    ptX.push(x + w.config.markers.offsetX);\n    ptY.push(\n      Utils$1.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null\n    );\n    return {\n      x: ptX,\n      y: ptY\n    };\n  }\n  /** @param {{pathFromLine: any, pathFromArea: any, realIndex: any}} opts */\n  checkPreviousPaths({ pathFromLine, pathFromArea, realIndex }) {\n    const w = this.w;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if ((gpp.type === \"line\" || gpp.type === \"area\") && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) {\n        if (gpp.type === \"line\") {\n          this.lineCtx.appendPathFrom = false;\n          pathFromLine = w.globals.previousPaths[pp].paths[0].d;\n        } else if (gpp.type === \"area\") {\n          this.lineCtx.appendPathFrom = false;\n          pathFromArea = w.globals.previousPaths[pp].paths[0].d;\n          if (w.config.stroke.show && w.globals.previousPaths[pp].paths[1]) {\n            pathFromLine = w.globals.previousPaths[pp].paths[1].d;\n          }\n        }\n      }\n    }\n    return {\n      pathFromLine,\n      pathFromArea\n    };\n  }\n  /** @param {{i: any, realIndex: any, series: any, prevY: any, lineYPosition: any, translationsIndex: any}} opts */\n  determineFirstPrevY({\n    i,\n    realIndex,\n    series,\n    prevY,\n    lineYPosition,\n    translationsIndex\n  }) {\n    var _a, _b, _c;\n    const w = this.w;\n    const stackSeries = w.config.chart.stacked && !w.globals.comboCharts || w.config.chart.stacked && w.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {any} */\n    ((_a = this.w.config.series[realIndex]) == null ? void 0 : _a.type) === \"bar\" || /** @type {any} */\n    ((_b = this.w.config.series[realIndex]) == null ? void 0 : _b.type) === \"column\");\n    if (typeof ((_c = series[i]) == null ? void 0 : _c[0]) !== \"undefined\") {\n      if (stackSeries) {\n        if (i > 0) {\n          lineYPosition = this.lineCtx.prevSeriesY[i - 1][0];\n        } else {\n          lineYPosition = this.lineCtx.zeroY;\n        }\n      } else {\n        lineYPosition = this.lineCtx.zeroY;\n      }\n      prevY = lineYPosition - series[i][0] / this.lineCtx.yRatio[translationsIndex] + (this.lineCtx.isReversed ? series[i][0] / this.lineCtx.yRatio[translationsIndex] : 0) * 2;\n    } else {\n      if (stackSeries && i > 0 && typeof series[i][0] === \"undefined\") {\n        for (let s = i - 1; s >= 0; s--) {\n          if (series[s][0] !== null && typeof series[s][0] !== \"undefined\") {\n            lineYPosition = this.lineCtx.prevSeriesY[s][0];\n            prevY = lineYPosition;\n            break;\n          }\n        }\n      }\n    }\n    return {\n      prevY,\n      lineYPosition\n    };\n  }\n}\nclass Line {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @param {boolean} isPointsChart\n   */\n  constructor(w, ctx, xyRatios, isPointsChart) {\n    this.ctx = ctx;\n    this.w = w;\n    this.xyRatios = xyRatios;\n    this.xRatio = 0;\n    this.yRatio = [];\n    this.zRatio = 0;\n    this.baseLineY = [];\n    this.pointsChart = !(this.w.config.chart.type !== \"bubble\" && this.w.config.chart.type !== \"scatter\") || isPointsChart;\n    this.scatter = new Scatter(this.w, this.ctx);\n    this.noNegatives = this.w.globals.minX === Number.MAX_VALUE;\n    this.lineHelpers = new Helpers5(this);\n    this.markers = new Markers(this.w, this.ctx);\n    this.prevSeriesY = [];\n    this.categoryAxisCorrection = 0;\n    this.yaxisIndex = 0;\n    this.xDivision = 0;\n    this.zeroY = 0;\n    this.areaBottomY = 0;\n    this.strokeWidth = 0;\n    this.isReversed = false;\n    this.appendPathFrom = false;\n    this.elSeries = null;\n    this.elPointsMain = null;\n    this.elDataLabelsWrap = null;\n    this._elLastPointsWrap = null;\n  }\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} seriesIndex\n   * @param {any} seriesRangeEnd\n   */\n  draw(series, ctype, seriesIndex, seriesRangeEnd) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const type = w.globals.comboCharts ? ctype : w.config.chart.type;\n    const ret = graphics.group({\n      class: `apexcharts-${type}-series apexcharts-plot-series`\n    });\n    const coreUtils = new CoreUtils(this.w);\n    this.yRatio = this.xyRatios.yRatio;\n    this.zRatio = this.xyRatios.zRatio;\n    this.xRatio = this.xyRatios.xRatio;\n    this.baseLineY = this.xyRatios.baseLineY;\n    series = coreUtils.getLogSeries(series);\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.prevSeriesY = [];\n    const allSeries = [];\n    for (let i = 0; i < series.length; i++) {\n      series = this.lineHelpers.sameValueSeriesFix(i, series);\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const translationsIndex = this.yRatio.length > 1 ? realIndex : 0;\n      this._initSerieVariables(series, i, realIndex);\n      const yArrj = [];\n      const y2Arrj = [];\n      const xArrj = [];\n      let x = w.globals.padHorizontal + this.categoryAxisCorrection;\n      const y = 1;\n      const linePaths = [];\n      const areaPaths = [];\n      Series.addCollapsedClassToSeries(this.w, this.elSeries, realIndex);\n      if (w.axisFlags.isXNumeric && w.seriesData.seriesX.length > 0) {\n        x = (w.seriesData.seriesX[realIndex][0] - w.globals.minX) / this.xRatio;\n      }\n      xArrj.push(x);\n      const pX = x;\n      let pY2;\n      const prevX = pX;\n      let prevY = this.zeroY;\n      let prevY2 = this.zeroY;\n      const lineYPosition = 0;\n      const firstPrevY = this.lineHelpers.determineFirstPrevY({\n        i,\n        realIndex,\n        series,\n        prevY,\n        lineYPosition,\n        translationsIndex\n      });\n      prevY = firstPrevY.prevY;\n      if (w.config.stroke.curve === \"monotoneCubic\" && series[i][0] === null) {\n        yArrj.push(null);\n      } else {\n        yArrj.push(prevY);\n      }\n      const pY = prevY;\n      let firstPrevY2;\n      if (type === \"rangeArea\") {\n        firstPrevY2 = this.lineHelpers.determineFirstPrevY({\n          i,\n          realIndex,\n          series: seriesRangeEnd,\n          prevY: prevY2,\n          lineYPosition,\n          translationsIndex\n        });\n        prevY2 = firstPrevY2.prevY;\n        pY2 = prevY2;\n        y2Arrj.push(yArrj[0] !== null ? prevY2 : null);\n      }\n      const pathsFrom = this._calculatePathsFrom({\n        type,\n        series,\n        i,\n        realIndex,\n        translationsIndex,\n        prevX,\n        prevY,\n        prevY2\n      });\n      const rYArrj = [yArrj[0]];\n      const rY2Arrj = [y2Arrj[0]];\n      const iteratingOpts = {\n        type,\n        series,\n        realIndex,\n        translationsIndex,\n        i,\n        x,\n        y,\n        pX,\n        pY,\n        pathsFrom,\n        linePaths,\n        areaPaths,\n        seriesIndex,\n        lineYPosition,\n        xArrj,\n        yArrj,\n        y2Arrj,\n        seriesRangeEnd\n      };\n      const paths = this._iterateOverDataPoints(__spreadProps(__spreadValues({}, iteratingOpts), {\n        iterations: type === \"rangeArea\" ? series[i].length - 1 : void 0,\n        isRangeStart: true\n      }));\n      if (type === \"rangeArea\") {\n        const pathsFrom2 = this._calculatePathsFrom({\n          series: seriesRangeEnd,\n          i,\n          realIndex,\n          prevX,\n          prevY: prevY2\n        });\n        const rangePaths = this._iterateOverDataPoints(__spreadProps(__spreadValues({}, iteratingOpts), {\n          series: seriesRangeEnd,\n          xArrj: [x],\n          yArrj: rYArrj,\n          y2Arrj: rY2Arrj,\n          pY: pY2,\n          areaPaths: paths.areaPaths,\n          pathsFrom: pathsFrom2,\n          iterations: seriesRangeEnd[i].length - 1,\n          isRangeStart: false\n        }));\n        const segments = paths.linePaths.length / 2;\n        for (let s = 0; s < segments; s++) {\n          paths.linePaths[s] = rangePaths.linePaths[s + segments] + paths.linePaths[s];\n        }\n        paths.linePaths.splice(segments);\n        paths.pathFromLine = rangePaths.pathFromLine + paths.pathFromLine;\n      } else if (!/z\\s*$/i.test(paths.pathFromArea)) {\n        paths.pathFromArea += \"z\";\n      }\n      this._handlePaths({ type, realIndex, i, paths });\n      this.elSeries.add(this.elPointsMain);\n      this.elSeries.add(this.elDataLabelsWrap);\n      allSeries.push(this.elSeries);\n    }\n    if (typeof /** @type {Record<string,any>} */\n    ((_a = w.config.series[0]) == null ? void 0 : _a.zIndex) !== \"undefined\") {\n      allSeries.sort(\n        (a, b) => Number(a.node.getAttribute(\"zIndex\")) - Number(b.node.getAttribute(\"zIndex\"))\n      );\n    }\n    if (w.config.chart.stacked) {\n      for (let s = allSeries.length - 1; s >= 0; s--) {\n        ret.add(allSeries[s]);\n      }\n    } else {\n      for (let s = 0; s < allSeries.length; s++) {\n        ret.add(allSeries[s]);\n      }\n    }\n    return ret;\n  }\n  /**\n   * @param {any[]} series\n   * @param {number} i\n   * @param {number} realIndex\n   */\n  _initSerieVariables(series, i, realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    this.xDivision = w.layout.gridWidth / (w.globals.dataPoints - (w.config.xaxis.tickPlacement === \"on\" ? 1 : 0));\n    this.strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width;\n    let translationsIndex = 0;\n    if (this.yRatio.length > 1) {\n      this.yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n      translationsIndex = realIndex;\n    }\n    this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n    this.zeroY = w.layout.gridHeight - this.baseLineY[translationsIndex] - (this.isReversed ? w.layout.gridHeight : 0) + (this.isReversed ? this.baseLineY[translationsIndex] * 2 : 0);\n    this.areaBottomY = this.zeroY;\n    if (this.zeroY > w.layout.gridHeight || w.config.plotOptions.area.fillTo === \"end\") {\n      this.areaBottomY = w.layout.gridHeight;\n    }\n    this.categoryAxisCorrection = this.xDivision / 2;\n    const seriesItem = (\n      /** @type {Record<string,any>} */\n      w.config.series[realIndex]\n    );\n    this.elSeries = graphics.group({\n      class: `apexcharts-series`,\n      zIndex: typeof seriesItem.zIndex !== \"undefined\" ? seriesItem.zIndex : realIndex,\n      seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex])\n    });\n    this.elPointsMain = graphics.group({\n      class: \"apexcharts-series-markers-wrap\",\n      \"data:realIndex\": realIndex\n    });\n    this.markers.resetSeriesWrapCache();\n    this._elLastPointsWrap = null;\n    if (w.globals.hasNullValues) {\n      const firstPoint = this.markers.plotChartMarkers({\n        pointsPos: {\n          x: [0],\n          y: [w.layout.gridHeight + w.globals.markers.largestSize]\n        },\n        seriesIndex: i,\n        j: 0,\n        pSize: 0.1,\n        alwaysDrawMarker: true,\n        isVirtualPoint: true\n      });\n      if (firstPoint !== null) {\n        this.elPointsMain.add(firstPoint);\n      }\n    }\n    this.elDataLabelsWrap = graphics.group({\n      class: \"apexcharts-datalabels\",\n      \"data:realIndex\": realIndex\n    });\n    const longestSeries = series[i].length === w.globals.dataPoints;\n    this.elSeries.attr({\n      \"data:longestSeries\": longestSeries,\n      rel: i + 1,\n      \"data:realIndex\": realIndex\n    });\n    this.appendPathFrom = true;\n  }\n  /** @param {{ type?: any, series?: any, i?: any, realIndex?: any, translationsIndex?: any, prevX?: any, prevY?: any, prevY2?: any }} opts */\n  _calculatePathsFrom({\n    type,\n    series,\n    i,\n    realIndex,\n    translationsIndex,\n    prevX,\n    prevY,\n    prevY2\n  }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let linePath, areaPath, pathFromLine, pathFromArea;\n    if (series[i][0] === null) {\n      for (let s = 0; s < series[i].length; s++) {\n        if (series[i][s] !== null) {\n          prevX = this.xDivision * s;\n          prevY = this.zeroY - series[i][s] / this.yRatio[translationsIndex];\n          linePath = graphics.move(prevX, prevY);\n          areaPath = graphics.move(prevX, this.areaBottomY);\n          break;\n        }\n      }\n    } else {\n      linePath = graphics.move(prevX, prevY);\n      if (type === \"rangeArea\") {\n        linePath = graphics.move(prevX, prevY2) + graphics.line(prevX, prevY);\n      }\n      areaPath = graphics.move(prevX, this.areaBottomY) + graphics.line(prevX, prevY);\n    }\n    pathFromLine = graphics.move(0, this.areaBottomY) + graphics.line(0, this.areaBottomY);\n    pathFromArea = graphics.move(0, this.areaBottomY) + graphics.line(0, this.areaBottomY);\n    if (w.globals.previousPaths.length > 0) {\n      const pathFrom = this.lineHelpers.checkPreviousPaths({\n        pathFromLine,\n        pathFromArea,\n        realIndex\n      });\n      pathFromLine = pathFrom.pathFromLine;\n      pathFromArea = pathFrom.pathFromArea;\n    }\n    return {\n      prevX,\n      prevY,\n      linePath,\n      areaPath,\n      pathFromLine,\n      pathFromArea\n    };\n  }\n  /** @param {{type: any, realIndex: any, i: any, paths: any}} opts */\n  _handlePaths({ type, realIndex, i, paths }) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const emit = seriesEmitter(this.ctx, graphics);\n    const fill = new Fill(this.w);\n    this.prevSeriesY.push(paths.yArrj);\n    let streamScroll = null;\n    if ((type === \"line\" || type === \"area\") && w.globals.dataChanged) {\n      streamScroll = detectStreamScroll(w, realIndex, paths.xArrj, paths.yArrj);\n    }\n    let reconcile = null;\n    if (!streamScroll && (type === \"line\" || type === \"area\")) {\n      reconcile = reconcileSeriesPaths(w, {\n        type,\n        realIndex,\n        pathFromLine: paths.pathFromLine,\n        pathFromArea: paths.pathFromArea,\n        linePaths: paths.linePaths,\n        areaPaths: paths.areaPaths\n      });\n    }\n    w.globals.seriesXvalues[realIndex] = paths.xArrj;\n    w.globals.seriesYvalues[realIndex] = paths.yArrj;\n    const forecast = w.config.forecastDataPoints;\n    if (forecast.count > 0 && type !== \"rangeArea\") {\n      const forecastCutoff = w.globals.seriesXvalues[realIndex][w.globals.seriesXvalues[realIndex].length - forecast.count - 1];\n      const elForecastMask = graphics.drawRect(\n        forecastCutoff,\n        0,\n        w.layout.gridWidth,\n        w.layout.gridHeight,\n        0\n      );\n      w.dom.elForecastMask.appendChild(elForecastMask.node);\n      const elNonForecastMask = graphics.drawRect(\n        0,\n        0,\n        forecastCutoff,\n        w.layout.gridHeight,\n        0\n      );\n      w.dom.elNonForecastMask.appendChild(elNonForecastMask.node);\n    }\n    if (!this.pointsChart) {\n      w.globals.delayedElements.push({\n        el: this.elPointsMain.node,\n        index: realIndex\n      });\n      tweenSeriesMarkers(w, {\n        elPointsMain: this.elPointsMain,\n        realIndex,\n        speed: w.config.chart.animations.dynamicAnimation.speed\n      });\n      if (seriesJoin(w, realIndex) && ((_a = this.elDataLabelsWrap) == null ? void 0 : _a.node)) {\n        this.elDataLabelsWrap.node.classList.add(\"apexcharts-element-hidden\");\n        w.globals.delayedElements.push({\n          el: this.elDataLabelsWrap.node,\n          holdUntilComplete: true\n        });\n      }\n    } else {\n      tweenSeriesMarkers(w, {\n        elPointsMain: this.elPointsMain,\n        realIndex,\n        speed: w.config.chart.animations.dynamicAnimation.speed\n      });\n    }\n    const defaultRenderedPathOptions = {\n      i,\n      realIndex,\n      animationDelay: i,\n      initialSpeed: w.config.chart.animations.speed,\n      dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n      className: `apexcharts-${type}`\n    };\n    const numericXY = paths.numericXY;\n    if (type === \"area\") {\n      const pathFill = fill.fillPath({\n        seriesNumber: realIndex\n      });\n      for (let p = 0; p < paths.areaPaths.length; p++) {\n        const renderedPath = emit.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: streamScroll ? projectPathToPrevFrame(paths.areaPaths[p], streamScroll) : (_c = (_b = reconcile == null ? void 0 : reconcile.area) == null ? void 0 : _b.from) != null ? _c : paths.pathFromArea,\n          pathTo: paths.areaPaths[p],\n          pathToNumeric: numericXY ? {\n            xs: numericXY.xs,\n            ys: numericXY.ys,\n            closeY: numericXY.areaCloseY\n          } : void 0,\n          pathToInterp: (_d = reconcile == null ? void 0 : reconcile.area) == null ? void 0 : _d.toInterp,\n          scrollMorph: !!streamScroll,\n          stroke: \"none\",\n          strokeWidth: 0,\n          strokeLineCap: null,\n          fill: pathFill\n        }));\n        this.elSeries.add(renderedPath);\n      }\n    }\n    if (w.config.stroke.show && !this.pointsChart) {\n      let lineFill = null;\n      if (type === \"line\") {\n        lineFill = fill.fillPath({\n          seriesNumber: realIndex,\n          i\n        });\n      } else {\n        if (w.config.stroke.fill.type === \"solid\") {\n          lineFill = w.globals.stroke.colors[realIndex];\n        } else {\n          const prevFill = w.config.fill;\n          w.config.fill = w.config.stroke.fill;\n          lineFill = fill.fillPath({\n            seriesNumber: realIndex,\n            i\n          });\n          w.config.fill = prevFill;\n        }\n      }\n      for (let p = 0; p < paths.linePaths.length; p++) {\n        let pathFill = lineFill;\n        if (type === \"rangeArea\") {\n          pathFill = fill.fillPath({\n            seriesNumber: realIndex\n          });\n        }\n        const linePathCommonOpts = __spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: streamScroll ? projectPathToPrevFrame(paths.linePaths[p], streamScroll) : (_f = (_e = reconcile == null ? void 0 : reconcile.line) == null ? void 0 : _e.from) != null ? _f : paths.pathFromLine,\n          pathTo: paths.linePaths[p],\n          pathToNumeric: numericXY ? { xs: numericXY.xs, ys: numericXY.ys } : void 0,\n          pathToInterp: (_g = reconcile == null ? void 0 : reconcile.line) == null ? void 0 : _g.toInterp,\n          scrollMorph: !!streamScroll,\n          stroke: lineFill,\n          strokeWidth: this.strokeWidth,\n          strokeLineCap: w.config.stroke.lineCap,\n          fill: type === \"rangeArea\" ? pathFill : \"none\"\n        });\n        const renderedPath = emit.renderPaths(linePathCommonOpts);\n        this.elSeries.add(renderedPath);\n        renderedPath.attr(\"fill-rule\", `evenodd`);\n        if (forecast.count > 0 && type !== \"rangeArea\") {\n          const renderedForecastPath = emit.renderPaths(linePathCommonOpts);\n          renderedForecastPath.node.setAttribute(\n            \"stroke-dasharray\",\n            forecast.dashArray\n          );\n          if (forecast.strokeWidth) {\n            renderedForecastPath.node.setAttribute(\n              \"stroke-width\",\n              forecast.strokeWidth\n            );\n          }\n          this.elSeries.add(renderedForecastPath);\n          renderedForecastPath.attr(\n            \"clip-path\",\n            `url(#forecastMask${w.globals.cuid})`\n          );\n          renderedPath.attr(\n            \"clip-path\",\n            `url(#nonForecastMask${w.globals.cuid})`\n          );\n        }\n      }\n    }\n  }\n  _iterateOverDataPoints({\n    type,\n    series,\n    iterations,\n    realIndex,\n    translationsIndex,\n    i,\n    x,\n    y,\n    pX,\n    pY,\n    pathsFrom,\n    linePaths,\n    areaPaths,\n    seriesIndex,\n    lineYPosition,\n    xArrj,\n    yArrj,\n    y2Arrj,\n    isRangeStart,\n    seriesRangeEnd\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const yRatio = this.yRatio;\n    let { prevY, linePath, areaPath, pathFromLine, pathFromArea } = pathsFrom;\n    const minY = Utils$1.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY;\n    if (!iterations) {\n      iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints;\n    }\n    const getY = (_y, lineYPos) => {\n      return lineYPos - _y / yRatio[translationsIndex] + (this.isReversed ? _y / yRatio[translationsIndex] : 0) * 2;\n    };\n    let y2 = y;\n    const stackSeries = w.config.chart.stacked && !w.globals.comboCharts || w.config.chart.stacked && w.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {Record<string,any>} */\n    ((_a = this.w.config.series[realIndex]) == null ? void 0 : _a.type) === \"bar\" || /** @type {Record<string,any>} */\n    ((_b = this.w.config.series[realIndex]) == null ? void 0 : _b.type) === \"column\");\n    let curve = w.config.stroke.curve;\n    if (Array.isArray(curve)) {\n      if (Array.isArray(seriesIndex)) {\n        curve = curve[seriesIndex[i]];\n      } else {\n        curve = curve[i];\n      }\n    }\n    let pathState = 0;\n    let segmentStartX;\n    const jitterPx = this.pointsChart ? this._scatterJitterPx(realIndex) : null;\n    if (curve === \"straight\" && !this.pointsChart) {\n      const fast = this._fastStraightPath({\n        type,\n        series,\n        i,\n        realIndex,\n        translationsIndex,\n        iterations,\n        x,\n        y,\n        pX,\n        pY,\n        pathsFrom,\n        linePaths,\n        areaPaths,\n        xArrj,\n        yArrj,\n        y2Arrj,\n        stackSeries\n      });\n      if (fast) return fast;\n    }\n    for (let j = 0; j < iterations; j++) {\n      if (series[i].length === 0) break;\n      const isNull = typeof series[i][j + 1] === \"undefined\" || series[i][j + 1] === null;\n      if (w.axisFlags.isXNumeric) {\n        let sX = w.seriesData.seriesX[realIndex][j + 1];\n        if (typeof w.seriesData.seriesX[realIndex][j + 1] === \"undefined\") {\n          sX = w.seriesData.seriesX[realIndex][iterations - 1];\n        }\n        x = (sX - w.globals.minX) / this.xRatio;\n      } else {\n        x = x + this.xDivision;\n      }\n      if (stackSeries) {\n        if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) {\n          const prevIndex = (pi) => {\n            for (let pii = pi; pii > 0; pii--) {\n              if (w.globals.collapsedSeriesIndices.indexOf(\n                (seriesIndex == null ? void 0 : seriesIndex[pii]) || pii\n              ) > -1) {\n                pii--;\n              } else {\n                return pii;\n              }\n            }\n            return 0;\n          };\n          lineYPosition = this.prevSeriesY[prevIndex(i - 1)][j + 1];\n        } else {\n          lineYPosition = this.zeroY;\n        }\n      } else {\n        lineYPosition = this.zeroY;\n      }\n      if (isNull) {\n        y = getY(minY, lineYPosition);\n      } else {\n        y = getY(series[i][j + 1], lineYPosition);\n        if (type === \"rangeArea\") {\n          y2 = getY(seriesRangeEnd[i][j + 1], lineYPosition);\n        }\n      }\n      let xj = x;\n      let yj = y;\n      if (jitterPx) {\n        const seed = realIndex * 100003 + (j + 1);\n        if (jitterPx.x) xj = x + (hash01(seed * 7919 + 13) - 0.5) * 2 * jitterPx.x;\n        if (jitterPx.y) yj = y + (hash01(seed * 6271 + 97) - 0.5) * 2 * jitterPx.y;\n      }\n      xArrj.push(series[i][j + 1] === null ? null : xj);\n      if (isNull && (w.config.stroke.curve === \"smooth\" || w.config.stroke.curve === \"monotoneCubic\")) {\n        yArrj.push(null);\n        y2Arrj.push(null);\n      } else {\n        yArrj.push(yj);\n        y2Arrj.push(y2);\n      }\n      const pointsPos = this.lineHelpers.calculatePoints({\n        series,\n        x: xj,\n        y: yj,\n        realIndex,\n        i,\n        j,\n        prevY\n      });\n      const calculatedPaths = this._createPaths({\n        type,\n        series,\n        i,\n        j,\n        x,\n        y,\n        y2,\n        xArrj,\n        yArrj,\n        y2Arrj,\n        pX,\n        pY,\n        pathState,\n        segmentStartX,\n        linePath,\n        areaPath,\n        linePaths,\n        areaPaths,\n        curve,\n        isRangeStart\n      });\n      areaPaths = calculatedPaths.areaPaths;\n      linePaths = calculatedPaths.linePaths;\n      pX = calculatedPaths.pX;\n      pY = calculatedPaths.pY;\n      pathState = calculatedPaths.pathState;\n      segmentStartX = calculatedPaths.segmentStartX;\n      areaPath = calculatedPaths.areaPath;\n      linePath = calculatedPaths.linePath;\n      if (this.appendPathFrom && !w.globals.hasNullValues && !(curve === \"monotoneCubic\" && type === \"rangeArea\")) {\n        pathFromLine += graphics.line(x, this.areaBottomY);\n        pathFromArea += graphics.line(x, this.areaBottomY);\n      }\n      this.handleNullDataPoints(series, pointsPos, i, j, realIndex);\n      this._handleMarkersAndLabels({\n        type,\n        pointsPos,\n        i,\n        j,\n        realIndex,\n        isRangeStart\n      });\n    }\n    return {\n      yArrj,\n      xArrj,\n      pathFromArea,\n      areaPaths,\n      pathFromLine,\n      linePaths,\n      linePath,\n      areaPath\n    };\n  }\n  /** @param {{type: any, pointsPos: any, isRangeStart: any, i: any, j: any, realIndex: any}} opts */\n  _handleMarkersAndLabels({ type, pointsPos, isRangeStart, i, j, realIndex }) {\n    const w = this.w;\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    if (!this.pointsChart) {\n      const useProgressive = !w.globals.dataChanged && !w.globals.resized;\n      if (!useProgressive && w.seriesData.series[i].length > 1) {\n        this.elPointsMain.node.classList.add(\"apexcharts-element-hidden\");\n      }\n      const elPointsWrap = this.markers.plotChartMarkers({\n        pointsPos,\n        seriesIndex: realIndex,\n        j: j + 1\n      });\n      if (elPointsWrap !== null && elPointsWrap !== this._elLastPointsWrap) {\n        this.elPointsMain.add(elPointsWrap);\n        this._elLastPointsWrap = elPointsWrap;\n      }\n    } else {\n      this.scatter.draw(this.elSeries, j, {\n        realIndex,\n        pointsPos,\n        zRatio: this.zRatio,\n        elParent: this.elPointsMain\n      });\n    }\n    const drawnLabels = dataLabels.drawDataLabel({\n      type,\n      isRangeStart,\n      pos: pointsPos,\n      i: realIndex,\n      j: j + 1\n    });\n    if (drawnLabels !== null) {\n      this.elDataLabelsWrap.add(drawnLabels);\n    }\n  }\n  /**\n   * Max scatter-jitter offsets in pixels for this series, or null when jitter is\n   * off. The config offsets are in axis units (x: 1 = one category step / x-data\n   * unit, y: 1 = one y-data unit); convert each to pixels using the chart's\n   * ratios. The actual per-point offset is a deterministic fraction of these\n   * (see Scatter.drawPoint).\n   * @param {number} realIndex\n   * @returns {{ x: number, y: number } | null}\n   */\n  _scatterJitterPx(realIndex) {\n    var _a;\n    const w = this.w;\n    const jt = (_a = w.config.plotOptions.scatter) == null ? void 0 : _a.jitter;\n    if (!jt || !jt.enabled || !jt.x && !jt.y) return null;\n    const xUnitPx = w.axisFlags.isXNumeric && this.xRatio ? 1 / this.xRatio : this.xDivision;\n    const ti = this.yRatio.length > 1 ? realIndex : 0;\n    const yUnitPx = this.yRatio[ti] ? 1 / this.yRatio[ti] : 0;\n    return {\n      x: (jt.x || 0) * xUnitPx,\n      y: (jt.y || 0) * yUnitPx\n    };\n  }\n  /**\n   * Numeric geometry fast path for plain straight line/area series (the\n   * render-2026 perf work). Eligibility is strict: everything the per-point\n   * slow loop can do beyond plain geometry (null gaps, markers, data labels,\n   * discrete markers, stacking, combos, range areas) bails to the state\n   * machine. When eligible it produces the SAME outputs as the slow loop\n   * (byte-identical d strings via join, the same xArrj/yArrj/y2Arrj\n   * pushes, and the same pointsArray tooltip cache) in one tight loop.\n   * In canvas mode it additionally emits typed-array coordinates so the\n   * renderer can paint via moveTo/lineTo without a Path2D d-string parse.\n   *\n   * @param {{type: any, series: any, i: number, realIndex: number,\n   *   translationsIndex: number, iterations: number, x: number, y: number,\n   *   pX: number, pY: number, pathsFrom: any, linePaths: any[],\n   *   areaPaths: any[], xArrj: any[], yArrj: any[], y2Arrj: any[],\n   *   stackSeries: boolean}} opts\n   * @returns {any} the _iterateOverDataPoints result, or null when ineligible\n   */\n  _fastStraightPath({\n    type,\n    series,\n    i,\n    realIndex,\n    translationsIndex,\n    iterations,\n    x,\n    y,\n    pX,\n    pY,\n    pathsFrom,\n    linePaths,\n    areaPaths,\n    xArrj,\n    yArrj,\n    y2Arrj,\n    stackSeries\n  }) {\n    const w = this.w;\n    if (type !== \"line\" && type !== \"area\") return null;\n    if (w.globals.comboCharts || stackSeries) return null;\n    if (w.config.dataLabels.enabled) return null;\n    if (w.config.markers.discrete.length) return null;\n    if (w.globals.markers.size[realIndex] > 0) return null;\n    const s = series[i];\n    const n = s.length;\n    if (!iterations || n < 2 || n - 1 !== iterations) return null;\n    for (let k = 0; k <= iterations; k++) {\n      const v = s[k];\n      if (v === null || typeof v === \"undefined\") return null;\n    }\n    const isXNumeric = w.axisFlags.isXNumeric;\n    const sx = isXNumeric ? w.seriesData.seriesX[realIndex] : null;\n    if (isXNumeric && (!sx || sx.length < n)) return null;\n    const yR = this.yRatio[translationsIndex];\n    const isReversed = this.isReversed;\n    const zeroY = this.zeroY;\n    const bottomY = this.areaBottomY;\n    const xRatio = this.xRatio;\n    const minX = w.globals.minX;\n    const xDivision = this.xDivision;\n    const offX = w.config.markers.offsetX;\n    const offY = w.config.markers.offsetY;\n    const appendFrom = this.appendPathFrom && !w.globals.hasNullValues;\n    let { pathFromLine, pathFromArea } = pathsFrom;\n    const r = this.ctx && this.ctx.renderer;\n    const canvasMode = !!(r && r.kind && r.kind !== \"svg\");\n    const buildStrings = !canvasMode || w.globals.dataChanged && !!w.globals.prevStreamFrame;\n    const nxs = canvasMode ? new Float64Array(n) : null;\n    const nys = canvasMode ? new Float64Array(n) : null;\n    if (nxs && nys) {\n      nxs[0] = pX;\n      nys[0] = pY;\n    }\n    if (typeof w.globals.pointsArray[realIndex] === \"undefined\") {\n      w.globals.pointsArray[realIndex] = [];\n    }\n    const pts = w.globals.pointsArray[realIndex];\n    const xPT1st = sx ? (sx[0] - minX) / xRatio + offX : this.categoryAxisCorrection + offX;\n    pts.push([xPT1st, pathsFrom.prevY + offY]);\n    const parts = buildStrings ? new Array(iterations + 1) : [];\n    if (buildStrings) parts[0] = \"M \" + pX + \" \" + pY;\n    const fromParts = buildStrings && appendFrom ? new Array(iterations) : null;\n    let xv = x;\n    let xj = pX;\n    let yj = pY;\n    for (let j = 0; j < iterations; j++) {\n      if (sx) {\n        xj = (sx[j + 1] - minX) / xRatio;\n      } else {\n        xv = xv + xDivision;\n        xj = xv;\n      }\n      const v = s[j + 1];\n      yj = zeroY - v / yR + (isReversed ? v / yR : 0) * 2;\n      xArrj.push(xj);\n      yArrj.push(yj);\n      y2Arrj.push(y);\n      pts.push([xj + offX, yj + offY]);\n      if (buildStrings) {\n        parts[j + 1] = \" L \" + xj + \" \" + yj;\n        if (fromParts) fromParts[j] = \" L \" + xj + \" \" + bottomY;\n      }\n      if (nxs && nys) {\n        nxs[j + 1] = xj;\n        nys[j + 1] = yj;\n      }\n    }\n    let linePath = \"\";\n    let areaPath = \"\";\n    if (buildStrings) {\n      linePath = parts.join(\"\");\n      areaPath = linePath + \" L \" + xj + \" \" + bottomY + \" L \" + pX + \" \" + bottomY + \"z\";\n    }\n    if (fromParts) {\n      const fromAppend = fromParts.join(\"\");\n      pathFromLine += fromAppend;\n      pathFromArea += fromAppend;\n    } else if (!buildStrings && appendFrom) {\n      pathFromLine += \" L \" + xj + \" \" + bottomY;\n      pathFromArea += \" L \" + xj + \" \" + bottomY;\n    }\n    linePaths.push(linePath);\n    areaPaths.push(areaPath);\n    return {\n      yArrj,\n      xArrj,\n      pathFromArea,\n      areaPaths,\n      pathFromLine,\n      linePaths,\n      linePath,\n      areaPath,\n      numericXY: nxs ? { xs: nxs, ys: nys, areaCloseY: bottomY } : void 0\n    };\n  }\n  /** @param {{type: any, series: any, i: any, j: any, x: any, y: any, xArrj: any, yArrj: any, y2: any, y2Arrj: any, pX: any, pY: any, pathState: any, segmentStartX: any, linePath: any, areaPath: any, linePaths: any, areaPaths: any, curve: any, isRangeStart: any}} opts */\n  _createPaths({\n    type,\n    series,\n    i,\n    j,\n    x,\n    y,\n    xArrj,\n    yArrj,\n    y2,\n    y2Arrj,\n    pX,\n    pY,\n    pathState,\n    segmentStartX,\n    linePath,\n    areaPath,\n    linePaths,\n    areaPaths,\n    curve,\n    isRangeStart\n  }) {\n    const graphics = new Graphics(this.w);\n    const areaBottomY = this.areaBottomY;\n    const rangeArea = type === \"rangeArea\";\n    const isLowerRangeAreaPath = type === \"rangeArea\" && isRangeStart;\n    switch (curve) {\n      case \"monotoneCubic\": {\n        const yAj = isRangeStart ? yArrj : y2Arrj;\n        const getSmoothInputs = (xArr, yArr) => {\n          return xArr.map((_, i2) => {\n            return [_, yArr[i2]];\n          }).filter((_) => _[1] !== null);\n        };\n        const getSegmentLengths = (yArr) => {\n          const segLens = [];\n          let count = 0;\n          yArr.forEach((_) => {\n            if (_ !== null) {\n              count++;\n            } else if (count > 0) {\n              segLens.push(count);\n              count = 0;\n            }\n          });\n          if (count > 0) {\n            segLens.push(count);\n          }\n          return segLens;\n        };\n        const getSegments = (yArr, points) => {\n          const segLens = getSegmentLengths(yArr);\n          const segments = [];\n          for (let i2 = 0, len = 0; i2 < segLens.length; len += segLens[i2++]) {\n            segments[i2] = spline.slice(points, len, len + segLens[i2]);\n          }\n          return segments;\n        };\n        switch (pathState) {\n          case 0:\n            if (yAj[j + 1] === null) {\n              break;\n            }\n            pathState = 1;\n          // falls through\n          case 1:\n            if (!(rangeArea ? xArrj.length === series[i].length : j === series[i].length - 2)) {\n              break;\n            }\n          // falls through\n          case 2: {\n            const _xAj = isRangeStart ? xArrj : xArrj.slice().reverse();\n            const _yAj = isRangeStart ? yAj : yAj.slice().reverse();\n            const smoothInputs = getSmoothInputs(_xAj, _yAj);\n            const points = smoothInputs.length > 1 ? spline.points(smoothInputs) : smoothInputs;\n            let smoothInputsLower = [];\n            if (rangeArea) {\n              if (isLowerRangeAreaPath) {\n                areaPaths = smoothInputs;\n              } else {\n                smoothInputsLower = areaPaths.reverse();\n              }\n            }\n            let segmentCount = 0;\n            let smoothInputsIndex = 0;\n            getSegments(_yAj, points).forEach((_) => {\n              segmentCount++;\n              const svgPoints = svgPath(_);\n              const _start = smoothInputsIndex;\n              smoothInputsIndex += _.length;\n              const _end = smoothInputsIndex - 1;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints;\n              } else if (rangeArea) {\n                linePath = graphics.move(\n                  smoothInputsLower[_start][0],\n                  smoothInputsLower[_start][1]\n                ) + graphics.line(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints + graphics.line(\n                  smoothInputsLower[_end][0],\n                  smoothInputsLower[_end][1]\n                );\n              } else {\n                linePath = graphics.move(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints;\n                areaPath = linePath + graphics.line(smoothInputs[_end][0], areaBottomY) + graphics.line(smoothInputs[_start][0], areaBottomY) + \"z\";\n                areaPaths.push(areaPath);\n              }\n              linePaths.push(linePath);\n            });\n            if (rangeArea && segmentCount > 1 && !isLowerRangeAreaPath) {\n              const upperLinePaths = linePaths.slice(segmentCount).reverse();\n              linePaths.splice(segmentCount);\n              upperLinePaths.forEach(\n                (u) => linePaths.push(u)\n              );\n            }\n            pathState = 0;\n            break;\n          }\n        }\n        break;\n      }\n      case \"smooth\": {\n        const length = (x - pX) * 0.35;\n        if (series[i][j] === null) {\n          pathState = 0;\n        } else {\n          switch (pathState) {\n            case 0:\n              segmentStartX = pX;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(pX, y2Arrj[j]) + graphics.line(pX, pY);\n              } else {\n                linePath = graphics.move(pX, pY);\n              }\n              areaPath = graphics.move(pX, pY);\n              if (series[i][j + 1] === null || typeof series[i][j + 1] === \"undefined\") {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                break;\n              }\n              pathState = 1;\n              if (j < series[i].length - 2) {\n                const p = graphics.curve(pX + length, pY, x - length, y, x, y);\n                linePath += p;\n                areaPath += p;\n                break;\n              }\n            // falls through\n            case 1:\n              if (series[i][j + 1] === null) {\n                if (isLowerRangeAreaPath) {\n                  linePath += graphics.line(pX, y2);\n                } else {\n                  linePath += graphics.move(pX, pY);\n                }\n                areaPath += graphics.line(pX, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                pathState = -1;\n              } else {\n                const p = graphics.curve(pX + length, pY, x - length, y, x, y);\n                linePath += p;\n                areaPath += p;\n                if (j >= series[i].length - 2) {\n                  if (isLowerRangeAreaPath) {\n                    linePath += graphics.curve(x, y, x, y, x, y2) + graphics.move(x, y2);\n                  }\n                  areaPath += graphics.curve(x, y, x, y, x, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                  linePaths.push(linePath);\n                  areaPaths.push(areaPath);\n                  pathState = -1;\n                }\n              }\n              break;\n          }\n        }\n        pX = x;\n        pY = y;\n        break;\n      }\n      default: {\n        const pathToPoint = (curve2, x2, y3) => {\n          let path = \"\";\n          switch (curve2) {\n            case \"stepline\":\n              path = graphics.line(x2, null, \"H\") + graphics.line(null, y3, \"V\");\n              break;\n            case \"linestep\":\n              path = graphics.line(null, y3, \"V\") + graphics.line(x2, null, \"H\");\n              break;\n            case \"straight\":\n              path = graphics.line(x2, y3);\n              break;\n          }\n          return path;\n        };\n        if (series[i][j] === null) {\n          pathState = 0;\n        } else {\n          switch (pathState) {\n            case 0:\n              segmentStartX = pX;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(pX, y2Arrj[j]) + graphics.line(pX, pY);\n              } else {\n                linePath = graphics.move(pX, pY);\n              }\n              areaPath = graphics.move(pX, pY);\n              if (series[i][j + 1] === null || typeof series[i][j + 1] === \"undefined\") {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                break;\n              }\n              pathState = 1;\n              if (j < series[i].length - 2) {\n                const p = pathToPoint(curve, x, y);\n                linePath += p;\n                areaPath += p;\n                break;\n              }\n            // falls through\n            case 1:\n              if (series[i][j + 1] === null) {\n                if (isLowerRangeAreaPath) {\n                  linePath += graphics.line(pX, y2);\n                } else {\n                  linePath += graphics.move(pX, pY);\n                }\n                areaPath += graphics.line(pX, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                pathState = -1;\n              } else {\n                const p = pathToPoint(curve, x, y);\n                linePath += p;\n                areaPath += p;\n                if (j >= series[i].length - 2) {\n                  if (isLowerRangeAreaPath) {\n                    linePath += graphics.line(x, y2);\n                  }\n                  areaPath += graphics.line(x, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                  linePaths.push(linePath);\n                  areaPaths.push(areaPath);\n                  pathState = -1;\n                }\n              }\n              break;\n          }\n        }\n        pX = x;\n        pY = y;\n        break;\n      }\n    }\n    return {\n      linePaths,\n      areaPaths,\n      pX,\n      pY,\n      pathState,\n      segmentStartX,\n      linePath,\n      areaPath\n    };\n  }\n  /**\n   * @param {any[]} series\n   * @param {any} pointsPos\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  handleNullDataPoints(series, pointsPos, i, j, realIndex) {\n    const w = this.w;\n    if (series[i][j] === null && w.config.markers.showNullDataPoints || series[i].length === 1) {\n      let pSize = this.strokeWidth - w.config.markers.strokeWidth / 2;\n      if (!(pSize > 0)) {\n        pSize = 0;\n      }\n      const elPointsWrap = this.markers.plotChartMarkers({\n        pointsPos,\n        seriesIndex: realIndex,\n        j: j + 1,\n        pSize,\n        alwaysDrawMarker: true\n      });\n      if (elPointsWrap !== null) {\n        this.elPointsMain.add(elPointsWrap);\n      }\n    }\n  }\n}\nclass CircularChartsHelpers {\n  /**\n   * @param {import('../../../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} i\n   * @param {string | number} text\n   */\n  drawYAxisTexts(x, y, i, text) {\n    const w = this.w;\n    const yaxisConfig = w.config.yaxis[0];\n    const formatter = w.formatters.yLabelFormatters[0];\n    const graphics = new Graphics(this.w);\n    const yaxisLabel = graphics.drawText({\n      x: x + yaxisConfig.labels.offsetX,\n      y: y + yaxisConfig.labels.offsetY,\n      text: formatter(text, i),\n      textAnchor: \"middle\",\n      fontSize: yaxisConfig.labels.style.fontSize,\n      fontFamily: yaxisConfig.labels.style.fontFamily,\n      foreColor: Array.isArray(yaxisConfig.labels.style.colors) ? yaxisConfig.labels.style.colors[i] : yaxisConfig.labels.style.colors\n    });\n    return yaxisLabel;\n  }\n  /**\n   * Widest rendered width among the given label strings. Used to reserve\n   * horizontal room for outer (name) labels so the pie can shrink to fit them.\n   * @param {string[]} labels\n   * @param {{ fontSize?: string, fontFamily?: string }} style\n   * @returns {number}\n   */\n  getMaxLabelWidth(labels, { fontSize, fontFamily } = {}) {\n    const graphics = new Graphics(this.w);\n    let maxWidth = 0;\n    labels.forEach((text) => {\n      if (text === null || typeof text === \"undefined\" || text === \"\") return;\n      const rect = graphics.getTextRects(\n        `${text}`,\n        fontSize || \"12px\",\n        fontFamily,\n        \"\"\n      );\n      maxWidth = Math.max(maxWidth, rect.width);\n    });\n    return maxWidth;\n  }\n  /**\n   * Draw a single outer (name) label: an optional leader line from the slice\n   * edge (anchor -> radial elbow -> label) plus the name text (one or more\n   * lines, e.g. name + percent). Geometry is computed by the caller (Pie.js)\n   * so it can run a de-overlap pass first. The text block is vertically\n   * centered on `labelY`, which is where the connector terminates.\n   * @param {{\n   *   lines: string[],\n   *   lineHeight: number,\n   *   anchor: { x: number, y: number },\n   *   elbow: { x: number, y: number },\n   *   labelX: number,\n   *   labelY: number,\n   *   side: 'left' | 'right',\n   *   connector: { show: boolean, width: number, color: string },\n   *   style: { fontSize?: string, fontFamily?: string, fontWeight?: string | number },\n   *   foreColor: string,\n   * }} opts\n   */\n  drawExternalLabel({\n    lines,\n    lineHeight,\n    anchor,\n    elbow,\n    labelX,\n    labelY,\n    side,\n    connector,\n    style,\n    foreColor\n  }) {\n    const graphics = new Graphics(this.w);\n    const group = graphics.group({\n      class: \"apexcharts-pie-name-label-group\"\n    });\n    if (connector.show) {\n      const d = `M ${anchor.x} ${anchor.y} L ${elbow.x} ${elbow.y} L ${labelX} ${labelY}`;\n      const line = graphics.drawPath({\n        d,\n        stroke: connector.color,\n        strokeWidth: connector.width,\n        fill: \"none\",\n        strokeLinecap: \"round\"\n      });\n      line.node.classList.add(\"apexcharts-pie-label-connector\");\n      group.add(line);\n    }\n    const textX = side === \"right\" ? labelX + 4 : labelX - 4;\n    const n = lines.length;\n    const startY = labelY - (n - 1) * lineHeight / 2;\n    const elText = graphics.drawText({\n      x: textX,\n      y: startY,\n      text: n === 1 ? lines[0] : lines,\n      textAnchor: side === \"right\" ? \"start\" : \"end\",\n      fontSize: style.fontSize,\n      fontFamily: style.fontFamily,\n      fontWeight: style.fontWeight,\n      foreColor,\n      dominantBaseline: \"central\",\n      cssClass: \"apexcharts-pie-name-label\"\n    });\n    if (n > 1) {\n      const tspans = elText.node.getElementsByTagName(\"tspan\");\n      for (let li = 0; li < tspans.length; li++) {\n        tspans[li].setAttribute(\"x\", `${textX}`);\n        tspans[li].setAttribute(\"dy\", li === 0 ? \"0\" : `${lineHeight}`);\n      }\n    }\n    group.add(elText);\n    return group;\n  }\n}\nconst D2R$1 = Math.PI / 180;\nconst R2D$1 = 180 / Math.PI;\nfunction arcPoint(cx, cy, radius, deg) {\n  return {\n    x: cx + radius * Math.cos((deg - 90) * D2R$1),\n    y: cy + radius * Math.sin((deg - 90) * D2R$1)\n  };\n}\nconst xy = (p) => `${p.x} ${p.y}`;\nfunction roundedDonutSegmentPath({ cx, cy, rIn, rOut, a0, a1, r, spanDeg }) {\n  const ptAt = (radius, deg) => arcPoint(cx, cy, radius, deg);\n  const degOut = r / rOut * R2D$1;\n  const degIn = r / rIn * R2D$1;\n  const oStart = ptAt(rOut, a0 + degOut);\n  const oEnd = ptAt(rOut, a1 - degOut);\n  const largeOut = spanDeg - 2 * degOut > 180 ? 1 : 0;\n  const ocEnd = ptAt(rOut, a1);\n  const rEndOut = ptAt(rOut - r, a1);\n  const ocStart = ptAt(rOut, a0);\n  const rStartOut = ptAt(rOut - r, a0);\n  const iEnd = ptAt(rIn, a1 - degIn);\n  const iStart = ptAt(rIn, a0 + degIn);\n  const largeIn = spanDeg - 2 * degIn > 180 ? 1 : 0;\n  const icEnd = ptAt(rIn, a1);\n  const rEndIn = ptAt(rIn + r, a1);\n  const icStart = ptAt(rIn, a0);\n  const rStartIn = ptAt(rIn + r, a0);\n  return [\n    \"M\",\n    xy(oStart),\n    \"A\",\n    rOut,\n    rOut,\n    0,\n    largeOut,\n    1,\n    xy(oEnd),\n    \"Q\",\n    xy(ocEnd),\n    xy(rEndOut),\n    \"L\",\n    xy(rEndIn),\n    \"Q\",\n    xy(icEnd),\n    xy(iEnd),\n    \"A\",\n    rIn,\n    rIn,\n    0,\n    largeIn,\n    0,\n    xy(iStart),\n    \"Q\",\n    xy(icStart),\n    xy(rStartIn),\n    \"L\",\n    xy(rStartOut),\n    \"Q\",\n    xy(ocStart),\n    xy(oStart),\n    \"Z\"\n  ].join(\" \");\n}\nfunction roundedPieSegmentPath({ cx, cy, rOut, a0, a1, r, spanDeg }) {\n  const ptAt = (radius, deg) => arcPoint(cx, cy, radius, deg);\n  const degOut = r / rOut * R2D$1;\n  const oStart = ptAt(rOut, a0 + degOut);\n  const oEnd = ptAt(rOut, a1 - degOut);\n  const largeOut = spanDeg - 2 * degOut > 180 ? 1 : 0;\n  const ocEnd = ptAt(rOut, a1);\n  const rEndOut = ptAt(rOut - r, a1);\n  const ocStart = ptAt(rOut, a0);\n  const rStartOut = ptAt(rOut - r, a0);\n  return [\n    \"M\",\n    xy(oStart),\n    \"A\",\n    rOut,\n    rOut,\n    0,\n    largeOut,\n    1,\n    xy(oEnd),\n    \"Q\",\n    xy(ocEnd),\n    xy(rEndOut),\n    \"L\",\n    `${cx} ${cy}`,\n    \"L\",\n    xy(rStartOut),\n    \"Q\",\n    xy(ocStart),\n    xy(oStart),\n    \"Z\"\n  ].join(\" \");\n}\nfunction sharpDonutSegmentPath({ cx, cy, rIn, rOut, a0, a1, spanDeg }) {\n  const ptAt = (radius, deg) => arcPoint(cx, cy, radius, deg);\n  const largeArc = spanDeg > 180 ? 1 : 0;\n  const A = ptAt(rOut, a0);\n  const B = ptAt(rOut, a1);\n  const C = ptAt(rIn, a1);\n  const Din = ptAt(rIn, a0);\n  return [\n    \"M\",\n    xy(A),\n    \"A\",\n    rOut,\n    rOut,\n    0,\n    largeArc,\n    1,\n    xy(B),\n    \"L\",\n    xy(C),\n    \"A\",\n    rIn,\n    rIn,\n    0,\n    largeArc,\n    0,\n    xy(Din),\n    \"Z\"\n  ].join(\" \");\n}\nclass Pie {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.chartType = this.w.config.chart.type;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    this.animBeginArr = [0];\n    this.animDur = 0;\n    this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels;\n    this.lineColorArr = w.globals.stroke.colors !== void 0 ? w.globals.stroke.colors : w.globals.colors;\n    this.defaultSize = Math.min(w.layout.gridWidth, w.layout.gridHeight);\n    this.centerY = this.defaultSize / 2;\n    this.centerX = w.layout.gridWidth / 2;\n    if (w.config.chart.type === \"radialBar\") {\n      this.fullAngle = 360;\n    } else {\n      this.fullAngle = Math.abs(\n        w.config.plotOptions.pie.endAngle - w.config.plotOptions.pie.startAngle\n      );\n    }\n    this.initialAngle = w.config.plotOptions.pie.startAngle % this.fullAngle;\n    w.globals.radialSize = this.defaultSize / 2.05 - w.config.stroke.width - (!w.config.chart.sparkline.enabled ? w.config.chart.dropShadow.blur : 0);\n    this.externalCfg = w.config.plotOptions.pie.dataLabels.external;\n    const dlStyle = w.config.dataLabels.style;\n    this.externalLabelStyle = {\n      fontSize: this.externalCfg.fontSize || dlStyle.fontSize,\n      fontFamily: this.externalCfg.fontFamily || dlStyle.fontFamily,\n      fontWeight: this.externalCfg.fontWeight || dlStyle.fontWeight\n    };\n    this.externalLabels = [];\n    this.externalLabelMaxLines = 1;\n    this.externalLabelLineH = parseFloat(this.externalLabelStyle.fontSize) || 12;\n    w.globals.pieExternalLabelMarginY = 0;\n    this.showExternalLabels = this.externalCfg.show && this.chartType !== \"polarArea\";\n    if (this.showExternalLabels && !w.globals.noData) {\n      this.reserveExternalLabelSpace();\n    }\n    this.donutSize = w.globals.radialSize * parseInt(w.config.plotOptions.pie.donut.size, 10) / 100;\n    const scaleSize = w.config.plotOptions.pie.customScale;\n    const halfW = w.layout.gridWidth / 2;\n    const halfH = w.layout.gridHeight / 2;\n    this.translateX = halfW - halfW * scaleSize;\n    this.translateY = halfH - halfH * scaleSize;\n    this.dataLabelsGroup = new Graphics(this.w).group({\n      class: \"apexcharts-datalabels-group\",\n      transform: `translate(${this.translateX}, ${this.translateY}) scale(${scaleSize})`\n    });\n    this.maxY = 0;\n    this.sliceLabels = [];\n    this.sliceSizes = [];\n    this.prevSectorAngleArr = [];\n  }\n  /**\n   * The text shown in an outer (name) label for slice `i`. Applies the\n   * user `name.formatter` if provided, otherwise the raw series name. The\n   * formatter may return a string or an array of strings (one per line, e.g.\n   * `[name, percent]`); normalize via `getExternalLabelLines`.\n   * @param {number} i\n   * @returns {string | string[]}\n   */\n  getExternalLabelText(i) {\n    var _a, _b, _c;\n    const w = this.w;\n    const name2 = w.seriesData.seriesNames[i];\n    const fn = this.externalCfg.formatter;\n    if (typeof fn === \"function\") {\n      return fn(name2, {\n        seriesIndex: i,\n        percent: (_b = (_a = w.globals.seriesPercent) == null ? void 0 : _a[i]) == null ? void 0 : _b[0],\n        value: (_c = w.globals.seriesTotals) == null ? void 0 : _c[i],\n        w\n      });\n    }\n    return name2 == null ? \"\" : `${name2}`;\n  }\n  /**\n   * Outer label content for slice `i` normalized to an array of line strings.\n   * Supports a formatter returning an array, or a string with `\\n` separators.\n   * @param {number} i\n   * @returns {string[]}\n   */\n  getExternalLabelLines(i) {\n    const raw = this.getExternalLabelText(i);\n    const arr = Array.isArray(raw) ? raw : `${raw == null ? \"\" : raw}`.split(\"\\n\");\n    return arr.map((l) => l == null ? \"\" : `${l}`);\n  }\n  /**\n   * Shrink the pie radius (and reposition its center) so outer name labels and\n   * their connector lines fit inside the chart area without clipping. Stores\n   * the reserved vertical band on `w.globals.pieExternalLabelMarginY` so\n   * Core.resizeNonAxisCharts can grow the SVG height to match.\n   */\n  reserveExternalLabelSpace() {\n    const w = this.w;\n    const helpers = new CircularChartsHelpers(w);\n    const lineSets = (w.seriesData.seriesNames || []).map(\n      (_, i) => this.getExternalLabelLines(i)\n    );\n    const maxLabelWidth = helpers.getMaxLabelWidth(lineSets.flat(), {\n      fontSize: this.externalLabelStyle.fontSize,\n      fontFamily: this.externalLabelStyle.fontFamily\n    });\n    this.externalLabelMaxLines = lineSets.reduce((m, s) => Math.max(m, s.length), 1);\n    this.externalLabelLineH = Math.round(\n      (parseFloat(this.externalLabelStyle.fontSize) || 12) * 1.35\n    );\n    const cn = this.externalCfg.connector;\n    const blockHeight = this.externalLabelMaxLines * this.externalLabelLineH;\n    const mh = maxLabelWidth + (cn.length || 0) + (cn.gap || 0) + 12;\n    const mv = blockHeight / 2 + (cn.gap || 0) + 6;\n    const fitted = Math.min(\n      w.globals.radialSize,\n      w.layout.gridWidth / 2 - mh,\n      w.layout.gridHeight / 2 - mv\n    );\n    w.globals.radialSize = Math.max(fitted, this.defaultSize * 0.15);\n    w.globals.pieExternalLabelMarginY = mv;\n    const heightStr = w.config.chart.height ? String(w.config.chart.height) : \"\";\n    const userSetFixedHeight = heightStr !== \"\" && heightStr !== \"auto\";\n    this.centerY = userSetFixedHeight ? w.layout.gridHeight / 2 : w.globals.radialSize + mv;\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a;\n    const self = this;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elPie = graphics.group({\n      class: \"apexcharts-pie\"\n    });\n    if (w.globals.noData) return elPie;\n    let total = 0;\n    for (let k = 0; k < series.length; k++) {\n      total += Utils$1.negToZero(series[k]);\n    }\n    const sectorAngleArr = [];\n    const elSeries = graphics.group();\n    if (total === 0) {\n      total = 1e-5;\n    }\n    series.forEach((m) => {\n      this.maxY = Math.max(this.maxY, m);\n    });\n    if (w.config.yaxis[0].max) {\n      this.maxY = w.config.yaxis[0].max;\n    }\n    if (w.config.grid.position === \"back\" && this.chartType === \"polarArea\") {\n      this.drawPolarElements(elPie);\n    }\n    for (let i = 0; i < series.length; i++) {\n      const angle = this.fullAngle * Utils$1.negToZero(series[i]) / total;\n      sectorAngleArr.push(angle);\n      if (this.chartType === \"polarArea\") {\n        sectorAngleArr[i] = this.fullAngle / series.length;\n        this.sliceSizes.push(\n          w.globals.radialSize * series[i] / (this.maxY || 1)\n        );\n      } else {\n        this.sliceSizes.push(w.globals.radialSize);\n      }\n    }\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    if (w.globals.dataChanged && !morphActive) {\n      let prevTotal = 0;\n      for (let k = 0; k < w.globals.previousPaths.length; k++) {\n        prevTotal += Utils$1.negToZero(w.globals.previousPaths[k]);\n      }\n      let previousAngle;\n      for (let i = 0; i < w.globals.previousPaths.length; i++) {\n        previousAngle = this.fullAngle * Utils$1.negToZero(w.globals.previousPaths[i]) / prevTotal;\n        this.prevSectorAngleArr.push(previousAngle);\n      }\n    }\n    if (this.donutSize < 0) {\n      this.donutSize = 0;\n    }\n    if (this.chartType === \"donut\") {\n      const circle = graphics.drawCircle(this.donutSize);\n      circle.attr({\n        cx: this.centerX,\n        cy: this.centerY,\n        fill: w.config.plotOptions.pie.donut.background ? w.config.plotOptions.pie.donut.background : \"transparent\"\n      });\n      elSeries.add(circle);\n    }\n    const elG = self.drawArcs(sectorAngleArr, series);\n    this.sliceLabels.forEach((s) => {\n      elG.add(s);\n    });\n    elSeries.attr({\n      transform: `translate(${this.translateX}, ${this.translateY}) scale(${w.config.plotOptions.pie.customScale})`\n    });\n    elSeries.add(elG);\n    elPie.add(elSeries);\n    if (this.donutDataLabels.show) {\n      const shouldFadeInLabels = this.initialAnim && !w.globals.resized && !w.globals.dataChanged && this.animDur > 0;\n      const dataLabels = this.renderInnerDataLabels(\n        this.dataLabelsGroup,\n        this.donutDataLabels,\n        {\n          hollowSize: this.donutSize,\n          centerX: this.centerX,\n          centerY: this.centerY,\n          opacity: shouldFadeInLabels ? 0 : this.donutDataLabels.show\n        }\n      );\n      if (shouldFadeInLabels) {\n        const labelsNode = this.dataLabelsGroup.node;\n        labelsNode.style.transition = \"opacity 280ms ease-out\";\n        setTimeout(() => {\n          labelsNode.style.opacity = \"1\";\n        }, this.animDur);\n      }\n      elPie.add(dataLabels);\n    }\n    if (w.config.grid.position === \"front\" && this.chartType === \"polarArea\") {\n      this.drawPolarElements(elPie);\n    }\n    return elPie;\n  }\n  // core function for drawing pie arcs\n  /**\n   * @param {any[]} sectorAngleArr\n   * @param {any[]} series\n   */\n  drawArcs(sectorAngleArr, series) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    const g = graphics.group({\n      class: \"apexcharts-slices\"\n    });\n    let startAngle = this.initialAngle;\n    let prevStartAngle = this.initialAngle;\n    let endAngle = this.initialAngle;\n    let prevEndAngle = this.initialAngle;\n    this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    for (let i = 0; i < sectorAngleArr.length; i++) {\n      const elPieArc = graphics.group({\n        class: `apexcharts-series apexcharts-pie-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      g.add(elPieArc);\n      startAngle = endAngle;\n      prevStartAngle = prevEndAngle;\n      endAngle = startAngle + sectorAngleArr[i];\n      prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i];\n      const angle = endAngle < startAngle ? this.fullAngle + endAngle - startAngle : endAngle - startAngle;\n      const pathFill = fill.fillPath({\n        seriesNumber: i,\n        size: this.sliceSizes[i],\n        value: series[i]\n      });\n      const morphFrom = morphActive ? this.ctx.morphTypeChange.getInitialPathFor(i, 0) : null;\n      const path = morphFrom || this.getChangedPath(prevStartAngle, prevEndAngle);\n      const elPath = graphics.drawPath({\n        d: path,\n        // Pie/donut/polarArea data is a single series, so a user-supplied\n        // `stroke.colors` shorter than the slice count is NOT padded by the\n        // theme engine (unlike fill colors, which cycle). Without this, only\n        // slice 0 gets the requested color and the rest fall back to a grey\n        // default. Cycle the array — matching fill-color behaviour — so a\n        // single `stroke.colors: ['#fff']` borders every slice as expected.\n        stroke: Array.isArray(this.lineColorArr) ? (_b = this.lineColorArr[i]) != null ? _b : this.lineColorArr[i % this.lineColorArr.length] : this.lineColorArr,\n        strokeWidth: 0,\n        fill: pathFill,\n        fillOpacity: w.config.fill.opacity,\n        classes: `apexcharts-pie-area apexcharts-${this.chartType.toLowerCase()}-slice-${i}`\n      });\n      elPath.attr({\n        index: 0,\n        j: i\n      });\n      filters.setSelectionFilter(elPath, 0, i);\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        filters.dropShadow(elPath, shadow, i);\n      }\n      this.addListeners(elPath, this.donutDataLabels);\n      let labelPosition = {\n        x: 0,\n        y: 0\n      };\n      const midAngle = (startAngle + angle / 2) % this.fullAngle;\n      let arcCenter = { x: this.centerX, y: this.centerY };\n      if (this.chartType === \"pie\" || this.chartType === \"polarArea\") {\n        labelPosition = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize / 1.25 + w.config.plotOptions.pie.dataLabels.offset,\n          midAngle\n        );\n        arcCenter = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize / 2,\n          midAngle\n        );\n      } else if (this.chartType === \"donut\") {\n        labelPosition = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          (w.globals.radialSize + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset,\n          midAngle\n        );\n        arcCenter = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          (w.globals.radialSize + this.donutSize) / 2,\n          midAngle\n        );\n      }\n      Graphics.setAttrs(elPath.node, {\n        \"data:angle\": angle,\n        \"data:startAngle\": startAngle,\n        \"data:strokeWidth\": this.strokeWidth,\n        \"data:value\": series[i],\n        \"data:cx\": arcCenter.x,\n        \"data:cy\": arcCenter.y\n      });\n      elPieArc.add(elPath);\n      let dur = 0;\n      if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n        dur = angle / this.fullAngle * w.config.chart.animations.speed;\n        if (dur === 0) dur = 1;\n        this.animDur = dur + this.animDur;\n        this.animBeginArr.push(this.animDur);\n      } else {\n        this.animBeginArr.push(0);\n      }\n      if (morphActive && morphFrom) {\n        const targetD = this.getPiePath({\n          me: this,\n          startAngle,\n          angle,\n          size: this.sliceSizes[i]\n        });\n        const morphSpeed = this.ctx.morphTypeChange.getSpeed();\n        const animations = this.ctx.animations;\n        elPath.node.setAttribute(\"data:pathOrig\", targetD);\n        const morphRunner = elPath.animate(morphSpeed).plot(targetD, \"polygons\").attr({ \"stroke-width\": this.strokeWidth });\n        if (morphRunner && typeof morphRunner.after === \"function\") {\n          morphRunner.after(() => animations.animationCompleted(elPath));\n        } else {\n          animations.animationCompleted(elPath);\n        }\n      } else if (this.dynamicAnim && w.globals.dataChanged) {\n        this.animatePaths(elPath, {\n          size: this.sliceSizes[i],\n          endAngle,\n          startAngle,\n          prevStartAngle,\n          prevEndAngle,\n          animateStartingPos: true,\n          i,\n          animBeginArr: this.animBeginArr,\n          shouldSetPrevPaths: true,\n          dur: w.config.chart.animations.dynamicAnimation.speed\n        });\n      } else {\n        this.animatePaths(elPath, {\n          size: this.sliceSizes[i],\n          endAngle,\n          startAngle,\n          i,\n          totalItems: sectorAngleArr.length - 1,\n          animBeginArr: this.animBeginArr,\n          dur\n        });\n      }\n      if (w.config.plotOptions.pie.expandOnClick && this.chartType !== \"polarArea\") {\n        elPath.node.addEventListener(\"mouseup\", this.pieClicked.bind(this, i));\n      }\n      if (typeof w.interact.selectedDataPoints[0] !== \"undefined\" && w.interact.selectedDataPoints[0].indexOf(i) > -1) {\n        if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged && this.animDur > 0) {\n          const _this = this;\n          const _i = i;\n          setTimeout(() => _this.pieClicked(_i), this.animDur);\n        } else {\n          this.pieClicked(i);\n        }\n      }\n      if (w.config.dataLabels.enabled) {\n        const xPos = labelPosition.x;\n        const yPos = labelPosition.y;\n        let text = 100 * angle / this.fullAngle + \"%\";\n        if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) {\n          const formatter = w.config.dataLabels.formatter;\n          if (formatter !== void 0) {\n            text = formatter(w.globals.seriesPercent[i][0], {\n              seriesIndex: i,\n              w\n            });\n          }\n          const foreColor = w.globals.dataLabels.style.colors[i];\n          const elPieLabelWrap = graphics.group({\n            class: `apexcharts-datalabels`\n          });\n          const elPieLabel = graphics.drawText({\n            x: xPos,\n            y: yPos,\n            text,\n            textAnchor: \"middle\",\n            fontSize: w.config.dataLabels.style.fontSize,\n            fontFamily: w.config.dataLabels.style.fontFamily,\n            fontWeight: w.config.dataLabels.style.fontWeight,\n            foreColor\n          });\n          elPieLabelWrap.add(elPieLabel);\n          if (w.config.dataLabels.dropShadow.enabled) {\n            const textShadow = w.config.dataLabels.dropShadow;\n            filters.dropShadow(elPieLabel, textShadow);\n          }\n          elPieLabel.node.classList.add(\"apexcharts-pie-label\");\n          if (w.config.chart.animations.animate && w.globals.resized === false) {\n            elPieLabel.node.classList.add(\"apexcharts-pie-label-delay\");\n            elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + \"s\";\n          }\n          this.sliceLabels.push(elPieLabelWrap);\n        }\n      }\n      if (this.showExternalLabels && angle !== 0) {\n        const lines = this.getExternalLabelLines(i);\n        if (lines.some((l) => l !== \"\")) {\n          const anchor = Utils$1.polarToCartesian(\n            this.centerX,\n            this.centerY,\n            w.globals.radialSize,\n            midAngle\n          );\n          const elbow = Utils$1.polarToCartesian(\n            this.centerX,\n            this.centerY,\n            w.globals.radialSize + (this.externalCfg.connector.gap || 0),\n            midAngle\n          );\n          const isRight = elbow.x >= this.centerX;\n          const baseLabelX = isRight ? elbow.x + (this.externalCfg.connector.length || 0) : elbow.x - (this.externalCfg.connector.length || 0);\n          this.externalLabels.push({\n            lines,\n            anchor,\n            elbow,\n            side: isRight ? \"right\" : \"left\",\n            labelX: baseLabelX + parseFloat(this.externalCfg.offsetX || 0),\n            idealY: elbow.y + parseFloat(this.externalCfg.offsetY || 0),\n            connectorColor: this.externalCfg.connector.color || w.globals.colors[i],\n            foreColor: this.externalCfg.color || w.config.chart.foreColor\n          });\n        }\n      }\n    }\n    if (this.showExternalLabels && this.externalLabels.length) {\n      this.placeExternalLabels();\n      const revealOnAnimEnd = Environment.isBrowser() && (morphActive || this.dynamicAnim && w.globals.dataChanged || this.initialAnim && !w.globals.resized && !w.globals.dataChanged);\n      this.externalLabels.forEach((lbl) => {\n        const group = new CircularChartsHelpers(w).drawExternalLabel({\n          lines: lbl.lines,\n          lineHeight: this.externalLabelLineH,\n          anchor: lbl.anchor,\n          elbow: lbl.elbow,\n          labelX: lbl.labelX,\n          labelY: lbl.labelY,\n          side: lbl.side,\n          connector: {\n            show: this.externalCfg.connector.show,\n            width: this.externalCfg.connector.width,\n            color: lbl.connectorColor\n          },\n          style: this.externalLabelStyle,\n          foreColor: lbl.foreColor\n        });\n        if (revealOnAnimEnd) {\n          group.node.classList.add(\"apexcharts-element-hidden\");\n          w.globals.delayedElements.push({ el: group.node });\n        }\n        g.add(group);\n      });\n    }\n    return g;\n  }\n  /**\n   * Vertical de-overlap for outer (name) labels: per side, sort by ideal y and\n   * push neighbours apart so they keep at least one line-height of spacing.\n   * Mutates each entry's `labelY`. Connector lines re-route to the moved y.\n   */\n  placeExternalLabels() {\n    const w = this.w;\n    const lineHeight = this.externalLabelMaxLines * this.externalLabelLineH + 2;\n    const maxY = this.centerY + w.globals.radialSize + w.globals.pieExternalLabelMarginY;\n    [\"left\", \"right\"].forEach((side) => {\n      const items = this.externalLabels.filter((l) => l.side === side).sort((a, b) => a.idealY - b.idealY);\n      items.forEach((l) => {\n        l.labelY = l.idealY;\n      });\n      for (let k = 1; k < items.length; k++) {\n        if (items[k].labelY - items[k - 1].labelY < lineHeight) {\n          items[k].labelY = items[k - 1].labelY + lineHeight;\n        }\n      }\n      const last = items[items.length - 1];\n      const overflow = last ? last.labelY - maxY : 0;\n      if (overflow > 0) {\n        for (let k = items.length - 1; k >= 0; k--) {\n          items[k].labelY -= overflow;\n          if (k < items.length - 1 && items[k + 1].labelY - items[k].labelY < lineHeight) {\n            items[k].labelY = items[k + 1].labelY - lineHeight;\n          }\n        }\n      }\n    });\n  }\n  /**\n   * @param {any} elPath\n   * @param {Record<string, any>} dataLabels\n   */\n  addListeners(elPath, dataLabels) {\n    const graphics = new Graphics(this.w, this.ctx);\n    elPath.node.addEventListener(\n      \"mouseenter\",\n      graphics.pathMouseEnter.bind(graphics, elPath)\n    );\n    elPath.node.addEventListener(\n      \"mouseleave\",\n      graphics.pathMouseLeave.bind(graphics, elPath)\n    );\n    elPath.node.addEventListener(\n      \"mouseleave\",\n      this.revertDataLabelsInner.bind(this)\n    );\n    elPath.node.addEventListener(\n      \"mousedown\",\n      graphics.pathMouseDown.bind(graphics, elPath)\n    );\n    if (!this.donutDataLabels.total.showAlways) {\n      elPath.node.addEventListener(\n        \"mouseenter\",\n        this.printDataLabelsInner.bind(this, elPath.node, dataLabels)\n      );\n      elPath.node.addEventListener(\n        \"mousedown\",\n        this.printDataLabelsInner.bind(this, elPath.node, dataLabels)\n      );\n    }\n  }\n  // This function can be used for other circle charts too\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} opts\n   */\n  animatePaths(el, opts) {\n    const w = this.w;\n    const me = this;\n    let angle = opts.endAngle < opts.startAngle ? this.fullAngle + opts.endAngle - opts.startAngle : opts.endAngle - opts.startAngle;\n    let prevAngle = angle;\n    let fromStartAngle = opts.startAngle;\n    const toStartAngle = opts.startAngle;\n    if (opts.prevStartAngle !== void 0 && opts.prevEndAngle !== void 0) {\n      fromStartAngle = opts.prevEndAngle;\n      prevAngle = opts.prevEndAngle < opts.prevStartAngle ? this.fullAngle + opts.prevEndAngle - opts.prevStartAngle : opts.prevEndAngle - opts.prevStartAngle;\n    }\n    if (opts.i === w.config.series.length - 1) {\n      if (angle + toStartAngle > this.fullAngle) {\n        opts.endAngle = opts.endAngle - (angle + toStartAngle);\n      } else if (angle + toStartAngle < this.fullAngle) {\n        opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle));\n      }\n    }\n    if (angle === this.fullAngle) angle = this.fullAngle - 0.01;\n    me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts);\n  }\n  /**\n   * @param {any} el\n   * @param {number} fromStartAngle\n   * @param {number} toStartAngle\n   * @param {number} angle\n   * @param {number} prevAngle\n   * @param {Record<string, any>} opts\n   */\n  animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) {\n    const me = this;\n    const w = this.w;\n    const animations = new Animations(this.w);\n    const size = opts.size;\n    let path;\n    if (isNaN(fromStartAngle) || isNaN(prevAngle)) {\n      fromStartAngle = toStartAngle;\n      prevAngle = angle;\n      opts.dur = 0;\n    }\n    let currAngle = angle;\n    let startAngle = toStartAngle;\n    const fromAngle = fromStartAngle < toStartAngle ? this.fullAngle + fromStartAngle - toStartAngle : fromStartAngle - toStartAngle;\n    if (w.globals.dataChanged && opts.shouldSetPrevPaths) {\n      if (opts.prevEndAngle) {\n        path = me.getPiePath({\n          me,\n          startAngle: opts.prevStartAngle,\n          angle: opts.prevEndAngle < opts.prevStartAngle ? this.fullAngle + opts.prevEndAngle - opts.prevStartAngle : opts.prevEndAngle - opts.prevStartAngle,\n          size\n        });\n        el.attr({ d: path });\n      }\n    }\n    if (opts.dur !== 0) {\n      el.animate(opts.dur, opts.animBeginArr[opts.i]).after(\n        /** @this {any} */\n        function() {\n          if (me.chartType === \"pie\" || me.chartType === \"donut\" || me.chartType === \"polarArea\") {\n            this.animate(\n              w.config.chart.animations.dynamicAnimation.speed\n            ).attr({\n              \"stroke-width\": me.strokeWidth\n            });\n          }\n          if (opts.i === w.config.series.length - 1) {\n            animations.animationCompleted(el);\n          }\n        }\n      ).during((pos) => {\n        currAngle = fromAngle + (angle - fromAngle) * pos;\n        if (opts.animateStartingPos) {\n          currAngle = prevAngle + (angle - prevAngle) * pos;\n          startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos;\n        }\n        path = me.getPiePath({\n          me,\n          startAngle,\n          angle: currAngle,\n          size\n        });\n        el.node.setAttribute(\"data:pathOrig\", path);\n        el.attr({\n          d: path\n        });\n      });\n    } else {\n      path = me.getPiePath({\n        me,\n        startAngle,\n        angle,\n        size\n      });\n      if (!opts.isTrack) {\n        w.globals.animationEnded = true;\n      }\n      el.node.setAttribute(\"data:pathOrig\", path);\n      el.attr({\n        d: path,\n        \"stroke-width\": me.strokeWidth\n      });\n    }\n  }\n  /**\n   * @param {number} i\n   */\n  pieClicked(i) {\n    const w = this.w;\n    const me = this;\n    const size = me.sliceSizes[i] + (w.config.plotOptions.pie.expandOnClick ? 4 : 0);\n    const elPath = w.dom.Paper.findOne(\n      `.apexcharts-${me.chartType.toLowerCase()}-slice-${i}`\n    );\n    if (elPath.attr(\"data:pieClicked\") === \"true\") {\n      elPath.attr({\n        \"data:pieClicked\": \"false\"\n      });\n      this.revertDataLabelsInner();\n      const origPath = elPath.attr(\"data:pathOrig\");\n      elPath.attr({\n        d: origPath\n      });\n      return;\n    } else {\n      const allEls = w.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");\n      Array.prototype.forEach.call(allEls, (pieSlice) => {\n        pieSlice.setAttribute(\"data:pieClicked\", \"false\");\n        const origPath = pieSlice.getAttribute(\"data:pathOrig\");\n        if (origPath) {\n          pieSlice.setAttribute(\"d\", origPath);\n        }\n      });\n      w.interact.capturedDataPointIndex = i;\n      elPath.attr(\"data:pieClicked\", \"true\");\n    }\n    const startAngle = parseInt(elPath.attr(\"data:startAngle\"), 10);\n    const angle = parseInt(elPath.attr(\"data:angle\"), 10);\n    const path = me.getPiePath({\n      me,\n      startAngle,\n      angle,\n      size\n    });\n    if (angle === 360) return;\n    elPath.plot(path);\n  }\n  /**\n   * @param {number} prevStartAngle\n   * @param {number} prevEndAngle\n   */\n  getChangedPath(prevStartAngle, prevEndAngle) {\n    let path = \"\";\n    if (this.dynamicAnim && this.w.globals.dataChanged) {\n      path = this.getPiePath({\n        me: this,\n        startAngle: prevStartAngle,\n        angle: prevEndAngle - prevStartAngle,\n        // @ts-ignore — size is set dynamically during draw()\n        size: this.size\n      });\n    }\n    return path;\n  }\n  /** @param {{me: any, startAngle: any, angle: any, size: any}} opts */\n  getPiePath({ me, startAngle, angle, size }) {\n    let path;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let startDeg = startAngle;\n    let endDeg = angle + startAngle;\n    if (Math.ceil(endDeg) >= this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle) {\n      endDeg = this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle - 0.01;\n    }\n    let spanDeg = endDeg - startDeg;\n    const isSliceType = me.chartType === \"pie\" || me.chartType === \"donut\" || me.chartType === \"polarArea\";\n    const spacing = w.config.plotOptions.pie.spacing;\n    if (isSliceType && spacing > 0 && spanDeg > 0) {\n      const rRef = me.chartType === \"donut\" ? (size + me.donutSize) / 2 : size;\n      const gapDeg = rRef > 0 ? spacing / rRef * (180 / Math.PI) : 0;\n      const inset = Math.min(gapDeg / 2, Math.max(0, spanDeg / 2 - 0.5));\n      startDeg += inset;\n      spanDeg -= 2 * inset;\n    }\n    endDeg = startDeg + spanDeg;\n    if (Math.ceil(endDeg) > this.fullAngle) endDeg -= this.fullAngle;\n    const startRadians = Math.PI * (startDeg - 90) / 180;\n    const borderRadius = w.config.plotOptions.pie.borderRadius;\n    if (borderRadius > 0 && isSliceType) {\n      const roundedPath = this.getRoundedSlicePath({\n        me,\n        startDeg,\n        spanDeg,\n        size,\n        borderRadius\n      });\n      if (roundedPath) return roundedPath;\n    }\n    const endRadians = Math.PI * (endDeg - 90) / 180;\n    const x1 = me.centerX + size * Math.cos(startRadians);\n    const y1 = me.centerY + size * Math.sin(startRadians);\n    const x2 = me.centerX + size * Math.cos(endRadians);\n    const y2 = me.centerY + size * Math.sin(endRadians);\n    const startInner = Utils$1.polarToCartesian(\n      me.centerX,\n      me.centerY,\n      me.donutSize,\n      endDeg\n    );\n    const endInner = Utils$1.polarToCartesian(\n      me.centerX,\n      me.centerY,\n      me.donutSize,\n      startDeg\n    );\n    const largeArc = spanDeg > 180 ? 1 : 0;\n    const pathBeginning = [\"M\", x1, y1, \"A\", size, size, 0, largeArc, 1, x2, y2];\n    if (me.chartType === \"donut\") {\n      path = [\n        ...pathBeginning,\n        \"L\",\n        startInner.x,\n        startInner.y,\n        \"A\",\n        me.donutSize,\n        me.donutSize,\n        0,\n        largeArc,\n        0,\n        endInner.x,\n        endInner.y,\n        \"L\",\n        x1,\n        y1,\n        \"z\"\n      ].join(\" \");\n    } else if (me.chartType === \"pie\" || me.chartType === \"polarArea\") {\n      path = [...pathBeginning, \"L\", me.centerX, me.centerY, \"L\", x1, y1].join(\n        \" \"\n      );\n    } else {\n      path = [...pathBeginning].join(\" \");\n    }\n    return graphics.roundPathCorners(path, this.strokeWidth * 2);\n  }\n  /**\n   * Build a slice path with rounded corners (plotOptions.pie.borderRadius).\n   *\n   * The generic roundPathCorners() only rounds line->line joins, but a slice\n   * corner is an arc<->line join, so we construct the fillets explicitly here:\n   * every corner is inset by the (clamped) radius along both the arc and the\n   * radial edge, and a quadratic Bezier with its control point at the original\n   * sharp corner bridges the two inset points. Donut slices round all four\n   * corners; pie / polarArea slices round the two outer corners and keep the\n   * center apex sharp.\n   *\n   * Returns null when the slice is too small to round meaningfully, so the\n   * caller can fall back to a sharp-corner path.\n   *\n   * @param {{me: any, startDeg: number, spanDeg: number, size: number, borderRadius: number}} opts\n   * @returns {string | null}\n   */\n  getRoundedSlicePath({ me, startDeg, spanDeg, size, borderRadius }) {\n    if (!(spanDeg > 0)) return null;\n    const D2R2 = Math.PI / 180;\n    const cx = me.centerX;\n    const cy = me.centerY;\n    const isDonut = me.chartType === \"donut\";\n    const rOut = size;\n    const rIn = isDonut ? me.donutSize : 0;\n    const spanRad = spanDeg * D2R2;\n    let r = borderRadius;\n    r = Math.min(r, spanRad * rOut / 2);\n    if (isDonut) {\n      r = Math.min(r, spanRad * rIn / 2);\n      r = Math.min(r, (rOut - rIn) / 2);\n    } else {\n      r = Math.min(r, rOut / 2);\n    }\n    if (!(r > 0.5)) return null;\n    const a0 = startDeg;\n    const a1 = startDeg + spanDeg;\n    if (isDonut) {\n      return roundedDonutSegmentPath({ cx, cy, rIn, rOut, a0, a1, r, spanDeg });\n    }\n    return roundedPieSegmentPath({ cx, cy, rOut, a0, a1, r, spanDeg });\n  }\n  /**\n   * @param {any} parent\n   */\n  drawPolarElements(parent) {\n    const w = this.w;\n    const scale = new Scales(this.w);\n    const graphics = new Graphics(this.w);\n    const helpers = new CircularChartsHelpers(this.w);\n    const gCircles = graphics.group();\n    const gYAxis = graphics.group();\n    const yScale = scale.niceScale(0, Math.ceil(this.maxY), 0);\n    const yTexts = yScale.result.reverse();\n    const len = yScale.result.length;\n    this.maxY = yScale.niceMax;\n    let circleSize = w.globals.radialSize;\n    const diff = circleSize / (len - 1);\n    for (let i = 0; i < len - 1; i++) {\n      const circle = graphics.drawCircle(circleSize);\n      circle.attr({\n        cx: this.centerX,\n        cy: this.centerY,\n        fill: \"none\",\n        \"stroke-width\": w.config.plotOptions.polarArea.rings.strokeWidth,\n        stroke: w.config.plotOptions.polarArea.rings.strokeColor\n      });\n      if (w.config.yaxis[0].show) {\n        const yLabel = helpers.drawYAxisTexts(\n          this.centerX,\n          this.centerY - circleSize + parseInt(w.config.yaxis[0].labels.style.fontSize, 10) / 2,\n          i,\n          yTexts[i]\n        );\n        gYAxis.add(yLabel);\n      }\n      gCircles.add(circle);\n      circleSize = circleSize - diff;\n    }\n    this.drawSpokes(parent);\n    parent.add(gCircles);\n    parent.add(gYAxis);\n  }\n  /**\n   * @param {any} dataLabelsGroup\n   * @param {Record<string, any>} dataLabelsConfig\n   * @param {Record<string, any>} opts\n   */\n  renderInnerDataLabels(dataLabelsGroup, dataLabelsConfig, opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const showTotal = dataLabelsConfig.total.show;\n    dataLabelsGroup.node.innerHTML = \"\";\n    dataLabelsGroup.node.style.opacity = opts.opacity;\n    const x = opts.centerX;\n    const y = !this.donutDataLabels.total.label ? opts.centerY - opts.centerY / 6 : opts.centerY;\n    let labelColor, valueColor;\n    if (dataLabelsConfig.name.color === void 0) {\n      labelColor = w.globals.colors[0];\n    } else {\n      labelColor = dataLabelsConfig.name.color;\n    }\n    let labelFontSize = dataLabelsConfig.name.fontSize;\n    let labelFontFamily = dataLabelsConfig.name.fontFamily;\n    let labelFontWeight = dataLabelsConfig.name.fontWeight;\n    if (dataLabelsConfig.value.color === void 0) {\n      valueColor = w.config.chart.foreColor;\n    } else {\n      valueColor = dataLabelsConfig.value.color;\n    }\n    const lbFormatter = dataLabelsConfig.value.formatter;\n    let val = \"\";\n    let name2 = \"\";\n    if (showTotal) {\n      labelColor = dataLabelsConfig.total.color;\n      labelFontSize = dataLabelsConfig.total.fontSize;\n      labelFontFamily = dataLabelsConfig.total.fontFamily;\n      labelFontWeight = dataLabelsConfig.total.fontWeight;\n      name2 = !this.donutDataLabels.total.label ? \"\" : dataLabelsConfig.total.label;\n      val = dataLabelsConfig.total.formatter(w);\n    } else {\n      if (w.seriesData.series.length === 1) {\n        val = lbFormatter(w.seriesData.series[0], w);\n        name2 = w.seriesData.seriesNames[0];\n      }\n    }\n    if (name2) {\n      name2 = dataLabelsConfig.name.formatter(\n        name2,\n        dataLabelsConfig.total.show,\n        w\n      );\n    }\n    if (dataLabelsConfig.name.show) {\n      const elLabel = graphics.drawText({\n        x,\n        y: y + parseFloat(dataLabelsConfig.name.offsetY),\n        text: name2,\n        textAnchor: \"middle\",\n        foreColor: labelColor,\n        fontSize: labelFontSize,\n        fontWeight: labelFontWeight,\n        fontFamily: labelFontFamily\n      });\n      elLabel.node.classList.add(\"apexcharts-datalabel-label\");\n      dataLabelsGroup.add(elLabel);\n    }\n    if (dataLabelsConfig.value.show) {\n      const valOffset = dataLabelsConfig.name.show ? parseFloat(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY;\n      const elValue = graphics.drawText({\n        x,\n        y: y + valOffset,\n        text: val,\n        textAnchor: \"middle\",\n        foreColor: valueColor,\n        fontWeight: dataLabelsConfig.value.fontWeight,\n        fontSize: dataLabelsConfig.value.fontSize,\n        fontFamily: dataLabelsConfig.value.fontFamily\n      });\n      elValue.node.classList.add(\"apexcharts-datalabel-value\");\n      dataLabelsGroup.add(elValue);\n    }\n    return dataLabelsGroup;\n  }\n  /**\n   *\n   * @param {string} name - The name of the series\n   * @param {string} val - The value of that series\n   * @param {any} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total\n   * @param {Record<string, any>} labelsConfig\n   */\n  printInnerLabels(labelsConfig, name2, val, el) {\n    const w = this.w;\n    let labelColor;\n    if (el) {\n      if (labelsConfig.name.color === void 0) {\n        labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute(\"rel\"), 10) - 1];\n      } else {\n        labelColor = labelsConfig.name.color;\n      }\n    } else {\n      if (w.seriesData.series.length > 1 && labelsConfig.total.show) {\n        labelColor = labelsConfig.total.color;\n      }\n    }\n    const elLabel = w.dom.baseEl.querySelector(\".apexcharts-datalabel-label\");\n    const elValue = w.dom.baseEl.querySelector(\".apexcharts-datalabel-value\");\n    const lbFormatter = labelsConfig.value.formatter;\n    val = lbFormatter(val, w);\n    if (!el && typeof labelsConfig.total.formatter === \"function\") {\n      val = labelsConfig.total.formatter(w);\n    }\n    const isTotal = name2 === labelsConfig.total.label;\n    name2 = !this.donutDataLabels.total.label ? \"\" : labelsConfig.name.formatter(name2, isTotal, w);\n    if (elLabel !== null) {\n      elLabel.textContent = name2;\n    }\n    if (elValue !== null) {\n      elValue.textContent = val;\n    }\n    if (elLabel !== null) {\n      const elLabelEl = (\n        /** @type {HTMLElement} */\n        elLabel\n      );\n      elLabelEl.style.fill = labelColor;\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} dataLabelsConfig\n   */\n  printDataLabelsInner(el, dataLabelsConfig) {\n    const w = this.w;\n    const val = el.getAttribute(\"data:value\");\n    const name2 = w.seriesData.seriesNames[parseInt(el.parentNode.getAttribute(\"rel\"), 10) - 1];\n    if (w.seriesData.series.length > 1) {\n      this.printInnerLabels(dataLabelsConfig, name2, val, el);\n    }\n    const dataLabelsGroup = w.dom.baseEl.querySelector(\n      \".apexcharts-datalabels-group\"\n    );\n    if (dataLabelsGroup !== null) {\n      const dataLabelsGroupEl = (\n        /** @type {HTMLElement} */\n        dataLabelsGroup\n      );\n      dataLabelsGroupEl.style.opacity = \"1\";\n    }\n  }\n  /**\n   * @param {any} parent\n   */\n  drawSpokes(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const spokeConfig = w.config.plotOptions.polarArea.spokes;\n    if (spokeConfig.strokeWidth === 0) return;\n    const spokes = [];\n    const angleDivision = 360 / w.seriesData.series.length;\n    for (let i = 0; i < w.seriesData.series.length; i++) {\n      spokes.push(\n        Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize,\n          w.config.plotOptions.pie.startAngle + angleDivision * i\n        )\n      );\n    }\n    spokes.forEach((p, i) => {\n      const line = graphics.drawLine(\n        p.x,\n        p.y,\n        this.centerX,\n        this.centerY,\n        Array.isArray(spokeConfig.connectorColors) ? spokeConfig.connectorColors[i] : spokeConfig.connectorColors\n      );\n      parent.add(line);\n    });\n  }\n  revertDataLabelsInner() {\n    const w = this.w;\n    if (this.donutDataLabels.show) {\n      const dataLabelsGroup = w.dom.Paper.findOne(\n        `.apexcharts-datalabels-group`\n      );\n      const dataLabels = this.renderInnerDataLabels(\n        dataLabelsGroup,\n        this.donutDataLabels,\n        {\n          hollowSize: this.donutSize,\n          centerX: this.centerX,\n          centerY: this.centerY,\n          opacity: this.donutDataLabels.show\n        }\n      );\n      const elPie = w.dom.Paper.findOne(\n        \".apexcharts-radialbar, .apexcharts-pie\"\n      );\n      elPie.add(dataLabels);\n    }\n  }\n}\nclass Radar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.chartType = this.w.config.chart.type;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    this.animDur = 0;\n    this.graphics = new Graphics(this.w);\n    this.lineColorArr = w.globals.stroke.colors !== void 0 ? w.globals.stroke.colors : w.globals.colors;\n    this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.layout.gridHeight : w.layout.gridWidth;\n    this.isLog = w.config.yaxis[0].logarithmic;\n    this.logBase = w.config.yaxis[0].logBase;\n    this.coreUtils = new CoreUtils(this.w);\n    this.maxValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, w.globals.maxY, 0) : w.globals.maxY;\n    this.minValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, this.w.globals.minY, 0) : w.globals.minY;\n    this.polygons = w.config.plotOptions.radar.polygons;\n    this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n    this.size = this.defaultSize / 2.1 - this.strokeWidth - w.config.chart.dropShadow.blur;\n    if (w.config.xaxis.labels.show) {\n      this.size = this.size - w.layout.xAxisLabelsWidth / 1.75;\n    }\n    if (w.config.plotOptions.radar.size !== void 0) {\n      this.size = w.config.plotOptions.radar.size;\n    }\n    this.dataRadiusOfPercent = /** @type {any} */\n    [];\n    this.dataRadius = /** @type {any} */\n    [];\n    this.angleArr = /** @type {any} */\n    [];\n    this.dataPointsLen = 0;\n    this.disAngle = 0;\n    this.yaxisLabelsTextsPos = [];\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    const w = this.w;\n    const fill = new Fill(this.w);\n    const allSeries = [];\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    if (series.length) {\n      this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length;\n    }\n    this.disAngle = Math.PI * 2 / this.dataPointsLen;\n    const halfW = w.layout.gridWidth / 2;\n    const halfH = w.layout.gridHeight / 2;\n    const translateX = halfW + w.config.plotOptions.radar.offsetX;\n    const translateY = halfH + w.config.plotOptions.radar.offsetY;\n    const ret = this.graphics.group({\n      class: \"apexcharts-radar-series apexcharts-plot-series\",\n      transform: `translate(${translateX || 0}, ${translateY || 0})`\n    });\n    let dataPointsPos = [];\n    let elPointsMain = null;\n    let elDataPointsMain = null;\n    this.yaxisLabels = this.graphics.group({\n      class: \"apexcharts-yaxis\"\n    });\n    series.forEach((s, i) => {\n      const longestSeries = s.length === w.globals.dataPoints;\n      const elSeries = this.graphics.group().attr({\n        class: `apexcharts-series`,\n        \"data:longestSeries\": longestSeries,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      this.dataRadiusOfPercent[i] = [];\n      this.dataRadius[i] = [];\n      this.angleArr[i] = [];\n      s.forEach((dv, j) => {\n        const range = Math.abs(this.maxValue - this.minValue);\n        dv = dv - this.minValue;\n        if (this.isLog) {\n          dv = this.coreUtils.getLogVal(this.logBase, dv, 0);\n        }\n        this.dataRadiusOfPercent[i][j] = dv / range;\n        this.dataRadius[i][j] = this.dataRadiusOfPercent[i][j] * this.size;\n        this.angleArr[i][j] = j * this.disAngle;\n      });\n      dataPointsPos = this.getDataPointsPos(\n        this.dataRadius[i],\n        this.angleArr[i]\n      );\n      const paths = this.createPaths(dataPointsPos, {\n        x: 0,\n        y: 0\n      });\n      elPointsMain = this.graphics.group({\n        class: \"apexcharts-series-markers-wrap apexcharts-element-hidden\"\n      });\n      elDataPointsMain = this.graphics.group({\n        class: `apexcharts-datalabels`,\n        \"data:realIndex\": i\n      });\n      w.globals.delayedElements.push({\n        el: elPointsMain.node,\n        index: i\n      });\n      const defaultRenderedPathOptions = {\n        i,\n        realIndex: i,\n        animationDelay: i,\n        initialSpeed: w.config.chart.animations.speed,\n        dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n        className: `apexcharts-radar`,\n        shouldClipToGrid: false,\n        bindEventsOnPaths: false,\n        stroke: w.globals.stroke.colors[i],\n        strokeLineCap: w.config.stroke.lineCap\n      };\n      let pathFrom = null;\n      if (w.globals.previousPaths.length > 0) {\n        pathFrom = this.getPreviousPath(i);\n      }\n      for (let p = 0; p < paths.linePathsTo.length; p++) {\n        const renderedLinePath = this.graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom,\n          pathTo: paths.linePathsTo[p],\n          strokeWidth: Array.isArray(this.strokeWidth) ? this.strokeWidth[i] : this.strokeWidth,\n          fill: \"none\",\n          drawShadow: false\n        }));\n        elSeries.add(renderedLinePath);\n        const pathFill = fill.fillPath({\n          seriesNumber: i\n        });\n        const renderedAreaPath = this.graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom,\n          pathTo: paths.areaPathsTo[p],\n          strokeWidth: 0,\n          fill: pathFill,\n          drawShadow: false,\n          // Radial mask: the area fill blooms outward from the radar's center\n          // (in this group's local coords) instead of the default L→R rect wipe.\n          drawMask: { type: \"radial\", cx: 0, cy: 0, r: this.size }\n        }));\n        if (w.config.chart.dropShadow.enabled) {\n          const filters = new Filters(this.w);\n          const shadow = w.config.chart.dropShadow;\n          filters.dropShadow(\n            renderedAreaPath,\n            Object.assign({}, shadow, { noUserSpaceOnUse: true }),\n            i\n          );\n        }\n        elSeries.add(renderedAreaPath);\n      }\n      s.forEach((sj, j) => {\n        const markers = new Markers(this.w, this.ctx);\n        const opts = markers.getMarkerConfig({\n          cssClass: \"apexcharts-marker\",\n          seriesIndex: i,\n          dataPointIndex: j\n        });\n        const point = this.graphics.drawMarker(\n          dataPointsPos[j].x,\n          dataPointsPos[j].y,\n          opts\n        );\n        point.attr(\"rel\", j);\n        point.attr(\"j\", j);\n        point.attr(\"index\", i);\n        point.node.setAttribute(\"default-marker-size\", opts.pSize);\n        const elPointsWrap = this.graphics.group({\n          class: \"apexcharts-series-markers\"\n        });\n        if (elPointsWrap) {\n          elPointsWrap.add(point);\n        }\n        elPointsMain.add(elPointsWrap);\n        elSeries.add(elPointsMain);\n        const dataLabelsConfig = w.config.dataLabels;\n        if (dataLabelsConfig.enabled) {\n          const text = dataLabelsConfig.formatter(w.seriesData.series[i][j], {\n            seriesIndex: i,\n            dataPointIndex: j,\n            w\n          });\n          dataLabels.plotDataLabelsText({\n            x: dataPointsPos[j].x,\n            y: dataPointsPos[j].y,\n            text,\n            textAnchor: \"middle\",\n            i,\n            j: i,\n            // `j` above is the series index (kept for the color lookup), so\n            // pass the real data point index for per-point offsets\n            seriesIndex: i,\n            dataPointIndex: j,\n            parent: elDataPointsMain,\n            offsetCorrection: false,\n            dataLabelsConfig: __spreadValues({}, dataLabelsConfig)\n          });\n        }\n        elSeries.add(elDataPointsMain);\n      });\n      allSeries.push(elSeries);\n    });\n    this.drawPolygons({\n      parent: ret\n    });\n    if (w.config.xaxis.labels.show) {\n      const xaxisTexts = this.drawXAxisTexts();\n      ret.add(xaxisTexts);\n    }\n    allSeries.forEach((elS) => {\n      ret.add(elS);\n    });\n    ret.add(this.yaxisLabels);\n    return ret;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawPolygons(opts) {\n    const w = this.w;\n    const { parent } = opts;\n    const helpers = new CircularChartsHelpers(this.w);\n    const yaxisTexts = w.globals.yAxisScale[0].result.reverse();\n    const layers = yaxisTexts.length;\n    const radiusSizes = [];\n    const layerDis = this.size / (layers - 1);\n    for (let i = 0; i < layers; i++) {\n      radiusSizes[i] = layerDis * i;\n    }\n    radiusSizes.reverse();\n    const polygonStrings = [];\n    const lines = [];\n    radiusSizes.forEach((radiusSize, r) => {\n      const polygon = Utils$1.getPolygonPos(radiusSize, this.dataPointsLen);\n      let string = \"\";\n      polygon.forEach((p, i) => {\n        if (r === 0) {\n          const line = this.graphics.drawLine(\n            p.x,\n            p.y,\n            0,\n            0,\n            Array.isArray(this.polygons.connectorColors) ? this.polygons.connectorColors[i] : this.polygons.connectorColors\n          );\n          lines.push(line);\n        }\n        if (i === 0) {\n          this.yaxisLabelsTextsPos.push({\n            x: p.x,\n            y: p.y\n          });\n        }\n        string += p.x + \",\" + p.y + \" \";\n      });\n      polygonStrings.push(string);\n    });\n    polygonStrings.forEach((p, i) => {\n      const strokeColors = this.polygons.strokeColors;\n      const strokeWidth = this.polygons.strokeWidth;\n      const polygon = this.graphics.drawPolygon(\n        p,\n        Array.isArray(strokeColors) ? strokeColors[i] : strokeColors,\n        Array.isArray(strokeWidth) ? strokeWidth[i] : strokeWidth,\n        w.globals.radarPolygons.fill.colors[i]\n      );\n      parent.add(polygon);\n    });\n    lines.forEach((l) => {\n      parent.add(l);\n    });\n    if (w.config.yaxis[0].show) {\n      this.yaxisLabelsTextsPos.forEach(\n        (p, i) => {\n          const yText = helpers.drawYAxisTexts(p.x, p.y, i, yaxisTexts[i]);\n          this.yaxisLabels.add(yText);\n        }\n      );\n    }\n  }\n  drawXAxisTexts() {\n    const w = this.w;\n    const xaxisLabelsConfig = w.config.xaxis.labels;\n    const elXAxisWrap = this.graphics.group({\n      class: \"apexcharts-xaxis\"\n    });\n    const polygonPos = Utils$1.getPolygonPos(this.size, this.dataPointsLen);\n    w.labelData.labels.forEach((label, i) => {\n      const formatter = w.config.xaxis.labels.formatter;\n      const dataLabels = new DataLabels(this.w, this.ctx);\n      if (polygonPos[i]) {\n        const textPos = this.getTextPos(polygonPos[i], this.size);\n        const text = formatter(label, {\n          seriesIndex: -1,\n          dataPointIndex: i,\n          w\n        });\n        const dataLabelText = dataLabels.plotDataLabelsText({\n          x: textPos.newX,\n          y: textPos.newY,\n          text,\n          textAnchor: textPos.textAnchor,\n          i,\n          j: i,\n          parent: elXAxisWrap,\n          className: \"apexcharts-xaxis-label\",\n          color: Array.isArray(xaxisLabelsConfig.style.colors) && xaxisLabelsConfig.style.colors[i] ? xaxisLabelsConfig.style.colors[i] : \"#a8a8a8\",\n          dataLabelsConfig: __spreadValues({\n            textAnchor: textPos.textAnchor,\n            dropShadow: { enabled: false }\n          }, xaxisLabelsConfig),\n          offsetCorrection: false\n        });\n        dataLabelText.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n      }\n    });\n    return elXAxisWrap;\n  }\n  /**\n   * @param {Array<Record<string, any>>} pos\n   * @param {Record<string, any>} origin\n   */\n  createPaths(pos, origin) {\n    const linePathsTo = [];\n    let linePathsFrom = [];\n    const areaPathsTo = [];\n    let areaPathsFrom = [];\n    if (pos.length) {\n      linePathsFrom = [this.graphics.move(origin.x, origin.y)];\n      areaPathsFrom = [this.graphics.move(origin.x, origin.y)];\n      let linePathTo = this.graphics.move(pos[0].x, pos[0].y);\n      let areaPathTo = this.graphics.move(pos[0].x, pos[0].y);\n      pos.forEach((p, i) => {\n        linePathTo += this.graphics.line(p.x, p.y);\n        areaPathTo += this.graphics.line(p.x, p.y);\n        if (i === pos.length - 1) {\n          linePathTo += \"Z\";\n          areaPathTo += \"Z\";\n        }\n      });\n      linePathsTo.push(linePathTo);\n      areaPathsTo.push(areaPathTo);\n    }\n    return {\n      linePathsFrom,\n      linePathsTo,\n      areaPathsFrom,\n      areaPathsTo\n    };\n  }\n  /**\n   * @param {Record<string, any>} pos\n   * @param {number} polygonSize\n   */\n  getTextPos(pos, polygonSize) {\n    const limit = 10;\n    let textAnchor = \"middle\";\n    let newX = pos.x;\n    let newY = pos.y;\n    if (Math.abs(pos.x) >= limit) {\n      if (pos.x > 0) {\n        textAnchor = \"start\";\n        newX += 10;\n      } else if (pos.x < 0) {\n        textAnchor = \"end\";\n        newX -= 10;\n      }\n    } else {\n      textAnchor = \"middle\";\n    }\n    if (Math.abs(pos.y) >= polygonSize - limit) {\n      if (pos.y < 0) {\n        newY -= 10;\n      } else if (pos.y > 0) {\n        newY += 10;\n      }\n    }\n    return {\n      textAnchor,\n      newX,\n      newY\n    };\n  }\n  /**\n   * @param {number} realIndex\n   */\n  getPreviousPath(realIndex) {\n    const w = this.w;\n    let pathFrom = null;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if (gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(String(realIndex), 10)) {\n        if (typeof w.globals.previousPaths[pp].paths[0] !== \"undefined\") {\n          pathFrom = w.globals.previousPaths[pp].paths[0].d;\n        }\n      }\n    }\n    return pathFrom;\n  }\n  /**\n   * @param {any[]} dataRadiusArr\n   * @param {any[]} angleArr\n   */\n  getDataPointsPos(dataRadiusArr, angleArr, dataPointsLen = this.dataPointsLen) {\n    dataRadiusArr = dataRadiusArr || [];\n    angleArr = angleArr || [];\n    const dataPointsPosArray = [];\n    for (let j = 0; j < dataPointsLen; j++) {\n      const curPointPos = {};\n      curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]);\n      curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]);\n      dataPointsPosArray.push(curPointPos);\n    }\n    return dataPointsPosArray;\n  }\n}\nclass Radial extends Pie {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    super(w, ctx);\n    this.ctx = ctx;\n    this.w = w;\n    this.animBeginArr = [0];\n    this.animDur = 0;\n    this.startAngle = w.config.plotOptions.radialBar.startAngle;\n    this.endAngle = w.config.plotOptions.radialBar.endAngle;\n    this.totalAngle = Math.abs(\n      w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle\n    );\n    this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle;\n    this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle;\n    this.barLabels = this.w.config.plotOptions.radialBar.barLabels;\n    this.donutDataLabels = this.w.config.plotOptions.radialBar.dataLabels;\n    this.radialDataLabels = this.donutDataLabels;\n    if (!this.trackStartAngle) this.trackStartAngle = this.startAngle;\n    if (!this.trackEndAngle) this.trackEndAngle = this.endAngle;\n    if (this.endAngle === 360) this.endAngle = 359.99;\n    this.margin = parseInt(w.config.plotOptions.radialBar.track.margin, 10);\n    this.onBarLabelClick = this.onBarLabelClick.bind(this);\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const ret = graphics.group({\n      class: \"apexcharts-radialbar\"\n    });\n    if (w.globals.noData) return ret;\n    const elSeries = graphics.group();\n    const centerY = this.defaultSize / 2;\n    const centerX = w.layout.gridWidth / 2;\n    let size = this.defaultSize / 2.05;\n    if (!w.config.chart.sparkline.enabled) {\n      size = size - w.config.stroke.width - w.config.chart.dropShadow.blur;\n    }\n    const colorArr = w.globals.fill.colors;\n    const rb = w.config.plotOptions.radialBar;\n    const hasBands = Array.isArray(rb.bands) && rb.bands.length > 0;\n    const hideTrack = hasBands && rb.bandsStyle && rb.bandsStyle.hideTrackWhenPresent;\n    const isNeedleShape = rb.shape === \"needle\";\n    if (rb.track.show && !hideTrack) {\n      const elTracks = this.drawTracks({\n        size,\n        centerX,\n        centerY,\n        colorArr,\n        series\n      });\n      elSeries.add(elTracks);\n    }\n    if (hasBands) {\n      const elBands = this.drawBands({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      elSeries.add(elBands);\n    }\n    const elG = this.drawArcs({\n      size,\n      centerX,\n      centerY,\n      colorArr,\n      series,\n      // When `needle.showValueArc` is true, render both the filled value-arc\n      // and the needle on top — required for gauges that want a progress\n      // ring with a pointer indicator (default still hides the arc when in\n      // needle shape, preserving prior behavior).\n      skipValueArc: isNeedleShape && !((_a = rb.needle) == null ? void 0 : _a.showValueArc)\n    });\n    if (rb.ticks && rb.ticks.show) {\n      const elTicks = this.drawTicks({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      const isInitialMount = this.initialAnim && !w.globals.dataChanged && !w.globals.resized;\n      if (isInitialMount && Environment.isBrowser() && w.globals.shouldAnimate) {\n        const ticksNode = elTicks.node;\n        ticksNode.style.opacity = \"0\";\n        ticksNode.style.transition = \"opacity 280ms ease-out\";\n        const sweepDur = w.config.chart.animations.speed || 800;\n        setTimeout(() => {\n          ticksNode.style.opacity = \"1\";\n        }, sweepDur);\n      }\n      elSeries.add(elTicks);\n    }\n    if (isNeedleShape) {\n      const elNeedle = this.drawNeedle({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      elSeries.add(elNeedle);\n    }\n    let totalAngle = 360;\n    if (w.config.plotOptions.radialBar.startAngle < 0) {\n      totalAngle = this.totalAngle;\n    }\n    const angleRatio = (360 - totalAngle) / 360;\n    w.globals.radialSize = size - size * angleRatio;\n    if (this.radialDataLabels.value.show) {\n      const offset = Math.max(\n        this.radialDataLabels.value.offsetY,\n        this.radialDataLabels.name.offsetY\n      );\n      w.globals.radialSize += offset * angleRatio;\n    }\n    elSeries.add(elG.g);\n    if (w.config.plotOptions.radialBar.hollow.position === \"front\") {\n      elG.g.add(elG.elHollow);\n      if (elG.dataLabels) {\n        elG.g.add(elG.dataLabels);\n      }\n    }\n    ret.add(elSeries);\n    return ret;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawTracks(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const g = graphics.group({\n      class: \"apexcharts-tracks\"\n    });\n    const filters = new Filters(this.w);\n    const fill = new Fill(this.w);\n    const strokeWidth = this.getStrokeWidth(opts);\n    opts.size = opts.size - strokeWidth / 2;\n    for (let i = 0; i < opts.series.length; i++) {\n      const elRadialBarTrack = graphics.group({\n        class: \"apexcharts-radialbar-track apexcharts-track\"\n      });\n      g.add(elRadialBarTrack);\n      elRadialBarTrack.attr({\n        rel: i + 1\n      });\n      opts.size = opts.size - strokeWidth - this.margin;\n      const trackConfig = w.config.plotOptions.radialBar.track;\n      const pathFill = fill.fillPath({\n        seriesNumber: 0,\n        size: opts.size,\n        fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background,\n        solid: true\n      });\n      const startAngle = this.trackStartAngle;\n      let endAngle = this.trackEndAngle;\n      if (Math.abs(endAngle) + Math.abs(startAngle) >= 360)\n        endAngle = 360 - Math.abs(this.startAngle) - 0.1;\n      const elPath = graphics.drawPath({\n        d: \"\",\n        stroke: pathFill,\n        strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth, 10) / 100,\n        fill: \"none\",\n        strokeOpacity: trackConfig.opacity,\n        classes: \"apexcharts-radialbar-area\"\n      });\n      if (trackConfig.dropShadow.enabled) {\n        const shadow = trackConfig.dropShadow;\n        filters.dropShadow(elPath, shadow);\n      }\n      elRadialBarTrack.add(elPath);\n      elPath.attr(\"id\", \"apexcharts-radialbarTrack-\" + i);\n      this.animatePaths(elPath, {\n        centerX: opts.centerX,\n        centerY: opts.centerY,\n        endAngle,\n        startAngle,\n        size: opts.size,\n        i,\n        totalItems: 2,\n        animBeginArr: 0,\n        dur: 0,\n        isTrack: true\n      });\n    }\n    return g;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawArcs(opts) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    const filters = new Filters(this.w);\n    const g = graphics.group();\n    const strokeWidth = this.getStrokeWidth(opts);\n    opts.size = opts.size - strokeWidth / 2;\n    let hollowFillID = w.config.plotOptions.radialBar.hollow.background;\n    const hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2;\n    const hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin;\n    if (w.config.plotOptions.radialBar.hollow.image !== void 0) {\n      hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID);\n    }\n    const elHollow = this.drawHollow({\n      size: hollowRadius,\n      centerX: opts.centerX,\n      centerY: opts.centerY,\n      fill: hollowFillID ? hollowFillID : \"transparent\"\n    });\n    if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) {\n      const shadow = w.config.plotOptions.radialBar.hollow.dropShadow;\n      filters.dropShadow(elHollow, shadow);\n    }\n    let shown = 1;\n    if (!this.radialDataLabels.total.show && w.seriesData.series.length > 1) {\n      shown = 0;\n    }\n    let dataLabels = null;\n    if (this.radialDataLabels.show) {\n      const dataLabelsGroup = w.dom.Paper.findOne(\n        `.apexcharts-datalabels-group`\n      );\n      dataLabels = this.renderInnerDataLabels(\n        dataLabelsGroup,\n        this.radialDataLabels,\n        {\n          hollowSize,\n          centerX: opts.centerX,\n          centerY: opts.centerY,\n          opacity: shown\n        }\n      );\n    }\n    if (w.config.plotOptions.radialBar.hollow.position === \"back\") {\n      g.add(elHollow);\n      if (dataLabels) {\n        g.add(dataLabels);\n      }\n    }\n    let reverseLoop = false;\n    if (w.config.plotOptions.radialBar.inverseOrder) {\n      reverseLoop = true;\n    }\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    for (let i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) {\n      const elRadialBarArc = graphics.group({\n        class: `apexcharts-series apexcharts-radial-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i])\n      });\n      g.add(elRadialBarArc);\n      elRadialBarArc.attr({\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      Series.addCollapsedClassToSeries(this.w, elRadialBarArc, i);\n      opts.size = opts.size - strokeWidth - this.margin;\n      const pathFill = fill.fillPath({\n        seriesNumber: i,\n        size: opts.size,\n        value: opts.series[i]\n      });\n      const startAngle = this.startAngle;\n      let prevStartAngle;\n      const rb = w.config.plotOptions.radialBar;\n      const domainMin = typeof rb.min === \"number\" ? rb.min : 0;\n      const domainMax = typeof rb.max === \"number\" ? rb.max : 100;\n      const domainSpan = domainMax === domainMin ? 1 : domainMax - domainMin;\n      const valueToFraction = (v) => {\n        const clamped = Math.min(Math.max(v, domainMin), domainMax);\n        return Math.max(0, (clamped - domainMin) / domainSpan);\n      };\n      const dataValue = valueToFraction(Utils$1.negToZero(opts.series[i]));\n      let endAngle = Math.round(this.totalAngle * dataValue) + this.startAngle;\n      let prevEndAngle;\n      if (w.globals.dataChanged) {\n        prevStartAngle = this.startAngle;\n        prevEndAngle = Math.round(\n          this.totalAngle * valueToFraction(Utils$1.negToZero(w.globals.previousPaths[i]))\n        ) + prevStartAngle;\n      }\n      const currFullAngle = Math.abs(endAngle) + Math.abs(startAngle);\n      if (currFullAngle > 360) {\n        endAngle = endAngle - 0.01;\n      }\n      const prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle);\n      if (prevFullAngle > 360) {\n        prevEndAngle = prevEndAngle - 0.01;\n      }\n      const angle = endAngle - startAngle;\n      const dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray;\n      const morphFrom = morphActive ? this.ctx.morphTypeChange.getInitialPathFor(i, 0) : null;\n      const morphFromType = morphActive ? this.ctx.morphTypeChange.getFromType() : null;\n      const morphFromFilled = !!morphFrom && (morphFromType === \"bar\" || morphFromType === \"funnel\" || morphFromType === \"pyramid\" || morphFromType === \"pie\" || morphFromType === \"donut\" || morphFromType === \"polarArea\");\n      const elPath = graphics.drawPath({\n        d: morphFrom || \"\",\n        stroke: morphFromFilled ? \"transparent\" : opts.skipValueArc ? \"transparent\" : pathFill,\n        strokeWidth: morphFromFilled ? 0 : opts.skipValueArc ? 0 : strokeWidth,\n        fill: morphFromFilled ? pathFill : \"none\",\n        fillOpacity: w.config.fill.opacity,\n        classes: \"apexcharts-radialbar-area apexcharts-radialbar-slice-\" + i,\n        strokeDashArray: dashArray\n      });\n      const radialMidAngle = startAngle + angle / 2;\n      const radialArcCenter = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        opts.size,\n        radialMidAngle\n      );\n      Graphics.setAttrs(elPath.node, {\n        \"data:angle\": angle,\n        \"data:value\": opts.series[i],\n        \"data:cx\": radialArcCenter.x,\n        \"data:cy\": radialArcCenter.y\n      });\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        filters.dropShadow(elPath, shadow, i);\n      }\n      filters.setSelectionFilter(elPath, 0, i);\n      this.addListeners(elPath, this.radialDataLabels);\n      elRadialBarArc.add(elPath);\n      elPath.attr({\n        index: 0,\n        j: i\n      });\n      if (this.barLabels.enabled) {\n        const barStartCords = Utils$1.polarToCartesian(\n          opts.centerX,\n          opts.centerY,\n          opts.size,\n          startAngle\n        );\n        const text = this.barLabels.formatter(w.seriesData.seriesNames[i], {\n          seriesIndex: i,\n          w\n        });\n        const classes = [\"apexcharts-radialbar-label\"];\n        if (!this.barLabels.onClick) {\n          classes.push(\"apexcharts-no-click\");\n        }\n        let textColor = this.barLabels.useSeriesColors ? w.globals.colors[i] : w.config.chart.foreColor;\n        if (!textColor) {\n          textColor = w.config.chart.foreColor;\n        }\n        const x = barStartCords.x + this.barLabels.offsetX;\n        const y = barStartCords.y + this.barLabels.offsetY;\n        const elText = graphics.drawText({\n          x,\n          y,\n          text,\n          textAnchor: \"end\",\n          dominantBaseline: \"middle\",\n          fontFamily: this.barLabels.fontFamily,\n          fontWeight: this.barLabels.fontWeight,\n          fontSize: this.barLabels.fontSize,\n          foreColor: textColor,\n          cssClass: classes.join(\" \")\n        });\n        elText.on(\"click\", this.onBarLabelClick);\n        elText.attr({\n          rel: i + 1\n        });\n        if (startAngle !== 0) {\n          elText.attr({\n            \"transform-origin\": `${x} ${y}`,\n            transform: `rotate(${startAngle} 0 0)`\n          });\n        }\n        elRadialBarArc.add(elText);\n      }\n      let dur = 0;\n      if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n        dur = w.config.chart.animations.speed;\n      }\n      if (w.globals.dataChanged) {\n        dur = w.config.chart.animations.dynamicAnimation.speed;\n      }\n      this.animDur = dur / (opts.series.length * 1.2) + this.animDur;\n      this.animBeginArr.push(this.animDur);\n      if (morphActive && morphFrom) {\n        const morphSpeed = this.ctx.morphTypeChange.getSpeed();\n        const actualArcD = this.getPiePath({\n          me: this,\n          startAngle,\n          angle,\n          size: opts.size\n        });\n        if (morphFromFilled) {\n          const targetD = this.ctx.morphTypeChange.buildRingSegmentPath(\n            opts.centerX,\n            opts.centerY,\n            opts.size,\n            strokeWidth,\n            startAngle,\n            startAngle + angle\n          );\n          elPath.animate(morphSpeed).plot(targetD, \"polygons\").after(\n            /** @this {any} */\n            function() {\n              this.attr({\n                d: actualArcD,\n                fill: \"none\",\n                stroke: opts.skipValueArc ? \"transparent\" : pathFill,\n                \"stroke-width\": opts.skipValueArc ? 0 : strokeWidth\n              });\n            }\n          );\n        } else {\n          elPath.animate(morphSpeed).plot(actualArcD, \"polygons\").attr({ \"stroke-width\": strokeWidth });\n        }\n      } else {\n        this.animatePaths(elPath, {\n          centerX: opts.centerX,\n          centerY: opts.centerY,\n          endAngle,\n          startAngle,\n          prevEndAngle,\n          prevStartAngle,\n          size: opts.size,\n          i,\n          totalItems: 2,\n          animBeginArr: this.animBeginArr,\n          dur,\n          shouldSetPrevPaths: true\n        });\n      }\n    }\n    return {\n      g,\n      elHollow,\n      dataLabels\n    };\n  }\n  /**\n   * Map a domain value (between `min` and `max`) to the corresponding angle\n   * in the gauge's `startAngle`..`endAngle` range. Values outside the\n   * domain are clamped.\n   *\n   * @param {number} value\n   * @returns {number}\n   */\n  _angleAtValue(value) {\n    const rb = this.w.config.plotOptions.radialBar;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const safeMax = max === min ? min + 1 : max;\n    const clamped = Math.max(min, Math.min(safeMax, Number(value)));\n    const t = (clamped - min) / (safeMax - min);\n    return this.startAngle + t * (this.endAngle - this.startAngle);\n  }\n  /**\n   * Build an SVG arc path from `startAngle` to `endAngle` at radius `r`\n   * around `(cx, cy)`. Angles are in degrees, with 0° at the top.\n   * Used by drawBands; mirrors the `M ... A ... ` form used elsewhere.\n   *\n   * @param {number} cx\n   * @param {number} cy\n   * @param {number} r\n   * @param {number} startAngle\n   * @param {number} endAngle\n   * @returns {string}\n   */\n  _describeArc(cx, cy, r, startAngle, endAngle) {\n    const start = Utils$1.polarToCartesian(cx, cy, r, endAngle);\n    const end = Utils$1.polarToCartesian(cx, cy, r, startAngle);\n    const sweep = endAngle - startAngle;\n    const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n    return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 0 ${end.x} ${end.y}`;\n  }\n  /**\n   * Draw threshold bands as colored arc segments along the gauge arc.\n   * Bands sit behind the value-arc and tick marks. Used for gauges that\n   * indicate ranges like 0-30 critical / 30-70 warning / 70-100 healthy.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawBands(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const bands = rb.bands || [];\n    const g = graphics.group({\n      class: \"apexcharts-gauge-bands\"\n    });\n    const strokeWidth = this.getStrokeWidth(opts);\n    const radius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const bandStroke = strokeWidth * parseInt(rb.bandsStyle.strokeWidth, 10) / 100;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const gapDeg = max === min ? 0 : (rb.bandsStyle.gap || 0) * ((this.endAngle - this.startAngle) / (max - min));\n    for (let b = 0; b < bands.length; b++) {\n      const band = bands[b];\n      if (band.from === void 0 || band.to === void 0) continue;\n      const a1 = this._angleAtValue(band.from);\n      const a2 = this._angleAtValue(band.to);\n      const startA = Math.min(a1, a2) + gapDeg / 2;\n      const endA = Math.max(a1, a2) - gapDeg / 2;\n      if (endA - startA <= 0) continue;\n      const elBand = graphics.drawPath({\n        d: this._describeArc(opts.centerX, opts.centerY, radius, startA, endA),\n        stroke: band.color || \"#ccc\",\n        strokeWidth: bandStroke,\n        fill: \"none\",\n        strokeLinecap: rb.bandsStyle.linecap || \"butt\",\n        classes: \"apexcharts-gauge-band\"\n      });\n      elBand.node.setAttribute(\"data-band-index\", String(b));\n      g.add(elBand);\n    }\n    return g;\n  }\n  /**\n   * Draw tick marks (major + minor) along the gauge arc, with optional\n   * value labels at each major tick.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawTicks(opts) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const ticks = rb.ticks;\n    const g = graphics.group({ class: \"apexcharts-gauge-ticks\" });\n    const strokeWidth = this.getStrokeWidth(opts);\n    const radius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const majorCount = Math.max(2, (_b = (_a = ticks.major) == null ? void 0 : _a.count) != null ? _b : 11);\n    const minorCount = Math.max(0, (_d = (_c = ticks.minor) == null ? void 0 : _c.count) != null ? _d : 0);\n    const drawTickAt = (value, cfg, isMajor) => {\n      var _a2, _b2, _c2;\n      const angle = this._angleAtValue(value);\n      const length = (_a2 = cfg.length) != null ? _a2 : 8;\n      const inner = cfg.placement === \"inside\" ? radius - length : radius;\n      const outer = cfg.placement === \"inside\" ? radius : radius + length;\n      const p1 = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        inner,\n        angle\n      );\n      const p2 = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        outer,\n        angle\n      );\n      const line = graphics.drawLine(\n        p1.x,\n        p1.y,\n        p2.x,\n        p2.y,\n        cfg.color || (isMajor ? \"#666\" : \"#999\"),\n        0,\n        cfg.width || (isMajor ? 2 : 1)\n      );\n      g.add(line);\n      if (isMajor && ((_b2 = ticks.labels) == null ? void 0 : _b2.show)) {\n        const labelRadius = (cfg.placement === \"inside\" ? inner : outer) + (cfg.placement === \"inside\" ? -1 : 1) * ((_c2 = ticks.labels.offset) != null ? _c2 : 6);\n        const labelPos = Utils$1.polarToCartesian(\n          opts.centerX,\n          opts.centerY,\n          labelRadius,\n          angle\n        );\n        const labelText = typeof ticks.labels.formatter === \"function\" ? ticks.labels.formatter(value) : String(value);\n        const elText = graphics.drawText({\n          x: labelPos.x,\n          y: labelPos.y,\n          text: labelText,\n          textAnchor: \"middle\",\n          dominantBaseline: \"middle\",\n          fontFamily: ticks.labels.fontFamily,\n          fontSize: ticks.labels.fontSize,\n          fontWeight: ticks.labels.fontWeight,\n          foreColor: ticks.labels.color,\n          cssClass: \"apexcharts-gauge-tick-label\"\n        });\n        g.add(elText);\n      }\n    };\n    for (let m = 0; m < majorCount; m++) {\n      const t = m / (majorCount - 1);\n      const value = min + t * (max - min);\n      drawTickAt(value, ticks.major || {}, true);\n      if (m < majorCount - 1 && minorCount > 0) {\n        for (let n = 1; n <= minorCount; n++) {\n          const tMinor = (m + n / (minorCount + 1)) / (majorCount - 1);\n          const minorValue = min + tMinor * (max - min);\n          drawTickAt(minorValue, ticks.minor || {}, false);\n        }\n      }\n    }\n    return g;\n  }\n  /**\n   * Draw a rotating needle pointing at the current series value. Only\n   * called when `plotOptions.radialBar.shape === 'needle'`. The needle is\n   * a tapered polygon inside a `<g>` whose rotation transform is animated\n   * from `startAngle` to the value's angle.\n   *\n   * Renders a single needle for the first series value (gauge use case).\n   * Additional series are ignored — drilled-down multi-series gauges are\n   * out of scope for this iteration.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawNeedle(opts) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const cfg = rb.needle || {};\n    const g = graphics.group({ class: \"apexcharts-gauge-needle\" });\n    if (!opts.series || opts.series.length === 0) return g;\n    const strokeWidth = this.getStrokeWidth(opts);\n    const arcRadius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const length = typeof cfg.length === \"string\" && cfg.length.endsWith(\"%\") ? arcRadius * parseInt(cfg.length, 10) / 100 : Number(cfg.length || arcRadius * 0.85);\n    const baseW = (_a = cfg.baseWidth) != null ? _a : 4;\n    const tipW = (_b = cfg.tipWidth) != null ? _b : 1;\n    const color = cfg.color || \"#333\";\n    const cx = opts.centerX;\n    const needleOffsetY = Number((_c = cfg.offsetY) != null ? _c : 0);\n    const cy = opts.centerY + needleOffsetY;\n    const path = `M ${cx + baseW / 2} ${cy} A ${baseW / 2} ${baseW / 2} 0 0 1 ${cx - baseW / 2} ${cy} L ${cx - tipW / 2} ${cy - length} L ${cx + tipW / 2} ${cy - length} Z`;\n    const elNeedle = graphics.drawPath({\n      d: path,\n      stroke: color,\n      strokeWidth: 0,\n      fill: color,\n      classes: \"apexcharts-gauge-needle-shape\"\n    });\n    g.add(elNeedle);\n    const value = Number(opts.series[0]);\n    const targetAngle = this._angleAtValue(value);\n    const isInitialMount = this.initialAnim && !w.globals.dataChanged && !w.globals.resized;\n    const ctx = (\n      /** @type {any} */\n      this.ctx\n    );\n    const fromAngle = typeof ctx._lastNeedleAngle === \"number\" ? ctx._lastNeedleAngle : this.startAngle;\n    ctx._lastNeedleAngle = targetAngle;\n    const shouldAnimate = Environment.isBrowser() && w.globals.shouldAnimate && (isInitialMount || w.globals.dataChanged);\n    if (shouldAnimate && fromAngle !== targetAngle) {\n      const node = g.node;\n      node.setAttribute(\"transform-origin\", `${cx} ${cy}`);\n      node.setAttribute(\"transform\", `rotate(${fromAngle})`);\n      const speed = ((_d = cfg.animation) == null ? void 0 : _d.duration) && Number(cfg.animation.duration) || cfg.animationSpeed && Number(cfg.animationSpeed) || ((_e = w.config.chart.animations.dynamicAnimation) == null ? void 0 : _e.speed) || w.config.chart.animations.speed || 800;\n      const c1 = 1.70158;\n      const c3 = c1 + 1;\n      const easeOutBack2 = (t) => 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n      const easeOutCubic2 = (t) => 1 - Math.pow(1 - t, 3);\n      const ease = isInitialMount ? easeOutBack2 : easeOutCubic2;\n      if (w.globals.radialNeedleRAF != null) {\n        BrowserAPIs.cancelAnimationFrame(w.globals.radialNeedleRAF);\n        w.globals.radialNeedleRAF = null;\n      }\n      const startAt = performance.now();\n      const step = (now) => {\n        if (this.w.globals.isDestroyed) {\n          w.globals.radialNeedleRAF = null;\n          return;\n        }\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        const angle = fromAngle + (targetAngle - fromAngle) * ease(t);\n        node.setAttribute(\"transform\", `rotate(${angle})`);\n        if (t < 1) {\n          w.globals.radialNeedleRAF = BrowserAPIs.requestAnimationFrame(step);\n        } else {\n          w.globals.radialNeedleRAF = null;\n        }\n      };\n      w.globals.radialNeedleRAF = BrowserAPIs.requestAnimationFrame(step);\n    } else {\n      g.attr({\n        \"transform-origin\": `${cx} ${cy}`,\n        transform: `rotate(${targetAngle})`\n      });\n    }\n    return g;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawHollow(opts) {\n    var _a;\n    const graphics = new Graphics(this.w);\n    const hollow = this.w.config.plotOptions.radialBar.hollow;\n    const circle = graphics.drawCircle(opts.size * 2);\n    const attrs = {\n      class: \"apexcharts-radialbar-hollow\",\n      cx: opts.centerX,\n      cy: opts.centerY,\n      r: opts.size,\n      fill: opts.fill\n    };\n    if (hollow.stroke || hollow.strokeDasharray) {\n      attrs.stroke = hollow.stroke || \"transparent\";\n      attrs[\"stroke-width\"] = (_a = hollow.strokeWidth) != null ? _a : 1;\n      if (hollow.strokeDasharray) {\n        attrs[\"stroke-dasharray\"] = hollow.strokeDasharray;\n      }\n    }\n    circle.attr(attrs);\n    return circle;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {any} g\n   * @param {number} hollowSize\n   * @param {string} hollowFillID\n   */\n  drawHollowImage(opts, g, hollowSize, hollowFillID) {\n    const w = this.w;\n    const fill = new Fill(this.w);\n    const randID = Utils$1.randomId();\n    const hollowFillImg = w.config.plotOptions.radialBar.hollow.image;\n    if (w.config.plotOptions.radialBar.hollow.imageClipped) {\n      fill.clippedImgArea({\n        width: hollowSize,\n        height: hollowSize,\n        image: hollowFillImg,\n        patternID: `pattern${w.globals.cuid}${randID}`\n      });\n      hollowFillID = `url(#pattern${w.globals.cuid}${randID})`;\n    } else {\n      const imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth;\n      const imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight;\n      if (imgWidth === void 0 && imgHeight === void 0) {\n        const image = w.dom.Paper.image(\n          hollowFillImg,\n          /** @this {any} */\n          function(loader) {\n            this.move(\n              opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX,\n              opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY\n            );\n          }\n        );\n        g.add(image);\n      } else {\n        const image = w.dom.Paper.image(\n          hollowFillImg,\n          /** @this {any} */\n          function() {\n            this.move(\n              opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX,\n              opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY\n            );\n            this.size(imgWidth, imgHeight);\n          }\n        );\n        g.add(image);\n      }\n    }\n    return hollowFillID;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  getStrokeWidth(opts) {\n    const w = this.w;\n    return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (opts.series.length + 1) - this.margin;\n  }\n  /**\n   * @param {Event} e\n   */\n  onBarLabelClick(e) {\n    var _a;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const seriesIndex = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"\", 10) - 1;\n    const legendClick = this.barLabels.onClick;\n    const w = this.w;\n    if (legendClick) {\n      legendClick(w.seriesData.seriesNames[seriesIndex], { w, seriesIndex });\n    }\n  }\n}\nclass RangeBar extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {number} seriesIndex\n   */\n  draw(series, seriesIndex) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    this.rangeBarOptions = this.w.config.plotOptions.rangeBar;\n    this.series = series;\n    this.seriesRangeStart = w.rangeData.seriesRangeStart;\n    this.seriesRangeEnd = w.rangeData.seriesRangeEnd;\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-rangebar-series apexcharts-plot-series\"\n    });\n    for (let i = 0; i < series.length; i++) {\n      let x, y;\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      let barWidth = (_a = initPositions.barWidth) != null ? _a : 0;\n      let barHeight = (_b = initPositions.barHeight) != null ? _b : 0;\n      const yDivision = (_c = initPositions.yDivision) != null ? _c : 0;\n      const xDivision = (_d = initPositions.xDivision) != null ? _d : 0;\n      y = initY;\n      x = initX;\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-rangebar-goals-markers\"\n      });\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const y1 = this.seriesRangeStart[i][j];\n        const y2 = this.seriesRangeEnd[i][j];\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        let barXPosition = null;\n        let barYPosition = null;\n        const params = { x, y, strokeWidth, elSeries };\n        let seriesLen = this.seriesLen;\n        if (w.config.plotOptions.bar.rangeBarGroupRows) {\n          seriesLen = 1;\n        }\n        if (typeof /** @type {Record<string,any>} */\n        ((_e = w.config.series[i].data) == null ? void 0 : _e[j]) === \"undefined\") {\n          break;\n        }\n        if (this.isHorizontal) {\n          barYPosition = y + barHeight * /** @type {any} */\n          this.visibleI;\n          const srty = (yDivision - barHeight * seriesLen) / 2;\n          if (\n            /** @type {Record<string,any>} */\n            (_g = (_f = w.config.series[i].data) == null ? void 0 : _f[j]) == null ? void 0 : _g.x\n          ) {\n            const positions = this.detectOverlappingBars({\n              i,\n              j,\n              barYPosition,\n              srty,\n              barHeight,\n              yDivision,\n              initPositions\n            });\n            barHeight = positions.barHeight;\n            barYPosition = positions.barYPosition;\n          }\n          paths = this.drawRangeBarPaths(__spreadValues({\n            indexes: { i, j, realIndex },\n            barHeight,\n            barYPosition,\n            zeroW,\n            yDivision,\n            y1,\n            y2\n          }, params));\n          barWidth = paths.barWidth;\n        } else {\n          if (w.axisFlags.isXNumeric) {\n            x = (w.seriesData.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n          }\n          barXPosition = x + barWidth * /** @type {any} */\n          this.visibleI;\n          const srtx = (xDivision - barWidth * seriesLen) / 2;\n          if (\n            /** @type {Record<string,any>} */\n            (_i = (_h = w.config.series[i].data) == null ? void 0 : _h[j]) == null ? void 0 : _i.x\n          ) {\n            const positions = this.detectOverlappingBars({\n              i,\n              j,\n              barXPosition,\n              srtx,\n              barWidth,\n              xDivision,\n              initPositions\n            });\n            barWidth = positions.barWidth;\n            barXPosition = positions.barXPosition;\n          }\n          paths = this.drawRangeColumnPaths(__spreadValues({\n            indexes: { i, j, realIndex, translationsIndex },\n            barWidth,\n            barXPosition,\n            zeroH,\n            xDivision\n          }, params));\n          barHeight = paths.barHeight;\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        this.renderSeries({\n          realIndex,\n          pathFill: pathFill.color,\n          lineFill: pathFill.useRangeColor ? pathFill.color : w.globals.stroke.colors[realIndex],\n          j,\n          i,\n          x,\n          y,\n          y1,\n          y2,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          series,\n          barHeight,\n          barWidth,\n          barXPosition,\n          barYPosition,\n          columnGroupIndex,\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          visibleSeries: this.visibleI,\n          type: \"rangebar\"\n        });\n      }\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{ i?: any, j?: any, barYPosition?: any, barXPosition?: any, srty?: any, srtx?: any, barHeight?: any, barWidth?: any, yDivision?: any, xDivision?: any, initPositions?: any }} opts */\n  detectOverlappingBars({\n    i,\n    j,\n    barYPosition,\n    barXPosition,\n    srty,\n    srtx,\n    barHeight,\n    barWidth,\n    yDivision,\n    xDivision,\n    initPositions\n  }) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    let overlaps = [];\n    const rangeName = (_b = (_a = w.globals.seriesRangeName) == null ? void 0 : _a[i]) == null ? void 0 : _b[j];\n    const x = (\n      /** @type {Record<string,any>} */\n      (_d = (_c = w.config.series[i].data) == null ? void 0 : _c[j]) == null ? void 0 : _d.x\n    );\n    const labelX = Array.isArray(x) ? x.join(\" \") : x;\n    const rowIndex = w.labelData.labels.map((_) => Array.isArray(_) ? _.join(\" \") : _).indexOf(labelX);\n    const overlappedIndex = w.rangeData.seriesRange[i].findIndex(\n      (tx) => {\n        var _a2;\n        return tx.x === labelX && ((_a2 = tx.overlaps) == null ? void 0 : _a2.size) > 0;\n      }\n    );\n    if (this.isHorizontal) {\n      if (w.config.plotOptions.bar.rangeBarGroupRows) {\n        barYPosition = srty + yDivision * rowIndex;\n      } else {\n        barYPosition = srty + barHeight * this.visibleI + yDivision * rowIndex;\n      }\n      if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) {\n        overlaps = Array.from(\n          /** @type {any} */\n          w.rangeData.seriesRange[i][overlappedIndex].overlaps\n        );\n        if (overlaps.indexOf(rangeName) > -1) {\n          barHeight = initPositions.barHeight / overlaps.length;\n          barYPosition = barHeight * this.visibleI + yDivision * (100 - parseInt(this.barOptions.barHeight, 10)) / 100 / 2 + barHeight * (this.visibleI + overlaps.indexOf(rangeName)) + yDivision * rowIndex;\n        }\n      }\n    } else {\n      if (rowIndex > -1 && !w.labelData.timescaleLabels.length) {\n        if (w.config.plotOptions.bar.rangeBarGroupRows) {\n          barXPosition = srtx + xDivision * rowIndex;\n        } else {\n          barXPosition = srtx + barWidth * this.visibleI + xDivision * rowIndex;\n        }\n      }\n      if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) {\n        overlaps = Array.from(\n          /** @type {any} */\n          w.rangeData.seriesRange[i][overlappedIndex].overlaps\n        );\n        if (overlaps.indexOf(rangeName) > -1) {\n          barWidth = initPositions.barWidth / overlaps.length;\n          barXPosition = barWidth * this.visibleI + xDivision * (100 - parseInt(this.barOptions.barWidth, 10)) / 100 / 2 + barWidth * (this.visibleI + overlaps.indexOf(rangeName)) + xDivision * rowIndex;\n        }\n      }\n    }\n    return {\n      barYPosition,\n      barXPosition,\n      barHeight,\n      barWidth\n    };\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, barXPosition: any, zeroH: any}} opts */\n  drawRangeColumnPaths({\n    indexes,\n    x,\n    xDivision,\n    barWidth,\n    barXPosition,\n    zeroH\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const { i, j, realIndex, translationsIndex } = indexes;\n    const yRatio = this.yRatio[translationsIndex];\n    const range = this.getRangeValue(realIndex, j);\n    let y1 = Math.min(range.start, range.end);\n    let y2 = Math.max(range.start, range.end);\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      y1 = zeroH;\n    } else {\n      y1 = zeroH - y1 / yRatio;\n      y2 = zeroH - y2 / yRatio;\n    }\n    const barHeight = Math.abs(y2 - y1);\n    const paths = this.barHelpers.getColumnPaths({\n      barXPosition,\n      barWidth,\n      y1,\n      y2,\n      strokeWidth: this.strokeWidth,\n      series: this.seriesRangeEnd,\n      realIndex,\n      i: realIndex,\n      j,\n      w\n    });\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    } else {\n      const xForNumericXAxis = this.getBarXForNumericXAxis({\n        x,\n        j,\n        realIndex,\n        barWidth\n      });\n      x = xForNumericXAxis.x;\n      barXPosition = xForNumericXAxis.barXPosition;\n    }\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      barHeight,\n      x,\n      y: range.start < 0 && range.end < 0 ? y1 : y2,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        realIndex,\n        j,\n        translationsIndex\n      ),\n      barXPosition\n    };\n  }\n  /**\n   * @param {number} val\n   */\n  preventBarOverflow(val) {\n    const w = this.w;\n    if (val < 0) {\n      val = 0;\n    }\n    if (val > w.layout.gridWidth) {\n      val = w.layout.gridWidth;\n    }\n    return val;\n  }\n  /** @param {{indexes: any, y: any, y1: any, y2: any, yDivision: any, barHeight: any, barYPosition: any, zeroW: any}} opts */\n  drawRangeBarPaths({\n    indexes,\n    y,\n    y1,\n    y2,\n    yDivision,\n    barHeight,\n    barYPosition,\n    zeroW\n  }) {\n    const w = this.w;\n    const { realIndex, j } = indexes;\n    const x1 = this.preventBarOverflow(zeroW + y1 / this.invertedYRatio);\n    const x2 = this.preventBarOverflow(zeroW + y2 / this.invertedYRatio);\n    const range = this.getRangeValue(realIndex, j);\n    const barWidth = Math.abs(x2 - x1);\n    const paths = this.barHelpers.getBarpaths({\n      barYPosition,\n      barHeight,\n      x1,\n      x2,\n      strokeWidth: this.strokeWidth,\n      series: this.seriesRangeEnd,\n      i: realIndex,\n      realIndex,\n      j,\n      w\n    });\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      barWidth,\n      x: range.start < 0 && range.end < 0 ? x1 : x2,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        realIndex,\n        j,\n        0\n      ),\n      y\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  getRangeValue(i, j) {\n    const w = this.w;\n    return {\n      start: w.rangeData.seriesRangeStart[i][j],\n      end: w.rangeData.seriesRangeEnd[i][j]\n    };\n  }\n}\nfunction normalize(data, area) {\n  let sum = 0;\n  for (let i = 0; i < data.length; i++) {\n    sum += data[i];\n  }\n  const multiplier = area / sum;\n  const result = new Array(data.length);\n  for (let i = 0; i < data.length; i++) {\n    result[i] = data[i] * multiplier;\n  }\n  return result;\n}\nfunction calculateRatio(rowMin, rowMax, rowSum, length) {\n  const lengthSq = length * length;\n  const sumSq = rowSum * rowSum;\n  return Math.max(\n    lengthSq * rowMax / sumSq,\n    sumSq / (lengthSq * rowMin)\n  );\n}\nfunction improvesRatio(rowLen, rowMin, rowMax, rowSum, nextNode, length) {\n  if (rowLen === 0) return true;\n  const currentRatio = calculateRatio(rowMin, rowMax, rowSum, length);\n  const newRatio = calculateRatio(\n    Math.min(rowMin, nextNode),\n    Math.max(rowMax, nextNode),\n    rowSum + nextNode,\n    length\n  );\n  return currentRatio >= newRatio;\n}\nfunction emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height) {\n  if (width >= height) {\n    const areaWidth = rowSum / height;\n    let subY = yoffset;\n    for (let i = 0; i < rowLen; i++) {\n      const h = row[i] / areaWidth;\n      coords.push([xoffset, subY, xoffset + areaWidth, subY + h]);\n      subY += h;\n    }\n  } else {\n    const areaHeight = rowSum / width;\n    let subX = xoffset;\n    for (let i = 0; i < rowLen; i++) {\n      const w = row[i] / areaHeight;\n      coords.push([subX, yoffset, subX + w, yoffset + areaHeight]);\n      subX += w;\n    }\n  }\n}\nfunction squarify(data, xoffset, yoffset, width, height) {\n  const coords = [];\n  const n = data.length;\n  if (n === 0) return coords;\n  const row = new Array(n);\n  let rowLen = 0;\n  let rowSum = 0;\n  let rowMin = Infinity;\n  let rowMax = -Infinity;\n  let i = 0;\n  while (i < n) {\n    const length = Math.min(width, height);\n    const val = data[i];\n    if (improvesRatio(rowLen, rowMin, rowMax, rowSum, val, length)) {\n      row[rowLen] = val;\n      rowLen++;\n      rowSum += val;\n      if (val < rowMin) rowMin = val;\n      if (val > rowMax) rowMax = val;\n      i++;\n    } else {\n      emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height);\n      if (width >= height) {\n        const areaWidth = rowSum / height;\n        xoffset += areaWidth;\n        width -= areaWidth;\n      } else {\n        const areaHeight = rowSum / width;\n        yoffset += areaHeight;\n        height -= areaHeight;\n      }\n      rowLen = 0;\n      rowSum = 0;\n      rowMin = Infinity;\n      rowMax = -Infinity;\n    }\n  }\n  if (rowLen > 0) {\n    emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height);\n  }\n  return coords;\n}\nfunction generate(data, width, height) {\n  const n = data.length;\n  const sums = new Array(n);\n  for (let i = 0; i < n; i++) {\n    let s = 0;\n    const series = data[i];\n    for (let j = 0; j < series.length; j++) {\n      s += series[j];\n    }\n    sums[i] = s;\n  }\n  const seriesRects = squarify(\n    normalize(sums, width * height),\n    0,\n    0,\n    width,\n    height\n  );\n  const results = new Array(n);\n  for (let i = 0; i < n; i++) {\n    const rect = seriesRects[i];\n    const rx = rect[0];\n    const ry = rect[1];\n    const rw = rect[2] - rx;\n    const rh = rect[3] - ry;\n    results[i] = squarify(\n      normalize(data[i], rw * rh),\n      rx,\n      ry,\n      rw,\n      rh\n    );\n  }\n  return results;\n}\nconst TreemapSquared = { generate };\nclass TreemapChart {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.strokeWidth = this.w.config.stroke.width;\n    this.helpers = new TreemapHelpers(w, ctx);\n    this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n    this.labels = [];\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const fill = new Fill(this.w);\n    const ret = graphics.group({\n      class: \"apexcharts-treemap\"\n    });\n    if (w.globals.noData) return ret;\n    const ser = [];\n    series.forEach((s) => {\n      const d = s.map((v) => {\n        return Math.abs(v);\n      });\n      ser.push(d);\n    });\n    this.negRange = this.helpers.checkColorRange();\n    w.config.series.forEach((s, i) => {\n      s.data.forEach((l) => {\n        if (!Array.isArray(this.labels[i])) this.labels[i] = [];\n        this.labels[i].push(l.x);\n      });\n    });\n    const nodes = TreemapSquared.generate(\n      ser,\n      w.layout.gridWidth,\n      w.layout.gridHeight\n    );\n    nodes.forEach((node, i) => {\n      var _a;\n      const elSeries = graphics.group({\n        class: `apexcharts-series apexcharts-treemap-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      graphics.setupEventDelegation(elSeries, \".apexcharts-treemap-rect\");\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(ret, shadow, i);\n      }\n      const elDataLabelWrap = graphics.group({\n        class: \"apexcharts-data-labels\"\n      });\n      const bounds = {\n        xMin: Infinity,\n        yMin: Infinity,\n        xMax: -Infinity,\n        yMax: -Infinity\n      };\n      const animCfg = w.config.chart.animations;\n      const gradCfg = animCfg.animateGradually;\n      const cascadeEnabled = gradCfg && gradCfg.enabled !== false;\n      const cascadeDelays = new Array(node.length).fill(0);\n      if (cascadeEnabled) {\n        const tileCount = node.length || 1;\n        const baseDelay = Math.min(\n          gradCfg.delay || 0,\n          animCfg.speed * 0.5 / tileCount\n        );\n        const ranked = node.map(\n          /** @param {number[]} r @param {number} j */\n          (r, j) => ({ j, area: (r[2] - r[0]) * (r[3] - r[1]) })\n        ).sort(\n          /** @param {{j: number, area: number}} a @param {{j: number, area: number}} b */\n          (a, b) => b.area - a.area\n        );\n        ranked.forEach(\n          /** @param {{j: number, area: number}} item @param {number} rank */\n          (item, rank) => {\n            cascadeDelays[item.j] = rank * baseDelay;\n          }\n        );\n      }\n      node.forEach((r, j) => {\n        const x1 = r[0];\n        const y1 = r[1];\n        const x2 = r[2];\n        const y2 = r[3];\n        bounds.xMin = Math.min(bounds.xMin, x1);\n        bounds.yMin = Math.min(bounds.yMin, y1);\n        bounds.xMax = Math.max(bounds.xMax, x2);\n        bounds.yMax = Math.max(bounds.yMax, y2);\n        const colorProps = this.helpers.getShadeColor(\n          w.config.chart.type,\n          i,\n          j,\n          this.negRange\n        );\n        const color = colorProps.color;\n        const pathFill = fill.fillPath({\n          color,\n          seriesNumber: i,\n          dataPointIndex: j\n        });\n        const elRect = graphics.drawRect(\n          x1,\n          y1,\n          x2 - x1,\n          y2 - y1,\n          w.config.plotOptions.treemap.borderRadius,\n          \"#fff\",\n          1,\n          this.strokeWidth,\n          w.config.plotOptions.treemap.useFillColorAsStroke ? color : w.globals.stroke.colors[i]\n        );\n        elRect.attr({\n          cx: x1,\n          cy: y1,\n          index: i,\n          i,\n          j,\n          width: x2 - x1,\n          height: y2 - y1,\n          fill: pathFill\n        });\n        elRect.node.classList.add(\"apexcharts-treemap-rect\");\n        let fromRect = {\n          x: x1 + (x2 - x1) / 2,\n          y: y1 + (y2 - y1) / 2,\n          width: 0,\n          height: 0\n        };\n        const toRect = {\n          x: x1,\n          y: y1,\n          width: x2 - x1,\n          height: y2 - y1\n        };\n        if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n          let speed = 1;\n          if (!w.globals.resized) {\n            speed = w.config.chart.animations.speed;\n          }\n          this.animateTreemap(\n            elRect,\n            fromRect,\n            toRect,\n            speed,\n            cascadeDelays[j] || 0\n          );\n        }\n        if (w.globals.dataChanged) {\n          let speed = 1;\n          if (this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n            speed = this.dynamicAnim.speed;\n            if (w.globals.previousPaths[i] && /** @type {Record<string,any>} */\n            w.globals.previousPaths[i][j] && /** @type {Record<string,any>} */\n            w.globals.previousPaths[i][j].rect) {\n              fromRect = /** @type {Record<string,any>} */\n              w.globals.previousPaths[i][j].rect;\n            }\n            this.animateTreemap(elRect, fromRect, toRect, speed);\n          }\n        }\n        let fontSize = this.getFontSize(r);\n        let formattedText = w.config.dataLabels.formatter(this.labels[i][j], {\n          value: w.seriesData.series[i][j],\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n        if (w.config.plotOptions.treemap.dataLabels.format === \"truncate\") {\n          fontSize = parseInt(String(w.config.dataLabels.style.fontSize), 10);\n          formattedText = this.truncateLabels(\n            String(formattedText),\n            fontSize,\n            x1,\n            y1,\n            x2,\n            y2\n          );\n        }\n        let dataLabels = null;\n        if (w.seriesData.series[i][j]) {\n          dataLabels = this.helpers.calculateDataLabels({\n            text: formattedText,\n            x: (x1 + x2) / 2,\n            y: (y1 + y2) / 2 + this.strokeWidth / 2 + fontSize / 3,\n            i,\n            j,\n            colorProps,\n            fontSize,\n            series\n          });\n        }\n        if (w.config.dataLabels.enabled && dataLabels) {\n          this.rotateToFitLabel(\n            dataLabels,\n            fontSize,\n            formattedText,\n            x1,\n            y1,\n            x2,\n            y2\n          );\n        }\n        elSeries.add(elRect);\n        if (dataLabels !== null) {\n          elSeries.add(dataLabels);\n        }\n      });\n      const seriesTitle = w.config.plotOptions.treemap.seriesTitle;\n      if (w.config.series.length > 1 && seriesTitle && seriesTitle.show) {\n        const sName = (\n          /** @type {Record<string,any>} */\n          w.config.series[i].name || \"\"\n        );\n        if (sName && bounds.xMin < Infinity && bounds.yMin < Infinity) {\n          const {\n            offsetX,\n            offsetY,\n            borderColor,\n            borderWidth,\n            borderRadius,\n            style\n          } = seriesTitle;\n          const textColor = style.color || w.config.chart.foreColor;\n          const padding = {\n            left: style.padding.left,\n            right: style.padding.right,\n            top: style.padding.top,\n            bottom: style.padding.bottom\n          };\n          const textSize = graphics.getTextRects(\n            sName,\n            style.fontSize,\n            style.fontFamily\n          );\n          const labelRectWidth = textSize.width + padding.left + padding.right;\n          const labelRectHeight = textSize.height + padding.top + padding.bottom;\n          const labelX = bounds.xMin + (offsetX || 0);\n          const labelY = bounds.yMin + (offsetY || 0);\n          const elLabelRect = graphics.drawRect(\n            labelX,\n            labelY,\n            labelRectWidth,\n            labelRectHeight,\n            borderRadius,\n            style.background,\n            1,\n            borderWidth,\n            borderColor\n          );\n          const elLabelText = graphics.drawText({\n            x: labelX + padding.left,\n            y: labelY + padding.top + ((_a = textSize == null ? void 0 : textSize.height) != null ? _a : 0) * 0.75,\n            text: sName,\n            fontSize: style.fontSize,\n            fontFamily: style.fontFamily,\n            fontWeight: style.fontWeight,\n            foreColor: textColor,\n            cssClass: style.cssClass || \"\"\n          });\n          elSeries.add(elLabelRect);\n          elSeries.add(elLabelText);\n        }\n      }\n      elSeries.add(elDataLabelWrap);\n      ret.add(elSeries);\n    });\n    return ret;\n  }\n  // This calculates a font-size based upon\n  // average label length and the size of the box\n  /**\n   * @param {number[]} coordinates\n   */\n  getFontSize(coordinates) {\n    const w = this.w;\n    function totalLabelLength(arr) {\n      let i, total = 0;\n      if (Array.isArray(arr[0])) {\n        for (i = 0; i < arr.length; i++) {\n          total += totalLabelLength(arr[i]);\n        }\n      } else {\n        for (i = 0; i < arr.length; i++) {\n          total += arr[i].length;\n        }\n      }\n      return total;\n    }\n    function countLabels(arr) {\n      let i, total = 0;\n      if (Array.isArray(arr[0])) {\n        for (i = 0; i < arr.length; i++) {\n          total += countLabels(arr[i]);\n        }\n      } else {\n        for (i = 0; i < arr.length; i++) {\n          total += 1;\n        }\n      }\n      return total;\n    }\n    const averagelabelsize = totalLabelLength(this.labels) / countLabels(this.labels);\n    function fontSize(width, height) {\n      const area = width * height;\n      const arearoot = Math.pow(area, 0.5);\n      return Math.min(\n        arearoot / averagelabelsize,\n        parseInt(w.config.dataLabels.style.fontSize, 10)\n      );\n    }\n    return fontSize(\n      coordinates[2] - coordinates[0],\n      coordinates[3] - coordinates[1]\n    );\n  }\n  /**\n   * @param {any} elText\n   * @param {string | number} fontSize\n   * @param {string} text\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  rotateToFitLabel(elText, fontSize, text, x1, y1, x2, y2) {\n    const graphics = new Graphics(this.w);\n    const textRect = graphics.getTextRects(text, String(fontSize));\n    if (textRect.width + this.w.config.stroke.width + 5 > x2 - x1 && textRect.width <= y2 - y1) {\n      const labelRotatingCenter = graphics.rotateAroundCenter(elText.node);\n      elText.node.setAttribute(\n        \"transform\",\n        `rotate(-90 ${labelRotatingCenter.x} ${labelRotatingCenter.y}) translate(${textRect.height / 3})`\n      );\n    }\n  }\n  // This is an alternative label formatting method that uses a\n  // consistent font size, and trims the edge of long labels\n  /**\n   * @param {string} text\n   * @param {number} fontSize\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  truncateLabels(text, fontSize, x1, y1, x2, y2) {\n    const graphics = new Graphics(this.w);\n    const textRect = graphics.getTextRects(text, String(fontSize));\n    const labelMaxWidth = textRect.width + this.w.config.stroke.width + 5 > x2 - x1 && y2 - y1 > x2 - x1 ? y2 - y1 : x2 - x1;\n    const truncatedText = graphics.getTextBasedOnMaxWidth({\n      text,\n      maxWidth: labelMaxWidth,\n      fontSize\n    });\n    if (text.length !== truncatedText.length && labelMaxWidth / fontSize < 5) {\n      return \"\";\n    } else {\n      return truncatedText;\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} fromRect\n   * @param {Record<string, any>} toRect\n   * @param {number} speed\n   * @param {number} [delay] - per-tile cascade delay in ms\n   */\n  animateTreemap(el, fromRect, toRect, speed, delay = 0) {\n    const animations = new Animations(this.w);\n    animations.animateRect(\n      el,\n      fromRect,\n      toRect,\n      speed,\n      () => {\n        animations.animationCompleted(el);\n      },\n      delay\n    );\n  }\n}\nconst GOLDEN_ANGLE = Math.PI * (3 - Math.sqrt(5));\nfunction easeOutCubic(t) {\n  return 1 - Math.pow(1 - t, 3);\n}\nfunction easeOutBack(s) {\n  return (t) => 1 + (s + 1) * Math.pow(t - 1, 3) + s * Math.pow(t - 1, 2);\n}\nfunction easeInOutCubic(t) {\n  return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n}\nclass Unit {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this._lastDotR = 1;\n    this._gridTrack = null;\n    this._gridDenom = 1;\n    this._scatterAxis = null;\n  }\n  /**\n   * @param {any[]} series - flat count array (non-axis / pie-shaped data)\n   * @returns {any} the chart's root group element\n   */\n  draw(series) {\n    const w = this.w;\n    const graphics = new Graphics(w, this.ctx);\n    const ret = graphics.group({ class: \"apexcharts-unit\" });\n    if (w.globals.noData || !Array.isArray(series) || series.length === 0) {\n      return ret;\n    }\n    const opts = w.config.plotOptions.unit;\n    const layout = opts.layout === \"packed\" ? \"packed\" : opts.layout === \"columns\" ? \"columns\" : opts.layout === \"grid\" ? \"grid\" : opts.layout === \"scatter\" ? \"scatter\" : opts.layout === \"arc\" ? \"arc\" : \"grouped\";\n    const transition = opts.transition;\n    const flow = transition === \"flow\";\n    const identity = transition === \"identity\";\n    const unitValue = opts.unitValue > 0 ? opts.unitValue : 1;\n    let counts = series.map((v) => {\n      const n = Math.abs(Utils$1.parseNumber(v)) / unitValue;\n      return n > 0 ? Math.max(1, Math.round(n)) : 0;\n    });\n    counts = this._applyMaxUnits(counts, opts.maxUnits);\n    const total = counts.reduce((a, b) => a + b, 0);\n    const clusters = layout === \"packed\" ? this._layoutPacked(counts, opts) : layout === \"columns\" ? this._layoutColumns(counts, opts) : layout === \"grid\" ? this._layoutGrid(counts, opts) : layout === \"scatter\" ? this._layoutScatter(opts) : layout === \"arc\" ? this._layoutArc(counts, opts) : this._layoutGrouped(counts, opts);\n    const gridSplit = layout === \"grid\" && !!(opts.grid && opts.grid.split);\n    if (gridSplit) this._drawGridTrack(ret, graphics, opts);\n    if (layout === \"scatter\") this._drawScatterAxes(ret, graphics);\n    const dotR = this._lastDotR;\n    const animate = this._shouldAnimate();\n    const morph = this.ctx && this.ctx.morphTypeChange;\n    const morphActive = animate && !!morph && typeof morph.isActive === \"function\" && morph.isActive() && typeof morph.getInitialCenterFor === \"function\";\n    const prev = animate && !morphActive && this.ctx ? this.ctx._unitPrevDots : null;\n    const nextPrev = /* @__PURE__ */ new Map();\n    const animDots = [];\n    const unitData = w.seriesData.unitData || [];\n    const sizeStats = this._bubbleStats(unitData, opts, dotR);\n    let gIndex = 0;\n    clusters.forEach((cluster) => {\n      const color = w.globals.colors[cluster.i] || w.globals.colors[0] || \"#008FFB\";\n      const elSeries = graphics.group({\n        class: \"apexcharts-series\",\n        seriesName: Utils$1.escapeString(\n          w.seriesData.seriesNames[cluster.i] || `series-${cluster.i + 1}`\n        ),\n        rel: cluster.i + 1,\n        \"data:realIndex\": cluster.i\n      });\n      const burst = morphActive ? morph.getInitialCenterFor(cluster.i) : null;\n      const catData = unitData[cluster.i];\n      cluster.dots.forEach((d, j) => {\n        const datum = catData ? catData[j] : void 0;\n        const dotFill = datum && typeof datum === \"object\" && datum.fillColor ? datum.fillColor : color;\n        const rj = d.r != null ? d.r : sizeStats ? this._radiusForValue(this._unitValueOf(datum), sizeStats) : dotR;\n        const el = this._drawDot(graphics, opts, rj, dotFill, cluster.i, j);\n        elSeries.add(el);\n        let key;\n        if (identity) {\n          const id = datum && typeof datum === \"object\" ? datum.id != null ? datum.id : datum.name : void 0;\n          key = id != null ? `id:${id}` : `g:${gIndex}`;\n        } else if (flow) {\n          key = String(gIndex);\n        } else if (d.slot != null) {\n          key = `slot:${d.slot}`;\n        } else {\n          key = `${cluster.i}:${j}`;\n        }\n        gIndex++;\n        nextPrev.set(key, { x: d.x, y: d.y, fill: dotFill, r: rj });\n        if (animate) {\n          const from = prev && prev.get(key);\n          const anchor = from || burst;\n          const enter = opts.gather && opts.gather.enter || \"burst\";\n          const inPlace = gridSplit || enter === \"fade\" || enter === \"rise\";\n          const cx0 = anchor ? anchor.x : inPlace ? d.x : cluster.cx;\n          const cy0 = anchor ? anchor.y : enter === \"rise\" && !gridSplit ? d.y + 14 : inPlace ? d.y : cluster.cy;\n          el.node.style.opacity = anchor ? \"1\" : \"0\";\n          this._placeDot(el.node, opts, cx0, cy0);\n          animDots.push({\n            node: el.node,\n            x: d.x,\n            y: d.y,\n            cx0,\n            cy0,\n            // Radius tween: an identity-kept dot grows/shrinks from its previous\n            // size to its new one (e.g. bubble sizing turning on) instead of\n            // snapping. Enters/uniform updates keep r0 === r1 (no-op).\n            r0: from && from.r != null ? from.r : rj,\n            r1: rj,\n            // Colour tween: a dot that flows into a differently coloured group\n            // recolours as it travels rather than snapping at the first frame.\n            fill0: from ? from.fill : dotFill,\n            fill1: dotFill,\n            delay: 0,\n            // assigned below (staggered by global order)\n            isEnter: !anchor\n          });\n        } else {\n          this._placeDot(el.node, opts, d.x, d.y);\n        }\n      });\n      if ((layout === \"grouped\" || layout === \"columns\" || gridSplit) && opts.clusterLabels && opts.clusterLabels.show && counts[cluster.i] > 0) {\n        const labelTotal = gridSplit ? this._gridDenom : total;\n        this._drawClusterLabel(elSeries, cluster, counts[cluster.i], labelTotal, opts, color);\n      }\n      ret.add(elSeries);\n    });\n    if (prev) {\n      const exits = this._collectExits(prev, nextPrev, opts);\n      if (exits.length) {\n        const exitGroup = graphics.group({ class: \"apexcharts-unit-exits\" });\n        ret.add(exitGroup);\n        this._runExits(exitGroup, exits, opts);\n      }\n    }\n    if (this.ctx) this.ctx._unitPrevDots = nextPrev;\n    if (animate && animDots.length) {\n      this._runGather(animDots);\n    }\n    return ret;\n  }\n  /**\n   * Cap total dots to `maxUnits`, scaling every category down proportionally\n   * (a non-zero category keeps at least one dot). Warns once when it clips.\n   * @param {number[]} counts\n   * @param {number} maxUnits\n   * @returns {number[]}\n   */\n  _applyMaxUnits(counts, maxUnits) {\n    const total = counts.reduce((a, b) => a + b, 0);\n    if (!maxUnits || maxUnits <= 0 || total <= maxUnits) return counts;\n    const scale = maxUnits / total;\n    console.warn(\n      `[ApexCharts] unit chart: ${total} dots exceeds maxUnits (${maxUnits}); counts were scaled down proportionally. Raise plotOptions.unit.maxUnits or use plotOptions.unit.unitValue to represent more units per dot.`\n    );\n    return counts.map((c) => c > 0 ? Math.max(1, Math.round(c * scale)) : 0);\n  }\n  /**\n   * Lay out each category as its own cluster in a horizontal row. All clusters\n   * share one dot radius (so dot size is comparable across clusters); the blob\n   * radius encodes the count.\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutGrouped(counts, opts) {\n    const w = this.w;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const labelSpace = opts.clusterLabels && opts.clusterLabels.show ? 30 : 6;\n    const visible = counts.map((_, i) => i).filter((i) => counts[i] > 0);\n    const Kv = Math.max(1, visible.length);\n    const slotOf = new Array(counts.length).fill(-1);\n    visible.forEach((i, s) => slotOf[i] = s);\n    const cellW = gw / Kv;\n    const availH = gh - labelSpace;\n    const maxCount = Math.max(1, ...counts);\n    const pad = Math.min(cellW, availH) * 0.08;\n    const availR = Math.max(4, Math.min(cellW, availH) / 2 - pad);\n    const step = this._resolveStep(opts, availR, maxCount);\n    this._lastDotR = this._dotRadiusFromStep(step, opts);\n    const dotR = this._lastDotR;\n    const cy = labelSpace + availH / 2;\n    const outerRs = counts.map((n) => step * Math.sqrt(Math.max(1, n)) + dotR);\n    const cellCentre = (i) => slotOf[i] >= 0 ? cellW * (slotOf[i] + 0.5) : gw / 2;\n    let centers = counts.map((_, i) => cellCentre(i));\n    const visOuter = visible.map((i) => outerRs[i]);\n    let overlap = false;\n    for (let s = 1; s < Kv; s++) {\n      if (centers[visible[s]] - centers[visible[s - 1]] < visOuter[s] + visOuter[s - 1]) {\n        overlap = true;\n        break;\n      }\n    }\n    if (overlap) {\n      const gap = Math.max(2 * dotR, 8);\n      const totalW = visOuter.reduce((a, r) => a + 2 * r, 0) + gap * (Kv - 1);\n      let visCenters;\n      if (totalW <= gw) {\n        let x = (gw - totalW) / 2;\n        visCenters = visOuter.map((r) => {\n          const c = x + r;\n          x += 2 * r + gap;\n          return c;\n        });\n      } else if (Kv === 1) {\n        visCenters = [gw / 2];\n      } else {\n        const lo = visOuter[0];\n        const hi = gw - visOuter[Kv - 1];\n        visCenters = visOuter.map((_, s) => lo + (hi - lo) * s / (Kv - 1));\n      }\n      centers = counts.map(\n        (_, i) => slotOf[i] >= 0 ? visCenters[slotOf[i]] : gw / 2\n      );\n    }\n    return counts.map((n, i) => ({\n      i,\n      cx: centers[i],\n      cy,\n      outerR: outerRs[i],\n      dots: this._spiral(centers[i], cy, n, step, 0)\n    }));\n  }\n  /**\n   * Lay out all categories into ONE packed blob. Dots are assigned spiral\n   * indices in category order (smallest-first when sortByGroup), so the\n   * minority group nests in the centre.\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutPacked(counts, opts) {\n    const w = this.w;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const labelSpace = 6;\n    const total = Math.max(1, counts.reduce((a, b) => a + b, 0));\n    const availR = Math.max(\n      4,\n      Math.min(gw, gh - labelSpace) / 2 - Math.min(gw, gh) * 0.06\n    );\n    const step = this._resolveStep(opts, availR, total);\n    this._lastDotR = this._dotRadiusFromStep(step, opts);\n    const cx = gw / 2;\n    const cy = labelSpace + (gh - labelSpace) / 2;\n    const order = counts.map((_, i) => i);\n    if (opts.sortByGroup !== false) {\n      order.sort((a, b) => counts[a] - counts[b]);\n    }\n    const clusters = counts.map((_, i) => ({\n      i,\n      cx,\n      cy,\n      outerR: step * Math.sqrt(total) + this._lastDotR,\n      /** @type {{x:number,y:number,slot?:number}[]} */\n      dots: []\n    }));\n    let gi = 0;\n    order.forEach((catI) => {\n      for (let j = 0; j < counts[catI]; j++) {\n        const r = step * Math.sqrt(gi + 0.5);\n        const theta = gi * GOLDEN_ANGLE;\n        clusters[catI].dots.push({\n          x: cx + r * Math.cos(theta),\n          y: cy + r * Math.sin(theta),\n          slot: gi\n        });\n        gi++;\n      }\n    });\n    return clusters;\n  }\n  /**\n   * Lay out all marks as a PARLIAMENT / hemicycle: seats in concentric arced\n   * rows across an annulus, filled in category (party) order so each category\n   * forms a contiguous angular wedge (the classic seating chart). `arc` controls\n   * the sweep (`startAngle`/`endAngle`, radialBar convention: 0 = top, clockwise;\n   * default a top semicircle), the donut hole (`innerRadiusRatio`) and the row\n   * count (`rows`, or 'auto'). Like `packed` this is ONE shared shape coloured by\n   * category, so seats key by physical slot: a seat-count change recolours the\n   * party boundary in place and only the rim adds / removes seats.\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutArc(counts, opts) {\n    const w = this.w;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const total = Math.max(1, counts.reduce((a, b2) => a + b2, 0));\n    const acfg = opts.arc || {};\n    const startDeg = typeof acfg.startAngle === \"number\" ? acfg.startAngle : -90;\n    const endDeg = typeof acfg.endAngle === \"number\" ? acfg.endAngle : 90;\n    const a0 = startDeg * Math.PI / 180;\n    const a1 = endDeg * Math.PI / 180;\n    const span = a1 - a0 || Math.PI;\n    const innerRatio = Math.max(\n      0,\n      Math.min(0.95, typeof acfg.innerRadiusRatio === \"number\" ? acfg.innerRadiusRatio : 0.4)\n    );\n    const ux = (a) => Math.sin(a);\n    const uy = (a) => -Math.cos(a);\n    const b = this._arcBounds(a0, a1);\n    const pad = Math.min(gw, gh) * 0.04;\n    const boxW = Math.max(1e-6, b.maxX - b.minX);\n    const boxH = Math.max(1e-6, b.maxY - b.minY);\n    const r1 = Math.max(4, Math.min((gw - 2 * pad) / boxW, (gh - 2 * pad) / boxH));\n    const r0 = r1 * innerRatio;\n    const cx = gw / 2 - (b.minX + b.maxX) / 2 * r1;\n    const cy = gh / 2 - (b.minY + b.maxY) / 2 * r1;\n    const alloc = this._arcAllocate(total, r0, r1, span, opts);\n    this._lastDotR = alloc.dotR;\n    const seats = [];\n    for (let r = 0; r < alloc.R; r++) {\n      const rho = alloc.radii[r];\n      const n = alloc.seatsPerRow[r];\n      for (let k = 0; k < n; k++) {\n        const a = n === 1 ? (a0 + a1) / 2 : a0 + span * (k + 0.5) / n;\n        seats.push({ a, x: cx + rho * ux(a), y: cy + rho * uy(a) });\n      }\n    }\n    seats.sort((s1, s2) => s1.a - s2.a);\n    const clusters = counts.map((_, i) => ({\n      i,\n      cx,\n      cy,\n      outerR: r1,\n      /** @type {{x:number,y:number,slot?:number}[]} */\n      dots: []\n    }));\n    let ci = 0;\n    let used = 0;\n    seats.forEach((s, slot) => {\n      while (ci < counts.length && used >= counts[ci]) {\n        ci++;\n        used = 0;\n      }\n      if (ci >= counts.length) return;\n      clusters[ci].dots.push({ x: s.x, y: s.y, slot });\n      used++;\n    });\n    return clusters;\n  }\n  /**\n   * Bounding box of the outer arc (radius 1) over [a0, a1], including the centre\n   * and every cardinal angle (multiple of 90deg) inside the range, so a\n   * semicircle / full circle / arbitrary sweep is all bounded correctly.\n   * @param {number} a0 @param {number} a1\n   * @returns {{minX:number,maxX:number,minY:number,maxY:number}}\n   */\n  _arcBounds(a0, a1) {\n    const ux = (a) => Math.sin(a);\n    const uy = (a) => -Math.cos(a);\n    const lo = Math.min(a0, a1);\n    const hi = Math.max(a0, a1);\n    const xs = [0, ux(a0), ux(a1)];\n    const ys = [0, uy(a0), uy(a1)];\n    const q = Math.PI / 2;\n    for (let k = Math.ceil(lo / q); k * q <= hi; k++) {\n      xs.push(ux(k * q));\n      ys.push(uy(k * q));\n    }\n    return {\n      minX: Math.min(...xs),\n      maxX: Math.max(...xs),\n      minY: Math.min(...ys),\n      maxY: Math.max(...ys)\n    };\n  }\n  /**\n   * Allocate `total` seats across concentric rows of the annulus [r0, r1] sweeping\n   * `span` radians: seats per row are proportional to the row radius (a longer arc\n   * holds more), summed EXACTLY to total by largest remainder. Row count is\n   * `arc.rows` if given, else derived from a fixed dot size, else auto-searched to\n   * maximise the dot radius (the largest dots that still pack without overlap,\n   * mirroring `size:'auto'` elsewhere).\n   * @param {number} total @param {number} r0 @param {number} r1 @param {number} span @param {any} opts\n   * @returns {{R:number, radii:number[], seatsPerRow:number[], dotR:number}}\n   */\n  _arcAllocate(total, r0, r1, span, opts) {\n    const spacing = opts.spacing > 0 ? opts.spacing : 1.05;\n    const absSpan = Math.abs(span) || Math.PI;\n    const fixed = this._fixedRadius(opts);\n    const evalR = (R) => {\n      R = Math.max(1, Math.round(R));\n      const radii = [];\n      for (let r = 0; r < R; r++) {\n        radii.push(R === 1 ? (r0 + r1) / 2 : r0 + (r1 - r0) * (r / (R - 1)));\n      }\n      const weightSum = radii.reduce((a, x) => a + x, 0) || 1;\n      const raw = radii.map((rho) => total * rho / weightSum);\n      const seatsPerRow = raw.map((x) => Math.floor(x));\n      let left = total - seatsPerRow.reduce((a, x) => a + x, 0);\n      raw.map((x, idx) => ({ idx, frac: x - Math.floor(x) })).sort((p, qq) => qq.frac - p.frac).forEach((o) => {\n        if (left > 0) {\n          seatsPerRow[o.idx]++;\n          left--;\n        }\n      });\n      while (left > 0) {\n        seatsPerRow[R - 1]++;\n        left--;\n      }\n      const radialPitch = R === 1 ? r1 - r0 || r1 : (r1 - r0) / (R - 1);\n      let minArcPitch = Infinity;\n      for (let r = 0; r < R; r++) {\n        const n = seatsPerRow[r];\n        if (n <= 0) continue;\n        const arcPitch = radii[r] * absSpan / n;\n        if (arcPitch < minArcPitch) minArcPitch = arcPitch;\n      }\n      const pitch = Math.min(radialPitch, minArcPitch);\n      return { R, radii, seatsPerRow, dotR: Math.max(1, pitch / (2 * spacing)) };\n    };\n    const arcRows = opts.arc && opts.arc.rows;\n    let res;\n    if (typeof arcRows === \"number\" && arcRows >= 1) {\n      res = evalR(arcRows);\n    } else if (fixed) {\n      const pitch = 2 * fixed * spacing;\n      res = evalR((r1 - r0) / pitch + 1);\n    } else {\n      const maxR = Math.max(1, Math.min(40, Math.ceil(Math.sqrt(total)) + 6));\n      res = evalR(1);\n      for (let R = 2; R <= maxR; R++) {\n        const cand = evalR(R);\n        if (cand.dotR > res.dotR) res = cand;\n      }\n    }\n    if (fixed) res.dotR = fixed;\n    return res;\n  }\n  /**\n   * Lay out each category as a vertical BAR built from stacked dots (a unit /\n   * waffle column). Every bar shares one dot size and one width (the same\n   * number of dot columns); the bar's HEIGHT encodes its count. Dots fill each\n   * bar bottom-up, row by row. This is the \"dot bar\" state the circle layouts\n   * morph into: with `transition:'flow'` the dots glide straight from their\n   * circle slots into these bar slots (see the storyboard sample).\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutColumns(counts, opts) {\n    const w = this.w;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const labelsOn = !!(opts.clusterLabels && opts.clusterLabels.show);\n    const labelsBelow = labelsOn && opts.clusterLabels.position === \"bottom\";\n    const topPad = labelsOn && !labelsBelow ? 30 : 6;\n    const visible = counts.map((_, i) => i).filter((i) => counts[i] > 0);\n    const Kv = Math.max(1, visible.length);\n    const slotOf = new Array(counts.length).fill(-1);\n    visible.forEach((i, s) => slotOf[i] = s);\n    const cellW = gw / Kv;\n    const barW = cellW * 0.62;\n    const bottomPad = Math.max(8, gh * 0.04) + (labelsBelow ? 30 : 0);\n    const availH = Math.max(4, gh - topPad - bottomPad);\n    const maxCount = Math.max(1, ...counts);\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const colSize = opts.columns ? opts.columns.size : void 0;\n    let fixed;\n    if (opts.shape !== \"image\" && colSize === \"auto\") {\n      fixed = null;\n    } else if (opts.shape !== \"image\" && typeof colSize === \"number\" && colSize > 0) {\n      fixed = colSize;\n    } else {\n      fixed = this._fixedRadius(opts);\n    }\n    let cols = 1;\n    let pitch = 0;\n    if (fixed) {\n      pitch = 2 * fixed * spacing;\n      this._lastDotR = fixed;\n      const rowsCap = Math.max(1, Math.floor(availH / pitch));\n      const maxColsByWidth = Math.max(1, Math.floor(barW / pitch));\n      cols = Math.max(1, Math.min(maxColsByWidth, Math.ceil(maxCount / rowsCap)));\n    } else {\n      let best = 0;\n      const maxCols = Math.max(1, Math.min(40, Math.round(barW / 4)));\n      for (let c = 1; c <= maxCols; c++) {\n        const rows = Math.ceil(maxCount / c);\n        const d = Math.min(barW / c, availH / rows);\n        if (d > best) {\n          best = d;\n          cols = c;\n        }\n      }\n      pitch = best;\n      this._lastDotR = Math.max(1, pitch / (2 * spacing));\n    }\n    const r = this._lastDotR;\n    const maxRows = Math.ceil(maxCount / cols);\n    const tallestBarH = Math.min(availH, maxRows * pitch);\n    const bottom = topPad + (availH + tallestBarH) / 2;\n    return counts.map((n, i) => {\n      const cx = slotOf[i] >= 0 ? cellW * (slotOf[i] + 0.5) : gw / 2;\n      const rows = Math.ceil(Math.max(1, n) / cols);\n      const barH = rows * pitch;\n      const left = cx - cols * pitch / 2 + pitch / 2;\n      const dots = [];\n      for (let j = 0; j < n; j++) {\n        const rowIdx = Math.floor(j / cols);\n        const colIdx = j % cols;\n        dots.push({\n          x: left + colIdx * pitch,\n          y: bottom - r - rowIdx * pitch\n        });\n      }\n      return {\n        i,\n        cx,\n        cy: bottom - barH / 2,\n        outerR: barH / 2,\n        // Flag read by _drawClusterLabel: a bar takes a straight label (above\n        // or below per clusterLabels.position), never a curved arc.\n        flat: true,\n        dots\n      };\n    });\n  }\n  /**\n   * Lay out ALL categories into ONE regular lattice - a waffle / grid. Dots take\n   * sequential slots in DECLARED category order and fill row-major, `columns`\n   * wide, so each category owns a contiguous band of cells: a part-to-whole\n   * square \"pie\". `grid.total` (optional) re-allocates the cells to a fixed\n   * budget (e.g. 100) by largest remainder, so the grid reads as exact\n   * percentages regardless of the raw totals; without it there is one cell per\n   * unit (respecting unitValue / maxUnits). `grid.fillFrom` picks the first row.\n   * The category bands follow the legend order (no smallest-first sort), and\n   * each physical slot is keyed so a proportion change recolours boundary cells\n   * in place rather than reshuffling the whole grid.\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutGrid(counts, opts) {\n    if (opts.grid && opts.grid.split) return this._layoutGridSplit(counts, opts);\n    this._gridTrack = null;\n    const w = this.w;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const gcfg = opts.grid || {};\n    const cols = Math.max(1, Math.round(gcfg.columns > 0 ? gcfg.columns : 10));\n    const fillFrom = gcfg.fillFrom === \"top\" ? \"top\" : \"bottom\";\n    const cells = gcfg.total > 0 ? this._largestRemainder(counts, Math.round(gcfg.total)) : counts.slice();\n    const totalCells = cells.reduce((a, b) => a + b, 0);\n    const rows = Math.max(1, Math.ceil(Math.max(1, totalCells) / cols));\n    const labelSpace = 6;\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const availW = Math.max(4, gw);\n    const availH = Math.max(4, gh - labelSpace);\n    const fixed = this._fixedRadius(opts);\n    let pitch = 0;\n    if (fixed) {\n      pitch = 2 * fixed * spacing;\n      this._lastDotR = fixed;\n    } else {\n      pitch = Math.min(availW / cols, availH / rows);\n      this._lastDotR = Math.max(1, pitch / (2 * spacing));\n    }\n    const blockW = cols * pitch;\n    const blockH = rows * pitch;\n    const originX = (gw - blockW) / 2 + pitch / 2;\n    const topY = labelSpace + (availH - blockH) / 2;\n    const rowY = (rowIdx) => fillFrom === \"bottom\" ? topY + blockH - pitch / 2 - rowIdx * pitch : topY + pitch / 2 + rowIdx * pitch;\n    const clusters = counts.map((_, i) => ({\n      i,\n      cx: gw / 2,\n      cy: labelSpace + availH / 2,\n      outerR: Math.max(blockW, blockH) / 2,\n      /** @type {{x:number,y:number,slot?:number}[]} */\n      dots: []\n    }));\n    let k = 0;\n    for (let ci = 0; ci < cells.length; ci++) {\n      for (let j = 0; j < cells[ci]; j++) {\n        const col = k % cols;\n        const rowIdx = Math.floor(k / cols);\n        clusters[ci].dots.push({\n          x: originX + col * pitch,\n          y: rowY(rowIdx),\n          slot: k\n        });\n        k++;\n      }\n    }\n    return clusters;\n  }\n  /**\n   * Small-multiple (\"trellis\") waffles: ONE mini-waffle per category, laid out\n   * in a near-square grid of tiles. Each tile has `grid.total` cells (default\n   * 100 -> a 10x10 tile) and fills a fraction of them equal to the category's\n   * value over a denominator (`grid.max`, else the largest count so the leader\n   * fills its tile and every other tile stays proportionally full - no empty\n   * tiles for arbitrary data). The unfilled cells are drawn as a faint TRACK\n   * backdrop (see _drawGridTrack) so each tile reads as a part-to-whole \"of N\".\n   * Only VISIBLE (non-zero) categories claim a tile, so a legend hide drops the\n   * tile and the rest re-flow. Each filled cell is keyed by a physical\n   * `tile*cells + localCell` slot, so a value change grows/shrinks a tile's fill\n   * in place instead of reshuffling.\n   * @param {number[]} counts @param {any} opts\n   */\n  _layoutGridSplit(counts, opts) {\n    const w = this.w;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const gcfg = opts.grid || {};\n    const cols = Math.max(1, Math.round(gcfg.columns > 0 ? gcfg.columns : 10));\n    const fillFrom = gcfg.fillFrom === \"top\" ? \"top\" : \"bottom\";\n    const cellsPerTile = Math.max(1, Math.round(gcfg.total > 0 ? gcfg.total : 100));\n    const rowsPerTile = Math.max(1, Math.ceil(cellsPerTile / cols));\n    const visible = counts.map((_, i) => i).filter((i) => counts[i] > 0);\n    const K = Math.max(1, visible.length);\n    const denom = gcfg.max > 0 ? gcfg.max : Math.max(1, ...counts);\n    const tileCols = Math.max(\n      1,\n      Math.round(gcfg.tileColumns > 0 ? gcfg.tileColumns : Math.ceil(Math.sqrt(K)))\n    );\n    const tileRows = Math.max(1, Math.ceil(K / tileCols));\n    const labelsOn = !(opts.clusterLabels && opts.clusterLabels.show === false);\n    const labelsBelow = labelsOn && opts.clusterLabels && opts.clusterLabels.position === \"bottom\";\n    const topBand = labelsOn && !labelsBelow ? 22 : 4;\n    const botBand = labelsOn && labelsBelow ? 22 : 4;\n    const tileW = gw / tileCols;\n    const tileH = gh / tileRows;\n    const availTileW = Math.max(4, tileW * 0.86);\n    const availTileH = Math.max(4, tileH - topBand - botBand);\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const fixed = this._fixedRadius(opts);\n    let pitch = 0;\n    if (fixed) {\n      pitch = 2 * fixed * spacing;\n      this._lastDotR = fixed;\n    } else {\n      pitch = Math.min(availTileW / cols, availTileH / rowsPerTile);\n      this._lastDotR = Math.max(1, pitch / (2 * spacing));\n    }\n    const blockW = cols * pitch;\n    const blockH = rowsPerTile * pitch;\n    const rowY = (topY, rowIdx) => fillFrom === \"bottom\" ? topY + blockH - pitch / 2 - rowIdx * pitch : topY + pitch / 2 + rowIdx * pitch;\n    const track = [];\n    const clusters = [];\n    visible.forEach((ci, t) => {\n      const tc = t % tileCols;\n      const tr = Math.floor(t / tileCols);\n      const tileX = tc * tileW;\n      const tileYtop = tr * tileH;\n      const originX = tileX + (tileW - blockW) / 2 + pitch / 2;\n      const topY = tileYtop + topBand + (availTileH - blockH) / 2;\n      const cellXY = (k) => ({\n        x: originX + k % cols * pitch,\n        y: rowY(topY, Math.floor(k / cols))\n      });\n      for (let k = 0; k < cellsPerTile; k++) track.push(cellXY(k));\n      const filled = Math.max(\n        0,\n        Math.min(cellsPerTile, Math.round(counts[ci] / denom * cellsPerTile))\n      );\n      const dots = [];\n      for (let k = 0; k < filled; k++) {\n        const p = cellXY(k);\n        dots.push({ x: p.x, y: p.y, slot: t * cellsPerTile + k });\n      }\n      clusters.push({\n        i: ci,\n        cx: tileX + tileW / 2,\n        cy: topY + blockH / 2,\n        outerR: blockH / 2,\n        // Straight per-tile label (never a curved arc), placed by position.\n        flat: true,\n        split: true,\n        dots\n      });\n    });\n    this._gridDenom = denom;\n    this._gridTrack = { cells: track };\n    return clusters;\n  }\n  /**\n   * Draw the faint \"track\" backdrop for the small-multiple grid: every cell of\n   * every tile's full lattice, so the filled (coloured) cells drawn on top read\n   * as a fraction of the whole. Static (redrawn each render, never animated);\n   * painted BEHIND the series groups. `grid.trackColor` overrides the default\n   * theme-neutral grey.\n   * @param {any} ret @param {Graphics} graphics @param {any} opts\n   */\n  _drawGridTrack(ret, graphics, opts) {\n    const track = this._gridTrack;\n    if (!track || !track.cells || !track.cells.length) return;\n    const r = this._lastDotR;\n    const gcfg = opts.grid || {};\n    const trackColor = gcfg.trackColor || \"rgba(128,128,128,0.14)\";\n    const g = graphics.group({ class: \"apexcharts-unit-track\" });\n    track.cells.forEach((c) => {\n      let el;\n      if (opts.shape === \"square\") {\n        const side = r * 2;\n        el = graphics.drawRect(0, 0, side, side, opts.borderRadius || 0, trackColor, 1, 0, \"none\");\n        el.node.setAttribute(\"fill\", trackColor);\n        el.node.setAttribute(\"x\", String(c.x - r));\n        el.node.setAttribute(\"y\", String(c.y - r));\n      } else {\n        el = graphics.drawCircle(r, { fill: trackColor, \"stroke-width\": 0, stroke: \"none\" });\n        el.node.setAttribute(\"fill\", trackColor);\n        el.node.setAttribute(\"cx\", String(c.x));\n        el.node.setAttribute(\"cy\", String(c.y));\n      }\n      el.node.classList.add(\"apexcharts-unit-track-cell\");\n      g.add(el);\n    });\n    ret.add(g);\n  }\n  /**\n   * Scatter / beeswarm layout: position every unit on a real numeric X value\n   * axis by its own value (`_unitValueOf`), laned by category on Y. Within a\n   * lane an anti-overlap \"swarm\" pack (or a random jitter) spreads the dots off\n   * the centre line so equal / close values do not stack on top of each other.\n   * This is the unit chart's answer to \"put these on axes\": one dot per datum,\n   * placed by data, with a drawn value axis + category lanes (see\n   * _drawScatterAxes). Needs the per-unit object form (each datum a numeric\n   * `value`/`y`); flat counts have no per-unit value, so their lanes stay empty.\n   * @param {any} opts\n   */\n  _layoutScatter(opts) {\n    const w = this.w;\n    const scfg = opts.scatter || {};\n    if (scfg.y === \"value\") return this._layoutScatter2D(opts);\n    if (scfg.orientation === \"vertical\") return this._layoutScatterVertical(opts);\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const unitData = w.seriesData.unitData || [];\n    const names = w.seriesData.seriesNames || [];\n    const valueOf = (d) => this._unitValueOf(d);\n    const sizeStats = this._scatterSizeStats(scfg, unitData);\n    const catVals = unitData.map(\n      (cat) => Array.isArray(cat) ? cat.map(valueOf) : []\n    );\n    const isNum2 = (v) => v != null && isFinite(v);\n    const visible = catVals.map((_, i) => i).filter((i) => catVals[i].some(isNum2));\n    const Kv = Math.max(1, visible.length);\n    let vmin = Infinity;\n    let vmax = -Infinity;\n    catVals.forEach(\n      (vs) => vs.forEach((v) => {\n        if (v != null && isFinite(v)) {\n          if (v < vmin) vmin = v;\n          if (v > vmax) vmax = v;\n        }\n      })\n    );\n    if (vmin === Infinity) {\n      vmin = 0;\n      vmax = 1;\n    }\n    const tickAmount = Math.max(2, Math.round(scfg.tickAmount > 0 ? scfg.tickAmount : 5));\n    const domain = this._scatterValueDomain(scfg, vmin, vmax, tickAmount);\n    const xMin = domain.min;\n    const xMax = domain.max;\n    const xSpan = xMax - xMin || 1;\n    const laneW = scfg.laneLabelWidth != null ? Math.max(0, scfg.laneLabelWidth) : Kv > 1 ? 92 : 8;\n    const bottomGutter = 30 + (scfg.xTitle ? 20 : 0);\n    const plotL = laneW;\n    const plotR = gw - 8;\n    const plotT = 10;\n    const plotB = gh - bottomGutter;\n    const plotW = Math.max(4, plotR - plotL);\n    const plotH = Math.max(4, plotB - plotT);\n    const plotX = (v) => plotL + (v - xMin) / xSpan * plotW;\n    const laneH = plotH / Kv;\n    const laneCy = (slot) => plotT + laneH * (slot + 0.5);\n    let r = 0;\n    const fixed = this._fixedRadius(opts);\n    if (fixed) {\n      r = fixed;\n    } else {\n      const maxLane = Math.max(\n        1,\n        ...visible.map((i) => catVals[i].filter(isNum2).length)\n      );\n      r = Math.max(\n        2,\n        Math.min(6, laneH * 0.12, plotW / (2.5 * Math.sqrt(maxLane)))\n      );\n    }\n    this._lastDotR = r;\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const step = Math.max(0.5, r * spacing);\n    const jitter = scfg.spread === \"jitter\";\n    const clusters = [];\n    const lanes = [];\n    const maxR = sizeStats ? sizeStats.rMax : r;\n    visible.forEach((ci, slot) => {\n      const cy = laneCy(slot);\n      lanes.push({ i: ci, cy, name: names[ci] || `series-${ci + 1}` });\n      const cat = unitData[ci] || [];\n      const pts = cat.map((d, j) => {\n        const v = valueOf(d);\n        const p = { j, px: plotX(isNum2(v) ? v : xMin), y: cy };\n        if (sizeStats) p.r = this._scatterRadius(d, sizeStats, r);\n        return p;\n      });\n      if (jitter) {\n        const halfLane = Math.max(maxR, laneH / 2 - maxR);\n        pts.forEach((p, k) => {\n          const t = (k * 9301 + 49297) % 233280 / 233280;\n          p.y = cy + (t * 2 - 1) * halfLane;\n        });\n      } else {\n        this._beeswarm(pts, cy, r, step, maxR);\n      }\n      clusters.push({\n        i: ci,\n        cx: (plotL + plotR) / 2,\n        cy,\n        outerR: laneH / 2,\n        dots: pts.map((p) => ({ x: p.px, y: p.y, r: p.r }))\n      });\n    });\n    const ticks = domain.ticks;\n    this._scatterAxis = {\n      mode: \"1d\",\n      plotL,\n      plotR,\n      plotT,\n      plotB,\n      xMin,\n      xMax,\n      plotX,\n      ticks,\n      lanes,\n      xTitle: scfg.xTitle,\n      formatter: typeof scfg.xFormatter === \"function\" ? scfg.xFormatter : null,\n      gridlines: scfg.gridlines !== false\n    };\n    return clusters;\n  }\n  /**\n   * Vertical beeswarm: the transpose of _layoutScatter. The value runs UP the Y\n   * axis and each category is a column (lane) across X; the swarm pack spreads\n   * dots horizontally off each column's centre line. The value-axis config keys\n   * (`xMin`/`xMax`/`xTitle`/`xFormatter`/`tickAmount`) still describe the value\n   * axis (now Y), so flipping `orientation` keeps the same value settings.\n   * @param {any} opts\n   */\n  _layoutScatterVertical(opts) {\n    const w = this.w;\n    const scfg = opts.scatter || {};\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const unitData = w.seriesData.unitData || [];\n    const names = w.seriesData.seriesNames || [];\n    const valueOf = (d) => this._unitValueOf(d);\n    const sizeStats = this._scatterSizeStats(scfg, unitData);\n    const catVals = unitData.map(\n      (cat) => Array.isArray(cat) ? cat.map(valueOf) : []\n    );\n    const isNum2 = (v) => v != null && isFinite(v);\n    const visible = catVals.map((_, i) => i).filter((i) => catVals[i].some(isNum2));\n    const Kv = Math.max(1, visible.length);\n    let vmin = Infinity;\n    let vmax = -Infinity;\n    catVals.forEach(\n      (vs) => vs.forEach((v) => {\n        if (v != null && isFinite(v)) {\n          if (v < vmin) vmin = v;\n          if (v > vmax) vmax = v;\n        }\n      })\n    );\n    if (vmin === Infinity) {\n      vmin = 0;\n      vmax = 1;\n    }\n    const tickAmount = Math.max(2, Math.round(scfg.tickAmount > 0 ? scfg.tickAmount : 5));\n    const domain = this._scatterValueDomain(scfg, vmin, vmax, tickAmount);\n    const vMin = domain.min;\n    const vMax = domain.max;\n    const vSpan = vMax - vMin || 1;\n    const leftGutter = 46 + (scfg.xTitle ? 18 : 0);\n    const bottomGutter = Kv > 1 ? 26 : 10;\n    const plotL = leftGutter;\n    const plotR = gw - 10;\n    const plotT = 10;\n    const plotB = gh - bottomGutter;\n    const plotW = Math.max(4, plotR - plotL);\n    const plotH = Math.max(4, plotB - plotT);\n    const plotY = (v) => plotB - (v - vMin) / vSpan * plotH;\n    const laneW = plotW / Kv;\n    const laneCx = (slot) => plotL + laneW * (slot + 0.5);\n    let r = 0;\n    const fixed = this._fixedRadius(opts);\n    if (fixed) {\n      r = fixed;\n    } else {\n      const maxLane = Math.max(\n        1,\n        ...visible.map((i) => catVals[i].filter(isNum2).length)\n      );\n      r = Math.max(\n        2,\n        Math.min(6, laneW * 0.12, plotH / (2.5 * Math.sqrt(maxLane)))\n      );\n    }\n    this._lastDotR = r;\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const step = Math.max(0.5, r * spacing);\n    const jitter = scfg.spread === \"jitter\";\n    const clusters = [];\n    const lanes = [];\n    const maxR = sizeStats ? sizeStats.rMax : r;\n    visible.forEach((ci, slot) => {\n      const cx = laneCx(slot);\n      lanes.push({ i: ci, cx, name: names[ci] || `series-${ci + 1}` });\n      const cat = unitData[ci] || [];\n      const pts = cat.map((d, j) => {\n        const v = valueOf(d);\n        const p = { j, py: plotY(isNum2(v) ? v : vMin), x: cx };\n        if (sizeStats) p.r = this._scatterRadius(d, sizeStats, r);\n        return p;\n      });\n      if (jitter) {\n        const halfLane = Math.max(maxR, laneW / 2 - maxR);\n        pts.forEach((p, k) => {\n          const t = (k * 9301 + 49297) % 233280 / 233280;\n          p.x = cx + (t * 2 - 1) * halfLane;\n        });\n      } else {\n        this._beeswarm(pts, cx, r, step, maxR, true);\n      }\n      clusters.push({\n        i: ci,\n        cx,\n        cy: (plotT + plotB) / 2,\n        outerR: laneW / 2,\n        dots: pts.map((p) => ({ x: p.x, y: p.py, r: p.r }))\n      });\n    });\n    const ticks = domain.ticks;\n    this._scatterAxis = {\n      mode: \"1d\",\n      orientation: \"vertical\",\n      plotL,\n      plotR,\n      plotT,\n      plotB,\n      vMin,\n      vMax,\n      plotY,\n      ticks,\n      lanes,\n      valueTitle: scfg.xTitle,\n      formatter: typeof scfg.xFormatter === \"function\" ? scfg.xFormatter : null,\n      gridlines: scfg.gridlines !== false\n    };\n    return clusters;\n  }\n  /**\n   * 2D value-value scatter: each datum is a point at (`x`, `y`) on two numeric\n   * axes (a scatter / bubble plot in the unit family - premium, keyed\n   * transitions, per-unit colour/tooltip). Category = colour (one series group\n   * per category). With `scatter.sizeRange` set, each dot is a BUBBLE scaled (by\n   * area) from its `sizeField` (default 'z'). Needs the object form with numeric\n   * `x` + `y`.\n   * @param {any} opts\n   */\n  _layoutScatter2D(opts) {\n    const w = this.w;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    const scfg = opts.scatter || {};\n    const unitData = w.seriesData.unitData || [];\n    const isNum2 = (v) => typeof v === \"number\" && isFinite(v);\n    const xOf = (d) => d && typeof d === \"object\" ? d.x : null;\n    const yOf = (d) => d && typeof d === \"object\" ? d.y != null ? d.y : d.value : null;\n    const visible = unitData.map((_, i) => i).filter(\n      (i) => (unitData[i] || []).some((d) => isNum2(xOf(d)) && isNum2(yOf(d)))\n    );\n    let xmn = Infinity;\n    let xmx = -Infinity;\n    let ymn = Infinity;\n    let ymx = -Infinity;\n    unitData.forEach(\n      (cat) => (cat || []).forEach((d) => {\n        const x = xOf(d);\n        const y = yOf(d);\n        if (isNum2(x) && isNum2(y)) {\n          if (x < xmn) xmn = x;\n          if (x > xmx) xmx = x;\n          if (y < ymn) ymn = y;\n          if (y > ymx) ymx = y;\n        }\n      })\n    );\n    if (xmn === Infinity) {\n      xmn = 0;\n      xmx = 1;\n      ymn = 0;\n      ymx = 1;\n    }\n    const xTicksN = Math.max(2, Math.round(scfg.tickAmount > 0 ? scfg.tickAmount : 5));\n    const yTicksN = Math.max(2, Math.round(scfg.yTickAmount > 0 ? scfg.yTickAmount : 5));\n    const nx = this._niceScale(\n      scfg.xMin != null ? scfg.xMin : xmn,\n      scfg.xMax != null ? scfg.xMax : xmx,\n      xTicksN\n    );\n    const ny = this._niceScale(\n      scfg.yMin != null ? scfg.yMin : ymn,\n      scfg.yMax != null ? scfg.yMax : ymx,\n      yTicksN\n    );\n    const xMin = scfg.xMin != null ? scfg.xMin : nx.min;\n    const xMax = scfg.xMax != null ? scfg.xMax : nx.max;\n    const yMin = scfg.yMin != null ? scfg.yMin : ny.min;\n    const yMax = scfg.yMax != null ? scfg.yMax : ny.max;\n    const xSpan = xMax - xMin || 1;\n    const ySpan = yMax - yMin || 1;\n    const leftGutter = 46 + (scfg.yTitle ? 18 : 0);\n    const bottomGutter = 30 + (scfg.xTitle ? 20 : 0);\n    const plotL = leftGutter;\n    const plotR = gw - 12;\n    const plotT = 10;\n    const plotB = gh - bottomGutter;\n    const plotW = Math.max(4, plotR - plotL);\n    const plotH = Math.max(4, plotB - plotT);\n    const plotX = (v) => plotL + (v - xMin) / xSpan * plotW;\n    const plotY = (v) => plotB - (v - yMin) / ySpan * plotH;\n    const sizeStats = this._scatterSizeStats(scfg, unitData);\n    const baseR = this._fixedRadius(opts) || 5;\n    this._lastDotR = baseR;\n    const clusters = [];\n    visible.forEach((ci) => {\n      const cat = unitData[ci] || [];\n      const dots = cat.map((d) => {\n        const x = xOf(d);\n        const y = yOf(d);\n        return {\n          x: plotX(isNum2(x) ? x : xMin),\n          y: plotY(isNum2(y) ? y : yMin),\n          r: sizeStats ? this._scatterRadius(d, sizeStats, baseR) : void 0\n        };\n      });\n      clusters.push({\n        i: ci,\n        cx: (plotL + plotR) / 2,\n        cy: (plotT + plotB) / 2,\n        outerR: plotH / 2,\n        dots\n      });\n    });\n    const mkTicks = (lo, hi, span, spacing, pinned, n) => {\n      const out = [];\n      if (pinned) {\n        for (let k = 0; k < n; k++) out.push(lo + span * k / (n - 1));\n      } else {\n        const sp = spacing || span / Math.max(1, n - 1);\n        for (let v = lo; v <= hi + sp * 0.5; v += sp) {\n          out.push(Math.abs(v) < sp * 1e-9 ? 0 : v);\n        }\n      }\n      return out;\n    };\n    this._scatterAxis = {\n      mode: \"2d\",\n      plotL,\n      plotR,\n      plotT,\n      plotB,\n      plotX,\n      plotY,\n      xTicks: mkTicks(\n        xMin,\n        xMax,\n        xSpan,\n        nx.spacing,\n        scfg.xMin != null || scfg.xMax != null,\n        xTicksN\n      ),\n      yTicks: mkTicks(\n        yMin,\n        yMax,\n        ySpan,\n        ny.spacing,\n        scfg.yMin != null || scfg.yMax != null,\n        yTicksN\n      ),\n      xTitle: scfg.xTitle,\n      yTitle: scfg.yTitle,\n      xFormatter: typeof scfg.xFormatter === \"function\" ? scfg.xFormatter : null,\n      yFormatter: typeof scfg.yFormatter === \"function\" ? scfg.yFormatter : null,\n      gridlines: scfg.gridlines !== false\n    };\n    return clusters;\n  }\n  /**\n   * Bubble size stats for the scatter layout, or null when `scatter.sizeRange`\n   * is not a `[minR, maxR]` pair. Reads the global range of each datum's\n   * `sizeField` (default 'z') so a value maps to a radius (area scale) in\n   * _scatterRadius.\n   * @param {any} scfg @param {any[][]} unitData\n   * @returns {{zmin:number,zmax:number,rMin:number,rMax:number,field:string}|null}\n   */\n  _scatterSizeStats(scfg, unitData) {\n    const range = scfg && scfg.sizeRange;\n    if (!Array.isArray(range) || range.length < 2) return null;\n    const rMin = Math.max(0.5, +range[0]);\n    const rMax = Math.max(rMin, +range[1]);\n    const field = scfg.sizeField || \"z\";\n    let zmin = Infinity;\n    let zmax = -Infinity;\n    unitData.forEach(\n      (cat) => (cat || []).forEach((d) => {\n        const z = d && typeof d === \"object\" ? d[field] : null;\n        if (typeof z === \"number\" && isFinite(z)) {\n          if (z < zmin) zmin = z;\n          if (z > zmax) zmax = z;\n        }\n      })\n    );\n    if (zmin === Infinity) return null;\n    return { zmin, zmax, rMin, rMax, field };\n  }\n  /**\n   * Radius for one datum under the bubble size stats: area proportional to the\n   * `sizeField` value (so radius grows with sqrt), between rMin and rMax. A\n   * missing value collapses to rMin.\n   * @param {any} d\n   * @param {{zmin:number,zmax:number,rMin:number,rMax:number,field:string}} st\n   * @param {number} fallback @returns {number}\n   */\n  _scatterRadius(d, st, fallback) {\n    if (!st) return fallback;\n    const z = d && typeof d === \"object\" ? d[st.field] : null;\n    if (typeof z !== \"number\" || !isFinite(z)) return st.rMin;\n    const t = st.zmax > st.zmin ? (z - st.zmin) / (st.zmax - st.zmin) : 1;\n    const tc = Math.max(0, Math.min(1, t));\n    const aMin = st.rMin * st.rMin;\n    const aMax = st.rMax * st.rMax;\n    return Math.sqrt(aMin + tc * (aMax - aMin));\n  }\n  /**\n   * One-dimensional anti-overlap \"beeswarm\" pack: given points with a fixed x\n   * (`px`) and a lane centre `cy`, assign each a y so no two dots overlap (centre\n   * distance >= r_i + r_j). Greedy in ascending-x order, trying offsets 0, +step,\n   * -step, +2step ... and taking the SMALLEST that clears every already-placed\n   * neighbour still within reach in x. No-overlap always wins: a very dense lane\n   * grows a taller swarm rather than stacking dots (offsets are not hard-clamped\n   * to the lane). Each point may carry its own radius `r` (bubble beeswarm),\n   * else `rFallback` applies; `maxR` bounds the value-window break. Deterministic\n   * (no physics, no randomness).\n   *\n   * Orientation-agnostic: the \"fixed\" axis is the value axis and the \"spread\"\n   * axis is the lane thickness. Horizontal (default): fixed = `px`, spread = `y`\n   * (mutates `.y`). Vertical: fixed = `py`, spread = `x` (mutates `.x`).\n   * @param {any[]} pts @param {number} center lane centre on the spread axis\n   * @param {number} rFallback @param {number} step @param {number} [maxR]\n   * @param {boolean} [vertical]\n   */\n  _beeswarm(pts, center, rFallback, step, maxR, vertical = false) {\n    const fk = vertical ? \"py\" : \"px\";\n    const sk = vertical ? \"x\" : \"y\";\n    const order = pts.slice().sort((a, b) => a[fk] - b[fk]);\n    const placed = [];\n    const rCap = maxR != null ? maxR : rFallback;\n    order.forEach((p) => {\n      const pr = p.r != null ? p.r : rFallback;\n      let chosen = 0;\n      for (let k = 0; k < 2e3; k++) {\n        const off = k === 0 ? 0 : Math.ceil(k / 2) * step * (k % 2 ? 1 : -1);\n        const s = center + off;\n        let ok = true;\n        for (let m = placed.length - 1; m >= 0; m--) {\n          const q = placed[m];\n          const df = p[fk] - q.f;\n          if (df > pr + rCap) break;\n          const need = pr + q.r;\n          const ds = s - q.s;\n          if (df * df + ds * ds < need * need) {\n            ok = false;\n            break;\n          }\n        }\n        if (ok) {\n          chosen = off;\n          break;\n        }\n      }\n      p[sk] = center + chosen;\n      placed.push({ f: p[fk], s: p[sk], r: pr });\n    });\n  }\n  /**\n   * Value-axis domain + ticks for a 1D beeswarm. The domain ALWAYS contains\n   * every datum: a swarm that clips a dot outside the plot box is a bug, so an\n   * explicit `xMin`/`xMax` only FRAMES the axis and is extended by whole\n   * tick-steps whenever the data would otherwise overflow. Orientation-agnostic:\n   * the same value axis is X for a horizontal swarm and Y for a vertical one.\n   * @param {any} scfg scatter config\n   * @param {number} vmin data minimum @param {number} vmax data maximum\n   * @param {number} tickAmount desired tick count\n   * @returns {{ min:number, max:number, ticks:number[] }}\n   */\n  _scatterValueDomain(scfg, vmin, vmax, tickAmount) {\n    const buildTicks = (min, max, spacing2) => {\n      const ticks = [];\n      for (let v = min; v <= max + spacing2 * 0.5; v += spacing2) {\n        ticks.push(Math.abs(v) < spacing2 * 1e-9 ? 0 : v);\n      }\n      return ticks;\n    };\n    if (scfg.xMin != null || scfg.xMax != null) {\n      let min = scfg.xMin != null ? scfg.xMin : vmin;\n      let max = scfg.xMax != null ? scfg.xMax : vmax;\n      if (!(max > min)) max = min + 1;\n      const spacing2 = (max - min) / Math.max(1, tickAmount - 1);\n      if (vmin < min) min -= Math.ceil((min - vmin) / spacing2) * spacing2;\n      if (vmax > max) max += Math.ceil((vmax - max) / spacing2) * spacing2;\n      return { min, max, ticks: buildTicks(min, max, spacing2) };\n    }\n    const nice = this._niceScale(vmin, vmax, tickAmount);\n    const spacing = nice.spacing || (nice.max - nice.min) / Math.max(1, tickAmount - 1);\n    return { min: nice.min, max: nice.max, ticks: buildTicks(nice.min, nice.max, spacing) };\n  }\n  /**\n   * A \"nice\" numeric scale [min, max] + tick spacing covering [dataMin, dataMax]\n   * with about `ticks` ticks, using rounded 1/2/5 x 10^n steps. Homegrown (no\n   * dependency) - lean-core.\n   * @param {number} dataMin @param {number} dataMax @param {number} ticks\n   * @returns {{min:number,max:number,spacing:number}}\n   */\n  _niceScale(dataMin, dataMax, ticks) {\n    const lo = dataMin;\n    let hi = dataMax;\n    if (!(hi > lo)) hi = lo + 1;\n    const range = this._niceNum(hi - lo, false);\n    const spacing = this._niceNum(range / Math.max(1, ticks - 1), true);\n    return {\n      min: Math.floor(lo / spacing) * spacing,\n      max: Math.ceil(hi / spacing) * spacing,\n      spacing\n    };\n  }\n  /**\n   * Round a range to a \"nice\" 1/2/5 x 10^n number (Heckbert's loose/round label\n   * algorithm).\n   * @param {number} range @param {boolean} round @returns {number}\n   */\n  _niceNum(range, round) {\n    const rng = range > 0 ? range : 1;\n    const exp = Math.floor(Math.log(rng) / Math.LN10);\n    const frac = rng / Math.pow(10, exp);\n    let nf;\n    if (round) {\n      nf = frac < 1.5 ? 1 : frac < 3 ? 2 : frac < 7 ? 5 : 10;\n    } else {\n      nf = frac <= 1 ? 1 : frac <= 2 ? 2 : frac <= 5 ? 5 : 10;\n    }\n    return nf * Math.pow(10, exp);\n  }\n  /**\n   * Draw the scatter chrome behind the dots, from the geometry the layout\n   * stashed on `this._scatterAxis`. 1D (beeswarm): vertical X gridlines +\n   * baseline + tick labels (+ x title) + a per-lane category label in the\n   * category colour. 2D: both X + Y gridlines, both axes' tick labels, and\n   * rotated/placed axis titles (no lane labels - category is colour). Browser-\n   * only (SSR renders the dots without the chrome, as with cluster labels).\n   * @param {any} ret @param {Graphics} graphics\n   */\n  _drawScatterAxes(ret, graphics) {\n    const w = this.w;\n    if (!Environment.isBrowser()) return;\n    const ax = this._scatterAxis;\n    if (!ax) return;\n    const NS = \"http://www.w3.org/2000/svg\";\n    const g = graphics.group({ class: \"apexcharts-unit-axis\" });\n    const gridColor = w.config.grid && w.config.grid.borderColor || \"rgba(128,128,128,0.18)\";\n    const axisColor = \"rgba(128,128,128,0.5)\";\n    const labelColor = w.config.xaxis && w.config.xaxis.labels && w.config.xaxis.labels.style && w.config.xaxis.labels.style.colors || \"rgba(120,130,140,0.9)\";\n    const line = (x1, y1, x2, y2, stroke) => {\n      const l = BrowserAPIs.createElementNS(NS, \"line\");\n      l.setAttribute(\"x1\", String(x1));\n      l.setAttribute(\"y1\", String(y1));\n      l.setAttribute(\"x2\", String(x2));\n      l.setAttribute(\"y2\", String(y2));\n      l.setAttribute(\"stroke\", stroke);\n      l.setAttribute(\"shape-rendering\", \"crispEdges\");\n      g.node.appendChild(l);\n    };\n    const text = (str, x, y, anchor, fill, size, weight, cls) => {\n      const t = BrowserAPIs.createElementNS(NS, \"text\");\n      t.setAttribute(\"class\", cls);\n      t.setAttribute(\"x\", String(x));\n      t.setAttribute(\"y\", String(y));\n      t.setAttribute(\"text-anchor\", anchor);\n      t.setAttribute(\"dominant-baseline\", \"middle\");\n      t.setAttribute(\"font-size\", `${size}px`);\n      t.setAttribute(\"font-family\", w.config.chart.fontFamily || \"inherit\");\n      t.setAttribute(\"font-weight\", String(weight));\n      t.setAttribute(\"fill\", fill);\n      t.textContent = str;\n      g.node.appendChild(t);\n    };\n    if (ax.mode === \"2d\") {\n      ax.yTicks.forEach((v) => {\n        const y = ax.plotY(v);\n        if (ax.gridlines) line(ax.plotL, y, ax.plotR, y, gridColor);\n        const label = ax.yFormatter ? String(ax.yFormatter(v)) : this._formatTick(v);\n        text(label, ax.plotL - 8, y, \"end\", labelColor, 11, 400, \"apexcharts-unit-tick\");\n      });\n      ax.xTicks.forEach((v) => {\n        const x = ax.plotX(v);\n        if (ax.gridlines) line(x, ax.plotT, x, ax.plotB, gridColor);\n        const label = ax.xFormatter ? String(ax.xFormatter(v)) : this._formatTick(v);\n        text(label, x, ax.plotB + 14, \"middle\", labelColor, 11, 400, \"apexcharts-unit-tick\");\n      });\n      line(ax.plotL, ax.plotB, ax.plotR, ax.plotB, axisColor);\n      line(ax.plotL, ax.plotT, ax.plotL, ax.plotB, axisColor);\n      if (ax.xTitle) {\n        text(\n          String(ax.xTitle),\n          (ax.plotL + ax.plotR) / 2,\n          ax.plotB + 32,\n          \"middle\",\n          labelColor,\n          12,\n          600,\n          \"apexcharts-unit-axis-title\"\n        );\n      }\n      if (ax.yTitle) {\n        const yt = BrowserAPIs.createElementNS(NS, \"text\");\n        yt.setAttribute(\"class\", \"apexcharts-unit-axis-title\");\n        const tx = 14;\n        const ty = (ax.plotT + ax.plotB) / 2;\n        yt.setAttribute(\"x\", String(tx));\n        yt.setAttribute(\"y\", String(ty));\n        yt.setAttribute(\"text-anchor\", \"middle\");\n        yt.setAttribute(\"font-size\", \"12px\");\n        yt.setAttribute(\"font-family\", w.config.chart.fontFamily || \"inherit\");\n        yt.setAttribute(\"font-weight\", \"600\");\n        yt.setAttribute(\"fill\", labelColor);\n        yt.setAttribute(\"transform\", `rotate(-90 ${tx} ${ty})`);\n        yt.textContent = String(ax.yTitle);\n        g.node.appendChild(yt);\n      }\n      ret.add(g);\n      return;\n    }\n    if (ax.orientation === \"vertical\") {\n      ax.ticks.forEach((v) => {\n        const y = ax.plotY(v);\n        if (ax.gridlines) line(ax.plotL, y, ax.plotR, y, gridColor);\n        const label = ax.formatter ? String(ax.formatter(v)) : this._formatTick(v);\n        text(label, ax.plotL - 8, y, \"end\", labelColor, 11, 400, \"apexcharts-unit-tick\");\n      });\n      line(ax.plotL, ax.plotT, ax.plotL, ax.plotB, axisColor);\n      if (ax.valueTitle) {\n        const yt = BrowserAPIs.createElementNS(NS, \"text\");\n        yt.setAttribute(\"class\", \"apexcharts-unit-axis-title\");\n        const tx = 14;\n        const ty = (ax.plotT + ax.plotB) / 2;\n        yt.setAttribute(\"x\", String(tx));\n        yt.setAttribute(\"y\", String(ty));\n        yt.setAttribute(\"text-anchor\", \"middle\");\n        yt.setAttribute(\"font-size\", \"12px\");\n        yt.setAttribute(\"font-family\", w.config.chart.fontFamily || \"inherit\");\n        yt.setAttribute(\"font-weight\", \"600\");\n        yt.setAttribute(\"fill\", labelColor);\n        yt.setAttribute(\"transform\", `rotate(-90 ${tx} ${ty})`);\n        yt.textContent = String(ax.valueTitle);\n        g.node.appendChild(yt);\n      }\n      ax.lanes.forEach((lane) => {\n        const color = w.globals.colors[lane.i] || w.globals.colors[0] || \"#008FFB\";\n        text(lane.name, lane.cx, ax.plotB + 16, \"middle\", color, 12, 600, \"apexcharts-unit-lane-label\");\n      });\n      ret.add(g);\n      return;\n    }\n    ax.ticks.forEach((v, idx) => {\n      const x = ax.plotX(v);\n      if (ax.gridlines) line(x, ax.plotT, x, ax.plotB, gridColor);\n      const label = ax.formatter ? String(ax.formatter(v)) : this._formatTick(v);\n      const anchor = idx === 0 ? \"start\" : idx === ax.ticks.length - 1 ? \"end\" : \"middle\";\n      text(label, x, ax.plotB + 14, anchor, labelColor, 11, 400, \"apexcharts-unit-tick\");\n    });\n    line(ax.plotL, ax.plotB, ax.plotR, ax.plotB, axisColor);\n    if (ax.xTitle) {\n      text(\n        String(ax.xTitle),\n        (ax.plotL + ax.plotR) / 2,\n        ax.plotB + 32,\n        \"middle\",\n        labelColor,\n        12,\n        600,\n        \"apexcharts-unit-axis-title\"\n      );\n    }\n    if (ax.plotL > 12) {\n      ax.lanes.forEach((lane) => {\n        const color = w.globals.colors[lane.i] || w.globals.colors[0] || \"#008FFB\";\n        text(lane.name, ax.plotL - 8, lane.cy, \"end\", color, 12, 600, \"apexcharts-unit-lane-label\");\n      });\n    }\n    ret.add(g);\n  }\n  /**\n   * Compact tick-value formatting: integers as-is, otherwise trimmed to a short\n   * decimal; large magnitudes get a k/M suffix.\n   * @param {number} v @returns {string}\n   */\n  _formatTick(v) {\n    if (!isFinite(v)) return \"\";\n    const a = Math.abs(v);\n    if (a >= 1e6) return `${+(v / 1e6).toFixed(1)}M`;\n    if (a >= 1e4) return `${+(v / 1e3).toFixed(1)}k`;\n    if (Number.isInteger(v)) return String(v);\n    return String(+v.toFixed(2));\n  }\n  /**\n   * Distribute `total` whole cells across `counts` in proportion to each value,\n   * using the largest-remainder method so the parts sum to exactly `total`\n   * (used by the grid/waffle percentage mode).\n   * @param {number[]} counts @param {number} total @returns {number[]}\n   */\n  _largestRemainder(counts, total) {\n    const sum = counts.reduce((a, b) => a + b, 0);\n    if (sum <= 0 || total <= 0) return counts.map(() => 0);\n    const exact = counts.map((c) => c / sum * total);\n    const floors = exact.map((v) => Math.floor(v));\n    const used = floors.reduce((a, b) => a + b, 0);\n    const remaining = Math.max(0, total - used);\n    const byFrac = exact.map((v, i) => ({ i, frac: v - Math.floor(v) })).sort((a, b) => b.frac - a.frac);\n    const out = floors.slice();\n    for (let n = 0; n < remaining && n < byFrac.length; n++) {\n      out[byFrac[n].i]++;\n    }\n    return out;\n  }\n  /**\n   * Phyllotaxis (sunflower) placement for `n` points around (cx, cy).\n   * @param {number} cx @param {number} cy @param {number} n\n   * @param {number} step @param {number} startIndex\n   * @returns {{x:number,y:number}[]}\n   */\n  _spiral(cx, cy, n, step, startIndex) {\n    const pts = [];\n    for (let k = 0; k < n; k++) {\n      const idx = startIndex + k;\n      const r = step * Math.sqrt(idx + 0.5);\n      const theta = idx * GOLDEN_ANGLE;\n      pts.push({ x: cx + r * Math.cos(theta), y: cy + r * Math.sin(theta) });\n    }\n    return pts;\n  }\n  /**\n   * A fixed dot radius, if the shape/size implies one: an explicit numeric\n   * `size`, or an `image` shape (sized by its own width/height). Returns null\n   * when dots should auto-size to fit the plot.\n   * @param {any} opts @returns {number | null}\n   */\n  _fixedRadius(opts) {\n    if (opts.shape === \"image\" && opts.image) {\n      return Math.max(opts.image.width || 20, opts.image.height || 20) / 2;\n    }\n    if (this._bubbleActive(opts) && typeof opts.sizeByValue.maxRadius === \"number\") {\n      return opts.sizeByValue.maxRadius > 0 ? opts.sizeByValue.maxRadius : null;\n    }\n    if (typeof opts.size === \"number\" && opts.size > 0) return opts.size;\n    return null;\n  }\n  /**\n   * Whether opt-in bubble sizing applies: enabled, and the shape is a circle\n   * (squares/images keep a uniform size).\n   * @param {any} opts @returns {boolean}\n   */\n  _bubbleActive(opts) {\n    const sbv = opts.sizeByValue;\n    return !!(sbv && sbv.enabled && opts.shape !== \"image\" && opts.shape !== \"square\");\n  }\n  /**\n   * This datum's numeric value for sizing / tooltip: the number itself, or an\n   * object's `value` / `y`. Null when there is no usable number.\n   * @param {any} d @returns {number | null}\n   */\n  _unitValueOf(d) {\n    if (typeof d === \"number\") return d;\n    if (d && typeof d === \"object\") {\n      const v = d.value != null ? d.value : d.y;\n      return typeof v === \"number\" ? v : null;\n    }\n    return null;\n  }\n  /**\n   * Radius for one bubble given the value stats. Default 'area' scaling makes\n   * a bubble's AREA proportional to its value (radius grows with sqrt); 'linear'\n   * scales the radius directly. Missing values collapse to the min radius.\n   * @param {number|null} v\n   * @param {{min:number,max:number,minR:number,maxR:number,scale:string}} stats\n   * @returns {number}\n   */\n  _radiusForValue(v, stats) {\n    if (v == null || !isFinite(v)) return stats.minR;\n    const t = stats.max > stats.min ? (v - stats.min) / (stats.max - stats.min) : 1;\n    const tc = Math.max(0, Math.min(1, t));\n    if (stats.scale === \"linear\") {\n      return stats.minR + tc * (stats.maxR - stats.minR);\n    }\n    const aMin = stats.minR * stats.minR;\n    const aMax = stats.maxR * stats.maxR;\n    return Math.sqrt(aMin + tc * (aMax - aMin));\n  }\n  /**\n   * Value stats + radius bounds for bubble sizing, or null when it does not\n   * apply (disabled, non-circle shape, or no per-unit values). `maxR` is the\n   * reference radius the layout already spaced the lattice for; `minR` defaults\n   * to ~35% of it.\n   * @param {any[][]} unitData @param {any} opts @param {number} refR\n   * @returns {{min:number,max:number,minR:number,maxR:number,scale:string}|null}\n   */\n  _bubbleStats(unitData, opts, refR) {\n    if (!this._bubbleActive(opts)) return null;\n    let vmin = Infinity;\n    let vmax = -Infinity;\n    unitData.forEach((cat) => {\n      if (!cat) return;\n      cat.forEach((d) => {\n        const v = this._unitValueOf(d);\n        if (v != null && isFinite(v)) {\n          if (v < vmin) vmin = v;\n          if (v > vmax) vmax = v;\n        }\n      });\n    });\n    if (vmin === Infinity || vmax < vmin) return null;\n    const sbv = opts.sizeByValue;\n    const maxR = refR;\n    const minR = Math.max(\n      1,\n      Math.min(\n        maxR,\n        typeof sbv.minRadius === \"number\" ? sbv.minRadius : maxR * 0.35\n      )\n    );\n    return {\n      min: vmin,\n      max: vmax,\n      minR,\n      maxR,\n      scale: sbv.scale === \"linear\" ? \"linear\" : \"area\"\n    };\n  }\n  /**\n   * Radial step between successive spiral shells. A fixed radius derives the\n   * step directly; 'auto' derives it so a cluster of `count` dots fits `availR`.\n   * @param {any} opts @param {number} availR @param {number} count\n   * @returns {number}\n   */\n  _resolveStep(opts, availR, count) {\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const fixed = this._fixedRadius(opts);\n    if (fixed) return 2 * fixed * spacing;\n    return availR / (Math.sqrt(Math.max(1, count)) + 0.5);\n  }\n  /**\n   * @param {number} step @param {any} opts\n   * @returns {number}\n   */\n  _dotRadiusFromStep(step, opts) {\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const fixed = this._fixedRadius(opts);\n    if (fixed) return fixed;\n    return Math.max(1, step / (2 * spacing));\n  }\n  /**\n   * Corner-anchored shapes (square, image) position by their top-left x/y;\n   * circles position by their centre cx/cy.\n   * @param {any} opts @returns {boolean}\n   */\n  _isCorner(opts) {\n    return opts.shape === \"square\" || opts.shape === \"image\";\n  }\n  /**\n   * Half-width/height used to convert a centre point to a corner shape's x/y.\n   * @param {any} opts @returns {{hx:number, hy:number}}\n   */\n  _halfExtent(opts) {\n    if (opts.shape === \"image\" && opts.image) {\n      return { hx: (opts.image.width || 20) / 2, hy: (opts.image.height || 20) / 2 };\n    }\n    const r = this._lastDotR;\n    return { hx: r, hy: r };\n  }\n  /**\n   * Draw one dot (circle, square, or image icon) with the category fill +\n   * stroke, tagged so the shared non-axis tooltip and hover reuse work.\n   * @param {Graphics} graphics @param {any} opts @param {number} dotR\n   * @param {string} color @param {number} i @param {number} j\n   * @returns {any}\n   */\n  _drawDot(graphics, opts, dotR, color, i, j) {\n    const w = this.w;\n    const strokeW = w.config.stroke.show ? w.config.stroke.width : 0;\n    const strokeColor = Array.isArray(w.globals.stroke.colors) ? w.globals.stroke.colors[i] || \"none\" : \"none\";\n    const fillOpacity = typeof w.config.fill.opacity === \"number\" ? w.config.fill.opacity : 1;\n    let el;\n    if (opts.shape === \"image\" && opts.image && opts.image.src) {\n      const iw = opts.image.width || 20;\n      const ih = opts.image.height || 20;\n      el = w.dom.Paper.image(opts.image.src);\n      el.node.setAttribute(\"width\", String(iw));\n      el.node.setAttribute(\"height\", String(ih));\n      el.node.setAttribute(\"preserveAspectRatio\", \"xMidYMid meet\");\n      if (opts.image.tint) {\n        el.node.setAttribute(\"filter\", `url(#${this._tintFilter(color)})`);\n      }\n    } else if (opts.shape === \"square\") {\n      const side = dotR * 2;\n      el = graphics.drawRect(0, 0, side, side, opts.borderRadius || 0, color, 1, strokeW, strokeColor);\n      el.node.setAttribute(\"fill\", color);\n      if (fillOpacity < 1) el.node.setAttribute(\"fill-opacity\", String(fillOpacity));\n    } else {\n      el = graphics.drawCircle(dotR, {\n        fill: color,\n        \"stroke-width\": strokeW,\n        stroke: strokeColor\n      });\n      el.node.setAttribute(\"fill\", color);\n      if (fillOpacity < 1) el.node.setAttribute(\"fill-opacity\", String(fillOpacity));\n    }\n    el.node.classList.add(\"apexcharts-unit-area\");\n    el.node.setAttribute(\"i\", String(i));\n    el.node.setAttribute(\"j\", String(j));\n    return el;\n  }\n  /**\n   * Ensure (once per colour) an SVG recolour filter exists in the chart's defs\n   * and return its id. The filter floods `color` and clips it to the source\n   * graphic's alpha (feComposite operator=\"in\"), so an `<image>` referencing a\n   * monochrome icon is repainted in `color` while keeping its silhouette. Reused\n   * across every dot of the same colour.\n   * @param {string} color @returns {string}\n   */\n  _tintFilter(color) {\n    const w = this.w;\n    const NS = \"http://www.w3.org/2000/svg\";\n    const safe = String(color).replace(/[^a-zA-Z0-9]/g, \"\");\n    const id = `apexcharts-unit-tint-${w.globals.chartID}-${safe}`;\n    const svg = w.dom.Paper.node;\n    if (svg.querySelector(`#${id}`)) return id;\n    let defs = svg.querySelector(\"defs\");\n    if (!defs) {\n      defs = BrowserAPIs.createElementNS(NS, \"defs\");\n      svg.insertBefore(defs, svg.firstChild);\n    }\n    const filter = BrowserAPIs.createElementNS(NS, \"filter\");\n    filter.setAttribute(\"id\", id);\n    filter.setAttribute(\"x\", \"0%\");\n    filter.setAttribute(\"y\", \"0%\");\n    filter.setAttribute(\"width\", \"100%\");\n    filter.setAttribute(\"height\", \"100%\");\n    const flood = BrowserAPIs.createElementNS(NS, \"feFlood\");\n    flood.setAttribute(\"flood-color\", color);\n    flood.setAttribute(\"result\", \"flood\");\n    const comp = BrowserAPIs.createElementNS(NS, \"feComposite\");\n    comp.setAttribute(\"in\", \"flood\");\n    comp.setAttribute(\"in2\", \"SourceAlpha\");\n    comp.setAttribute(\"operator\", \"in\");\n    filter.appendChild(flood);\n    filter.appendChild(comp);\n    defs.appendChild(filter);\n    return id;\n  }\n  /**\n   * Position a non-animated dot at (x, y). Circles use cx/cy at the centre;\n   * corner shapes (square, image) use x/y at the top-left.\n   * @param {SVGElement} node @param {any} opts @param {number} x @param {number} y\n   */\n  _placeDot(node, opts, x, y) {\n    if (this._isCorner(opts)) {\n      const { hx, hy } = this._halfExtent(opts);\n      node.setAttribute(\"x\", String(x - hx));\n      node.setAttribute(\"y\", String(y - hy));\n    } else {\n      node.setAttribute(\"cx\", String(x));\n      node.setAttribute(\"cy\", String(y));\n    }\n  }\n  /**\n   * Parse a `#rgb` / `#rrggbb` / `rgb()` / `rgba()` colour to `[r, g, b]`, or\n   * null if it cannot be parsed (the colour tween is then skipped).\n   * @param {string} str @returns {number[] | null}\n   */\n  _rgb(str) {\n    if (typeof str !== \"string\") return null;\n    let s = str.trim();\n    if (s[0] === \"#\") {\n      if (s.length === 4) s = \"#\" + s[1] + s[1] + s[2] + s[2] + s[3] + s[3];\n      const n = parseInt(s.slice(1, 7), 16);\n      if (isNaN(n)) return null;\n      return [n >> 16 & 255, n >> 8 & 255, n & 255];\n    }\n    const m = s.match(/rgba?\\(([^)]+)\\)/);\n    if (m) {\n      const p = m[1].split(\",\").map((x) => parseFloat(x));\n      if (p.length >= 3 && p.every((v) => !isNaN(v))) return [p[0], p[1], p[2]];\n    }\n    return null;\n  }\n  /**\n   * Whether to run the gather / transition animation. Runs on the initial mount\n   * and on data-driven updates (keyed old->new tween or cross-type burst).\n   * Skipped: in SSR, when animations are off, when the caller passed\n   * `animate:false` (shouldAnimate === false), on a PURE window resize (resized\n   * with no data change - re-gathering on every resize would be jarring), and\n   * when the user prefers reduced motion.\n   *\n   * Note: `w.globals.resized` is set true on every update (not just window\n   * resize), so it must be paired with `!dataChanged` to isolate a real resize.\n   * @returns {boolean}\n   */\n  _shouldAnimate() {\n    const w = this.w;\n    const anim = w.config.chart.animations;\n    if (!Environment.isBrowser()) return false;\n    if (!anim || anim.enabled === false) return false;\n    if (w.globals.shouldAnimate === false) return false;\n    if (w.globals.resized && !w.globals.dataChanged) return false;\n    if (anim.respectReducedMotion && prefersReducedMotion()) return false;\n    return true;\n  }\n  /**\n   * One rAF loop that tweens every dot from its start (cx0/cy0 - either the\n   * cluster centre on first mount / for entering dots, or its previous slot on\n   * an update) to its target slot, staggered by index. Entering dots fade in;\n   * moving dots stay opaque. Dots whose group colour changed (a 'flow' regroup)\n   * cross-fade their fill from the old colour to the new one over the same ease;\n   * dots whose radius changed (bubble sizing) grow/shrink over it too (circles).\n   * @param {{ node: SVGElement, x: number, y: number, cx0: number, cy0: number, r0?: number, r1?: number, delay: number, isEnter: boolean, fill0?: string, fill1?: string, _c0?: number[]|null, _c1?: number[]|null }[]} dots\n   */\n  _runGather(dots) {\n    const w = this.w;\n    const opts = w.config.plotOptions.unit;\n    const speed = Math.max(1, w.config.chart.animations.speed || 800);\n    const corner = this._isCorner(opts);\n    const { hx, hy } = this._halfExtent(opts);\n    const maxDelay = Math.min(speed * 0.6, 450);\n    const n = dots.length;\n    for (let k = 0; k < n; k++) {\n      dots[k].delay = n > 1 ? k / (n - 1) * maxDelay : 0;\n    }\n    const cxAttr = corner ? \"x\" : \"cx\";\n    const cyAttr = corner ? \"y\" : \"cy\";\n    const offX = corner ? hx : 0;\n    const offY = corner ? hy : 0;\n    if (corner) {\n      for (let k = 0; k < n; k++) {\n        dots[k].node.setAttribute(cxAttr, String(dots[k].cx0 - offX));\n        dots[k].node.setAttribute(cyAttr, String(dots[k].cy0 - offY));\n      }\n    }\n    if (!corner) {\n      for (let k = 0; k < n; k++) {\n        const d = dots[k];\n        if (d.r0 != null && d.r1 != null && d.r0 !== d.r1) {\n          d.node.setAttribute(\"r\", String(d.r0));\n        }\n      }\n    }\n    for (let k = 0; k < n; k++) {\n      const d = dots[k];\n      if (d.fill0 && d.fill1 && d.fill0 !== d.fill1) {\n        d._c0 = this._rgb(d.fill0);\n        d._c1 = this._rgb(d.fill1);\n      }\n    }\n    const gcfg = opts.gather || {};\n    const easePos = gcfg.easing === \"outBack\" ? easeOutBack(typeof gcfg.overshoot === \"number\" ? gcfg.overshoot : 1.70158) : gcfg.easing === \"inOutCubic\" ? easeInOutCubic : easeOutCubic;\n    if (this.w.globals.unitGatherRAF != null) {\n      BrowserAPIs.cancelAnimationFrame(this.w.globals.unitGatherRAF);\n      this.w.globals.unitGatherRAF = null;\n    }\n    const start = performance.now();\n    const stepFn = (now) => {\n      if (this.w.globals.isDestroyed) {\n        this.w.globals.unitGatherRAF = null;\n        return;\n      }\n      let done = true;\n      for (let k = 0; k < n; k++) {\n        const d = dots[k];\n        const t = Math.max(0, Math.min(1, (now - start - d.delay) / speed));\n        const e = easePos(t);\n        const ec = easeOutCubic(t);\n        const cx = d.cx0 + (d.x - d.cx0) * e;\n        const cy = d.cy0 + (d.y - d.cy0) * e;\n        d.node.setAttribute(cxAttr, String(cx - offX));\n        d.node.setAttribute(cyAttr, String(cy - offY));\n        if (d.isEnter) d.node.style.opacity = String(Math.min(1, t * 2.5));\n        if (d._c0 && d._c1) {\n          const cr = Math.round(d._c0[0] + (d._c1[0] - d._c0[0]) * ec);\n          const cg = Math.round(d._c0[1] + (d._c1[1] - d._c0[1]) * ec);\n          const cb = Math.round(d._c0[2] + (d._c1[2] - d._c0[2]) * ec);\n          d.node.setAttribute(\"fill\", `rgb(${cr},${cg},${cb})`);\n        }\n        if (!corner && d.r0 != null && d.r1 != null && d.r0 !== d.r1) {\n          d.node.setAttribute(\"r\", String(d.r0 + (d.r1 - d.r0) * ec));\n        }\n        if (t < 1) done = false;\n      }\n      if (done) {\n        for (let k = 0; k < n; k++) {\n          const d = dots[k];\n          d.node.style.opacity = \"\";\n          if (d._c1 && d.fill1) d.node.setAttribute(\"fill\", d.fill1);\n          if (!corner && d.r0 != null && d.r1 != null && d.r0 !== d.r1) {\n            d.node.setAttribute(\"r\", String(d.r1));\n          }\n        }\n        this.w.globals.unitGatherRAF = null;\n      } else {\n        this.w.globals.unitGatherRAF = BrowserAPIs.requestAnimationFrame(stepFn);\n      }\n    };\n    this.w.globals.unitGatherRAF = BrowserAPIs.requestAnimationFrame(stepFn);\n  }\n  /**\n   * Keys present in the previous render but not the current one, resolved back\n   * to their old slot {x, y, fill}. These are the dots that must animate out.\n   * @param {Map<string, {x:number,y:number,fill:string}>} prev\n   * @param {Map<string, {x:number,y:number,fill:string}>} nextPrev\n   * @param {any} opts\n   * @returns {{x:number,y:number,fill:string}[]}\n   */\n  _collectExits(prev, nextPrev, opts) {\n    const cap = Math.max(0, opts.maxUnits || 5e3);\n    const exits = [];\n    for (const [key, slot] of prev) {\n      if (!nextPrev.has(key)) {\n        exits.push(slot);\n        if (exits.length >= cap) break;\n      }\n    }\n    return exits;\n  }\n  /**\n   * Animate the exit ghosts out, then remove them. Layouts whose positions carry\n   * data (a waffle / grid lattice, or a scatter / beeswarm on real axes) fade\n   * their ghosts OUT IN PLACE - drifting them toward the plot centre would drag\n   * cells across tiles or bubbles across the plane, which reads as wrong. The\n   * blob / bar layouts keep the gentle inward collapse so a removal reads as\n   * motion rather than a pop.\n   * @param {any} group @param {{x:number,y:number,fill:string}[]} exits @param {any} opts\n   */\n  _runExits(group, exits, opts) {\n    const w = this.w;\n    const graphics = new Graphics(w, this.ctx);\n    const dotR = this._lastDotR;\n    const cx = w.layout.gridWidth / 2;\n    const cy = w.layout.gridHeight / 2;\n    const drift = opts.layout === \"grid\" || opts.layout === \"scatter\" || opts.layout === \"arc\" ? 0 : 0.35;\n    const ghosts = [];\n    exits.forEach((slot) => {\n      const el = this._drawDot(graphics, opts, dotR, slot.fill, 0, 0);\n      el.node.classList.add(\"apexcharts-unit-exit\");\n      this._placeDot(el.node, opts, slot.x, slot.y);\n      group.add(el);\n      ghosts.push({ node: el.node, x0: slot.x, y0: slot.y });\n    });\n    if (!this._shouldAnimate()) {\n      ghosts.forEach((g) => g.node.remove());\n      return;\n    }\n    const speed = Math.max(1, w.config.chart.animations.speed || 800);\n    const corner = this._isCorner(opts);\n    const { hx, hy } = this._halfExtent(opts);\n    const offX = corner ? hx : 0;\n    const offY = corner ? hy : 0;\n    const cxAttr = corner ? \"x\" : \"cx\";\n    const cyAttr = corner ? \"y\" : \"cy\";\n    if (this.w.globals.unitExitRAF != null) {\n      BrowserAPIs.cancelAnimationFrame(this.w.globals.unitExitRAF);\n      this.w.globals.unitExitRAF = null;\n    }\n    const start = performance.now();\n    const stepFn = (now) => {\n      if (this.w.globals.isDestroyed) {\n        this.w.globals.unitExitRAF = null;\n        return;\n      }\n      const t = Math.max(0, Math.min(1, (now - start) / speed));\n      const e = easeOutCubic(t);\n      for (let k = 0; k < ghosts.length; k++) {\n        const g = ghosts[k];\n        if (drift) {\n          const x = g.x0 + (cx - g.x0) * e * drift;\n          const y = g.y0 + (cy - g.y0) * e * drift;\n          g.node.setAttribute(cxAttr, String(x - offX));\n          g.node.setAttribute(cyAttr, String(y - offY));\n        }\n        g.node.style.opacity = String(1 - e);\n      }\n      if (t < 1) {\n        this.w.globals.unitExitRAF = BrowserAPIs.requestAnimationFrame(stepFn);\n      } else {\n        this.w.globals.unitExitRAF = null;\n        group.node && group.node.remove();\n      }\n    };\n    this.w.globals.unitExitRAF = BrowserAPIs.requestAnimationFrame(stepFn);\n  }\n  /**\n   * A cluster label placed above (default) or below the cluster/bar. A TOP label\n   * over a wide grouped/packed blob rides a curved arc (invisible arc path +\n   * <textPath>, centred at 50% offset); a bottom label, a 'columns' bar, or a\n   * cluster too small for the arc gets a straight centred label instead.\n   * `clusterLabels.position` = 'top' | 'bottom'; `offsetY` pushes it further from\n   * the blob in either direction.\n   * @param {any} elSeries @param {{ i:number, cx:number, cy:number, outerR:number, flat?:boolean }} cluster\n   * @param {number} value @param {number} total @param {any} opts @param {string} color\n   */\n  _drawClusterLabel(elSeries, cluster, value, total, opts, color) {\n    const w = this.w;\n    if (!Environment.isBrowser()) return;\n    const NS = \"http://www.w3.org/2000/svg\";\n    const name2 = w.seriesData.seriesNames[cluster.i] || `series-${cluster.i + 1}`;\n    const percent = total > 0 ? value / total * 100 : 0;\n    const cfg = opts.clusterLabels;\n    const fontSize = parseFloat(cfg.fontSize) || 13;\n    let text;\n    if (typeof cfg.formatter === \"function\") {\n      text = cfg.formatter(name2, {\n        seriesIndex: cluster.i,\n        value,\n        percent,\n        w\n      });\n    } else {\n      text = `${name2} (${percent.toFixed(1)}%)`;\n    }\n    const str = typeof text === \"string\" ? text : String(text);\n    const textEl = BrowserAPIs.createElementNS(NS, \"text\");\n    textEl.setAttribute(\"class\", \"apexcharts-unit-label\");\n    textEl.setAttribute(\"text-anchor\", \"middle\");\n    textEl.setAttribute(\"font-size\", `${fontSize}px`);\n    textEl.setAttribute(\"font-family\", cfg.fontFamily || w.config.chart.fontFamily || \"inherit\");\n    textEl.setAttribute(\"font-weight\", String(cfg.fontWeight || 600));\n    textEl.setAttribute(\"fill\", cfg.color || color);\n    const bottom = cfg.position === \"bottom\";\n    const R = cluster.outerR + fontSize * 0.6 + 3 + (cfg.offsetY || 0);\n    const estWidth = str.length * fontSize * 0.55;\n    const curved = !bottom && !cluster.flat && cfg.curved !== false && estWidth <= Math.PI * R * 0.95;\n    if (curved) {\n      const yMid = cluster.cy;\n      const x1 = cluster.cx - R;\n      const x2 = cluster.cx + R;\n      const d = `M ${x1} ${yMid} A ${R} ${R} 0 0 1 ${x2} ${yMid}`;\n      const arcId = `apexcharts-unit-label-${w.globals.chartID}-${cluster.i}`;\n      const pathEl = BrowserAPIs.createElementNS(NS, \"path\");\n      pathEl.setAttribute(\"id\", arcId);\n      pathEl.setAttribute(\"d\", d);\n      pathEl.setAttribute(\"fill\", \"none\");\n      pathEl.setAttribute(\"stroke\", \"none\");\n      const tp = BrowserAPIs.createElementNS(NS, \"textPath\");\n      tp.setAttribute(\"href\", `#${arcId}`);\n      tp.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", `#${arcId}`);\n      tp.setAttribute(\"startOffset\", \"50%\");\n      tp.textContent = str;\n      textEl.appendChild(tp);\n      elSeries.node.appendChild(pathEl);\n    } else {\n      textEl.setAttribute(\"x\", String(cluster.cx));\n      const y = bottom ? cluster.cy + cluster.outerR + fontSize + 6 + (cfg.offsetY || 0) : cluster.cy - cluster.outerR - 6 - (cfg.offsetY || 0);\n      textEl.setAttribute(\"y\", String(y));\n      textEl.textContent = str;\n    }\n    elSeries.node.appendChild(textEl);\n  }\n}\nconst D2R = Math.PI / 180;\nconst R2D = 180 / Math.PI;\nconst SVGNS = \"http://www.w3.org/2000/svg\";\nconst XHTML = \"http://www.w3.org/1999/xhtml\";\nconst lerp = (a, b, t) => a + (b - a) * t;\nclass SunburstChart {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    const cnf = w.config;\n    this.cfg = cnf.plotOptions.sunburst;\n    this.strokeWidth = cnf.stroke.show ? cnf.stroke.width : 0;\n    this.strokeColor = Array.isArray(cnf.stroke.colors) ? cnf.stroke.colors[0] : cnf.stroke.colors || \"#fff\";\n    this.startAngle = this.cfg.startAngle;\n    this.endAngle = this.cfg.endAngle;\n    this.maxDepth = 0;\n    this.centerX = 0;\n    this.centerY = 0;\n    this.maxRadius = 0;\n    this.total = 1;\n    this._focusMaxDepth = 0;\n    this._focus = null;\n    this._zoomGen = 0;\n    this._roots = [];\n    this._nodesAll = [];\n    this._innerR = () => 0;\n    this._outerR = () => 0;\n    this._tooltipEl = null;\n    this._lblSeq = 0;\n    this._graphics = null;\n    this._ringsG = null;\n    this._labelsG = null;\n  }\n  /**\n   * @param {any[]} series  flattened top-level values (geometry comes from the\n   *   config hierarchy; kept for the standard draw(series) signature + noData)\n   * @returns {any} SVG group\n   */\n  draw(series) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    this._graphics = graphics;\n    const g = graphics.group({ class: \"apexcharts-sunburst\" });\n    if (w.globals.noData || !series || !series.length) return g;\n    const gw = w.layout.gridWidth;\n    const gh = w.layout.gridHeight;\n    this.centerX = gw / 2 + (this.cfg.offsetX || 0);\n    this.centerY = gh / 2 + (this.cfg.offsetY || 0);\n    this.maxRadius = Math.min(gw, gh) / 2.05 - this.strokeWidth - (!w.config.chart.sparkline.enabled ? w.config.chart.dropShadow.blur : 0);\n    if (this.maxRadius < 5) return g;\n    this._roots = this._buildHierarchy();\n    if (!this._roots.length) return g;\n    this._roots.forEach((r) => this._fillValues(r));\n    this._validateStrict();\n    this._nodesAll = [];\n    const colors = w.globals.colors || [];\n    this._roots.forEach((r, i) => {\n      this._colorPass(r, r.color || colors[i % colors.length] || \"#008FFB\");\n    });\n    this.total = this._roots.reduce((s, r) => s + Math.max(0, r.value), 0) || 1;\n    this._ringsG = graphics.group({ class: \"apexcharts-sunburst-rings\" });\n    this._labelsG = graphics.group({ class: \"apexcharts-sunburst-labels\" });\n    g.add(this._ringsG);\n    g.add(this._labelsG);\n    this._focus = null;\n    this._relayout(this._focus);\n    const anims = w.config.chart.animations;\n    let mode = \"none\";\n    if (anims.enabled) {\n      if (w.globals.dataChanged) {\n        if (anims.dynamicAnimation.enabled) mode = \"update\";\n      } else if (!w.globals.resized) {\n        mode = \"intro\";\n      }\n    }\n    this._applyLayout(mode);\n    this._renderBreadcrumb();\n    return g;\n  }\n  // ------------------------------------------------------------------ data\n  /**\n   * Resolve the config into root nodes `{ name, value, color?, children? }`.\n   * Each datum may carry `children` (native) or `drilldown: '<id>'` (adapter).\n   * @returns {any[]}\n   */\n  _buildHierarchy() {\n    const cfgSeries = (\n      /** @type {any} */\n      this.w.config.series\n    );\n    const first = cfgSeries && cfgSeries[0];\n    const data = first && Array.isArray(first.data) ? first.data : cfgSeries;\n    if (!Array.isArray(data)) return [];\n    return data.map(\n      (d, i) => this._toNode(d, i, null, \"\")\n    );\n  }\n  /**\n   * @param {any} d\n   * @param {number} i\n   * @param {string[]|null} paletteFromParent  per-level colours from a drilldown entry\n   * @param {string} parentKey  hierarchical identity of the parent\n   * @param {Set<any>|null} [seenIds]  drilldown ids already expanded on this path\n   * @returns {any}\n   */\n  _toNode(d, i, paletteFromParent, parentKey, seenIds = null) {\n    var _a, _b, _c;\n    const isObj = d && typeof d === \"object\";\n    const name2 = isObj ? (_b = (_a = d.x) != null ? _a : d.name) != null ? _b : \"\" : \"\";\n    const value = isObj ? Number((_c = d.y) != null ? _c : d.value) : Number(d);\n    const node = {\n      name: String(name2),\n      value: isNaN(value) ? null : value,\n      color: isObj && d.color ? d.color : void 0,\n      // Identity across data updates: the path of names (indexed so same-named\n      // siblings stay distinct). Update animations morph matched keys in place.\n      _key: `${parentKey}/${i}:${name2}`\n    };\n    if (paletteFromParent && !node.color) {\n      node.color = paletteFromParent[i % paletteFromParent.length];\n    }\n    if (isObj && Array.isArray(d.children) && d.children.length) {\n      node.children = d.children.map(\n        (c, j) => this._toNode(c, j, null, node._key, seenIds)\n      );\n    } else if (isObj && d.drilldown != null) {\n      const visited = seenIds || /* @__PURE__ */ new Set();\n      if (!visited.has(d.drilldown)) {\n        const dd = this._drilldownById(d.drilldown);\n        if (dd && Array.isArray(dd.data) && dd.data.length) {\n          const nextSeen = new Set(visited);\n          nextSeen.add(d.drilldown);\n          const palette = Array.isArray(dd.colors) ? dd.colors : null;\n          node.children = dd.data.map(\n            (c, j) => this._toNode(c, j, palette, node._key, nextSeen)\n          );\n        }\n      }\n    }\n    return node;\n  }\n  /**\n   * @param {string|number} id\n   * @returns {any}\n   */\n  _drilldownById(id) {\n    const dd = this.w.config.drilldown;\n    const list = dd && Array.isArray(dd.series) ? dd.series : [];\n    return list.find((s) => s && s.id === id);\n  }\n  /**\n   * Fill a parent's value from its children when missing.\n   * @param {any} node\n   */\n  _fillValues(node) {\n    if (node.children && node.children.length) {\n      node.children.forEach((c) => this._fillValues(c));\n      if (node.value == null || isNaN(node.value)) {\n        node.value = node.children.reduce(\n          (s, c) => s + Math.max(0, c.value || 0),\n          0\n        );\n      }\n    }\n    if (node.value == null || isNaN(node.value)) node.value = 0;\n  }\n  /**\n   * With `partition: 'strict'`, warn (once) when a parent's value does not\n   * match the sum of its children. The angles are still normalized to fill the\n   * wedge (strict rendering is a P3 refinement); this just surfaces the data\n   * mismatch.\n   */\n  _validateStrict() {\n    if (this.cfg.partition !== \"strict\") return;\n    let warned = false;\n    const walk = (node) => {\n      if (node.children && node.children.length) {\n        const sum = node.children.reduce(\n          (s, c) => s + Math.max(0, c.value || 0),\n          0\n        );\n        if (!warned && node.value != null && Math.abs(sum - node.value) > 0.5) {\n          console.warn(\n            `ApexCharts sunburst: partition 'strict' but \"${node.name}\" (${node.value}) != sum of its children (${sum}). Angles are normalized to fill the wedge.`\n          );\n          warned = true;\n        }\n        node.children.forEach(walk);\n      }\n    };\n    this._roots.forEach(walk);\n  }\n  /**\n   * Assign a colour to every node (explicit `color` wins, else the parent's\n   * colour tinted lighter). Done once so zoom preserves colours.\n   * @param {any} node\n   * @param {string} color\n   */\n  _colorPass(node, color) {\n    node._color = node.color || color;\n    this._nodesAll.push(node);\n    if (node.children) {\n      node.children.forEach(\n        (c) => this._colorPass(c, c.color || this._lighten(node._color, this.cfg.tint))\n      );\n    }\n  }\n  // ---------------------------------------------------------------- layout\n  /**\n   * Recompute visibility + angles + radii for a focus node (null = whole tree).\n   * @param {any} focus\n   */\n  _relayout(focus) {\n    this._nodesAll.forEach((n) => {\n      n._show = false;\n    });\n    this._focusMaxDepth = 0;\n    if (!focus) {\n      const total = this._roots.reduce((s, r) => s + Math.max(0, r.value), 0) || 1;\n      let a = this.startAngle;\n      this._roots.forEach((r) => {\n        const span = (this.endAngle - this.startAngle) * Math.max(0, r.value) / total;\n        this._placeVis(r, 0, a, a + span, null);\n        a += span;\n      });\n    } else {\n      this._placeVis(focus, 0, this.startAngle, this.endAngle, focus._parent);\n    }\n    const hole = this._parseSize(this.cfg.innerSize, this.maxRadius);\n    const ringCount = this._focusMaxDepth + 1;\n    const band = (this.maxRadius - hole) / ringCount;\n    const radialGap = ringCount > 1 ? 1 : 0;\n    this._innerR = (vd) => hole + vd * band + (vd > 0 ? radialGap / 2 : 0);\n    this._outerR = (vd) => hole + (vd + 1) * band - radialGap / 2;\n    this._nodesAll.forEach((n) => {\n      if (!n._show) return;\n      n._iR = this._innerR(n._vDepth);\n      n._oR = n._leaf && this.cfg.leaf === \"extend\" && n._vDepth < this._focusMaxDepth ? this.maxRadius : this._outerR(n._vDepth);\n    });\n  }\n  /**\n   * @param {any} node\n   * @param {number} vDepth\n   * @param {number} a0\n   * @param {number} a1\n   * @param {any} parent\n   */\n  _placeVis(node, vDepth, a0, a1, parent) {\n    node._show = true;\n    node._vDepth = vDepth;\n    node._a0 = a0;\n    node._a1 = a1;\n    node._parent = parent;\n    node._leaf = !(node.children && node.children.length);\n    if (vDepth > this._focusMaxDepth) this._focusMaxDepth = vDepth;\n    if (!node._leaf) {\n      const total = node.children.reduce(\n        (s, c) => s + Math.max(0, c.value),\n        0\n      ) || 1;\n      let a = a0;\n      node.children.forEach((c) => {\n        const span = (a1 - a0) * Math.max(0, c.value) / total;\n        this._placeVis(c, vDepth + 1, a, a + span, node);\n        a += span;\n      });\n    }\n  }\n  // --------------------------------------------------------------- render\n  /**\n   * Create / update / remove arc elements to match the current layout, with an\n   * animation appropriate to the transition:\n   *   intro  — pie/donut-style angular clock sweep from startAngle to endAngle\n   *            (all rings reveal together as the sweep line passes them)\n   *   update — morph every arc from its previous on-screen geometry (matched\n   *            by node key across the re-render); new arcs unfurl in place\n   *   zoom   — tween angles + radii between focus layouts (same instance)\n   * @param {'intro'|'zoom'|'update'|'none'} mode\n   */\n  _applyLayout(mode) {\n    const w = this.w;\n    const anims = w.config.chart.animations;\n    const dur = !anims.enabled ? 0 : mode === \"none\" ? 0 : mode === \"update\" ? anims.dynamicAnimation.speed || 350 : anims.speed || 500;\n    const gen = ++this._zoomGen;\n    const prev = mode === \"update\" ? (\n      /** @type {any} */\n      this.ctx._sunburstPrevGeoms\n    ) : null;\n    this._nodesAll.forEach((node) => {\n      if (node._show) {\n        const target = {\n          a0: node._a0,\n          a1: node._a1,\n          iR: node._iR,\n          oR: node._oR\n        };\n        if (!node._el) node._el = this._createArcEl(node);\n        if (mode === \"intro\" && dur > 0) {\n          this._sweepArc(node, target, dur, gen);\n        } else {\n          let from;\n          let isNew = false;\n          if (node._cur) {\n            from = node._cur;\n          } else if (prev && prev.get(node._key)) {\n            from = prev.get(node._key);\n          } else {\n            const mid = (target.a0 + target.a1) / 2;\n            from = { a0: mid, a1: mid, iR: target.iR, oR: target.iR };\n            isNew = true;\n          }\n          this._animateArc(node, from, target, dur, false, isNew, gen);\n        }\n      } else if (node._el && node._cur) {\n        const mid = (node._cur.a0 + node._cur.a1) / 2;\n        const target = { a0: mid, a1: mid, iR: node._cur.iR, oR: node._cur.iR };\n        this._animateArc(node, node._cur, target, dur, true, false, gen);\n      }\n    });\n    const geoms = /* @__PURE__ */ new Map();\n    this._nodesAll.forEach((n) => {\n      if (n._show) {\n        geoms.set(n._key, { a0: n._a0, a1: n._a1, iR: n._iR, oR: n._oR });\n      }\n    });\n    this.ctx._sunburstPrevGeoms = geoms;\n    this._renderLabels(dur);\n  }\n  /**\n   * Pie/donut-style intro: a clock sweep from startAngle to endAngle. Each\n   * arc's end angle is clamped to the sweep line, so arcs appear in angular\n   * order and grow until complete — the whole hierarchy unwipes together.\n   * @param {any} node\n   * @param {{a0:number,a1:number,iR:number,oR:number}} target\n   * @param {number} dur\n   * @param {number} gen  layout generation; frames stop once superseded\n   */\n  _sweepArc(node, target, dur, gen) {\n    const el = node._el;\n    const br = this.cfg.borderRadius;\n    const s0 = this.startAngle;\n    const s1 = this.endAngle;\n    el.node.style.display = \"\";\n    el.attr({ d: \"\", opacity: 1 });\n    el.animate(dur).during((pos) => {\n      if (this._zoomGen !== gen) return;\n      const sweep = s0 + (s1 - s0) * pos;\n      if (sweep <= target.a0 + 0.01) {\n        el.attr({ d: \"\" });\n        return;\n      }\n      const a1 = Math.min(target.a1, sweep);\n      el.attr({ d: this._arcPath(target.iR, target.oR, target.a0, a1, br) });\n      node._cur = { a0: target.a0, a1, iR: target.iR, oR: target.oR };\n    }).after(() => {\n      if (this._zoomGen !== gen) return;\n      node._cur = target;\n    });\n  }\n  /**\n   * @param {any} node\n   * @returns {any} svg.js path element\n   */\n  _createArcEl(node) {\n    const path = this._graphics.drawPath({\n      d: \"\",\n      fill: node._color,\n      stroke: this.strokeColor,\n      strokeWidth: this.strokeWidth,\n      fillOpacity: 1,\n      classes: \"apexcharts-sunburst-arc\"\n    });\n    const el = path.node;\n    el.setAttribute(\"data:name\", node.name);\n    el.setAttribute(\"data:value\", String(node.value));\n    this._attachTooltip(el, node);\n    if (Environment.isBrowser()) {\n      el.addEventListener(\"click\", () => this._zoomTo(node));\n      el.style.cursor = \"pointer\";\n    }\n    this._ringsG.add(path);\n    return path;\n  }\n  /**\n   * @param {any} node\n   * @param {{a0:number,a1:number,iR:number,oR:number}} from\n   * @param {{a0:number,a1:number,iR:number,oR:number}} to\n   * @param {number} dur\n   * @param {boolean} hide    shrink + fade out, then hide\n   * @param {boolean} fadeIn  fade 0 -> 1 (new arcs only; morphs stay opaque)\n   * @param {number} gen  layout generation; frames stop once superseded\n   */\n  _animateArc(node, from, to, dur, hide, fadeIn2, gen) {\n    const el = node._el;\n    const br = this.cfg.borderRadius;\n    el.attr({ fill: node._color });\n    if (dur === 0) {\n      el.attr({ d: this._arcPath(to.iR, to.oR, to.a0, to.a1, br), opacity: hide ? 0 : 1 });\n      el.node.style.display = hide ? \"none\" : \"\";\n      node._cur = hide ? null : to;\n      return;\n    }\n    el.node.style.display = \"\";\n    const startOp = hide ? Number(el.attr(\"opacity\")) || 1 : fadeIn2 ? 0 : 1;\n    const endOp = hide ? 0 : 1;\n    el.attr({ opacity: startOp });\n    el.animate(dur).during((pos) => {\n      if (this._zoomGen !== gen) return;\n      const a0 = lerp(from.a0, to.a0, pos);\n      const a1 = lerp(from.a1, to.a1, pos);\n      const iR = lerp(from.iR, to.iR, pos);\n      const oR = lerp(from.oR, to.oR, pos);\n      el.attr({\n        d: this._arcPath(iR, oR, a0, a1, br),\n        opacity: lerp(startOp, endOp, pos)\n      });\n      node._cur = { a0, a1, iR, oR };\n    }).after(() => {\n      if (this._zoomGen !== gen) return;\n      if (hide) {\n        el.node.style.display = \"none\";\n        node._cur = null;\n      } else {\n        node._cur = to;\n      }\n    });\n  }\n  // ---------------------------------------------------------------- labels\n  /**\n   * Labels are overlays on animated paths, so they reveal gradually AFTER the\n   * arcs settle (repo convention: overlays never pop in over a moving path).\n   * @param {number} dur  arc animation duration (0 = instant labels)\n   */\n  _renderLabels(dur) {\n    const labelsG = this._labelsG;\n    while (labelsG.node.firstChild) labelsG.node.removeChild(labelsG.node.firstChild);\n    if (!this.cfg.dataLabels.show) return;\n    this._nodesAll.forEach((node) => {\n      if (!node._show) return;\n      if (node._a1 - node._a0 < this.cfg.dataLabels.minAngleToShow) return;\n      this._renderCurvedLabel(node);\n    });\n    if (dur > 0) {\n      labelsG.attr({ opacity: 0 });\n      labelsG.animate(250, dur).attr({ opacity: 1 });\n    } else {\n      labelsG.attr({ opacity: 1 });\n    }\n  }\n  /**\n   * Curved label along the arc's mid-radius (flipped on the bottom half so it\n   * stays upright). Raw SVG <textPath> — svg.js has no first-class textPath.\n   * @param {any} node\n   */\n  _renderCurvedLabel(node) {\n    if (!Environment.isBrowser()) return;\n    const style = this.cfg.dataLabels.style;\n    const w = this.w;\n    const r = (node._iR + node._oR) / 2;\n    const mid = (node._a0 + node._a1) / 2;\n    const flip = mid > 90 && mid < 270;\n    const padDeg = Math.min(r > 0 ? 4 / r * R2D : 0, (node._a1 - node._a0) / 2);\n    const from = flip ? node._a1 - padDeg : node._a0 + padDeg;\n    const to = flip ? node._a0 + padDeg : node._a1 - padDeg;\n    const p1 = this._ptAt(r, from);\n    const p2 = this._ptAt(r, to);\n    const largeArc = Math.abs(to - from) > 180 ? 1 : 0;\n    const sweep = flip ? 0 : 1;\n    const id = `apx-sb-lbl-${w.globals.cuid}-${this._lblSeq++}`;\n    const guide = BrowserAPIs.createElementNS(SVGNS, \"path\");\n    guide.setAttribute(\"id\", id);\n    guide.setAttribute(\n      \"d\",\n      `M ${p1.x} ${p1.y} A ${r} ${r} 0 ${largeArc} ${sweep} ${p2.x} ${p2.y}`\n    );\n    guide.setAttribute(\"fill\", \"none\");\n    guide.setAttribute(\"stroke\", \"none\");\n    const colors = style.colors;\n    const fill = (Array.isArray(colors) ? colors[0] : colors) || \"#fff\";\n    const text = BrowserAPIs.createElementNS(SVGNS, \"text\");\n    text.setAttribute(\"font-size\", style.fontSize || \"12px\");\n    if (style.fontFamily) text.setAttribute(\"font-family\", style.fontFamily);\n    text.setAttribute(\"font-weight\", String(style.fontWeight || 400));\n    text.setAttribute(\"fill\", fill);\n    text.setAttribute(\"dominant-baseline\", \"central\");\n    text.style.pointerEvents = \"none\";\n    const tp = BrowserAPIs.createElementNS(SVGNS, \"textPath\");\n    tp.setAttribute(\"href\", \"#\" + id);\n    tp.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + id);\n    tp.setAttribute(\"startOffset\", \"50%\");\n    tp.setAttribute(\"text-anchor\", \"middle\");\n    tp.textContent = this._truncate(node.name, r, node._a1 - node._a0, style.fontSize);\n    text.appendChild(tp);\n    this._labelsG.node.appendChild(guide);\n    this._labelsG.node.appendChild(text);\n  }\n  /**\n   * Trim a label to the arc length available at its radius.\n   * @param {string} name\n   * @param {number} r\n   * @param {number} spanDeg\n   * @param {string} fontSize\n   * @returns {string}\n   */\n  _truncate(name2, r, spanDeg, fontSize) {\n    const arcLen = r * spanDeg * D2R - 8;\n    const charW = (parseFloat(fontSize) || 12) * 0.58;\n    const maxChars = Math.floor(arcLen / charW);\n    if (maxChars >= name2.length) return name2;\n    if (maxChars <= 1) return \"\";\n    return name2.slice(0, Math.max(1, maxChars - 1)) + \"…\";\n  }\n  // ----------------------------------------------------------------- zoom\n  /**\n   * Focus a node (zoom in), or zoom out one level when the current focus (the\n   * innermost ring) is clicked.\n   * @param {any} node\n   */\n  _zoomTo(node) {\n    if (this.cfg.zoomOnClick === false) return;\n    const nextFocus = node === this._focus ? node._parent || null : node;\n    if (nextFocus === this._focus) return;\n    this._focus = nextFocus && !(nextFocus.children && nextFocus.children.length) ? nextFocus._parent || null : nextFocus;\n    this._relayout(this._focus);\n    this._applyLayout(\"zoom\");\n    this._renderBreadcrumb();\n  }\n  /** Root -> focus chain of nodes. */\n  _focusChain() {\n    const chain = [];\n    let n = this._focus;\n    while (n) {\n      chain.unshift(n);\n      n = n._parent;\n    }\n    return chain;\n  }\n  /**\n   * Minimal self-contained breadcrumb (reuses the shared `.apexcharts-breadcrumb`\n   * CSS classes, but does NOT depend on the drilldown feature).\n   */\n  _renderBreadcrumb() {\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const elWrap = w.dom.elWrap;\n    if (!elWrap) return;\n    const existing = elWrap.querySelector(\".apexcharts-breadcrumb\");\n    if (existing && existing.parentNode) existing.parentNode.removeChild(existing);\n    if (!this._focus) return;\n    const nav = BrowserAPIs.createElementNS(XHTML, \"nav\");\n    nav.setAttribute(\"class\", \"apexcharts-breadcrumb\");\n    nav.setAttribute(\"aria-label\", \"Sunburst breadcrumb\");\n    nav.style.position = \"absolute\";\n    nav.style.top = \"0px\";\n    nav.style.left = \"0px\";\n    const crumbs = [{ name: \"All\", node: null }].concat(\n      this._focusChain().map((n) => ({ name: n.name, node: n }))\n    );\n    crumbs.forEach((crumb, i) => {\n      if (i > 0) {\n        const sep = BrowserAPIs.createElementNS(XHTML, \"span\");\n        sep.setAttribute(\"class\", \"apexcharts-breadcrumb-separator\");\n        sep.textContent = \" / \";\n        nav.appendChild(sep);\n      }\n      const isCurrent = i === crumbs.length - 1;\n      if (isCurrent) {\n        const cur = BrowserAPIs.createElementNS(XHTML, \"span\");\n        cur.setAttribute(\n          \"class\",\n          \"apexcharts-breadcrumb-item apexcharts-breadcrumb-current\"\n        );\n        cur.textContent = crumb.name;\n        nav.appendChild(cur);\n      } else {\n        const btn = BrowserAPIs.createElementNS(XHTML, \"button\");\n        btn.setAttribute(\"type\", \"button\");\n        btn.setAttribute(\"class\", \"apexcharts-breadcrumb-item\");\n        if (i === 0) {\n          const arrow = BrowserAPIs.createElementNS(XHTML, \"span\");\n          arrow.setAttribute(\"class\", \"apexcharts-breadcrumb-arrow\");\n          arrow.textContent = \"←\";\n          btn.appendChild(arrow);\n        }\n        const text = BrowserAPIs.createElementNS(XHTML, \"span\");\n        text.setAttribute(\"class\", \"apexcharts-breadcrumb-label\");\n        text.textContent = crumb.name;\n        btn.appendChild(text);\n        btn.addEventListener(\"click\", () => {\n          this._focus = crumb.node;\n          this._relayout(this._focus);\n          this._applyLayout(\"zoom\");\n          this._renderBreadcrumb();\n        });\n        nav.appendChild(btn);\n      }\n    });\n    elWrap.appendChild(nav);\n    this._avoidChromeOverlap(nav);\n  }\n  /**\n   * The breadcrumb is an absolute overlay at top-left, so it can sit on top of\n   * a left-aligned title (or subtitle). After mounting, push it below any chart\n   * chrome it intersects. (Duplicated from drilldown's Breadcrumb on purpose —\n   * sunburst must not import the drilldown feature.)\n   * @param {any} nav\n   */\n  _avoidChromeOverlap(nav) {\n    const w = this.w;\n    const chrome = (\n      /** @type {Element[]} */\n      [\".apexcharts-title-text\", \".apexcharts-subtitle-text\"].map((s) => w.dom.baseEl.querySelector(s)).filter((el) => el !== null)\n    );\n    if (!chrome.length) return;\n    const wrapTop = w.dom.elWrap.getBoundingClientRect().top;\n    for (let pass = 0; pass < chrome.length + 1; pass++) {\n      const nr = nav.getBoundingClientRect();\n      const hit = chrome.find((el) => {\n        const r = el.getBoundingClientRect();\n        return nr.left < r.right && nr.right > r.left && nr.top < r.bottom && nr.bottom > r.top;\n      });\n      if (!hit) break;\n      nav.style.top = `${hit.getBoundingClientRect().bottom - wrapTop + 4}px`;\n    }\n  }\n  // ------------------------------------------------------------ geometry\n  /**\n   * @param {number} r\n   * @param {number} deg  0 = top, clockwise\n   * @returns {{x: number, y: number}}\n   */\n  _ptAt(r, deg) {\n    return {\n      x: this.centerX + r * Math.cos((deg - 90) * D2R),\n      y: this.centerY + r * Math.sin((deg - 90) * D2R)\n    };\n  }\n  /**\n   * Rounded donut-segment path (inner radius always > 0). Applies `spacing`\n   * (angular gap) and `borderRadius` (corner rounding), both clamped so a thin\n   * arc never inverts.\n   * @param {number} iR\n   * @param {number} oR\n   * @param {number} a0\n   * @param {number} a1\n   * @param {number} borderRadius\n   * @returns {string}\n   */\n  _arcPath(iR, oR, a0, a1, borderRadius) {\n    if (oR <= iR + 0.01) return \"\";\n    let spanDeg = a1 - a0;\n    const spacing = this.cfg.spacing;\n    if (spacing > 0 && spanDeg > 0 && oR > 0) {\n      const gapDeg = spacing / oR * R2D;\n      const inset = Math.min(gapDeg / 2, Math.max(0, spanDeg / 2 - 0.25));\n      a0 += inset;\n      a1 -= inset;\n      spanDeg = a1 - a0;\n    }\n    if (spanDeg <= 0) return \"\";\n    const spanRad = spanDeg * D2R;\n    const cx = this.centerX;\n    const cy = this.centerY;\n    let r = borderRadius;\n    r = Math.min(r, spanRad * iR / 2, spanRad * oR / 2, (oR - iR) / 2);\n    if (!(r > 0.5)) {\n      return sharpDonutSegmentPath({ cx, cy, rIn: iR, rOut: oR, a0, a1, spanDeg });\n    }\n    return roundedDonutSegmentPath({ cx, cy, rIn: iR, rOut: oR, a0, a1, r, spanDeg });\n  }\n  // ------------------------------------------------------------- tooltip\n  /** @returns {any} */\n  _tip() {\n    if (!this._tooltipEl) {\n      this._tooltipEl = this.w.dom.baseEl.querySelector(\".apexcharts-tooltip\");\n    }\n    return this._tooltipEl;\n  }\n  /**\n   * @param {any} el\n   * @param {any} node\n   */\n  _attachTooltip(el, node) {\n    if (!this.w.config.tooltip.enabled || !Environment.isBrowser()) return;\n    el.addEventListener(\n      \"mouseenter\",\n      (e) => this._showTooltip(e, node)\n    );\n    el.addEventListener(\n      \"mousemove\",\n      (e) => this._positionTooltip(e)\n    );\n    el.addEventListener(\"mouseleave\", () => this._hideTooltip());\n  }\n  /**\n   * @param {MouseEvent} e\n   * @param {any} node\n   */\n  _showTooltip(e, node) {\n    const t = this._tip();\n    if (!t) return;\n    const w = this.w;\n    const pctTotal = (node.value / this.total * 100).toFixed(1);\n    const parentVal = node._parent ? node._parent.value : this.total;\n    const pctParent = parentVal > 0 ? (node.value / parentVal * 100).toFixed(1) : pctTotal;\n    const groupBg = w.config.tooltip.fillSeriesColor ? `background-color:${node._color};` : \"\";\n    t.innerHTML = `<div class=\"apexcharts-tooltip-series-group apexcharts-active\" style=\"display:flex;${groupBg}\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color:${node._color}\"></span><div class=\"apexcharts-tooltip-text\"><div class=\"apexcharts-tooltip-y-group\"><span class=\"apexcharts-tooltip-text-y-label\">${node.name}: </span><span class=\"apexcharts-tooltip-text-y-value\">${node.value} (${pctParent}% of parent, ${pctTotal}% of total)</span></div></div></div>`;\n    t.classList.add(\"apexcharts-active\");\n    t.style.opacity = \"1\";\n    this._positionTooltip(e);\n  }\n  /**\n   * Position beside the cursor, flipping to the opposite side when the box\n   * would overflow the chart wrap, and clamping inside it either way.\n   * @param {MouseEvent} e\n   */\n  _positionTooltip(e) {\n    const t = this._tip();\n    if (!t) return;\n    const rect = this.w.dom.elWrap.getBoundingClientRect();\n    const tw = t.offsetWidth;\n    const th = t.offsetHeight;\n    const pad = 12;\n    let x = e.clientX - rect.left + pad;\n    if (x + tw > rect.width) x = e.clientX - rect.left - tw - pad;\n    x = Math.max(0, Math.min(x, rect.width - tw));\n    let y = e.clientY - rect.top + pad;\n    if (y + th > rect.height) y = e.clientY - rect.top - th - pad;\n    y = Math.max(0, Math.min(y, rect.height - th));\n    t.style.left = x + \"px\";\n    t.style.top = y + \"px\";\n  }\n  _hideTooltip() {\n    const t = this._tip();\n    if (!t) return;\n    t.classList.remove(\"apexcharts-active\");\n    t.style.opacity = \"0\";\n  }\n  // --------------------------------------------------------------- utils\n  /**\n   * @param {string|number} size\n   * @param {number} max\n   * @returns {number}\n   */\n  _parseSize(size, max) {\n    if (typeof size === \"number\") return size;\n    const s = String(size).trim();\n    if (s.endsWith(\"%\")) return parseFloat(s) / 100 * max;\n    const n = parseFloat(s);\n    return isNaN(n) ? 0.15 * max : n;\n  }\n  /**\n   * Blend a hex colour toward white by `amount` (0..1). Non-hex returned as-is.\n   * @param {string} color\n   * @param {number} amount\n   * @returns {string}\n   */\n  _lighten(color, amount) {\n    if (typeof color !== \"string\" || color[0] !== \"#\") return color;\n    let hex = color.slice(1);\n    if (hex.length === 3) {\n      hex = hex.split(\"\").map((c) => c + c).join(\"\");\n    }\n    if (hex.length !== 6) return color;\n    const num = parseInt(hex, 16);\n    if (isNaN(num)) return color;\n    let rC = num >> 16 & 255;\n    let gC = num >> 8 & 255;\n    let bC = num & 255;\n    rC = Math.round(rC + (255 - rC) * amount);\n    gC = Math.round(gC + (255 - gC) * amount);\n    bC = Math.round(bC + (255 - bC) * amount);\n    return \"#\" + ((1 << 24) + (rC << 16) + (gC << 8) + bC).toString(16).slice(1);\n  }\n}\nApexCharts.use({\n  line: Line,\n  area: Line,\n  scatter: Line,\n  bubble: Line,\n  rangeArea: Line,\n  bar: Bar,\n  column: Bar,\n  barStacked: BarStacked,\n  rangeBar: RangeBar,\n  candlestick: BoxCandleStick,\n  boxPlot: BoxCandleStick,\n  violin: Violin,\n  pie: Pie,\n  donut: Pie,\n  polarArea: Pie,\n  radialBar: Radial,\n  radar: Radar,\n  heatmap: HeatMap,\n  treemap: TreemapChart,\n  unit: Unit,\n  sunburst: SunburstChart\n});\nexport {\n  ApexCharts as default\n};\n"]}