{"version":3,"file":"quote.23f8a510.js","mappings":";wHAAO,SAASA,EAAMC,GAA+B,IAApBC,EAAcC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAChD,SAAUG,KAAKN,MAAMO,OAAON,EAAI,KAAOC,IAAW,KAAOA,IAASM,QAAQN,EAC5E,kEAEO,MAAMO,EAAS,CACpBC,YAAcA,GAAiCV,EAA4B,IAAtBO,OAAOG,IAAsB,IAClFC,YAAcA,GAAiCX,EAA4B,IAAtBO,OAAOI,IAAsB,IAClFC,YAAcA,GAAwBZ,EAAMY,GAC5CC,YAAcA,GAAwBb,EAAMa,GAC5CC,KAAOA,GAAiBd,EAAa,IAAPc,GAAc,IAC5CC,KAAOD,GAAiBd,EAAa,IAAPc,GAAc,IAC5CE,WAAaA,GAAuBhB,EAAmB,IAAbgB,GAAoB,IAC9DC,eAAiBA,GAAwBA,EACzCC,aAAeA,GAAsBA,EACrCC,aAAeA,GAAsBA,EACrCC,UAAYA,GAAsBpB,EAAkB,IAAZoB,GAAmB,IAC3DC,WAAaA,GAAuBrB,EAAmB,IAAbqB,GAAoB,KAGnDC,EAAc,IAEdC,EAAyBC,OAAOC,OAAO,CAClDC,IAAK,IAAIC,KAAK,KAAM,EAAG,GACvBC,IAAK,IAAID,KAAK,KAAM,EAAG,kNCvBlB,MAAME,EAAyB,CACpCC,SAAUA,IAAM,mEAChBC,SAAU,sCCGZ,SAASC,IAGP,OACEC,EAAAA,EAAAA,KAAA,OAAKC,UAAU,sCAAqCC,SACjDC,MAAMC,KAAKD,MAAM,IAAIE,KAAI,CAACC,EAAGC,KAC5BP,EAAAA,EAAAA,KAAA,OAAiBC,UAJrB,yIAI4CC,UACtCF,EAAAA,EAAAA,KAACQ,EAAAA,EAAO,KADAD,MAMlB,CAYA,SAAeE,EAAAA,EAAAA,KAVf,WACE,MAAOC,IAAqBC,EAAAA,EAAAA,GAAe,IACtCf,EACHgB,kBAAkB,EAClBC,cAAe,SAEXC,EAAuBJ,aAAiB,EAAjBA,EAAmBK,YAChD,OAAOD,GAAuBd,EAAAA,EAAAA,KAACc,EAAoB,KAAMd,EAAAA,EAAAA,KAACD,EAAe,GAC3E,sdCRe,MAAMiB,UAAiBC,EAAAA,UAAyBC,WAAAA,GAAA,SAAAhD,WAAAiD,EAAA,eAC7BC,EAAAA,EAAAA,cAEhCD,EAAA,yBAGAE,iBAAAA,GACEC,KAAKC,aACP,CAEAC,kBAAAA,GACEF,KAAKC,aACP,CAEAA,WAAAA,GAAc,IAAAE,EACZ,MAAM,KAAEC,EAAI,MAAEC,GAAUL,KAAKM,MAC7B,GAAIF,IAASJ,KAAKO,UAChB,OAEFP,KAAKO,UAAYH,EACjBJ,KAAKQ,OAAOC,QAASC,UAAY,GAEjC,MAAMC,GAAyC,IAA3BX,KAAKM,MAAMK,YAE/B,IAAIC,EAAgBP,EAAQ,GAAK,GAA7BO,EAAwCZ,KAAKM,MAAMO,aAAe,GAAlED,EAA8ED,EAAc,GAAK,GAAjGC,EAA2G,GAC/G,MAAME,EAAad,KAAKM,MAAMS,OAAS,IACjCC,EAAchB,KAAKM,MAAMW,QAAU,IACzC,IAAIF,EAAQD,EAAaF,EAAcA,EACnCK,EAASD,EAAcJ,EAAaA,EAExC,MAAMM,EAAIC,EAAAA,MAEPC,OAAOhB,EAAKrB,KAAKsC,GAAMA,EAAEC,QACzBC,WAAW,CAAC,EAAGR,IACfS,QAAQ,IAEX,IAAIrD,EAAMgD,EAAAA,IAAOf,GAAOiB,GAAWA,EAAEI,QAEnCtD,EADEA,EAAM,EACFgD,EAAAA,IAAOf,GAAOiB,GAAWtE,KAAKoB,IAAIkD,EAAEI,OAAQJ,EAAEI,SAE9C,EAGR,MAAMC,EAAIP,EAAAA,MAEPQ,MAAM,CAACV,EAAQ,IACfG,OAAO,CAACjD,EAAKgD,EAAAA,IAAOf,GAAOiB,GAAWtE,KAAK6E,IAAIP,EAAEI,WACjDI,OACGC,EAAU9B,KAAKM,MAAMyB,eAAiB/B,KAAKM,MAAMyB,eAAiBL,EAAEM,aAEpEC,EAAMd,EAAAA,IACFnB,KAAKQ,OAAOC,SACnByB,SAAS,QAAS,IAClBC,OAAO,KACPC,KAAK,YAAa,aAAexB,EAAc,IAAMA,EAAa,KAErE,IAAIyB,EAAQlB,EAAAA,IAAcD,GACtBoB,EAAQnB,EAAAA,IAAaO,GAAGa,MAAMtB,EAAS,IAAM,GAAK,GAItDgB,EAAIE,OAAO,KAAKC,KAAK,QAAS,QAAQI,KAFbrB,EAAAA,IAAYO,GAEmBe,UAAU1B,GAAO2B,cAAc,GAAGV,WAAW,KAErGC,EACGE,OAAO,KACPC,KAAK,QAAS,eACdA,KAAK,YAAa,eAAiBnB,EAAS,KAC5CuB,KAAKH,GAERJ,EACGU,UAAU,gBACVC,MAAM,cAAejC,EAAc,MAAQ,UAC3CyB,KAAK,KAAMzB,EAAc,QAAU,GACnCyB,KAAK,KAAMzB,EAAc,QAAU,SACnCyB,KAAK,YAAa,WAAazB,GAAe,GAAK,GAAK,KAE3DsB,EACGE,OAAO,KACPC,KAAK,QAAS,eACdA,KAAK,YAAa,aAAerB,EAAQ,QACzCyB,KAAKF,GAEJjC,GACF4B,EACGE,OAAO,QACPC,KAAK,QAAS,mBACdA,KAAK,IAAK,GACVA,KAAK,KAAM,GACXA,KAAK,cAAe,SACpBS,KAAKxC,GAGV,MAAMyC,EAAazB,IAAW,IAAA0B,EAC5B,IAAI9B,EAASlE,KAAK6E,IAAIF,EAAS,QAARqB,EAAC1B,EAAEI,aAAK,IAAAsB,EAAAA,EAAI,GAAKrB,EAAE,IAI1C,OAHIL,EAAEI,MAAQ,GAAKJ,EAAEI,MAAQ,KAC3BR,EAASlE,KAAKsB,IAAI4C,EAAQ,KAErBA,CAAM,EAET+B,EAAa/B,GAAmBA,EAAS,GACpCgB,EAAIU,UAAU,QAAQvC,KAAKA,GAEnC6C,QACAd,OAAO,QACPC,KAAK,SAAS,SAAUf,GACvB,MAAO,aAAeA,EAAEI,MAAQ,EAAI,WAAa,WACnD,IACCW,KAAK,KAAMf,GAAWH,EAAEG,EAAEC,QAC1Bc,KAAK,KAAMf,GAAWK,EAAE3E,KAAKsB,IAAI,EAAGgD,EAAEI,UACtCW,KAAK,SAAUU,GACfV,KAAK,QAASlB,EAAEgC,aAChBd,KAAK,KAAoB,QAAdjC,EAAAgD,sBAAc,IAAAhD,GAAdA,EAAgBiD,mBAAqB,EAAI,GAEvDnB,EACGU,UAAU,cACVvC,KAAKA,GACL6C,QACAd,OAAO,QACPC,KAAK,QAAS,cACdA,KAAK,KAAMf,GAAWH,EAAEG,EAAEC,MAASJ,EAAEgC,YAAc,IACnDd,KAAK,KAAMf,IACV,MAAMJ,EAAS6B,EAAUzB,GACnBgC,EAAUL,EAAU/B,GAC1B,OAAII,EAAEI,MAAQ,EACLC,EAAE3E,KAAKsB,IAAI,EAAGgD,EAAEI,QAAUR,GAAUoC,EAAU,IAAM,GAEtD3B,EAAE3E,KAAKsB,IAAI,EAAGgD,EAAEI,SAAW4B,GAAW,EAAI,GAAG,IAErDjB,KAAK,QAASf,IAAa8B,eAAeG,cAAgBN,EAAUF,EAAUzB,IAAM,QAAU,UAC9Fe,KAAK,cAAe,UACpBA,KAAK,YAAa,QAClBS,MAAMxB,GAAwB,OAAZA,EAAEI,MAAiBK,EAAQT,EAAEI,OAAS,KAE3DzB,KAAKQ,OAAOC,QAASmC,MAAM7B,MAAQD,EAAa,KAChDd,KAAKQ,OAAOC,QAASmC,MAAM3B,OAASD,EAAc,IACpD,CAEAuC,MAAAA,GACE,OACE7E,EAAAA,EAAAA,KAAA,OAEE8E,IAAKxD,KAAKQ,OACV7B,UAAW,oBAAsBqB,KAAKM,MAAM3B,WAAa,KAG/D,ECjKF,SAAS8E,EAAYC,EAAiBC,GACpC,OAAOA,EACJ5E,KAAI,CAAC0C,EAAOxC,KAAU,CACrBqC,KAAMoC,EAAUzE,EAChBwC,YAEDmC,SACL,CAaA,SAASC,EAAOC,GASC,IATA,GACfC,EAAE,MACF1D,EAAK,iBACL2D,EAAgB,iBAChBC,EAAgB,WAChBC,EAAU,WACVC,EAAU,gBACVC,EAAe,gBACfC,GACaP,EACb,MAAM1D,EAAiBkE,SAASP,GAE1B5F,EAAMpB,KAAKoB,OAAOiC,GAClB/B,EAAMtB,KAAKsB,OAAO+B,GAClBuB,EAAQtD,GAAOF,EAAME,GAAOF,EAE5BoG,EAAUxH,KAAK6E,IAAID,IAAU,IAE7B6C,EAAQD,EAAUJ,EAAaD,EAC/BP,EAASvD,EAAKrB,KAAK0C,GACd,MAATA,EAAgB,MAAOhF,EAAAA,EAAAA,IAAM+H,EAAQ/C,EAAO8C,EAAUN,EAAmBD,KAG3E,OACEtF,EAAAA,EAAAA,KAACgB,EAAQ,CACPW,MAAOA,EAAQ,KAAOkE,EAAUF,EAAkBD,GAClDhE,KAAMqD,EAAYa,SAASG,KAAMd,GACjC5B,eAAiBN,IAAUhF,EAAAA,EAAAA,IAAMgF,EAAO8C,EAAUN,EAAmBD,GACrEjD,MAAO,IACPE,OAAQ,IACRJ,YAAa,GACblC,UAAU,SAGhB,CAEe,SAAS+F,IACtB,OACEC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAhG,SAAA,EACEF,EAAAA,EAAAA,KAAA,MAAImG,MAAM,SAAQjG,UAChBF,EAAAA,EAAAA,KAACmF,EAAO,CACNE,GAAG,IACH1D,MAAM,MACN2D,iBAAkB,EAClBC,iBAAkB,EAClBC,WAAY,EACZC,WAAY,EACZC,gBAAgB,GAChBC,gBAAgB,QAGpB3F,EAAAA,EAAAA,KAAA,MAAImG,MAAM,SAAQjG,UAChBF,EAAAA,EAAAA,KAACmF,EAAO,CACNE,GAAG,IACH1D,MAAM,QACN2D,iBAAkB,EAClBC,iBAAkB,EAClBC,WAAY,EACZC,WAAY,KACZC,gBAAgB,SAChBC,gBAAgB,cAGpB3F,EAAAA,EAAAA,KAAA,MAAImG,MAAM,SAAQjG,UAChBF,EAAAA,EAAAA,KAACmF,EAAO,CACNE,GAAG,IACH1D,MAAM,qBACN2D,iBAAkB,EAClBC,iBAAkB,EAClBC,WAAY,EACZC,WAAY,KACZC,gBAAgB,QAChBC,gBAAgB,cAK1B,ihBC7EA,MAAMS,IAAoB3B,eAAeC,mBAEzC,IAAI2B,EAAkB,SAAUtD,GAC9B,OAAIA,EAAQ,EACH,yBACEA,EAAQ,EACV,yBAEF,EACT,EAEIuD,EAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAoB/F,MAAMC,UAActF,EAAAA,UAClBuF,qBAAAA,CAAsBC,GACpB,OApBc,SAAUC,EAAiBC,GAC3C,GAAID,EAAKvI,SAAWwI,EAAKxI,OACvB,OAAO,EAET,IAAK,IAAIyI,EAAI,EAAGA,EAAIF,EAAKvI,OAAQyI,IAC/B,GAAIF,EAAKE,KAAOD,EAAKC,GACnB,OAAO,EAGX,OAAO,CACT,CAUYC,CAAYvF,KAAKM,MAAMkF,QAASL,EAAUK,QACpD,CAEAjC,MAAAA,GAAS,IAAAkC,EAAAC,EACP,MAAMC,EAAQxC,eAAeG,aAAesC,EAAAA,GAAMC,KAAOD,EAAAA,GAAME,MACzDC,EAAcC,EAAAA,GAAMC,QAAeC,GAAMA,EAAEC,MAAMtJ,OAAS,GAAKmD,KAAKM,MAAMkF,QAAQY,SAASF,EAAEG,UAC7FC,GAAcC,EAAAA,EAAAA,GAAqB,CACvCF,OAA8B,QAAxBZ,EAAgB,QAAhBC,EAAEK,EAAY,UAAE,IAAAL,OAAA,EAAdA,EAAgBW,cAAM,IAAAZ,EAAAA,EAAI,GAClCe,UAAWC,EAAAA,GAAUpF,EACrBqF,aAAc,CACZ,CACEC,KAAMC,EAAAA,GAAiBC,UACvBrB,QAASxF,KAAKM,MAAMkF,QACpBsB,SAAU9G,KAAKM,MAAMyG,QACrBC,OAAQhH,KAAKM,MAAM2G,MACnBC,SAAU,KAGdC,aAAa,EACbC,2BAA4BC,EAAAA,GAA2BC,UACvD3B,UAEF,OACEjH,EAAAA,EAAAA,KAAA,OAAKqF,GAAG,QAAQnB,MAAO,CAAE7B,MAAO,KAAMnC,UACpCF,EAAAA,EAAAA,KAAC6I,EAAAA,GAAa,CAAA3I,UACZF,EAAAA,EAAAA,KAAC8I,EAAAA,GAAW,CAACC,OAAQnB,OAI7B,EAaF,MAAMoB,UAAc/H,EAAAA,UAClB4D,MAAAA,GACE,IAAI,OAAEoE,EAAM,KAAEC,GAAS5H,KAAKM,MAC1BuH,EAAc9K,KAAK+K,KAAKH,EAAO9K,OAAS,IAC1C+K,EAAOA,EAAKG,QACZ,MAAMC,EAAYC,IAAW,cAAe,CAC1C,2BAA4BnD,IAG9B,IAAIoD,EAAM,GACV,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAaM,IAC/BD,EAAIE,MACFzD,EAAAA,EAAAA,MAAA,MAEEhG,UAAWsJ,IAAW,CACpB,kBAAmBnD,EACnB,mDAAoDA,IACnDlG,SAAA,EAEHF,EAAAA,EAAAA,KAAA,MAAIC,UAAWqJ,IACdL,EAAOU,OAAO,EAAG,IAAItJ,KAAKuJ,IACzB5J,EAAAA,EAAAA,KAAA,MAAgBC,UAAWqJ,EAAUpJ,SAClC0J,GADMA,KAIVH,IAAMN,EAAc,IAAKnJ,EAAAA,EAAAA,KAAA,MAAIC,UAAWqJ,EAAUpJ,SAAC,YAZ/CuJ,IAeTP,EAAKW,SAAQ,CAACC,EAAKlD,KACjB4C,EAAIE,MACFzD,EAAAA,EAAAA,MAAA,MAEEhG,UAAWsJ,IAAW,CACpB,oCAAqCnD,EACrC,mBAAoBA,GAAmBQ,EAAI,GAAM,EACjD,kBAAmBR,GAAmBQ,EAAI,GAAM,EAChD,iBAAkBR,GAAmBQ,EAAI,GAAM,IAC9C1G,SAAA,EAEHF,EAAAA,EAAAA,KAAA,MAAIC,UAAWsJ,IAAW,YAAa,CAAE,iBAAkBnD,IAAmBlG,SAAE4J,EAAInC,SACnFmC,EAAIb,OAAOU,OAAO,EAAG,IAAItJ,KAAI,CAAC0J,EAAKC,KAClChK,EAAAA,EAAAA,KAAA,MAEEC,UAAWsJ,IAAW,aAAclD,EAAgB4D,WAAWF,IAAO,CACpE,iBAAkB3D,IACjBlG,SAEF6J,GAAG,GAAAG,OALIJ,EAAInC,OAAM,KAAAuC,OAAIH,EAAG,KAAAG,OAAIF,MAQhCP,IAAMN,EAAc,IACnBnJ,EAAAA,EAAAA,KAAA,MACEC,UAAWsJ,IAAW,aAAclD,EAAgB4D,WAAWH,EAAIK,QAAS,CAC1E,iBAAkB/D,IACjBlG,SAEF4J,EAAIK,UAER,GAAAD,OA3BOT,EAAC,KAAAS,OAAItD,IA6BhB,IAIL,OACE5G,EAAAA,EAAAA,KAAA,SACEC,UAAWsJ,IAAW,CACpB,+CAAgDnD,EAChD,cAAeA,IAEjBgE,YAAY,IACZC,YAAY,IAEZC,OAAO,IAAGpK,UAEVF,EAAAA,EAAAA,KAAA,SAAAE,SAAQsJ,KAGd,EAyBK,MAAMe,UAAatJ,EAAAA,UAGxBC,WAAAA,CAAYU,GAAY,IAAA4I,EACtBC,MAAM7I,GAAM4I,EAAAlJ,KAAAH,EAAA,oBAHCuJ,EAAAA,aAAiCvJ,EAAA,sBAgMhC,KACdG,KAAKqJ,OAAOrJ,KAAKsJ,MAAM9D,SAAS,EAAM,IACvC3F,EAAA,wBAiBiB,KAChB,MAAM,QAAEkH,EAAO,MAAEE,GAAUjH,KAAKsJ,MAEhC,IAAKvC,IAAYE,EACf,OAGF,MAAMsC,EAAcvD,EAAAA,GAAMC,QAAQC,GAA2B,MAAhBA,EAAEM,YACzCM,EAAW,IAAI1I,KAAK2I,EAAU,UAC9BC,EAAS,IAAI5I,KAAK6I,EAAQ,UAChCsC,EAAYhB,SAASrC,IACnB,MAAMsD,EAAI,GACRC,EAAI,GACJC,EAAI,GACJC,EAAI,GACJtI,EAAI,GACJuI,EAAI,GACN,IAAK,IAAItE,EAAI,EAAGA,EAAIY,EAAEC,MAAMtJ,OAAQyI,IAAK,CACvC,MAAMuE,EAAOC,EAAAA,GAAMC,sBAAsB7D,EAAE2D,KAAKvE,IAC5CwB,GAAY+C,GAAQA,GAAQ7C,IAC9BwC,EAAEpB,KAAKlC,EAAE8D,KAAK1E,IACdmE,EAAErB,KAAKlC,EAAE+D,KAAK3E,IACdoE,EAAEtB,KAAKlC,EAAEgE,IAAI5E,IACbqE,EAAEvB,KAAKlC,EAAEC,MAAMb,IACfjE,EAAE+G,KAAKlC,EAAE2D,KAAKvE,IACdsE,EAAExB,KAAKlC,EAAEiE,OAAO7E,IAEpB,CACAY,EAAEkE,iBAAiB,CACjBJ,KAAMR,EACNS,KAAMR,EACNS,IAAKR,EACLvD,MAAOwD,EACPE,KAAMxI,EACN8I,OAAQP,GACR,IAIJ5J,KAAKqK,aAAa,IACnBxK,EAAA,eAEQyK,eAAO9E,GAAwC,IAArB+E,IAAS3N,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC1C,MAAM,EAAE4N,IAAMC,EAAAA,EAAAA,KAmBd,GAlBIF,GACFrB,EAAKwB,SAAS,CAAEC,SAAS,IAG3B3E,EAAAA,GAAM4E,MAAMrC,SAAQ+B,WACdO,EAAMxE,SAAWmE,GAAyB,MAApBK,EAAMrE,WAAsB+D,KAKlD/E,EAAQY,SAASyE,EAAMxE,eACnBwE,EAAMC,UAAU,CAAEC,UAAWR,EAAYS,EAAAA,GAAeC,QAAUD,EAAAA,GAAeE,YACvFhC,EAAKiC,mBAELN,EAAMO,UACR,IAGEb,EAAW,CACb,IAAIlJ,EAAImE,EAAQzG,KAAKsH,IAAM,CAAQA,OAAQA,EAAQG,UAAWC,EAAAA,GAAUpF,EAAGgK,WAAYC,EAAAA,GAAWC,UAC9FC,EAAIhG,EAAQzG,KAAKsH,IAAM,CAAQA,OAAQA,EAAQG,UAAWC,EAAAA,GAAU+E,EAAGH,WAAYC,EAAAA,GAAWC,gBAC5FvF,EAAAA,GAAMyF,OAAOpK,EAAEuH,OAAO4C,IAE5BtC,EAAKwB,SACH,CACEC,SAAS,IAEX,KAAM,IAAAe,EACqB,QAAzBA,EAAAxC,EAAKyC,aAAalL,eAAO,IAAAiL,GAAzBA,EAA2B9I,MAAMgJ,eAAe,aAAa,GAGnE,CAEA1C,EAAKiC,iBACP,IAACtL,EAAA,kBAEYgM,IACXA,EAAEC,iBACF,MAAMC,GAAeC,EAAAA,EAAAA,GAAmBhM,KAAKsJ,MAAMyC,cAAc,GAC3DvG,EAAUuG,EAAaE,MAAM,KACnCjM,KAAK0K,SAAS,CAAElF,UAASuG,iBAAgB,KACvC/L,KAAKqJ,OAAO7D,EAAQ,GACpB,IACH3F,EAAA,uBAEgB,CAAC8G,EAAckF,KAC9B,IAAIvC,EAAa,CAAC,EAClBA,EAAM3C,EAAO,SAAW3G,KAAKsJ,MAAM3B,OAAOuE,QAAQV,GAAMA,EAAE/J,QAAUoK,EAAEM,OAAO1K,QAAO,GACpFzB,KAAK0K,SAASpB,EAAM,IACrBzJ,EAAA,4BAEqB,CAAC8G,EAAckD,KACnC,IAAIuC,GAAgBC,EAAAA,EAAAA,IAAqB,IAAIjO,KAAKyL,IAE9CP,EAAa,CAAC,EAClBA,EAAM3C,EAAO,OAASyF,EACtB9C,EAAM3C,EAAO,mBAAoB,EACjC3G,KAAK0K,SAASpB,GAAO,KACnBtJ,KAAKqJ,OAAOrJ,KAAKsJ,MAAM9D,QAAQ,GAC/B,IACH3F,EAAA,wBAEkB8G,IACjB,IAAI2C,EAAa,CAAC,EAClBA,EAAM3C,EAAO,mBAAoB,EACjC3G,KAAK0K,SAASpB,EAAM,IA5TpB,IAAIgD,EAAM,IAAIlO,KACZuJ,EAAS,GAEX,IAAK,IAAIlD,GADS,IAAIrG,MAAOmO,cAAgB,GAClB9H,GAAQ6H,EAAIC,cAAe9H,IACpD,IAAK,IAAI6D,EAAQ,EAAGA,GAAS,MACvB7D,IAAS6H,EAAIC,eAAiBjE,EAAQgE,EAAIE,WAAa,GAD5BlE,IAI/BX,EAAOS,KAAK,CACV3G,MAAO6G,EAAMmE,WAAWC,SAAS,EAAG,KAAO,OAASjI,EACpDkI,MAAO3H,EAAWsD,EAAQ,GAAK,IAAM7D,EAAKgI,WAAWG,UAAU,KAKrE5M,KAAKsJ,MAAQ,CACXyC,aAAcc,mBAAmBC,KAAK,KACtCtH,QAASqH,mBACTlF,OAAQA,EACRoF,UAAWpF,EAAOA,EAAO9K,OAAS,IAClCmQ,QAASrF,EAAOA,EAAO9K,OAAS,GAMhCoQ,SAASZ,EAAAA,EAAAA,IAAqBa,EAAAA,EAAY,IAAI9O,KAAQ,CAAE+O,MAAO,EAAGxF,OAAQ,MAC1EyF,SAASf,EAAAA,EAAAA,IAAqB,IAAIjO,MAClC2I,SAASsF,EAAAA,EAAAA,IAAqBa,EAAAA,EAAiB,IAAI9O,KAAQ,IAC3D6I,OAAOoF,EAAAA,EAAAA,IAAqB,IAAIjO,MAChCuM,SAAS,EAEb,CAEApH,MAAAA,GACE,GAAIvD,KAAKsJ,MAAMqB,QACb,OACEjM,EAAAA,EAAAA,KAAA,OACEC,UAAU,wCACViE,MAAO,CACLyK,UAAWlK,eAAeC,mBAAqB,IAAM,KACrDxE,SACH,eAML,IAAIE,EAAO,IAAIV,KAAK4B,KAAKsJ,MAAMyD,UAAUtL,OACrC6L,EAAK,IAAIlP,KAAK4B,KAAKsJ,MAAM0D,QAAQvL,OACjC8L,EAAevN,KAAKsJ,MAAM3B,OAC3B5I,KAAKuJ,GAAUA,EAAM7G,QACrByK,QAAQ5D,GAAU,IAAIlK,KAAKkK,IAAUxJ,GAAQ,IAAIV,KAAKkK,IAAUgF,IAG/DE,EADSxH,EAAAA,GAAMC,QAAQC,GAA2B,MAAhBA,EAAEM,YAChBzH,KAAKmH,IAC3B,IAAIuH,EAAwD,CAAEpH,OAAQH,EAAEG,OAAQqH,KAAM,CAAC,GASvF,OARAxH,EAAE2D,KAAKtB,SAAQ,CAAClH,EAAQiE,KACtB,GAAU,IAANA,EAAJ,CAGA,IAAIuE,EAAOC,EAAAA,GAAMC,sBAAsB1I,GACnCqM,EAAqB,IAAbxH,EAAEC,MAAMb,GAAYY,EAAEC,MAAMb,EAAI,GAAK,IACjDmI,EAAIC,MAAM7D,EAAK2C,WAAa,GAAGC,WAAWC,SAAS,EAAG,KAAO,OAAS7C,EAAK0C,eAAiBmB,CAH5F,CAGgG,IAE3FD,CAAG,IAGR9F,EAAS4F,EAAaxO,KACvBuJ,GAAUtD,EAAW,IAAI5G,KAAKkK,GAAOkE,YAAc,IAAM,IAAIpO,KAAKkK,GAAOiE,cAAcE,WAAWG,UAAU,KAE3GhF,EAAO4F,EAAWzO,KAAK8L,IACzB,IAAI8C,EAAiB,GACjB9E,EAAQ,EAWZ,OAVA0E,EAAahF,SAASD,IACpB,IAAIoF,EAAO3Q,KAAKN,MAA0B,IAApBoO,EAAM6C,KAAKpF,IAAgB,IAC5CsF,MAAMF,GAITC,EAAKvF,KAAK,QAHVS,GAASgC,EAAM6C,KAAKpF,GAAS,IAAM,EACnCqF,EAAKvF,MAAMsF,EAAO,EAAI,IAAM,IAAMA,EAAKzQ,QAAQ,GAAK,KAGtD,IAEF4L,EAAsB,KAAbA,EAAQ,GACV,CAAExC,OAAQwE,EAAMxE,OAAQsB,OAAQgG,EAAM9E,OAAQA,EAAQ,EAAI,IAAM,IAAMA,EAAM5L,QAAQ,GAAK,IAAK,IAGvG,OACE0H,EAAAA,EAAAA,MAAA,OAAKnB,IAAKxD,KAAK2L,aAAchN,UAAU,oCAAoCiE,MAAO,CAAEyK,UAAW,KAAMzO,SAAA,EACnGF,EAAAA,EAAAA,KAAA,QAAMmP,SAAU7N,KAAK8N,UAAWlL,MAAO,CAAEmL,aAAc,IAAKnP,UAC1DF,EAAAA,EAAAA,KAAA,SAAOC,UAAU,2BAA0BC,UACzCF,EAAAA,EAAAA,KAAA,SAAAE,UACE+F,EAAAA,EAAAA,MAAA,MAAA/F,SAAA,EACEF,EAAAA,EAAAA,KAAA,MAAAE,SAAI,cACJF,EAAAA,EAAAA,KAAA,MAAIqC,MAAM,OAAO6B,MAAO,CAAEpB,QAAS,SAAU5C,UAC3CF,EAAAA,EAAAA,KAAA,SACEC,UAAU,WACVgI,KAAK,OACLlF,MAAOzB,KAAKsJ,MAAMyC,aAClBiC,SAAWnC,IACT7L,KAAK0K,SAAS,CAAEqB,aAAcF,EAAEM,OAAO1K,OAAQ,EAEjDmB,MAAO,CAAE7B,MAAO,QAChB,cAAY,wCAGhBrC,EAAAA,EAAAA,KAAA,MAAAE,UACEF,EAAAA,EAAAA,KAAA,SACEC,UAAU,qBACVgI,KAAK,SACLlF,MAAM,SACN,cAAY,4DAQxB/C,EAAAA,EAAAA,KAACuG,EAAK,CAACO,QAASxF,KAAKsJ,MAAM9D,QAASuB,QAAS/G,KAAKsJ,MAAMvC,QAASE,MAAOjH,KAAKsJ,MAAMrC,SAEnFtC,EAAAA,EAAAA,MAAA,QACEhG,UAAU,cACViE,MAAO,CAAEqL,SAAU,WAAYC,IAAK,GAAIC,MAAOrJ,EAAkB,GAAK,GAAIsJ,SAAU,IACpF,cAAY,sCAAqCxP,SAAA,EAEjDF,EAAAA,EAAAA,KAAA,OAAKkE,MAAO,CAAEqL,SAAU,WAAYlN,MAAO,GAAIsN,QAAS,gBAAiBzP,UACvEF,EAAAA,EAAAA,KAAC4P,EAAAA,EAAU,CACTrB,QAAS,IAAI7O,KAAK4B,KAAKsJ,MAAM2D,SAC7BG,QAAS,IAAIhP,KAAK4B,KAAKsJ,MAAM8D,SAC7B3L,MAAO,IAAIrD,KAAK4B,KAAKsJ,MAAMvC,SAC3BiH,SAAWO,IACTvO,KAAKwO,oBAAoB,QAAQnC,EAAAA,EAAAA,IAAqBkC,GAAU,EAChE3P,UAEFF,EAAAA,EAAAA,KAAA,SAAOiI,KAAK,QAAQ8H,UAAQ,EAAC9P,UAAU,kBAAkB8C,MAAOzB,KAAKsJ,MAAMvC,cAG9E,OACDrI,EAAAA,EAAAA,KAAA,OAAKkE,MAAO,CAAEqL,SAAU,WAAYlN,MAAO,GAAIsN,QAAS,gBAAiBzP,UACvEF,EAAAA,EAAAA,KAAC4P,EAAAA,EAAU,CACTrB,QAAS,IAAI7O,KAAK4B,KAAKsJ,MAAM2D,SAC7BG,QAAS,IAAIhP,KAAK4B,KAAKsJ,MAAM8D,SAC7B3L,MAAO,IAAIrD,KAAK4B,KAAKsJ,MAAMrC,OAC3B+G,SAAWO,IACTvO,KAAKwO,oBAAoB,MAAMnC,EAAAA,EAAAA,IAAqBkC,GAAU,EAC9D3P,UAEFF,EAAAA,EAAAA,KAAA,SAAOiI,KAAK,QAAQ8H,UAAQ,EAAC9P,UAAU,kBAAkB8C,MAAOzB,KAAKsJ,MAAMrC,gBAKjFtC,EAAAA,EAAAA,MAAA,MAAIhG,UAAU,2BAA2B,cAAY,mDAAkDC,SAAA,CAAC,8BAEtGF,EAAAA,EAAAA,KAAA,UACEC,UAAU,YACV8C,MAAOzB,KAAKsJ,MAAMyD,UAAUtL,MAC5BuM,SAAUhO,KAAK0O,eAAeC,KAAK3O,KAAM,QACzC4C,MAAO,CAAEgM,WAAY,UAAWhQ,SAE/BoB,KAAKsJ,MAAM3B,OAAO5I,KAAK8P,IACtBnQ,EAAAA,EAAAA,KAAA,UAA2B+C,MAAOoN,EAAOpN,MAAM7C,SAC5CiQ,EAAOlC,OADGkC,EAAOpN,WAIf,UAET/C,EAAAA,EAAAA,KAAA,UACEC,UAAU,YACV8C,MAAOzB,KAAKsJ,MAAM0D,QAAQvL,MAC1BuM,SAAUhO,KAAK0O,eAAeC,KAAK3O,KAAM,MACzC4C,MAAO,CAAEgM,WAAY,UAAWhQ,SAE/BoB,KAAKsJ,MAAM3B,OAAO5I,KAAK8P,IACtBnQ,EAAAA,EAAAA,KAAA,UAA2B+C,MAAOoN,EAAOpN,MAAM7C,SAC5CiQ,EAAOlC,OADGkC,EAAOpN,eAM1B/C,EAAAA,EAAAA,KAACgJ,EAAK,CAACC,OAAQA,EAAQC,KAAMA,KAE7BlJ,EAAAA,EAAAA,KAAA,WAGN,CAMAqB,iBAAAA,GACEC,KAAKqJ,OAAOrJ,KAAKsJ,MAAM9D,SAKvBQ,EAAAA,GAAM2I,KAAK,oBAAqB3O,KAAKmL,iBACrC2D,SAASC,iBAAiB,kBAAmB/O,KAAKgP,cACpD,CAEAC,oBAAAA,GACEjJ,EAAAA,GAAMkJ,OAAO,oBAAqBlP,KAAKmL,iBACvC2D,SAASK,oBAAoB,kBAAmBnP,KAAKgP,cACvD,iEC5YK,SAASI,EAAUtL,GAA2E,IAA1E,MAAEzD,EAAK,KAAEwJ,EAAI,UAAEwF,EAAS,MAAEC,EAAK,UAAEC,EAAS,UAAEC,GAA4B1L,EACjG,MAAM2L,GAAa7B,MAAM0B,IAAUA,EAAQ,EAAI,EAAI,EAC7CI,EAAWH,GAAavS,OAAO2S,SAASJ,GAE9C,OACE5K,EAAAA,EAAAA,MAAA,OAAKhG,UAAU,cAAaC,SAAA,CACzByB,IAAS3B,EAAAA,EAAAA,KAAA,OAAKC,UAAU,UAASC,SAAEyB,KAElCwJ,GAAQwF,KACR1K,EAAAA,EAAAA,MAAA,QAAMhG,UAAU,mBAAkBC,SAAA,CAC/ByQ,QAAAA,GAAaO,EAAAA,EAAAA,IAAW/F,EAAM,GAAI,UAClCA,IACClF,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAhG,SAAA,CACG,KACDF,EAAAA,EAAAA,KAAA,QAAMC,UAAU,eAAcC,SAAC,MAAQ,KAAEgR,EAAAA,EAAAA,IAAW/F,EAAM,GAAI,WAAW,aAMjFlF,EAAAA,EAAAA,MAAA,OAAKhG,UAAU,sBAAqBC,SAAA,EAClCF,EAAAA,EAAAA,KAAA,UAAQC,UAAU,4BAA2BC,UAAEiR,EAAAA,EAAAA,IAAaP,EAAO,CAAEQ,aAAc,IAAKL,iBACxF/Q,EAAAA,EAAAA,KAAA,OAAKC,UAAU,6BAA4BC,UACzC+F,EAAAA,EAAAA,MAACoL,EAAAA,EAAiB,CAAAnR,SAAA,EAChB+F,EAAAA,EAAAA,MAACqL,EAAAA,EAAY,CAACvO,MAAO8N,EAAW5Q,UAAWsJ,IAAW,CAAE,gBAAiByH,IAAY9Q,SAAA,EACnFF,EAAAA,EAAAA,KAAA,OAAKC,UAAU,UAASC,SAAC,mBACxBiR,EAAAA,EAAAA,IAAaN,EAAW,CAAEU,cAAc,EAAMR,kBAEjD9K,EAAAA,EAAAA,MAACqL,EAAAA,EAAY,CACXvO,MAAO+N,EACP7Q,UAAWsJ,IAAW,CAAE,gBAAiByH,IACzCQ,cAAcxR,EAAAA,EAAAA,KAAA,QAAMC,UAAU,cAAaC,SAAC,MAASA,SAAA,EAErDF,EAAAA,EAAAA,KAAA,OAAKC,UAAU,UAASC,SAAC,uBACxBiR,EAAAA,EAAAA,IAAaL,gBAO5B,CCxDO,MAAMW,EAAoB,yBACpBC,EAAwB,sBCc9B,SAASC,EAAuBC,GACrClH,EAAAA,WAAgB,KAXlB,IACqBmH,EAAAC,EAGZC,EAAAC,EAQcJ,GAV0B,QAA7CC,EAAAzB,SAAS6B,cAAcP,UAAsB,IAAAG,GAA7CA,EAA+CK,UAAUC,IAAI,UACnB,QAA1CL,EAAA1B,SAASgC,eAAeX,UAAkB,IAAAK,GAA1CA,EAA4CI,UAAUG,OAAO,YAEhB,QAA7CN,EAAA3B,SAAS6B,cAAcP,UAAsB,IAAAK,GAA7CA,EAA+CG,UAAUG,OAAO,UACtB,QAA1CL,EAAA5B,SAASgC,eAAeX,UAAkB,IAAAO,GAA1CA,EAA4CE,UAAUC,IAAI,UAM9B,GAC3B,CAACP,GACN,CAEA,MAAMU,EAAsB,CAAC,SAAU,UACjCC,GAA4B,IAAID,EAAqB,UAAW,aAW/D,SAASE,GAAsBC,GAAmD,IAAAC,EACvF,MAAMC,GAAaC,EAAAA,EAAAA,IAAcH,aAAgB,EAAhBA,EAAkBI,SAASC,QAAS,CACnEC,gBAAiB,CAAC,SAClBC,eAAgBV,IAEZW,GAAaL,EAAAA,EAAAA,IAAiC,QAApBF,EAACC,aAAU,EAAVA,EAAYxG,eAAO,IAAAuG,EAAAA,EAAI,KAAM,CAC5DK,gBAAiB,CAAC,YAAa,YAAa,aAAc,aAC1DC,eAAgBT,KAGlB,OAAKU,EAEE,CACLC,UAAWD,EAAWC,UACtBC,UAAWF,EAAWE,UACtBC,SAAUH,EAAWG,SACrBC,SAAUJ,EAAWI,SACrBC,WAAYL,EAAWK,WACvBC,UAAWN,EAAWM,WARA,IAU1B,CC7CO,SAASC,KACd,MAAM,iBAAEf,IAAqBgB,EAAAA,EAAAA,MACvB/R,EAAO8Q,GAAsBC,GAEnC,OAAOzS,EAAAA,EAAAA,KAAC0T,GAAkB,CAAChS,KAAMA,GACnC,CA+CO,MAAMiS,IAAwBC,EAAAA,EAAAA,KAA4BC,EAAAA,EAAAA,KAxCjE,SAAuCzO,GAA+D,IAA9D,iBAAEqN,EAAgB,OAAE1J,GAAwC3D,EAClG,MAAM1D,EAAO8Q,GAAsBC,GAoCnC,OA5BA/H,EAAAA,WAAgB,MACdkB,iBACE,IAAK,MAAMhE,KAAemB,EAAO8J,OAAQ,CACvC,MAAMiB,EAAkBvU,OAAOwU,OAAO,CAAC,EAAGnM,GAE1CkM,EAAgBE,aAAevB,SACxBqB,EAAgBG,MACY,MAA/BH,EAAgBrL,cAClBqL,EAAgBrL,aAAc,GAEhCgK,EAAiBI,SAASqB,OAAOJ,EACnC,CAEA,MAAMK,EAAQ1B,EAAiBI,SAASC,QAElC3G,QAAc7E,EAAAA,GAAM8M,IAAI,CAC5BzM,OAAQwM,EAAMxM,OACdgF,WAAYwH,EAAMxH,WAClB7E,UAAWqM,EAAMrM,UACjBuM,QAAS,CAAEC,QAAS,KAGtBH,EAAMzI,iBAAiB,CAAES,SAC3B,CAEAoI,EAAyB,GACxB,CAAC9B,EAAkB1J,EAAO8J,UAEtB7S,EAAAA,EAAAA,KAAC0T,GAAkB,CAAChS,KAAMA,GACnC,KAIO,SAASgS,GAAkBc,GAAiD,IAAhD,KAAE9S,GAA4C8S,EAM/E,GAFA7C,IAAyBjQ,IAEpBA,EAAM,OAAO,KAElB,MAAM+S,EAAWnW,OAAO2S,SAASvP,EAAKwR,WAChCwB,EAAgBpW,OAAO2S,SAASvP,EAAK4R,aAAe5R,EAAK4R,aAAe5R,EAAKyR,UAC7EC,EAAW1R,EAAK0R,UAAWuB,EAAAA,EAAAA,GAAwB,IAAhBjT,EAAK0R,UAAmB,KAC3DC,GAAYD,GAAY1R,EAAK2R,UAAWnC,EAAAA,EAAAA,IAAWxP,EAAK2R,SAAU,WAAY,gBAAkB,KAChGuB,EAAYlT,EAAK6R,WAAYoB,EAAAA,EAAAA,GAAyB,IAAjBjT,EAAK6R,WAAoB,KAEpE,IAAIsB,EAMJ,OALIzB,GAAYwB,IAETC,ECtDM,SAAkBC,EAAWC,IAC1C,EAAAC,EAAA,GAAa,EAAG9W,WAChB,IAAIiN,GAAO,EAAA7C,EAAA,GAAOwM,GACdG,GAAgB,EAAA3M,EAAA,GAAOyM,GAC3B,OAAO5J,EAAK+J,UAAYD,EAAcC,SACxC,CDgDQ1G,CAAiBoG,EAAWxB,GAA6B,YACtC,gBAIvBnN,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAhG,SAAA,CACGuU,IACCzU,EAAAA,EAAAA,KAAC0Q,EAAU,CACT/O,MAAM,aACNiP,MAAOlP,EAAKyR,UACZhI,KAAMiI,EACNzC,UAAW0C,EACXxC,UAAWnP,EAAKyR,UAAYzR,EAAKwR,UACjCpC,UAAmD,KAAvCpP,EAAKyR,UAAYzR,EAAKwR,UAAY,KAGjDwB,IACC1U,EAAAA,EAAAA,KAAC0Q,EAAU,CACT/O,MAAK,GAAAuI,OAAK2K,EAAe,UACzBjE,MAAOlP,EAAK4R,WACZnI,KAAMyJ,EACNjE,UAAWkE,EACXhE,UAAWnP,EAAK4R,WAAa5R,EAAKyR,UAClCrC,UAAoD,KAAxCpP,EAAK4R,WAAa5R,EAAKyR,UAAY,OAKzD,wGEvGO,SAASgC,KAA6B,IAAAC,EAC3C,MAAMC,EAAYC,OAAO7Q,eAAe8Q,gBAClC,iBAAE9C,IAAqBgB,EAAAA,GAAAA,KACvBd,GAAaC,EAAAA,GAAAA,GAA2C,QAA9BwC,EAAC3C,aAAgB,EAAhBA,EAAkB+C,mBAAW,IAAAJ,EAAAA,EAAI,KAAM,CACtErC,gBAAiB,CAAC,gBAEd,8BAAE0C,IAAkCC,EAAAA,GAAAA,GAAmC,CAC3E/C,aACA0C,cAGF,IAAK1C,EAAY,OAAO,KAExB,MAAM,SAAEgD,EAAQ,OAAEC,GAAWH,EAA8B,CACzD9N,OAAQgL,aAAU,EAAVA,EAAYhL,OACpBG,UAAW6K,aAAU,EAAVA,EAAY7K,UACvB+N,UAAWlD,aAAU,EAAVA,EAAYkD,YAGzB,MAAO,GAAP3L,OAAUyL,GAAQzL,OAAG0L,EACvB,CCnBA,MAAME,GAAkB1F,SAAS6B,cAAiC,uDCAlE,MAAM6D,GAAkB1F,SAAS6B,cAAiC,yBCAlE,MAAM6D,GAAkB1F,SAAS6B,cAAiC,4CCDlE,MAAM6D,GAAkB1F,SAAS6B,cAAiC,+ECA3D,IAAK8D,GAAmB,SAAnBA,GAAmB,OAAnBA,EAAmB,sCAAnBA,EAAmB,0BAAnBA,EAAmB,YAAnBA,EAAmB,YAAnBA,EAAmB,wBAAnBA,EAAmB,sCAAnBA,CAAmB,MASnBC,GAAkB,SAAlBA,GAAkB,OAAlBA,EAAkB,QAAlBA,EAAkB,MAAlBA,EAAkB,MAAlBA,EAAkB,MAAlBA,EAAkB,QAAlBA,EAAkB,QAAlBA,CAAkB,MASvB,MAAMC,GAAuB,CAClC,CAACD,GAAmBE,IAAKH,GAAoBI,kBAC7C,CAACH,GAAmB/K,GAAI8K,GAAoBK,YAC5C,CAACJ,GAAmBhL,GAAI+K,GAAoBM,KAC5C,CAACL,GAAmBlL,GAAIiL,GAAoBO,KAC5C,CAACN,GAAmBO,IAAKR,GAAoBS,WAC7C,CAACR,GAAmBS,IAAKV,GAAoBW,mBAGlCC,GAAuB,CAClC,CAACZ,GAAoBI,mBAAoBH,GAAmBE,GAC5D,CAACH,GAAoBK,aAAcJ,GAAmB/K,EACtD,CAAC8K,GAAoBM,MAAOL,GAAmBhL,EAC/C,CAAC+K,GAAoBO,MAAON,GAAmBlL,EAC/C,CAACiL,GAAoBS,YAAaR,GAAmBO,GACrD,CAACR,GAAoBW,mBAAoBV,GAAmBS,IAGjDG,GAAa,CAAC,oBAAqB,cAAe,QAElDC,GAAgB,CAC3B,CAAEC,KAAM,iBAAkB/T,MAAOgT,GAAoBK,YAAanI,MAAO,UACzE,CAAE6I,KAAM,gBAAiB/T,MAAOgT,GAAoBM,KAAMpI,MAAO,QACjE,CAAE6I,KAAM,gBAAiB/T,MAAOgT,GAAoBO,KAAMrI,MAAO,QACjE,CAAE6I,KAAM,kBAAmB/T,MAAOgT,GAAoBW,kBAAmBzI,MAAO,iBAChF,CAAE6I,KAAM,sBAAuB/T,MAAOgT,GAAoBS,WAAYvI,MAAO,gBC1C/E,MAAM8I,GAActS,eAAeC,mBAE5B,SAASsS,GAAgB5R,GAAwC,IAAvC,UAAEiQ,GAAmCjQ,EACpE,MAAM,WAAE6R,EAAU,YAAEC,EAAW,8BAAEC,GCO5B,SAAsB/R,GAAwC,IAAvC,UAAEiQ,GAAmCjQ,EACjE,MAAMgS,GAAWC,EAAAA,GAAAA,OACX,EAAEC,EAAC,EAAExL,EAAC,GAAEyL,EAAE,GAAEC,EAAE,EAAEC,EAAI,IAAG,EAAEC,IAAM3L,EAAAA,EAAAA,GAAkBqL,EAASxB,QAC1D+B,EAAQJ,EAAKjZ,OAAOsZ,SAASL,GAAM,GAClCM,EAA4BV,GAAiCzM,EAAAA,WAE9DoN,EAAqBpN,EAAAA,aACxBzC,GACKoN,GAAauB,GAAWlP,SAASO,GAC5B,eAAPiC,QAAsB6N,EAAAA,EAAAA,GAAkB,CACtCT,IACAxL,IACA4L,IACAF,GACEvP,IAAS8N,GAAoBI,kBACzBQ,GAAqBP,YACrBO,GAAqB1O,GAC3BsP,GAAItP,IAAS8N,GAAoBK,YAAc,IAAM,IACrDqB,OAGG,eAAPvN,QAAsB6N,EAAAA,EAAAA,GAAkB,CACtCC,WAAY,SACZC,WAAY,SACZC,aAAc,8BAGlB,CAAC7C,EAAWiC,EAAGxL,EAAG4L,EAAGD,IAGjBR,EAAavM,EAAAA,SACjB,IAEI,CACG2K,EAA+F,KAAnF,CAAEyB,KAAM,iBAAkB/T,MAAO,oBAAqBkL,MAAO,sBACvE4I,GAAcxW,KAAK4H,GACnBoN,GAA4B,gBAAfpN,EAAKlF,MAAoEkF,EAA1C,IAAKA,EAAMgG,MAAO,wBAEjET,OAAO2K,SACT9X,KAAK+X,IAAI,IACNA,EACHC,KAAMP,EAAmBM,EAAKrV,OAC9BuV,gBAAiBjD,OAErB,CAACyC,EAAoBzC,IAqBvB,MAAO,CAAE6B,YAlBWxM,EAAAA,SAClB,IACEuM,EAAWsB,MAAMtQ,IAAS,IAAAuM,EACxB,GAAIqD,EACF,OAAO5P,EAAKlF,QAAU8U,EAGxB,MAAMW,EACqF,QAD1EhE,EACbgD,GAAyCvB,GAAqBuB,UAAyB,IAAAhD,EAAAA,EACxFiE,uBAEH,OAAQpD,GAAamD,IAAgBzC,GAAoBK,aAAyB,IAAVuB,EAEpE1P,EAAKlF,QAAUyV,EADfvQ,EAAKlF,QAAUgT,GAAoBI,iBACT,KAElC,CAACc,EAAYY,EAA4BL,EAAInC,EAAWsC,IAGpCV,aAAYE,gCACpC,CDzEqEuB,CAAc,CAAErD,cAEnF,OACErV,EAAAA,EAAAA,KAAC2Y,GAAAA,GAAM,CACLC,KAAK,SACL,cAAY,oBACZ,aAAW,aACX3Y,UAAU,cACV8C,MAAOmU,EACP2B,YAAa3B,GAAclX,EAAAA,EAAAA,KAAC8Y,GAAAA,GAAI,CAAClW,KAAMsU,EAAYJ,KAAM7W,UAAU,uBAAqB7B,EACxF2a,SAAUhC,QAAc3Y,EAAY,OACpCkR,SAAUkF,IAAA,IAAC,MAAEzR,GAAOyR,EAAA,OAAK2C,EAA8BpU,EAAM,EAC7DiW,MAAO/B,GAGb,CERA,MAAMF,GAActS,eAAeC,mBAE5B,SAASuU,GAAS7T,GAA8D,IAA7D,MAAE7E,EAAK,mBAAE2Y,EAAkB,sBAAEC,GAA8B/T,EACnF,MAAM,EAAE0G,EAAC,GAAE0L,EAAE,EAAEC,IAAM1L,EAAAA,EAAAA,KACfqN,EAAatN,EAAEyB,MAAM,KACrB8H,EAAY5Q,eAAe8Q,eAEjC,OACEtP,EAAAA,EAAAA,MAAA,OACEhG,UAAWsJ,IAAW,gDAAiD,CACrE,6BAA8B9E,eAAeC,qBAC5CxE,SAAA,EAEHF,EAAAA,EAAAA,KAAA,OAAKC,UAAU,WACP,MAAPuX,GAAqB,OAAPA,IACbvR,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAhG,SAAA,EACEF,EAAAA,EAAAA,KAAA,OAAKC,UAAU,8BAA6BC,UAC1CF,EAAAA,EAAAA,KAACgX,GAAgB,CAAC3B,UAAWA,OAE/BrV,EAAAA,EAAAA,KAAA,OAAKC,UAAU,+CAA8CC,UAC3DF,EAAAA,EAAAA,KAACqZ,EAAAA,GAAmB,CAAAnZ,UAClBF,EAAAA,EAAAA,KAACsZ,EAAAA,GAAuB,CACtBV,KAAK,SACLvD,UAAWA,EACXkE,qBAAsBL,EACtBM,kBAAmBN,OAAqB9a,EAAY+a,EACpDM,yBAAuB,YAMjCzZ,EAAAA,EAAAA,KAAA,OAAKC,UAAU,0BAAyBC,SAC9B,MAAPsX,GAAqB,OAAPA,GACbxX,EAAAA,EAAAA,KAAC0Z,GAAAA,EAAM,CACLX,SAAUhC,QAAc3Y,EAAY,OACpCya,YAAY,QACZD,KAAK,SACL3Y,UAAU,mBACV,cAAY,wBACZ,aAAYM,EACZ,cAAa6Y,EAAW7Y,GACxB,iBAAgBkX,EAAEvX,SACnB,UAGC,SAIZ,ufC3CA,MAAMc,WAAiBC,EAAAA,UAGrBC,WAAAA,CAAYU,GACV6I,MAAM7I,GAAMT,GAAA,sBACZG,KAAKQ,QAASV,EAAAA,EAAAA,YAChB,CAEAC,iBAAAA,GACEC,KAAKC,aACP,CAEAC,kBAAAA,GACEF,KAAKC,aACP,CAEAA,WAAAA,GACE,MAAMG,EAAOJ,KAAKM,MAAMF,KAGlBW,EAAsB,EAAdX,EAAKvD,OAGbqE,EAAIC,EAAAA,MAEPC,OAAOhB,EAAKrB,KAAKsC,GAAMA,EAAEC,QACzBK,MAAM,CAAC,EAAGZ,IAEb,IAAI5C,EAAMgD,EAAAA,IAAOf,GAAOiB,GAAWA,EAAEI,QAEnCtD,EADEA,EAAM,EACFgD,EAAAA,IAAOf,GAAOiB,GAAWtE,KAAKoB,IAAIkD,EAAEI,OAAQJ,EAAEI,SAE9C,EAGR,MAAMC,EAAIP,EAAAA,MAEPQ,MAAM,CAhBM,GAgBG,IACfP,OAAO,CAACjD,EAAKgD,EAAAA,IAAOf,GAAOiB,GAAWtE,KAAK6E,IAAIP,EAAEI,WACjDI,OACAwW,QAAQpX,GAIX,IAAIqX,EAFQnX,EAAAA,IAAUnB,KAAKQ,OAAOC,SAASyB,SAAS,QAAS,IAE9CS,UAAU,QAAQvC,KAAKA,GACtCkY,EACGrV,QACAd,OAAO,QACPC,KAAK,SAAS,SAAUf,GACvB,MAAO,aAAeA,EAAEI,MAAQ,EAAI,WAAa,WACnD,IACCW,KAAK,KAAK,SAAUf,GACnB,OAAOH,EAAEG,EAAEC,KACb,IACCc,KAAK,KAAK,SAAUf,GACnB,OAAOK,EAAE3E,KAAKsB,IAAI,EAAGgD,EAAEI,OACzB,IACCW,KAAK,UAAU,SAAUf,GACxB,IAAIJ,EAASlE,KAAK6E,IAAIF,EAAEL,EAAEI,OAASC,EAAE,IAIrC,OAHIL,EAAEI,MAAQ,GAAKJ,EAAEI,MAAQ,KAC3BR,EAASlE,KAAKsB,IAAI4C,EAAQ,KAErBA,CACT,IACCmB,KAAK,QA7CS,GA8CjBkW,EACGC,aACAnW,KAAK,SAAS,SAAUf,GACvB,MAAO,aAAeA,EAAEI,MAAQ,EAAI,WAAa,WACnD,IACCW,KAAK,KAAK,SAAUf,GACnB,OAAOH,EAAEG,EAAEC,KACb,IACCc,KAAK,KAAK,SAAUf,GACnB,OAAOK,EAAE3E,KAAKsB,IAAI,EAAGgD,EAAEI,OACzB,IACCW,KAAK,UAAU,SAAUf,GACxB,IAAIJ,EAASlE,KAAK6E,IAAIF,EAAEL,EAAEI,OAASC,EAAE,IAIrC,OAHIL,EAAEI,MAAQ,GAAKJ,EAAEI,MAAQ,KAC3BR,EAASlE,KAAKsB,IAAI4C,EAAQ,KAErBA,CACT,IACCmB,KAAK,QAhES,GAiEjBkW,EAAKE,OAAOzH,SAEZ/Q,KAAKQ,OAAOC,QAASmC,MAAM7B,MAAQA,EAAQ,KAC3Cf,KAAKQ,OAAOC,QAASmC,MAAM3B,OAASA,MACtC,CAEAsC,MAAAA,GACE,OAAO7E,EAAAA,EAAAA,KAAA,OAAK8E,IAAKxD,KAAKQ,OAAQ7B,UAAU,mBAC1C,EAGF,SAAS8Z,KACP,OACE/Z,EAAAA,EAAAA,KAAA,OAAKC,UAAU,iCAAgCC,UAC7C+F,EAAAA,EAAAA,MAAA,OAAKhG,UAAU,yCAAwCC,SAAA,EACrDF,EAAAA,EAAAA,KAAC8Y,GAAAA,GAAI,CAAClW,KAAK,OAAOP,MAAM,KAAKpC,UAAU,2BACvCD,EAAAA,EAAAA,KAAA,MAAIC,UAAU,yCAAwCC,SAAC,oCACvDF,EAAAA,EAAAA,KAAA,KAAAE,SAAG,4KAIHF,EAAAA,EAAAA,KAAA,KACEqY,KAAK,gFACL5K,OAAO,SACPxN,UAAU,WAAUC,SACrB,mBAMT,CAMA,MAAM8Z,WAAwB/Y,EAAAA,UAAgCC,WAAAA,GAAA,SAAAhD,WAAAiD,GAAA,aACpD,CACN8Y,OAAO,GACR,CAEDpV,MAAAA,GACE,OACE7E,EAAAA,EAAAA,KAAA,OAAKC,UAAU,UAASC,UACtB+F,EAAAA,EAAAA,MAACiU,GAAAA,EAAuB,CAACC,UAAU,QAAQC,YAAa,EAAEla,SAAA,EACxDF,EAAAA,EAAAA,KAACka,GAAAA,EAAqB,CAACG,UAAW/Y,KAAKM,MAAMF,KAAK4Y,MAAM9X,GAAkB,OAAZA,EAAEO,QAAgB7C,UAC9EF,EAAAA,EAAAA,KAACgB,GAAQ,CAACU,KAAMJ,KAAKM,MAAMF,UAE7B1B,EAAAA,EAAAA,KAACka,GAAAA,EAAe,CACdK,QAAQ,EACRta,UAAWsJ,IAAW,6DAA8D,CAClF,SAAU9E,eAAe8Q,iBACxBrV,SAEFuE,eAAe8Q,gBACdvV,EAAAA,EAAAA,KAACwa,EAAW,CAAC9Y,KAAMJ,KAAKM,MAAMF,KAAMO,aAAa,KAEjDjC,EAAAA,EAAAA,KAAC+Z,GAAY,UAMzB,EAaF,MAAMU,WAAmBxZ,EAAAA,UAAgCC,WAAAA,GAAA,SAAAhD,WAAAiD,GAAA,aAG9B,CACvBuZ,OAAQpZ,KAAKqZ,oBACbC,MAAO,IACP9S,UAAW,IACX+S,SAAU,KACVnZ,KAAM,MACP,CAEDL,iBAAAA,GACEC,KAAKqJ,SACLrJ,KAAKwZ,SAAUC,EAAAA,GAAAA,MACfzZ,KAAKwZ,QAAQ5G,QACf,CAEA3D,oBAAAA,GAAuB,IAAAyK,EACT,QAAZA,EAAA1Z,KAAKwZ,eAAO,IAAAE,GAAZA,EAActO,SAChB,CAEA7H,MAAAA,GAAS,IAAApD,EACP,MAAM,KAAEC,GAASJ,KAAKsJ,MAEtB,GAAa,OAATlJ,EAEF,OAAO,KAGT,MAAMuZ,GAAWvZ,EAAKwZ,MAChBxW,EAAmC,QAAjBjD,EAAGgD,sBAAc,IAAAhD,OAAA,EAAdA,EAAgBiD,mBAE3C,OACEuB,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAhG,SAAA,EACEF,EAAAA,EAAAA,KAAA,SACEqC,MAAM,OACN+H,YAAY,IACZC,YAAY,IAEZC,OAAO,IACPrK,UAAU,0BAAyBC,UAEnCF,EAAAA,EAAAA,KAAA,SAAAE,UACE+F,EAAAA,EAAAA,MAAA,MAAA/F,SAAA,EACE+F,EAAAA,EAAAA,MAAA,MAAI/B,MAAOO,eAAe8Q,eAAiB,CAAE4F,YAAa,GAAM,CAAC,EAAEjb,SAAA,CAChEuE,eAAe8Q,iBAEdtP,EAAAA,EAAAA,MAAA,UACEhG,UAAWsJ,IAAW,CACpB,yBAA0B7E,EAC1B,YAAaA,IAEf3B,MAAOzB,KAAKsJ,MAAM8P,OAClBpL,SAAWnC,IACTA,EAAEC,iBACF,MAAMsN,EAA4B,MAAnBvN,EAAEM,OAAO1K,MAAgB,IAAM,IAC9CzB,KAAK0K,SACH,CACE0O,OAAQA,IAEV,KACEpZ,KAAKqJ,QAAQ,KAGjByQ,EAAAA,GAAAA,UAAS,oBAAqBV,EAlE7B,KAkEqD,EAAM,EAC5Dxa,SAAA,EAEFF,EAAAA,EAAAA,KAAA,UAAQ+C,MAAM,IAAG7C,SAAC,aAClBF,EAAAA,EAAAA,KAAA,UAAQ+C,MAAM,IAAG7C,SAAC,eAGrBuE,eAAe8Q,iBAAkBvV,EAAAA,EAAAA,KAAAkG,EAAAA,SAAA,CAAAhG,SAAE,SAEpC+F,EAAAA,EAAAA,MAAA,QAAMhG,UAAU,iBAAgBC,SAAA,CAC7BoB,KAAK+Z,iBAAiB,IAAK,oBAAoB,MAAI/Z,KAAK+Z,iBAAiB,IAAK,iBAAiB,KAAG,IAClG/Z,KAAK+Z,iBAAiB,IAAK,oBAGhCrb,EAAAA,EAAAA,KAAA,MAAImG,MAAM,QAAOjG,UACf+F,EAAAA,EAAAA,MAAA,QAAMhG,UAAU,iBAAgBC,SAAA,CAC7BoB,KAAKga,qBAAqB,IAAK,UAAU,MAAIha,KAAKga,qBAAqB,IAAK,yBAMtFL,IAAWjb,EAAAA,EAAAA,KAACub,GAAe,IAAKja,KAAKsJ,SACpCqQ,IACAjb,EAAAA,EAAAA,KAAA,SACEqC,MAAM,OACN+H,YAAY,IACZC,YAAY,IAEZC,OAAO,IACP,cAAY,yBACZrK,UAAWsJ,IAAW,CACpB,qEAAsE7E,EACtE,+CAAgDA,EAChD,WAAYD,eAAe8Q,iBAC1BrV,UAEHF,EAAAA,EAAAA,KAAA,SAAAE,UACEF,EAAAA,EAAAA,KAAA,MAAIC,UAAU,gFAA+EC,UAC3FF,EAAAA,EAAAA,KAAA,MAAIC,UAAWyE,EAAqB,GAAK,eAAexE,SAAC,0FASvE,CAEAmb,gBAAAA,CAAiBhW,EAAYlB,GAC3B,MAAM,MAAEyW,GAAUtZ,KAAKsJ,MACvB,OACE5K,EAAAA,EAAAA,KAAA,KACEqY,KAAK,IACLpY,UAAWsJ,IAAW,WAAY,CAAE,YAAaqR,IAAUvV,IAC3DmW,QAAUrO,IACRA,EAAEC,iBACF9L,KAAK0K,SACH,CACE4O,MAAOvV,IAET,KACE/D,KAAKqJ,QAAQ,GAEhB,EACDzK,SAEDiE,GAGP,CAEAmX,oBAAAA,CAAqBjW,EAAYlB,GAC/B,MAAM,UAAE2D,GAAcxG,KAAKsJ,MAC3B,OACE5K,EAAAA,EAAAA,KAAA,KACEqY,KAAK,IACLpY,UAAWsJ,IAAW,WAAY,CAAE,YAAazB,IAAczC,IAC/DmW,QAAUrO,IACRA,EAAEC,iBACF9L,KAAK0K,SACH,CACElE,UAAWzC,IAEb,KACE/D,KAAKqJ,QAAQ,GAEhB,EACDzK,SAEDiE,GAGP,CAEA,YAAMwG,GACJ,MAAM,OAAE+P,EAAM,MAAEE,EAAK,UAAE9S,GAAcxG,KAAKsJ,OACpC,EAAEkB,IAAMC,EAAAA,EAAAA,KAEd,IACE,MAAM0P,QAAiBC,MAAM,yBAADxR,OAA0B4B,EAAC,QAAA5B,OAAOwQ,EAAM,OAAAxQ,OAAM0Q,GAAK1Q,OAAGpC,IAC5E6T,QAAaF,EAASE,OAE5Bra,KAAK0K,SAAS,CACZ6O,SAAUc,EAAKd,SACfnZ,KAAMia,EAAKT,MAAQS,EAAOA,EAAKja,MAEnC,CAAE,MAAO,CACX,CAEAiZ,iBAAAA,GACE,OAAKlW,eAAe8Q,gBAI6C,OAA1DqG,EAAAA,GAAAA,UAAiB,oBAtLL,KAsLoD,IAtLpD,GAuLrB,EAGF,SAASL,GAAenW,GAAsC,IAAAyW,EAAA,IAArC,KAAEna,EAAI,SAAEmZ,GAA2BzV,EAC1D,IAAK1D,EAAM,OAAO,KA2BlB,SAASoa,EAAY7N,GACnB,OAAQA,GACN,IAAK,kBACL,IAAK,gBACH,OAAO,EAGX,OAAO,CACT,CAEA,SAAS8N,EAAe9N,GACtB,OAAQA,GACN,IAAK,kBACL,IAAK,gBACL,IAAK,wBACL,IAAK,kBACL,IAAK,eACL,IAAK,0BACL,IAAK,mBACL,IAAK,0BACL,IAAK,aACL,IAAK,uBACL,IAAK,eACL,IAAK,4BACL,IAAK,oBACL,IAAK,eACL,IAAK,+BACL,IAAK,iCACL,IAAK,iCACL,IAAK,iCACL,IAAK,qBACL,IAAK,0BACL,IAAK,sBACL,IAAK,0BACH,OAAO,EAGX,OAAO,CACT,CAEA,MAAMvJ,EAAmC,QAAjBmX,EAAGpX,sBAAc,IAAAoX,OAAA,EAAdA,EAAgBnX,mBACrCsX,EAAYtX,EAAqB,GAAK,eAEtCuX,EAA2C,QAA/Bva,EAAK,mBAAmB,GACpCwa,EArEN,SAAmBxa,EAAgCua,GACjD,IAAIE,EAAc,CAAC,EAqBnB,OApBA5c,OAAO6c,KAAK1a,GAAMmI,SAASwS,IACzBF,EAAOE,GAAO3a,EAAK2a,GAChBhc,KAAI,CAAC0C,EAAOxC,KACX,GAAIub,EAAYO,GAAM,CACpB,IAAIC,EAMJ,OAJEA,EADY,KAAVvZ,EACY,KAEAkH,WAAWlH,EAAMwZ,QAAQ,KAAM,KAExC,CACL3Z,KAAMlB,EAAK,mBAAmBnB,GAC9BwC,MAAOuZ,EAEX,CACA,OAAO,IAAI,IAEZjT,MAAM4S,EAAY,EAAI,EAAE,IAGtBE,CACT,CA8CmBK,CAAU9a,EAAMua,GAC7BQ,GAAmB/X,GAAsBhD,EAAK,iBAAmB,EAAI,EAE3E,OACEuE,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAhG,SAAA,EACEF,EAAAA,EAAAA,KAAA,SACEqC,MAAM,OACN+H,YAAY,IACZC,YAAY,IAEZC,OAAO,IACP,cAAY,yBACZrK,UAAWsJ,IAAW,CACpB,qEAAsE7E,EACtE,+CAAgDA,EAChD,WAAYD,eAAe8Q,iBAC1BrV,UAEHF,EAAAA,EAAAA,KAAA,SAAAE,SACGX,OAAO6c,KAAK1a,GAAMrB,KAAI,CAACgc,EAAKK,KAC3BzW,EAAAA,EAAAA,MAAA,MAEEhG,UAAWsJ,IAAW,CACpB,gFAAiF7E,EACjF,iBAAkBA,GAAsBqX,EAAeM,GACvD,kBAAmB3X,GAAsBqX,EAAeM,GACxD,mBAAoB3X,IAAuBqX,EAAeM,GAC1D,YAA0B,IAAbK,EACb,YAAaA,IAAaD,IACzBvc,SAAA,EAEHF,EAAAA,EAAAA,KAAA,MAAIC,UAAW+b,EAAU9b,SAAEmc,KAC3Brc,EAAAA,EAAAA,KAAA,MAAIC,UAAW+b,EAAW7V,MAAM,SAAQjG,SACrC4b,EAAYO,KAAQrc,EAAAA,EAAAA,KAACga,GAAe,CAACtY,KAAMwa,EAAWG,GAAKnX,cAE7DxD,EAAK2a,GAAKhc,KAAI,CAAC0C,EAAOxC,KACrB,IAAKkE,eAAe8Q,eAAgB,CAClC,GAAImH,IAAaD,GAA6B,IAAVlc,EAClC,OACE0F,EAAAA,EAAAA,MAAA,MAEEE,MAAM,QACNlG,UAAU,mCACV0c,QAASpd,OAAO6c,KAAK1a,GAAMvD,OAAS,EACpCye,QAASlb,EAAK2a,GAAKle,OAAS,EAAE+B,SAAA,EAE9BF,EAAAA,EAAAA,KAAC6c,GAAAA,GAAK,CACJja,KAAK,gBACL3C,UAAU,6DAEZD,EAAAA,EAAAA,KAAC8Y,GAAAA,GAAI,CAAClW,KAAK,OAAOP,MAAM,KAAKpC,UAAU,2BACvCD,EAAAA,EAAAA,KAAA,MAAIC,UAAU,yCAAwCC,SAAC,oCACvDF,EAAAA,EAAAA,KAAA,KAAGC,UAAU,wCAAuCC,SAAC,4KAKrDF,EAAAA,EAAAA,KAAA,KACEqY,KAAK,gFACL5K,OAAO,SACPxN,UAAU,WAAUC,SACrB,iBArBIK,GA2BX,GACEA,EAAQ,IACNmE,GAA8B,oBAAR2X,GACb,oBAARA,GAAqC,kBAARA,GAEhC,OAAO,IAEX,CAEA,OACErc,EAAAA,EAAAA,KAAA,MAAgBmG,MAAM,QAAQlG,UAAW+b,EAAU9b,SAChD6C,GADMxC,EAEJ,MA1DJ8b,UAiEbrc,EAAAA,EAAAA,KAAA,SACEC,UAAU,0BACVoC,MAAM,OACN+H,YAAY,IACZC,YAAY,IAEZC,OAAO,IAAGpK,UAEVF,EAAAA,EAAAA,KAAA,SAAAE,UACEF,EAAAA,EAAAA,KAAA,MAAAE,UACE+F,EAAAA,EAAAA,MAAA,MAAIE,MAAM,QAAOjG,SAAA,CAAC,uBAAqB2a,aAMnD,CAEA,4BCzhBA,MAAMiC,GAAuC,uCACvCC,GAAqC,yBCwBvCtY,eAAe8Q,gBAAkB9Q,eAAeC,qBAClD,gCAA0EsY,MAAK5X,IAA4B,IAA3B,mBAAE6X,GAAoB7X,EACpG6X,GAAoB,IAIxB,MAAMC,GAAkB1I,IAAmE,IAAlE,sBAAE2E,GAA2D3E,EACpF,MAAM2I,EAAoB/M,SAASgN,uBAAuB,cACpDC,EAAwBld,MAAMC,KAAK+c,GAAmB3P,QAAQ8P,GAAOA,aAAcC,cAEzF,OAAIF,EAAsBlf,OAAS,GAE/B6B,EAAAA,EAAAA,KAAAkG,EAAAA,SAAA,CAAAhG,SACGmd,EAAsBhd,KAAI,CAACmd,EAA+BC,KACzD,MAAMC,EAAYD,EAAiB,EACnC,OAAOE,EAAAA,cACL3d,EAAAA,EAAAA,KAACiZ,GAAS,CACR1Y,MAAOmd,EACPxE,mBAAkC,IAAdwE,EACpBvE,sBAAuBA,IAEzBqE,EACD,MAKF,IAAI,EAGPI,GAAa,CACjB,CACEC,SAAU,uBACVC,cP1DW,WACb,MAAMC,EAAuB5I,KAC7B,IAAK4I,EACH,OACE/d,EAAAA,EAAAA,KAAA,KAAGqY,KAAMvC,cAAe,EAAfA,GAAiBuC,KAAMpY,UAAW6V,cAAe,EAAfA,GAAiB7V,UAAUC,SAAC,iBAK3E,MAAM8d,EAAS,IAAIC,IAAIF,EAAsBzI,OAAO8B,SAAS8G,QAG7D,OAFAF,EAAOG,aAAaC,OAAOC,GAAAA,GAAWC,YAGpCte,EAAAA,EAAAA,KAAA,KAAGqY,KAAI,GAAAnO,OAAK8T,EAAOrI,UAAQzL,OAAG8T,EAAOpI,QAAU3V,UAAU,yBAAwBC,SAAC,gBAItF,GO2CE,CACE2d,SAAU,uBACVC,cV7DW,WACb,MAAMzI,EAAYC,OAAO7Q,eAAe8Q,eAClCwI,EAAuB5I,KAC7B,IAAK4I,EACH,OACE/d,EAAAA,EAAAA,KAAA,KAAGqY,KAAMvC,cAAe,EAAfA,GAAiBuC,KAAMpY,UAAW6V,cAAe,EAAfA,GAAiB7V,UAAUC,SAAC,kBAK3E,MAAM8d,EAAS,IAAIC,IAAIF,EAAsBzI,OAAO8B,SAAS8G,QAG7D,OAFAF,EAAOG,aAAaI,IAAIF,GAAAA,GAAWC,UAAWE,EAAAA,GAAYC,cAGxDze,EAAAA,EAAAA,KAAA,KACEqY,KACEhD,EAAS,GAAAnL,OACF8T,EAAOrI,UAAQzL,OAAG8T,EAAOpI,QAAM,kFAGxC3V,UAAU,WACV,cAAY,0BAAyBC,SACtC,iBAIL,GUqCE,CACE2d,SAAU,qBACVC,cTjEW,WACb,MAAMC,EAAuB5I,KAC7B,IAAK4I,EACH,OACE/d,EAAAA,EAAAA,KAAA,KAAGqY,KAAMvC,cAAe,EAAfA,GAAiBuC,KAAMpY,UAAW6V,cAAe,EAAfA,GAAiB7V,UAAUC,SAAC,eAK3E,MAAM8d,EAAS,IAAIC,IAAIF,EAAsBzI,OAAO8B,SAAS8G,QAG7D,OAFAF,EAAOG,aAAaI,IAAIF,GAAAA,GAAWC,UAAWE,EAAAA,GAAYE,UAGxD1e,EAAAA,EAAAA,KAAA,KAAGqY,KAAI,GAAAnO,OAAK8T,EAAOrI,UAAQzL,OAAG8T,EAAOpI,QAAU3V,UAAU,WAAUC,SAAC,cAIxE,GSkDE,CACE2d,SAAU,wBACVC,cRrEW,WACb,MAAMC,EAAuB5I,KAC7B,IAAK4I,EACH,OACE/d,EAAAA,EAAAA,KAAA,KAAGqY,KAAMvC,cAAe,EAAfA,GAAiBuC,KAAMpY,UAAW6V,cAAe,EAAfA,GAAiB7V,UAAUC,SAAC,kBAK3E,MAAM8d,EAAS,IAAIC,IAAIF,EAAsBzI,OAAO8B,SAAS8G,QAG7D,OAFAF,EAAOG,aAAaI,IAAIF,GAAAA,GAAWC,UAAWE,EAAAA,GAAYG,eAGxD3e,EAAAA,EAAAA,KAAA,KAAGqY,KAAI,GAAAnO,OAAK8T,EAAOrI,UAAQzL,OAAG8T,EAAOpI,QAAU3V,UAAU,WAAUC,SAAC,iBAIxE,GQsDE,CACE2d,SAAU,4BACVC,cCnEW,SAA4B1Y,GAAsC,IAArC,MAAE7E,GAAiC6E,EAC7E,MAAM,EAAE0G,IAAMC,EAAAA,EAAAA,KACR6S,EAAY9S,EAAEyB,MAAM,KAAKhN,GACzBse,GAASC,EAAAA,GAAAA,MACTC,EAAYF,EAAOG,SAAS,SAE3BC,IAAyBte,EAAAA,EAAAA,GAAe,IAC1Cue,GAAAA,EACHte,iBAAkBme,IAEdI,EAAkBF,aAAqB,EAArBA,EAAuBE,gBAE/C,OACElZ,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAhG,SAAA,EACEF,EAAAA,EAAAA,KAAA,QACEwb,QAAUrO,IAAM,IAAAiS,EAAAC,EACH,QAAXD,GAAAC,EAAA/J,QAAOgK,YAAI,IAAAF,GAAXA,EAAAtb,KAAAub,EAAc,QAAS,QAAS,CAAEE,eAAgB,sBAC9CpS,EAAEqS,SAAWrS,EAAEsS,UACnBtS,EAAEC,iBACFyR,EAAOa,OAAM,EACbxf,SACH,uBAGDF,EAAAA,EAAAA,KAAC2f,GAAAA,GAAM,CAAC/U,MAAOiU,EAAQ,aAAW,oBAAoB5e,UAAU,QAAOC,SACpEif,GACCnf,EAAAA,EAAAA,KAACmf,EAAe,CAACxX,OAAQiX,KAEzB5e,EAAAA,EAAAA,KAAA,OAAKC,UAAU,wCAAuCC,UACpDF,EAAAA,EAAAA,KAACQ,EAAAA,EAAO,UAMpB,GDkCE,CACEqd,SAAU,uBACVC,cEvEW,SAAwB1Y,GAAkC,IAAjC,MAAE7E,GAA6B6E,EACrE,MAAM,EAAE0G,IAAMC,EAAAA,EAAAA,KACR6S,EAAY9S,EAAEyB,MAAM,KAAKhN,GACzBse,GAASC,EAAAA,GAAAA,MACTC,EAAYF,EAAOG,SAAS,SAE3BY,IAAqBjf,EAAAA,EAAAA,GAAe,IACtCkf,GAAAA,EACHjf,iBAAkBme,IAEde,EAAcF,aAAiB,EAAjBA,EAAmBE,YAEvC,OACE7Z,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAAhG,SAAA,EACEF,EAAAA,EAAAA,KAAA,QACEwb,QAAUrO,IAAM,IAAAiS,EAAAC,EACH,QAAXD,GAAAC,EAAA/J,QAAOgK,YAAI,IAAAF,GAAXA,EAAAtb,KAAAub,EAAc,QAAS,QAAS,CAAEE,eAAgB,iBAC9CpS,EAAEqS,SAAWrS,EAAEsS,UACnBtS,EAAEC,iBACFyR,EAAOa,OAAM,EACbxf,SACH,kBAGDF,EAAAA,EAAAA,KAAC2f,GAAAA,GAAM,CAAC/U,MAAOiU,EAAQ,aAAW,eAAe5e,UAAU,YAAWC,SACnE4f,GACC9f,EAAAA,EAAAA,KAAC8f,EAAW,CAACnY,OAAQiX,KAErB5e,EAAAA,EAAAA,KAAA,OAAKC,UAAU,wCAAuCC,UACpDF,EAAAA,EAAAA,KAACQ,EAAAA,EAAO,UAMpB,IFwDMuf,GAAoBA,MACxBC,EAAAA,GAAAA,KACA,MAAMC,EAAU7P,SAASgC,eAAe8N,EAAAA,IAClCtY,EAAc0N,OAAO6K,kBACrBlZ,EAAQxC,eAAeG,aAAesC,EAAAA,GAAMC,KAAOD,EAAAA,GAAME,MAE/D,GAAI6Y,GAAWrY,EAAa,CAC1B,MAAM,EAAE6P,EAAIhT,eAAe2b,gBAA+BrU,EAAAA,EAAAA,KAC1D,OAAO4R,EAAAA,cACL3d,EAAAA,EAAAA,KAACqgB,EAAAA,GAA0B,CACzBtX,OAAQ,IACHnB,MACA0Y,EAAAA,GAAAA,GAAyB1Y,EAAa6P,GACzC/O,2BAA4BC,EAAAA,GAA2B4X,UACvD1N,OAAQjL,EAAYiL,OAAOxS,KAAK8T,IAAK,IAAAqM,EAAA,MAAM,IACtCrM,EACH0B,UACEpR,eAAe8Q,gBAAkBkL,EAAAA,GAAiB/Y,SAAwB,QAAhB8Y,EAACrM,EAAM0B,iBAAS,IAAA2K,EAAAA,EAAI,IAC1ErM,EAAM0B,UACN,KACP,IACD5O,SAEFyZ,cAAeT,IAEjBA,EAEJ,CACA,OAAO,IAAI,EACZ,IAEIU,GAAa,SAAbA,GAAa,OAAbA,EAAa,0BAAbA,EAAa,YAAbA,EAAa,YAAbA,EAAa,kBAAbA,CAAa,EAAbA,IAAa,IAOlB,SAASC,KACP,MAAM,GAAEpJ,EAAE,EAAE5Q,IAAMmF,EAAAA,EAAAA,KAElB,MAAW,MAAPyL,EACKmJ,GAAcpW,KAEZ,OAAPiN,EACKmJ,GAAcE,QAEnBja,EACK+Z,GAAcG,KAGhBH,GAAcI,WACvB,CAqBA,MAAMC,GAA2BA,KAC/B,MAAM,sBAAE7H,GDxKH,WACL,MAAM/B,GAAWC,EAAAA,GAAAA,OACX,EAAEI,EAAC,GAAED,IAAOzL,EAAAA,EAAAA,GAAkBqL,EAASxB,QACvCqL,EAAmBvW,EAAAA,QAAa,IAC/ByO,EAAuB+H,GAA4BxW,EAAAA,UAAe,GAiEzE,OA/DAA,EAAAA,WAAgB,KACd,MAAMyW,EAAsB/Q,SAASgN,uBAAuBL,IACtDqE,EAAsBhR,SAASgN,uBAAuBN,IACtDuE,EAAkB,IAAIC,gBAqD5B,OAnDIL,EAAiBlf,UACfof,EAAoBhjB,OAAS,GAAG+iB,GAAyB,GAE7DxF,MAAMtE,EAASzB,SAAWyB,EAASxB,OAAQ,CAAE2L,OAAQF,EAAgBE,SAClEvE,MAAMvB,GAAaA,EAAStX,SAC5B6Y,MAAM7Y,IACL,MAAMqd,GAAa,IAAIC,WAAYC,gBAAgBvd,EAAM,aAGzD,GAAIgd,EAAoBhjB,OAAS,EAAG,CAClC,MAAMwjB,EAA0BxhB,MAAMC,KAAK+gB,GACrCS,EAA6BzhB,MAAMC,KACvCohB,EAAWpE,uBAAuBL,MAGhC6E,aAA0B,EAA1BA,EAA4BzjB,UAAWwjB,EAAwBxjB,OACjEwjB,EAAwB9X,SAAQ,CAACgY,EAASthB,KACxCshB,EAAQC,OAAS,IAAMZ,GAAyB,GAChDW,EAAQE,IAAMH,EAA2BrhB,GAAOwhB,GAAG,IAGrDb,GAAyB,EAE7B,CAGA,MAAMc,EAAwC7hB,MAAMC,KAAKghB,GACnDa,EAA2C9hB,MAAMC,KACrDohB,EAAWpE,uBAAuBN,MAGhCmF,aAAwC,EAAxCA,EAA0C9jB,UAAW6jB,EAAsC7jB,QAC7F6jB,EAAsCnY,SAAQ,CAACgY,EAASthB,KACtDshB,EAAQ7f,UAAYigB,EAAyC1hB,GAAOyB,SAAS,IAKjF,MAAMkgB,EAAkCV,EAAWpP,eAnD7B,8BAoDlB8P,SAAAA,EAAiCC,QAAQC,uBAC3C3d,eAAe4d,eAAiBH,EAAgCC,QAAQC,qBAC1E,IAEDE,OAAOC,IACNrB,GAAyB,GACR,eAAbqB,EAAI3f,MACN4f,OAAOC,iBAAiBF,EAC1B,KAGNtB,EAAiBlf,SAAU,EACpB,KACLsf,EAAgBqB,OAAO,CACxB,GAGA,CAACjL,EAAGD,IAEA,CAAE2B,wBACX,CCkGoCwJ,GAC5BC,EAAgBhC,KAChBiC,EAAkBD,IAAkBjC,GAAcpW,KAClDuY,EAAqBF,IAAkBjC,GAAcE,QACrDkC,EAAYzN,OAAO6K,kBAIzB,OAFA6C,EAAAA,EAAAA,MAGE/c,EAAAA,EAAAA,MAACoT,EAAAA,GAAmB,CAAAnZ,SAAA,CACjB6iB,GAAaF,GAAmBC,GAC/B9iB,EAAAA,EAAAA,KAACijB,EAAAA,SAAQ,CAACC,SAAU,KAAKhjB,UACvBF,EAAAA,EAAAA,KAACkd,GAAe,CAAC/D,sBAAuBA,MAExC,KACH4J,IAAcD,IAAuBD,IACpC7iB,EAAAA,EAAAA,KAACijB,EAAAA,SAAQ,CAACC,SAAU,KAAKhjB,UACvBF,EAAAA,EAAAA,KAAC+f,GAAiB,QAGF,GAI1BoD,EAAAA,EAAAA,IAAM,KACJ,MAAMC,EAAehT,SAASgC,eAAe,cAC7C,GAAIgR,GAAgB9N,OAAc,MAAG,CACtB+N,EAAAA,WAA0BD,GAClCve,QAAO7E,EAAAA,EAAAA,KAACya,GAAU,IACzB,CAEA,MAAM6I,EAAgBlT,SAASgC,eAAe,mBAC9C,GAAIkR,EAAe,CACJD,EAAAA,WAA0BC,GAClCze,QACH7E,EAAAA,EAAAA,KAAC6I,EAAAA,GAAa,CAAA3I,UACZF,EAAAA,EAAAA,KAACe,EAAW,MAGlB,CAEA,MAAMwiB,EAAOnT,SAASgC,eAAe,eACrC,GAAImR,EAAM,CACKF,EAAAA,WAA0BE,GAClC1e,QAAO7E,EAAAA,EAAAA,KAACgG,EAAiB,IAChC,CAEA,MAAMwd,EAAmBpT,SAASgC,eAAe,cAC3CqR,EAAkBrT,SAASgC,eAAeX,GAUhD,GARIhN,eAAeif,WACjBpc,EAAAA,GAAM4M,OAAOzP,eAAeif,WAG1BpO,OAAO6K,oBAAsB7K,OAAO6K,kBAAkBwD,OACxDrO,OAAO6K,mBAAoByD,EAAAA,EAAAA,MAGzBJ,EAAkB,KAAAK,EACQ,QAA5BA,EAAIvO,OAAO6K,yBAAiB,IAAA0D,GAAxBA,EAA0BC,aAC5BC,EAAAA,EAAAA,IAAezO,OAAO6K,kBAAkB2D,WAAYxO,OAAO6K,mBAGhDkD,EAAAA,WAA0BG,GAElC3e,QACH7E,EAAAA,EAAAA,KAAC6I,EAAAA,GAAa,CAAA3I,UACZF,EAAAA,EAAAA,KAACghB,GAAwB,MAG/B,CAEA,GAAIyC,EAAiB,CACnB,MAAMO,EA7FV,WACE,MAAMpB,EAAgBhC,KAEtB,GAAI,CAACD,GAAcI,YAAaJ,GAAcG,MAAMpZ,SAASkb,GAC3D,OACE5iB,EAAAA,EAAAA,KAACijB,EAAAA,SAAQ,CAACC,SAAU,KAAKhjB,UACvBF,EAAAA,EAAAA,KAACwT,GAAuB,MAK9B,MAAMzK,EAASuM,OAAO6K,kBACtB,OAAIpX,GACK/I,EAAAA,EAAAA,KAAC2T,GAAqB,CAAC5K,OAAQA,IAGjC,IACT,CA4E+Bkb,GAC3B,GAAID,EAAoB,CACTX,EAAAA,WAA0BI,GAClC5e,OAAOmf,EACd,CACF,CAIA,GA3KApG,GAAW/T,SAAQqa,IAAiC,IAAhC,SAAErG,EAAQ,cAAEC,GAAeoG,EAC7C,MAAMC,EAAe/T,SAASgN,uBAAuBS,GAC5B1d,MAAMC,KAAK+jB,GAAc3W,QAAQ8P,GAAOA,aAAcC,cAE9D1T,SAAQ,CAACua,EAAa7jB,KACxB8iB,EAAAA,WAA0Be,GAClCvf,QACH7E,EAAAA,EAAAA,KAAC6I,EAAAA,GAAa,CAAA3I,UACZF,EAAAA,EAAAA,KAAC8d,EAAa,CAACvd,MAAOA,MAEzB,GACD,IAgKA6P,SAASgC,eAAe,QAAUkD,OAA2B,mBAAG,CAClE,MAAM+O,EAAQjU,SAASgC,eAAe,OACzBiR,EAAAA,WAA0BgB,GAClCxf,QAAO7E,EAAAA,EAAAA,KAACuK,EAAI,IACnB,KAGF,MAAM+Z,GAAgClU,SAASgN,uBAAuB,4BAC1Cjd,MAAMC,KAAKkkB,IACnBza,SAAS0a,IAC3BA,EAAmBC,QAAWrX,IAC5BA,EAAEC,iBACF,MAAMqX,EAAsBF,EAAmBG,uBAE/CD,SAAAA,EAAqBE,iBAAiB,YAAY9a,SAAQ,CAAC+a,EAAQrkB,EAAO2I,KACpE0b,EAAO1S,UAAU2S,SAAS,YAC5BD,EAAO1S,UAAUG,OAAO,WAG1BuS,EAAO1S,UAAUG,OAAO,UAEpB9R,IAAU2I,EAAK/K,OAAS,GAC1BymB,EAAO1S,UAAUC,IAAI,UACvB,IAGFoS,EAAmBrS,UAAUC,IAAI,UACjCmD,OAAOgK,MAAQhK,OAAOgK,KAAK,QAAS,QAAS,CAAEC,eAAgB,kBAAmB,CACnF,gIGxRI,SAASe,EACdwE,GAKA,IADArN,EAACvZ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG6J,EAAAA,GAAUpF,EAEd,MAAM,YAAEoiB,GAAgB3U,SAAS4U,MAC3B,UAAEC,EAAS,YAAEC,EAAW,UAAErP,GAAciP,EAAajS,OAAO,GAC5DsS,EAAgBJ,EAAc,GACpC,IAAI1iB,EAAQ,IACR+iB,EAAW,EACXC,EAAY,EACZC,EAAmB,EACvB,MAAMC,EACJT,EAAapc,6BAA8B8c,EAAAA,EAAAA,IAAyBV,EAAapc,4BAEnF,OAAQ+O,GACN,KAAK1P,EAAAA,GAAU0d,GACbH,EAAmB,EACnBF,EAAW,GACPH,GAAaC,GAAeH,EAAc,QAC5CM,EAAY,GAEd,MACF,KAAKtd,EAAAA,GAAU2d,GACbJ,EAAmB,EACnB,MACF,KAAKvd,EAAAA,GAAU4d,GACbL,EAAmB,EACfL,GAAaC,GAAeH,GAAe,OAC7CK,EAAW,GAEb,MACF,KAAKrd,EAAAA,GAAU6d,GACbN,EAAmB,EACnBF,EAAW,EACXC,EAAYN,GAAe,KAAO,EAAI,EACtC,MACF,KAAKhd,EAAAA,GAAU8d,IACbxjB,EAAQ,KACRgjB,EAAY,EACZ,MACF,KAAKtd,EAAAA,GAAU+d,IACf,KAAK/d,EAAAA,GAAUge,IACb1jB,EAAQ,KACR,MACF,KAAK0F,EAAAA,GAAUgD,EACb1I,EAAQ,KACR,MACF,KAAK0F,EAAAA,GAAUie,GACf,KAAKje,EAAAA,GAAUke,GACb5jB,EAAQ,KACR,MACF,KAAK0F,EAAAA,GAAUpF,EACbN,EAAQ,KACR,MACF,KAAK0F,EAAAA,GAAUme,EACf,KAAKne,EAAAA,GAAU+E,EACbzK,EAAQ,IAIZ,OAAQoV,GACN,KAAK1P,EAAAA,GAAU0d,GACf,KAAK1d,EAAAA,GAAU2d,GACf,KAAK3d,EAAAA,GAAU4d,GACf,KAAK5d,EAAAA,GAAU6d,GACb,MAAMO,EAAc,CAClBb,mBACAc,mBAAoBhB,EAAW,EAAIC,EACnCgB,eAAgBnB,EAChBoB,aAAcrB,GAEhB5iB,GAAQkkB,EAAAA,EAAAA,IAAuB,IAC1BJ,EACHK,SAAUrB,EACVsB,cAAe5Q,IACd6Q,qBAuBP,OAlBInB,IAAsBljB,EAAQ,MAG9B8iB,GAAiB9iB,IACnBA,EAAQhE,KAAKsB,IAAI,IAAKwlB,GAClB1N,IAAM1P,EAAAA,GAAUpF,IAClByiB,EAAW,EACXC,EAAY,EACZhjB,EAAQ,OAKRyiB,EAAanB,MAAQ4B,KACvBH,EAAWN,EAAaM,SACxBC,EAAYP,EAAaO,WAGpB,CACLhjB,QACA+iB,WACAC,YAEJ,CAEO,SAASrF,IAA2B,IAAAtN,EAAAiU,EACzC,MAAM,WAAEC,GC5GH,WAAkF,IAA3D,iBAAEC,EAAmB,IAAG,WAAEC,GAAa,GAAa5oB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACpF,MAAO0a,EAAMmO,GAAWrc,EAAAA,SAAe,CACrCkc,WAAYtR,OAAOsR,WACnBI,YAAa1R,OAAO0R,cAqBtB,OAlBAtc,EAAAA,WAAgB,KACd,IAAKoc,EAAY,OAEjB,MAAMG,EAAeC,KAAS,KAC5BH,EAAQ,CACNH,WAAYtR,OAAOsR,WACnBI,YAAa1R,OAAO0R,aACpB,GACDH,GAIH,OAFAvR,OAAOjF,iBAAiB,SAAU4W,GAE3B,KACLA,EAAaE,SACb7R,OAAO7E,oBAAoB,SAAUwW,EAAa,CACnD,GACA,CAACJ,EAAkBC,IAEflO,CACT,CDmFyBwO,IACjB,iBAAE3U,IAAqBgB,EAAAA,EAAAA,MACvB4T,EAAsB3c,EAAAA,SAAc,SAAA4c,EAAA,OAAyC,QAAzCA,EAAM7U,aAAgB,EAAhBA,EAAkBI,SAAS3G,MAAM,UAAE,IAAAob,EAAAA,EAAI,IAAI,GAAE,CAAC7U,IACxFE,GAAaC,EAAAA,EAAAA,IAAcyU,EAAqB,CAAEtU,gBAAiB,CAAC,WACpE5G,GAAQyG,EAAAA,EAAAA,IAAiC,QAApBF,EAACC,aAAU,EAAVA,EAAYxG,eAAO,IAAAuG,EAAAA,EAAI,KAAM,CAAEK,gBAAiB,CAAC,SAAU,YAAa,gBAC9FwU,EAAS9U,SAAsB,QAANkU,EAAhBlU,EAAkBkR,YAAI,IAAAgD,OAAA,EAAtBA,EAAwBthB,GAEvCqF,EAAAA,WAAgB,KACd,MAAM8c,EAAYD,EAAsC,KAA7B9U,aAAgB,EAAhBA,EAAkB+U,SACvC1f,EAAYqE,aAAK,EAALA,EAAOrE,UACzB,GAAI2K,GAAoB3K,GAAa0f,EAAU,CAC7C,MAAM,MAAEnlB,EAAK,SAAE+iB,EAAQ,UAAEC,GAAc/E,EAAyB7N,EAAiBgV,WAAY3f,GACvF4f,EAAcC,KAAKC,MAAMD,KAAKE,UAAUL,IAC9CE,EAAYI,cAAcC,OAAO3C,SAAWA,EAC5CsC,EAAYM,kBAAkBD,OAAO3C,SAAWA,EAChDsC,EAAYI,cAAcC,OAAO1C,UAAYA,EAC7CqC,EAAYM,kBAAkBD,OAAO1C,UAAYA,EACjD5S,EAAiB/G,iBAAiB,CAAErJ,QAAOmlB,SAAUE,GACvD,IAGC,CAACvb,aAAK,EAALA,EAAO8Y,UAAW9Y,aAAK,EAALA,EAAO+Y,YAAa/Y,aAAK,EAALA,EAAOrE,UAAWyf,EAAQX,GACtE,iFEjHO,SAAS/e,EAAoBzC,GAWT,IAXU,MACnC/C,EAAQ,IAAG,OACXE,EAAS,IAAG,OACZoF,EAAM,UACNG,EAAS,aACTE,EAAY,2BACZU,EAA6BC,EAAAA,GAA2Bsf,QAAO,eAC/DC,EAAc,MACdjhB,EAAK,OACLkhB,EAASC,IAA4B,YACrC3f,GAAc,GACSrD,EACvB,MAAO,CACLijB,OAAQC,EAAAA,GAAW,QACnBjmB,QACAE,SACA6iB,SAAU,EACVC,UAAW,EACXkD,YAAY,EACZC,UAAU,EACV9f,6BACAwf,iBACAjhB,QACAkhB,SACAtV,OAAQ,CACN,CACExQ,MAAO,EACP4iB,WAAW,EACXC,aAAa,EACbrP,UAAW,KACXtT,SACAuF,YACAhC,MAAO2iB,EAAAA,GAAUC,OACjB/gB,OAAQA,EACRghB,WAAY,EACZhc,WAAYC,EAAAA,GAAWC,MACvBpE,cACAmgB,SAAS,EACT3U,MAAO,CACL,CACE1R,SACAsmB,SAAU7gB,MAMtB,CAEO,SAASogB,IACd,IACE,OAAOT,KAAKC,OAAMkB,EAAAA,EAAAA,IAAiB,gBACrC,CAAE,MACA,MACF,CACF,qGC5EO,MAAMC,EAAkB,uCAAsC,IAEhEC,EAAS,SAATA,GAAS,OAATA,EAAS,8BAATA,EAAS,+BAATA,EAAS,4BAATA,EAAS,yBAATA,CAAS,EAATA,GAAS,IAOd,MAAMC,EAAgB,CACpB,CAACD,EAAUE,oBAAqB,CAAEC,WAAY,EAAGjlB,MAAO,CAAE7B,MAAO,IAAKsM,UAAW,MACjF,CAACqa,EAAUI,iBAAkB,CAAED,WAAY,EAAGjlB,MAAO,CAAE7B,MAAO,IAAKsM,UAAW,MAC9E,CAACqa,EAAUK,eAAgB,CAAEF,WAAY,EAAGjlB,MAAO,CAAE7B,MAAO,IAAKsM,UAAW,KAC5E,CAACqa,EAAUM,WAAY,CAAEH,WAAY,EAAGjlB,MAAO,CAAE7B,MAAO,IAAKsM,UAAW,OAGpE4a,EAAyBC,EAAAA,OAA8BA,EAAAA,GAAqBC,iBAK3E,SAAS1O,IACd,IAAI2O,EA2BJ,MAAO,CAAExV,OAzBT,WACE,IAC8B,IAAAyV,EAA5B,GAAIJ,EAC0B,QAA5BI,EAAArU,OAAOsU,6BAAqB,IAAAD,GAA5BA,EAA8BjgB,MAAK,KAAM,IAAAmgB,EAAAC,EACvC,IAAI/gB,EAAuC,QAAjC8gB,EAAGvU,OAA6B,4BAAC,IAAAuU,EAAAA,EAAI,CAAC,EAChDH,EAA8B,QAA1BI,EAAGxU,OAAOmU,wBAAgB,IAAAK,OAAA,EAAvBA,EAAyBC,IAAIC,IAAIjB,EAAiBhgB,EAAO,GAGtE,CAAE,MAAOoE,GACP8c,QAAQ/O,MAAM/N,EAChB,CACF,EAciBT,QAZjB,WACE,IAC8B,IAAAwd,EAA5B,GAAIX,EAC0B,QAA5BW,EAAA5U,OAAOsU,6BAAqB,IAAAM,GAA5BA,EAA8BxgB,MAAK,KAAM,IAAAygB,EACnC,QAAJA,EAAAT,SAAI,IAAAS,GAAJA,EAAMzd,SAAS,GAGrB,CAAE,MAAOS,GACP8c,QAAQ/O,MAAM/N,EAChB,CACF,EAGF,CAKO,SAASid,IAA6C,IAAtBC,EAAensB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAWvD,OAVAwM,EAAAA,iBAAsB,KACpB,MAAMgf,EAAO3O,IAIb,OAFA2O,EAAKxV,SAEE,IAAMwV,EAAKhd,SAAS,GAG1B2d,GAEId,CACT,CAqBO,SAAS1M,EAAKzX,GAA+C,IAA9C,KAAExC,EAAI,SAAE2M,EAAW,KAAM3N,GAAmBwD,EAChE,MAAMklB,EAAUtB,EAAUpmB,GACpB2nB,EAAWtB,EAAcqB,GACzBE,EAAgB,GAAHtgB,OAAMogB,EAAO,KAAApgB,OAAI7L,KAAKoB,IAAIpB,KAAKsB,IAAI4P,EAAU,GAAIgb,EAASpB,aAE7E,OAAKI,GAEEvpB,EAAAA,EAAAA,KAAA,UAAS4B,EAAOyD,GAAImlB,EAAetmB,MAAO,IAAKtC,EAAMsC,SAAUqmB,EAASrmB,SAF3C,IAGtC,mDClGO,SAAS0f,IAMd,GALAtO,OAAO6K,kBAAkBoI,YAAa,EAClC9jB,eAAe8Q,iBACjBD,OAAO6K,kBAAkBoI,WAAajT,OAAO6K,kBAAkBqI,WAAapd,EAAAA,GAAMqf,YAGhFhmB,eAAeimB,GAAI,CACrB,MAAMC,EAAOlmB,eAAekmB,KAC5BC,EAAAA,GAAAA,sBAAgCtV,OAAO6K,kBAAmB1b,eAAeimB,GAAIC,EAAO,CAAEA,aAASvsB,EACjG,CAEA,OAAOkX,OAAO6K,iBAChB,uDCdO,IAAK9B,EAAU,SAAVA,GAAU,OAAVA,EAAU,cAAVA,EAAU,eAAVA,CAAU,MAKVwM,EAAW,SAAXA,GAAW,OAAXA,EAAW,UAAXA,EAAW,cAAXA,CAAW,MAKXC,EAAc,SAAdA,GAAc,OAAdA,EAAc,QAAdA,EAAc,QAAdA,EAAc,UAAdA,CAAc,oFC6BnB,SAASC,EAAO3lB,GAON,IAPO,MACtB4lB,EAAQ,IAAG,QACXC,EAAU,EAAC,eACXC,GAAiB,EAAK,eACtBC,EAAc,iBACdC,EAAgB,SAChBlrB,GACakF,EACb,MAAOimB,EAASC,GAAc5gB,EAAAA,UAAe,IACtC6gB,EAAaC,GAAkB9gB,EAAAA,UAAe,GAmBrD,OAjBAA,EAAAA,WAAgB,KACd,MAAM+gB,EAAoBnW,OAAOoW,YAAW,IAAMJ,GAAW,IAAON,GAEpE,IAAIW,EAQJ,OAPIV,EAAU,IACZU,EAAgBrW,OAAOoW,YAAW,KAEhC,GADAF,GAAe,GACXN,EAAgB,MAAM,IAAIU,KAAO,GACpCX,IAGE,KACLY,aAAaJ,GACbI,aAAaF,EAAc,CAC5B,GACA,CAACX,EAAOC,EAASC,IAEfG,EAEDE,GACKvrB,EAAAA,EAAAA,KAAAkG,EAAAA,SAAA,CAAAhG,SAAGkrB,KAGLprB,EAAAA,EAAAA,KAAAkG,EAAAA,SAAA,CAAAhG,SAAGA,KANWF,EAAAA,EAAAA,KAAAkG,EAAAA,SAAA,CAAAhG,SAAGirB,GAO1B,sECtEO,IAAKW,EAAoB,SAApBA,GAAoB,OAApBA,EAAAA,EAAoB,qBAApBA,EAAAA,EAAoB,uBAApBA,EAAAA,EAAoB,2BAApBA,EAAAA,EAAoB,6BAApBA,CAAoB,MAYzB,MAAMC,EAAsBrhB,EAAAA,cAGhC,CACDgV,KAAMA,OACNsM,KAAMA,SAGD,SAASC,IACd,OAAOvhB,EAAAA,WAAiBqhB,EAC1B,+LCdO,SAAS1S,EAAoBzX,GAClC,MAAOsqB,EAAQC,GAAazhB,EAAAA,UAAe,IACpC0hB,EAAcC,GAAmB3hB,EAAAA,SAAyC,OAC3E,SAAE4hB,EAAQ,YAAEC,IAAgBC,EAAAA,EAAAA,GAAkB,CAAEC,UAAWL,IAE3DM,EAAUhiB,EAAAA,OAAa,CAC3BgV,KAAM,SAACmC,GAAqE,IAA/CxN,EAAqCnW,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACpEquB,GAAY,KAAMI,EAAAA,EAAAA,GAAkBrX,OAAOsX,kBAC3CP,EAAgB,CAAExK,UAASxN,YAC3B8X,GAAU,EACZ,EACAH,KAAMA,IAAMG,GAAU,KAGlBU,EAAgBniB,EAAAA,SAAc,KAAM,IAAAoiB,EACxC,MAAM,SAAEvd,EAAWuc,EAAAA,GAAqBiB,YAAoC,QAAxBD,EAAGV,aAAY,EAAZA,EAAc/X,eAAO,IAAAyY,EAAAA,EAAI,CAAC,EACjF,MAAO,CACL,4CAA6C,CAC3ChB,EAAAA,GAAqBkB,QACrBlB,EAAAA,GAAqBmB,UACrBvlB,SAAS6H,GACX,kEAAmE,CACjEuc,EAAAA,GAAqBmB,SACrBnB,EAAAA,GAAqBoB,aACrBxlB,SAAS6H,GACX,6CAA8C,CAC5Cuc,EAAAA,GAAqBiB,WACrBjB,EAAAA,GAAqBoB,aACrBxlB,SAAS6H,GACX,iEAAkE,CAChEuc,EAAAA,GAAqBkB,QACrBlB,EAAAA,GAAqBiB,YACrBrlB,SAAS6H,GACZ,GACA,CAAC6c,aAAY,EAAZA,EAAc/X,UAEZ8Y,EAAmBziB,EAAAA,SACvB,IAAO0hB,SAAAA,EAAc/X,QAAQ+Y,OAAS1iB,EAAAA,SAAiBwP,EAAAA,GACvD,CAACkS,aAAY,EAAZA,EAAc/X,QAAQ+Y,SAGzB,OACEnnB,EAAAA,EAAAA,MAAC8lB,EAAAA,GAAoBsB,SAAQ,CAACtqB,MAAO2pB,EAAQ3qB,QAAQ7B,SAAA,CAClD0B,EAAM1B,SACNgsB,IACClsB,EAAAA,EAAAA,KAACmtB,EAAgB,CAAAjtB,UACfF,EAAAA,EAAAA,KAACka,EAAAA,GAAc,CACboT,KAAK,QACL,aAAW,eACXrtB,UAAWsJ,IACTsjB,EACA,4KAEFU,eAAa,EAEbjiB,KAAM4gB,EACNsB,QAASd,EAAQ3qB,QAAQiqB,KAEzByB,OAAO,EACPC,UAAU,EAEVC,WAAW,EAEXC,cAAc,EACdC,uBAAuB,EACvBC,iBAAiB,EACjBC,iBAAiB,EAEjB7pB,MAAO,CACL7B,MAAOiqB,EAASjqB,MAChBE,OAAQ+pB,EAAS/pB,OACjByrB,UAAW,aAAF9jB,OAAeoiB,EAAS2B,KAAI,QAAA/jB,OAAOoiB,EAAS9c,IAAG,cAAAtF,OAAaoiB,EAASxmB,MAAK,KACnFooB,WAAY,QACZhuB,SAEDksB,aAAY,EAAZA,EAAcvK,cAM3B,gBCzFO,SAASphB,EACd0tB,GACA,IAAA/oB,EAAAgpB,EACA,MAAMC,EAAmE,QAAxDjpB,EAA+B,QAA/BgpB,EAAGD,EAAiBE,mBAAW,IAAAD,EAAAA,EAAID,EAAiBvrB,YAAI,IAAAwC,EAAAA,EAAI,YACvEkpB,EAA2B1sB,IAC/B,MAAMwqB,GAAeH,EAAAA,EAAAA,MACrB,OAAOjsB,EAAAA,EAAAA,KAACmuB,EAAgB,IAAMvsB,EAAa2sB,oBAAqBnC,GAAgB,EAKlF,OAFAkC,EAAwBD,YAAc,2BAAHnkB,OAA8BmkB,EAAW,KAErEC,CACT,mHCUO,SAASE,EAAYppB,GAMmB,IANlB,UAC3BnF,EAAS,UACTwuB,EAAY,QAAO,QACnBC,EAAO,YACPC,EAAW,SACXzuB,GAC2CkF,EAC3C,MAAMgnB,GAAeH,EAAAA,EAAAA,MAiBrB,OAfAvhB,EAAAA,WAAgB,KACd,IAAIkkB,EAOJ,OANID,IACFC,EAAYtZ,OAAOoW,YAAW,KAC5BU,EAAaJ,MAAM,GAClB2C,IAGE,KACDC,GACF/C,aAAa+C,EACf,CACD,GACA,CAACxC,EAAcuC,KAGhB1oB,EAAAA,EAAAA,MAAA,OACEhG,UAAWsJ,IACTtJ,EACA,0JACAC,SAAA,EAEFF,EAAAA,EAAAA,KAAA,OAAKC,UAAU,uBAAsBC,SAAEA,KACvCF,EAAAA,EAAAA,KAAA,OAAAE,SACGwuB,QAAAA,GACC1uB,EAAAA,EAAAA,KAAC0Z,EAAAA,EAAM,CAACmV,GAAI3U,EAAAA,EAAuBjT,MAAM,OAAM/G,SAC5CuuB,QAMb,gFC9DO,SAASzL,IACd,MAAM5L,GAAWC,EAAAA,EAAAA,MAEjB3M,EAAAA,WAAgB,KAGd,MAAM,EAAE9D,IAAMmF,EAAAA,EAAAA,GAAkBqL,EAASxB,SACpChP,GAAK0O,OAAOwZ,oBACfxZ,OAAO8B,SAAS2X,QAClB,GACC,CAAC3X,EAASxB,QACf,qGCVA,MAAMoZ,EAAU,EAET,SAASC,EAAoBC,GAAwB,IAAAC,EAAAC,EAC1D,MAAMC,EAAmBjf,SAASgC,eAAe8c,GAE3CI,EAAMD,aAAgB,EAAhBA,EAAkBE,wBAE9B,MAAO,CACLltB,MAAOhE,KAAKsB,KAAe,QAAXwvB,EAACG,aAAG,EAAHA,EAAKjtB,aAAK,IAAA8sB,EAAAA,EAAI,GAAKH,EAAS,GAC7CzsB,OAAQlE,KAAKsB,KAAgB,QAAZyvB,EAACE,aAAG,EAAHA,EAAK/sB,cAAM,IAAA6sB,EAAAA,EAAI,GAAKJ,EAAS,GAEnD,CAEO,SAASQ,EAAe7L,EAAWuL,GACxC,MAAMO,EAAmBR,EAAoBC,GAE7C,GAAIvL,EAAM,CACR,MAAM/b,EAAcrI,OAAOwU,OAAO,CAAC,EAAG2b,qBAAqBC,UAAW,CACpExH,OAAQuH,qBAAqBvH,OAC7B9lB,MAAOotB,EAAiBptB,MACxBE,OAAQktB,EAAiBltB,OACzBgmB,YAAY,EACZqH,QAAS,CAAC,SAAU,WAAY,UAAW,WAE7C,IAAK,IAAIhpB,EAAI,EAAGA,EAAIgB,EAAYiL,OAAO1U,OAAQyI,IACxCgB,EAAYiL,OAAOjM,GAAG+F,aACzB/E,EAAYiL,OAAOjM,GAAG+F,WAAa,SAIvC,OAAO/E,CACT,CAEA,MAAO,CACLioB,WAAW,EACXxtB,MAAOotB,EAAiBptB,MACxBE,OAAQktB,EAAiBltB,OACzB6iB,SAAU,EACVC,UAAW,EACXkD,YAAY,EACZuH,oBAAoB,EACpB7oB,MAAOyoB,qBAAqBzoB,MAC5BkhB,OAAQuH,qBAAqBvH,OAC7ByH,QAAS,CAAC,SAAU,WAAY,UAAW,SAC3CvH,OAAQqH,qBAAqBrH,OAC7BxV,OAAQ6c,qBAAqB5oB,QAAQzG,KAAI,SAAUsH,EAAgBpH,GACjE,MAAO,CACLuH,UAAW4nB,qBAAqBK,QAAQxvB,GACxCsV,UAAW6Z,qBAAqBM,OAAOzvB,GACvCuF,MAAO4pB,qBAAqBO,SAASnqB,OAAS,SAC9C6B,OAAQA,EACRgF,YAAYujB,EAAAA,EAAAA,IAAuBvoB,GACnCsd,UAAWyK,qBAAqBO,SAAShL,UACzCC,YAAawK,qBAAqBO,SAAS/K,YAC3CiL,eAAgBT,qBAAqBO,SAASE,eAC9C1nB,aAAa,EACbwL,MAAO2W,EAAAA,GAAAA,SAAmB8E,qBAAqBO,UAEnD,IAEJ,CAEO,MAAMlM,EAAiBA,CAACqM,EAA2BT,KACxD,MAAMU,EAAc1I,KAAKE,UAAU8H,GAAWjoB,SAAS,YAEvD,IAAK,IAAId,EAAI,EAAGA,EAAIwpB,EAAOjyB,OAAQyI,IAAK,CACtC,MAAMuF,EAAQikB,EAAOxpB,GAEG,OAApBuF,EAAMrE,WAA0C,OAApBqE,EAAMrE,WAA0C,OAApBqE,EAAMrE,WAA0C,QAApBqE,EAAMrE,YACvFqE,EAAMmkB,eAAe,uBACxBnkB,EAAMokB,kBAAwC,QAApBpkB,EAAMrE,UAAsB,IAAM,KAGzDqE,EAAMmkB,eAAe,wBACxBnkB,EAAMqkB,mBAAyC,QAApBrkB,EAAMrE,UAAsB,IAAM,KAG1DqE,EAAMmkB,eAAe,4BACxBnkB,EAAMskB,uBAA6C,QAApBtkB,EAAMrE,UAAsB,EAAI,IAG5DqE,EAAMmkB,eAAe,8BACxBnkB,EAAMukB,yBAA2B,IAIhCvkB,EAAMmkB,eAAe,iBACxBnkB,EAAMkkB,YAAcA,GAGtBlkB,EAAMwkB,OAAShB,EAAUhM,KAAKte,GAE9BiC,EAAAA,EAAM4M,OAAc/H,EACtB,gJCpFF,SAASykB,IAYP,OAXAA,EAAWrxB,OAAOwU,OAASxU,OAAOwU,OAAO9D,OAAS,SAAUxC,GAC1D,IAAK,IAAI7G,EAAI,EAAGA,EAAI1I,UAAUC,OAAQyI,IAAK,CACzC,IAAI8T,EAASxc,UAAU0I,GACvB,IAAK,IAAIyV,KAAO3B,EACVnb,OAAOsxB,UAAUP,eAAexsB,KAAK4W,EAAQ2B,KAC/C5O,EAAO4O,GAAO3B,EAAO2B,GAG3B,CACA,OAAO5O,CACT,EACOmjB,EAASE,MAAMxvB,KAAMpD,UAC9B,CACA,SAAS6yB,EAA8BrW,EAAQsW,GAC7C,GAAc,MAAVtW,EAAgB,MAAO,CAAC,EAC5B,IAEI2B,EAAKzV,EAFL6G,EAAS,CAAC,EACVwjB,EAAa1xB,OAAO6c,KAAK1B,GAE7B,IAAK9T,EAAI,EAAGA,EAAIqqB,EAAW9yB,OAAQyI,IACjCyV,EAAM4U,EAAWrqB,GACboqB,EAASE,QAAQ7U,IAAQ,IAC7B5O,EAAO4O,GAAO3B,EAAO2B,IAEvB,OAAO5O,CACT,CAEA,MAAM0jB,EAAgB,MAChBC,EAAiB,oCACvB,SAASC,EAAcC,GACrB,OAAiB,MAAVA,GAA4C,iBAAnBA,EAAOhH,OACzC,CA0CA,SAASiH,EAAmBC,GAI1B,YAHa,IAATA,IACFA,EAAO,IAEF,IAAIC,gBAAgC,iBAATD,GAAqBrxB,MAAMuxB,QAAQF,IAASA,aAAgBC,gBAAkBD,EAAOjyB,OAAO6c,KAAKoV,GAAMG,QAAO,CAACC,EAAMvV,KACrJ,IAAItZ,EAAQyuB,EAAKnV,GACjB,OAAOuV,EAAK1nB,OAAO/J,MAAMuxB,QAAQ3uB,GAASA,EAAM1C,KAAI6K,GAAK,CAACmR,EAAKnR,KAAM,CAAC,CAACmR,EAAKtZ,IAAQ,GACnF,IACL,CAoBA,IAAI8uB,EAA6B,KAcjC,MAAMC,EAAwB,IAAIC,IAAI,CAAC,oCAAqC,sBAAuB,eACnG,SAASC,EAAeC,GACtB,OAAe,MAAXA,GAAoBH,EAAsBI,IAAID,GAI3CA,EAFE,IAGX,CACA,SAASE,EAAsB1kB,EAAQ2kB,GACrC,IAAIC,EACAC,EACAL,EACAM,EACAvN,EACJ,GA7FOqM,EADcC,EA8FH7jB,IA7F+C,SAAjC6jB,EAAOhH,QAAQkI,cA6FpB,CAIzB,IAAI9uB,EAAO+J,EAAOglB,aAAa,UAC/BH,EAAS5uB,GAAO,QAAcA,EAAM0uB,GAAY,KAChDC,EAAS5kB,EAAOglB,aAAa,WAAatB,EAC1Cc,EAAUD,EAAevkB,EAAOglB,aAAa,aAAerB,EAC5DmB,EAAW,IAAIG,SAASjlB,EAC1B,MAAO,GA1GT,SAAyB6jB,GACvB,OAAOD,EAAcC,IAA4C,WAAjCA,EAAOhH,QAAQkI,aACjD,CAwGaG,CAAgBllB,IApG7B,SAAwB6jB,GACtB,OAAOD,EAAcC,IAA4C,UAAjCA,EAAOhH,QAAQkI,aACjD,CAkGwCI,CAAenlB,KAA4B,WAAhBA,EAAOxF,MAAqC,UAAhBwF,EAAOxF,MAAmB,CACrH,IAAI4qB,EAAOplB,EAAOolB,KAClB,GAAY,MAARA,EACF,MAAM,IAAIjH,MAAM,sEAMlB,IAAIloB,EAAO+J,EAAOglB,aAAa,eAAiBI,EAAKJ,aAAa,UAUlE,GATAH,EAAS5uB,GAAO,QAAcA,EAAM0uB,GAAY,KAChDC,EAAS5kB,EAAOglB,aAAa,eAAiBI,EAAKJ,aAAa,WAAatB,EAC7Ec,EAAUD,EAAevkB,EAAOglB,aAAa,iBAAmBT,EAAea,EAAKJ,aAAa,aAAerB,EAEhHmB,EAAW,IAAIG,SAASG,EAAMplB,IAlDlC,WACE,GAAmC,OAA/BokB,EACF,IACE,IAAIa,SAAStiB,SAAS0iB,cAAc,QAEpC,GACAjB,GAA6B,CAC/B,CAAE,MAAO1kB,GACP0kB,GAA6B,CAC/B,CAEF,OAAOA,CACT,CA2CSkB,GAAgC,CACnC,IAAI,KACFnwB,EAAI,KACJqF,EAAI,MACJlF,GACE0K,EACJ,GAAa,UAATxF,EAAkB,CACpB,IAAI+qB,EAASpwB,EAAOA,EAAO,IAAM,GACjC2vB,EAAS9uB,OAAOuvB,EAAS,IAAK,KAC9BT,EAAS9uB,OAAOuvB,EAAS,IAAK,IAChC,MAAWpwB,GACT2vB,EAAS9uB,OAAOb,EAAMG,EAE1B,CACF,KAAO,IAAIsuB,EAAc5jB,GACvB,MAAM,IAAIme,MAAM,sFAEhByG,EAASlB,EACTmB,EAAS,KACTL,EAAUb,EACVpM,EAAOvX,CACT,CA/IF,IAAuB6jB,EAqJrB,OAJIiB,GAAwB,eAAZN,IACdjN,EAAOuN,EACPA,OAAWn0B,GAEN,CACLk0B,SACAD,OAAQA,EAAOG,cACfP,UACAM,WACAvN,OAEJ,CAEA,MAAMiO,EAAY,CAAC,UAAW,WAAY,iBAAkB,UAAW,QAAS,SAAU,KAAM,sBAC9FC,EAAa,CAAC,eAAgB,gBAAiB,YAAa,MAAO,QAAS,KAAM,YAClFC,EAAa,CAAC,iBAAkB,UAAW,QAAS,SAAU,SAAU,WAAY,SAAU,WAAY,sBAC5G,SAASC,EAAoBC,EAAQC,GACnC,OAAO,QAAa,CAClBlB,SAAkB,MAARkB,OAAe,EAASA,EAAKlB,SACvCmB,OAAQ3C,EAAS,CAAC,EAAW,MAAR0C,OAAe,EAASA,EAAKC,OAAQ,CACxDC,oBAAoB,IAEtBC,SAAS,QAAqB,CAC5Bne,OAAgB,MAARge,OAAe,EAASA,EAAKhe,SAEvCoe,eAAwB,MAARJ,OAAe,EAASA,EAAKI,gBAAkBC,IAC/DN,SACAO,mBAAoB,OACnBC,YACL,CAeA,SAASF,IACP,IAAItU,EACJ,IAAIzU,EAA8B,OAArByU,EAAU/J,aAAkB,EAAS+J,EAAQyU,4BAM1D,OALIlpB,GAASA,EAAMmpB,SACjBnpB,EAAQgmB,EAAS,CAAC,EAAGhmB,EAAO,CAC1BmpB,OAAQC,EAAkBppB,EAAMmpB,WAG7BnpB,CACT,CACA,SAASopB,EAAkBD,GACzB,IAAKA,EAAQ,OAAO,KACpB,IAAIE,EAAU10B,OAAO00B,QAAQF,GACzBG,EAAa,CAAC,EAClB,IAAK,IAAK7X,EAAK8X,KAAQF,EAGrB,GAAIE,GAAsB,uBAAfA,EAAIC,OACbF,EAAW7X,GAAO,IAAI,KAAyB8X,EAAIE,OAAQF,EAAIG,WAAYH,EAAIzyB,MAAuB,IAAjByyB,EAAII,eACpF,GAAIJ,GAAsB,UAAfA,EAAIC,OAAoB,CAExC,GAAID,EAAIK,UAAW,CACjB,IAAIC,EAAmBnf,OAAO6e,EAAIK,WAClC,GAAgC,mBAArBC,EACT,IAEE,IAAIvZ,EAAQ,IAAIuZ,EAAiBN,EAAIO,SAGrCxZ,EAAMyZ,MAAQ,GACdT,EAAW7X,GAAOnB,CACpB,CAAE,MAAO/N,GAET,CAEJ,CACA,GAAuB,MAAnB+mB,EAAW7X,GAAc,CAC3B,IAAInB,EAAQ,IAAI0Q,MAAMuI,EAAIO,SAG1BxZ,EAAMyZ,MAAQ,GACdT,EAAW7X,GAAOnB,CACpB,CACF,MACEgZ,EAAW7X,GAAO8X,EAGtB,OAAOD,CACT,CA0BA,MACMU,GAAsB,iBAAsB,gBAIlD,SAAS/rB,EAAczD,GACrB,IAAI,SACFgtB,EAAQ,SACRlyB,EAAQ,OACRqzB,EAAM,OACNje,GACElQ,EACAyvB,EAAa,WACS,MAAtBA,EAAW9yB,UACb8yB,EAAW9yB,SAAU,QAAqB,CACxCuT,SACAwf,UAAU,KAGd,IAAIrB,EAAUoB,EAAW9yB,SACpB6I,EAAOmqB,GAAgB,WAAe,CACzCzC,OAAQmB,EAAQnB,OAChBlb,SAAUqc,EAAQrc,YAEhB,mBACF4d,GACEzB,GAAU,CAAC,EACXvnB,EAAW,eAAkBipB,IAC/BD,GAAsBJ,EAAsBA,GAAoB,IAAMG,EAAaE,KAAaF,EAAaE,EAAS,GACrH,CAACF,EAAcC,IAElB,OADA,mBAAsB,IAAMvB,EAAQyB,OAAOlpB,IAAW,CAACynB,EAASznB,IAC5C,gBAAoB,KAAQ,CAC9ComB,SAAUA,EACVlyB,SAAUA,EACVkX,SAAUxM,EAAMwM,SAChB+d,eAAgBvqB,EAAM0nB,OACtB8C,UAAW3B,GAEf,CA0EA,MAAM4B,EAA8B,oBAAX/f,aAAqD,IAApBA,OAAOlF,eAAqE,IAAlCkF,OAAOlF,SAAS0iB,cAC9GwC,EAAqB,gCAIrBC,EAAoB,cAAiB,SAAqBC,EAAO1wB,GACrE,IAeI2wB,GAfA,QACAja,EAAO,SACPka,EAAQ,eACRpd,EAAc,QACdiE,EAAO,MACP3R,EAAK,OACL6C,EAAM,GACNmB,EAAE,mBACF+mB,GACEH,EACJI,EAAO7E,EAA8ByE,EAAOvC,IAC1C,SACFb,GACE,aAAiB,MAGjByD,GAAa,EACjB,GAAkB,iBAAPjnB,GAAmB0mB,EAAmBQ,KAAKlnB,KAEpD6mB,EAAe7mB,EAEXymB,GACF,IACE,IAAIU,EAAa,IAAI9X,IAAI3I,OAAO8B,SAASiB,MACrC2d,EAAYpnB,EAAGqnB,WAAW,MAAQ,IAAIhY,IAAI8X,EAAWG,SAAWtnB,GAAM,IAAIqP,IAAIrP,GAC9EunB,GAAO,QAAcH,EAAUrgB,SAAUyc,GACzC4D,EAAU9X,SAAW6X,EAAW7X,QAAkB,MAARiY,EAE5CvnB,EAAKunB,EAAOH,EAAUpgB,OAASogB,EAAUI,KAEzCP,GAAa,CAEjB,CAAE,MAAO1oB,GAGT,CAIJ,IAAIkL,GAAO,QAAQzJ,EAAI,CACrB8mB,aAEEW,EAyMN,SAA6BznB,EAAI0nB,GAC/B,IAAI,OACF7oB,EACA8O,QAASga,EAAW,MACpB3rB,EAAK,mBACL+qB,EAAkB,SAClBD,QACY,IAAVY,EAAmB,CAAC,EAAIA,EACxBE,GAAW,UACXpf,GAAW,UACX+e,GAAO,QAAgBvnB,EAAI,CAC7B8mB,aAEF,OAAO,eAAkBe,IACvB,GArnBJ,SAAgCA,EAAOhpB,GACrC,QAAwB,IAAjBgpB,EAAMC,QAEZjpB,GAAqB,UAAXA,GANb,SAAyBgpB,GACvB,SAAUA,EAAMhX,SAAWgX,EAAME,QAAUF,EAAMjX,SAAWiX,EAAMG,SACpE,CAMGC,CAAgBJ,GAEnB,CA8mBQK,CAAuBL,EAAOhpB,GAAS,CACzCgpB,EAAMrpB,iBAGN,IAAImP,OAA0Bne,IAAhBm4B,EAA4BA,GAAc,QAAWnf,MAAc,QAAW+e,GAC5FK,EAAS5nB,EAAI,CACX2N,UACA3R,QACA+qB,qBACAD,YAEJ,IACC,CAACte,EAAUof,EAAUL,EAAMI,EAAa3rB,EAAO6C,EAAQmB,EAAI+mB,EAAoBD,GACpF,CApOwBqB,CAAoBnoB,EAAI,CAC5C2N,UACA3R,QACA6C,SACAkoB,qBACAD,aAQF,OAGE,gBAAoB,IAAK9E,EAAS,CAAC,EAAGgF,EAAM,CAC1Cvd,KAAMod,GAAgBpd,EACtBmD,QAASqa,GAAcvd,EAAiBkD,EAX5C,SAAqBib,GACfjb,GAASA,EAAQib,GAChBA,EAAMO,kBACTX,EAAgBI,EAEpB,EAOI3xB,IAAKA,EACL2I,OAAQA,IAGd,IAOA,MAAMwpB,EAAuB,cAAiB,SAAwBC,EAAOpyB,GAC3E,IACI,eAAgBqyB,EAAkB,OAAM,cACxCC,GAAgB,EAChBn3B,UAAWo3B,EAAgB,GAAE,IAC7BC,GAAM,EACNpzB,MAAOqzB,EAAS,GAChB3oB,EAAE,SACF1O,GACEg3B,EACJtB,EAAO7E,EAA8BmG,EAAOhE,GAC1CiD,GAAO,QAAgBvnB,EAAI,CAC7B8mB,SAAUE,EAAKF,WAEbte,GAAW,UACXogB,EAAc,aAAiB,OAC/B,UACFpC,GACE,aAAiB,MACjBqC,EAAarC,EAAUsC,eAAiBtC,EAAUsC,eAAevB,GAAMxgB,SAAWwgB,EAAKxgB,SACvFgiB,EAAmBvgB,EAASzB,SAC5BiiB,EAAuBJ,GAAeA,EAAYK,YAAcL,EAAYK,WAAWzgB,SAAWogB,EAAYK,WAAWzgB,SAASzB,SAAW,KAC5IyhB,IACHO,EAAmBA,EAAiBnF,cACpCoF,EAAuBA,EAAuBA,EAAqBpF,cAAgB,KACnFiF,EAAaA,EAAWjF,eAE1B,IAGIvyB,EAHA63B,EAAWH,IAAqBF,IAAeH,GAAOK,EAAiB1B,WAAWwB,IAA8D,MAA/CE,EAAiBI,OAAON,EAAWt5B,QACpI65B,EAAoC,MAAxBJ,IAAiCA,IAAyBH,IAAeH,GAAOM,EAAqB3B,WAAWwB,IAAkE,MAAnDG,EAAqBG,OAAON,EAAWt5B,SAClL85B,EAAcH,EAAWX,OAAkB/4B,EAG7C6B,EAD2B,mBAAlBo3B,EACGA,EAAc,CACxBS,WACAE,cAQU,CAACX,EAAeS,EAAW,SAAW,KAAME,EAAY,UAAY,MAAMxqB,OAAO2K,SAAS/J,KAAK,KAE7G,IAAIlK,EAA6B,mBAAdqzB,EAA2BA,EAAU,CACtDO,WACAE,cACGT,EACL,OAAoB,gBAAoBhC,EAAM3E,EAAS,CAAC,EAAGgF,EAAM,CAC/D,eAAgBqC,EAChBh4B,UAAWA,EACX6E,IAAKA,EACLZ,MAAOA,EACP0K,GAAIA,IACkB,mBAAb1O,EAA0BA,EAAS,CAC5C43B,WACAE,cACG93B,EACP,IAUA,MAAMg4B,EAAoB,cAAiB,CAACt2B,EAAOkD,KACjD,IAAIqzB,EAASC,IACb,OAAoB,gBAAoBC,EAAUzH,EAAS,CAAC,EAAGhvB,EAAO,CACpEu2B,OAAQA,EACRrzB,IAAKA,IACJ,IAKL,MAAMuzB,EAAwB,cAAiB,CAACC,EAAOC,KACrD,IAAI,eACAjgB,EAAc,QACdiE,EAAO,MACP3R,EAAK,OACLynB,EAASlB,EAAa,OACtBmB,EAAM,SACNnjB,EAAQ,OACRgpB,EAAM,SACNzC,EAAQ,mBACRC,GACE2C,EACJ12B,EAAQmvB,EAA8BuH,EAAOnF,GAC3CqF,EAAsC,QAAzBnG,EAAOG,cAA0B,MAAQ,OACtDiG,EA4MN,SAAuBnG,EAAQoG,GAC7B,IAAI,SACFhD,QACa,IAAXgD,EAAoB,CAAC,EAAIA,GACzB,SACFtG,GACE,aAAiB,MACjBuG,EAAe,aAAiB,MACnCA,IAAqI,SAAiB,GACvJ,IAAKC,GAASD,EAAaE,QAAQxvB,OAAO,GAGtC8sB,EAAOvF,EAAS,CAAC,GAAG,QAAgB0B,GAAkB,IAAK,CAC7DoD,cAOEte,GAAW,UACf,GAAc,MAAVkb,IAGF6D,EAAKvgB,OAASwB,EAASxB,OAInBgjB,EAAME,MAAMv4B,OAAO,CACrB,IAAIw4B,EAAS,IAAItH,gBAAgB0E,EAAKvgB,QACtCmjB,EAAO3a,OAAO,SACd+X,EAAKvgB,OAASmjB,EAAOhrB,WAAa,IAAMgrB,EAAOhrB,WAAa,EAC9D,CAEIukB,GAAqB,MAAXA,IAAmBsG,EAAME,MAAMv4B,QAC7C41B,EAAKvgB,OAASugB,EAAKvgB,OAASugB,EAAKvgB,OAAO2G,QAAQ,MAAO,WAAa,UAMrD,MAAb6V,IACF+D,EAAKxgB,SAA6B,MAAlBwgB,EAAKxgB,SAAmByc,GAAW,QAAU,CAACA,EAAU+D,EAAKxgB,YAE/E,OAAO,QAAWwgB,EACpB,CAzPmB6C,CAAc1G,EAAQ,CACrCoD,aAgBF,OAAoB,gBAAoB,OAAQ9E,EAAS,CACvD9rB,IAAKyzB,EACLlG,OAAQmG,EACRlG,OAAQmG,EACRtpB,SAAUmJ,EAAiBnJ,EAlBTsnB,IAElB,GADAtnB,GAAYA,EAASsnB,GACjBA,EAAMO,iBAAkB,OAC5BP,EAAMrpB,iBACN,IAAI6rB,EAAYxC,EAAMyC,YAAYD,UAC9BE,GAA6B,MAAbF,OAAoB,EAASA,EAAUxG,aAAa,gBAAkBJ,EAC1F8F,EAAOc,GAAaxC,EAAM2C,cAAe,CACvC/G,OAAQ8G,EACR5c,UACA3R,QACA8qB,WACAC,sBACA,GAOD/zB,GAAO,IASZ,SAASy3B,EAAkBC,GACzB,IAAI,OACFC,EAAM,WACNC,GACEF,EAKJ,OA0RF,SAA8BG,GAC5B,IAAI,OACFF,EAAM,WACNC,QACa,IAAXC,EAAoB,CAAC,EAAIA,GACzB,OACFC,GACEC,EAAqBC,EAAeC,uBACpC,sBACFC,EAAqB,mBACrBnE,GACEoE,EAAmBC,EAAoBH,uBACvC,SACFzH,GACE,aAAiB,MACjBhb,GAAW,UACXyhB,GAAU,UACVhB,GAAa,UAEjB,aAAgB,KACdviB,OAAOme,QAAQwG,kBAAoB,SAC5B,KACL3kB,OAAOme,QAAQwG,kBAAoB,MAAM,IAE1C,IA4FL,SAAqBC,EAAU7lB,GAC7B,IAAI,QACF8lB,GACE9lB,GAAW,CAAC,EAChB,aAAgB,KACd,IAAIif,EAAkB,MAAX6G,EAAkB,CAC3BA,gBACE/7B,EAEJ,OADAkX,OAAOjF,iBAAiB,WAAY6pB,EAAU5G,GACvC,KACLhe,OAAO7E,oBAAoB,WAAYypB,EAAU5G,EAAK,CACvD,GACA,CAAC4G,EAAUC,GAChB,CAvGEC,CAAY,eAAkB,KAC5B,GAAyB,SAArBvC,EAAWjtB,MAAkB,CAC/B,IAAIyR,GAAOkd,EAASA,EAAOniB,EAAUyhB,GAAW,OAASzhB,EAASiF,IAClEge,EAAqBhe,GAAO/G,OAAOglB,OACrC,CACAC,eAAeC,QAAQhB,GAAciB,EAAgC9S,KAAKE,UAAUwS,IACpF/kB,OAAOme,QAAQwG,kBAAoB,MAAM,GACxC,CAACT,EAAYD,EAAQ1B,EAAWjtB,MAAOwM,EAAUyhB,KAE5B,oBAAbzoB,WAET,mBAAsB,KACpB,IACE,IAAIsqB,EAAmBH,eAAeI,QAAQnB,GAAciB,GACxDC,IACFL,EAAuB1S,KAAKC,MAAM8S,GAEtC,CAAE,MAAOvtB,GAET,IACC,CAACqsB,IAGJ,mBAAsB,KACpB,IAAIoB,EAAwBrB,GAAuB,MAAbnH,EAAmB,CAAChb,EAAUyhB,IAAYU,EAChF3I,EAAS,CAAC,EAAGxZ,EAAU,CACrBzB,UAAU,QAAcyB,EAASzB,SAAUyc,IAAahb,EAASzB,WAC/DkjB,GAAWU,EACXsB,EAAqC,MAAVnB,OAAiB,EAASA,EAAOoB,wBAAwBT,GAAsB,IAAM/kB,OAAOglB,SAASM,GACpI,MAAO,IAAMC,GAA4BA,GAA0B,GAClE,CAACnB,EAAQtH,EAAUmH,IAGtB,mBAAsB,KAEpB,IAA8B,IAA1BO,EAIJ,GAAqC,iBAA1BA,EAAX,CAKA,GAAI1iB,EAASgf,KAAM,CACjB,IAAI9Y,EAAKlN,SAASgC,eAAe2oB,mBAAmB3jB,EAASgf,KAAK/sB,MAAM,KACxE,GAAIiU,EAEF,YADAA,EAAG0d,gBAGP,EAE2B,IAAvBrF,GAIJrgB,OAAO2lB,SAAS,EAAG,EAdnB,MAFE3lB,OAAO2lB,SAAS,EAAGnB,EAgBA,GACpB,CAAC1iB,EAAU0iB,EAAuBnE,IAEzC,CAnXEuF,CAAqB,CACnB3B,SACAC,eAEK,IACT,CAQA,IAAII,EAOAI,EAQJ,SAASL,EAAqBwB,GAC5B,IAAIC,EAAM,aAAiB,MAE3B,OADCA,IAA6G,SAAiB,GACxHA,CACT,CACA,SAASrB,EAAmBoB,GAC1B,IAAIvwB,EAAQ,aAAiB,MAE7B,OADCA,IAA+G,SAAiB,GAC1HA,CACT,CAsCA,SAASywB,EAAgBC,GAEvB,IAAIC,EAAyB,SAAahK,EAAmB+J,IACzDE,EAAwB,UAAa,GACrCpkB,GAAW,UACX+G,EAAe,WAAc,IAtmBnC,SAAoCsd,EAAgBC,GAClD,IAAIvd,EAAeoT,EAAmBkK,GAetC,OAdIC,GAMFA,EAAoB7xB,SAAQ,CAACvJ,EAAG+b,KACzB8B,EAAa+T,IAAI7V,IACpBqf,EAAoB3uB,OAAOsP,GAAKxS,SAAQ9G,IACtCob,EAAa1a,OAAO4Y,EAAKtZ,EAAM,GAEnC,IAGGob,CACT,CAylBEwd,CAA2BvkB,EAASxB,OAAQ4lB,EAAsBz5B,QAAU,KAAOw5B,EAAuBx5B,UAAU,CAACqV,EAASxB,SAC1H4gB,GAAW,UACXoF,EAAkB,eAAkB,CAACC,EAAUC,KACjD,MAAMC,EAAkBxK,EAAuC,mBAAbsK,EAA0BA,EAAS1d,GAAgB0d,GACrGL,EAAsBz5B,SAAU,EAChCy0B,EAAS,IAAMuF,EAAiBD,EAAgB,GAC/C,CAACtF,EAAUrY,IACd,MAAO,CAACA,EAAcyd,EACxB,CACA,SAASI,IACP,GAAwB,oBAAb5rB,SACT,MAAM,IAAIwb,MAAM,gHAEpB,CAKA,SAASwM,IACP,IAAI,OACFsB,GACEC,EAAqBC,EAAeqC,YACpC,SACF7J,GACE,aAAiB,MACjB8J,GAAiB,UACrB,OAAO,eAAkB,SAAUzuB,EAAQ4G,QACzB,IAAZA,IACFA,EAAU,CAAC,GAEb2nB,IACA,IAAI,OACF1J,EAAM,OACND,EAAM,QACNJ,EAAO,SACPM,EAAQ,KACRvN,GACEmN,EAAsB1kB,EAAQ2kB,GAClCsH,EAAOlD,SAASniB,EAAQie,QAAUA,EAAQ,CACxCqD,mBAAoBthB,EAAQshB,mBAC5BpD,WACAvN,OACAwT,WAAYnkB,EAAQge,QAAUA,EAC9B8J,YAAa9nB,EAAQ4d,SAAWA,EAChC1V,QAASlI,EAAQkI,QACjB3R,MAAOyJ,EAAQzJ,MACfwxB,YAAaF,GAEjB,GAAG,CAACxC,EAAQtH,EAAU8J,GACxB,EAvHA,SAAWtC,GACTA,EAAqC,qBAAI,uBACzCA,EAA0B,UAAI,YAC9BA,EAAiC,iBAAI,mBACrCA,EAA2B,WAAI,YAChC,EALD,CAKGA,IAAmBA,EAAiB,CAAC,IAExC,SAAWI,GACTA,EAAiC,YAAI,cACrCA,EAA0C,qBAAI,sBAC/C,CAHD,CAGGA,IAAwBA,EAAsB,CAAC,IAiQlD,MAAMS,EAAiC,gCACvC,IAAIJ,EAAuB,CAAC","sources":["webpack://@finviz/website/./js/app/backtest/utils.tsx","webpack://@finviz/website/./js/app/quote/etf-holdings/async-modules.ts","webpack://@finviz/website/./js/app/quote/etf-holdings/index.tsx","webpack://@finviz/website/./js/app/quote/barChart.tsx","webpack://@finviz/website/./js/app/quote/fundamentalCharts.tsx","webpack://@finviz/website/./js/app/quote/quote.tsx","webpack://@finviz/website/./js/main/components/QuotePrice.tsx","webpack://@finviz/website/./js/app/quote/quote-header/constants.ts","webpack://@finviz/website/./js/app/quote/quote-header/hooks.ts","webpack://@finviz/website/./js/app/quote/quote-header/QuoteHeader.tsx","webpack://@finviz/website/../node_modules/date-fns/esm/isBefore/index.js","webpack://@finviz/website/./js/app/quote/use-chart-timeframe-path-watch.ts","webpack://@finviz/website/./js/app/quote/quote-links/ComparePerfLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/FinancialsLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/OptionsChainLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/StockDetailLink.tsx","webpack://@finviz/website/./js/app/quote/chart-type-select/utils.ts","webpack://@finviz/website/./js/app/quote/chart-type-select/chart-type-select.tsx","webpack://@finviz/website/./js/app/quote/chart-type-select/use-chart-type.tsx","webpack://@finviz/website/./js/app/quote/quote-menu/quote-menu.tsx","webpack://@finviz/website/./js/app/quote/statements.tsx","webpack://@finviz/website/./js/app/quote/use-stock-detail-updater.tsx","webpack://@finviz/website/./js/app/quote/index.tsx","webpack://@finviz/website/./js/app/quote/quote-links/SaveToPortfolioLink.tsx","webpack://@finviz/website/./js/app/quote/quote-links/CreateAlertLink.tsx","webpack://@finviz/website/./js/app/quote/use-chart-layout-width-watch.ts","webpack://@finviz/website/./js/main/hooks/use-window-size.tsx","webpack://@finviz/website/./js/app/shared/chartLayoutConfig.ts","webpack://@finviz/website/./js/app/shared/components/Ads.tsx","webpack://@finviz/website/./js/app/shared/getInitChartConfig.ts","webpack://@finviz/website/./js/app/stats/types.ts","webpack://@finviz/website/./js/main/components/delayed.tsx","webpack://@finviz/website/./js/main/components/notification/hooks.ts","webpack://@finviz/website/./js/main/components/notification/notification-wrapper.tsx","webpack://@finviz/website/./js/main/components/notification/with-notification-context.tsx","webpack://@finviz/website/./js/main/components/notification/notification.tsx","webpack://@finviz/website/./js/main/hooks/use-check-non-idea-chart-missing-config.ts","webpack://@finviz/website/./js/main/modules/charts/util.ts","webpack://@finviz/website/../node_modules/react-router-dom/dist/index.js"],"sourcesContent":["export function round(n: number, places: number = 2) {\r\n return (+(Math.round(Number(n + 'e+' + places)) + 'e-' + places)).toFixed(places)\r\n}\r\n\r\nexport const format = {\r\n totalReturn: (totalReturn: number | string) => round(Number(totalReturn) * 100) + '%',\r\n maxDrawdown: (maxDrawdown: number | string) => round(Number(maxDrawdown) * 100) + '%',\r\n sharpeRatio: (sharpeRatio: number) => round(sharpeRatio),\r\n calmarRatio: (calmarRatio: number) => round(calmarRatio),\r\n CAGR: (CAGR: number) => round(CAGR * 100) + '%',\r\n cagr: (CAGR: number) => round(CAGR * 100) + '%',\r\n volatility: (volatility: number) => round(volatility * 100) + '%',\r\n numberOfTrades: (numberOfTrades: any) => numberOfTrades,\r\n positiveDays: (positiveDays: any) => positiveDays,\r\n negativeDays: (negativeDays: any) => negativeDays,\r\n bestMonth: (bestMonth: number) => round(bestMonth * 100) + '%',\r\n worstMonth: (worstMonth: number) => round(worstMonth * 100) + '%',\r\n}\r\n\r\nexport const figureSpace = ' '\r\n\r\nexport const BACKTEST_MIN_MAX_DATES = Object.freeze({\r\n min: new Date(1996, 5, 3),\r\n max: new Date(2023, 0, 31),\r\n})\r\n","export const etfHoldingsAsyncModule = {\r\n importFn: () => import(/* webpackChunkName: \"etf-holdings-widget\" */ './module-entry'),\r\n cacheKey: 'etf-holdings-widget',\r\n}\r\n","import { withNotificationContext } from '../../../main/components/notification'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../main/services/async-modules-utils'\r\nimport { etfHoldingsAsyncModule } from './async-modules'\r\n\r\nfunction LoadingFallback() {\r\n const widgetClass =\r\n 'ml-3 mt-3 flex max-h-85 min-h-85 min-w-152 max-w-175 shrink grow basis-0 rounded-md border border-primary justify-center items-center'\r\n return (\r\n
\r\n {Array.from(Array(2)).map((_, index) => (\r\n
\r\n \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n\r\nfunction ETFHoldings() {\r\n const [etfHoldingsModule] = useAsyncModule({\r\n ...etfHoldingsAsyncModule,\r\n shouldLoadModule: true,\r\n errorSeverity: 'high',\r\n })\r\n const ETFHoldingsComponent = etfHoldingsModule?.ETFHoldings\r\n return ETFHoldingsComponent ? : \r\n}\r\n\r\nexport default withNotificationContext(ETFHoldings)\r\n","import * as d3 from 'd3'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nexport interface Bar {\r\n name: string\r\n value: number\r\n}\r\n\r\ninterface BarChartProps {\r\n title?: string\r\n data: Bar[]\r\n width?: number\r\n height?: number\r\n valueFormatter?: (value: number) => string\r\n xAxisRotate?: boolean\r\n marginRight?: number\r\n className?: string\r\n}\r\n\r\nexport default class BarChart extends Component {\r\n svgRef: RefObject = createRef()\r\n\r\n // @ts-ignore\r\n _prevData: Bar[]\r\n\r\n componentDidMount() {\r\n this.renderChart()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.renderChart()\r\n }\r\n\r\n renderChart() {\r\n const { data, title } = this.props\r\n if (data === this._prevData) {\r\n return\r\n }\r\n this._prevData = data\r\n this.svgRef.current!.innerHTML = ''\r\n\r\n const xAxisRotate = this.props.xAxisRotate === true\r\n\r\n var margin = { top: title ? 20 : 10, right: this.props.marginRight || 60, bottom: xAxisRotate ? 70 : 20, left: 15 }\r\n const totalWidth = this.props.width || 440\r\n const totalHeight = this.props.height || 330\r\n var width = totalWidth - margin.left - margin.right\r\n var height = totalHeight - margin.top - margin.bottom\r\n\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .rangeRound([0, width])\r\n .padding(0.1)\r\n\r\n let min = d3.min(data, (d: Bar) => d.value)!\r\n if (min < 0) {\r\n min = d3.min(data, (d: Bar) => Math.min(d.value, -d.value))!\r\n } else {\r\n min = 0\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain([min, d3.max(data, (d: Bar) => Math.abs(d.value))!])\r\n .nice()\r\n const yFormat = this.props.valueFormatter ? this.props.valueFormatter : y.tickFormat()\r\n\r\n const svg = d3\r\n .select(this.svgRef.current)\r\n .property('value', [])\r\n .append('g')\r\n .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')\r\n\r\n var xAxis = d3.axisBottom(x)\r\n var yAxis = d3.axisRight(y).ticks(height > 200 ? 10 : 5)\r\n\r\n const makeYLines = () => d3.axisLeft(y)\r\n // @ts-ignore - tickFormat arg can be any string\r\n svg.append('g').attr('class', 'grid').call(makeYLines().tickSize(-width).tickSizeOuter(0).tickFormat(''))\r\n\r\n svg\r\n .append('g')\r\n .attr('class', 'x-axis axis')\r\n .attr('transform', 'translate(0,' + height + ')')\r\n .call(xAxis)\r\n\r\n svg\r\n .selectAll('.x-axis text')\r\n .style('text-anchor', xAxisRotate ? 'end' : 'middle')\r\n .attr('dx', xAxisRotate ? '-.8em' : 0)\r\n .attr('dy', xAxisRotate ? '.15em' : '0.8em')\r\n .attr('transform', 'rotate(' + (xAxisRotate ? -65 : 0) + ')')\r\n\r\n svg\r\n .append('g')\r\n .attr('class', 'y-axis axis')\r\n .attr('transform', 'translate(' + width + ', 0)')\r\n .call(yAxis)\r\n\r\n if (title) {\r\n svg\r\n .append('text')\r\n .attr('class', 'bar-chart-title')\r\n .attr('x', 4)\r\n .attr('y', -5)\r\n .attr('text-anchor', 'start')\r\n .text(title)\r\n }\r\n\r\n const getHeight = (d: Bar) => {\r\n let height = Math.abs(y(d.value ?? 0) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n }\r\n const isOutside = (height: number) => height < 14\r\n let bars = svg.selectAll('.bar').data(data)\r\n bars\r\n .enter()\r\n .append('rect')\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', (d: Bar) => x(d.name)!)\r\n .attr('y', (d: Bar) => y(Math.max(0, d.value)))\r\n .attr('height', getHeight)\r\n .attr('width', x.bandwidth())\r\n .attr('ry', FinvizSettings?.hasRedesignEnabled ? 2 : 0)\r\n\r\n svg\r\n .selectAll('.bar-label')\r\n .data(data)\r\n .enter()\r\n .append('text')\r\n .attr('class', 'divergence')\r\n .attr('x', (d: Bar) => x(d.name)! + x.bandwidth() / 2)\r\n .attr('y', (d: Bar) => {\r\n const height = getHeight(d)\r\n const outside = isOutside(height)\r\n if (d.value < 0) {\r\n return y(Math.max(0, d.value)) + height + (outside ? 12 : -4)\r\n }\r\n return y(Math.max(0, d.value)) + (outside ? -4 : 12)\r\n })\r\n .attr('fill', (d: Bar) => (!FinvizSettings.hasDarkTheme && isOutside(getHeight(d)) ? 'black' : 'white'))\r\n .attr('text-anchor', 'middle')\r\n .attr('font-size', '10px')\r\n .text((d: Bar) => (d.value !== null ? yFormat(d.value) : ''))\r\n\r\n this.svgRef.current!.style.width = totalWidth + 'px'\r\n this.svgRef.current!.style.height = totalHeight + 'px'\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import { round } from '../backtest/utils'\r\nimport BarChart, { Bar } from './barChart'\r\n\r\nfunction convertData(endYear: number, values: any[]) {\r\n return values\r\n .map((value, index) => ({\r\n name: endYear - index,\r\n value,\r\n }))\r\n .reverse() as unknown as Bar[]\r\n}\r\n\r\ninterface FAChartProps {\r\n id: string\r\n largeRoundPlaces: number\r\n largeScale: number\r\n largeTitleSufix: string\r\n smallRoundPlaces: number\r\n smallScale: number\r\n smallTitleSufix: string\r\n title: string\r\n}\r\n\r\nfunction FAChart({\r\n id,\r\n title,\r\n smallRoundPlaces,\r\n largeRoundPlaces,\r\n smallScale,\r\n largeScale,\r\n smallTitleSufix,\r\n largeTitleSufix,\r\n}: FAChartProps) {\r\n const data: number[] = FinvizFA[id]\r\n\r\n const min = Math.min(...data)\r\n const max = Math.max(...data)\r\n const range = max > -min ? max : -min\r\n\r\n const isLarge = Math.abs(range) >= 1000\r\n\r\n const scale = isLarge ? largeScale : smallScale\r\n const values = data.map((value) =>\r\n value == null ? null : round(scale * value, isLarge ? largeRoundPlaces : smallRoundPlaces)\r\n )\r\n\r\n return (\r\n round(value, isLarge ? largeRoundPlaces : smallRoundPlaces)}\r\n width={280}\r\n height={150}\r\n marginRight={37}\r\n className=\"is-fa\"\r\n />\r\n )\r\n}\r\n\r\nexport default function FundamentalCharts() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","/* global FinvizQuoteTickers */\r\nimport classnames from 'classnames'\r\nimport * as dateFns from 'date-fns'\r\nimport React, { ChangeEvent, Component, FormEvent } from 'react'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { DatePicker } from '../../main/components/date-picker'\r\nimport { SpecificChartFunctionality } from '../../main/constants'\r\nimport {\r\n ChartElementType,\r\n ChartLayout,\r\n Instrument,\r\n Quote,\r\n QuoteFetchType,\r\n TIMEFRAME,\r\n Theme,\r\n Utils,\r\n} from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { getStaticChartConfig } from '../shared/chartLayoutConfig'\r\nimport { getSanitizedTicker } from '../shared/ticker-sanitizer'\r\nimport { formatDateToStringUS } from '../shared/utils'\r\n\r\nconst redesignEnabled = !!FinvizSettings.hasRedesignEnabled\r\n\r\nvar colorScaleClass = function (value: number) {\r\n if (value < 0) {\r\n return 'color-text is-negative'\r\n } else if (value > 0) {\r\n return 'color-text is-positive'\r\n }\r\n return ''\r\n}\r\n\r\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n\r\nvar arraysEqual = function (arr1: unknown[], arr2: unknown[]) {\r\n if (arr1.length !== arr2.length) {\r\n return false\r\n }\r\n for (var i = 0; i < arr1.length; i++) {\r\n if (arr1[i] !== arr2[i]) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\ninterface ChartProps {\r\n tickers: string[]\r\n fromDay: string\r\n toDay: string\r\n}\r\n\r\nclass Chart extends Component {\r\n shouldComponentUpdate(nextProps: ChartProps) {\r\n return !arraysEqual(this.props.tickers, nextProps.tickers)\r\n }\r\n\r\n render() {\r\n const theme = FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light\r\n const tickerQuote = Quote.select((q) => q.close.length > 0 && this.props.tickers.includes(q.ticker))\r\n const chartConfig = getStaticChartConfig({\r\n ticker: tickerQuote[0]?.ticker ?? '',\r\n timeframe: TIMEFRAME.d,\r\n paneElements: [\r\n {\r\n type: ChartElementType.PerfChart,\r\n tickers: this.props.tickers,\r\n fromDate: this.props.fromDay,\r\n toDate: this.props.toDay,\r\n overlays: [],\r\n },\r\n ],\r\n refreshData: false,\r\n specificChartFunctionality: SpecificChartFunctionality.quotePerf,\r\n theme,\r\n })\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface TableProps {\r\n months: string[]\r\n rows: Array<{\r\n ticker: string\r\n months: string[]\r\n total: string\r\n }>\r\n}\r\n\r\n// mozno vyfarbovat tabulku?\r\nclass Table extends Component {\r\n render() {\r\n var { months, rows } = this.props,\r\n groupsCount = Math.ceil(months.length / 12)\r\n rows = rows.slice()\r\n const tdClasses = classnames('text-center', {\r\n 'body-table-nw font-bold': !redesignEnabled,\r\n })\r\n\r\n var trs = []\r\n for (let g = 0; g < groupsCount; g++) {\r\n trs.push(\r\n \r\n \r\n {months.splice(0, 12).map((month) => (\r\n \r\n {month}\r\n \r\n ))}\r\n {g === groupsCount - 1 && Total}\r\n \r\n )\r\n rows.forEach((row, i) => {\r\n trs.push(\r\n \r\n {row.ticker}\r\n {row.months.splice(0, 12).map((col, monthIndex) => (\r\n \r\n {col}\r\n \r\n ))}\r\n {g === groupsCount - 1 && (\r\n \r\n {row.total}\r\n \r\n )}\r\n \r\n )\r\n })\r\n }\r\n\r\n return (\r\n \r\n {trs}\r\n \r\n )\r\n }\r\n}\r\n\r\ninterface PerfState {\r\n tickersInput: string\r\n tickers: string[]\r\n months: Array<{\r\n value: string\r\n label: string\r\n }>\r\n fromMonth: {\r\n value: string\r\n label: string\r\n }\r\n toMonth: {\r\n value: string\r\n label: string\r\n }\r\n minDate: string\r\n maxDate: string\r\n fromDay: string\r\n toDay: string\r\n loading: boolean\r\n}\r\n\r\nexport class Perf extends Component {\r\n containerRef = React.createRef()\r\n\r\n constructor(props: any) {\r\n super(props)\r\n var now = new Date(),\r\n months = []\r\n const startYear = new Date().getFullYear() - 36 // We have 37.25 years of data in DB, so leaving some offset\r\n for (var year = startYear; year <= now.getFullYear(); year++) {\r\n for (var month = 1; month <= 12; month++) {\r\n if (year === now.getFullYear() && month > now.getMonth() + 1) {\r\n break\r\n }\r\n months.push({\r\n value: month.toString().padStart(2, '0') + '/01/' + year,\r\n label: monthNames[month - 1] + ' ' + year.toString().substring(2),\r\n })\r\n }\r\n }\r\n\r\n this.state = {\r\n tickersInput: FinvizQuoteTickers.join(','),\r\n tickers: FinvizQuoteTickers,\r\n months: months,\r\n fromMonth: months[months.length - 12],\r\n toMonth: months[months.length - 1],\r\n /**\r\n * DB_BARS_LIMIT - code below is dependent on amount of data we store for specific timeframes\r\n * Search DB_BARS_LIMIT in the project to find other places with such code.\r\n */\r\n // 2510 bars = ±10 years\r\n minDate: formatDateToStringUS(dateFns.sub(new Date(), { years: 9, months: 11 })),\r\n maxDate: formatDateToStringUS(new Date()),\r\n fromDay: formatDateToStringUS(dateFns.subYears(new Date(), 1)),\r\n toDay: formatDateToStringUS(new Date()),\r\n loading: true,\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.loading) {\r\n return (\r\n \r\n Loading...\r\n \r\n )\r\n }\r\n\r\n var from = new Date(this.state.fromMonth.value)\r\n var to = new Date(this.state.toMonth.value)\r\n var monthsToShow = this.state.months\r\n .map((month) => month.value)\r\n .filter((month) => new Date(month) >= from && new Date(month) <= to)\r\n\r\n var quotes = Quote.select((q: any) => q.timeframe === 'm')\r\n var quotesPerf = quotes.map((q: any) => {\r\n var obj: { ticker: string; perf: Record } = { ticker: q.ticker, perf: {} }\r\n q.date.forEach((d: any, i: number) => {\r\n if (i === 0) {\r\n return\r\n }\r\n var date = Utils.dateFromUnixTimestamp(d)\r\n var perf = (q.close[i] * 100) / q.close[i - 1] - 100\r\n obj.perf[(date.getMonth() + 1).toString().padStart(2, '0') + '/01/' + date.getFullYear()] = perf\r\n })\r\n return obj\r\n })\r\n\r\n var months = monthsToShow.map(\r\n (month) => monthNames[new Date(month).getMonth()] + ' ' + new Date(month).getFullYear().toString().substring(2)\r\n )\r\n var rows = quotesPerf.map((quote: any) => {\r\n var cols: string[] = []\r\n var total = 1\r\n monthsToShow.forEach((month) => {\r\n var perf = Math.round(quote.perf[month] * 100) / 100\r\n if (!isNaN(perf)) {\r\n total *= quote.perf[month] / 100 + 1\r\n cols.push((perf > 0 ? '+' : '') + perf.toFixed(2) + '%')\r\n } else {\r\n cols.push('N/A')\r\n }\r\n })\r\n total = (total - 1) * 100\r\n return { ticker: quote.ticker, months: cols, total: (total > 0 ? '+' : '') + total.toFixed(2) + '%' }\r\n })\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Tickers:\r\n {\r\n this.setState({ tickersInput: e.target.value })\r\n }}\r\n style={{ width: '100%' }}\r\n data-testid=\"quote-compare-perf-tickers-input\"\r\n />\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n {\r\n this._onDatePickerChange('from', formatDateToStringUS(newValue))\r\n }}\r\n >\r\n \r\n \r\n
\r\n {' - '}\r\n
\r\n {\r\n this._onDatePickerChange('to', formatDateToStringUS(newValue))\r\n }}\r\n >\r\n \r\n \r\n
\r\n \r\n\r\n

\r\n Monthly performance from  \r\n \r\n {this.state.months.map((option) => (\r\n \r\n ))}\r\n \r\n   to  \r\n \r\n {this.state.months.map((option) => (\r\n \r\n ))}\r\n \r\n

\r\n \r\n\r\n
\r\n \r\n )\r\n }\r\n\r\n refetchQuotes = () => {\r\n this._fetch(this.state.tickers, false)\r\n }\r\n\r\n componentDidMount() {\r\n this._fetch(this.state.tickers)\r\n\r\n // We have to listen to these events to synchrnously update quote data, if we do after awaiting Quote.getAll in _fetch\r\n // there's a visual glitch because it rerenders with new data from the server (there's a complete refetch after 15 requests with no new data)\r\n // and then it rerenders again after updateQuoteData\r\n Quote.bind('refetch newerData', this.updateQuoteData)\r\n document.addEventListener('quoteFetchEvent', this.refetchQuotes)\r\n }\r\n\r\n componentWillUnmount() {\r\n Quote.unbind('refetch newerData', this.updateQuoteData)\r\n document.removeEventListener('quoteFetchEvent', this.refetchQuotes)\r\n }\r\n\r\n updateQuoteData = () => {\r\n const { fromDay, toDay } = this.state\r\n\r\n if (!fromDay || !toDay) {\r\n return\r\n }\r\n\r\n const dailyQuotes = Quote.select((q: any) => q.timeframe === 'd')\r\n const fromDate = new Date(fromDay + ' 00:00')\r\n const toDate = new Date(toDay + ' 23:59')\r\n dailyQuotes.forEach((q: any) => {\r\n const o = [],\r\n h = [],\r\n l = [],\r\n c = [],\r\n d = [],\r\n v = []\r\n for (let i = 0; i < q.close.length; i++) {\r\n const date = Utils.dateFromUnixTimestamp(q.date[i])\r\n if (fromDate <= date && date <= toDate) {\r\n o.push(q.open[i])\r\n h.push(q.high[i])\r\n l.push(q.low[i])\r\n c.push(q.close[i])\r\n d.push(q.date[i])\r\n v.push(q.volume[i])\r\n }\r\n }\r\n q.updateAttributes({\r\n open: o,\r\n high: h,\r\n low: l,\r\n close: c,\r\n date: d,\r\n volume: v,\r\n })\r\n })\r\n\r\n // This is to rerender perf table on quote update\r\n this.forceUpdate()\r\n }\r\n\r\n _fetch = async (tickers: string[], isRefetch = true) => {\r\n const { t } = decodeQueryString<{ t: string; p?: TIMEFRAME }>()\r\n if (isRefetch) {\r\n this.setState({ loading: true })\r\n }\r\n\r\n Quote.all().forEach(async (quote) => {\r\n if (quote.ticker === t && quote.timeframe === 'd' && !isRefetch) {\r\n // We don't want to trigger main ticker quote newer data fetch because it's done in withQuotePolling which also triggers this function\r\n // by emmiting quoteFetchEvent\r\n return\r\n }\r\n if (tickers.includes(quote.ticker)) {\r\n await quote.fetchData({ fetchType: isRefetch ? QuoteFetchType.Refetch : QuoteFetchType.NewerData })\r\n this.updateQuoteData()\r\n } else {\r\n quote.destroy()\r\n }\r\n })\r\n\r\n if (isRefetch) {\r\n var d = tickers.map((ticker) => ({ ticker: ticker, timeframe: TIMEFRAME.d, instrument: Instrument.Stock }))\r\n var m = tickers.map((ticker) => ({ ticker: ticker, timeframe: TIMEFRAME.m, instrument: Instrument.Stock }))\r\n await Quote.getAll(d.concat(m))\r\n\r\n this.setState(\r\n {\r\n loading: false,\r\n },\r\n () => {\r\n this.containerRef.current?.style.removeProperty('min-height')\r\n }\r\n )\r\n }\r\n\r\n this.updateQuoteData()\r\n }\r\n\r\n _onSubmit = (e: FormEvent) => {\r\n e.preventDefault()\r\n const tickersInput = getSanitizedTicker(this.state.tickersInput, true)\r\n const tickers = tickersInput.split(',')\r\n this.setState({ tickers, tickersInput }, () => {\r\n this._fetch(tickers)\r\n })\r\n }\r\n\r\n _onMonthChange = (type: string, e: ChangeEvent) => {\r\n var state: any = {}\r\n state[type + 'Month'] = this.state.months.filter((m) => m.value === e.target.value)[0]\r\n this.setState(state)\r\n }\r\n\r\n _onDatePickerChange = (type: string, date: any) => {\r\n var formattedDate = formatDateToStringUS(new Date(date))\r\n\r\n var state: any = {}\r\n state[type + 'Day'] = formattedDate\r\n state[type + 'DatePickerOpen'] = false\r\n this.setState(state, () => {\r\n this._fetch(this.state.tickers)\r\n })\r\n }\r\n\r\n _hideDatePicker = (type: string) => {\r\n var state: any = {}\r\n state[type + 'DatePickerOpen'] = false\r\n this.setState(state)\r\n }\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { formatDate } from '../../app/header/utils'\r\nimport { formatNumber } from '../util'\r\nimport { RedGreenMultiline, RedGreenText } from './RedGreenText'\r\n\r\nexport interface QuotePriceProps {\r\n title?: string\r\n date?: Date | null\r\n dateLabel?: string | null\r\n price: number\r\n changeUsd: number\r\n changePct: number\r\n}\r\n\r\nexport function QuotePrice({ title, date, dateLabel, price, changeUsd, changePct }: QuotePriceProps) {\r\n const fractions = !isNaN(price) && price < 1 ? 4 : 2\r\n const hasValue = changeUsd && Number.isFinite(changeUsd)\r\n\r\n return (\r\n
\r\n {title &&
{title}
}\r\n\r\n {(date || dateLabel) && (\r\n \r\n {dateLabel ?? formatDate(date, '', 'MMM dd')}\r\n {date && (\r\n <>\r\n {' '}\r\n • {formatDate(date, '', 'hh:mmaa')} ET\r\n \r\n )}\r\n \r\n )}\r\n\r\n
\r\n {formatNumber(price, { defaultValue: '—', fractions })}\r\n
\r\n \r\n \r\n
Dollar change
\r\n {formatNumber(changeUsd, { showPlusSign: true, fractions })}\r\n
\r\n %}\r\n >\r\n
Percentage change
\r\n {formatNumber(changePct)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","export const QUOTE_HEADER_ROOT = 'js-quote-header-prices'\r\nexport const STATIC_PRICE_SELECTOR = '.js-is-static-price'\r\n","import * as React from 'react'\r\n\r\nimport { useModelState } from '../../charts-lib'\r\nimport { QUOTE_HEADER_ROOT, STATIC_PRICE_SELECTOR } from './constants'\r\n\r\nfunction toggleStaticheader(isReactHeader: boolean) {\r\n if (isReactHeader) {\r\n document.querySelector(STATIC_PRICE_SELECTOR)?.classList.add('hidden')\r\n document.getElementById(QUOTE_HEADER_ROOT)?.classList.remove('hidden')\r\n } else {\r\n document.querySelector(STATIC_PRICE_SELECTOR)?.classList.remove('hidden')\r\n document.getElementById(QUOTE_HEADER_ROOT)?.classList.add('hidden')\r\n }\r\n}\r\n\r\nexport function useReplaceStaticHeader(isLoaded: boolean) {\r\n React.useEffect(() => {\r\n toggleStaticheader(isLoaded)\r\n }, [isLoaded])\r\n}\r\n\r\nconst CHANGE_UPATE_EVENTS = ['change', 'update']\r\nconst QUOTE_MODEL_CHANGE_EVENTS = [...CHANGE_UPATE_EVENTS, 'refetch', 'newerData']\r\n\r\nexport interface HeaderPricesContext {\r\n prevClose: number\r\n lastClose: number\r\n lastTime: number\r\n lastDate?: number\r\n afterClose: number\r\n afterTime: number\r\n}\r\n\r\nexport function useChartContextPrices(chartLayoutModel: any): HeaderPricesContext | null {\r\n const chartModel = useModelState(chartLayoutModel?.charts().first(), {\r\n watchProperties: ['quote'],\r\n listenOnEvents: CHANGE_UPATE_EVENTS,\r\n })\r\n const quoteModel = useModelState(chartModel?.quote() ?? null, {\r\n watchProperties: ['lastClose', 'prevClose', 'afterClose', 'afterTime'],\r\n listenOnEvents: QUOTE_MODEL_CHANGE_EVENTS,\r\n })\r\n\r\n if (!quoteModel) return null\r\n\r\n return {\r\n prevClose: quoteModel.prevClose,\r\n lastClose: quoteModel.lastClose,\r\n lastTime: quoteModel.lastTime,\r\n lastDate: quoteModel.lastDate,\r\n afterClose: quoteModel.afterClose,\r\n afterTime: quoteModel.afterTime,\r\n }\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport { QuotePrice } from '../../../main/components/QuotePrice'\r\nimport { Quote, useChartLayoutGlobalModelAsync, withCompleteLayoutModelInit, withQuotePolling } from '../../charts-lib'\r\nimport { formatDate, getDate } from '../../header/utils'\r\nimport { HeaderPricesContext, useChartContextPrices, useReplaceStaticHeader } from './hooks'\r\n\r\nexport function ChartContextQuoteHeader() {\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const data = useChartContextPrices(chartLayoutModel)\r\n\r\n return \r\n}\r\n\r\ninterface QuoteHeaderWithManualInitProps {\r\n chartLayoutModel: any\r\n config: any\r\n}\r\n\r\nfunction ManualInitQuoteHeaderComponent({ chartLayoutModel, config }: QuoteHeaderWithManualInitProps) {\r\n const data = useChartContextPrices(chartLayoutModel)\r\n\r\n /**\r\n * We need to instantiate layout model in order to use quote refetch on page\r\n * without an actual chart (options.) We also need to manually create a chart model\r\n *\r\n * It is then correctly caught in `useChartContextPrices`\r\n */\r\n React.useEffect(() => {\r\n async function fetchAndMapInitialQuote() {\r\n for (const chartConfig of config.charts) {\r\n const modelProperties = Object.assign({}, chartConfig)\r\n\r\n modelProperties.chart_layout = chartLayoutModel\r\n delete modelProperties.panes\r\n if (modelProperties.refreshData == null) {\r\n modelProperties.refreshData = true\r\n }\r\n chartLayoutModel.charts().create(modelProperties)\r\n }\r\n\r\n const chart = chartLayoutModel.charts().first()\r\n\r\n const quote = await Quote.get({\r\n ticker: chart.ticker,\r\n instrument: chart.instrument,\r\n timeframe: chart.timeframe,\r\n options: { maxBars: 0 },\r\n })\r\n\r\n chart.updateAttributes({ quote })\r\n }\r\n\r\n fetchAndMapInitialQuote()\r\n }, [chartLayoutModel, config.charts])\r\n\r\n return \r\n}\r\n\r\nexport const ManualInitQuoteHeader = withCompleteLayoutModelInit(withQuotePolling(ManualInitQuoteHeaderComponent))\r\n\r\nexport function QuoteHeaderContent({ data }: { data: HeaderPricesContext | null }) {\r\n /**\r\n * Replace static HTML with our react component\r\n */\r\n useReplaceStaticHeader(!!data)\r\n\r\n if (!data) return null\r\n\r\n const isChange = Number.isFinite(data.prevClose)\r\n const isAfterChange = Number.isFinite(data.afterClose) && data.afterClose !== data.lastClose\r\n const lastTime = data.lastTime ? getDate(data.lastTime * 1000) : null\r\n const lastDate = !lastTime && data.lastDate ? formatDate(data.lastDate, 'yyyyMMdd', 'MMM dd, yyyy') : null\r\n const afterDate = data.afterTime ? getDate(data.afterTime * 1000) : null\r\n\r\n let afterhoursTitle\r\n if (lastTime && afterDate) {\r\n if (dateFns.isBefore(afterDate, lastTime)) afterhoursTitle = 'Premarket'\r\n else afterhoursTitle = 'Aftermarket'\r\n }\r\n\r\n return (\r\n <>\r\n {isChange && (\r\n \r\n )}\r\n {isAfterChange && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import { useChartModelCustomDateRangeValues } from 'finviz-charts/app/controllers/chart-controls/use-chart-model-custom-date-range-values'\r\nimport { useChartLayoutGlobalModelAsync, useModelState } from 'finviz-charts/app/lib-export'\r\n\r\nexport function useChartTimeframePathWatch() {\r\n const isPremium = window.FinvizSettings.hasUserPremium\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const chartModel = useModelState(chartLayoutModel?.activeChart ?? null, {\r\n watchProperties: ['timeframe'],\r\n })\r\n const { generateChartLayoutRouterPath } = useChartModelCustomDateRangeValues({\r\n chartModel,\r\n isPremium,\r\n })\r\n\r\n if (!chartModel) return null\r\n\r\n const { pathname, search } = generateChartLayoutRouterPath({\r\n ticker: chartModel?.ticker,\r\n timeframe: chartModel?.timeframe,\r\n dateRange: chartModel?.dateRange,\r\n })\r\n\r\n return `${pathname}${search}`\r\n}\r\n","import { QuoteRoutes } from '../../../main/constants'\r\nimport { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-compare-perf-link a')\r\n\r\nexport default function ComparePerfLink() {\r\n const isPremium = window.FinvizSettings.hasUserPremium\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n if (!currentTimeframePath)\r\n return (\r\n \r\n Compare Perf.\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.set(StatsQuery.ChartType, QuoteRoutes.Performance)\r\n\r\n return (\r\n \r\n Compare Perf.\r\n \r\n )\r\n}\r\n","import { QuoteRoutes } from '../../../main/constants'\r\nimport { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-financials-link a')\r\n\r\nexport default function FinancialsLink() {\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n if (!currentTimeframePath)\r\n return (\r\n \r\n Financials\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.set(StatsQuery.ChartType, QuoteRoutes.Revenue)\r\n\r\n return (\r\n \r\n Financials\r\n \r\n )\r\n}\r\n","import { QuoteRoutes } from '../../../main/constants'\r\nimport { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-options-chain-link a')\r\n\r\nexport default function OptionsChainLink() {\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n if (!currentTimeframePath)\r\n return (\r\n \r\n Options Chain\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.set(StatsQuery.ChartType, QuoteRoutes.OptionsChain)\r\n\r\n return (\r\n \r\n Options Chain\r\n \r\n )\r\n}\r\n","import { StatsQuery } from '../../stats/types'\r\nimport { useChartTimeframePathWatch } from '../use-chart-timeframe-path-watch'\r\n\r\nconst originalElement = document.querySelector('.js-stock-detail-link a')\r\n\r\nexport default function StockDetailLink() {\r\n const currentTimeframePath = useChartTimeframePathWatch()\r\n if (!currentTimeframePath)\r\n return (\r\n \r\n Stock Detail\r\n \r\n )\r\n\r\n const newURL = new URL(currentTimeframePath, window.location.origin)\r\n newURL.searchParams.delete(StatsQuery.ChartType)\r\n\r\n return (\r\n \r\n Stock Detail\r\n \r\n )\r\n}\r\n","import { SelectItem } from '../../../main/components'\r\nimport { IconNameType } from '../../../main/components/icon'\r\n\r\nexport enum QuoteNodeChartTypes {\r\n candlesticksimple = 'candlesticksimple',\r\n candlestick = 'candlestick',\r\n line = 'line',\r\n ohlc = 'ohlc',\r\n heikinashi = 'heikinashi',\r\n hollowcandlestick = 'hollowcandlestick',\r\n}\r\n\r\nexport enum QuoteUrlChartTypes {\r\n cs = 'cs',\r\n c = 'c',\r\n l = 'l',\r\n o = 'o',\r\n ha = 'ha',\r\n hc = 'hc',\r\n}\r\n\r\nexport const QuoteShortToLongType = {\r\n [QuoteUrlChartTypes.cs]: QuoteNodeChartTypes.candlesticksimple,\r\n [QuoteUrlChartTypes.c]: QuoteNodeChartTypes.candlestick,\r\n [QuoteUrlChartTypes.l]: QuoteNodeChartTypes.line,\r\n [QuoteUrlChartTypes.o]: QuoteNodeChartTypes.ohlc,\r\n [QuoteUrlChartTypes.ha]: QuoteNodeChartTypes.heikinashi,\r\n [QuoteUrlChartTypes.hc]: QuoteNodeChartTypes.hollowcandlestick,\r\n} as const\r\n\r\nexport const QuoteLongToShortType = {\r\n [QuoteNodeChartTypes.candlesticksimple]: QuoteUrlChartTypes.cs,\r\n [QuoteNodeChartTypes.candlestick]: QuoteUrlChartTypes.c,\r\n [QuoteNodeChartTypes.line]: QuoteUrlChartTypes.l,\r\n [QuoteNodeChartTypes.ohlc]: QuoteUrlChartTypes.o,\r\n [QuoteNodeChartTypes.heikinashi]: QuoteUrlChartTypes.ha,\r\n [QuoteNodeChartTypes.hollowcandlestick]: QuoteUrlChartTypes.hc,\r\n} as const\r\n\r\nexport const FREE_TYPES = ['candlesticksimple', 'candlestick', 'line']\r\n\r\nexport const DEFAULT_TYPES = [\r\n { icon: 'candleBarBasic', value: QuoteNodeChartTypes.candlestick, label: 'Candle' },\r\n { icon: 'lineChartType', value: QuoteNodeChartTypes.line, label: 'Line' },\r\n { icon: 'ohlcChartType', value: QuoteNodeChartTypes.ohlc, label: 'OHLC' },\r\n { icon: 'candleBarHollow', value: QuoteNodeChartTypes.hollowcandlestick, label: 'Hollow Candle' },\r\n { icon: 'candleBarHeikinAshi', value: QuoteNodeChartTypes.heikinashi, label: 'Heikin Ashi' },\r\n]\r\n\r\nexport type TypeBaseOption = SelectItem & {\r\n icon: IconNameType\r\n href: string\r\n}\r\n","import { Select } from '../../../main/components'\r\nimport { Icon } from '../../../main/components/icon'\r\nimport { useChartTypes } from './use-chart-type'\r\n\r\nconst hasRedesign = FinvizSettings.hasRedesignEnabled\r\n\r\nexport function ChartTypesSelect({ isPremium }: { isPremium: boolean }) {\r\n const { chartTypes, currentType, setSelectedChartTypeOverwrite } = useChartTypes({ isPremium })\r\n\r\n return (\r\n : undefined}\r\n rounding={hasRedesign ? undefined : 'none'}\r\n onChange={({ value }) => setSelectedChartTypeOverwrite(value)}\r\n items={chartTypes}\r\n />\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString, encodeQueryString } from '../../queryString'\r\nimport {\r\n DEFAULT_TYPES,\r\n FREE_TYPES,\r\n QuoteLongToShortType,\r\n QuoteNodeChartTypes,\r\n QuoteShortToLongType,\r\n QuoteUrlChartTypes,\r\n TypeBaseOption,\r\n} from './utils'\r\n\r\nexport function useChartTypes({ isPremium }: { isPremium: boolean }) {\r\n const location = useLocation()\r\n const { b, t, ta, ty, p = 'd', r } = decodeQueryString(location.search)\r\n const taInt = ta ? Number.parseInt(ta) : 1\r\n const [selectedChartTypeOverwrite, setSelectedChartTypeOverwrite] = React.useState()\r\n\r\n const generateRouterPath = React.useCallback(\r\n (type: QuoteNodeChartTypes) => {\r\n if (isPremium || FREE_TYPES.includes(type)) {\r\n return `/quote.ashx?${encodeQueryString({\r\n b,\r\n t,\r\n r,\r\n ty:\r\n type === QuoteNodeChartTypes.candlesticksimple\r\n ? QuoteLongToShortType.candlestick\r\n : QuoteLongToShortType[type],\r\n ta: type === QuoteNodeChartTypes.candlestick ? '1' : '0',\r\n p,\r\n })}`\r\n }\r\n return `/elite.ashx?${encodeQueryString({\r\n utm_source: 'finviz',\r\n utm_medium: 'banner',\r\n utm_campaign: 'quote-chart-type-select',\r\n })}`\r\n },\r\n [isPremium, b, t, r, p]\r\n )\r\n\r\n const chartTypes = React.useMemo(\r\n () =>\r\n (\r\n [\r\n !isPremium ? { icon: 'candleBarBasic', value: 'candlesticksimple', label: 'Candle - simple' } : null,\r\n ...DEFAULT_TYPES.map((type) =>\r\n !isPremium && type.value === 'candlestick' ? { ...type, label: 'Candle - advanced' } : type\r\n ),\r\n ].filter(Boolean) as TypeBaseOption[]\r\n ).map((item) => ({\r\n ...item,\r\n href: generateRouterPath(item.value as QuoteNodeChartTypes),\r\n reloadDocument: !isPremium,\r\n })),\r\n [generateRouterPath, isPremium]\r\n )\r\n\r\n const currentType = React.useMemo(\r\n () =>\r\n chartTypes.find((type) => {\r\n if (selectedChartTypeOverwrite) {\r\n return type.value === selectedChartTypeOverwrite\r\n }\r\n\r\n const defaultType =\r\n ((ty as QuoteUrlChartTypes | undefined) && QuoteShortToLongType[ty as QuoteUrlChartTypes]) ??\r\n (FinvizQuoteTypeCurrent as QuoteNodeChartTypes)\r\n\r\n return !isPremium && defaultType === QuoteNodeChartTypes.candlestick && taInt === 0\r\n ? type.value === QuoteNodeChartTypes.candlesticksimple\r\n : type.value === defaultType\r\n }),\r\n [chartTypes, selectedChartTypeOverwrite, ty, isPremium, taInt]\r\n )\r\n\r\n return { currentType, chartTypes, setSelectedChartTypeOverwrite }\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { StockDetailTimeframeBar } from '../../../app/charts-lib'\r\nimport { Button } from '../../../main/components/button'\r\nimport { NotificationWrapper } from '../../../main/components/notification'\r\nimport { decodeQueryString } from '../../queryString'\r\nimport { ChartTypesSelect } from '../chart-type-select'\r\n\r\ninterface Props {\r\n index: number\r\n isInteractiveChart: boolean\r\n isStockDetailUpdating: boolean\r\n}\r\n\r\nconst hasRedesign = FinvizSettings.hasRedesignEnabled\r\n\r\nexport function QuoteMenu({ index, isInteractiveChart, isStockDetailUpdating }: Props) {\r\n const { t, ty, p } = decodeQueryString()\r\n const urlTickers = t.split(',')\r\n const isPremium = FinvizSettings.hasUserPremium\r\n\r\n return (\r\n \r\n
\r\n {ty !== 'p' && ty !== 'oc' && (\r\n <>\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n )}\r\n
\r\n {ty !== 'p' && ty !== 'oc' ? (\r\n \r\n Share\r\n \r\n ) : null}\r\n
\r\n
\r\n )\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport * as React from 'react'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nimport { Icon } from '../../main/components/icon'\r\nimport { getValue, setValue } from '../../main/services/local-storage'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { AdTag, getInvestingChannelPage } from '../shared/components/Ads'\r\nimport BarChartBig from './barChart'\r\n\r\ninterface Bar {\r\n name: string\r\n value: number\r\n}\r\n\r\ninterface BarChartProps {\r\n data: Bar[]\r\n}\r\n\r\nclass BarChart extends Component {\r\n svgRef: RefObject\r\n\r\n constructor(props: BarChartProps) {\r\n super(props)\r\n this.svgRef = createRef()\r\n }\r\n\r\n componentDidMount() {\r\n this.renderChart()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.renderChart()\r\n }\r\n\r\n renderChart() {\r\n const data = this.props.data\r\n\r\n const barWidth = 3\r\n const width = data.length * (barWidth + 1)\r\n const height = 16\r\n\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .range([0, width])\r\n\r\n let min = d3.min(data, (d: Bar) => d.value)!\r\n if (min < 0) {\r\n min = d3.min(data, (d: Bar) => Math.min(d.value, -d.value))!\r\n } else {\r\n min = 0\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain([min, d3.max(data, (d: Bar) => Math.abs(d.value))] as [number, number])\r\n .nice()\r\n .unknown(height / 2)\r\n\r\n const svg = d3.select(this.svgRef.current).property('value', [])\r\n\r\n let bars = svg.selectAll('.bar').data(data)\r\n bars\r\n .enter()\r\n .append('rect')\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', function (d: Bar) {\r\n return x(d.name)!\r\n })\r\n .attr('y', function (d: Bar) {\r\n return y(Math.max(0, d.value))\r\n })\r\n .attr('height', function (d: Bar) {\r\n let height = Math.abs(y(d.value) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n })\r\n .attr('width', barWidth)\r\n bars\r\n .transition()\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', function (d: Bar) {\r\n return x(d.name)!\r\n })\r\n .attr('y', function (d: Bar) {\r\n return y(Math.max(0, d.value))\r\n })\r\n .attr('height', function (d: Bar) {\r\n let height = Math.abs(y(d.value) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n })\r\n .attr('width', barWidth)\r\n bars.exit().remove()\r\n\r\n this.svgRef.current!.style.width = width + 'px'\r\n this.svgRef.current!.style.height = height + 'px'\r\n }\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n\r\nfunction EliteHoverAd() {\r\n return (\r\n
\r\n
\r\n \r\n

Upgrade your FINVIZ experience

\r\n

\r\n Join thousands of traders who make more informed decisions with our premium features. Real-time\r\n quotes, advanced visualizations, historical statements, and much more.\r\n

\r\n \r\n Learn more\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\ninterface BarChartWrapperProps {\r\n data: Bar[]\r\n}\r\n\r\nclass BarChartWrapper extends Component {\r\n state = {\r\n hover: false,\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n x.value !== null)}>\r\n \r\n \r\n \r\n {FinvizSettings.hasUserPremium ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface StatementsState {\r\n source: 'F' | 'R'\r\n sheet: string\r\n timeframe: string\r\n currency: string | null\r\n data: Record | null\r\n}\r\n\r\nconst DEFAULT_SOURCE = 'F'\r\n\r\nclass Statements extends Component {\r\n declare pageRef: ReturnType\r\n\r\n state: StatementsState = {\r\n source: this._getDefaultSource(),\r\n sheet: 'I',\r\n timeframe: 'A',\r\n currency: null,\r\n data: null,\r\n }\r\n\r\n componentDidMount() {\r\n this._fetch()\r\n this.pageRef = getInvestingChannelPage()\r\n this.pageRef.create()\r\n }\r\n\r\n componentWillUnmount() {\r\n this.pageRef?.destroy()\r\n }\r\n\r\n render() {\r\n const { data } = this.state\r\n\r\n if (data === null) {\r\n // || (data && data.error)) {\r\n return null\r\n }\r\n\r\n const hasData = !data.error\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {FinvizSettings.hasUserPremium && (\r\n // TODO fix classname when css mixins removal is merged\r\n {\r\n e.preventDefault()\r\n const source = e.target.value === 'R' ? 'R' : 'F'\r\n this.setState(\r\n {\r\n source: source,\r\n },\r\n () => {\r\n this._fetch()\r\n }\r\n )\r\n setValue('statements-source', source, DEFAULT_SOURCE, false)\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n {FinvizSettings.hasUserPremium && <>   }\r\n\r\n \r\n {this._renderSheetLink('I', 'income statement')} | {this._renderSheetLink('B', 'balance sheet')} |{' '}\r\n {this._renderSheetLink('C', 'cash flow')}\r\n \r\n \r\n \r\n {this._renderTimeframeLink('A', 'annual')} | {this._renderTimeframeLink('Q', 'quarterly')}\r\n \r\n
\r\n {hasData && }\r\n {!hasData && (\r\n \r\n \r\n \r\n \r\n The statement is not available. Try switching between FactSet-Reuters source.\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n\r\n _renderSheetLink(id: string, text: string) {\r\n const { sheet } = this.state\r\n return (\r\n {\r\n e.preventDefault()\r\n this.setState(\r\n {\r\n sheet: id,\r\n },\r\n () => {\r\n this._fetch()\r\n }\r\n )\r\n }}\r\n >\r\n {text}\r\n \r\n )\r\n }\r\n\r\n _renderTimeframeLink(id: string, text: string) {\r\n const { timeframe } = this.state\r\n return (\r\n {\r\n e.preventDefault()\r\n this.setState(\r\n {\r\n timeframe: id,\r\n },\r\n () => {\r\n this._fetch()\r\n }\r\n )\r\n }}\r\n >\r\n {text}\r\n \r\n )\r\n }\r\n\r\n async _fetch() {\r\n const { source, sheet, timeframe } = this.state\r\n const { t } = decodeQueryString()\r\n\r\n try {\r\n const response = await fetch(`/api/statement.ashx?t=${t}&so=${source}&s=${sheet}${timeframe}`)\r\n const json = await response.json()\r\n\r\n this.setState({\r\n currency: json.currency,\r\n data: json.error ? json : json.data,\r\n })\r\n } catch {}\r\n }\r\n\r\n _getDefaultSource(): 'F' | 'R' {\r\n if (!FinvizSettings.hasUserPremium) {\r\n return DEFAULT_SOURCE\r\n }\r\n\r\n return getValue('statements-source', DEFAULT_SOURCE) === 'R' ? 'R' : 'F'\r\n }\r\n}\r\n\r\nfunction StatementsTable({ data, currency }: StatementsState) {\r\n if (!data) return null\r\n\r\n function parseData(data: Record, skipFirst: boolean) {\r\n let parsed: any = {}\r\n Object.keys(data).forEach((key) => {\r\n parsed[key] = data[key]\r\n .map((value, index) => {\r\n if (isChartable(key)) {\r\n let parsedValue\r\n if (value === '') {\r\n parsedValue = null\r\n } else {\r\n parsedValue = parseFloat(value.replace(/,/g, ''))\r\n }\r\n return {\r\n name: data['Period End Date'][index],\r\n value: parsedValue,\r\n }\r\n }\r\n return null\r\n })\r\n .slice(skipFirst ? 1 : 0)\r\n })\r\n\r\n return parsed as Record>\r\n }\r\n\r\n function isChartable(label: string) {\r\n switch (label) {\r\n case 'Period End Date':\r\n case 'Period Length':\r\n return false\r\n }\r\n\r\n return true\r\n }\r\n\r\n function isHighlightRow(label: string) {\r\n switch (label) {\r\n case 'Period End Date':\r\n case 'Total Revenue':\r\n case 'Total Premiums Earned':\r\n case 'Interest Income':\r\n case 'Gross Profit':\r\n case 'Total Operating Expense':\r\n case 'Operating Income':\r\n case 'Net Income Before Taxes':\r\n case 'Net Income':\r\n case 'Total Current Assets':\r\n case 'Total Assets':\r\n case 'Total Current Liabilities':\r\n case 'Total Liabilities':\r\n case 'Total Equity':\r\n case 'Total Liabilities and Equity':\r\n case 'Cash from Operating Activities':\r\n case 'Cash from Investing Activities':\r\n case 'Cash from Financing Activities':\r\n case 'Net Change in Cash':\r\n case 'Price To Earnings Ratio':\r\n case 'Price to Book Ratio':\r\n case 'Price to Free Cash Flow':\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n const cellClass = hasRedesignEnabled ? '' : 'snapshot-td2'\r\n\r\n const skipFirst = data['Period End Date'][0] === 'TTM'\r\n const parsedData = parseData(data, skipFirst)\r\n const adRowIndexStart = !hasRedesignEnabled && data['Period Length'] ? 2 : 1\r\n\r\n return (\r\n <>\r\n \r\n \r\n {Object.keys(data).map((key, rowIndex) => (\r\n \r\n {key}\r\n \r\n {isChartable(key) && }\r\n \r\n {data[key].map((value, index) => {\r\n if (!FinvizSettings.hasUserPremium) {\r\n if (rowIndex === adRowIndexStart && index === 3) {\r\n return (\r\n \r\n \r\n \r\n

Upgrade your FINVIZ experience

\r\n

\r\n Join thousands of traders who make more informed decisions with our premium\r\n features. Real-time quotes, advanced visualizations, historical statements, and much\r\n more.\r\n

\r\n \r\n Learn more\r\n \r\n \r\n )\r\n }\r\n if (\r\n index > 2 &&\r\n ((hasRedesignEnabled && key !== 'Period End Date') ||\r\n (key !== 'Period End Date' && key !== 'Period Length'))\r\n ) {\r\n return null\r\n }\r\n }\r\n\r\n return (\r\n \r\n {value}\r\n \r\n )\r\n })}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n values in Millions, {currency}\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default Statements\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString } from '../queryString'\r\n\r\nconst CORRELATION_LINKS_CONTAINER_SELECTOR = 'js-quote-correlation-links-container'\r\nconst MULTITICKER_CHART_ELEMENT_SELECTOR = 'js-multi-ticker-chart'\r\nconst SET_SEARCH_EXT_SELECTOR = 'js-set-search-ext-argument'\r\n\r\nexport function useStockDetailUpdater() {\r\n const location = useLocation()\r\n const { p, ty } = decodeQueryString(location.search)\r\n const isInitializedRef = React.useRef(false)\r\n const [isStockDetailUpdating, setIsStockDetailUpdating] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const multiTickerElements = document.getElementsByClassName(MULTITICKER_CHART_ELEMENT_SELECTOR)\r\n const correlationElements = document.getElementsByClassName(CORRELATION_LINKS_CONTAINER_SELECTOR)\r\n const abortController = new AbortController()\r\n\r\n if (isInitializedRef.current) {\r\n if (multiTickerElements.length > 0) setIsStockDetailUpdating(true)\r\n\r\n fetch(location.pathname + location.search, { signal: abortController.signal })\r\n .then((response) => response.text())\r\n .then((text) => {\r\n const virtualDOM = new DOMParser().parseFromString(text, 'text/html')\r\n\r\n // Multiticker update\r\n if (multiTickerElements.length > 0) {\r\n const multiTickerHtmlElements = Array.from(multiTickerElements) as HTMLImageElement[]\r\n const newMultiTickerHtmlElements = Array.from(\r\n virtualDOM.getElementsByClassName(MULTITICKER_CHART_ELEMENT_SELECTOR)\r\n ) as HTMLImageElement[]\r\n\r\n if (newMultiTickerHtmlElements?.length === multiTickerHtmlElements.length) {\r\n multiTickerHtmlElements.forEach((element, index) => {\r\n element.onload = () => setIsStockDetailUpdating(false)\r\n element.src = newMultiTickerHtmlElements[index].src\r\n })\r\n } else {\r\n setIsStockDetailUpdating(false)\r\n }\r\n }\r\n\r\n // Correlation update\r\n const correlationLinksTableCellHtmlElements = Array.from(correlationElements) as HTMLTableCellElement[]\r\n const newCorrelationLinksTableCellHtmlElements = Array.from(\r\n virtualDOM.getElementsByClassName(CORRELATION_LINKS_CONTAINER_SELECTOR)\r\n ) as HTMLTableCellElement[]\r\n\r\n if (newCorrelationLinksTableCellHtmlElements?.length === correlationLinksTableCellHtmlElements.length) {\r\n correlationLinksTableCellHtmlElements.forEach((element, index) => {\r\n element.innerHTML = newCorrelationLinksTableCellHtmlElements[index].innerHTML\r\n })\r\n }\r\n\r\n // Search function update\r\n const newsearchFunctionWrapperElement = virtualDOM.getElementById(SET_SEARCH_EXT_SELECTOR) as HTMLDivElement\r\n if (newsearchFunctionWrapperElement?.dataset.setSearchExtArgument) {\r\n FinvizSettings.quoteSearchExt = newsearchFunctionWrapperElement.dataset.setSearchExtArgument\r\n }\r\n })\r\n .catch((err) => {\r\n setIsStockDetailUpdating(false)\r\n if (err.name !== 'AbortError') {\r\n Sentry.captureException(err)\r\n }\r\n })\r\n }\r\n isInitializedRef.current = true\r\n return () => {\r\n abortController.abort()\r\n }\r\n // We don't want to trigger effect on any location change just if period or type change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [p, ty])\r\n\r\n return { isStockDetailUpdating }\r\n}\r\n","import { CHART_ELEMENT_ID } from 'finviz-charts/app/constants/common'\r\nimport React, { Suspense } from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport ReactDOMClient from 'react-dom/client'\r\nimport { BrowserRouter } from 'react-router-dom'\r\n\r\nimport { NotificationWrapper } from '../../main/components/notification'\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../main/constants'\r\nimport { useCheckNonIdeaChartMissingConfig } from '../../main/hooks/use-check-non-idea-chart-missing-config'\r\nimport { initIdeaQuotes } from '../../main/modules/charts/util'\r\nimport { ChartLayoutWithGlobalState, FREE_DATE_RANGES, Quote, Theme } from '../charts-lib'\r\nimport { decodeQueryString } from '../queryString'\r\nimport { getInitChartConfig } from '../shared/getInitChartConfig'\r\nimport { ready } from '../shared/ready'\r\nimport ETFHoldings from './etf-holdings'\r\nimport FundamentalCharts from './fundamentalCharts'\r\nimport { Perf } from './quote'\r\nimport { ChartContextQuoteHeader, ManualInitQuoteHeader } from './quote-header'\r\nimport { QUOTE_HEADER_ROOT } from './quote-header/constants'\r\nimport ComparePerfLink from './quote-links/ComparePerfLink'\r\nimport CreateAlertLink from './quote-links/CreateAlertLink'\r\nimport FinancialsLink from './quote-links/FinancialsLink'\r\nimport OptionsChainLink from './quote-links/OptionsChainLink'\r\nimport SaveToPortfolioLink from './quote-links/SaveToPortfolioLink'\r\nimport StockDetailLink from './quote-links/StockDetailLink'\r\nimport { QuoteMenu } from './quote-menu'\r\nimport Statements from './statements'\r\nimport { getChartLayoutSizeConfig, useChartLayoutWidthWatch } from './use-chart-layout-width-watch'\r\nimport { useStockDetailUpdater } from './use-stock-detail-updater'\r\n\r\nif (FinvizSettings.hasUserPremium || FinvizSettings.hasRedesignEnabled) {\r\n import(/* webpackChunkName: \"recent_quotes\" */ '../shared/recent_quotes').then(({ RenderRecentQuotes }) => {\r\n RenderRecentQuotes()\r\n })\r\n}\r\n\r\nconst QuoteMenuPortal = ({ isStockDetailUpdating }: { isStockDetailUpdating: boolean }) => {\r\n const quoteMenuElements = document.getElementsByClassName('quote-menu')\r\n const quoteMenuHtmlElements = Array.from(quoteMenuElements).filter((el) => el instanceof HTMLElement) as HTMLElement[]\r\n\r\n if (quoteMenuHtmlElements.length > 0) {\r\n return (\r\n <>\r\n {quoteMenuHtmlElements.map((quoteMenuElement: HTMLElement, quoteMenuIndex: number) => {\r\n const menuIndex = quoteMenuIndex + 1\r\n return ReactDOM.createPortal(\r\n ,\r\n quoteMenuElement\r\n )\r\n })}\r\n \r\n )\r\n }\r\n return null\r\n}\r\n\r\nconst MENU_LINKS = [\r\n {\r\n selector: 'js-stock-detail-link',\r\n LinkComponent: StockDetailLink,\r\n },\r\n {\r\n selector: 'js-compare-perf-link',\r\n LinkComponent: ComparePerfLink,\r\n },\r\n {\r\n selector: 'js-financials-link',\r\n LinkComponent: FinancialsLink,\r\n },\r\n {\r\n selector: 'js-options-chain-link',\r\n LinkComponent: OptionsChainLink,\r\n },\r\n {\r\n selector: 'js-save-to-portfolio-link',\r\n LinkComponent: SaveToPortfolioLink,\r\n },\r\n {\r\n selector: 'js-create-alert-link',\r\n LinkComponent: CreateAlertLink,\r\n },\r\n]\r\n\r\nconst RenderMenuLinks = () => {\r\n MENU_LINKS.forEach(({ selector, LinkComponent }) => {\r\n const linkElements = document.getElementsByClassName(selector)\r\n const linkHtmlElements = Array.from(linkElements).filter((el) => el instanceof HTMLElement) as HTMLElement[]\r\n\r\n linkHtmlElements.forEach((linkElement, index) => {\r\n const root = ReactDOMClient.createRoot(linkElement)\r\n root.render(\r\n \r\n \r\n \r\n )\r\n })\r\n })\r\n}\r\n\r\nconst ChartLayoutPortal = () => {\r\n useChartLayoutWidthWatch()\r\n const chartEl = document.getElementById(CHART_ELEMENT_ID)\r\n const chartConfig = window.globalChartConfig\r\n const theme = FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light\r\n\r\n if (chartEl && chartConfig) {\r\n const { p = FinvizSettings.defaultPeriod as TIMEFRAME } = decodeQueryString<{ p?: TIMEFRAME }>()\r\n return ReactDOM.createPortal(\r\n ({\r\n ...chart,\r\n dateRange:\r\n FinvizSettings.hasUserPremium || FREE_DATE_RANGES.includes(chart.dateRange ?? '')\r\n ? chart.dateRange\r\n : null,\r\n })),\r\n theme,\r\n }}\r\n parentElement={chartEl}\r\n />,\r\n chartEl\r\n )\r\n }\r\n return null\r\n}\r\n\r\nenum QuotePageType {\r\n StockDetail = 'stockDetail',\r\n Idea = 'idea',\r\n Perf = 'perf',\r\n Options = 'options',\r\n}\r\n\r\nfunction getQuotePageType() {\r\n const { ty, i } = decodeQueryString()\r\n\r\n if (ty === 'p') {\r\n return QuotePageType.Perf\r\n }\r\n if (ty === 'oc') {\r\n return QuotePageType.Options\r\n }\r\n if (i) {\r\n return QuotePageType.Idea\r\n }\r\n\r\n return QuotePageType.StockDetail\r\n}\r\n\r\nfunction getQuoteHeaderElement() {\r\n const quotePageType = getQuotePageType()\r\n\r\n if ([QuotePageType.StockDetail, QuotePageType.Idea].includes(quotePageType)) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const config = window.globalChartConfig\r\n if (config) {\r\n return \r\n }\r\n\r\n return null\r\n}\r\n\r\nconst ReactComponentsContainer = () => {\r\n const { isStockDetailUpdating } = useStockDetailUpdater()\r\n const quotePageType = getQuotePageType()\r\n const isPerfQuotePage = quotePageType === QuotePageType.Perf\r\n const isOptionsQuotePage = quotePageType === QuotePageType.Options\r\n const hasConfig = window.globalChartConfig\r\n\r\n useCheckNonIdeaChartMissingConfig()\r\n\r\n return (\r\n \r\n {hasConfig || isPerfQuotePage || isOptionsQuotePage ? (\r\n \r\n \r\n \r\n ) : null}\r\n {hasConfig && !isOptionsQuotePage && !isPerfQuotePage && (\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nready(() => {\r\n const statementsEl = document.getElementById('statements')\r\n if (statementsEl && window['fetch']) {\r\n const root = ReactDOMClient.createRoot(statementsEl)\r\n root.render()\r\n }\r\n\r\n const etfHoldingsEl = document.getElementById('js-etf-holdings')\r\n if (etfHoldingsEl) {\r\n const root = ReactDOMClient.createRoot(etfHoldingsEl)\r\n root.render(\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const faEl = document.getElementById('js-quote-fa')\r\n if (faEl) {\r\n const root = ReactDOMClient.createRoot(faEl)\r\n root.render()\r\n }\r\n\r\n const reactRootElement = document.getElementById('react-root')\r\n const quoteHeaderRoot = document.getElementById(QUOTE_HEADER_ROOT)\r\n\r\n if (FinvizSettings.quoteData) {\r\n Quote.create(FinvizSettings.quoteData)\r\n }\r\n\r\n if (window.globalChartConfig && !window.globalChartConfig.idea) {\r\n window.globalChartConfig = getInitChartConfig()\r\n }\r\n\r\n if (reactRootElement) {\r\n if (window.globalChartConfig?.ideaQuotes) {\r\n initIdeaQuotes(window.globalChartConfig.ideaQuotes, window.globalChartConfig)\r\n }\r\n\r\n const root = ReactDOMClient.createRoot(reactRootElement)\r\n\r\n root.render(\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (quoteHeaderRoot) {\r\n const quoteHeaderElement = getQuoteHeaderElement()\r\n if (quoteHeaderElement) {\r\n const root = ReactDOMClient.createRoot(quoteHeaderRoot)\r\n root.render(quoteHeaderElement)\r\n }\r\n }\r\n\r\n RenderMenuLinks()\r\n\r\n if (document.getElementById('app') && window['FinvizQuoteTickers']) {\r\n const appEl = document.getElementById('app')\r\n const root = ReactDOMClient.createRoot(appEl!)\r\n root.render()\r\n }\r\n})\r\n\r\nconst revealRatingButtonsCollection = document.getElementsByClassName('js-reveal-ratings-button')\r\nconst revealRatingButtons = Array.from(revealRatingButtonsCollection) as HTMLButtonElement[]\r\nrevealRatingButtons.forEach((revealRatingButton) => {\r\n revealRatingButton.onclick = (e) => {\r\n e.preventDefault()\r\n const ratingsRowWithTable = revealRatingButton.previousElementSibling\r\n\r\n ratingsRowWithTable?.querySelectorAll('table tr').forEach((rating, index, rows) => {\r\n if (rating.classList.contains('is-last')) {\r\n rating.classList.remove('is-last')\r\n }\r\n\r\n rating.classList.remove('hidden')\r\n\r\n if (index === rows.length - 1) {\r\n rating.classList.add('is-last')\r\n }\r\n })\r\n\r\n revealRatingButton.classList.add('hidden')\r\n window.gtag && window.gtag('event', 'click', { event_category: 'reveal-ratings' })\r\n }\r\n})\r\n","import React from 'react'\r\n\r\nimport { Dialog, useDialogState } from '../../../main/components/dialog'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../main/services/async-modules-utils'\r\nimport { decodeQueryString } from '../../queryString'\r\nimport { saveToPortfolioAsyncModule } from '../save-to-portfolio/async-modules'\r\n\r\ntype SaveToPortfolioLinkProps = {\r\n index: number\r\n}\r\n\r\nexport default function SaveToPortfolioLink({ index }: SaveToPortfolioLinkProps) {\r\n const { t } = decodeQueryString()\r\n const urlTicker = t.split(',')[index]\r\n const dialog = useDialogState()\r\n const isVisible = dialog.useState('open')\r\n\r\n const [saveToPortfolioModule] = useAsyncModule({\r\n ...saveToPortfolioAsyncModule,\r\n shouldLoadModule: isVisible,\r\n })\r\n const SaveToPortfolio = saveToPortfolioModule?.SaveToPortfolio\r\n\r\n return (\r\n <>\r\n {\r\n window.gtag?.('event', 'click', { event_category: 'save-to-portfolio' })\r\n if (e.ctrlKey || e.metaKey) return\r\n e.preventDefault() // needed to prevent opening parent link\r\n dialog.show()\r\n }}\r\n >\r\n Save to Portfolio\r\n \r\n \r\n {SaveToPortfolio ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Dialog, useDialogState } from '../../../main/components/dialog'\r\nimport { Spinner } from '../../../main/components/spinner'\r\nimport { useAsyncModule } from '../../../main/services/async-modules-utils'\r\nimport { decodeQueryString } from '../../queryString'\r\nimport { createAlertAsyncModule } from '../create-alert/async-modules'\r\n\r\ntype CreateAlertLinkProps = {\r\n index: number\r\n}\r\n\r\nexport default function CreateAlertLink({ index }: CreateAlertLinkProps) {\r\n const { t } = decodeQueryString()\r\n const urlTicker = t.split(',')[index]\r\n const dialog = useDialogState()\r\n const isVisible = dialog.useState('open')\r\n\r\n const [createAlertModule] = useAsyncModule({\r\n ...createAlertAsyncModule,\r\n shouldLoadModule: isVisible,\r\n })\r\n const CreateAlert = createAlertModule?.CreateAlert\r\n\r\n return (\r\n <>\r\n {\r\n window.gtag?.('event', 'click', { event_category: 'create-alert' })\r\n if (e.ctrlKey || e.metaKey) return\r\n e.preventDefault() // needed to prevent opening parent link\r\n dialog.show()\r\n }}\r\n >\r\n Create Alert\r\n \r\n \r\n {CreateAlert ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import { isForexFuturesCryptoPage } from 'finviz-charts/app/utils/chart'\r\nimport * as React from 'react'\r\n\r\nimport { TIMEFRAME } from '../../main/constants'\r\nimport { useWindowSize } from '../../main/hooks/use-window-size'\r\nimport { getIntradayChartConfig, useChartLayoutGlobalModelAsync, useModelState } from '../charts-lib'\r\n\r\nexport function getChartLayoutSizeConfig(\r\n layoutConfig: Pick<\r\n typeof window.globalChartConfig,\r\n 'idea' | 'barWidth' | 'barMargin' | 'charts' | 'specificChartFunctionality'\r\n >,\r\n p = TIMEFRAME.d\r\n) {\r\n const { clientWidth } = document.body\r\n const { premarket, aftermarket, dateRange } = layoutConfig.charts[0]\r\n const maxChartWidth = clientWidth - 40 // 40px left right chart padding = (19px * 2 for margin left/right) + (1px * 2 for border)\r\n let width = 990\r\n let barWidth = 3\r\n let barMargin = 1\r\n let timeframeMinutes = 0\r\n const isForexFuturesCrypto =\r\n layoutConfig.specificChartFunctionality && isForexFuturesCryptoPage(layoutConfig.specificChartFunctionality)\r\n\r\n switch (p) {\r\n case TIMEFRAME.i1:\r\n timeframeMinutes = 1\r\n barWidth = 1\r\n if (premarket || aftermarket || clientWidth < 1650) {\r\n barMargin = 0\r\n }\r\n break\r\n case TIMEFRAME.i2:\r\n timeframeMinutes = 2\r\n break\r\n case TIMEFRAME.i3:\r\n timeframeMinutes = 3\r\n if (premarket && aftermarket && clientWidth <= 1505) {\r\n barWidth = 2\r\n }\r\n break\r\n case TIMEFRAME.i5:\r\n timeframeMinutes = 5\r\n barWidth = 5\r\n barMargin = clientWidth >= 1100 ? 2 : 1\r\n break\r\n case TIMEFRAME.i10:\r\n width = 1058 // 39bars per day * 5days * 5px per bar + 35px left offset + 48px right offset\r\n barMargin = 0\r\n break\r\n case TIMEFRAME.i15:\r\n case TIMEFRAME.i30:\r\n width = 1019\r\n break\r\n case TIMEFRAME.h:\r\n width = 1008\r\n break\r\n case TIMEFRAME.h2:\r\n case TIMEFRAME.h4:\r\n width = 1020\r\n break\r\n case TIMEFRAME.d:\r\n width = 1282\r\n break\r\n case TIMEFRAME.w:\r\n case TIMEFRAME.m:\r\n width = 994\r\n break\r\n }\r\n\r\n switch (p) {\r\n case TIMEFRAME.i1:\r\n case TIMEFRAME.i2:\r\n case TIMEFRAME.i3:\r\n case TIMEFRAME.i5:\r\n const commonProps = {\r\n timeframeMinutes,\r\n barWidthWithMargin: barWidth + 2 + barMargin,\r\n hasAftermarket: aftermarket,\r\n hasPremarket: premarket,\r\n }\r\n width = getIntradayChartConfig({\r\n ...commonProps,\r\n maxWidth: maxChartWidth,\r\n canCropChart: !dateRange,\r\n }).chartWidthWithOffset\r\n break\r\n }\r\n\r\n // If FFC chart use DAILY type width\r\n if (isForexFuturesCrypto) width = 1282\r\n\r\n // If chart is wider than available space in vieport override width\r\n if (maxChartWidth <= width) {\r\n width = Math.max(994, maxChartWidth)\r\n if (p === TIMEFRAME.d) {\r\n barWidth = 2\r\n barMargin = 0\r\n width = 991\r\n }\r\n }\r\n\r\n // If idea chart or FFC chart use bar configs from layout\r\n if (layoutConfig.idea || isForexFuturesCrypto) {\r\n barWidth = layoutConfig.barWidth\r\n barMargin = layoutConfig.barMargin\r\n }\r\n\r\n return {\r\n width,\r\n barWidth,\r\n barMargin,\r\n }\r\n}\r\n\r\nexport function useChartLayoutWidthWatch() {\r\n const { innerWidth } = useWindowSize()\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const unwatchedFirstChart = React.useMemo(() => chartLayoutModel?.charts().all()[0] ?? null, [chartLayoutModel])\r\n const chartModel = useModelState(unwatchedFirstChart, { watchProperties: ['quote'] })\r\n const quote = useModelState(chartModel?.quote() ?? null, { watchProperties: ['ticker', 'timeframe', 'isFetching'] })\r\n const ideaId = chartLayoutModel?.idea?.id\r\n\r\n React.useEffect(() => {\r\n const settings = !ideaId ? chartLayoutModel?.settings : null\r\n const timeframe = quote?.timeframe\r\n if (chartLayoutModel && timeframe && settings) {\r\n const { width, barWidth, barMargin } = getChartLayoutSizeConfig(chartLayoutModel.toConfig(), timeframe)\r\n const newSettings = JSON.parse(JSON.stringify(settings))\r\n newSettings.ChartSettings.center.barWidth = barWidth\r\n newSettings.IndicatorSettings.center.barWidth = barWidth\r\n newSettings.ChartSettings.center.barMargin = barMargin\r\n newSettings.IndicatorSettings.center.barMargin = barMargin\r\n chartLayoutModel.updateAttributes({ width, settings: newSettings })\r\n }\r\n // We don't want to trigger this effect on any chartLayoutModel change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [quote?.premarket, quote?.aftermarket, quote?.timeframe, ideaId, innerWidth])\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n throttleWaitInMs?: number\r\n isWatching?: boolean\r\n}\r\n\r\nexport function useWindowSize({ throttleWaitInMs = 300, isWatching = true }: Props = {}) {\r\n const [size, setSize] = React.useState({\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!isWatching) return\r\n\r\n const handleResize = throttle(() => {\r\n setSize({\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n }, throttleWaitInMs)\r\n\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n handleResize.cancel()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [throttleWaitInMs, isWatching])\r\n\r\n return size\r\n}\r\n","import { SpecificChartFunctionality } from '../../main/constants'\r\nimport { ChartConfigChartPaneElement, Instrument, LayoutType, ScaleType, TIMEFRAME, Theme } from '../charts-lib'\r\nimport { getParsedCookies } from './cookie'\r\n\r\ninterface PaneElementProps extends ChartConfigChartPaneElement {\r\n label?: string\r\n fromDate?: string\r\n toDate?: string\r\n min?: number\r\n tickers: string[]\r\n}\r\n\r\ninterface StaticChartConfigProps {\r\n width?: number\r\n height?: number\r\n ticker: string\r\n timeframe: TIMEFRAME\r\n paneElements: PaneElementProps[]\r\n specificChartFunctionality?: SpecificChartFunctionality\r\n colorsOverride?: Array\r\n theme?: Theme\r\n colors?: ReturnType\r\n refreshData?: boolean\r\n}\r\n\r\nexport function getStaticChartConfig({\r\n width = 800,\r\n height = 400,\r\n ticker,\r\n timeframe,\r\n paneElements,\r\n specificChartFunctionality = SpecificChartFunctionality.default,\r\n colorsOverride,\r\n theme,\r\n colors = getCustomColorsFromCookies(),\r\n refreshData = false,\r\n}: StaticChartConfigProps) {\r\n return {\r\n layout: LayoutType['1h1v'],\r\n width,\r\n height,\r\n barWidth: 1,\r\n barMargin: 0,\r\n scrollable: false,\r\n editable: false,\r\n specificChartFunctionality,\r\n colorsOverride,\r\n theme,\r\n colors,\r\n charts: [\r\n {\r\n width: 0,\r\n premarket: false,\r\n aftermarket: false,\r\n dateRange: null,\r\n height,\r\n timeframe,\r\n scale: ScaleType.Linear,\r\n ticker: ticker,\r\n leftOffset: 0,\r\n instrument: Instrument.Stock,\r\n refreshData,\r\n stretch: true,\r\n panes: [\r\n {\r\n height,\r\n elements: paneElements,\r\n },\r\n ],\r\n },\r\n ],\r\n }\r\n}\r\n\r\nexport function getCustomColorsFromCookies() {\r\n try {\r\n return JSON.parse(getParsedCookies('customColors') as string)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as tracking from '../tracking'\r\n\r\nexport const IC_PUBLISHER_ID = 'df0d0d52-cc7f-11e8-82a5-0abbb61c4a6a'\r\n\r\nenum AdTagName {\r\n IC_TickerInContent = 'IC_D_3x3',\r\n IC_MapsLeftRail = 'IC_D_125x125',\r\n IC_Statements = 'IC_D_300x60',\r\n IC_Groups = 'IC_D_300x250',\r\n}\r\n\r\nconst tagDefinition = {\r\n [AdTagName.IC_TickerInContent]: { placements: 3, style: { width: 970, minHeight: 250 } },\r\n [AdTagName.IC_MapsLeftRail]: { placements: 2, style: { width: 125, minHeight: 125 } },\r\n [AdTagName.IC_Statements]: { placements: 1, style: { width: 300, minHeight: 60 } },\r\n [AdTagName.IC_Groups]: { placements: 1, style: { width: 336, minHeight: 280 } },\r\n}\r\n\r\nconst hasInvestingChannelAds = tracking.getAdsProvider() === tracking.AdsProvider.InvestingChannel\r\n\r\n/**\r\n * Get create/destroy methods to control ads insertion\r\n */\r\nexport function getInvestingChannelPage() {\r\n var page: ICPageReturn\r\n\r\n function create() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n let config = window['FINVIZ_IC_UAT_CONFIG'] ?? {}\r\n page = window.InvestingChannel?.UAT.Run(IC_PUBLISHER_ID, config)\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n function destroy() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n page?.destroy()\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n return { create, destroy }\r\n}\r\n\r\n/**\r\n * Hook which recreates ads on deps change (SPA navigation,…)\r\n */\r\nexport function useInvestingChannelAds(deps: unknown[] = []) {\r\n React.useLayoutEffect(() => {\r\n const page = getInvestingChannelPage()\r\n\r\n page.create()\r\n\r\n return () => page.destroy()\r\n // eslint cannot statically check the dependencies and complains about it\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, deps)\r\n\r\n return hasInvestingChannelAds\r\n}\r\n\r\ninterface AdTagProps extends Omit, 'name'> {\r\n /**\r\n * Name of the ad tag\r\n */\r\n name: keyof typeof AdTagName\r\n\r\n /**\r\n * Manually set the placement position for this tag\r\n *\r\n * @default 1\r\n */\r\n position?: number\r\n\r\n /**\r\n * Additional class names for the wrapper div\r\n */\r\n className?: string\r\n}\r\n\r\nexport function AdTag({ name, position = 1, ...props }: AdTagProps) {\r\n const tagName = AdTagName[name]\r\n const tagProps = tagDefinition[tagName]\r\n const placementName = `${tagName}_${Math.min(Math.max(position, 1), tagProps.placements)}`\r\n\r\n if (!hasInvestingChannelAds) return null\r\n\r\n return
\r\n}\r\n","import { Utils, convertTa } from '../charts-lib'\r\n\r\nexport function getInitChartConfig() {\r\n window.globalChartConfig.scrollable = false\r\n if (FinvizSettings.hasUserPremium) {\r\n window.globalChartConfig.scrollable = window.globalChartConfig.editable || !Utils.isMobile()\r\n }\r\n\r\n if (FinvizSettings.TA) {\r\n const COTs = FinvizSettings.COTs\r\n convertTa.mergeChartAndTAConfig(window.globalChartConfig, FinvizSettings.TA, COTs ? { COTs } : undefined)\r\n }\r\n\r\n return window.globalChartConfig\r\n}\r\n","export enum StatsQuery {\r\n Weighting = 'w',\r\n ChartType = 'ty',\r\n}\r\n\r\nexport enum StatsWeight {\r\n Count = 'c',\r\n MarketCap = 'm',\r\n}\r\n\r\nexport enum StatsChartType {\r\n Pie = 'p',\r\n Bar = 'b',\r\n Table = 't',\r\n}\r\n\r\nexport interface StatsDataRow {\r\n label: string\r\n value: number\r\n}\r\n\r\nexport interface StatsGroup {\r\n [StatsWeight.Count]: StatsDataRow[]\r\n [StatsWeight.MarketCap]: StatsDataRow[]\r\n}\r\n\r\nexport interface StatsData {\r\n sectors: StatsGroup\r\n marketCap: StatsGroup\r\n countries: StatsGroup\r\n industries: StatsGroup\r\n}\r\n\r\nexport type StatsRounding = 'regular' | 'none'\r\n","import * as React from 'react'\r\n\r\nexport interface DelayedProps {\r\n /**\r\n * The delay in milliseconds before the component is rendered.\r\n *\r\n * @default 300\r\n */\r\n delay?: number\r\n\r\n /**\r\n * Delay in milliseconds before rendering timeout state.\r\n */\r\n timeout?: number\r\n\r\n /**\r\n * Throw on timeout (suspense)\r\n */\r\n throwOnTimeout?: boolean\r\n\r\n /**\r\n * Component visible during the delay.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n delayComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when timeout is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n timeoutComponent?: React.ReactNode\r\n\r\n /**\r\n * Component visible when delay is over.\r\n * If rendering text, wrap it in a `span` to prevent error — see PR#608\r\n */\r\n children?: React.ReactNode\r\n}\r\n\r\nexport function Delayed({\r\n delay = 300,\r\n timeout = 0,\r\n throwOnTimeout = false,\r\n delayComponent,\r\n timeoutComponent,\r\n children,\r\n}: DelayedProps) {\r\n const [visible, setVisible] = React.useState(false)\r\n const [hasTimedOut, setHasTimedOut] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const visibilityTimeout = window.setTimeout(() => setVisible(true), delay)\r\n\r\n let failedTimeout: number\r\n if (timeout > 0) {\r\n failedTimeout = window.setTimeout(() => {\r\n setHasTimedOut(true)\r\n if (throwOnTimeout) throw new Error()\r\n }, timeout)\r\n }\r\n\r\n return () => {\r\n clearTimeout(visibilityTimeout)\r\n clearTimeout(failedTimeout)\r\n }\r\n }, [delay, timeout, throwOnTimeout])\r\n\r\n if (!visible) return <>{delayComponent}\r\n\r\n if (hasTimedOut) {\r\n return <>{timeoutComponent}\r\n }\r\n\r\n return <>{children}\r\n}\r\n","import * as React from 'react'\r\n\r\nexport type NotificationContextType = ReturnType\r\n\r\nexport enum NotificationPosition {\r\n TopLeft,\r\n TopRight,\r\n BottomLeft,\r\n BottomRight,\r\n}\r\n\r\nexport interface NotificationOptions {\r\n position?: NotificationPosition\r\n inline?: boolean\r\n}\r\n\r\nexport const NotificationContext = React.createContext<{\r\n show: (element: JSX.Element, options?: NotificationOptions) => void\r\n hide: () => void\r\n}>({\r\n show: () => {},\r\n hide: () => {},\r\n})\r\n\r\nexport function useNotification() {\r\n return React.useContext(NotificationContext)\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { getVisualViewport, useVisualViewport } from '../../hooks/useVisualViewport'\r\nimport { NotificationContext, NotificationOptions, NotificationPosition } from './hooks'\r\n\r\ninterface NotificationState {\r\n element: JSX.Element\r\n options: Partial\r\n}\r\n\r\nexport function NotificationWrapper(props: React.PropsWithChildren) {\r\n const [isOpen, setIsOpen] = React.useState(false)\r\n const [notification, setNotification] = React.useState(null)\r\n const { viewport, setViewport } = useVisualViewport({ enabled: !!notification })\r\n\r\n const context = React.useRef({\r\n show: (element: JSX.Element, options: Partial = {}) => {\r\n setViewport(() => getVisualViewport(window.visualViewport))\r\n setNotification({ element, options })\r\n setIsOpen(true)\r\n },\r\n hide: () => setIsOpen(false),\r\n })\r\n\r\n const positionClass = React.useMemo(() => {\r\n const { position = NotificationPosition.BottomLeft } = notification?.options ?? {}\r\n return {\r\n '[--inset-t:1rem] items-start pt-inset-top': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.TopRight,\r\n ].includes(position),\r\n '[--inset-r:1rem] justify-end landscape-secondary:pr-inset-right': [\r\n NotificationPosition.TopRight,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-b:1rem] items-end pb-inset-bottom': [\r\n NotificationPosition.BottomLeft,\r\n NotificationPosition.BottomRight,\r\n ].includes(position),\r\n '[--inset-l:1rem] justify-start landscape-primary:pl-inset-left': [\r\n NotificationPosition.TopLeft,\r\n NotificationPosition.BottomLeft,\r\n ].includes(position),\r\n }\r\n }, [notification?.options])\r\n\r\n const WrapperComponent = React.useMemo(\r\n () => (notification?.options.inline ? React.Fragment : Ariakit.Portal),\r\n [notification?.options.inline]\r\n )\r\n\r\n return (\r\n \r\n {props.children}\r\n {isOpen && (\r\n \r\n \r\n {notification?.element}\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { NotificationContextType, useNotification } from './hooks'\r\n\r\nexport function withNotificationContext(\r\n WrappedComponent: React.ComponentType\r\n) {\r\n const displayName = WrappedComponent.displayName ?? WrappedComponent.name ?? 'Component'\r\n const WithNotificationContext = (props: Omit) => {\r\n const notification = useNotification()\r\n return \r\n }\r\n\r\n WithNotificationContext.displayName = `withNotificationContext(${displayName})`\r\n\r\n return WithNotificationContext\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button } from '../button'\r\nimport { useNotification } from './hooks'\r\n\r\ninterface NotificationProps {\r\n className?: string\r\n /**\r\n * Default button text\r\n * @default Close\r\n */\r\n closeText?: string\r\n\r\n /**\r\n * Custom buttons. Overrides `closeText`\r\n */\r\n actions?: JSX.Element\r\n\r\n /**\r\n * When set, the notification will automatically close\r\n */\r\n timeoutInMs?: number\r\n}\r\n\r\nexport function Notification({\r\n className,\r\n closeText = 'Close',\r\n actions,\r\n timeoutInMs,\r\n children,\r\n}: React.PropsWithChildren) {\r\n const notification = useNotification()\r\n\r\n React.useEffect(() => {\r\n let timeoutId: number\r\n if (timeoutInMs) {\r\n timeoutId = window.setTimeout(() => {\r\n notification.hide()\r\n }, timeoutInMs)\r\n }\r\n\r\n return () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n }\r\n }\r\n }, [notification, timeoutInMs])\r\n\r\n return (\r\n \r\n
{children}
\r\n
\r\n {actions ?? (\r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString } from '../../app/queryString'\r\n\r\nexport function useCheckNonIdeaChartMissingConfig() {\r\n const location = useLocation()\r\n\r\n React.useEffect(() => {\r\n // Navigation (back/forward) from nonexisting idea page doesn't fully reload the page\r\n // So if we're on non idea page and have still isIdeaNotFoundPage flag we want to reload the page\r\n const { i } = decodeQueryString(location.search)\r\n if (!i && window.isIdeaNotFoundPage) {\r\n window.location.reload()\r\n }\r\n }, [location.search])\r\n}\r\n","import Quote from 'finviz-charts/app/models/quote'\r\n\r\nimport { convertTa } from '../../../app/charts-lib'\r\nimport { ObjectHash } from '../../components/types'\r\nimport { getInstrumentForTicker } from '../../util'\r\n\r\nconst PADDING = 2 // Border widths\r\n\r\nexport function getChartsDimensions(chartElementId: string) {\r\n const containerElement = document.getElementById(chartElementId)\r\n\r\n const box = containerElement?.getBoundingClientRect()\r\n\r\n return {\r\n width: Math.max((box?.width ?? 0) - PADDING, 0),\r\n height: Math.max((box?.height ?? 0) - PADDING, 0),\r\n }\r\n}\r\n\r\nexport function getChartConfig(idea: any, chartElementId: string) {\r\n const chartsDimensions = getChartsDimensions(chartElementId)\r\n\r\n if (idea) {\r\n const chartConfig = Object.assign({}, FinvizChartsSettings.ideaChart, {\r\n colors: FinvizChartsSettings.colors,\r\n width: chartsDimensions.width,\r\n height: chartsDimensions.height,\r\n scrollable: true,\r\n editors: ['layout', 'settings', 'publish', 'tools'],\r\n })\r\n for (let i = 0; i < chartConfig.charts.length; i++) {\r\n if (!chartConfig.charts[i].instrument) {\r\n chartConfig.charts[i].instrument = 'stock'\r\n }\r\n }\r\n\r\n return chartConfig\r\n }\r\n\r\n return {\r\n newCharts: true,\r\n width: chartsDimensions.width,\r\n height: chartsDimensions.height,\r\n barWidth: 3,\r\n barMargin: 1,\r\n scrollable: true,\r\n alignChartsToRight: true,\r\n theme: FinvizChartsSettings.theme,\r\n colors: FinvizChartsSettings.colors,\r\n editors: ['layout', 'settings', 'publish', 'tools'],\r\n layout: FinvizChartsSettings.layout,\r\n charts: FinvizChartsSettings.tickers.map(function (ticker: string, index: number) {\r\n return {\r\n timeframe: FinvizChartsSettings.periods[index],\r\n dateRange: FinvizChartsSettings.ranges[index],\r\n scale: FinvizChartsSettings.taConfig.scale || 'linear',\r\n ticker: ticker,\r\n instrument: getInstrumentForTicker(ticker),\r\n premarket: FinvizChartsSettings.taConfig.premarket,\r\n aftermarket: FinvizChartsSettings.taConfig.aftermarket,\r\n hasChartEvents: FinvizChartsSettings.taConfig.hasChartEvents,\r\n refreshData: true,\r\n panes: convertTa.getPanes(FinvizChartsSettings.taConfig),\r\n }\r\n }),\r\n }\r\n}\r\n\r\nexport const initIdeaQuotes = (quotes: Array, ideaChart: ObjectHash) => {\r\n const hasPatterns = JSON.stringify(ideaChart).includes('patterns')\r\n\r\n for (let i = 0; i < quotes.length; i++) {\r\n const quote = quotes[i]\r\n\r\n if (quote.timeframe === 'i1' || quote.timeframe === 'i3' || quote.timeframe === 'i5' || quote.timeframe === 'i15') {\r\n if (!quote.hasOwnProperty('drawMinutesPerDay')) {\r\n quote.drawMinutesPerDay = quote.timeframe === 'i15' ? 390 : 420\r\n }\r\n\r\n if (!quote.hasOwnProperty('marketStartMinutes')) {\r\n quote.marketStartMinutes = quote.timeframe === 'i15' ? 570 : 540\r\n }\r\n\r\n if (!quote.hasOwnProperty('premarketLengthMinutes')) {\r\n quote.premarketLengthMinutes = quote.timeframe === 'i15' ? 0 : 30\r\n }\r\n\r\n if (!quote.hasOwnProperty('aftermarketLengthMinutes')) {\r\n quote.aftermarketLengthMinutes = 0\r\n }\r\n }\r\n\r\n if (!quote.hasOwnProperty('hasPatterns')) {\r\n quote.hasPatterns = hasPatterns\r\n }\r\n\r\n quote.ideaID = ideaChart.idea.id\r\n\r\n Quote.create(quote)\r\n }\r\n}\r\n","/**\n * React Router DOM v6.16.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_mapRouteProperties, Router, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, UNSAFE_DataRouterStateContext, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, unstable_useBlocker, UNSAFE_DataRouterContext } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, RouterProvider, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, resolvePath, unstable_useBlocker, useActionData, useAsyncError, useAsyncValue, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `
`/`` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a