{"version":3,"file":"js/application-8e6f46314dffa87d86e2.js","mappings":"+FAAA,IAAIA,EAAM,CACT,mCAAoC,KACpC,0CAA2C,MAI5C,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOG,EAAoBF,EAC5B,CACA,SAASC,EAAsBF,GAC9B,IAAIG,EAAoBC,EAAEN,EAAKE,GAAM,CACpC,IAAIK,EAAI,IAAIC,MAAM,uBAAyBN,EAAM,KAEjD,MADAK,EAAEE,KAAO,mBACHF,CACP,CACA,OAAOP,EAAIE,EACZ,CACAD,EAAeS,KAAO,WACrB,OAAOC,OAAOD,KAAKV,EACpB,EACAC,EAAeW,QAAUR,EACzBS,EAAOC,QAAUb,EACjBA,EAAeE,GAAK,I,4GCepB,MAnCqBY,IAAmB,IAAlB,SAAEC,GAAUD,EAChC,MAAOE,EAAiBC,IAAsBC,EAAAA,EAAAA,UAAS,MACjDC,GAAWC,EAAAA,EAAAA,MAqBjB,OAnBAC,EAAAA,EAAAA,YAAU,KACUC,WAChB,IACE,MAAMC,QAAiBC,MAAM,8BAC7B,GAAID,EAASE,GAAI,OACIF,EAASG,OAC5BT,GAAmB,EACrB,MACEA,GAAmB,EAEvB,CAAE,MAAOU,GACPC,QAAQD,MAAM,iCAAkCA,GAChDV,GAAmB,EACrB,GAGFY,EAAW,GACV,IAEqB,OAApBb,EAEK,KAGFA,EACLD,EAEAe,EAAAA,cAACC,EAAAA,GAAQ,CAACC,GAAG,cAAcC,MAAO,CAAEC,KAAMf,GAAYgB,SAAO,GAC9D,EC4GH,MA7IgBrB,IAAkE,IAAjE,MAAEsB,EAAK,QAAEC,EAAO,UAAEC,EAAS,QAAEC,EAAO,UAAEC,EAAY,SAAS1B,EAC1E,MAAO2B,EAASC,IAAcxB,EAAAA,EAAAA,WAAS,IAEvCG,EAAAA,EAAAA,YAAU,KACR,GAAIiB,EAAW,CACb,MAAMK,EAAQC,YAAW,KACvBF,GAAW,EAAK,GACf,KAEH,MAAO,IAAMG,aAAaF,EAC5B,IACC,CAACL,IA+CJ,OAAKA,EAGHR,EAAAA,cAAA,OACEgB,UAAU,mBACVC,MAAO,IAlDgBC,MACzB,MAAMC,EAAa,CACjBC,SAAU,WACVC,OAAQ,KAGV,MACO,UADCX,EAEG,IACFS,EACHG,KAAM,OACNC,IAAK,MACLC,UAAW,mBACXC,WAAY,QAGPN,CAAW,EAmCfD,GACHQ,MAAO,QACPC,UAAW,8BACXC,OAAQ,4BACRC,UAAWlB,EAAU,oCAAsC,SAG7DX,EAAAA,cAAA,aACI,2xCA8BJA,EAAAA,cAAA,OACEiB,MAAO,IAtEUa,MACrB,MAAMX,EAAa,CACjBC,SAAU,WACVM,MAAO,OACPK,OAAQ,OACRC,gBAAiB,UACjBJ,OAAQ,4BACRJ,UAAW,gBACXG,UAAW,kCAGb,MACO,UADCjB,EAEG,IACFS,EACHG,KAAM,OACNC,IAAK,kBACLU,YAAa,OACbC,UAAW,QAGNf,CAAW,EAkDbW,GACHD,UAAWlB,EAAU,kCAAoC,UAK7DX,EAAAA,cAAA,OACEgB,UAAU,yCACVC,MAAO,CACLkB,WAAY,8CAGdnC,EAAAA,cAAA,MAAIgB,UAAU,6BAA6BV,IAI7CN,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,KAAGgB,UAAU,iBAAiBC,MAAO,CAAEmB,SAAU,YAC9C7B,GAEHP,EAAAA,cAAA,OAAKgB,UAAU,8BACbhB,EAAAA,cAAA,UACEgB,UAAU,8BACVqB,QAAS5B,EACTQ,MAAO,CACLU,UAAW,4BACXW,WAAY,QAEf,aA1Ec,IA+Ef,EC3IH,MAAMC,EAAkBC,IAC7B,MACMC,EADS,KAAIC,SAASC,SACRC,MAAO,KAAIJ,MAC/B,OAAqB,IAAjBC,EAAMI,OACDJ,EAAMK,MAAMF,MAAM,KAAKG,QAEzB,GAAG,ECDNC,EAAsB,sBAqM5B,MAlMgBhE,IAA6B,IAA5B,WAAEiE,GAAa,GAAOjE,EACrC,MAAOkE,EAAkBC,IAAuB/D,EAAAA,EAAAA,WAAS,GACnDgE,GAAWC,EAAAA,EAAAA,OACVxD,EAAOyD,GAAYtD,EAAAA,SAAe,OAClCuD,EAAOC,GAAYxD,EAAAA,SAAe,OAEzCT,EAAAA,EAAAA,YAAU,KAcRkE,IAAgBC,MAAK,KACL,UAAVH,GAdoBI,MAGxB,GAFkBC,SAASrB,EAAeS,IAVtB,EAYe,CAEjC,MAAMnC,EAAQC,YAAW,KACvBqC,GAAoB,EAAK,GACxB,IAGL,GAKEQ,EACF,GACA,GACD,CAACJ,IAEJ,MAAMM,EAAqBA,KACzBV,GAAoB,GAGpB,MAAMW,EAAYF,SAASrB,EAAeS,ID9BrBe,EAACvB,EAAMwB,KAE9B,MAAMC,EAAO,IAAIC,KACjBD,EAAKE,YAAYF,EAAKG,cAAgB,GACtC1B,SAASC,OAAU,GAAEH,KAAQwB,aAAiBC,EAAKI,sBAAsB,EC2BvEN,CAAUf,EAAqBc,EAAY,EAAE,EAGzCL,EAAgBjE,UACpB,MAAMC,QAAiBC,MAAM,6BAA8B,CACzD4E,QAAS,CACP,OAAU,sBAGRC,QAAa9E,EAASG,OAC5B4D,EAASe,EAAKhB,MAAM,EAGhBiB,EAAQxE,EAAAA,SAAc,KAC1B,MAAMyE,EAAY,CAChB,CAAEjC,KAAM,WAAYkC,KAAM,wBAC1B,CAAElC,KAAM,iBAAkBkC,KAAM,8BAChC,CAAElC,KAAM,kBAAmBkC,KAAM,gCAqBnC,MAlBc,UAAVnB,GACFkB,EAAUE,KAAK,CACbnC,KAAM,QACNkC,KAAM,oBACNE,QAAS,CACPtE,MAAO,eACPC,QACEP,EAAAA,cAAAA,EAAAA,SAAA,KAAE,qEACmE,IACnEA,EAAAA,cAAC6E,EAAAA,GAAI,CAAC3E,GAAG,oBAAoBc,UAAU,eAAeqB,QAASwB,GAAoB,0BAStFY,CAAS,GACf,CAAClB,IAEEuB,EAAetF,UACnB,WACyBE,MAAM,yBAA0B,CACrDqF,OAAQ,SACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,YAIrDZ,GACXyD,EAAS,gBAETE,EAAS,oCACTxC,YAAW,IAAMwC,EAAS,OAAO,KAErC,CAAE,MAAOzD,GACPyD,EAAS,kDACTxC,YAAW,IAAMwC,EAAS,OAAO,IACnC,GAGI2B,EAAiBP,GACdQ,OAAO7F,SAAS8F,WAAaT,EAGhCU,EAAcA,IACbvF,EAGHG,EAAAA,cAAA,OAAKgB,UAAU,iDAAiDqE,KAAK,QAAQpE,MAAO,CAClFG,SAAU,QACVG,IAAK,OACLD,KAAM,MACNE,UAAW,mBACXH,OAAQ,KACRiE,SAAU,UAETzF,EACDG,EAAAA,cAAA,UAAQuF,KAAK,SAASvE,UAAU,YAAYqB,QAASA,IAAMiB,EAAS,MAAO,aAAW,WAZvE,KAiBrB,OAAIL,EAEAjD,EAAAA,cAAAA,EAAAA,SAAA,KACGoF,IACDpF,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,MAAIgB,UAAU,gBACXwD,EAAMvG,KAAKuH,GACVxF,EAAAA,cAAA,MAAIgB,UAAU,WAAWyE,IAAKD,EAAKhD,KAAMvB,MAAO,CAAEG,SAAU,aAC1DpB,EAAAA,cAAA,KACE0F,KAAMF,EAAKd,KACX1D,UAAY,aAAWiE,EAAcO,EAAKd,MAAQ,SAAW,KAE5Dc,EAAKhD,MAEPgD,EAAKZ,SAAW1B,GACflD,EAAAA,cAAC2F,EAAO,CACNrF,MAAOkF,EAAKZ,QAAQtE,MACpBC,QAASiF,EAAKZ,QAAQrE,QACtBC,WAAW,EACXC,QAASoD,EACTnD,UAAU,aAKlBV,EAAAA,cAAA,MAAIgB,UAAU,YACZhB,EAAAA,cAAA,UACEqC,QAASyC,EACT9D,UAAU,wBACX,cAWXhB,EAAAA,cAAA,OAAKgB,UAAU,qBACZoE,IACDpF,EAAAA,cAAA,OAAKgB,UAAU,iDACbhB,EAAAA,cAAA,OAAKgB,UAAU,0CACZwD,EAAMvG,KAAKuH,GACVxF,EAAAA,cAAA,OAAKyF,IAAKD,EAAKhD,KAAMvB,MAAO,CAAEG,SAAU,aACtCpB,EAAAA,cAAC6E,EAAAA,GAAI,CACH3E,GAAIsF,EAAKd,KACT1D,UAAY,8DACViE,EAAcO,EAAKd,MAAQ,eAAiB,KAG7Cc,EAAKhD,MAEPgD,EAAKZ,SAAW1B,GACflD,EAAAA,cAAC2F,EAAO,CACNrF,MAAOkF,EAAKZ,QAAQtE,MACpBC,QAASiF,EAAKZ,QAAQrE,QACtBC,WAAW,EACXC,QAASoD,EACTnD,UAAU,aAKlBV,EAAAA,cAAA,UACEqC,QAASyC,EACT9D,UAAU,6DACX,YAKD,EC/KV,MApBehC,IAAmB,IAAlB,SAAEC,GAAUD,EAC1B,OACEgB,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,OAAKgB,UAAU,yBACbhB,EAAAA,cAAA,OAAKiB,MAAO,CAAES,MAAO,SAAWV,UAAU,qBACxChB,EAAAA,cAAC4F,EAAO,OAGV5F,EAAAA,cAAA,OAAKiB,MAAO,CAAE4E,KAAM,EAAGP,SAAU,UAC/BtF,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAC4F,EAAO,CAAC3C,YAAY,KAGtBhE,IAGD,ECqCV,MAtDgBD,IAAkD,IAAjD,KAAE8G,EAAI,MAAEpE,EAAK,SAAEN,EAAW,MAAK,SAAEnC,GAAUD,EAC1D,MAAOwB,EAAWuF,IAAgB3G,EAAAA,EAAAA,WAAS,GAErC4G,EAAe,CACnB5E,SAAU,WACVY,gBAAiB,qBACjBiE,MAAO,QACPC,QAAS,WACTC,aAAc,MACd/D,SAAU,OACVgE,cAAe,OACfC,cAAe,MACfC,WAAY,wBACZhE,WAAY,MACZjB,OAAQ,IACRkF,WAAY7E,EAAQ,SAAW,SAC/BA,MAAOA,QAAS8E,KACC,QAAbpF,EAAqB,CACvBqF,OAAQ,OACRnF,KAAM,MACNE,UAAW,mBACXkF,aAAc,OACZ,CACFnF,IAAK,OACLD,KAAM,MACNE,UAAW,mBACXmF,UAAW,QAYf,OACE3G,EAAAA,cAAA,OACEiB,MAVmB,CACrBG,SAAU,WACVwF,QAAS,eACTC,SAAU,QACVN,WAAY,SACZO,SAAU,cAMRC,aAAcA,IAAMhB,GAAa,GACjCiB,aAAcA,IAAMjB,GAAa,IAEhCvF,GACCR,EAAAA,cAAA,OAAKiB,MAAO+E,GACTF,GAGJ7G,EACG,EClDV,MAAMgI,EAAQ,CACZC,QACElH,EAAAA,cAAA,QAAMmH,EAAE,4LAEVC,OACEpH,EAAAA,cAAA,QAAMmH,EAAE,2PAEVE,QACErH,EAAAA,cAAA,QAAMmH,EAAE,uRAkCZ,MA9BcnI,IAAqC,IAApC,KAAEuG,EAAO,UAAS,SAAEtG,GAAUD,EAC3C,MAAMsI,EAAmB,YAAT/B,EAAqB,UAAqB,WAATA,EAAoB,SAAW,UAEhF,OACEvF,EAAAA,cAAA,OACEgB,UAAY,eAA0B,YAAZsG,EAAwBA,EAAW,GAAEA,8FAAoGA,IACnKjC,KAAK,QACLpE,MAAmB,YAAZqG,EAAwB,CAAEtF,gBAAiB,gBAAcwE,GAE/DS,EAAM1B,IACLvF,EAAAA,cAAA,OACEuH,MAAM,6BACN7F,MAAM,KACNK,OAAO,KACPyF,KAAkB,YAAZF,EAAwB,UAAY,eAC1CtG,UAAU,wBACVyG,QAAQ,YACRpC,KAAK,MACL,aAAYE,EAAKmC,OAAO,GAAGC,cAAgBpC,EAAKqC,MAAM,IAErDX,EAAM1B,IAGXvF,EAAAA,cAAA,OAAKgB,UAAU,aACZ/B,GAEC,ECrCH,SAAS4I,EAAcC,GAA0B,IAClDC,EAD+BC,IAASC,UAAApF,OAAA,QAAA2D,IAAAyB,UAAA,KAAAA,UAAA,GAG1CF,EADmB,kBAAVD,EACEI,WAAWJ,EAAMzH,QAAQ,UAAW,KAEpC2H,GAAaF,EAAQ,KAAKK,QAAQ,GAAKC,KAAKC,MAAMP,EAAQ,KAIvE,MAAOQ,EAAOC,GAAWR,EAASS,WAAW5F,MAAM,KAMnD,MAAQ,IAHW0F,EAAMjI,QAAQ,wBAAyB,OAGlC2H,EAAaO,EAAU,IAAMA,EAAU,MAAS,IAC1E,CAKO,SAASE,EAA6BX,GAC3C,GAAqB,kBAAVA,EACT,OAAe,IAARA,EAIT,MAAMY,EAAeZ,EAAMzH,QAAQ,QAAS,IAGtCsI,EAAUT,WAAWQ,GAC3B,OAAON,KAAKC,MAAgB,IAAVM,EACpB,CCjCA,MAAMC,EAAUA,IACd5I,EAAAA,cAAA,OACE0B,MAAM,KACNK,OAAO,KACP0F,QAAQ,YACRD,KAAK,OACLD,MAAM,6BACNvG,UAAU,gBAEVhB,EAAAA,cAAA,QACEmH,EAAE,+BACF0B,OAAO,UACPC,YAAY,OAKZC,EAAc/J,IAA0E,IAAzE,KAAEwD,EAAI,OAAEwG,EAAM,aAAEC,EAAY,SAAEC,EAAQ,SAAEC,EAAQ,UAAEC,EAAS,KAAEC,GAAMrK,EACtF,MAAOsK,EAAQC,GAAavJ,EAAAA,UAAe,GACrCwJ,EAAcxJ,EAAAA,OAAa,OAC1ByJ,EAAUC,GAAe1J,EAAAA,SAAeiJ,GAAcU,KAAO,KAC7DC,EAAUC,GAAe7J,EAAAA,SAAeiJ,GAAca,KAAO,IAEpE9J,EAAAA,WAAgB,KACd,MAAM+J,EAAsBC,IACtBR,EAAYS,UAAYT,EAAYS,QAAQC,SAASF,EAAMG,SAC7DZ,GAAU,EACZ,EAIF,OADA7G,SAAS0H,iBAAiB,YAAaL,GAChC,KACLrH,SAAS2H,oBAAoB,YAAaN,EAAmB,CAC9D,GACA,IAEH,MAYMO,EAAetG,IACnB,IAAKA,EAAO,MAAO,SACnB,GAAmB,SAAfqF,EAAKrF,MAAkB,CACzB,MAAMC,EAAO,IAAIC,KAAa,IAARF,GAChBuG,EAAsC,IAA3BtG,EAAKuG,oBAEtB,OADqB,IAAItG,KAAKD,EAAKwG,UAAYF,GAC3BG,oBACtB,CACA,MAAyB,WAAlBrB,EAAKhK,SAAyB,GAAEgK,EAAKrF,QAAQA,IAAW,GAAEA,IAAQqF,EAAKrF,OAAO,EAGjF2G,EAAcA,CAAC3G,EAAO4G,EAAUC,IACjB,SAAfxB,EAAKrF,MAELhE,EAAAA,cAAA,SACEuF,KAAK,OACLvE,UAAU,eACVgD,MAAOA,EAAQ,IAAIE,KAAa,IAARF,GAAc8G,cAAclD,MAAM,EAAG,IAAM,GACnEsB,SAAW1K,IACT,MAAMuM,EAAe,IAAI7G,KAAK1F,EAAE2L,OAAOnG,MAAQ,kBACzCgH,EAAY5C,KAAK6C,MAAMF,EAAaN,UAAY,KACtDG,EAASI,EAAU,EAErBH,YAAaA,EACblB,IAAKX,GAAQW,IAAM,IAAIzF,KAAkB,IAAb8E,EAAOW,KAAYmB,cAAclD,MAAM,EAAG,SAAMpB,EAC5EsD,IAAKd,GAAQc,IAAM,IAAI5F,KAAkB,IAAb8E,EAAOc,KAAYgB,cAAclD,MAAM,EAAG,SAAMpB,IAMhFxG,EAAAA,cAAA,OAAKgB,UAAU,eACM,WAAlBqI,EAAKhK,UAAyBW,EAAAA,cAAA,QAAMgB,UAAU,oBAAoBqI,EAAKrF,OACxEhE,EAAAA,cAAA,SACEuF,KAAK,SACLvE,UAAU,eACVgD,MAAOA,EACPkF,SAAW1K,GAAMoM,EAASpM,EAAE2L,OAAOnG,OACnC6G,YAAaA,IAEI,UAAlBxB,EAAKhK,UAAwBW,EAAAA,cAAA,QAAMgB,UAAU,oBAAoBqI,EAAKrF,QAKvEkH,EAAejC,EAChB,GAAEqB,EAAYrB,EAAaU,UAAUW,EAAYrB,EAAaa,OAC/DtH,EAEJ,OACExC,EAAAA,cAAA,OAAKgB,UAAU,WAAWmK,IAAK3B,GAC7BxJ,EAAAA,cAAA,UACEgB,UAAY,+BAA6BiI,EAAe,cAAgB,yBACxE1D,KAAK,SACLlD,QAASA,IAAMkH,GAAWD,GAC1B,gBAAeA,EACf,aAAY9G,GAEZxC,EAAAA,cAAA,QAAMgB,UAAU,mCACbkK,EACDlL,EAAAA,cAAC4I,EAAO,QAIXU,GACCtJ,EAAAA,cAAA,OAAKgB,UAAU,8BAA8BC,MAAO,CAAEqE,SAAU,UAC9DtF,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,SAAOgB,UAAU,cAAa,OAC7B2J,EACClB,EACAC,EACAV,GAAQW,IACS,SAAfN,EAAKrF,MACH,IAAIE,KAAK8E,EAAOW,KAAKmB,cAAclI,MAAM,KAAK,GAC9CoG,EAAOW,IAAIyB,iBACX,QAGRpL,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,SAAOgB,UAAU,cAAa,OAC7B2J,EACCf,EACAC,EACAb,GAAQc,IACS,SAAfT,EAAKrF,MACH,IAAIE,KAAK8E,EAAOc,KAAKgB,cAAclI,MAAM,KAAK,GAC9CoG,EAAOc,IAAIsB,iBACX,QAGRpL,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAAA,UACEgB,UAAU,mCACVqB,QApGQgJ,KAClB3B,EAAY,IACZG,EAAY,IACZV,EAASC,GACTG,GAAU,EAAM,GAiGP,SAGDvJ,EAAAA,cAAA,UACEgB,UAAU,iCACVqB,QA/GOiJ,KACjBpC,EAASE,EAAW,CAAEO,IAAKF,EAAUK,IAAKF,IAC1CL,GAAU,EAAM,GA8GP,UAMH,EAIJgC,EAAaC,IAAuE,IAAtE,KAAEhJ,EAAI,OAAEwG,EAAM,aAAEC,EAAa,GAAE,SAAEC,EAAQ,SAAEC,EAAQ,UAAEC,GAAWoC,EAClF,MAAOlC,EAAQC,GAAavJ,EAAAA,UAAe,GACrCwJ,EAAcxJ,EAAAA,OAAa,OAC1ByL,EAAiBC,GAAsB1L,EAAAA,SAAeiJ,GAE7DjJ,EAAAA,WAAgB,KACd,MAAM+J,EAAsBC,IACtBR,EAAYS,UAAYT,EAAYS,QAAQC,SAASF,EAAMG,UAC7DZ,GAAU,GACVmC,EAAmBzC,GACrB,EAIF,OADAvG,SAAS0H,iBAAiB,YAAaL,GAChC,KACLrH,SAAS2H,oBAAoB,YAAaN,EAAmB,CAC9D,GACA,CAACd,IAEJ,MAmBMiC,EAAejC,EAAapG,OAAS,EAAK,GAAEL,MAASyG,EAAapG,UAAYL,EAEpF,OACExC,EAAAA,cAAA,OAAKgB,UAAU,WAAWmK,IAAK3B,GAC7BxJ,EAAAA,cAAA,UACEgB,UAAY,+BAA6BiI,EAAapG,OAAS,EAAI,cAAgB,yBACnF0C,KAAK,SACLlD,QAASA,IAAMkH,GAAWD,GAC1B,gBAAeA,EACf,aAAY9G,GAEZxC,EAAAA,cAAA,QAAMgB,UAAU,mCACbkK,EACDlL,EAAAA,cAAC4I,EAAO,QAIZ5I,EAAAA,cAAA,OAAKgB,UAAY,uBAAqBsI,EAAS,OAAS,IAAMrI,MAAO,CAAEqE,SAAU,QAASY,QAAS,SACjGlG,EAAAA,cAAA,OAAKgB,UAAU,qBAAqBC,MAAO,CAAE0K,UAAW,UACtD3L,EAAAA,cAAA,OAAKgB,UAAU,iCACbhB,EAAAA,cAAA,MAAIgB,UAAU,sBACXgI,GAAQ/K,KAAK2N,GACZ5L,EAAAA,cAAA,MAAIyF,IAAKmG,GACP5L,EAAAA,cAAA,OACEgB,UAAU,0CACVqB,QAASA,IA5CLuJ,KACpBF,GAAmBG,GACjBA,EAAKC,SAASF,GACVC,EAAKE,QAAOC,GAAKA,IAAMJ,IACvB,IAAIC,EAAMD,IACf,EAuC8BK,CAAaL,GAC5BvG,KAAK,UAELrF,EAAAA,cAAA,OAAKgB,UAAU,wBACbhB,EAAAA,cAAA,SACEuF,KAAK,WACLvE,UAAU,mBACVkL,QAAST,EAAgBK,SAASF,GAClC3K,MAAO,CAAEkL,OAAQ,cAGrBnM,EAAAA,cAAA,YAAO4L,SAMjB5L,EAAAA,cAAA,OAAKgB,UAAU,+BACbhB,EAAAA,cAAA,UACEgB,UAAU,mCACVqB,QAnDQgJ,KAClBK,EAAmB,IACnBvC,EAASC,GACTG,GAAU,EAAM,GAiDP,SAGDvJ,EAAAA,cAAA,UACEgB,UAAU,iCACVqB,QA9DOiJ,KACjBpC,EAASE,EAAWqC,GACpBlC,GAAU,EAAM,GA6DP,WAMH,EAIJ6C,EAAaC,IAA+D,IAA9D,KAAE7J,EAAI,aAAEyG,EAAa,GAAE,SAAEC,EAAQ,SAAEC,EAAQ,UAAEC,GAAWiD,EAC1E,MAAOC,EAAYC,GAAiBvM,EAAAA,SAAeiJ,GAC7CuD,EAAkBxM,EAAAA,OAAa,MAErCA,EAAAA,WAAgB,IACP,KACDwM,EAAgBvC,SAClBlJ,aAAayL,EAAgBvC,QAC/B,GAED,IAuBH,OACEjK,EAAAA,cAAA,OAAKgB,UAAU,qBACbhB,EAAAA,cAAA,SACEuF,KAAK,OACLvE,UAAU,+BACVgD,MAAOsI,EACPpD,SAAW1K,IAAMiO,OA3BIzI,EA2BcxF,EAAE2L,OAAOnG,MA1BhDuI,EAAcvI,GAEVwI,EAAgBvC,SAClBlJ,aAAayL,EAAgBvC,cAG/BuC,EAAgBvC,QAAUnJ,YAAW,KACrB,KAAVkD,EACFmF,EAASC,GAETF,EAASE,EAAWpF,EACtB,GACC,MAbsBA,KA2B8B,EACnD6G,YAAarI,IAEd8J,GACCtM,EAAAA,cAAA,UACEgB,UAAU,6EACVqB,QAjBYgJ,KAClBkB,EAAc,IACdpD,EAASC,EAAU,EAgBbnI,MAAO,CACLmB,SAAU,GACVR,OAAQ,OACRO,WAAY,OACZ+D,QAAS,IACTD,MAAO,WAET,aAAW,gBACZ,QAIC,EA0EV,MAhEgByG,IAAyE,IAAxE,QAAEC,EAAQ,GAAE,aAAEC,EAAa,CAAC,EAAC,UAAEC,EAAS,aAAEC,EAAY,SAAEC,GAAUL,EACjF,MAAMM,EAAmBpO,OAAOD,KAAKiO,GAAc/J,OAAS,EAE5D,OACE7C,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKgB,UAAU,8BAA8BqE,KAAK,QAAQ,aAAW,WAClEsH,EAAQ1O,KAAK8N,IACZ,IAAKA,EAAOkB,cAAe,OAAO,KAClC,OAAQlB,EAAOxG,MACb,IAAK,OACH,OACEvF,EAAAA,cAACuL,EAAU,CACT9F,IAAKsG,EAAOtG,IACZ2D,UAAW2C,EAAOtG,IAClBjD,KAAMuJ,EAAOvJ,KACbwG,OAAQ+C,EAAO/C,OACfC,aAAc2D,EAAab,EAAOtG,KAClCyD,SAAU2D,EACV1D,SAAU2D,IAGhB,IAAK,QACH,OACE9M,EAAAA,cAAC+I,EAAW,CACVtD,IAAKsG,EAAOtG,IACZ2D,UAAW2C,EAAOtG,IAClBjD,KAAMuJ,EAAOvJ,KACbwG,OAAQ+C,EAAO/C,OACfC,aAAc2D,EAAab,EAAOtG,KAClCyD,SAAU2D,EACV1D,SAAU2D,EACVzD,KAAM0C,EAAO1C,OAGnB,IAAK,OACH,OACErJ,EAAAA,cAACoM,EAAU,CACT3G,IAAKsG,EAAOtG,IACZ2D,UAAW2C,EAAOtG,IAClBjD,KAAMuJ,EAAOvJ,KACbyG,aAAc2D,EAAab,EAAOtG,KAClCyD,SAAU2D,EACV1D,SAAU2D,IAGhB,QACE,OAAO,KAAK,KAInBE,GACChN,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,UACEqC,QAAS0K,EACT/L,UAAU,gDACX,cAKJ,EC1XP,MARkBkM,IAChBlN,EAAAA,cAAA,OAAK0B,MAAM,KAAKK,OAAO,KAAK0F,QAAQ,YAAYD,KAAK,OAAOD,MAAM,8BAChEvH,EAAAA,cAAA,QAAMmH,EAAE,UAAU0B,OAAO,UAAUC,YAAY,IAAIqE,cAAc,QAAQC,eAAe,UACxFpN,EAAAA,cAAA,QAAMmH,EAAE,WAAW0B,OAAO,UAAUC,YAAY,IAAIqE,cAAc,QAAQC,eAAe,UACzFpN,EAAAA,cAAA,QAAMmH,EAAE,oBAAoB0B,OAAO,UAAUC,YAAY,IAAIqE,cAAc,QAAQC,eAAe,WCsBtG,MA1BoBpO,IAA8C,IAA7C,MAAE0C,EAAQ,GAAE,OAAEK,EAAS,GAAE,MAAEd,EAAQ,CAAC,GAAGjC,EAE1D,MAMMqO,EAAe,CALnBC,YAAa,MACb5G,aAAc,SAI0BzF,GAE1C,OACEjB,EAAAA,cAAA,OACE0B,MAAOA,EACPK,OAAQA,EACR0F,QAAQ,YACRD,KAAK,OACLD,MAAM,6BACNtG,MAAOoM,GAEPrN,EAAAA,cAAA,QAAMmH,EAAE,khBAAkhBK,KAAK,YAC/hBxH,EAAAA,cAAA,QAAMmH,EAAE,ggBAAggBK,KAAK,YAC7gBxH,EAAAA,cAAA,QAAMmH,EAAE,g5CAAg5CK,KAAK,YACz5C,ECVV,MAZsB+F,IACpBvN,EAAAA,cAAA,OACEuH,MAAM,6BACN7F,MAAM,KACNK,OAAO,KACPyF,KAAK,UACLC,QAAQ,aAERzH,EAAAA,cAAA,QAAMmH,EAAE,6LCHZ,MAAMqG,EAAoBxJ,IACxB,GAAc,OAAVA,QAA4BwC,IAAVxC,EACpB,MAAO,QAIT,GAAqB,kBAAVA,EACT,OAAIA,EAAM8H,SAAS,KACV9H,EAGD,IAAGkE,WAAWlE,GAAOmE,QAAQ,KAIvC,GAAqB,kBAAVnE,EAAoB,CAE7B,GAAIA,EAAMyJ,UAAW,OAAOzJ,EAAMyJ,UAGlC,QAAsBjH,IAAlBxC,EAAM2E,QAAuB,OAAOd,EAA8B,IAAhB7D,EAAM2E,SAG5D,QAAoBnC,IAAhBxC,EAAM0J,MAAqB,OAAO7F,EAAc7D,EAAM0J,MAC5D,CAGA,MAAO,OAAO,EAIVxC,EAAgBlH,GAAUhE,EAAAA,cAAA,YAAOwN,EAAiBxJ,IAkbxD,MA/SuBhF,IAAwB,IAArB2O,QAASC,GAAM5O,EACrCc,QAAQ+N,IAAI,gBAAiBD,GAC7B9N,QAAQ+N,IAAI,qBAAsBD,EAAKE,mBACvChO,QAAQ+N,IAAI,qBAAsBD,EAAKG,mBA8GvC,OACE/N,EAAAA,cAAA,OAAKgB,UAAU,iBACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,uBACrBhB,EAAAA,cAAA,KAAGgB,UAAU,QAAOhB,EAAAA,cAAA,cAAQ,mBAAwB,IAAE4N,EAAKI,gBAAkB,OAC7EhO,EAAAA,cAAA,KAAGgB,UAAU,QAAOhB,EAAAA,cAAA,cAAQ,kBAAuB,IAAE4N,EAAKK,eAAiB,OAC3EjO,EAAAA,cAAA,KAAGgB,UAAU,QAAOhB,EAAAA,cAAA,cAAQ,kBAAuB,IAAE4N,EAAKM,eAAiB,OAC3ElO,EAAAA,cAAA,KAAGgB,UAAU,QAAOhB,EAAAA,cAAA,cAAQ,qBAA0B,IAAE4N,EAAKO,cAAgB,OAC7EnO,EAAAA,cAAA,KAAGgB,UAAU,QAAOhB,EAAAA,cAAA,cAAQ,2BAAgC,IAAE4N,GAAMQ,wBAAwBA,yBAA2BR,GAAMQ,wBAAwBC,iCAAoC,UAAST,EAAKQ,uBAAuBC,mCAAqC,QACnQrO,EAAAA,cAAA,KAAGgB,UAAU,QAAOhB,EAAAA,cAAA,cAAQ,kBAAuB,IAAE4N,EAAKU,WAC1DtO,EAAAA,cAAA,KAAGgB,UAAU,QACXhB,EAAAA,cAAA,cAAQ,YAAkB,IACzB4N,EAAKW,yBACH,GAAEX,EAAKW,yBAAyBC,oBAAoBZ,EAAKW,yBAAyBE,kBAAkBb,EAAKW,yBAAyBG,kBAAkBd,EAAKW,yBAAyBI,oBAEnL,OAGJ3O,EAAAA,cAAA,KAAGgB,UAAU,QAAOhB,EAAAA,cAAA,cAAQ,qBAA0B,IAAE4N,EAAKgB,OAAS,OACtE5O,EAAAA,cAAA,KAAGgB,UAAU,QAAQ4M,EAAKiB,eAAiB,qBAAuB,0BAEjEjB,EAAKkB,+BAA+BjM,OAAS,GAC5C7C,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,KACE0F,KAAK,IACL1E,UAAU,eACV5C,GAAK,iBAAgBwP,EAAKmB,kBAAkB3Q,KAC5CiE,QAAU7D,GAvIgBgB,OAAOwK,EAAOgF,KAChDhF,EAAMiF,iBACN,MAAMC,EAAclF,EAAMG,OACpBgF,EAAgBzM,SAAS0M,eAAgB,mBAAkBJ,KAC3DK,EAAe3M,SAAS0M,eAAgB,kBAAiBJ,KAE/DK,EAAarK,cAAc,QAAQsK,YAAc,GACjDD,EAAaE,UAAUC,IAAI,UAE3BN,EAAYK,UAAUC,IAAI,UAC1BL,EAAcI,UAAUE,OAAO,UAE/B,IACE,MAAMhQ,QAAiBC,MAAM,kCAAmC,CAC9DqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAU,CAAEC,qBAAsBb,MAG/C,IAAKvP,EAASE,GACZ,MAAM,IAAIlB,MAAM,2BAIlB,MAAMqR,QAAarQ,EAASqQ,OAGtBC,EAAM7K,OAAO8K,IAAIC,gBAAgBH,GAGjCI,EAAgBtC,EAAKO,aACvBP,EAAKO,aAAa9N,QAAQ,cAAe,KAAK8P,cAC9C,uBAGEC,EAAe1N,SAAS2N,cAAc,KAC5CD,EAAa1K,KAAOqK,EACpBK,EAAaE,SAAY,yBAAwBJ,QACjDxN,SAASgN,KAAKa,YAAYH,GAC1BA,EAAaI,QAGb9N,SAASgN,KAAKe,YAAYL,GAC1BlL,OAAO8K,IAAIU,gBAAgBX,EAE7B,CAAE,MAAOlQ,GACPC,QAAQD,MAAM,SAAUA,GACxBwP,EAAarK,cAAc,QAAQsK,YAAczP,EAAM8Q,QACvDtB,EAAaE,UAAUE,OAAO,SAChC,CAAC,QACCN,EAAcI,UAAUC,IAAI,UAC5BN,EAAYK,UAAUE,OAAO,SAC/B,GAgFwBmB,CAA4BpS,EAAGoP,EAAKmB,kBAAkB3Q,KACvE,iCAGD4B,EAAAA,cAAA,OAAK5B,GAAK,mBAAkBwP,EAAKmB,kBAAkB3Q,KAAM4C,UAAU,UACjEhB,EAAAA,cAAA,QAAMgB,UAAU,aAAY,kBACXhB,EAAAA,cAAA,QAAMgB,UAAU,mCAAmCqE,KAAK,SAAS,cAAY,WAGhGrF,EAAAA,cAAA,OAAK5B,GAAK,kBAAiBwP,EAAKmB,kBAAkB3Q,KAAM4C,UAAU,UAChEhB,EAAAA,cAAA,QAAMgB,UAAU,kBArRL4M,IACvBA,EAAKiD,oBACJjD,EAAKkD,UAAYlS,OAAOoK,OAAO4E,EAAKkD,UAAUC,MAAK/M,GAAmB,MAAVA,GAAiBA,IAyRvEgN,CAAgBpD,IACf5N,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,MAAIgB,UAAU,aAAY,wBAEzB4M,EAAKiD,mBACJ7Q,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,KAAGgB,UAAU,QACXhB,EAAAA,cAAA,QAAMgB,UAAU,8BAA8BC,MAAO,CAAE2F,QAAS,OAAQqK,WAAY,SAAUhL,MAAO,UAAW7D,SAAU,WACxHpC,EAAAA,cAAA,QAAMgB,UAAU,kBAAiBhB,EAAAA,cAACkR,EAAW,CAACxP,MAAO,GAAIK,OAAQ,GAAId,MAAO,CAAEqM,YAAa,MAAO5G,aAAc,QAAgB,eAIpI1G,EAAAA,cAAA,KAAGgB,UAAU,OAAOC,MAAO,CAAEgF,MAAO,YAAc2H,EAAKiD,qBAEvDjD,EAAKkD,UACP9Q,EAAAA,cAAA,OAAKgB,UAAU,aACZpC,OAAOuS,QAAQvD,EAAKkD,UAClB/E,QAAOP,IAAA,IAAE4F,EAAGpN,GAAMwH,EAAA,MAAe,MAAVxH,GAAiBA,CAAK,IAC7C/F,KAAIoO,IAAA,IAAE5G,EAAKzB,GAAMqI,EAAA,OAChBrM,EAAAA,cAAA,KAAGyF,IAAKA,EAAKzE,UAAU,QAAQgD,EAAU,MAzSpC4J,IAEkB,kBAA9BA,EAAKyD,sBAA4E,kBAAhCzD,EAAK0D,uBAEvD1D,EAAKyD,sBAAsD,UAA9BzD,EAAKyD,sBAClCzD,EAAK0D,wBAA0D,UAAhC1D,EAAK0D,wBAIL,kBAA9B1D,EAAKyD,sBAA4E,kBAAhCzD,EAAK0D,0BACvD1D,EAAKyD,sBAAsB3D,MAAQ,GACnCE,EAAK0D,wBAAwB5D,MAAQ,GAsSxC6D,CAAgB3D,IACf5N,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,MAAIgB,UAAU,aAAY,sBAEvB4M,EAAK4D,gBACJxR,EAAAA,cAAA,QAAMgB,UAAU,wCAAwCV,MAAM,iCAC5DN,EAAAA,cAACuN,EAAa,MACdvN,EAAAA,cAAA,QAAMgB,UAAU,gCAAgCC,MAAO,CAAEwQ,QAAS,MAAQ,uBAIhFzR,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,KAAGgB,UAAU,gBAAe,WAG5BhB,EAAAA,cAAA,KAAGgB,UAAU,QAAO,mBAAiBkK,EAAa0C,EAAKyD,uBACvDrR,EAAAA,cAAA,KAAGgB,UAAU,QAAO,qBAAmBkK,EAAa0C,EAAK0D,yBAGxD1D,EAAKG,mBAAqBH,EAAKE,mBAjTd4D,KAC9B,IAAKA,EAEH,OADA5R,QAAQ+N,IAAI,kCACL,KAGT/N,QAAQ+N,IAAI,+BAAgC6D,GAE5C,MAAMC,EAAe,CACnB,CAAElM,IAAK,wBAAyBmM,MAAO,qBACvC,CAAEnM,IAAK,sBAAuBmM,MAAO,uBACrC,CAAEnM,IAAK,oBAAqBmM,MAAO,qBACnC,CAAEnM,IAAK,eAAgBmM,MAAO,iBAG1BC,EAAgB,CAEpB,CAAEpM,IAAK,oBAAqBmM,MAAO,qBACnC,CAAEnM,IAAK,OAAQmM,MAAO,iBACtB,CAAEnM,IAAK,gBAAiBmM,MAAO,iBAE/B,CAAEnM,IAAK,uBAAwBmM,MAAO,yBACtC,CAAEnM,IAAK,uBAAwBmM,MAAO,wBACtC,CAAEnM,IAAK,yBAA0BmM,MAAO,0BACxC,CAAEnM,IAAK,sBAAuBmM,MAAO,uBACrC,CAAEnM,IAAK,YAAamM,MAAO,aAC3B,CAAEnM,IAAK,YAAamM,MAAO,aAC3B,CAAEnM,IAAK,YAAamM,MAAO,aAE3B,CAAEnM,IAAK,mBAAoBmM,MAAO,oBAClC,CAAEnM,IAAK,OAAQmM,MAAO,QACtB,CAAEnM,IAAK,iBAAkBmM,MAAO,kBAChC,CAAEnM,IAAK,mBAAoBmM,MAAO,oBAClC,CAAEnM,IAAK,aAAcmM,MAAO,cAC5B,CAAEnM,IAAK,oBAAqBmM,MAAO,qBACnC,CAAEnM,IAAK,iBAAkBmM,MAAO,mBAI5BE,EAAcC,IAClB,MAAM/N,EAAQ0N,EAAiBK,EAAKtM,KAC9BuM,EAAiB9G,EAAalH,GAGpC,MAAuB,UAAnBgO,EACK,KAIPhS,EAAAA,cAAA,KAAGyF,IAAKsM,EAAKtM,IAAKzE,UAAU,QACzB+Q,EAAKH,MAAM,KAAGI,EACb,EAKFC,EAAiBN,EAAaZ,MAClCmB,GAASR,EAAiBQ,EAAMzM,MAA0D,UAAlD+H,EAAiBkE,EAAiBQ,EAAMzM,QAI5E0M,EAAkBN,EAAcd,MACpCmB,GAASR,EAAiBQ,EAAMzM,MAA0D,UAAlD+H,EAAiBkE,EAAiBQ,EAAMzM,QAMlF,OAHA3F,QAAQ+N,IAAI,oBAAqBoE,GACjCnS,QAAQ+N,IAAI,qBAAsBsE,GAE7BF,GAAmBE,EAMtBnS,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,YAEZiR,GACCjS,EAAAA,cAAAA,EAAAA,SAAA,KACG2R,EAAa1T,KAAIiU,GAASJ,EAAWI,MAKzCC,GACCnS,EAAAA,cAAAA,EAAAA,SAAA,KACG6R,EAAcjK,MAAM,EAAG,GAAG3J,KAAIiU,GAASJ,EAAWI,OAKzDlS,EAAAA,cAAA,OAAKgB,UAAU,YAEZmR,GAAmBN,EAAcjK,MAAM,EAAG,IAAI3J,KAAIiU,GAASJ,EAAWI,MAGzElS,EAAAA,cAAA,OAAKgB,UAAU,YAEZmR,GAAmBN,EAAcjK,MAAM,IAAI3J,KAAIiU,GAASJ,EAAWI,QA7BxEpS,QAAQ+N,IAAI,gCACL,KA8BD,EA6MyDuE,CAAuBxE,EAAKE,qBAKvF9N,EAAAA,cAAA,WAEAA,EAAAA,cAAA,MAAIgB,UAAU,aAAY,iBAC1BhB,EAAAA,cAAA,OAAKgB,UAAU,QACZ4M,EAAKyE,yBAAyBC,QAAU1E,EAAKyE,yBAAyBC,OAAOzP,OAAS,GACrF7C,EAAAA,cAAA,SAAOgB,UAAU,mCACfhB,EAAAA,cAAA,aACAA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,QACJA,EAAAA,cAAA,UAAI,UACJA,EAAAA,cAAA,UAAI,YAGRA,EAAAA,cAAA,aACG4N,EAAKyE,wBAAwBC,OAAOrU,KAAI,CAACsU,EAAOC,IAC/CxS,EAAAA,cAAA,MAAIyF,IAAK+M,GACPxS,EAAAA,cAAA,UAAKwS,EAAQ,GACbxS,EAAAA,cAAA,UAAKuS,EAAME,YACXzS,EAAAA,cAAA,UAAK6H,EAAc0K,EAAMG,6BAM/B9E,EAAKyE,yBAAyBC,QAA0D,IAAhD1E,EAAKyE,yBAAyBC,OAAOzP,QAC7E7C,EAAAA,cAAA,SAAOgB,UAAU,mCACfhB,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,QACJA,EAAAA,cAAA,UAAI,UACJA,EAAAA,cAAA,UAAI,YAGRA,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,KACJA,EAAAA,cAAA,UAAK4N,EAAKyE,wBAAwBM,UAClC3S,EAAAA,cAAA,UAAK6H,EAAc+F,EAAKyE,wBAAwBO,yBAO1D5S,EAAAA,cAAA,WAEAA,EAAAA,cAAA,MAAIgB,UAAU,aAAY,WAC1BhB,EAAAA,cAAA,OAAKgB,UAAU,QACXhB,EAAAA,cAAA,OAAKgB,UAAU,mCACXhB,EAAAA,cAAA,KACI0F,KAAK,IACL1E,UAAU,uBACVqB,QAAU7D,IACNA,EAAEyQ,iBArMK4D,EAAC7D,EAAY8D,EAAiBC,KACrD,MAAMC,EAAkBC,GACfA,EACG,IAAGA,EAAIzK,WAAWnI,QAAQ,KAAM,MAAMA,QAAQ,WAAY,QADjD,GAKf6S,EAAU,CACZ,CAAC,sBAAuB,GAAI,GAAI,GAAI,IAAIC,KAAK,KAC7C,CAAC,iBAAkBH,EAAepF,EAAKI,gBAAkB,OAAQ,GAAI,GAAI,IAAImF,KAAK,KAClF,CAAC,gBAAiBH,EAAepF,EAAKK,eAAiB,OAAQ,GAAI,GAAI,IAAIkF,KAAK,KAChF,CAAC,gBAAiBH,EAAepF,EAAKM,eAAiB,OAAQ,GAAI,GAAI,IAAIiF,KAAK,KAChF,CAAC,mBAAoBH,EAAepF,EAAKO,cAAgB,OAAQ,GAAI,GAAI,IAAIgF,KAAK,KAClF,CAAC,GAAI,GAAI,GAAI,GAAI,IAAIA,KAAK,KAC1B,CAAC,eAAgB,GAAI,GAAI,GAAI,IAAIA,KAAK,KACtC,CAAC,OAAQ,OAAQ,QAAS,YAAa,UAAUA,KAAK,MAG1DJ,EAAOK,SAAQpJ,IACX,MAAM/F,EAAO,IAAIC,KAAK8F,EAAMqJ,YAC5B,IAAIC,EAAa1F,EAAK2F,yBAAyBvJ,EAAM5L,IAEjD4L,EAAMwJ,aAAa3Q,OAAS,IAC5ByQ,GAAc,kDACdA,GAActJ,EAAMwJ,YAAYvV,KAAIwV,GAAcA,EAAW3N,OAAMqN,KAAK,MAI5E,MAAMO,EAAM,CACRV,EAAe/O,EAAKyG,mBAAmB,QAAS,CAAEiJ,MAAO,UAAWC,IAAK,UAAWC,KAAM,aAC1Fb,EAAe/O,EAAK6P,mBAAmB,QAAS,CAAEC,KAAM,UAAWC,OAAQ,aAC3EhB,EAA+B,aAAhBhJ,EAAMiK,MAAuB,WAAajK,EAAMiK,MAAMvM,OAAO,GAAGC,cAAgBqC,EAAMiK,MAAMrM,MAAM,IACjHoL,EAAeF,GACfE,EAAeM,IAEnBJ,EAAQvO,KAAK+O,EAAIP,KAAK,KAAK,IAI/B,MAAMe,EAAahB,EAAQC,KAAK,MAC1BrD,EAAO,IAAIqE,KAAK,CAACD,GAAa,CAAE3O,KAAM,4BACtCwK,EAAM7K,OAAO8K,IAAIC,gBAAgBH,GACjCtK,EAAO9C,SAAS2N,cAAc,KACpC7K,EAAKE,KAAOqK,EACZvK,EAAK8K,SAAY,gBAAetB,QAChCtM,SAASgN,KAAKa,YAAY/K,GAC1BA,EAAKgL,QACL9N,SAASgN,KAAKe,YAAYjL,GAC1BN,OAAO8K,IAAIU,gBAAgBX,EAAI,EAsJf8C,CAAmBjF,EAAKmB,kBAAkB3Q,GAAIwP,EAAKO,aAAcP,EAAKkB,+BAAiC,GAAG,GAG9G9O,EAAAA,cAACkN,EAAS,QAGlBlN,EAAAA,cAAA,SAAOgB,UAAU,mCACbhB,EAAAA,cAAA,aACIA,EAAAA,cAAA,UACIA,EAAAA,cAAA,UAAI,QACJA,EAAAA,cAAA,UAAI,QACJA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,YAGZA,EAAAA,cAAA,cACM4N,EAAKkB,+BAAiC,IAAI7Q,KAAI,CAAC+L,EAAOwI,KACpD,MAAMgB,EAAcxJ,EAAMwJ,aAAavV,KAAIkJ,GAAKA,EAAErB,QAAS,GAC3D,OACI9F,EAAAA,cAAA,MAAIyF,IAAK+M,GACLxS,EAAAA,cAAA,MAAIiB,MAAO,CAAEsF,WAAY,WAAa,IAAIrC,KAAK8F,EAAMqJ,YAAY3I,mBAAmB,QAAS,CAAEiJ,MAAO,UAAWC,IAAK,UAAWC,KAAM,aACvI7T,EAAAA,cAAA,MAAIiB,MAAO,CAAEsF,WAAY,WAAa,IAAIrC,KAAK8F,EAAMqJ,YAAYS,mBAAmB,QAAS,CAAEC,KAAM,UAAWC,OAAQ,aACxHhU,EAAAA,cAAA,UAAqB,aAAhBgK,EAAMiK,MAAuB,WAAajK,EAAMiK,MAAMvM,OAAO,GAAGC,cAAgBqC,EAAMiK,MAAMrM,MAAM,IACvG5H,EAAAA,cAAA,UACK4N,EAAK2F,yBAAyBvJ,EAAM5L,IAEpCoV,EAAY3Q,OAAS,GAClB7C,EAAAA,cAAA,WAAK,iDAERwT,EAAYvV,KAAImW,GACbpU,EAAAA,cAAA,OAAKyF,IAAK2O,GAAiBA,MAGlC,OAMrB,E,oOCpZZ,MA7DsBpV,IAAuE,IAAtE,MAAE4S,EAAK,MAAE5N,EAAK,SAAEkF,EAAQ,UAAElI,EAAY,GAAE,MAAEC,EAAQ,CAAC,KAAMoT,GAAOrV,EACrF,MAAOsV,EAAWC,GAAgBvU,EAAAA,UAAe,GA4BjD,OACEA,EAAAA,cAAA,OAAKgB,UAAU,oBAAoBC,MAAO,IAAKA,IAC7CjB,EAAAA,cAAA,SACEgB,UAAU,+BACVC,MAAO,CACLmB,SAAU,SACVb,IAAK,MACLD,KAAM,MACNkT,cAAe,OACfnT,OAAQ,IAGTuQ,GAEH5R,EAAAA,cAAA,QAAAyU,EAAA,CACElP,KAAK,OACLvB,MAAOsQ,EAAYtQ,EA1CDA,KACtB,IAAKA,EAAO,MAAO,GACnB,MAAM0Q,EAAcxM,WAAWlE,GAC/B,OAAI2Q,MAAMD,GAAqB,GAExB,IAAIE,KAAKC,aAAa,QAAS,CACpC5T,MAAO,WACP6T,SAAU,MACVC,sBAAuB,EACvBC,sBAAuB,IACtBC,OAAOP,EAAY,EAgCSQ,CAAelR,GAC1CkF,SA9BgB1K,IAGpB,MAAM2W,EAFW3W,EAAE2L,OAAOnG,MAEE3D,QAAQ,WAAY,IAEhD6I,EAAS,CACPiB,OAAQ,CACN3H,KAAMhE,EAAE2L,OAAO3H,KACfwB,MAAOmR,IAET,EAqBEC,QAASA,IAAMb,GAAa,GAC5Bc,OAAQA,IAAMd,GAAa,GAC3BvT,UAAY,gCAA+BA,IAC3CC,MAAO,CACLqU,WAAY,OACZC,cAAe,SACZtU,IAEDoT,IAEF,E,oOCIV,MA9D2BrV,IAYpB,IAZqB,MAC1B4S,EAAK,MACL5N,EAAK,SACLkF,EAAQ,KACR3D,EAAO,OAAM,SACbiQ,GAAW,EAAK,UAChBxU,EAAY,GAAE,MACdC,EAAQ,CAAC,EACTwU,UAAWC,EAAY,QAAO,WAC9BC,GAAa,EAAK,QAClBP,KACGf,GACJrV,EACC,MAAM4W,EAAiBD,EAAa,WAAaD,EAEjD,OACE1V,EAAAA,cAAA,OAAKgB,UAAU,oBAAoBC,MAAO,IAAKA,IAC7CjB,EAAAA,cAAA,SACEgB,UAAU,+BACVC,MAAO,CACLmB,SAAU,SACVb,IAAK,MACLD,KAAM,MACNkT,cAAe,OACfnT,OAAQ,IAGTuQ,GAEH5R,EAAAA,cAAC4V,EAAcnB,EAAA,CACblP,KAAOoQ,OAAoBnP,EAAPjB,EACpBvB,MAAOA,EACPkF,SAAW1K,IACT0K,EAAS1K,GACLmX,GAAcnX,EAAE2L,SAClB3L,EAAE2L,OAAOlJ,MAAMc,OAAS,OACxBvD,EAAE2L,OAAOlJ,MAAMc,OAAU,GAAEvD,EAAE2L,OAAO0L,iBACtC,EAEFT,QAAU5W,IACJmX,GAAcnX,EAAE2L,SAClB3L,EAAE2L,OAAOlJ,MAAMc,OAAS,OACxBvD,EAAE2L,OAAOlJ,MAAMc,OAAU,GAAEvD,EAAE2L,OAAO0L,kBAEtCT,IAAU5W,EAAE,EAEdgX,SAAUA,EACVxU,UAAY,gCAA+BA,IAC3CC,MAAO,CACLqU,WAAY,OACZC,cAAe,MACfxT,OAAQ4T,EAAa,YAASnP,EAC9BsP,OAAQH,EAAa,YAASnP,EAC9BuP,SAAUJ,EAAa,cAAWnP,KAC/BvF,IAEDoT,IAEF,EC0BV,MApFmBrV,IAAA,IAAC,UAAEgC,EAAY,GAAE,MAAEC,EAAQ,CAAC,EAAC,QAAEoB,GAASrD,EAAA,OACzDgB,EAAAA,cAAA,OACE0B,MAAM,KACNK,OAAO,KACP0F,QAAQ,YACRD,KAAK,OACLD,MAAM,6BACNvG,UAAWA,EACXC,MAAO,CAAEkL,OAAQ,aAAclL,GAC/BoB,QAASA,GAETrC,EAAAA,cAAA,QACEmH,EAAE,4OACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,0BACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,0BACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,yBACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,yBACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,2BACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,yBACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,2BACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,yBACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEjBpN,EAAAA,cAAA,QACEmH,EAAE,2BACF0B,OAAO,UACPC,YAAY,IACZqE,cAAc,QACdC,eAAe,UAEb,EC7ER,MAAM4I,EAAgC,2DAChCC,EAAkC,6DAksBxC,MA/qB6BjX,IAAoD,IAAnD,QAAE2O,EAAO,sBAAEuI,EAAqB,UAAEC,GAAWnX,EACzE,MAAOoX,EAAgBC,IAAqBjX,EAAAA,EAAAA,UAC1CuO,EAAQ0E,yBAAyBiE,oBAAsBJ,EACnD,SACA,iBAGCK,EAAgBC,IAAqBpX,EAAAA,EAAAA,UAAS,OAC9CqX,EAAYC,IAAiBtX,EAAAA,EAAAA,WAAS,IACtCuX,EAAWC,IAAgBxX,EAAAA,EAAAA,WAAS,IACpCyX,EAAUC,IAAe1X,EAAAA,EAAAA,UAAS,CACvC2X,aAAc,GACdpE,SAAU,GACV2D,mBAAoB,GACpBU,MAAO,GACPxD,YAAa,CAAoB,WAAnB4C,EACZJ,EACAC,EAAiC,OAG9BgB,EAAwBC,IAA6B9X,EAAAA,EAAAA,UAAS,OAErEG,EAAAA,EAAAA,YAAU,KACR,MAAM4X,EAAiB,IAAIN,EAASrD,aACpC2D,EAAe,GAAwB,WAAnBf,EAClBJ,EACAC,EACFa,EAAY,IAAKD,EAAUrD,YAAa2D,GAAiB,GACxD,CAACf,IAEJ,MAAMgB,EA9CYC,EAACrT,EAAOsT,KAC1B,MAAOC,EAAgBC,IAAqBpY,EAAAA,EAAAA,UAAS4E,GAYrD,OAVAzE,EAAAA,EAAAA,YAAU,KACR,MAAMkY,EAAU3W,YAAW,KACzB0W,EAAkBxT,EAAM,GACvBsT,GAEH,MAAO,KACLvW,aAAa0W,EAAQ,CACtB,GACA,CAACzT,EAAOsT,IAEJC,CAAc,EAiCEF,CAAY1H,KAAKC,UAAUiH,GAAW,KAGvDa,EAAS,cAAa/J,EAAQoB,kBAAkB3Q,MAGtDmB,EAAAA,EAAAA,YAAU,KAERuB,YAAW,KACT4B,SAASiV,iBAAiB,YAAYvE,QAAQwE,EAAqB,GAClE,EAAE,GACJ,KAGHrY,EAAAA,EAAAA,YAAU,KACR,MAAMwK,EAAsBC,IAC1B,MAAM6N,EAAYnV,SAASiV,iBAAkB,IAAGD,sBAC1CI,EAAUpV,SAASiV,iBAAkB,IAAGD,oBAG1CK,MAAM3X,KAAK0X,GAAS/G,MAAKiH,GAAUA,EAAO9N,SAASF,EAAMG,WAKxD4N,MAAM3X,KAAKyX,GAAW9G,MAAKkH,GAAYA,EAAS/N,SAASF,EAAMG,WAClErJ,YAAW,KACT0V,EAAkB,KAAK,GACtB,EACL,EAIF,OADA9T,SAAS0H,iBAAiB,YAAaL,GAChC,IAAMrH,SAAS2H,oBAAoB,YAAaN,EAAmB,GACzE,CAAC2N,IAmCJ,SAASQ,IACP,MAAM5F,EAASuE,EAASG,MAAM/Y,KAAI,CAACka,EAAM3F,KAAK,CAC5CA,QAGAE,qBAAsBtK,KAAKC,MAA+B,IAAzBH,WAAWiQ,EAAKC,QAAc5P,WAC/DiK,WAAY7O,SAASuU,EAAKxF,cAGtBjD,EAAO,CACXG,qBAAsBlC,EAAQoB,kBAAkB3Q,GAChD2Y,aAAcF,EAASE,aACvBT,mBAAoBO,EAASP,mBAC7B9C,YAAaqD,EAASrD,YAAYzH,QAAO5E,GAAkB,KAAbA,EAAEkR,SAChD/F,OAAQA,GAKV,OAHsB,IAAlBA,EAAOzP,SACT6M,EAAKiD,SAAWkE,EAASlE,UAEpBjD,CACT,CAEA,MAkCM4I,EAAoB9Z,IACxB,MAAM,KAAEgE,EAAI,MAAEwB,GAAUxF,EAAE2L,OAC1B2M,GAAYjL,IAAI,IACXA,EACH,CAACrJ,GAAOwB,KACP,EAICuU,EAAwBA,KAC5B,MAAMC,EAAiB9V,SAAS0M,eAAe,mBACzC6I,EAAWvV,SAASsC,cAAe,IAAG0S,sBAE5C,GAAIc,GAAkBP,EAAU,CAC9B,MAAMQ,EAAeR,EAASS,wBACxBC,EAAgBH,EAAeE,wBAG/BE,EAAkBH,EAAahS,OAASkS,EAAclS,OAAU,GAEtE,GAAImS,EAAiB,EAAG,CACtB,MAAMC,EAAgB,CACpBtX,IAAKiX,EAAeM,UAAYF,EAChCG,SAAU,UAEZP,EAAeQ,OAAOH,EACxB,CACF,GAIII,EAAyBA,CAACzG,EAAOxO,KACvB,IAAVwO,IAEJsE,GAAYjL,IACV,MAAMqN,EAAiB,IAAIrN,EAAK2H,aAOhC,OANA0F,EAAe1G,GAASxO,EAEpBwO,IAAU0G,EAAerW,OAAS,GAAsB,KAAjBmB,EAAMqU,QAC/Ca,EAAevU,KAAK,IAGf,IACFkH,EACH2H,YAAa0F,EACd,IAIHpY,WAAWyX,EAAuB,GAAE,EAIhCX,EAAwBuB,IAC5B,IAAKA,EAAU,OACf,MAAMC,EAAiBD,EAASlY,MAAMc,OACtCoX,EAASlY,MAAMc,OAAS,OACxBoX,EAASlY,MAAMc,OAAU,GAAEoX,EAAStD,iBAGhCuD,IAAmBD,EAASlY,MAAMc,QACpCjB,WAAWyX,EAAuB,EACpC,EAIIc,EAAqBC,IAErB/C,IAAmB+C,EACrB9C,EAAkB,OAGlBA,EAAkB8C,GAGlBxY,YAAW,KACT4B,SAASiV,iBAAiB,YAAYvE,QAAQwE,GAC9CW,GAAuB,GACtB,IAELlC,EAAkBiD,EAAO,EAGrBC,EAA0B/G,IAChB,IAAVA,IAEJsE,GAAYjL,IAAI,IACXA,EACH2H,YAAa3H,EAAK2H,YAAYzH,QAAO,CAACqF,EAAGoI,IAAMA,IAAMhH,QAIvD1R,WAAWyX,EAAuB,GAAE,EAGhCkB,EAAmB9L,EAAQ0E,yBAAyBiE,oBAAsBJ,EAG1EwD,EAA4BA,CAACC,EAAa3C,KAC9C,IAAK2C,IAAgB3C,GAAOnU,OAAQ,MAAO,QAS3C,OAPcqF,WAAWyR,EAAYtZ,QAAQ,aAAc,KACxC2W,EAAM4C,QAAO,CAACC,EAAK1B,IAG7B0B,EAFW3R,WAAWiQ,EAAKC,MAAM/X,QAAQ,aAAc,KAAO,GACpDuD,SAASuU,EAAKxF,UAAY,IAE1C,IAEyBvH,eAAe,QAAS,CAClDnK,MAAO,WACP6T,SAAU,OACV,EAkCEgF,EAAsBA,CAAC3B,EAAM3F,KACjC,MAAMuH,EAAmB7R,WAAWwR,EAA0B7C,EAASE,aAAcF,EAASG,OAAO3W,QAAQ,aAAc,KAG3H,SAAKwW,EAASE,cAAgBgD,GAAoB,QAG5C5B,EAAKC,QAAUD,EAAKxF,UAAcwF,EAAKC,OAASD,EAAKxF,YAGnDwF,EAAKC,QAAUD,EAAKxF,WAAewF,EAAKC,OAASD,EAAKxF,UAAS,EA6CzE,OA1CApT,EAAAA,EAAAA,YAAU,KACiBC,WACvB,IAAK4X,EAAgB,OAGrB,MAAMP,EAAWlH,KAAKqK,MAAM5C,GAC5B,GAAKP,EAASE,gBACVF,EAASE,cAAiBF,EAASlE,UAAsC,IAA1BkE,EAASG,MAAMnU,YAC9DgU,EAASG,MAAMnU,OAAS,IAAMgU,EAASG,MAAMiD,OAAM9B,GAC9B,KAAvBA,EAAKC,OAAOC,QAA2C,KAA1BF,EAAKxF,UAAU0F,UAK9C,IACE,MAAM3I,EAAOwI,IACPzY,QAAiBC,MAAM,+CAAgD,CAC3EqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,wBAAwBzE,SAEjEmP,KAAMC,KAAKC,UAAUF,KAGvB,IAAKjQ,EAASE,GAAI,MAAM,IAAIlB,MAAM,+BAElC,MAAM8F,QAAa9E,EAASG,OAExB2E,EAAK2C,SAAW3C,EAAK2V,eACvBhD,EAA0B3S,EAAK4V,2BAE/BjD,EAA0B,KAE9B,CAAE,MAAOrX,GACPqX,EAA0B,KAC5B,GAGFkD,EAAkB,GACjB,CAAChD,IAGFpX,EAAAA,cAAA,OAAKgB,UAAU,oBAAoB5C,GAAIsZ,GACrC1X,EAAAA,cAAA,OAAKgB,UAAU,4BACbhB,EAAAA,cAAA,QAAMgB,UAAU,qBACbyY,GACCzZ,EAAAA,cAACqa,EAAO,CAACvU,KAAK,mBAAmB1E,SAAS,OACxCpB,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAY,2HACZqB,QAASA,IAAMgX,EAAkB,WAClC,WAOe,WAAnB9C,GACCvW,EAAAA,cAAA,OAAKgB,UAAU,2GACVC,MAAO,CACLM,IAAK,OACL+Y,MAAO,EACPjZ,OAAQ,IACRsF,UAAW,IAEhB3G,EAAAA,cAAA,QAAMua,SA1TQ/a,UAKxB,GAJAwK,EAAMiF,iBACN2H,GAAa,GACbF,GAAc,IAET8D,QAAQ,+CAGX,OAFA5D,GAAa,QACbF,GAAc,GAIhB,MAAMjX,QAAiBC,MAAM,+BAAgC,CAC3DqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAU,CACnBC,qBAAsBlC,EAAQoB,kBAAkB3Q,GAChDoV,YAAaqD,EAASrD,YAAYzH,QAAO5E,GAAkB,KAAbA,EAAEkR,aAG9C9T,QAAa9E,EAASG,OAC5B,GAAI2E,EAAK2C,QAEP,OADAiP,IAAY5R,GACLA,EAEPkW,MAAMlW,EAAK1E,OAAS,4BACpB+W,GAAa,GACbF,GAAc,EAChB,EA4R6C1V,UAAU,4BAC3ChB,EAAAA,cAAA,WACEA,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,yBACV0Z,SAAU/D,GAAaF,GAEtBE,EACC3W,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,QAAMgB,UAAU,wCAAwCqE,KAAK,SAAS,cAAY,SAAc,iBAGhGoR,EAAa,YAAc,iBAInCzW,EAAAA,cAAA,OAAKgB,UAAU,2BAA2BC,MAAO,CAAEqE,SAAU,UAC3DtF,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,oHAAoH1E,SAAS,OACvJpB,EAAAA,cAAA,MAAIiB,MAAO,CAAEyF,aAAc,QAAS,gBAErCmQ,EAASrD,YAAYvV,KAAI,CAACwV,EAAYjB,IACrCxS,EAAAA,cAAA,OAAKyF,IAAM,cAAa+M,IAASxR,UAAU,gBACzChB,EAAAA,cAAC2a,EAAkB,CACjB/I,MAAQ,cAAaY,EAAQ,IAC7BxO,MAAOyP,EACPvK,SAAW1K,IACTya,EAAuBzG,EAAOhU,EAAE2L,OAAOnG,MAAM,EAE/C2R,YAAU,EACViF,KAAM,EACNC,SAAoB,IAAVrI,EACVvR,MAAO,CAAE4E,KAAM,KAEjB7F,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,kCACVqB,QAASA,IAAMkX,EAAuB/G,GACtCvR,MAAO,CACLqE,SAAU,OACVwV,WAAYjE,EAASrD,YAAY3Q,OAAS,GAA2B,KAAtB4Q,EAAW4E,QAA2B,IAAV7F,EACvE,UACA,WAEP,eAWdiH,GACCzZ,EAAAA,cAAA,YAAM,QAGRA,EAAAA,cAAA,QAAMgB,UAAU,qBACdhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,wCAAwC1E,SAAS,OAC7DpB,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAY,2HACZqB,QAASA,IAAMgX,EAAkB,iBAClC,iBAMiB,iBAAnB9C,GACCvW,EAAAA,cAAA,OAAKgB,UAAU,2GACVC,MAAO,CACLM,IAAK,OACL+Y,MAAO,EACPjZ,OAAQ,IACRsF,UAAW,IAEhB3G,EAAAA,cAAA,QAAMua,SAjVS/a,UAKzB,GAJAwK,EAAMiF,iBACN2H,GAAa,GACbF,GAAc,IAET8D,QAAQ,sDAGX,OAFA5D,GAAa,QACbF,GAAc,GAIhB,MAAMhH,EAAOwI,IAEPzY,QAAiBC,MAAM,sCAAuC,CAClEqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAUF,KAGjBnL,QAAa9E,EAASG,OAC5B,GAAI2E,EAAK2C,QAEP,OADAiP,IAAY5R,GACLA,EAEPkW,MAAMlW,EAAK1E,OAAS0E,EAAKwW,OAAO,IAAM,4BACtCnE,GAAa,GACbF,GAAc,EAChB,EAmT8C1V,UAAU,4BAEjB,IAA1B6V,EAASG,MAAMnU,OACd7C,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAACgb,EAAa,CACZpJ,MAAM,eACNpP,KAAK,eACLwB,MAAO6S,EAASE,aAChB7N,SAAUoP,EACVrX,MAAO,CAAES,MAAO,SAChB8T,UAAQ,IAEVxV,EAAAA,cAAC2a,EAAkB,CACjB/I,MAAM,WACNrM,KAAK,SACL/C,KAAK,WACLwB,MAAO6S,EAASlE,SAChBzJ,SAAUoP,EACVrX,MAAO,CAAES,MAAO,QAChB8T,UAAQ,IAEVxV,EAAAA,cAAC2a,EAAkB,CACjB/I,MAAM,gBACNrM,KAAK,OACL/C,KAAK,qBACLwB,MAAO6S,EAASP,mBAChBpN,SAAUoP,EACV9C,UAAQ,EACR7L,IAAKuM,KAGTlW,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,yBACVqB,QAASA,KACPyU,GAAYjL,IAAI,IACXA,EACHmL,MAAO,CACL,CAAEoB,MAAO,GAAIzF,SAAU,IACvB,CAAEyF,MAAO,GAAIzF,SAAU,SAG3B7R,WAAWyX,EAAuB,EAAE,GAEvC,UAGDvY,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,yBACV0Z,SAAU/D,GAAaF,GAEtBE,EACC3W,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,QAAMgB,UAAU,wCAAwCqE,KAAK,SAAS,cAAY,SAAc,iBAGhGoR,EAAa,YAAc,wBAInCzW,EAAAA,cAAAA,EAAAA,SAAA,KAEEA,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAACgb,EAAa,CACZpJ,MAAM,eACNpP,KAAK,eACLwB,MAAO6S,EAASE,aAChB7N,SAAUoP,EACVrX,MAAO,CAAES,MAAO,SAChB8T,UAAQ,IAEVxV,EAAAA,cAAC2a,EAAkB,CACjB/I,MAAM,gBACNrM,KAAK,OACL/C,KAAK,qBACLwB,MAAO6S,EAASP,mBAChBpN,SAAUoP,EACV9C,UAAQ,EACR7L,IAAKuM,IAEPlW,EAAAA,cAAC2a,EAAkB,CACjB/I,MAAM,oBACNrM,KAAK,OACL/C,KAAK,oBACLwB,MAAOiT,EAAyB,QAAUyC,EAA0B7C,EAASE,aAAcF,EAASG,OACpGhW,UAAgF,UAArE0Y,EAA0B7C,EAASE,aAAcF,EAASG,QAAuBC,EAAyC,GAAhB,cACrHhW,MAAO,CAAES,MAAO,SAChBgZ,UAAU,IAEZ1a,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,yBACV0Z,SAAU/D,GAAaF,GAEtBE,EACC3W,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,QAAMgB,UAAU,wCAAwCqE,KAAK,SAAS,cAAY,SAAc,iBAGhGoR,EAAa,YAAc,wBAKlCI,EAASG,MAAM/Y,KAAI,CAACka,EAAM3F,IACzBxS,EAAAA,cAAA,OAAKyF,IAAK+M,EAAOxR,UAAU,mCACzBhB,EAAAA,cAACgb,EAAa,CACZpJ,MAAQ,QAAOY,EAAQ,UACvBhQ,KAAO,SAAQgQ,UACfxO,MAAOmU,EAAKC,MACZlP,SAAW1K,IACT,MAAMyc,EAAW,IAAIpE,EAASG,OAC9BiE,EAASzI,GAAO4F,MAAQ5Z,EAAE2L,OAAOnG,MACjC8S,GAAYjL,IAAI,IAAUA,EAAMmL,MAAOiE,KAAY,EAErDha,MAAO,CAAES,MAAO,SAChB8T,UAAQ,IAEVxV,EAAAA,cAAA,OAAKgB,UAAU,mCACbhB,EAAAA,cAAC2a,EAAkB,CACjB/I,MAAM,WACNrM,KAAK,SACL/C,KAAO,SAAQgQ,aACfxO,MAAOmU,EAAKxF,SACZzJ,SAAW1K,IACT,MAAMyc,EAAW,IAAIpE,EAASG,OAC9BiE,EAASzI,GAAOG,SAAWnU,EAAE2L,OAAOnG,MACpC8S,GAAYjL,IAAI,IAAUA,EAAMmL,MAAOiE,KAAY,EAErDha,MAAO,CAAES,MAAO,QAChB8T,UAAQ,IAEVxV,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAY,wBAAsB8Y,EAAoB3B,GAAe,eAAiB,kBACtFuC,UAAWZ,EAAoB3B,GAC/B9V,QAASA,IAjUL6Y,EAAC/C,EAAM3F,KACftK,WAAW2O,EAASE,aAAa1W,QAAQ,aAAc,KAA3E,MACM0Z,EAAmB7R,WAAWwR,EAA0B7C,EAASE,aAAcF,EAASG,OAAO3W,QAAQ,aAAc,KAE3H,GAAI0Z,GAAoB,EAAG,OAE3B,MAAMkB,EAAW,IAAIpE,EAASG,OAG9B,GAAImB,EAAKxF,WAAawF,EAAKC,MAAO,CAChC,MACM+C,EAAkBpB,EADPnW,SAASuU,EAAKxF,UAE/BsI,EAASzI,GAAO4F,MAAQ+C,EAAgBhT,QAAQ,EAClD,MAEK,GAAIgQ,EAAKC,QAAUD,EAAKxF,SAAU,CACrC,MAAMyI,EAAYlT,WAAWiQ,EAAKC,MAAM/X,QAAQ,aAAc,KACxDsS,EAAWvK,KAAKiT,KAAKtB,EAAmBqB,GAC9CH,EAASzI,GAAOG,SAAWA,EAASnK,UACtC,CAEAsO,GAAYjL,IAAI,IAAUA,EAAMmL,MAAOiE,KAAY,EA4SZC,CAAsB/C,EAAM3F,GAC3CvR,MAAO,CAAEiF,QAAS,YAElBlG,EAAAA,cAACsb,EAAU,QAGftb,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,kCACVqB,QAASA,KACPyU,GAAYjL,IAAI,IACXA,EACHmL,MAAOnL,EAAKmL,MAAMnU,QAAU,EAAI,GAAKgJ,EAAKmL,MAAMjL,QAAO,CAACqF,EAAGoI,IAAMA,IAAMhH,QAEzE1R,WAAWyX,EAAuB,EAAE,EAEtCtX,MAAO,CAAEqE,SAAU,SACpB,QAGAkN,IAAUqE,EAASG,MAAMnU,OAAS,GACjC7C,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,yBACVqB,QAASA,KACPyU,GAAYjL,IAAI,IACXA,EACHmL,MAAO,IAAInL,EAAKmL,MAAO,CAAEoB,MAAO,GAAIzF,SAAU,SAEhD7R,WAAWyX,EAAuB,EAAE,GAEvC,cAUVtB,GACCjX,EAAAA,cAAA,SAAOgB,UAAU,cAAa,yBACL6V,EAASG,MAAMnU,OAAO,aAAWoU,EAAyB,KAGrFjX,EAAAA,cAAA,WAGAA,EAAAA,cAAA,OAAKgB,UAAU,2BAA2BC,MAAO,CAAEqE,SAAU,UAC3DtF,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,oHAAoH1E,SAAS,OACvJpB,EAAAA,cAAA,MAAIiB,MAAO,CAAEyF,aAAc,QAAS,gBAErCmQ,EAASrD,YAAYvV,KAAI,CAACwV,EAAYjB,IACrCxS,EAAAA,cAAA,OAAKyF,IAAM,cAAa+M,IAASxR,UAAU,gBACzChB,EAAAA,cAAC2a,EAAkB,CACjB/I,MAAQ,cAAaY,EAAQ,IAC7BxO,MAAOyP,EACPvK,SAAW1K,IACTya,EAAuBzG,EAAOhU,EAAE2L,OAAOnG,MAAM,EAE/C2R,YAAU,EACViF,KAAM,EACNC,SAAoB,IAAVrI,EACVvR,MAAO,CAAE4E,KAAM,KAEjB7F,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,kCACVqB,QAASA,IAAMkX,EAAuB/G,GACtCvR,MAAO,CACLqE,SAAU,OACVwV,WAAYjE,EAASrD,YAAY3Q,OAAS,GAA2B,KAAtB4Q,EAAW4E,QAA2B,IAAV7F,EACvE,UACA,WAEP,gBAWb,EC7eV,MArN2BxT,IAA6B,IAA5B,QAAE2O,EAAO,UAAEwI,GAAWnX,EAChD,MAAO6X,EAAUC,IAAe1X,EAAAA,EAAAA,UAAS,CACvCmc,YAAa,GACbC,MAAO,GACPC,UAAW,GACXC,gBAAiB,MAEZC,EAAWC,IAAgBxc,EAAAA,EAAAA,UAAS,CACzCyc,cAAc,EACdC,aAAa,EACbjc,MAAO,QAEF0W,EAAgBC,IAAqBpX,EAAAA,EAAAA,WAAS,GAG/CsY,EAAS,uBAAsB/J,EAAQoB,kBAAkB3Q,MAE/DmB,EAAAA,EAAAA,YAAU,KACR,MAAMwK,EAAsBC,IAC1B,MAAMiO,EAAWvV,SAASsC,cAAe,IAAG0S,sBACtCM,EAAStV,SAASsC,cAAe,IAAG0S,oBAGtCM,GAAQ9N,SAASF,EAAMG,SAKtB8N,GAAU/N,SAASF,EAAMG,SAC5BqM,GAAkB,EACpB,EAIF,OADA9T,SAAS0H,iBAAiB,YAAaL,GAChC,IAAMrH,SAAS2H,oBAAoB,YAAaN,EAAmB,GACzE,CAAC2N,IAGJ,MA4EMqE,EAAgBvd,IACpBsY,GAAYjL,IAAI,IACXA,EACH,CAACrN,EAAE2L,OAAO3H,MAAOhE,EAAE2L,OAAOnG,SACzB,EAGL,OACEhE,EAAAA,cAAA,OAAKgB,UAAU,oBAAoB5C,GAAIsZ,GACrC1X,EAAAA,cAAA,OAAKgB,UAAU,4BACbhB,EAAAA,cAAA,QAAMgB,UAAU,qBACdhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,sDAAsD1E,SAAS,OAC3EpB,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAY,2HACZC,MAAO,CAAEsF,WAAY,UACrBlE,QAvEcgX,KAIxB,GAHA7C,GAAmBD,IAGdA,EAAgB,CACnB,MAAMiC,EAAiB9V,SAAS0M,eAAe,mBAC/C,GAAIoJ,EAAgB,CAClB,MAAMK,EAAgB,CACpBvX,KAAMkX,EAAewD,YACrBjD,SAAU,UAEZjY,YAAW,KACT0X,EAAeQ,OAAOH,GAjCAN,MAC5B,MAAMC,EAAiB9V,SAAS0M,eAAe,mBACzC6I,EAAWvV,SAASsC,cAAe,IAAG0S,sBAE5C,GAAIc,GAAkBP,EAAU,CAC9B,MAAMQ,EAAeR,EAASS,wBACxBC,EAAgBH,EAAeE,wBAG/BE,EAAkBH,EAAahS,OAASkS,EAAclS,OAAU,GAEtE,GAAImS,EAAiB,EAAG,CACtB,MAAMC,EAAgB,CACpBtX,IAAKiX,EAAeM,UAAYF,EAChCG,SAAU,UAEZP,EAAeQ,OAAOH,EACxB,CACF,GAgBMN,EAAuB,GACtB,EACL,CACF,IAwDS,0BAKFhC,GACCvW,EAAAA,cAAA,OAAKgB,UAAU,2GACVC,MAAO,CACLM,IAAK,OACL+Y,MAAO,EACPjZ,OAAQ,IACRsF,UAAW,EACXrB,SAAU,UAEftF,EAAAA,cAAA,QAAMua,SAnEG/a,UAInB,GAHAhB,EAAEyQ,iBACF2M,EAAa,IAAKD,EAAWE,cAAc,EAAMhc,MAAO,OAEnD2a,QAAQ,oCAKb,IACE,MAAM/a,QAAiBC,MAAM,yCAA0C,CACrEqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAU,CACnBC,qBAAsBlC,EAAQoB,kBAAkB3Q,MAC7CyY,MAIP,GAAIpX,EAASE,GACXic,EAAa,CAAEC,cAAc,EAAOC,aAAa,EAAMjc,MAAO,OAC9DsW,QACK,CACL,MAAM5R,QAAa9E,EAASG,OAC5B6a,MAAMlW,EAAK1E,OACX+b,EAAa,CAAEC,cAAc,EAAOC,aAAa,GACnD,CACF,CAAE,MAAOtd,GACPic,MAAMjc,EAAEmS,SACRiL,EAAa,CAAEC,cAAc,EAAOC,aAAa,GACnD,MA5BEF,EAAa,IAAKD,EAAWE,cAAc,EAAOC,aAAa,GA4BjE,GAmCY9b,EAAAA,cAAA,OAAKgB,UAAU,4BACbhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,sCAAsC1E,SAAS,OAC3DpB,EAAAA,cAAA,SACEuF,KAAK,OACL/C,KAAK,cACLwB,MAAO6S,EAAS0E,YAChBrS,SAAU6S,EACV/a,UAAU,+BACV6J,YAAY,SACZ2K,UAAQ,KAGZxV,EAAAA,cAACqa,EAAO,CAACvU,KAAK,gCAAgC1E,SAAS,OACrDpB,EAAAA,cAAA,SACEuF,KAAK,OACL/C,KAAK,QACLwB,MAAO6S,EAAS2E,MAChBtS,SAAU6S,EACV/a,UAAU,+BACV6J,YAAY,SACZ2K,UAAQ,KAGZxV,EAAAA,cAACqa,EAAO,CAACvU,KAAK,qCAAqC1E,SAAS,OAC1DpB,EAAAA,cAAA,SACEuF,KAAK,OACL/C,KAAK,YACLwB,MAAO6S,EAAS4E,UAChBvS,SAAU6S,EACV/a,UAAU,+BACV6J,YAAY,UACZ2K,UAAQ,KAGZxV,EAAAA,cAACqa,EAAO,CAACvU,KAAK,kJAAkJpE,MAAM,QAAQN,SAAS,OACrLpB,EAAAA,cAAA,SACEuF,KAAK,OACL/C,KAAK,kBACLwB,MAAO6S,EAAS6E,gBAChBxS,SAAU6S,EACV/a,UAAU,+BACV6J,YAAY,kBACZ2K,UAAQ,KAGZxV,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,yBACV0Z,SAAUiB,EAAUE,cAAgBF,EAAUG,aAE7CH,EAAUE,aACT7b,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,QAAMgB,UAAU,wCAAwCqE,KAAK,SAAS,cAAY,SAAc,iBAGhGsW,EAAUG,YAAc,YAAc,eAQpD,ECgDV,MAjQkC9c,IAA6B,IAA5B,QAAE2O,EAAO,UAAEwI,GAAWnX,EACvD,MAAOid,EAAMC,IAAW9c,EAAAA,EAAAA,UAAS,OAC1B+c,EAAYC,IAAiBhd,EAAAA,EAAAA,WAAS,IACtCyc,EAAcQ,IAAmBjd,EAAAA,EAAAA,WAAS,IAC1CmX,EAAgBC,IAAqBpX,EAAAA,EAAAA,WAAS,IAC9CoU,EAAa8I,IAAkBld,EAAAA,EAAAA,UAAS,CAAC,0DAA2D,KAGrGsY,EAAS,yBAAwB/J,EAAQoB,kBAAkB3Q,MAEjEmB,EAAAA,EAAAA,YAAU,KACR,MAAMwK,EAAsBC,IAC1B,MAAMiO,EAAWvV,SAASsC,cAAe,IAAG0S,sBACtCM,EAAStV,SAASsC,cAAe,IAAG0S,oBAEtCM,GAAQ9N,SAASF,EAAMG,SAItB8N,GAAU/N,SAASF,EAAMG,SAC5BqM,GAAkB,EACpB,EAIF,OADA9T,SAAS0H,iBAAiB,YAAaL,GAChC,IAAMrH,SAAS2H,oBAAoB,YAAaN,EAAmB,GACzE,CAAC2N,IAGJ,MAAMa,EAAwBA,KAC5B,MAAMC,EAAiB9V,SAAS0M,eAAe,mBACzC6I,EAAWvV,SAASsC,cAAe,IAAG0S,sBAE5C,GAAIc,GAAkBP,EAAU,CAC9B,MAAMQ,EAAeR,EAASS,wBACxBC,EAAgBH,EAAeE,wBAG/BE,EAAkBH,EAAahS,OAASkS,EAAclS,OAAU,GAEtE,GAAImS,EAAiB,EAAG,CACtB,MAAMC,EAAgB,CACpBtX,IAAKiX,EAAeM,UAAYF,EAChCG,SAAU,UAEZP,EAAeQ,OAAOH,EACxB,CACF,GA0BIjB,EAAwBuB,IAC5B,IAAKA,EAAU,OACf,MAAMC,EAAiBD,EAASlY,MAAMc,OACtCoX,EAASlY,MAAMc,OAAS,OACxBoX,EAASlY,MAAMc,OAAU,GAAEoX,EAAStD,iBAGhCuD,IAAmBD,EAASlY,MAAMc,QACpCjB,WAAWyX,EAAuB,EACpC,EAuEF,OAAI4D,EAEAnc,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAAA,SAAOuF,KAAK,SAASvB,MAAM,qBAAqBhD,UAAU,yBAAyB0Z,UAAQ,KAM/F1a,EAAAA,cAAA,OAAKgB,UAAU,oBAAoB5C,GAAIsZ,GACrC1X,EAAAA,cAAA,OAAKgB,UAAU,4BACbhB,EAAAA,cAAA,QAAMgB,UAAU,qBACdhB,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,qGAAqG1E,SAAS,OACxIpB,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAY,2HACZqB,QAvHcgX,KAGxB,GAFA7C,GAAmBD,IAEdA,EAAgB,CACnB,MAAMiC,EAAiB9V,SAAS0M,eAAe,mBAC/C,GAAIoJ,EAAgB,CAClB,MAAMK,EAAgB,CACpBvX,KAAMkX,EAAewD,YACrBjD,SAAU,UAEZjY,YAAW,KACT0X,EAAeQ,OAAOH,GACtBN,GAAuB,GACtB,EACL,CACF,GAyGUtX,MAAO,CAAEsF,WAAY,WACtB,gCAKFgQ,GACCvW,EAAAA,cAAA,OAAKgB,UAAU,2GACVC,MAAO,CACLM,IAAK,OACL+Y,MAAO,EACPjZ,OAAQ,IACRsF,UAAW,IAEhB3G,EAAAA,cAAA,QAAMua,SAvEG/a,UAEnB,GADAhB,EAAEyQ,kBACGuL,QAAQ,oCACX,OAGF6B,GAAgB,GAEhB,MAAMxF,EAAW,IAAI0F,SACrB1F,EAAS2F,OAAO,OAAQP,GACxBpF,EAAS2F,OAAO,uBAAwB7O,EAAQoB,kBAAkB3Q,IAGtCoV,EAAYzH,QAAO5E,GAAkB,KAAbA,EAAEkR,SAClCjF,SAAQK,IAC1BoD,EAAS2F,OAAO,gBAAiB/I,EAAW,IAG9C,IASE,WARuB/T,MAAM,8CAA+C,CAC1EqF,OAAQ,OACRT,QAAS,CACP,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMmH,KAGMlX,GACZ,MAAM,IAAIlB,MAAM,+BAGlB2d,GAAc,GACdjG,GACF,CAAE,MAAOtW,GACPC,QAAQD,MAAM,wCAAyCA,EACzD,CAAC,QACCwc,GAAgB,EAClB,GAkCwCrb,UAAU,4BACtChB,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAAA,OAAKgB,UAAU,+CACbhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,2CAA2C1E,SAAS,OAChEpB,EAAAA,cAAA,SACEuF,KAAK,OACL/C,KAAK,uBACLia,OAAO,kBACPjH,UAAQ,EACRxU,UAAU,+BACVkI,SA9HI1K,IACxB0d,EAAQ1d,EAAE2L,OAAOuS,MAAM,GAAG,EA8HNhC,SAAUmB,EACV5a,MAAO,CAAES,MAAO,eAItB1B,EAAAA,cAACqa,EAAO,CAACvU,KAAK,8BAA8B1E,SAAS,OACnDpB,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,yBACV0Z,UAAWuB,GAAQJ,GAElBA,EACC7b,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,QAAMgB,UAAU,wCAAwCqE,KAAK,SAAS,cAAY,SAAc,iBAGhG,YAMVrF,EAAAA,cAAA,OAAKgB,UAAU,2BAA2BC,MAAO,CAAEqE,SAAU,UAC1DkO,EAAYvV,KAAI,CAACwV,EAAYjB,IAC5BxS,EAAAA,cAAA,OAAKyF,IAAM,cAAa+M,IAASxR,UAAU,gBACzChB,EAAAA,cAAA,YACEgE,MAAOyP,EACPvK,SAAW1K,IAxIFya,EAACzG,EAAOxO,KACrC,MAAMkV,EAAiB,IAAI1F,GAC3B0F,EAAe1G,GAASxO,EAGpBwO,IAAU0G,EAAerW,OAAS,GAAsB,KAAjBmB,EAAMqU,QAC/Ca,EAAevU,KAAK,IAGtB2X,EAAepD,GAGfpY,WAAWyX,EAAuB,EAAE,EA6HdU,CAAuBzG,EAAOhU,EAAE2L,OAAOnG,OACvC4T,EAAqBpZ,EAAE2L,OAAO,EAEhCiL,QAAU5W,GAAMoZ,EAAqBpZ,EAAE2L,QACvCnJ,UAAU,+BACV6J,YAAc,cAAa2H,EAAQ,IACnCoI,KAAM,EACN3Z,MAAO,CAAE8U,SAAU,SAAUD,OAAQ,UAEvC9V,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,kCACVqB,QAASA,IArICmQ,KAC9B,MAAMiB,EAAaD,EAAYhB,GAC1BiB,GAAoC,KAAtBA,EAAW4E,SAG9BiE,EAAe9I,EAAYzH,QAAO,CAACqF,EAAGoI,IAAMA,IAAMhH,KAGlD1R,WAAWyX,EAAuB,GAAE,EA6HDgB,CAAuB/G,GACtCvR,MAAO,CACLqE,SAAU,OACVwV,WAAYtH,EAAY3Q,OAAS,GAA2B,KAAtB4Q,EAAW4E,OAC7C,UACA,WAEP,gBAWb,EC9BV,MA1NmBrZ,IAAwD,IAAvD,sBAAEkX,EAAqB,QAAEvI,EAAO,cAAEgP,GAAe3d,EACnE,MAAO4d,EAAYC,IAAiBzd,EAAAA,EAAAA,WAAS,IACtCuX,EAAWC,IAAgBxX,EAAAA,EAAAA,WAAS,IACpC0d,EAAeC,IAAoB3d,EAAAA,EAAAA,UAAS,OAC5C4d,EAAYC,IAAiB7d,EAAAA,EAAAA,YAAWuO,EAAQoB,kBAAkBmO,yBAWzE,SAASC,IACPvG,GAAa,GACblX,MAAO,2DAA0DiO,EAAQoB,kBAAkB3Q,MACxFsF,MAAKjE,GAAYA,EAASG,SAC1B8D,MAAKa,IACJwY,EAAiBxY,EAAK,IAEvB6Y,SAAQ,KACPxG,GAAa,EAAM,GAEzB,EAnBArX,EAAAA,EAAAA,YAAU,KACRwd,EAAiBpP,EAAQ0P,gBACzBzG,GAAa,EAAM,GAClB,CAACjJ,EAAQ0P,kBAEZ9d,EAAAA,EAAAA,YAAU,KACRsd,GAAc,EAAM,GACnB,CAAClP,EAAQ0P,iBA4CZ,OACErd,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,MACE5B,GAAK,WAAUuP,EAAQvP,KACvB6C,MAAO,CACLkL,OAAQ,UACRvF,QAAS,aAEXvE,QAASA,IAAMwa,GAAeD,IAE7BD,EAAc7Q,SAAS,SACtB9L,EAAAA,cAAA,MAAIiB,MAAO,CACTG,SAAU,SACVE,KAAM,EACNU,gBAAiB,QACjBX,OAAQ,IAERrB,EAAAA,cAAA,UAAQgB,UAAU,oBACf2M,EAAQO,eAAiB,QAI/ByO,EAAc7Q,SAAS,cACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQW,WAAa,IAAIpK,KAAKyJ,EAAQW,WAAW5D,sBAGrDiS,EAAc7Q,SAAS,cACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQQ,cAAgB,OAG5BwO,EAAc7Q,SAAS,kBACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQM,eAAiB,OAG7B0O,EAAc7Q,SAAS,cACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQK,gBAAkB,OAG9B2O,EAAc7Q,SAAS,WACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQ2P,gBAAkBzV,EAAc8F,EAAQ2P,iBAGpDX,EAAc7Q,SAAS,WACtB9L,EAAAA,cAAA,MAAIgB,UAAU,cAAcC,MAAO,CACjC8U,SAAU,SACVwH,aAAc,WACdhX,WAAY,WAEXoH,EAAQ6P,aAAe,KAG3Bb,EAAc7Q,SAAS,gBACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQ8P,cAAcpK,YAAc,IAAInP,KAAKyJ,EAAQ8P,aAAapK,YAAY3I,sBAGlFiS,EAAc7Q,SAAS,iBACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQ0E,yBAAyBO,oBAChC/K,EAAc8F,EAAQ0E,wBAAwBO,qBAGnD+J,EAAc7Q,SAAS,WACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQ0E,yBAAyBM,UAAY,KAGjDgK,EAAc7Q,SAAS,YACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQ0E,yBAAyBC,QAAQzP,QAAU,GAGvD8Z,EAAc7Q,SAAS,MACtB9L,EAAAA,cAAA,MAAIgB,UAAU,eACX2M,EAAQ0E,yBAAyBO,oBAAsBjF,EAAQ2P,gBAC7D,GAAElV,KAAKC,MAAOsF,EAAQ0E,wBAAwBO,mBAAqBnK,EAA6BkF,EAAQ2P,gBAAmB,SAIjIX,EAAc7Q,SAAS,kBACtB9L,EAAAA,cAAA,MAAIiB,MAAO,CAAEsF,WAAY,WACvBvG,EAAAA,cAAA,OAAKiB,MAAO,CAAEG,SAAU,WAAYwF,QAAS,iBAC1C+G,EAAQ0E,yBAAyBiE,mBAAqBJ,GAAyB,CAAC,QAAS,eAAgB,oCAAoCpK,SAAS6B,EAAQ8P,cAAcnE,SAC3KtZ,EAAAA,cAAA,OAAKgB,UAAU,oBAAoBC,MAAO,CAAEG,SAAU,WAAYmF,WAAY,WAC5EvG,EAAAA,cAAA,OAAKgB,UAAU,mBAAkB,KACjChB,EAAAA,cAAA,OAAKgB,UAAU,mBAAkB,0CACS2M,EAAQ0E,yBAAyBiE,mBAAmB,2DAIlGtW,EAAAA,cAAA,QAAMiB,MAAO,CAAEQ,WAAY,SACxBkM,EAAQ0E,yBAAyBiE,oBAChC,IAAIpS,KAAKyJ,EAAQ0E,wBAAwBiE,mBAAqB,aAAa5L,mBAAmB,QAAS,CACrGiJ,MAAO,UACPC,IAAK,UACLC,KAAM,eAOlB7T,EAAAA,cAAA,UACEA,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,UACEgB,UAAU,0BACV,iBAAe,WACf,gBAAc,QACdqB,QAAU7D,GAAMA,EAAEkf,kBAClBzc,MAAO,CAAEmB,SAAU,WACpB,UAGDpC,EAAAA,cAAA,MAAIgB,UAAU,kCAAkCC,MAAO,CAAEiF,QAAS,EAAGxE,MAAO,OAAQ4D,SAAU,SAC5FtF,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEgB,UAAU,0BACVqB,QAAU7D,IACRA,EAAEkf,kBAzJQC,MAC1B,MAAMrE,EAAS0D,EAAa,YAAc,UACpCY,EAAkB,4BAA2BtE,kBAE/CpU,OAAOsV,QAAQoD,KACjBhH,GAAa,GACblX,MAAO,mBAAkB4Z,aAAmB,CAC1CvU,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,2BAA2B6Y,aAAa,YAEjFnO,KAAMC,KAAKC,UAAU,CACnBC,qBAAsBlC,EAAQoB,kBAAkB3Q,OAGjDsF,MAAKjE,IACJ,IAAKA,EAASE,GAAI,MAAM,IAAIlB,MAAO,GAAE6a,YAErC,OADA2D,GAAeD,GACRvd,EAASG,MAAM,IAEvBke,OAAMje,IACL4a,MAAO,aAAYnB,aAAkB,IAEtC8D,SAAQ,KACPxG,GAAa,EAAM,IAEzB,EA+HgB+G,EAAqB,EAEvB1c,MAAO,CAAEmB,SAAU,WAAYmE,WAAY,WAE1CyW,EAAa,YAAc,eAMrCrG,GAAa3W,EAAAA,cAAA,UAAIA,EAAAA,cAAA,OAAKgB,UAAU,mCAAmCqE,KAAK,aACvEsR,GAAa3W,EAAAA,cAAA,UACU,0BAAtB8c,EAAcvX,MAAoCvF,EAAAA,cAAA,OAAKqC,QAAU7D,GAAMA,EAAEkf,mBAAmB1d,EAAAA,cAAC+d,EAAoB,CAAC5H,UAAWgH,EAA4BxP,QAASA,EAASuI,sBAAuBA,KAC5K,wBAAtB4G,EAAcvX,MAAkCvF,EAAAA,cAAA,WAAK,iDAE/B,2BAAtB8c,EAAcvX,MAAqCvF,EAAAA,cAAA,OAAKqC,QAAU7D,GAAMA,EAAEkf,mBAAmB1d,EAAAA,cAACge,EAAkB,CAAC7H,UAAWgH,EAA4BxP,QAASA,KAC3I,gCAAtBmP,EAAcvX,MAA0CvF,EAAAA,cAAA,OAAKqC,QAAU7D,GAAMA,EAAEkf,mBAAmB1d,EAAAA,cAACie,EAAyB,CAAC9H,UAAWgH,EAA4BxP,QAASA,KAEvJ,2CAAtBmP,EAAcvX,MAAqDvF,EAAAA,cAAA,WAAK,4CAClD,uBAAtB8c,EAAcvX,MAAiCvF,EAAAA,cAAA,WAAK,8BAG9B,0BAAtB8c,EAAcvX,MAAoCvF,EAAAA,cAAA,WAAK,2DACjC,sBAAtB8c,EAAcvX,MAAgCvF,EAAAA,cAAA,WAAK,oCAAkC8c,EAAcoB,OAAOC,sBAAyB,OAAM,IAAIja,KAAK4Y,EAAcoB,OAAOC,sBAAsB9K,YAAY3I,uBAAyB,GAAG,OAGzOkS,GACC5c,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIoe,QAAS,GAAIpd,UAAU,OACzBhB,EAAAA,cAACqe,EAAc,CAAC1Q,QAASA,MAI9B,ECzNP,MAAM2Q,EAAWtf,IAA8B,IAA7B,OAAEuf,EAAM,YAAEC,GAAaxf,EACvC,MAAMyf,EAAWD,EAAYD,SAAWA,EAClCG,EAAYF,EAAYE,UAE9B,OACE1e,EAAAA,cAAA,OAAK0B,MAAM,KAAKK,OAAO,KAAK0F,QAAQ,YAAYD,KAAK,OAAOD,MAAM,6BAA6BvG,UAAU,aACvGhB,EAAAA,cAAA,QAAMmH,EAAE,wBAAwB0B,OAAQ4V,GAA0B,SAAdC,EAAuB,UAAY,UAAW5V,YAAa2V,GAA0B,SAAdC,EAAuB,IAAM,MACxJ1e,EAAAA,cAAA,QAAMmH,EAAE,qBAAqB0B,OAAQ4V,GAA0B,QAAdC,EAAsB,UAAY,UAAW5V,YAAa2V,GAA0B,QAAdC,EAAsB,IAAM,MAC/I,EAmRV,MA/QsBlT,IAQf,IARgB,SACrBmT,EAAQ,YACRC,EAAW,qBACXC,EAAoB,WACpBC,EAAU,aACVC,EAAY,kBACZC,EAAiB,sBACjB9I,GACD1K,EACC,MAAOyT,EAAkBC,IAAuB9f,EAAAA,EAAAA,UAAS,OAClD+f,EAAYC,GAAiBpf,EAAAA,SAAe,CACjDue,OAAQ,KACRG,UAAW,SAGbnf,EAAAA,EAAAA,YAAU,KACR,MAAMwK,EAAsBC,IAC1B,MAAM6N,EAAYnV,SAASiV,iBAAiB,oBACtCG,EAAUpV,SAASiV,iBAAiB,kBAGvCI,MAAM3X,KAAKyX,GAAW9G,MAAKkH,GAAYA,EAAS/N,SAASF,EAAMG,WAC/D4N,MAAM3X,KAAK0X,GAAS/G,MAAKiH,GAAUA,EAAO9N,SAASF,EAAMG,WAE1D+U,EAAoB,KACtB,EAIF,OADAxc,SAAS0H,iBAAiB,YAAaL,GAChC,IAAMrH,SAAS2H,oBAAoB,YAAaN,EAAmB,GACzE,IAEH,MAAMsV,EAAcd,IAClB,MAAMG,EAAYS,EAAWZ,SAAWA,GAAmC,QAAzBY,EAAWT,UAAsB,OAAS,MAC5FU,EAAc,CAAEb,SAAQG,cAExB,MAAMY,EAAc,CAClB,iBACA,0CACA,wBACA,sBACA,gBACA,kBACA,4DACA,8BACA,mCACA,wCAGIC,EAAiB,IAAIZ,GAAUa,MAAK,CAACC,EAAGC,KAC5C,MAAMC,EAAeA,CAACC,EAAMC,IACtBD,EAAOC,GAAc,EACrBD,EAAOC,EAAa,EACjB,EAGT,IAAIC,EAAa,EACjB,OAAQvB,GACN,IAAK,OACHuB,EAAaH,EAAaF,EAAEvR,eAAeiC,cAAeuP,EAAExR,eAAeiC,eAC3E,MACF,IAAK,YACH2P,EAAaH,EAAa,IAAIzb,KAAKub,EAAEnR,WAAY,IAAIpK,KAAKwb,EAAEpR,YAC5D,MACF,IAAK,YACHwR,EAAaH,EAAaF,EAAEtR,cAAcgC,cAAeuP,EAAEvR,cAAcgC,eACzE,MACF,IAAK,eACH2P,EAAaH,EAAaF,EAAExR,eAAekC,cAAeuP,EAAEzR,eAAekC,eAC3E,MACF,IAAK,YACH2P,EAAaH,EAAaF,EAAEzR,gBAAgBmC,cAAeuP,EAAE1R,gBAAgBmC,eAC7E,MACF,IAAK,SACH2P,EAAaH,EAAazX,WAAWuX,EAAEnC,gBAAgBjd,QAAQ,QAAS,MAAQ,EAAG6H,WAAWwX,EAAEpC,gBAAgBjd,QAAQ,QAAS,MAAQ,GACzI,MACF,IAAK,SAGHyf,EAAaH,EAFEL,EAAYS,QAAQN,EAAEjC,aACtB8B,EAAYS,QAAQL,EAAElC,cAErC,MACF,IAAK,aACHsC,EAAaH,EAAa,IAAIzb,KAAKub,EAAEhC,aAAapK,YAAa,IAAInP,KAAKwb,EAAEjC,aAAapK,aACvF,MACF,IAAK,cACHyM,EAAaH,EAAazX,WAAWuX,EAAEpN,yBAAyBO,qBAAuB,EAAG1K,WAAWwX,EAAErN,yBAAyBO,qBAAuB,GACvJ,MACF,IAAK,mBACHkN,EAAaH,EAAa/b,SAAS6b,EAAEpN,yBAAyBM,WAAa,EAAG/O,SAAS8b,EAAErN,yBAAyBM,WAAa,GAC/H,MACF,IAAK,gBACHmN,EAAaH,EAAa/b,SAAS6b,EAAEpN,yBAAyBC,SAAW,EAAG1O,SAAS8b,EAAErN,yBAAyBC,SAAW,GAC3H,MACF,IAAK,aACHwN,EAAaH,EACVF,EAAEpN,yBAAyBO,oBAAsB6M,EAAEnC,eAClDlV,KAAKC,MAAOoX,EAAEpN,wBAAwBO,mBAAqBnK,EAA6BgX,EAAEnC,gBAAmB,KAAO,EACrHoC,EAAErN,yBAAyBO,oBAAsB8M,EAAEpC,eAClDlV,KAAKC,MAAOqX,EAAErN,wBAAwBO,mBAAqBnK,EAA6BiX,EAAEpC,gBAAmB,KAAO,GAExH,MACF,IAAK,eACHwC,EAAaH,EAAa,IAAIzb,KAAKub,EAAEpN,yBAAyBiE,oBAAqB,IAAIpS,KAAKwb,EAAErN,yBAAyBiE,qBACvH,MACF,QACEwJ,EAAa,EAGjB,MAAqB,QAAdpB,EAAsBoB,GAAcA,CAAU,IAGvDlB,EAAYW,EAAe,EAGvB5C,EAAgBkC,EAAqBmB,SAAW,GAMtD,OAJAlgB,QAAQ+N,IAAI,oCACZ/N,QAAQ+N,IAAI8O,GACZ7c,QAAQ+N,IAAI,oCAGV7N,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAK5B,GAAG,kBAAkB4C,UAAU,mBAAmBC,MAAO,CAAEG,SAAU,WAAY6e,UAAW,UAC/FjgB,EAAAA,cAAA,SAAOgB,UAAU,iBAAiBC,MAAO,CAAEif,cAAe,WACxDlgB,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACG2c,EAAc7Q,SAAS,SACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,QAASpe,MAAO,CAAEkL,OAAQ,YAChGnM,EAAAA,cAAA,OAAKgB,UAAU,UAAS,QACjBhB,EAAAA,cAACse,EAAQ,CAACC,OAAO,OAAOC,YAAaW,MAI/CxC,EAAc7Q,SAAS,cACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,aAAcpe,MAAO,CAAEkL,OAAQ,YACrGnM,EAAAA,cAAA,OAAKgB,UAAU,oDAAmD,aACtDhB,EAAAA,cAACse,EAAQ,CAACC,OAAO,YAAYC,YAAaW,MAIzDxC,EAAc7Q,SAAS,cACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,aAAcpe,MAAO,CAAEkL,OAAQ,YACrGnM,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,gGAAgG1E,SAAS,UACnIpB,EAAAA,cAAA,OAAKgB,UAAU,oDAAmD,aACtDhB,EAAAA,cAACse,EAAQ,CAACC,OAAO,YAAYC,YAAaW,OAK3DxC,EAAc7Q,SAAS,kBACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,gBAAiBpe,MAAO,CAAEkL,OAAQ,YACxGnM,EAAAA,cAAA,OAAKgB,UAAU,oDAAmD,iBAClDhB,EAAAA,cAACse,EAAQ,CAACC,OAAO,eAAeC,YAAaW,MAIhExC,EAAc7Q,SAAS,cACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,aAAcpe,MAAO,CAAEkL,OAAQ,YACrGnM,EAAAA,cAAA,OAAKgB,UAAU,oDAAmD,aACtDhB,EAAAA,cAACse,EAAQ,CAACC,OAAO,YAAYC,YAAaW,MAIzDxC,EAAc7Q,SAAS,WACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,UAAWpe,MAAO,CAAEkL,OAAQ,YAClGnM,EAAAA,cAACqa,EAAO,CAACvU,KAAK,yBAAyB1E,SAAS,UAC9CpB,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,UAAW,UACvFtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,SAASC,YAAaW,OAKrDxC,EAAc7Q,SAAS,WACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,gCAAgCqB,QAASA,IAAMgd,EAAW,UAAWpe,MAAO,CAAEkL,OAAQ,YAC9GnM,EAAAA,cAACqa,EAAO,CAACvU,KAAK,uCAAuC1E,SAAS,UAC5DpB,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,UAAW,UACvFtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,SAASC,YAAaW,OAKrDxC,EAAc7Q,SAAS,gBACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,cAAepe,MAAO,CAAEkL,OAAQ,YACtGnM,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,mDAAmD1E,SAAS,UACtFpB,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,UAAW,eAClFtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,aAAaC,YAAaW,OAK9DxC,EAAc7Q,SAAS,iBACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,eAAgBpe,MAAO,CAAEkL,OAAQ,YACvGnM,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,2CAA2C1E,SAAS,UAC9EpB,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,UAAW,gBACjFtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,cAAcC,YAAaW,OAKhExC,EAAc7Q,SAAS,WACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,oBAAqBpe,MAAO,CAAEkL,OAAQ,YAC5GnM,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,2CAA2C1E,SAAS,UAC9EpB,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,SAAU,UACtFtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,mBAAmBC,YAAaW,OAK/DxC,EAAc7Q,SAAS,YACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,iBAAkBpe,MAAO,CAAEkL,OAAQ,YACzGnM,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,SAAU,WACrFtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,gBAAgBC,YAAaW,MAI3DxC,EAAc7Q,SAAS,MACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,cAAepe,MAAO,CAAEkL,OAAQ,YACtGnM,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,8CAA8C1E,SAAS,UACjFpB,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,SAAU,KAC3FtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,aAAaC,YAAaW,OAKpDxC,EAAc7Q,SAAS,kBACtB9L,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,gBAAiBpe,MAAO,CAAEkL,OAAQ,YACxGnM,EAAAA,cAACqa,EAAO,CAAC3Y,MAAM,QAAQoE,KAAK,yDAAyD1E,SAAS,UAC5FpB,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,UAAW,iBAChFtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,eAAeC,YAAaW,OAKnEnf,EAAAA,cAAA,MAAIuD,MAAM,QACVvD,EAAAA,cAAA,MAAIuD,MAAM,MAAMvC,UAAU,oBAAoBqB,QAASA,IAAMgd,EAAW,UAAWpe,MAAO,CAAEkL,OAAQ,YAClGnM,EAAAA,cAACqa,EAAO,CAACvU,KAAK,6BAA6B1E,SAAS,UAClDpB,EAAAA,cAAA,OAAKgB,UAAU,mDAAmDC,MAAO,CAAEqE,SAAU,SAAU,UACtFtF,EAAAA,cAACse,EAAQ,CAACC,OAAO,SAASC,YAAaW,SAMxDnf,EAAAA,cAAA,SAAOgB,UAAU,SACd2d,EAAS1gB,KAAI0P,GACZ3N,EAAAA,cAACmgB,EAAU,CACT1a,IAAKkI,EAAQvP,GACbygB,qBAAsBA,EACtB3I,sBAAuBA,EACvB8I,kBAAmBA,EACnBrR,QAASA,EACTgP,cAAeA,EACfsC,iBAAkBA,EAClBC,oBAAqBA,QAM5BH,GACC/e,EAAAA,cAAA,OAAKgB,UAAU,oBACbhB,EAAAA,cAAA,UAAQqC,QAASyc,EAAY9d,UAAU,mBAAkB,eAM9D,EClRP,MAAMof,EAAyB,CAAC,WAC1BC,EAAwB,CAAC,OAAQ,YAAa,SAAU,SAAU,cAAe,eAAgB,SAAU,UAAW,IAAK,iBA2VjI,MAzViBC,KACf,MAAOC,EAAYC,IAAiBphB,EAAAA,EAAAA,UAAS,OACtCqhB,EAAcC,IAAmBthB,EAAAA,EAAAA,UAAS,OAC1CmE,EAAOC,IAAYpE,EAAAA,EAAAA,UAAS,OAC5BuhB,EAAUC,IAAexhB,EAAAA,EAAAA,WAAS,KACvC,MAAMyhB,EAAY,IAAIC,gBAAgB5b,OAAO7F,SAAS0hB,QACtD,OAAOnd,SAASid,EAAUG,IAAI,eAAiB,CAAC,KAE3CC,EAAkBC,IAAuB9hB,EAAAA,EAAAA,UAAS,OAElDyf,EAAsBsC,IAA2B/hB,EAAAA,EAAAA,WAAS,KAC/D,MAAMyhB,EAAY,IAAIC,gBAAgB5b,OAAO7F,SAAS0hB,QAChDK,EAAgB,CACpBpB,QAASK,GAILgB,EAAcR,EAAUG,IAAI,mBAC9BK,IACFD,EAAcL,OAASM,GAIzB,MAAMC,EAAqBT,EAAUG,IAAI,iCACrCM,IACFF,EAAcvR,qBAAuByR,GAIvC,IAAK,MAAO7b,EAAKzB,KAAU6c,EAAU1P,UACnC,GAAI1L,EAAI8b,WAAW,aAAe9b,EAAI+b,SAAS,KAAM,CACnD,MAAMC,EAAUhc,EAAIic,MAAM,mCAC1B,IAAKD,EAAS,CAEZ,MAAME,EAAclc,EAAIic,MAAM,uBAC1BC,IAAgB,CAAC,SAAU,wBAAwB7V,SAAS6V,EAAY,MAC1EP,EAAcO,EAAY,IAAM3d,GAElC,QACF,CAEA,MAAO,CAAE4d,EAAYC,GAAmBJ,EAExC,GAAI,CAAC,SAAU,wBAAwB3V,SAAS8V,GAAa,SAExDR,EAAcQ,KACjBR,EAAcQ,GAAcE,OAAOC,UAAUne,SAASie,IAAoB,GAAK,CAAC,GAG9EC,OAAOC,UAAUne,SAASie,IACxB9J,MAAMiK,QAAQZ,EAAcQ,KAC9BR,EAAcQ,GAAYjd,KAAKX,GAG5B+T,MAAMiK,QAAQZ,EAAcQ,MAC/BR,EAAcQ,GAAYC,GAAmB7d,EAGnD,CAGF,OAAOod,CAAa,KAGtB7hB,EAAAA,EAAAA,YAAU,KACsBC,WAC5B,MAAMyiB,QAAiCviB,MAAO,8CAA8C,CAC1F4E,QAAS,CACP,OAAU,sBAGR4d,QAA6BD,EAAyBriB,OAC5DshB,EAAoBgB,EAAqB,EAE3CC,EAAuB,GACtB,IAGH,MAAOxV,EAASyV,IAAchjB,EAAAA,EAAAA,UAAS,KAEvCG,EAAAA,EAAAA,YAAU,KACR,MAAMshB,EAAY,IAAIC,gBACtBD,EAAUwB,IAAI,YAAa1B,GAE3B/hB,OAAOuS,QAAQ0N,GACZ9S,QAAO/M,IAAA,IAAEyG,GAAIzG,EAAA,MAAa,YAARyG,CAAiB,IACnC2N,SAAQ5H,IAAmB,IAAjB/F,EAAKzB,GAAMwH,EACC,kBAAVxH,EAETpF,OAAOuS,QAAQnN,GAAOoP,SAAQ/G,IAA6B,IAA3BiW,EAAUC,GAAWlW,EACnDwU,EAAUwB,IAAK,WAAU5c,MAAQ6c,KAAaC,EAAW,IAI3D1B,EAAUwB,IAAK,WAAU5c,KAAQzB,EACnC,IAGJ,MAAMwe,EAAU,GAAEtd,OAAO7F,SAAS8F,WAAW0b,EAAUrY,WAAa,IAAMqY,EAAUrY,WAAa,KACjGtD,OAAOud,QAAQC,UAAU,CAAC,EAAG,GAAIF,EAAO,GACvC,CAAC3D,EAAsB8B,KAgD1BphB,EAAAA,EAAAA,YAAU,KACRmhB,EAAgB,MA/COlhB,WACvB,MAAMqhB,EAAY,IAAIC,gBACtBD,EAAUwB,IAAI,YAAa1B,GAE3B,MAAMgC,EAAgB/jB,OAAOuS,QAAQ0N,GAClC9S,QAAOW,IAAA,IAAEjH,GAAIiH,EAAA,OAAM0T,EAAuBtU,SAASrG,EAAI,IACvDxH,KAAI2kB,IAAmB,IAAjBnd,EAAKzB,GAAM4e,EAChB,MAAqB,kBAAV5e,EAEFpF,OAAOuS,QAAQnN,GACnB/F,KAAI4kB,IAAA,IAAEP,EAAUC,GAAWM,EAAA,MAAM,WAAUpd,MAAQ6c,MAAaC,GAAY,IAC5EpP,KAAK,KAGF,WAAU1N,MAAQzB,GAAO,IAChCmP,KAAK,KAEJ2P,QAA6BpjB,MAAO,iCAAgCmhB,EAAUrY,cAAcma,IAAiB,CACjHre,QAAS,CACP,OAAU,sBAGRye,QAAyBD,EAAqBljB,OACpD8gB,EAAgBqC,EAAiB,EAyBjCC,EAAkB,GACjB,CAACrC,EAAU9B,KAEdtf,EAAAA,EAAAA,YAAU,KAfcC,WACtB,MAAMyjB,QAA2BvjB,MAAO,8BAA8B,CACpE4E,QAAS,CACP,OAAU,sBAGR4e,QAAuBD,EAAmBrjB,OAChD4gB,EAAc0C,EAAe,EAS7BC,GA1BwB3jB,WACxB,MAAM4jB,QAA6B1jB,MAAO,gCAAgC,CACxE4E,QAAS,CACP,OAAU,sBAGR+e,QAAyBD,EAAqBxjB,OACpDwiB,EAAWiB,EAAiB1W,QAAQ,EAoBpC2W,EAAmB,GAClB,IAEH,MAaMC,EAAsB9d,IAC1B,MAAM+d,EAAqB,IAAK3E,UACzB2E,EAAmB/d,GAC1B0b,EAAwBqC,EAAmB,EAO7C,OACExjB,EAAAA,cAACyjB,EAAM,CAAClgB,MAAOA,GACbvD,EAAAA,cAAA,WACGugB,GACCvgB,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,MAAIgB,UAAU,6BAA4B,UAAQuf,EAAWmD,SAASlhB,MAEtExC,EAAAA,cAAA,KAAGgB,UAAU,wBAAuB,4EAIpChB,EAAAA,cAAA,WAEsB,OAArBihB,EACCjhB,EAAAA,cAAA,OAAKgB,UAAU,yBACbhB,EAAAA,cAAA,QAAMgB,UAAU,qBAAqBC,MAAO,CAAEc,OAAQ,YAGxD/B,EAAAA,cAAA,OAAKgB,UAAU,8BACbhB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,mCACbhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,+DAA+D1E,SAAS,OACpFpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,aACrBhB,EAAAA,cAAA,MAAIgB,UAAU,+BAA+B6G,EAAcoZ,EAAiB0C,kBAAoB,GAAG,QAK3G3jB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,mCACbhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,8DAA8D1E,SAAS,OACnFpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,eACrBhB,EAAAA,cAAA,MAAIgB,UAAU,8BAA8B6G,EAAcoZ,EAAiB2C,oBAAsB,GAAG,QAK5G5jB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,mCACbhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,oEAAoE1E,SAAS,OACzFpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,uBACrBhB,EAAAA,cAAA,MAAIgB,UAAU,+BAA+B6G,EAAcoZ,EAAiB4C,4BAA8B,GAAG,QAKrH7jB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,mCACbhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,2DAA2D1E,SAAS,OAChFpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,kBACrBhB,EAAAA,cAAA,MAAIgB,UAAU,8BAA8B6G,EAAcoZ,EAAiB6C,6BAA+B,GAAG,QAKrH9jB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,mCACbhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,sFAAsF1E,SAAS,OAC3GpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,sBACrBhB,EAAAA,cAAA,MAAIgB,UAAY,mBAAiBigB,EAAiB8C,eAAiB,GAAK,eAAiB,iBACtF9C,EAAiB8C,eAAiB,EAAE,SAM/C/jB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,mCACbhB,EAAAA,cAACqa,EAAO,CAACvU,KAAK,iDAAiD1E,SAAS,OACtEpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,iBACrBhB,EAAAA,cAAA,MAAIgB,UAAU,+BAA8B,IAAEigB,EAAiB+C,cAAgB,QAQ3FhkB,EAAAA,cAAA,MAAIgB,UAAU,kBAAiB,YAEX,IAAnB2L,EAAQ9J,OACP7C,EAAAA,cAAA,OAAKgB,UAAU,yBACbhB,EAAAA,cAAA,QAAMgB,UAAU,qBAAqBC,MAAO,CAAEc,OAAQ,WAGxD/B,EAAAA,cAACikB,EAAO,CACNtX,QAASA,EACTC,aAAciS,EACdhS,UArHa,SAACpH,EAAKzB,GAA4B,IAArBse,EAAQra,UAAApF,OAAA,QAAA2D,IAAAyB,UAAA,GAAAA,UAAA,GAAG,KACjD,MAAMub,EAAqB7T,KAAKqK,MAAMrK,KAAKC,UAAUiP,IACjDyD,GAEFkB,EAAmB/d,GAAO+d,EAAmB/d,IAAQ,CAAC,EACtD+d,EAAmB/d,GAAK6c,GAAYte,GAGpCwf,EAAmB/d,GAAOzB,EAE5Bmd,EAAwBqC,EAC1B,EA2Gc1W,aAAcyW,EACdxW,SApGSmX,KACrBhf,OAAO7F,SAASqG,KAAO,sBAAsB,KAyGxC6a,IAAeE,GACdzgB,EAAAA,cAAA,OAAKgB,UAAU,yBAEbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,QAAMgB,UAAU,2BAChBhB,EAAAA,cAAA,QAAMgB,UAAU,2BAChBhB,EAAAA,cAAA,QAAMgB,UAAU,2BAChBhB,EAAAA,cAAA,QAAMgB,UAAU,2BAChBhB,EAAAA,cAAA,QAAMgB,UAAU,uBAGjB,IAAI+W,MAAM,IAAI9Z,KAAI,CAACmT,EAAGoI,IACrBxZ,EAAAA,cAAA,OAAKyF,IAAK+T,EAAGxY,UAAU,QACrBhB,EAAAA,cAAA,QAAMgB,UAAU,2BAChBhB,EAAAA,cAAA,QAAMgB,UAAU,2BAChBhB,EAAAA,cAAA,QAAMgB,UAAU,2BAChBhB,EAAAA,cAAA,QAAMgB,UAAU,2BAChBhB,EAAAA,cAAA,QAAMgB,UAAU,0BAOvB6d,EAAqBhP,sBACpB7P,EAAAA,cAACmkB,EAAK,CAAC5e,KAAK,WAAU,6CACsBvF,EAAAA,cAAA,KAAG0F,KAAK,IAAIrD,QAASA,IAAMkhB,EAAmB,yBAAyB,QAAQ,yBAI5H9C,GACCzgB,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACokB,EAAa,CACZvF,qBAAsBA,EACtBF,SAAU8B,EAAa4D,cACvBzF,YAAaD,IACX,MAAM2F,EAAiB3U,KAAKqK,MAAMrK,KAAKC,UAAU6Q,IACjD6D,EAAeD,cAAgB1F,EAC/B+B,EAAgB4D,EAAe,EAEjCtF,kBAAmByB,EAAa8D,oBAChCrO,sBAAuBuK,EAAa+D,2BAGrC/D,EAAagE,YACZzkB,EAAAA,cAAA,OAAKgB,UAAU,oBACbhB,EAAAA,cAAA,UAAQqC,QAASA,IAAMue,GAAY/U,GAAQA,EAAO,IAAI7K,UAAU,mBAAkB,cAMtFhB,EAAAA,cAAA,OAAKgB,UAAU,aAAY,WAChByf,EAAa4D,cAAcxhB,OAAO,WAAS4d,EAAaiE,YAAY,wBAK9E,EC/Rb,MAhEsBC,KACpB,MAAO/V,EAAOgW,IAAYxlB,EAAAA,EAAAA,UAAS,KAC5BylB,EAAQC,IAAa1lB,EAAAA,EAAAA,UAAS,CAAEuR,QAAS,GAAIoU,SAAS,IA4B7D,OACE/kB,EAAAA,cAACyjB,EAAM,KACLzjB,EAAAA,cAAA,OAAKgB,UAAU,kBAAiB,kBAChChB,EAAAA,cAAA,UAAI,kEACJA,EAAAA,cAAA,KAAGgB,UAAU,wBAAuB,2FACsDhB,EAAAA,cAAA,WAAK,qEAI/FA,EAAAA,cAAA,QAAMua,SAnCW/a,UACnBhB,EAAEyQ,iBACF6V,EAAU,CAAEnU,QAAS,GAAIoU,SAAS,IAElC,IACE,MAAMtlB,QAAiBC,MAAM,sCAAuC,CAClEqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAU,CAAEhB,YAGzB,GAAInP,EAASE,GACXmlB,EAAU,CAAEnU,QAAS,4BAA6BoU,SAAS,IAC3DH,EAAS,QACJ,CACL,MAAMrgB,QAAa9E,EAASG,OAC5BklB,EAAU,CAAEnU,QAASpM,EAAKoM,QAASoU,SAAS,GAC9C,CACF,CAAE,MAAOllB,GACPilB,EAAU,CAAEnU,QAAS9Q,EAAM8Q,QAASoU,SAAS,GAC/C,GAYgC/jB,UAAU,aACrC6jB,EAAOlU,SACN3Q,EAAAA,cAAA,OAAKgB,UAAY,SAAQ6jB,EAAOE,QAAU,eAAiB,wBACxDF,EAAOlU,SAGZ3Q,EAAAA,cAAA,OAAKgB,UAAU,cACbhB,EAAAA,cAAA,SACEuF,KAAK,QACLvE,UAAU,+BACV6J,YAAY,2BACZ7G,MAAO4K,EACP1F,SAAW1K,GAAMomB,EAASpmB,EAAE2L,OAAOnG,OACnCwR,UAAQ,KAIZxV,EAAAA,cAAA,UAAQuF,KAAK,SAASvE,UAAU,+BAA8B,0BAIzD,EC8Eb,MA1IuBgkB,KACrB,MAAOnO,EAAUC,IAAe1X,EAAAA,EAAAA,UAAS,CACvCoc,MAAO,GACPyJ,aAAc,GACdC,eAAgB,GAChBC,aAAc,GACdC,cAAe,GACfC,YAAa,MAGf9lB,EAAAA,EAAAA,YAAU,KACR+lB,GAAkB,GACjB,IAEH,MAAMA,EAAmB9lB,UACvB,IACE,MAAMC,QAAiBC,MAAM,gCACvB6E,QAAa9E,EAASG,OACxB2E,EAAKmf,UACP5M,EAAY,CACV0E,MAAOjX,EAAKmf,SAASlI,OAAS,GAC9ByJ,aAAc1gB,EAAKmf,SAASuB,cAAgB,KAC5CC,eAAgB3gB,EAAKmf,SAASwB,gBAAkB,GAChDC,aAAc5gB,EAAKmf,SAASyB,cAAgB,GAC5CC,cAAe7gB,EAAKmf,SAAS0B,eAAiB,GAC9CC,YAAa9gB,EAAKmf,SAAS2B,aAAe,IAGhD,CAAE,MAAOxlB,GACP4a,MAAM,8BACR,GAGIsB,EAAgBvd,IACpB,MAAM,KAAEgE,EAAI,MAAEwB,GAAUxF,EAAE2L,OAC1B2M,GAAYjL,IAAI,IACXA,EACH,CAACrJ,GAAOwB,KACP,EA0BL,OACEhE,EAAAA,cAACyjB,EAAM,KACLzjB,EAAAA,cAAA,MAAIgB,UAAU,kBAAiB,mBAC/BhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,UAAI,0CACJA,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,gDACbhB,EAAAA,cAAA,KAAGgB,UAAU,mBAAkB,qIAE7BhB,EAAAA,cAAA,WAAMA,EAAAA,cAAA,WAAK,gDAMjBA,EAAAA,cAAA,QAAMua,SAtCS/a,UACnBhB,EAAEyQ,iBACF,IACE,MAAMxP,QAAiBC,MAAM,8CAA+C,CAC1EqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAU,CAAE8T,SAAU7M,MAG7BtS,QAAa9E,EAASG,OACxBH,EAASE,GACX8a,MAAM,wCAENA,MAAMlW,EAAKoM,QAEf,CAAE,MAAO9Q,GACP4a,MAAM,iCACR,IAmBMza,EAAAA,cAAA,OAAKgB,UAAU,WACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACZpC,OAAOuS,QAAQ,CACdqK,MAAO,aACPyJ,aAAc,0BACdC,eAAgB,iBAChBC,aAAc,SACblnB,KAAIe,IAAA,IAAEkT,EAAON,GAAM5S,EAAA,OACpBgB,EAAAA,cAAA,OAAKgB,UAAU,OAAOyE,IAAKyM,GACzBlS,EAAAA,cAAA,SAAOulB,QAASrT,EAAOlR,UAAU,cAAc4Q,GAC/C5R,EAAAA,cAAA,SACEuF,KAAK,OACLvE,UAAU,eACV5C,GAAI8T,EACJ1P,KAAM0P,EACNlO,MAAO6S,EAAS3E,GAChBhJ,SAAU6S,IAER,IAGR/b,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,iBACbhB,EAAAA,cAAA,SAAOulB,QAAQ,gBAAgBvkB,UAAU,cAAa,SACtDhB,EAAAA,cAAA,SACEuF,KAAK,OACLvE,UAAU,eACV5C,GAAG,gBACHoE,KAAK,gBACLwB,MAAO6S,EAASuO,cAChBlc,SAAU6S,KAId/b,EAAAA,cAAA,OAAKgB,UAAU,iBACbhB,EAAAA,cAAA,SAAOulB,QAAQ,cAAcvkB,UAAU,cAAa,YACpDhB,EAAAA,cAAA,SACEuF,KAAK,OACLvE,UAAU,eACV5C,GAAG,cACHoE,KAAK,cACLwB,MAAO6S,EAASwO,YAChBnc,SAAU6S,MAKhB/b,EAAAA,cAAA,UAAQuF,KAAK,SAASvE,UAAU,mBAAkB,8BAOnD,E,oBCkHb,MArPcwkB,KACZ,MAAOC,EAAOC,IAAYtmB,EAAAA,EAAAA,UAAS,KAC5BumB,EAAWC,IAAgBxmB,EAAAA,EAAAA,UAAS,KACpCS,EAAOyD,IAAYlE,EAAAA,EAAAA,UAAS,OAC5BymB,EAASC,IAAc1mB,EAAAA,EAAAA,WAAS,IAChC2mB,EAAcC,IAAmB5mB,EAAAA,EAAAA,UAAS,KAC1C6mB,EAAaC,IAAkB9mB,EAAAA,EAAAA,UAAS,SACxC+mB,EAAWC,IAAgBhnB,EAAAA,EAAAA,UAAS,OACpCinB,EAAgBC,IAAqBlnB,EAAAA,EAAAA,UAAS,OAC9CmE,EAAOC,IAAYpE,EAAAA,EAAAA,UAAS,OAC5BmnB,EAAkBC,IAAuBpnB,EAAAA,EAAAA,UAAS,OAClDqnB,EAAcC,IAAmBtnB,EAAAA,EAAAA,UAAS,MAE3CunB,EAAannB,UACjB,IACE,MAAMC,QAAiBC,MAAM,wBAAyB,CACpD4E,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,WAIlE,IAAKd,EAASE,GACZ,MAAM,IAAIlB,MAAM,yBAGlB,MAAM8F,QAAa9E,EAASG,OAC5B8lB,EAASnhB,EAAKkhB,OACdG,EAAarhB,EAAKqiB,WACpB,CAAE,MAAOC,GACPvjB,EAASujB,EAAIlW,QACf,CAAC,QACCmV,GAAW,EACb,IAcFvmB,EAAAA,EAAAA,YAAU,KACRonB,IAZoBnnB,WACpB,MAAMC,QAAiBC,MAAM,6BAA8B,CACzD4E,QAAS,CACP,OAAU,sBAGRC,QAAa9E,EAASG,OAC5B4D,EAASe,EAAKhB,OACdijB,EAAoBjiB,EAAKuiB,aAAalY,MAAM,EAK5CnL,EAAe,GACd,IAyEH,OAAIoiB,EAAgB7lB,EAAAA,cAAA,WAAK,cACrBH,EAAcG,EAAAA,cAAA,WAAK,UAAQH,GAG7BG,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAC4F,EAAO,CAACrC,MAAOA,IAChBvD,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,OAAKgB,UAAU,0DACbhB,EAAAA,cAAA,UAAI,UAGNA,EAAAA,cAAA,OAAKgB,UAAU,OAAOC,MAAO,CAAE4F,SAAU,UACvC7G,EAAAA,cAAA,MAAIgB,UAAU,cAAa,uBAAwBhB,EAAAA,cAAA,WACnDA,EAAAA,cAAA,KAAGgB,UAAU,cAAa,2EAC1BhB,EAAAA,cAAA,SACEuF,KAAK,OACLvE,UAAU,eACVgD,MAAO2hB,EACP9K,UAAQ,EACRxY,QAAS7D,GAAKA,EAAE2L,OAAO4c,YAI3B/mB,EAAAA,cAAA,WAEAA,EAAAA,cAAA,OAAKiB,MAAO,CAAE4F,SAAU,cAAeH,aAAc,UAClD2f,GACCrmB,EAAAA,cAACmkB,EAAK,CAAC5e,KAAK,WACT8gB,GAGJF,GACCnmB,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIoe,QAAQ,KACVpe,EAAAA,cAACmkB,EAAK,CAAC5e,KAAK,UACT4gB,KAMTnmB,EAAAA,cAAA,SAAOgB,UAAU,0BACfhB,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,QACJA,EAAAA,cAAA,aAGJA,EAAAA,cAAA,aACGylB,EAAMxnB,KAAI+oB,GACThnB,EAAAA,cAAA,MACEyF,IAAKuhB,EAAK5oB,GACV2I,aAAcA,IAAM2f,EAAgBM,EAAK5oB,IACzC4I,aAAcA,IAAM0f,EAAgB,MACpCzlB,MAAO,CAAEc,OAAQ,SAEjB/B,EAAAA,cAAA,UAAKgnB,EAAKpY,OACV5O,EAAAA,cAAA,UAAKgnB,EAAKC,gBACVjnB,EAAAA,cAAA,UACGgnB,EAAKpY,QAAU2X,GAAoBE,IAAiBO,EAAK5oB,IACxD4B,EAAAA,cAAA,KACE0F,KAAK,IACLrD,QAAU7D,IACRA,EAAEyQ,iBA7FHzP,WACvB,GAAK0F,OAAOsV,QAAQ,8CAIpB,IACE,MAAM/a,QAAiBC,MAAM,+BAAgC,CAC3DqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAU,CACnBsX,QAASC,MAIb,IAAK1nB,EAASE,GAAI,CAChB,MAAM4E,QAAa9E,EAASG,OAC5B,MAAM,IAAInB,MAAM8F,EAAKoM,SAAW,wBAClC,OAEMgW,GACR,CAAE,MAAOE,GACPvjB,EAASujB,EAAIlW,QACf,GAqEwByW,CAAiBJ,EAAK5oB,GAAG,EAE3B,aAAW,eAEX4B,EAAAA,cAAA,OAAK0B,MAAM,KAAKK,OAAO,KAAK0F,QAAQ,YAAYD,KAAK,OAAOD,MAAM,8BAChEvH,EAAAA,cAAA,QAAMmH,EAAE,kPAAkP0B,OAAO,UAAU,eAAa,UAAU,iBAAe,QAAQ,kBAAgB,UACzU7I,EAAAA,cAAA,QAAMmH,EAAE,qOAAqO0B,OAAO,UAAU,eAAa,UAAU,iBAAe,QAAQ,kBAAgB,UAC5T7I,EAAAA,cAAA,QAAMmH,EAAE,mCAAmC0B,OAAO,UAAU,eAAa,UAAU,iBAAe,QAAQ,kBAAgB,UAC1H7I,EAAAA,cAAA,QAAMmH,EAAE,mCAAmC0B,OAAO,UAAU,eAAa,UAAU,iBAAe,QAAQ,kBAAgB,gBAOtI7I,EAAAA,cAAA,MAAIiB,MAAO,CAAEc,OAAQ,SACnB/B,EAAAA,cAAA,UACEA,EAAAA,cAACqnB,EAAAA,EAAa,CAACzV,MAAM,SACnB5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,QACLsF,YAAY,cACZ7G,MAAO+hB,EACP7c,SAAW1K,GAAMwnB,EAAgBxnB,EAAE2L,OAAOnG,OAC1CwR,UAAQ,MAIdxV,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEgB,UAAU,cACVgD,MAAOiiB,EACP/c,SAAW1K,GAAM0nB,EAAe1nB,EAAE2L,OAAOnG,OACzCwR,UAAQ,GAERxV,EAAAA,cAAA,UAAQgE,MAAM,QAAO,QACrBhE,EAAAA,cAAA,UAAQgE,MAAM,SAAQ,WAG1BhE,EAAAA,cAAA,UACEA,EAAAA,cAAA,UACEgB,UAAU,kBACVqB,QAlLE7C,UACpBhB,EAAEyQ,iBACFmX,EAAa,MACbE,EAAkB,MAElB,IACE,MAAM7mB,QAAiBC,MAAM,+BAAgC,CAC3DqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAU,CACnBoX,KAAM,CACJpY,MAAOmX,EACPkB,eAAgBhB,OAKhB1hB,QAAa9E,EAASG,OAE5B,IAAKH,EAASE,GACZ,MAAM,IAAIlB,MAAM8F,EAAKoM,SAAW,+BAI5BgW,IAGNX,EAAgB,IAChBE,EAAe,QACfI,EAAmB,uDAAsDP,MAGzEjlB,YAAW,KACTwlB,EAAkB,KAAK,GACtB,IACL,CAAE,MAAOO,GACPT,EAAaS,EAAIlW,QACnB,IA2IiB,mBAUX,EC1DV,OAxLc4W,KACZ,MAAMnkB,GAAWC,EAAAA,EAAAA,MACXhE,GAAWC,EAAAA,EAAAA,OACVkoB,EAAcC,IAAmBroB,EAAAA,EAAAA,UAAS,KAC1CsoB,EAAcC,IAAmBvoB,EAAAA,EAAAA,WAAS,GAG3CwoB,EAAcpoB,MAAOqoB,EAAaC,KACtC,IACE,MAAMroB,QAAiBC,MAAM,wBAAyB,CACpDqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAUiY,KAGjBtjB,QAAa9E,EAASG,OAE5B,IAAKH,EAASE,IAAM4E,EAAK1E,MAEvB,YADA4nB,EAAgBljB,EAAK1E,OAAS,uCAIAH,MAAM,6BAA8B,CAClE4E,QAAS,CACP,OAAU,uBAIQ3E,GACpByD,EAAU,uBAAsB0kB,KAEhCL,EAAgB,uEAGpB,CAAE,MAAO5nB,GACPC,QAAQD,MAAM,sBAAuBA,GACrC4nB,EAAgB,wEAClB,IAGFloB,EAAAA,EAAAA,YAAU,KACkBC,WACxB,IAEE,MAAM0e,EAAS,IAAI4C,gBAAgBzhB,EAAS0hB,QAGtCgH,EAAgB,IAAIjH,gBAC1B5C,EAAO9K,SAAQ,CAACpP,EAAOyB,KACT,eAARA,GACFsiB,EAAc1F,IAAI5c,EAAKzB,EACzB,IAEF,MAAM8jB,EAAcC,EAAcvf,WAAc,IAAGuf,IAAkB,GASrE,UANuBroB,MAAM,6BAA8B,CACzD4E,QAAS,CACP,OAAU,uBAID3E,GAEX,YADAyD,EAAU,uBAAsB0kB,KAKlC,MAAMnC,EAAYzH,EAAO8C,IAAI,cACzB2E,SACIiC,EAAY,CAAEhB,WAAYjB,GAAamC,EAEjD,CAAE,MAAOjoB,GACPC,QAAQD,MAAM,gCAAiCA,GAC/C4nB,EAAgB,iDAClB,GAGFO,EAAmB,GAClB,CAAC5kB,EAAU/D,IAsBd,OACEW,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,OAAKgB,UAAU,8BACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,MAAIgB,UAAU,QACX0mB,EACG,UACA,6BAGN1nB,EAAAA,cAAA,SAAG,sEAEFwnB,GACCxnB,EAAAA,cAACmkB,EAAK,CAAC5e,KAAK,UACTiiB,GAILxnB,EAAAA,cAAA,QAAMua,SAtCQ/b,IACpBA,EAAEyQ,iBACF,MAAMiP,EAAS,IAAI4C,gBAAgBzhB,EAAS0hB,QACtCkH,EAAkB,IAAInH,gBAO5B,GANA5C,EAAO9K,SAAQ,CAACpP,EAAOyB,KACT,eAARA,GACFwiB,EAAgB5F,IAAI5c,EAAKzB,EAC3B,IAGE0jB,EAAc,CAChB,MAAM9Y,EAAQpQ,EAAE2L,OAAOyE,MAAM5K,MACvBkkB,EAAW1pB,EAAE2L,OAAO+d,SAASlkB,MACnC4jB,EAAY,CAAEhZ,QAAOsZ,YAAYD,EAAgBzf,WACnD,KAAO,CACL,MAAMmd,EAAYnnB,EAAE2L,OAAOyc,WAAW5iB,MACtC4jB,EAAY,CAAEhB,WAAYjB,GAAasC,EAAgBzf,WACzD,IAsBSkf,EACC1nB,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,SAAOulB,QAAQ,QAAQvkB,UAAU,cAAa,SAC9ChB,EAAAA,cAAA,SACEuF,KAAK,QACLnH,GAAG,QACHoE,KAAK,QACLxB,UAAU,eACVwU,UAAQ,KAGZxV,EAAAA,cAAA,WACAA,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,SAAOulB,QAAQ,WAAWvkB,UAAU,cAAa,YACjDhB,EAAAA,cAAA,SACEuF,KAAK,WACLnH,GAAG,WACHoE,KAAK,WACLxB,UAAU,eACVwU,UAAQ,MAKdxV,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,SAAOulB,QAAQ,aAAavkB,UAAU,cAAa,uBACnDhB,EAAAA,cAAA,SACEuF,KAAK,OACLnH,GAAG,aACHoE,KAAK,aACLxB,UAAU,eACV6J,YAAY,YAKlB7K,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,UAAQuF,KAAK,SAASvE,UAAU,yBAAwB,aAM5DhB,EAAAA,cAAC6E,EAAAA,GAAI,CACH3E,GAAG,IACHe,MAAO,CAAEiF,QAAS,OAClBlF,UAAU,eACVqB,QAAU7D,IACRA,EAAEyQ,iBACF0Y,GAAiBD,EAAa,GAG/BA,EAAe,sBAAwB,yBAI1C,EC9EV,OAvGqBS,KACnB,MAAOC,IAAgBC,EAAAA,EAAAA,MACjBjlB,GAAWC,EAAAA,EAAAA,OACV6kB,EAAUI,IAAelpB,EAAAA,EAAAA,UAAS,KAClCmpB,EAAiBC,IAAsBppB,EAAAA,EAAAA,UAAS,KAChDS,EAAOyD,IAAYlE,EAAAA,EAAAA,UAAS,OAC5BymB,EAASC,IAAc1mB,EAAAA,EAAAA,WAAS,GACjCqpB,EAAQL,EAAapH,IAAI,SAyC/B,OACEhhB,EAAAA,cAAA,OAAKgB,UAAU,wBACbhB,EAAAA,cAAA,OAAKgB,UAAU,8BACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,MAAIgB,UAAU,mBAAkB,qBAE/BnB,GACCG,EAAAA,cAACmkB,EAAK,CAAC5e,KAAK,UACT1F,GAILG,EAAAA,cAAA,QAAMua,SArDG/a,UAKnB,GAJAhB,EAAEyQ,iBACF3L,EAAS,MACTwiB,GAAW,GAEPoC,IAAaK,EAGf,OAFAjlB,EAAS,8BACTwiB,GAAW,GAIb,IACE,MAAMrmB,QAAiBC,MAAM,gCAAiC,CAC5DqF,OAAQ,OACRT,QAAS,CACP,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAEhEmP,KAAMC,KAAKC,UAAU,CACnB6Y,QACAP,eAIE3jB,QAAa9E,EAASG,OAE5B,IAAKH,EAASE,GACZ,MAAM,IAAIlB,MAAM8F,EAAKoM,SAAW,0BAIlCvN,EAAS,cACX,CAAE,MAAOyjB,GACPvjB,EAASujB,EAAIlW,QACf,CAAC,QACCmV,GAAW,EACb,IAkBY9lB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,SAAOgB,UAAU,cAAa,gBAC9BhB,EAAAA,cAAA,SACEuF,KAAK,WACLvE,UAAU,eACVgD,MAAOkkB,EACPhf,SAAW1K,GAAM8pB,EAAY9pB,EAAE2L,OAAOnG,OACtCwR,UAAQ,KAIZxV,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,SAAOgB,UAAU,cAAa,oBAC9BhB,EAAAA,cAAA,SACEuF,KAAK,WACLvE,UAAU,eACVgD,MAAOukB,EACPrf,SAAW1K,GAAMgqB,EAAmBhqB,EAAE2L,OAAOnG,OAC7CwR,UAAQ,KAIZxV,EAAAA,cAAA,KAAGgB,UAAU,cAAahB,EAAAA,cAAA,KAAG0F,KAAK,eAAc,6BAEhD1F,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,kBACV0Z,SAAUmL,GAETA,EAAU,sBAAwB,qBAO3C,EC5CV,OAjDgC6C,IAE5B1oB,EAAAA,cAAC2oB,EAAAA,GAAa,KACZ3oB,EAAAA,cAAC4oB,EAAAA,GAAM,KACL5oB,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,cACLokB,QAAS9oB,EAAAA,cAACunB,GAAK,QAEjBvnB,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,qBACLokB,QAAS9oB,EAAAA,cAACmoB,GAAY,QAExBnoB,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,uBACLokB,QACE9oB,EAAAA,cAAC+oB,EAAY,KACX/oB,EAAAA,cAACsgB,EAAQ,SAIftgB,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,6BACLokB,QACE9oB,EAAAA,cAAC+oB,EAAY,KACX/oB,EAAAA,cAAC2kB,EAAa,SAIpB3kB,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,8BACLokB,QACE9oB,EAAAA,cAAC+oB,EAAY,KACX/oB,EAAAA,cAACglB,EAAc,SAIrBhlB,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,oBACLokB,QACE9oB,EAAAA,cAAC+oB,EAAY,KACX/oB,EAAAA,cAACwlB,EAAK,W,uOChDpB,MAAMwD,GAAOhpB,EAAAA,YAAiB,CAAAhB,EAAyCmM,KAAG,IAA3C,UAAEnK,EAAY,GAAE,SAAE/B,KAAaoV,GAAOrV,EAAA,OACnEgB,EAAAA,cAAA,MAAAyU,GAAA,CACEtJ,IAAKA,EACLnK,UAAY,oEAAmEA,KAC3EqT,GAEHpV,EACG,IAER+pB,GAAKC,YAAc,OAEAjpB,EAAAA,YAAiB,CAAAwL,EAAyCL,KAAG,IAA3C,UAAEnK,EAAY,GAAE,SAAE/B,KAAaoV,GAAO7I,EAAA,OACzExL,EAAAA,cAAA,MAAAyU,GAAA,CACEtJ,IAAKA,EACLnK,UAAY,4EAA2EA,KACnFqT,GAEHpV,EACG,IAEGgqB,YAAc,aAEzB,MAAMC,GAAYlpB,EAAAA,YAAiB,CAAAqM,EAAyClB,KAAG,IAA3C,UAAEnK,EAAY,GAAE,SAAE/B,KAAaoV,GAAOhI,EAAA,OACxErM,EAAAA,cAAA,MAAAyU,GAAA,CACEtJ,IAAKA,EACLnK,UAAY,8BAA6BA,KACrCqT,GAEHpV,EACG,IAERiqB,GAAUD,YAAc,YAExB,MAAME,GAAkBnpB,EAAAA,YAAiB,CAAA0M,EAAyCvB,KAAG,IAA3C,UAAEnK,EAAY,GAAE,SAAE/B,KAAaoV,GAAO3H,EAAA,OAC9E1M,EAAAA,cAAA,MAAAyU,GAAA,CACEtJ,IAAKA,EACLnK,UAAY,2CAA0CA,KAClDqT,GAEHpV,EACG,IAERkqB,GAAgBF,YAAc,kBAE9B,MAAMG,GAAcppB,EAAAA,YAAiB,CAAA4iB,EAAyCzX,KAAG,IAA3C,UAAEnK,EAAY,GAAE,SAAE/B,KAAaoV,GAAOuO,EAAA,OAC1E5iB,EAAAA,cAAA,MAAAyU,GAAA,CACEtJ,IAAKA,EACLnK,UAAY,gCAA+BA,KACvCqT,GAEHpV,EACG,IAERmqB,GAAYH,YAAc,cAE1B,MAAMI,GAAarpB,EAAAA,YAAiB,CAAA6iB,EAAyC1X,KAAG,IAA3C,UAAEnK,EAAY,GAAE,SAAE/B,KAAaoV,GAAOwO,EAAA,OACzE7iB,EAAAA,cAAA,MAAAyU,GAAA,CACEtJ,IAAKA,EACLnK,UAAY,+DAA8DA,KACtEqT,GAEHpV,EACG,IAERoqB,GAAWJ,YAAc,aCqBzB,OAlF0BK,KACxB,MAAOC,EAAaC,IAAkBpqB,EAAAA,EAAAA,UAAS,CAC7CqqB,YAAY,EACZC,YAAY,KAGdnqB,EAAAA,EAAAA,YAAU,KACRX,OAAOD,KAAK4qB,GAAanW,SAAQuW,IAC/B,MAAMC,EAAcC,aAAaC,QAAS,UAASH,KAC/CC,GAAe,IAAI1lB,KAAK0lB,GAAe,IAAI1lB,KAC7CslB,GAAe3d,IAAI,IAAUA,EAAM,CAAC8d,IAAU,MACrCC,GACTC,aAAaE,WAAY,UAASJ,IACpC,GACA,GACD,IAEH,MAAMK,EAAYL,IAChB,MAAMC,EAAc,IAAI1lB,KACxB0lB,EAAYK,QAAQL,EAAYM,UArBT,GAsBvBL,aAAaM,QAAS,UAASR,IAAWC,EAAY9e,eACtD0e,GAAe3d,IAAI,IAAUA,EAAM,CAAC8d,IAAU,KAAQ,EAGxD,OAAIJ,EAAYE,YAAcF,EAAYG,WACjC,KAIP1pB,EAAAA,cAAA,OAAKgB,UAAU,aACXuoB,EAAYE,YACZzpB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAACgpB,GAAI,KACHhpB,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAAA,OAAKgB,UAAU,oDACbhB,EAAAA,cAACkpB,GAAS,KAAClpB,EAAAA,cAAA,UAAI,mBACfA,EAAAA,cAAA,UACEqC,QAASA,IAAM2nB,EAAS,cACxBhpB,UAAU,YACVC,MAAO,CAAEO,UAAW,cACpB,aAAW,uBACXlB,MAAM,0BAGVN,EAAAA,cAACmpB,GAAe,KAAC,gHAGjBnpB,EAAAA,cAACqpB,GAAU,KACTrpB,EAAAA,cAAA,KAAG0F,KAAK,cAAc1E,UAAU,wBAAuB,mBAM/DuoB,EAAYG,YACZ1pB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAACgpB,GAAI,KACHhpB,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAAA,OAAKgB,UAAU,oDACbhB,EAAAA,cAACkpB,GAAS,KAAClpB,EAAAA,cAAA,UAAI,mCACfA,EAAAA,cAAA,UACEqC,QAASA,IAAM2nB,EAAS,cACxBhpB,UAAU,YACVC,MAAO,CAAEO,UAAW,cACpB,aAAW,wBACXlB,MAAM,2BAGVN,EAAAA,cAACmpB,GAAe,KAAC,8HAGjBnpB,EAAAA,cAACqpB,GAAU,KACTrpB,EAAAA,cAAA,KAAG0F,KAAK,eAAe1E,UAAU,wBAAuB,sBAM9D,EChFV,MAAMopB,GAAeprB,IAA2C,IAA1C,MAAE4S,EAAK,MAAE5N,EAAK,WAAEqmB,EAAU,OAAEC,GAAQtrB,EACxD,MAAMurB,EAAiB,CACrB,EAAG,CAAEC,MAAO,aAAc1kB,KAAM,aAChC,EAAG,CAAE0kB,MAAO,aAAc1kB,KAAM,QAChC,EAAG,CAAE0kB,MAAO,aAAc1kB,KAAM,QAChC,EAAG,CAAE0kB,MAAO,YAAa1kB,KAAM,mBAC/B,EAAG,CAAE0kB,MAAO,YAAa1kB,KAAM,qBAGjC,OACE9F,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,OAAKgB,UAAU,wCACbhB,EAAAA,cAAA,QAAMgB,UAAU,WAAW4Q,EAAM,KACjC5R,EAAAA,cAAA,QAAMgB,UAAU,WACI,kBAAVgD,EAAsB,GAAEA,EAAMymB,cAAczmB,EAAM0mB,aAAe1mB,EACvD,kBAAVA,GAAuB4N,EAAM9F,SAAS,aAAgB8F,EAAM9F,SAAS,UAAa8F,EAAM9F,SAAS,aAAqB,GAAN,MAG5H9L,EAAAA,cAAA,OAAKgB,UAAU,mCACbhB,EAAAA,cAAA,QAAMgB,UAAY,SAAQupB,EAAeF,GAAYG,SAClDD,EAAeF,GAAYvkB,MAE9B9F,EAAAA,cAAA,QAAMgB,UAAU,oBAAmB,KACnChB,EAAAA,cAAA,QAAMgB,UAAU,oBAAoBspB,EAAO,YAEzC,EAsCV,OAnCyB9e,IAAuB,IAAtB,aAAEmf,GAAcnf,EAWxC,OACExL,EAAAA,cAACgpB,GAAI,CAAC5qB,GAAG,iBACP4B,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAACkpB,GAAS,KACRlpB,EAAAA,cAAA,UAAI,iBACJA,EAAAA,cAAA,KAAGgB,UAAU,QAAQ2pB,EAAaC,sBAEpC5qB,EAAAA,cAACmpB,GAAe,KACdnpB,EAAAA,cAAA,UAAI,kBAlBI,CACd,CAAEyF,IAAK,kBAAmBmM,MAAO,mBACjC,CAAEnM,IAAK,qBAAsBmM,MAAO,qBACpC,CAAEnM,IAAK,mBAAoBmM,MAAO,oBAClC,CAAEnM,IAAK,aAAcmM,MAAO,cAC5B,CAAEnM,IAAK,iBAAkBmM,MAAO,kBAChC,CAAEnM,IAAK,iBAAkBmM,MAAO,kBAChC,CAAEnM,IAAK,mBAAoBmM,MAAO,qBAYnB3T,KAAIoO,IAAA,IAAC,IAAE5G,EAAG,MAAEmM,GAAOvF,EAAA,OAC1BrM,EAAAA,cAACoqB,GAAY,CACX3kB,IAAKA,EACLmM,MAAOA,EACP5N,MAAO2mB,EAAallB,GAAKzB,MACzBqmB,WAAYM,EAAallB,GAAKolB,YAC9BP,OAAQK,EAAallB,GAAK6kB,QAC1B,MAIH,E,WCmBX,OAzEwBQ,KACtB,MAAOC,EAAYC,IAAiB5rB,EAAAA,EAAAA,WAAS,IACtCS,EAAOyD,IAAYlE,EAAAA,EAAAA,UAAS,MAqBnC,OAAIS,EAEAG,EAAAA,cAACgpB,GAAI,CAAC5qB,GAAG,2BACP4B,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAACkpB,GAAS,KACRlpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,2DAEvBhB,EAAAA,cAACmpB,GAAe,KACdnpB,EAAAA,cAAA,KAAGgB,UAAU,QAAO,+DAEpBhB,EAAAA,cAAA,KACE0F,KAtCW,kCAuCX1E,UAAU,6BACViqB,IAAI,YACL,oBAWTjrB,EAAAA,cAACgpB,GAAI,CAAC5qB,GAAG,qBACP4B,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAACkpB,GAAS,KACRlpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,qCAEvBhB,EAAAA,cAACmpB,GAAe,KACdnpB,EAAAA,cAAA,KAAGgB,UAAU,QAAO,6GAEpBhB,EAAAA,cAAA,UACEqC,QArDsB7C,UAC9BwrB,GAAc,GAEd,WACyBE,EAAAA,GAAAA,IAVG,sCAYbvrB,GACXuF,OAAO7F,SAASqG,KAdO,wCAgBvBpC,GAAS,EAEb,CAAE,MAAOzD,GACPC,QAAQD,MAAM,gCAAiCA,GAC/CyD,GAAS,EACX,CAAC,QACC0nB,GAAc,EAChB,GAsCQhqB,UAAU,6BACV0Z,SAAUqQ,GAETA,EAAa,cAAgB,wBAGhC/qB,EAAAA,cAAA,KAAGgB,UAAU,yBAAwB,mIAKpC,ECxEX,MAAMmqB,GAAuB,qFAGvBC,GAAYpsB,IAAA,IAAC,MAAEsB,EAAK,QAAEqQ,EAAO,WAAE0a,EAAU,UAAEC,GAAWtsB,EAAA,OAC1DgB,EAAAA,cAACgpB,GAAI,CAAC5qB,GAAG,2BACP4B,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAACkpB,GAAS,KACRlpB,EAAAA,cAAA,MAAIgB,UAAU,QAAQV,IAExBN,EAAAA,cAACmpB,GAAe,KACdnpB,EAAAA,cAAA,KAAGgB,UAAU,QAAQ2P,GAErB3Q,EAAAA,cAAA,KACE0F,KAAM4lB,EACNtqB,UAAU,6BACViqB,IAAI,YAEHI,KAIF,EAGHE,GAAsBA,IAC1BvrB,EAAAA,cAACgpB,GAAI,CAAC5qB,GAAG,qBACP4B,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAACkpB,GAAS,KACRlpB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,qCAEvBhB,EAAAA,cAACmpB,GAAe,KACdnpB,EAAAA,cAAA,KAAGgB,UAAU,QAAO,6GAEpBhB,EAAAA,cAAA,KACE0F,KAAMylB,GACNnqB,UAAU,6BACViqB,IAAI,YACL,wBAIDjrB,EAAAA,cAAA,KAAGgB,UAAU,yBAAwB,oIAuD7C,OA/CqBwK,IAAuB,IAAtB,aAAEmf,GAAcnf,EACpC,OAAQmf,EAAa9F,QACnB,IAAK,QACH,OACE7kB,EAAAA,cAACorB,GAAS,CACR9qB,MAAM,+CACNqQ,QAAQ,6GACR0a,WAAW,gBACXC,UAAWH,KAGjB,IAAK,YACH,OAAOnrB,EAAAA,cAACwrB,GAAgB,CAACb,aAAcA,EAAac,cACtD,IAAK,mBACH,OAAOzrB,EAAAA,cAACurB,GAAmB,MAC7B,IAAK,mBACH,OAAOvrB,EAAAA,cAAC8qB,GAAe,MACzB,IAAK,WAEH,OAAKH,EAAac,YAWdd,EAAac,aAAa5rB,MAE1BG,EAAAA,cAACorB,GAAS,CACR9qB,MAAM,+CACNqQ,QAAQ,6GACR0a,WAAW,gBACXC,UAAWH,KAKVnrB,EAAAA,cAACwrB,GAAgB,CAACb,aAAcA,EAAac,cApBhDzrB,EAAAA,cAACorB,GAAS,CACR9qB,MAAM,uCACNqQ,QAAQ,sCACR0a,WAAW,UACXC,UAzEc,0CA0FtB,QACE,OAAO,KAAK,ECqClB,OApI0BtsB,IAA8G,IAA7G,SAAE0D,EAAQ,QAAEgpB,EAAO,aAAEC,EAAY,WAAEC,GAAa,EAAI,cAAEC,GAAgB,EAAK,iBAAEC,GAAmB,GAAO9sB,EAChI,MAAM+sB,EAAqBL,GAClBA,EAAQM,MAAMjb,MAAKkb,GAAQA,EAAKC,WAAaD,EAAKhiB,UAOrDkiB,EAAeC,IACnB,IAAKN,EAAkB,OAAO,EAM9B,OAAOM,GAHsBV,EAAQM,MAAMK,WAAUJ,IAASA,EAAKjoB,OAGpB,EAGjD,OACEhE,EAAAA,cAAA,OACE5B,GAAK,kBAAiButB,KAAgBjpB,EAAStE,KAC/C4C,UAAY,mBAAiB+qB,EAAkBL,GAAW,GAAK,SAC/DjmB,IAAKkmB,GAEL3rB,EAAAA,cAAA,MAAIgB,UAAY,mCAAkC+qB,EAAkBL,GAAqB,GAAV,SAAgBttB,GAAK,WAAUutB,KAAgBjpB,EAAStE,MACrI4B,EAAAA,cAAA,UACEgB,UAAY,oBAAmB6qB,EAAgB,GAAK,eAAeE,EAAkBL,GAAW,GAAK,UACrGnmB,KAAK,SACL,iBAAe,WACf,iBAAiB,aAAYomB,KAAgBjpB,EAAStE,KACtD,gBAAeytB,EAAgB,OAAS,QACxC,gBAAgB,YAAWF,KAAgBjpB,EAAStE,MAEnDstB,EAAQlpB,OAGbxC,EAAAA,cAAA,OACE5B,GAAK,YAAWutB,KAAgBjpB,EAAStE,KACzC4C,UAAY,gCAA8B6qB,EAAgB,OAAS,IACnE,kBAAkB,WAAUF,KAAgBjpB,EAAStE,KACrD,iBAAiB,cAAasE,EAAStE,KACvC+M,IAAMmhB,IACCA,IAELA,EAAGliB,iBAAiB,oBAAoB,KACtC,MAAMmiB,EAAgBrnB,OAAOxC,SAAS0M,eAAgB,kBAAiBuc,KAAgBjpB,EAAStE,MAC1FouB,GA1CkBd,IACzBA,EAAQM,MAAM/R,OAAMgS,GAAQA,EAAKC,YAyCTO,CAAyBf,GAChDa,EAAchd,UAAUid,EAAgB,MAAQ,UAAU,QAAQ,IAGpEF,EAAGliB,iBAAiB,oBAAoB,KACtC,MAAMmiB,EAAgBrnB,OAAOxC,SAAS0M,eAAgB,kBAAiBuc,KAAgBjpB,EAAStE,MAC1FouB,GAAiBT,EAAkBL,GACzCa,EAAchd,UAAUid,EAAgB,MAAQ,UAAU,QAAQ,IAClE,GAGHd,EAAQM,MAAM/tB,KAAI,CAACguB,EAAMS,IACxBT,EAAKhiB,SAAWvH,EAASiqB,WACvB3sB,EAAAA,cAAA,OAAKyF,IAAKinB,EAAW1rB,UAAU,kBAC7BhB,EAAAA,cAAA,KACE0F,KAAMhD,EAASiqB,WACf3rB,UAAU,oCACV,cAAY,QACZ,kBAAgB,SAEhBhB,EAAAA,cAAA,YACGisB,EAAK3rB,MACL6rB,EAAYO,GACXT,EAAKjoB,MACHhE,EAAAA,cAAAA,EAAAA,SAAA,KAAE,KAAEA,EAAAA,cAAA,KACF0F,KAAMumB,EAAKlc,IACX/O,UAAU,oCACV,cAAY,QACZ,kBAAgB,SAEfirB,EAAKjoB,QAGRhE,EAAAA,cAAAA,EAAAA,SAAA,KAAE,KAAEA,EAAAA,cAAA,KACF0F,KAAMumB,EAAKlc,IACX/O,UAAU,oCACV,cAAY,QACZ,kBAAgB,SACjB,WAKHirB,EAAKjoB,MAAS,KAAIioB,EAAKjoB,QAAU,MAMzChE,EAAAA,cAAA,OACEyF,IAAKinB,EACL1rB,UAAY,mBAAkBirB,EAAKC,WAAa,sBAE/CD,EAAK3rB,MACL6rB,EAAYO,GACXT,EAAKjoB,MACHhE,EAAAA,cAAAA,EAAAA,SAAA,KAAE,KAAEA,EAAAA,cAAA,KACF0F,KAAMumB,EAAKlc,IACX/O,UAAU,oCACV,cAAY,QACZ,kBAAgB,SAEfirB,EAAKjoB,QAGRhE,EAAAA,cAAAA,EAAAA,SAAA,KAAE,KAAEA,EAAAA,cAAA,KACF0F,KAAMumB,EAAKlc,IACX/O,UAAU,oCACV,cAAY,QACZ,kBAAgB,SACjB,WAKHirB,EAAKjoB,MAAS,KAAIioB,EAAKjoB,QAAU,OAMvC,ECpEV,OA3DqBhF,IAAmB,IAAlB,SAAE0D,GAAU1D,EAMhC,OACEgB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,sBACbhB,EAAAA,cAAA,KACE0F,KAAMhD,EAASkqB,aAAgB,6BAA4BlqB,EAAStE,KAAOsE,EAASiqB,WACpF3rB,UAAU,4BACV,cAAY,QACZ,kBAAgB,SAEhBhB,EAAAA,cAAA,MAAIgB,UAAU,qBAAqB0B,EAASpC,QAE9CN,EAAAA,cAAA,KAAGgB,UAAU,uBAAsB,eAhBrB6rB,EAiBWnqB,EAAS2Q,WAhBzB,IAAInP,KAAK2oB,GACVniB,mBAAmB,QAAS,CAAEiJ,MAAO,OAAQC,IAAK,UAAWC,KAAM,cAiB3E7T,EAAAA,cAAA,OAAKgB,UAAU,2BACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,UACrBhB,EAAAA,cAAA,OAAKgB,UAAU,iBACbhB,EAAAA,cAAA,KACE0F,KAAMhD,EAASkqB,aAAgB,6BAA4BlqB,EAAStE,KAAOsE,EAASiqB,WACpF3rB,UAAU,uBACV,cAAY,QACZ,kBAAgB,SAEhBhB,EAAAA,cAAA,QACEgB,UAAY,oCAAmC0B,EAASoqB,qBAAqBpqB,EAASoqB,mCACtF7rB,MAAO,CACLiF,QAAS,iBACT6mB,WAAY,MAGbrqB,EAASmiB,WAKlB7kB,EAAAA,cAAA,OAAKgB,UAAU,sBACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,sBACrBhB,EAAAA,cAAA,OAAKgB,UAAU,+BAA+B5C,GAAK,aAAYsE,EAAStE,MACrEsE,EAASsqB,iBAAiB/uB,KAAI,CAACytB,EAASC,IACvC3rB,EAAAA,cAACitB,GAAiB,CAChBxnB,IAAKkmB,EACLjpB,SAAUA,EACVgpB,QAASA,EACTC,aAAcA,UAhDRkB,KAsDZ,EChCV,MAAMK,GAAoBltB,EAAAA,MAAWhB,IAA0B,IAAzB,MAAEgF,EAAK,SAAEmpB,GAAUnuB,EACvD,MAAMgN,EAzBR,SAAyBhI,EAAOmpB,GAC9B,MAAOljB,EAASmjB,GAAcptB,EAAAA,SAAegE,GAoB7C,OAlBAhE,EAAAA,iBAAsB,KACpB,MACMqtB,EAAaF,EADE,IAEfG,GAAYtpB,EAAQiG,GAAWojB,EACrC,IAAIE,EAAc,EAElB,MAAMC,EAAWC,aAAY,IAAML,GAAWnjB,IAC5CsjB,IACIA,GAAeF,GACjBK,cAAcF,GACPxpB,GAEFiG,EAAUqjB,MACfK,IAEJ,MAAO,IAAMD,cAAcF,EAAS,GACnC,CAACxpB,EAAOmpB,IAEJljB,CACT,CAGY2jB,CAAgB5pB,EAAOmpB,GACjC,OAAO/kB,KAAKC,MAAU,IAAJ2D,GAAW,GAAG,IAG5B6hB,GAAiBriB,IAahB,IAbiB,WACtBsiB,EAAa,EAAC,YACdhlB,EAAc,GAAE,gBAChBilB,EAAkB,EAAC,UACnBC,EAAY,EAAC,mBACbC,EAAqB,GAAG,WACxB9rB,EAAa,UAAS,SACtB+rB,GAAW,EAAI,SACfC,EAAW,CACT,CAAEC,KAAM,GAAKnoB,MAAO,WACpB,CAAEmoB,KAAM,EAAGnoB,MAAO,YACnB,UACDooB,EAAY,MACb7iB,EACC,MACM8iB,EAAS5sB,IACTK,EAASusB,EAASA,EAASlmB,KAAKmmB,IAAIP,EAAY5lB,KAAKomB,KACpDC,GAAUzuB,EAAAA,UAAe,IAAMoI,KAAKsmB,SAASlmB,aAC9CmmB,EAAgB,IAAMX,EAAZ,GACVY,EAAIN,EAASxlB,EAAc,EAAKilB,EAAkB,EAClDc,EAAgBzmB,KAAKomB,GAAKI,EAAI,EAC9BE,EAASD,GAAiB,IAAMf,GAAc,EAAIE,IAAc,IAEtE,OACEhuB,EAAAA,cAAA,OAAKgB,UAAU,kFACbhB,EAAAA,cAAA,OACEyH,QAAU,WAAe1F,IACzBf,UAAU,iCAEVhB,EAAAA,cAAA,YACEA,EAAAA,cAAA,kBACE5B,GAAK,WAAUqwB,IACfM,GAAG,KACHC,GAAG,KACHC,GAAG,OACHC,GAAG,MAEFf,EAASlwB,KAAIoO,IAAA,IAAC,KAAC+hB,EAAI,MAAEnoB,GAAMoG,EAAA,OAC1BrM,EAAAA,cAAA,QAAMyF,IAAK2oB,EAAMU,OAAkB,IAAPV,EAAF,IAAiBe,UAAWlpB,GAAS,MAKrEjG,EAAAA,cAAA,QAAMovB,EAAGd,EAAQe,EAAGf,GAAUD,EAAY,EAAIvlB,EAAY,GAAIwmB,WAAW,SAASltB,SAAS,MACzFpC,EAAAA,cAACktB,GAAiB,CAAClpB,MAAO8pB,EAAYX,SAAUc,IAAsB,KAEvEI,GAAaruB,EAAAA,cAAA,QAAMovB,EAAGd,EAAQe,EAAGf,IAAagB,WAAW,UAAUjB,GAGpEruB,EAAAA,cAAA,UACEwB,UAAY,UAASmtB,aACrBY,GAAIjB,EACJkB,GAAIlB,EACJM,EAAGA,EACH9lB,YAAaA,EACb2mB,gBAAiBZ,EACjBa,iBAAkBb,EAAgBb,EAClCxmB,KAAK,OACLqB,OAAQ1G,EACRgL,cAAc,QACdsE,QAAS,KAIXzR,EAAAA,cAAA,UACEiB,MAAO,CACL0uB,WAAa,qBAAoB1B,WAEnCzsB,UAAY,UAASmtB,aACrBY,GAAIjB,EACJkB,GAAIlB,EACJM,EAAGA,EACH9lB,YAAaA,EACb2mB,gBAAiBZ,EACjBa,iBAAkBZ,EAClBtnB,KAAK,OACLqB,OAAS,gBAAe4lB,KACxBthB,cAAc,WAId+gB,GACAluB,EAAAA,cAAA,UACEiB,MAAO,CACL0uB,WAAa,qBAAoB1B,WAEnCzsB,UAAY,UAASmtB,aACrBY,GAAIjB,EACJkB,GAAIlB,EACJM,EAAGA,EACH9lB,YAAailB,EACb0B,gBAAkB,KAAIZ,IACtBa,iBAAkBZ,EAClBtnB,KAAK,OACLqB,OAAS,gBAAe4lB,KACxBthB,cAAc,WAIhB,EAIV,OAAenN,EAAAA,KAAW6tB,ICE1B,OArI2B7uB,IAAsB,IAArB,YAAE4wB,GAAa5wB,EACzC,IAAK4wB,EAAa,OAAO,KAEzB,MAAM,2BACJC,EAA0B,kBAC1BC,EAAiB,cACjBC,EAAa,sBACbC,EAAqB,oBACrBC,EAAmB,kBACnBC,EAAiB,gBACjBC,EAAe,oBACfC,EAAmB,kBACnBC,EAAiB,qBACjBC,EAAoB,mBACpBC,EAAkB,uBAClBC,EAAsB,6BACtBC,EAA4B,gCAC5BC,GACEd,EAEJ,OACE5vB,EAAAA,cAAA,OAAKgB,UAAU,iBACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,gBAEpBwvB,GAA0BP,GAAuBC,GAChDlwB,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,OAAKgB,UAAU,qHAAqHqE,KAAK,SACvIrF,EAAAA,cAAA,OACEuH,MAAM,6BACN7F,MAAM,KACNK,OAAO,KACPyF,KAAK,eACLxG,UAAU,wBACVyG,QAAQ,YACRpC,KAAK,MACL,aAAW,YAEXrF,EAAAA,cAAA,QAAMmH,EAAE,6LAEVnH,EAAAA,cAAA,OAAKgB,UAAU,aACZivB,EAAoB,2BAAyBC,EAAkB,MAIpElwB,EAAAA,cAAA,WACEA,EAAAA,cAAA,WACEA,EAAAA,cAAA,YAAM,qBAAmBiwB,IAE3BjwB,EAAAA,cAAA,WACEA,EAAAA,cAAA,QAAMgB,UAAU,oBAAmB,OAAKkvB,MAM/CO,GAAgCR,GAAuBD,GACtDhwB,EAAAA,cAAA,OAAKgB,UAAU,mHAAmHqE,KAAK,SACrIrF,EAAAA,cAAA,OACEuH,MAAM,6BACN7F,MAAM,KACNK,OAAO,KACPyF,KAAK,eACLxG,UAAU,wBACVyG,QAAQ,YACRpC,KAAK,MACL,aAAW,WAEXrF,EAAAA,cAAA,QAAMmH,EAAE,4PAEVnH,EAAAA,cAAA,OAAKgB,UAAU,aAAY,qBACNivB,EAAoB,OAAKD,EAAsB,+DAA4DhwB,EAAAA,cAAA,KAAG0F,KAAMgrB,EAAiCvmB,OAAO,SAAS8gB,IAAI,sBAAsBjqB,UAAU,0CAAyC,+CAK3QhB,EAAAA,cAAA,MAAIgB,UAAU,+BAEbmvB,GAAmBA,EAAgBttB,OAAS,GAC3C7C,EAAAA,cAAA,WACEA,EAAAA,cAAA,MAAIgB,UAAU,QAAO,gBACpBmvB,EAAgBlyB,KAAK0yB,GACpB3wB,EAAAA,cAAA,OAAKyF,IAAKkrB,EAAQvyB,GAAI4C,UAAU,uCAC9BhB,EAAAA,cAAA,YAAO2wB,EAAQC,OAAO,YAAUD,EAAQ1sB,SAG5CjE,EAAAA,cAAA,MAAIgB,UAAU,gCAIlBhB,EAAAA,cAAA,WACEA,EAAAA,cAAA,MAAIgB,UAAU,QAAO,wBAErBhB,EAAAA,cAAA,OAAKgB,UAAU,iBACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,uCACbhB,EAAAA,cAAA,YAAM,yBACNA,EAAAA,cAAA,YAAO6vB,IAET7vB,EAAAA,cAAA,OAAKgB,UAAU,uCACbhB,EAAAA,cAAA,YAAM,sBACNA,EAAAA,cAAA,YAAO8vB,IAERC,GACC/vB,EAAAA,cAAA,OAAKgB,UAAU,uCACbhB,EAAAA,cAAA,YAAM,kBACNA,EAAAA,cAAA,YAAO+vB,IAGX/vB,EAAAA,cAAA,OAAKgB,UAAU,uCACbhB,EAAAA,cAAA,YAAM,aACNA,EAAAA,cAAA,YAAOswB,IAETtwB,EAAAA,cAAA,OAAKgB,UAAU,uCACbhB,EAAAA,cAAA,YAAM,uBACNA,EAAAA,cAAA,YAAOuwB,IAERC,GACCxwB,EAAAA,cAAA,OAAKgB,UAAU,kCACbhB,EAAAA,cAAA,YAAM,iBACNA,EAAAA,cAAA,YAAOqwB,KAKbrwB,EAAAA,cAAA,OAAKgB,UAAU,wBACbhB,EAAAA,cAAC6tB,GAAc,CAACQ,UAAU,OAAOP,WAAYsC,OAI/C,E,WCpIH,MAAMS,GAA0BC,GAChCA,GAAsB,kBAARA,EAIZlyB,OAAOmyB,YACZnyB,OAAOuS,QAAQ2f,GAAK7yB,KAAIe,IAAA,IAAEyG,EAAKzB,GAAMhF,EAAA,MAAK,CACxCyG,EACAorB,GAAuB7sB,GACxB,KAPM8sB,GAAOA,EAAIjuB,OAAS,EAAIiuB,EAAM,KAW5BE,GAAqBA,CAACF,EAAUpsB,EAAcV,KACzD,MAAMrF,EAAO+F,EAAK9B,MAAM,KAClBquB,EAAUtyB,EAAKmE,MAGrB,OAFenE,EAAKib,QAAO,CAACsX,EAAKzrB,IAASyrB,EAAIzrB,GAAOyrB,EAAIzrB,IAAQ,CAAC,GAAIqrB,GAC/DG,GAAWjtB,EACX,IAAK8sB,EAAK,ECuGnB,OArHiC9xB,IAO1B,IAP2B,MAChCgF,EAAK,SACLkF,EAAQ,gBACRioB,EAAe,UACfC,EAAS,MACTvxB,EAAK,SACL6a,GAAW,GACZ1b,EACC,MAAMqyB,GAAWC,EAAAA,EAAAA,QAAO,MAClBC,GAAkBD,EAAAA,EAAAA,QAAO,MACzBE,GAAYF,EAAAA,EAAAA,QAAO,OAEzB/xB,EAAAA,EAAAA,YAAU,KAgBH2F,OAAOusB,OAGVC,IAlB2BC,MAC3B,MAAMC,EAASlvB,SAASgN,KAAKmO,aAAa,4BAC1C2T,EAAUvnB,QAAUvH,SAAS2N,cAAc,UAC3CmhB,EAAUvnB,QAAQ4nB,IAAO,+CAA8CD,6DACvEJ,EAAUvnB,QAAQzK,OAAQ,EAC1BgyB,EAAUvnB,QAAQ6nB,OAAQ,EAE1B5sB,OAAO6sB,iBAAmB,KACxBL,WACOxsB,OAAO6sB,gBAAgB,EAGhCrvB,SAASsvB,KAAKzhB,YAAYihB,EAAUvnB,QAAQ,EAI5C0nB,GAKK,KACDJ,EAAgBtnB,SAClB/E,OAAOusB,OAAOQ,KAAKjoB,MAAMkoB,uBAAuBX,EAAgBtnB,SAE9DunB,EAAUvnB,SACZvH,SAASsvB,KAAKvhB,YAAY+gB,EAAUvnB,SAElC/E,OAAO6sB,yBACF7sB,OAAO6sB,gBAChB,IAED,IAEH,MAAML,EAAmBA,KAClBL,EAASpnB,SAAY/E,OAAOusB,SAEjCF,EAAgBtnB,QAAU,IAAI/E,OAAOusB,OAAOQ,KAAKE,OAAOC,aAAaf,EAASpnB,QAAS,CACrFooB,sBAAuB,CAAEC,QAAS,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OACvEC,OAAQ,CAAC,sBACTC,MAAO,CAAC,aAIVnB,EAASpnB,QAAQG,iBAAiB,YAAa5L,IAC/B,UAAVA,EAAEiH,KACJjH,EAAEyQ,gBACJ,IAGFsiB,EAAgBtnB,QAAQwoB,YAAY,iBAAiB,KACnD,MAAMC,EAAQnB,EAAgBtnB,QAAQ0oB,WACtC,IAAIC,EAAU,CACZC,cAAe,GACfC,KAAM,GACN3yB,MAAO,GACP4yB,SAAU,IAGZ,IAAK,MAAMtd,KAAaid,EAAMM,mBAAoB,CAGhD,OAFsBvd,EAAU+c,MAAM,IAGpC,IAAK,gBACHI,EAAQC,cAAiB,GAAEpd,EAAUwd,aAAaL,EAAQC,gBAC1D,MACF,IAAK,QACHD,EAAQC,eAAiBpd,EAAUyd,WACnC,MACF,IAAK,cACHN,EAAQG,SAAWtd,EAAUwd,UAC7B,MACF,IAAK,WACHL,EAAQE,KAAOrd,EAAUwd,UACzB,MACF,IAAK,8BACHL,EAAQzyB,MAAQsV,EAAUyd,WAGhC,CAEA/B,EAAgByB,EAAQ,IACxB,EAGJ,OACE5yB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,kBAAkBvhB,MAAM,qBAC/C5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACXnc,IAAKkmB,EACL9rB,KAAK,OACL/C,KAAK,yBACLqI,YAAY,oBACZ7G,MAAOA,EACPkF,SAAUA,EACVkoB,UAAWA,EACX1W,SAAUA,IAEZ1a,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzB1F,GAEW,ECjHpB,MAAMuzB,GAAaC,GACbA,EAAOxwB,QAAU,EACZwwB,EAAOzrB,MAAM,EAAG,GAAK,IAAMyrB,EAAOzrB,MAAM,EAAG,GAAK,IAAMyrB,EAAOzrB,MAAM,EAAG,GACpEyrB,EAAOxwB,QAAU,EACnBwwB,EAAOzrB,MAAM,EAAG,GAAK,IAAMyrB,EAAOzrB,MAAM,GAExCyrB,EAwIX,OApIiBr0B,IAKV,IALW,QAChBs0B,EAAO,SACPC,EAAQ,SACRrqB,EAAQ,OACR6R,EAAS,CAAC,GACX/b,EACC,MAAOw0B,EAAeC,IAAoBr0B,EAAAA,EAAAA,WAAS,IAC5Cs0B,EAAaC,IAAkBv0B,EAAAA,EAAAA,WAAS,IACxCi0B,EAAQO,IAAax0B,EAAAA,EAAAA,UAAS,KAC9By0B,EAAWC,IAAgB10B,EAAAA,EAAAA,UAAS,KACpC20B,EAAaC,IAAkB50B,EAAAA,EAAAA,WAAS,IAE/CG,EAAAA,EAAAA,YAAU,KACJg0B,IAAaD,GACfK,GAAe,EACjB,GACC,CAACH,KAEJj0B,EAAAA,EAAAA,YAAU,KACRk0B,GAAiB,EAAK,GACrB,IAEH,MASM1X,EAAgBvd,IACpB,MAAM,KAAEgE,EAAI,MAAEwB,GAAUxF,EAAE2L,OAE1B,GAAa,iBAAT3H,EAAyB,CAC3B,MAAMyxB,EAAYjwB,EAAM3D,QAAQ,MAAO,IAEvC,IAAI6zB,EAGFA,EAFED,EAAUpxB,OAASgxB,EAAUhxB,QAGtBoxB,EAAUpxB,OAASgxB,EAAUhxB,OADtBoxB,EAIPF,EAEOV,EAAOzrB,MAAM,GAAI,GAEjByrB,EAGlBO,EAAUM,GACVJ,EAAaI,GACbF,GAAe,GAGf9qB,EAAS,CACPiB,OAAQ,CACN3H,OACAwB,MAAOovB,GAAUc,MAKjBA,EAAcrxB,QAAU,EAC1BqG,EAAS,CACPiB,OAAQ,CACN3H,KAAM,yBACNwB,MAAOkwB,EAActsB,MAAM,EAAG,MAIlCsB,EAAS,CACPiB,OAAQ,CACN3H,KAAM,yBACNwB,MAAO,KAIf,MACEkF,EAAS,CACPiB,OAAQ,CACN3H,OACAwB,MAAOA,EAAM3D,QAAQ,MAAO,IAAIuH,MAAM,EAAG,KAG/C,EAGF,OACE5H,EAAAA,cAAA,OAAKiB,MAAO,CAAE2F,QAAS,OAAQutB,cAAe,SAAUC,IAAK,QAC1DV,EACC1zB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,cAAcvhB,MAAM,YAC3C5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,OACL/C,KAAK,eACLqI,YAAY,WACZ7G,MAAOsvB,GAAW,GAClBpqB,SAAU6S,EACVsY,UAxEa71B,IACrBw1B,EAAyB,cAAVx1B,EAAEiH,IAAoB,EAwE7B2rB,YAAarW,EAAOuZ,MAEtBt0B,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAOuZ,KAAKnhB,KAAK,QAItBnT,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,mBAAmBvhB,MAAM,iBAChD5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,OACL/C,KAAK,yBACLqI,YAAY,gBACZ7G,MAAOuvB,GAAY,GACnBrqB,SAAU6S,EACVqV,YAAarW,EAAOwZ,gBAEtBv0B,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAOwZ,eAAephB,KAAK,QAIlCnT,EAAAA,cAAA,KACE0F,KAAK,IACLrD,QArGgB7D,IACpBA,EAAEyQ,iBACF0kB,GAAgBD,EAAY,EAoGxB1yB,UAAU,8CAET0yB,EAAc,6CAA+C,iCAE5D,EC2RV,OA7ZoB10B,IAAuC,IAAtC,YAAEw1B,EAAW,gBAAEC,GAAiBz1B,EACnD,MAAO6X,EAAUC,IAAe1X,EAAAA,EAAAA,UAAS,CACvCs1B,WAAY,GACZC,UAAW,GACX/lB,MAAO,GACPgmB,iBAAkB,GAClB1M,SAAU,GACV2M,sBAAuB,GACvBC,SAAU,CACRjC,cAAe,GACfC,KAAM,GACN3yB,MAAO,GACP4yB,SAAU,GACVzkB,UAAW,GACXimB,cAAe,GACfD,IAAK,OAGFvZ,EAAQga,IAAa31B,EAAAA,EAAAA,UAAS,CAAC,IAC/Byc,EAAcQ,IAAmBjd,EAAAA,EAAAA,WAAS,IAC1CinB,EAAgBC,IAAqBlnB,EAAAA,EAAAA,UAAS,KAC9C41B,EAAaC,IAAkB71B,EAAAA,EAAAA,UAAS,MACzC81B,EAAcV,GAAaW,eAEjC51B,EAAAA,EAAAA,YAAU,KACJi1B,GACF1d,GAAYse,IAAQ,IACfA,EACHV,WAAYF,EAAYE,YAAc,GACtCC,UAAWH,EAAYG,WAAa,GACpC/lB,MAAO4lB,EAAY5lB,OAAS,GAC5BkmB,SAAU,IACLM,EAASN,YACTN,EAAYM,aAGrB,GACC,CAACN,KAEJj1B,EAAAA,EAAAA,YAAU,KACR,MACMy1B,EADY,IAAIlU,gBAAgB5b,OAAO7F,SAAS0hB,QACxBC,IAAI,gBAC9BgU,GACFC,EAAeD,EACjB,GACC,IAEH,MAIMjZ,EAAgBvd,IACpB,MAAM,KAAEgE,EAAI,MAAEwB,GAAUxF,EAAE2L,OAE1B2M,GAAYjL,GAAQmlB,GAAmBnlB,EAAMrJ,EAAMwB,KAG/CxB,EAAKI,MAAM,KAAKgX,QAAO,CAACsX,EAAKzrB,IAAQyrB,IAAMzrB,IAAMsV,IACnDga,GAAUlpB,GAAQmlB,GAAmBnlB,EAAMrJ,EAAM,QAI/C6jB,GACFC,EAAkB,GACpB,EAyGF,OACEtmB,EAAAA,cAACgpB,GAAI,CAAChoB,UAAU,QACdhB,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,qBACrBhB,EAAAA,cAAA,SAAOgB,UAAU,iCAAgC,iGAKlDqlB,GACCrmB,EAAAA,cAAA,OAAKgB,UAAU,qBACbhB,EAAAA,cAACmkB,EAAK,CAAC5e,KAAK,WACT8gB,GAEHrmB,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,oDACVqB,QAASA,IAAMikB,EAAkB,IACjC,aAAW,WAKhBvL,EAAOsa,MACNr1B,EAAAA,cAAA,OAAKgB,UAAU,qBACbhB,EAAAA,cAACmkB,EAAK,CAAC5e,KAAK,UACTwV,EAAOsa,KAAKliB,KAAK,OAEpBnT,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,oDACVqB,QAASA,IAAM0yB,GAAUlpB,IAAI,IAAUA,EAAMwpB,KAAM,SACnD,aAAW,WAKhBL,GAAeA,EAAYlpB,SAAS,oBA/JlC+K,EAAS6d,YAAc7d,EAAS8d,WAAa9d,EAASie,SAASjC,eAAiBhc,EAASie,SAAShC,MAAQjc,EAASie,SAAS30B,OAAS0W,EAASie,SAAS/B,UAAYlc,EAASie,SAASxmB,YAAcuI,EAASie,SAASR,KAAOzd,EAASie,SAASP,iBAgK/Ov0B,EAAAA,cAAA,OAAKgB,UAAU,qBACbhB,EAAAA,cAACmkB,EAAK,CAAC5e,KAAK,UAAS,4EAMzBvF,EAAAA,cAAA,QAAMua,SAhIS/a,UACnBhB,EAAEyQ,iBACFoN,GAAgB,GAChB0Y,EAAU,CAAC,GACXzO,EAAkB,IAElB,MAAMgP,EAAWzE,GAAuB,CACtC6D,WAAY7d,EAAS6d,WACrBC,UAAW9d,EAAS8d,UACpBG,SAAUje,EAASie,WAerB,GAXKI,IACHI,EAASV,iBAAmB/d,EAAS+d,iBAGjC/d,EAASqR,WACXoN,EAASpN,SAAWrR,EAASqR,SAC7BoN,EAAST,sBAAwBhe,EAASge,wBAK1Che,EAASie,SAASR,IAAK,CAEzB,GAAmB,IADPzd,EAASie,SAASR,IAAIj0B,QAAQ,MAAO,IACzCwC,OAGN,OAFAkyB,GAAUlpB,IAAI,IAAUA,EAAMipB,SAAU,IAAKjpB,EAAKipB,SAAUR,IAAK,CAAC,uCAClEjY,GAAgB,EAGpB,CACA,GAAIxF,EAASie,SAASP,cAAe,CAEnC,GAA2B,IADP1d,EAASie,SAASP,cAAcl0B,QAAQ,MAAO,IACnDwC,OAGd,OAFAkyB,GAAUlpB,IAAI,IAAUA,EAAMipB,SAAU,IAAKjpB,EAAKipB,SAAUP,cAAe,CAAC,4CAC5ElY,GAAgB,EAGpB,CAEA,IACE,MAAMkZ,EAAU,IAAIC,GAAAA,EAAa,MAnIb,SAmIuC,CACzD9lB,KAAM,CAAEsX,KAAMsO,GACdG,aAAc,SAGVh2B,QAAiB81B,EAAQG,UACzBnxB,QAAa9E,EAASG,KAExBH,EAASE,IACXmX,GAAYjL,IAAI,IACXA,EACH+oB,iBAAkB,GAClB1M,SAAU,GACV2M,sBAAuB,OAEzBvO,EAAkB,gCAEdmO,GACFA,EAAgBlwB,EAAKyiB,MAGnBgO,IACF9vB,OAAO7F,SAASqG,KAAOsvB,KAGzBD,EAAUxwB,EAAKwW,QAAU,CAAC,GACP,oCAAfxW,EAAK1E,OACPk1B,GAAUlpB,IAAI,IACTA,EACH+oB,iBAAkB,CAAC,oDAI3B,CAAE,MAAO/0B,GACPk1B,EAAU,CAAEM,KAAM,CAAC,mDACrB,CAAC,QACChZ,GAAgB,EAClB,IAkDMrc,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,oBAAoBvhB,MAAM,cACjD5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,OACL/C,KAAK,aACLqI,YAAY,aACZ7G,MAAO6S,EAAS6d,WAChBxrB,SAAU6S,EACVqV,YAAarW,EAAO2Z,aAEtB10B,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAO2Z,YAAYvhB,KAAK,SAI/BnT,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,mBAAmBvhB,MAAM,aAChD5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,OACL/C,KAAK,YACLqI,YAAY,YACZ7G,MAAO6S,EAAS8d,UAChBzrB,SAAU6S,EACVqV,YAAarW,EAAO4Z,YAEtB30B,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAO4Z,WAAWxhB,KAAK,UAMhCnT,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,gBAAgBvhB,MAAM,QAAQ5Q,UAAU,QAC/DhB,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,QACL/C,KAAK,QACLqI,YAAY,QACZ7G,MAAO6S,EAASjI,MAChB8L,UAAQ,EACRG,UAAQ,EACR7Z,UAAU,aAEZhB,EAAAA,cAACsnB,EAAAA,EAAAA,KAAS,CAACtmB,UAAU,cAAa,iFAKpChB,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAC21B,GAAwB,CACvB3xB,MAAO6S,EAASie,SAASjC,cACzB3pB,SAAU6S,EACVoV,gBA1MeyB,IAO3B,GANA9b,GAAYjL,IAAI,IACXA,EACHipB,SAAU,IAAKjpB,EAAKipB,YAAalC,OAI/B7X,EAAO+Z,SAAU,CACnB,MAAMc,EAAiB,CAAC,gBAAiB,OAAQ,QAAS,YAE1Db,GAAUlpB,IAAI,IACTA,EACHipB,SAAU,IACLjpB,EAAKipB,YACLl2B,OAAOmyB,YAAY6E,EAAe33B,KAAIiU,GAAS,CAACA,EAAO,aAGhE,GA0LYkf,YAAarW,EAAO+Z,UAAUjC,cAC9BhzB,MAAOkb,EAAO+Z,UAAUjC,eAAe1f,KAAK,SAGhDnT,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,eAAevhB,MAAM,QAC5C5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,OACL/C,KAAK,gBACLqI,YAAY,OACZ7G,MAAO6S,EAASie,SAAShC,KACzB5pB,SAAU6S,EACVqV,YAAarW,EAAO+Z,UAAUhC,OAEhC9yB,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAO+Z,UAAUhC,MAAM3f,KAAK,SAInCnT,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,gBAAgBvhB,MAAM,SAC7C5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,OACL/C,KAAK,iBACLqI,YAAY,QACZ7G,MAAO6S,EAASie,SAAS30B,MACzB+I,SAAU6S,EACVqV,YAAarW,EAAO+Z,UAAU30B,QAEhCH,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAO+Z,UAAU30B,OAAOgT,KAAK,SAIpCnT,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,cAAcvhB,MAAM,YAC3C5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,OACL/C,KAAK,oBACLqI,YAAY,WACZ7G,MAAO6S,EAASie,SAAS/B,SACzB7pB,SAAU6S,EACVqV,YAAarW,EAAO+Z,UAAU/B,WAEhC/yB,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAO+Z,UAAU/B,UAAU5f,KAAK,UAMzCnT,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,oBAAoBvhB,MAAM,aACjD5R,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,OACL/C,KAAK,qBACLqI,YAAY,YACZ7G,MAAO6S,EAASie,SAASxmB,UACzBpF,SAAU6S,EACVqV,YAAarW,EAAO+Z,UAAUxmB,UAC9BxE,IAAK,IAAI5F,KAAKA,KAAK2xB,MAAQ,WAAmC/qB,cAAclI,MAAM,KAAK,KAEzF5C,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAO+Z,UAAUxmB,WAAW6E,KAAK,SAIxCnT,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAC81B,GAAQ,CACPxC,QAASzc,EAASie,SAASR,IAC3Bf,SAAU1c,EAASie,SAASP,cAC5BrrB,SAAU6S,EACVhB,OAAQA,EAAO+Z,cAKnBI,GACAl1B,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAAA,MAAIgB,UAAU,QAAO,YAErBhB,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,0BAA0BvhB,MAAM,mBAAmB5Q,UAAU,QACpFhB,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,WACL/C,KAAK,mBACLqI,YAAY,mBACZ7G,MAAO6S,EAAS+d,iBAChB1rB,SAAU6S,EACVqV,YAAarW,EAAO6Z,mBAEtB50B,EAAAA,cAACsnB,EAAAA,EAAAA,KAAS,KAAC,2CACXtnB,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAO6Z,kBAAkBzhB,KAAK,QAInCnT,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,sBAAsBvhB,MAAM,eAAe5Q,UAAU,QAC5EhB,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,WACL/C,KAAK,WACLqI,YAAY,eACZ7G,MAAO6S,EAASqR,SAChBhf,SAAU6S,EACVqV,YAAarW,EAAOmN,WAEtBloB,EAAAA,cAACsnB,EAAAA,EAAAA,KAAS,KAAC,+CACXtnB,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAOmN,UAAU/U,KAAK,QAI3BnT,EAAAA,cAACqnB,EAAAA,EAAa,CAAC8L,UAAU,+BAA+BvhB,MAAM,uBAAuB5Q,UAAU,QAC7FhB,EAAAA,cAACsnB,EAAAA,EAAAA,QAAY,CACX/hB,KAAK,WACL/C,KAAK,wBACLqI,YAAY,uBACZ7G,MAAO6S,EAASge,sBAChB3rB,SAAU6S,EACVqV,YAAarW,EAAO8Z,wBAEtB70B,EAAAA,cAACsnB,EAAAA,EAAAA,QAAAA,SAAqB,CAAC/hB,KAAK,WACzBwV,EAAO8Z,uBAAuB1hB,KAAK,SAM5CnT,EAAAA,cAAA,OAAKgB,UAAU,oCACbhB,EAAAA,cAAA,UACEuF,KAAK,SACLvE,UAAU,kBACV0Z,SAAUmB,GAETA,EAAe,cAAgB,qBAKnC,ECvYX,OAzBuBka,IAEnB/1B,EAAAA,cAACgpB,GAAI,CAAChoB,UAAU,QACdhB,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,oBAGvBhB,EAAAA,cAAA,OAAKgB,UAAU,kCACbhB,EAAAA,cAAA,WACEA,EAAAA,cAAA,KACE0F,KAbQ,kBAcR1E,UAAU,+BACV,cAAY,SACZiqB,IAAI,YACL,gB,6PCRb,MAAM+K,GAAQh2B,EAAAA,YAA0C,CAAAhB,EAMrDmM,KAAS,IALV8qB,GAAIvgB,EAAY,MAAK,QACrBpO,EAAU,UAAS,UACnBtG,EAAY,GAAE,SACd/B,KACGoV,GACJrV,EACC,MAYMk3B,EAAUC,KAZI,iCAEG,CACrBC,QAAS,uCACTC,UAAW,0BACXC,YAAa,uBACbC,QAAS,6CACTrvB,QAAS,wBACTsvB,QAAS,uBACT5oB,KAAM,sBAKStG,GACftG,GAGF,OACEhB,EAAAA,cAAC0V,EAASjB,GAAA,CACRtJ,IAAKA,EACLnK,UAAWk1B,EACXj1B,MAAO,CACLiF,QAAS,iBACT6mB,WAAY,MAEV1Y,GAEHpV,EACS,IAIhB+2B,GAAM/M,YAAc,QCmOpB,OA7QkBwN,KAChB,MAAOC,EAAOC,IAAYv3B,EAAAA,EAAAA,UAAS,KAC5Bw3B,EAAsBC,IAA2Bz3B,EAAAA,EAAAA,UAAS,KAC1D03B,EAAaC,IAAkB33B,EAAAA,EAAAA,UAAS,OACxCymB,EAASC,IAAc1mB,EAAAA,EAAAA,WAAS,IAChCurB,EAAcqM,IAAmB53B,EAAAA,EAAAA,UAAS,OAC1C63B,EAAWC,IAAgB93B,EAAAA,EAAAA,UAAS,QACpC+3B,EAAaC,IAAkBh4B,EAAAA,EAAAA,UAAS,OAE/CG,EAAAA,EAAAA,YAAU,KACUC,WAChB,IACE,MAAMC,QAAiBC,MAAM,qBAAsB,CACjD4E,QAAS,CACP,OAAU,mBACV,eAAgB,oBAElBujB,YAAa,gBAETtjB,QAAa9E,EAASG,OAC5B+2B,EAASpyB,EAAKmyB,OACdM,EAAgBzyB,EAAK8yB,eACrBR,EAAwBtyB,EAAKqyB,sBAC7BG,EAAexyB,EAAK+yB,cACpBF,EAAe7yB,EAAKgzB,aACtB,CAAE,MAAO13B,GACPC,QAAQD,MAAM,iCAAkCA,EAClD,CAAC,QACCimB,GAAW,EACb,GAGF0R,EAAW,GACV,KAEHj4B,EAAAA,EAAAA,YAAU,KACR,MACM03B,EADM,IAAIjnB,IAAI9K,OAAO7F,UACL+oB,aAAapH,IAAI,aACnCiW,GACFC,EAAaD,EACf,GACC,IAEH,MAOMQ,EAAaz4B,IAAe,IAAd,KAAE4O,GAAM5O,EAC1B,OAAI4O,EAAKI,gBAAkBJ,EAAK0P,eAE5Btd,EAAAA,cAAA,OAAKgB,UAAU,2DACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAQ4M,EAAKI,gBAC3BhO,EAAAA,cAAA,MAAIgB,UAAU,sBAZD4vB,EAYkChjB,EAAK0P,eAXnD,IAAI1I,KAAKC,aAAa,QAAS,CACpC5T,MAAO,WACP6T,SAAU,QACTG,OAAO2b,MAWChjB,EAAKO,aACPnO,EAAAA,cAAA,MAAIgB,UAAU,QAAO,QAAM4M,EAAKO,cAEhCnO,EAAAA,cAAA,MAAIgB,UAAU,QAAO,SAAO4M,EAAKxP,IAlBvBwyB,KAmBnB,EAUI8G,EAAmBC,IACvB,MAAMC,EAASX,IAAcU,EAAM,MAAQA,EAC3CT,EAAaU,GACb,MAAM7nB,EAAM,IAAIC,IAAI9K,OAAO7F,UAC3B0Q,EAAIqY,aAAa/F,IAAI,YAAauV,GAClC1yB,OAAOud,QAAQC,UAAU,CAAC,EAAG,GAAI3S,EAAI,EAGvC,OACE/P,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAAA,MAAIgB,UAAU,mBAAkB,aAC/B81B,GACC92B,EAAAA,cAAA,OAAKgB,UAAU,oBAAoB81B,GAErC92B,EAAAA,cAAA,OACEgB,UAAU,mDACVC,MAAO,CACL42B,gBAAiB,OACjBC,eAAgB,OAChBr2B,WAAY,oCACZ6L,YAAa,oCACb5L,MAAO,oCAGRg1B,EAAM7zB,OAAS,GACd7C,EAAAA,cAACg2B,GAAK,CACJ1uB,QAAuB,UAAd2vB,EAAwB,UAAY,UAC7ChB,GAAG,SACH1wB,KAAK,SACLlD,QAASA,IAAMq1B,EAAgB,UAChC,SAIH13B,EAAAA,cAACg2B,GAAK,CACJ1uB,QAAuB,YAAd2vB,EAA0B,UAAY,UAC/ChB,GAAG,SACH1wB,KAAK,SACLlD,QAASA,IAAMq1B,EAAgB,YAChC,WAGA/M,GACC3qB,EAAAA,cAACg2B,GAAK,CACJ1uB,QAAuB,kBAAd2vB,EAAgC,UAAY,UACrDhB,GAAG,SACH1wB,KAAK,SACLlD,QAASA,IAAMq1B,EAAgB,kBAChC,iBAIFd,EAAqB/zB,OAAS,GAC7B7C,EAAAA,cAACg2B,GAAK,CACJ1uB,QAAuB,cAAd2vB,EAA4B,UAAY,UACjDhB,GAAG,SACH1wB,KAAK,SACLlD,QAASA,IAAMq1B,EAAgB,cAChC,gBAQM,QAAdT,GAAuBj3B,EAAAA,cAACspB,GAAiB,MAE1CtpB,EAAAA,cAAA,OAAKgB,UAAU,YACZ6kB,EACC7lB,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAACgpB,GAAI,KACHhpB,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAAA,OAAKgB,UAAU,oBACbhB,EAAAA,cAAA,OAAKgB,UAAU,kCACbhB,EAAAA,cAAA,QAAMgB,UAAU,4BAElBhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,QAAMgB,UAAU,mCAChBhB,EAAAA,cAAA,QAAMgB,UAAU,mCAO1BhB,EAAAA,cAAA,OAAKgB,UAAU,OACZ,CAAC,MAAO,SAAS8K,SAASmrB,IAAcP,EAAMz4B,KAAK85B,GAClD/3B,EAAAA,cAAA,OAAKyF,IAAKsyB,EAAc35B,GAAI4C,UAAU,QACpChB,EAAAA,cAAA,OAAKgB,UAAU,wBAAwB5C,GAAK,aAAY25B,EAAc35B,MACpE4B,EAAAA,cAAA,OAAKgB,UAAU,sEACbhB,EAAAA,cAAA,UACEgB,UAAU,6JACVuE,KAAK,SACL,iBAAe,WACf,iBAAiB,aAAYwyB,EAAc35B,KAC3C,gBAAc,OACd,gBAAgB,YAAW25B,EAAc35B,MAEzC4B,EAAAA,cAACy3B,EAAU,CAAC7pB,KAAMmqB,EAAcnqB,QAElC5N,EAAAA,cAAA,OAAK5B,GAAK,YAAW25B,EAAc35B,KAAM4C,UAAU,mCAAmC,kBAAkB,WAAU+2B,EAAc35B,KAAM,iBAAiB,cAAa25B,EAAc35B,MAChL4B,EAAAA,cAAA,OAAKgB,UAAU,+CACZ+2B,EAAcC,kBACbh4B,EAAAA,cAACgpB,GAAI,KACHhpB,EAAAA,cAACopB,GAAW,KACT2O,EAAcE,UAAUh6B,KAAIi6B,GAC3BA,EAAIC,cAAgBn4B,EAAAA,cAACo4B,GAAkB,CAAC3yB,IAAKyyB,EAAI95B,GAAIwxB,YAAasI,EAAIC,mBAK7EJ,EAAcE,UAAUh6B,KAAKyE,GAC5B1C,EAAAA,cAACgpB,GAAI,CAACvjB,IAAK/C,EAAStE,IAClB4B,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAACq4B,GAAY,CAAC31B,SAAUA,eAWzC,CAAC,MAAO,aAAaoJ,SAASmrB,IAAcL,EAAqB/zB,OAAS,GACzE7C,EAAAA,cAAAA,EAAAA,SAAA,KACG02B,EAAM7zB,OAAS,GAAkB,OAAbo0B,GAAsBj3B,EAAAA,cAAA,MAAIgB,UAAU,SACxD41B,EAAqB34B,KAAKyE,GACzB1C,EAAAA,cAACgpB,GAAI,CAACvjB,IAAK/C,EAAStE,GAAI4C,UAAU,QAChChB,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAACq4B,GAAY,CAAC31B,SAAUA,SAOjC,CAAC,MAAO,WAAWoJ,SAASmrB,IAC7Bj3B,EAAAA,cAAAA,EAAAA,SAAA,MACI42B,EAAqB/zB,OAAS,GAAK6zB,EAAM7zB,OAAS,IAAmB,OAAbo0B,GAAsBj3B,EAAAA,cAAA,MAAIgB,UAAU,SAC9FhB,EAAAA,cAACs4B,GAAW,CACV9D,YAAa2C,EACb1C,gBAzJe8D,IAC3BnB,GAAevrB,IAAI,IACdA,KACA0sB,KACF,IAuJqB,WAAbtB,GAA0Bj3B,EAAAA,cAAC+1B,GAAc,OAI3C,CAAC,MAAO,iBAAiBjqB,SAASmrB,IACjCj3B,EAAAA,cAAAA,EAAAA,SAAA,KACgB,OAAbi3B,GAAsBj3B,EAAAA,cAAA,MAAIgB,UAAU,SACrChB,EAAAA,cAACw4B,GAAY,CAAC7N,aAAcA,OAOtC3qB,EAAAA,cAAA,OAAKgB,UAAU,MAAM5C,GAAG,UACtB4B,EAAAA,cAAA,OAAKgB,UAAU,OACbhB,EAAAA,cAACgpB,GAAI,KACHhpB,EAAAA,cAACopB,GAAW,KACVppB,EAAAA,cAACkpB,GAAS,KAAClpB,EAAAA,cAAA,UAAI,0BACfA,EAAAA,cAACmpB,GAAe,CAACnoB,UAAU,4BACzBhB,EAAAA,cAAA,YACEA,EAAAA,cAAA,KAAG0F,KAAK,gDAAgD1E,UAAU,oDAAoD,cAAY,OAAOiqB,IAAI,YAAW,eAGxJjrB,EAAAA,cAAA,KAAGgB,UAAU,QAAO,+DAGtBhB,EAAAA,cAAA,YACEA,EAAAA,cAAA,KAAG0F,KAAK,+CAA+C1E,UAAU,oDAAoD,cAAY,OAAOiqB,IAAI,YAAW,cAGvJjrB,EAAAA,cAAA,KAAGgB,UAAU,QAAO,+BAGtBhB,EAAAA,cAAA,YACEA,EAAAA,cAAA,KAAG0F,KAAK,wDAAwD1E,UAAU,oDAAoD,cAAY,OAAOiqB,IAAI,YAAW,uBAGhKjrB,EAAAA,cAAA,KAAGgB,UAAU,QAAO,qCAO5B,EClQV,OAb8By3B,IAE1Bz4B,EAAAA,cAAC2oB,EAAAA,GAAa,KACZ3oB,EAAAA,cAAC4oB,EAAAA,GAAM,KACL5oB,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,gBACLokB,QAAS9oB,EAAAA,cAACy2B,GAAS,UCsD7B,OA7D4BiC,KAC1B,MAAOh2B,EAAUi2B,IAAev5B,EAAAA,EAAAA,UAAS,MAmBzC,OAjBAG,EAAAA,EAAAA,YAAU,KACUC,WAChB,MAAMwP,EAAa9J,OAAO7F,SAAS8F,SAASuc,MAAM,eAAe,GAE3DjiB,QAAiBC,MAAO,0BAAyBsP,IAAc,CACnE1K,QAAS,CACP,OAAU,mBACV,eAAgB,oBAElBujB,YAAa,gBAETtjB,QAAa9E,EAASG,OAC5B+4B,EAAYp0B,EAAK7B,SAAS,EAE5B80B,EAAW,GACV,IAGDx3B,EAAAA,cAAA,WACEA,EAAAA,cAAA,UAAI,kBAEJA,EAAAA,cAAA,KAAGgB,UAAU,cAAa,4DACiChB,EAAAA,cAAA,cAAQ,YAAiB,0CAGnF0C,GAAUsqB,gBAAgBnqB,OAAS,GAAKH,GAAUsqB,gBAAgB,GAAGhB,MAAMjb,MAAKkb,GAAQA,EAAKjoB,QAC5FhE,EAAAA,cAAA,OAAKgB,UAAU,sBACbhB,EAAAA,cAAA,OAAKgB,UAAU,+BAA+B5C,GAAK,aAAYsE,EAAStE,MACtE4B,EAAAA,cAACitB,GAAiB,CAChBpB,eAAe,EACfC,kBAAkB,EAClBrmB,IAAK,EACL/C,SAAUA,EACVgpB,QAAShpB,EAASsqB,gBAAgB,GAClCrB,aAAc,MAKpB3rB,EAAAA,cAAA,KAAGgB,UAAU,cAAa,4GAK5BhB,EAAAA,cAAA,WAEAA,EAAAA,cAAA,UAAQqC,QAASA,KACf,MAAMu2B,EAAsBl2B,GAAUsqB,gBAAgB,GAAGhB,MAAM6M,MAAK5M,IAASA,EAAKC,YAC9E0M,IACF1zB,OAAO7F,SAASqG,KAAOkzB,EAAoB7oB,IAC7C,EACC/O,UAAU,mBAAkB,YAG3B,ECwFV,OAhJkBy1B,KAChB,MAAOnB,EAAUwD,IAAe15B,EAAAA,EAAAA,UAAS,OAClCymB,EAASC,IAAc1mB,EAAAA,EAAAA,WAAS,IAChCS,EAAOyD,IAAYlE,EAAAA,EAAAA,UAAS,OAC5B25B,EAAWC,IAAgB55B,EAAAA,EAAAA,UAAS,KACpC65B,EAAwBC,IAA6B95B,EAAAA,EAAAA,UAAS,IAC/DgE,GAAWC,EAAAA,EAAAA,OAEjB9D,EAAAA,EAAAA,YAAU,KACUC,WAChB,IACE,MAAMC,QAAiBuhB,EAAAA,GAAAA,IAAI,iCAAkC,CAC3DyU,aAAc,SAEVlxB,QAAa9E,EAASG,KAC5B,IAAKH,EAASE,GACZ,MAAM,IAAIlB,MAAM8F,EAAK1E,OAEvBi5B,EAAYv0B,EAAKyiB,KACnB,CAAE,MAAOnnB,GACPyD,EAASzD,EAAM8Q,QACjB,CAAC,QACCmV,GAAW,EACb,GAGF0R,EAAW,GACV,IAkBH,OAAI3R,EAEA7lB,EAAAA,cAAA,OAAKgB,UAAU,kBACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,UAAI,iBAOVH,EAEAG,EAAAA,cAAA,OAAKgB,UAAU,kBACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,SAAG,6CAA2CH,MAQtDG,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,UAAI,uBAIRA,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,QAErBhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,OAAKgB,UAAU,cACbhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,MAAIgB,UAAU,cAAa,QAC3BhB,EAAAA,cAAA,KAAGgB,UAAU,aAAY,2DAEzBhB,EAAAA,cAAA,QAAMua,SA3DI/b,IACtBA,EAAEyQ,iBACF,MAAMkqB,EAAeJ,EAAU1gB,OAC3B8gB,GACF/1B,EAAU,kBAAiBg2B,mBAAmBD,KAChD,EAsD4Cn4B,UAAU,QACxChB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,SACEuF,KAAK,QACLvE,UAAU,eACV6J,YAAY,aACZ7G,MAAO+0B,EACP7vB,SAAW1K,GAAMw6B,EAAax6B,EAAE2L,OAAOnG,OACvCwR,UAAQ,IAEVxV,EAAAA,cAAA,UACEgB,UAAU,kBACVuE,KAAK,UACN,aASXvF,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,OAAKgB,UAAU,cACbhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,MAAIgB,UAAU,cAAa,qBAC3BhB,EAAAA,cAAA,KAAGgB,UAAU,aAAY,uCAEzBhB,EAAAA,cAAA,QAAMua,SA/EgB/b,IAClCA,EAAEyQ,iBACF,MAAMoqB,EAA4BJ,EAAuB5gB,OACrDghB,GACFj2B,EAAU,+BAA8Bg2B,mBAAmBC,KAC7D,EA0EwDr4B,UAAU,QACpDhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,SACEuF,KAAK,OACLvE,UAAU,eACV6J,YAAY,uBACZ7G,MAAOi1B,EACP/vB,SAAW1K,GAAM06B,EAA0B16B,EAAE2L,OAAOnG,OACpDwR,UAAQ,IAEVxV,EAAAA,cAAA,UACEgB,UAAU,kBACVuE,KAAK,UACN,eAWX,EC8FV,OA1Oa+zB,KACX,MAAQ1qB,MAAO2qB,IAAiBC,EAAAA,EAAAA,MAC1Bp2B,GAAWC,EAAAA,EAAAA,MACXo2B,EAAeF,GAAgB,IAE9B3qB,EAAOgW,IAAYxlB,EAAAA,EAAAA,UAASq6B,IAC5BnE,EAAUwD,IAAe15B,EAAAA,EAAAA,UAAS,OAClCymB,EAASC,IAAc1mB,EAAAA,EAAAA,YAASq6B,IAChC55B,EAAOyD,IAAYlE,EAAAA,EAAAA,UAAS,OAEnCG,EAAAA,EAAAA,YAAU,KACJk6B,GACFC,EAAcD,EAChB,GACC,IAEH,MAAMC,EAAgBl6B,UACpB,GAAKm6B,EAAL,CAEA7T,GAAW,GACXxiB,EAAS,MAET,IACE,MAAM7D,QAAiBuhB,EAAAA,GAAAA,IAAK,kBAAiBoY,mBAAmBO,iBAA4B,CAC1FlE,aAAc,SAEVlxB,QAAa9E,EAASG,KAE5B,IAAKH,EAASE,GACZ,MAAM,IAAIlB,MAAM8F,EAAK1E,OAEvBi5B,EAAYv0B,EAAKyiB,KACnB,CAAE,MAAOnnB,GACPyD,EAASzD,EAAM8Q,SAAW,qBAC5B,CAAC,QACCmV,GAAW,EACb,CAnBwB,CAmBxB,EAcI8T,EAAc/M,GACbA,EACE,IAAI3oB,KAAK2oB,GAAYzhB,iBADJ,MAI1B,OACEpL,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAK,aAAW,cACdA,EAAAA,cAAA,MAAIgB,UAAU,cACZhB,EAAAA,cAAA,MAAIgB,UAAU,mBACZhB,EAAAA,cAAA,KAAG0F,KAAK,sBAAqB,cAE/B1F,EAAAA,cAAA,MAAIgB,UAAU,yBAAyB,eAAa,QAAO,UAK/DhB,EAAAA,cAAA,UAAI,UAIRA,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,QAAMua,SAtCK/a,UACjBhB,GACFA,EAAEyQ,iBAGCL,EAAMyJ,SAEXjV,EAAU,kBAAiBg2B,mBAAmBxqB,KAAU,CAAEvO,SAAS,UAC7Dq5B,EAAc9qB,GAAM,EA8BgB5N,UAAU,QACxChB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,SACEuF,KAAK,QACLvE,UAAU,eACV6J,YAAY,mBACZ7G,MAAO4K,EACP1F,SAAW1K,GAAMomB,EAASpmB,EAAE2L,OAAOnG,OACnCwR,UAAQ,IAEVxV,EAAAA,cAAA,UACEgB,UAAU,kBACVuE,KAAK,SACLmV,SAAUmL,GAETA,EAAU,aAAe,cASvChmB,GACCG,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,sBACZnB,KAMRgmB,IAAYyP,GACXt1B,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,iCACbhB,EAAAA,cAAA,OAAKgB,UAAU,8BAA8BqE,KAAK,UAChDrF,EAAAA,cAAA,QAAMgB,UAAU,mBAAkB,kBAO3Cs0B,GACCt1B,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,cACbhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,sBAEvBhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,OAAY,IAAEs1B,EAASl3B,IAClC4B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,UAAe,IAAEs1B,EAAS1mB,OACrC5O,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,SAAc,IAAEs1B,EAASZ,WAAW,IAAEY,EAASX,WAC1D30B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,YAAiB,IAAE45B,EAAWtE,EAASjiB,aAClDrT,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,iBAAsB,IAAE45B,EAAWtE,EAASuE,aACvD75B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,sBAA2B,IAAEs1B,EAASH,cAAgB,MAAQ,UAMjFn1B,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,kBAEvBhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,OAAKgB,UAAU,oBACbhB,EAAAA,cAAA,SAAOgB,UAAU,uBACfhB,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,MAAIiB,MAAO,CAAES,MAAO,QAAS,SAC7B1B,EAAAA,cAAA,UAAI,WAGRA,EAAAA,cAAA,aACGpB,OAAOuS,QAAQmkB,EAASR,UAAY,CAAC,GAAG72B,KAAIe,IAAA,IAAEyG,EAAKzB,GAAMhF,EAAA,OACxDgB,EAAAA,cAAA,MAAIyF,IAAKA,GACPzF,EAAAA,cAAA,UAAIA,EAAAA,cAAA,cAASyF,EAAIpF,QAAQ,KAAM,KAAKA,QAAQ,SAASy5B,GAAKA,EAAEnyB,kBAC5D3H,EAAAA,cAAA,UAAKgE,GAAS,OACX,WAUpBsxB,EAAS5R,SAAStlB,IACjB4B,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,eACfhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,aAEvBhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,OAAY,IAAEs1B,EAAS5R,SAAStlB,IAC3C4B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,UAAe,IAAEs1B,EAAS5R,SAASuD,oBAOrDqO,EAASyE,mBAAmBl3B,OAAS,GACpC7C,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,uBAEvBhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,UACGs1B,EAASyE,mBAAmB97B,KAAIyE,GAC/B1C,EAAAA,cAAA,MAAIyF,IAAK/C,EAAStE,IAChB4B,EAAAA,cAAA,KAAG0F,KAAO,+BAA8BhD,EAAStE,KAAM4C,UAAU,6BAA6B0B,EAAStE,YAUtHk3B,EAAS0E,kBACRh6B,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,qBAEvBhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,UACGpB,OAAOuS,QAAQmkB,EAAS0E,kBAAkB/7B,KAAIuN,IAAA,IAAE/F,EAAKzB,GAAMwH,EAAA,OAC1DxL,EAAAA,cAAA,MAAIyF,IAAKA,GAAMA,EAAI7C,MAAM,KAAK3E,KAAIg8B,GAAQA,EAAKvyB,OAAO,GAAGC,cAAgBsyB,EAAKryB,MAAM,KAAIuL,KAAK,KAAK,KAAGnP,EAAQ,OAAS,UAAe,UAUnJ,ECAV,OAtOyBk2B,KACvB,MAAQ97B,GAAI+7B,IAAcX,EAAAA,EAAAA,MACpBp2B,GAAWC,EAAAA,EAAAA,MACX+2B,EAA4BD,GAAa,IAExC7Y,EAAoB+Y,IAAyBj7B,EAAAA,EAAAA,UAASg7B,IACtDE,EAAsBC,IAA2Bn7B,EAAAA,EAAAA,UAAS,OAC1DymB,EAASC,IAAc1mB,EAAAA,EAAAA,YAASg7B,IAChCv6B,EAAOyD,IAAYlE,EAAAA,EAAAA,UAAS,OAEnCG,EAAAA,EAAAA,YAAU,KACJ66B,GACFI,EAA0BJ,EAC5B,GACC,IAEH,MAAMI,EAA4Bh7B,UAChC,GAAKi7B,EAAL,CAEA3U,GAAW,GACXxiB,EAAS,MAET,IACE,MAAM7D,QAAiBuhB,EAAAA,GAAAA,IAAK,+BAA8BoY,mBAAmBqB,iBAAyC,CACpHhF,aAAc,SAEVlxB,QAAa9E,EAASG,KAC5B,IAAKH,EAASE,GACZ,MAAM,IAAIlB,MAAM8F,EAAK1E,OAEvB06B,EAAwBh2B,EAAKwK,kBAC/B,CAAE,MAAOlP,GACPyD,EAASzD,EAAM8Q,SAAW,kCAC5B,CAAC,QACCmV,GAAW,EACb,CAlBqC,CAkBrC,EAgCI8T,EAAc/M,GACbA,EACE,IAAI3oB,KAAK2oB,GAAYzhB,iBADJ,MAI1B,OACEpL,EAAAA,cAAA,OAAKgB,UAAU,mBACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAK,aAAW,cACdA,EAAAA,cAAA,MAAIgB,UAAU,cACZhB,EAAAA,cAAA,MAAIgB,UAAU,mBACZhB,EAAAA,cAAA,KAAG0F,KAAK,sBAAqB,cAE/B1F,EAAAA,cAAA,MAAIgB,UAAU,yBAAyB,eAAa,QAAO,uBAK/DhB,EAAAA,cAAA,UAAI,uBAIRA,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,QACbhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,QAAMua,SAxDiB/a,UAC7BhB,GACFA,EAAEyQ,iBAGCqS,EAAmBjJ,SAExBjV,EAAU,+BAA8Bg2B,mBAAmB9X,KAAuB,CAAEjhB,SAAS,UACvFm6B,EAA0BlZ,GAAmB,EAgDGtgB,UAAU,QACpDhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,SACEuF,KAAK,OACLvE,UAAU,eACV6J,YAAY,6BACZ7G,MAAOsd,EACPpY,SAAW1K,GAAM67B,EAAsB77B,EAAE2L,OAAOnG,OAChDwR,UAAQ,IAEVxV,EAAAA,cAAA,UACEgB,UAAU,kBACVuE,KAAK,SACLmV,SAAUmL,GAETA,EAAU,aAAe,cASvChmB,GACCG,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,sBACZnB,KAMRgmB,IAAYyU,GACXt6B,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,iCACbhB,EAAAA,cAAA,OAAKgB,UAAU,8BAA8BqE,KAAK,UAChDrF,EAAAA,cAAA,QAAMgB,UAAU,mBAAkB,kBAO3Cs5B,GACCt6B,EAAAA,cAAA,OAAKgB,UAAU,0BACbhB,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,cACbhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,sBAEvBhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,OAAY,IAAEs6B,EAAqBl8B,IAC9C4B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,YAAiB,IAAE45B,EAAWU,EAAqBjnB,aAC9DrT,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,iBAAsB,IAAE45B,EAAWU,EAAqBT,aACnE75B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,SAAc,IAACA,EAAAA,cAAA,KAAG0F,KAAO,kBAAiB0zB,mBAAmBkB,EAAqBtT,KAAKpY,SAAU5N,UAAU,6BAA6Bs5B,EAAqBtT,KAAKpY,QAC7K5O,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,kBAAuB,IAAEs6B,EAAqBI,eACzD16B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,gBAAqB,IAAEs6B,EAAqBK,aAAe,OACtE36B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,WAAgB,IAAEs6B,EAAqBM,QAAU,OAC5D56B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,WAAgB,IAAEs6B,EAAqBO,OAAS,MAAQ,MACnE76B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,YAAiB,IAAEs6B,EAAqBQ,SAAW,OAC9D96B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,4BAAiC,IAAEs6B,EAAqBpd,wBAA0B0c,EAAWU,EAAqBpd,yBAA2B,WAK/Jod,EAAqBS,kBACpB/6B,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,cACbhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,qBAEvBhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,OAAY,IAAEs6B,EAAqBS,iBAAiB38B,IAC/D4B,EAAAA,cAAA,SAAGA,EAAAA,cAAA,cAAQ,SAAc,IAAEs6B,EAAqBS,iBAAiBv4B,UAM1E83B,GAAsBxrB,+BAA+BjM,OAAS,GAC7D7C,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,OAAKgB,UAAU,cACbhB,EAAAA,cAAA,OAAKgB,UAAU,eACbhB,EAAAA,cAAA,MAAIgB,UAAU,QAAO,kCAEvBhB,EAAAA,cAAA,OAAKgB,UAAU,aACbhB,EAAAA,cAAA,OAAKgB,UAAU,oBACbhB,EAAAA,cAAA,OAAKiB,MAAO,CAAE+5B,UAAW,OAAQt5B,MAAO,SACtC1B,EAAAA,cAAA,SAAOgB,UAAU,uBACfhB,EAAAA,cAAA,aACEA,EAAAA,cAAA,UACEA,EAAAA,cAAA,UAAI,MACJA,EAAAA,cAAA,UAAI,SACJA,EAAAA,cAAA,UAAI,UACJA,EAAAA,cAAA,UAAI,cACJA,EAAAA,cAAA,UAAI,sBAGRA,EAAAA,cAAA,aACGs6B,EAAqBxrB,8BAA8B7Q,KAAK+L,GACvDhK,EAAAA,cAAA,MAAIyF,IAAKuE,EAAM5L,IACb4B,EAAAA,cAAA,UAAKgK,EAAM5L,IACX4B,EAAAA,cAAA,UAAKgK,EAAMiK,OACXjU,EAAAA,cAAA,UAAKgK,EAAMsP,QACXtZ,EAAAA,cAAA,UAAK45B,EAAW5vB,EAAMqJ,aACtBrT,EAAAA,cAAA,UAAKgK,EAAMixB,yBAOtBX,EAAqBY,wBACpBl7B,EAAAA,cAAA,OAAKgB,UAAU,YACbhB,EAAAA,cAAA,OAAKgB,UAAU,UACbhB,EAAAA,cAAA,UAAQgB,UAAU,iBAAiBqB,QAtK3B7C,UAC9B,IAAK8hB,EAAmBjJ,OAAQ,OAGhC,IADkBnT,OAAOsV,QAAQ,mFACjB,OAEhB,MAAM/a,QAAiB07B,EAAAA,GAAAA,IAAS,+BAA8B/B,mBAAmB9X,oCAAsD,CACrImU,aAAc,SAEhB,IAAKh2B,EAASE,GACZ,MAAM,IAAIlB,MAAMgB,EAASI,cAERJ,EAASG,MACnBsH,eACDszB,EAA0BlZ,EAClC,GAuJ2F,6BAWrF,EC3MV,OArB4B8Z,IAExBp7B,EAAAA,cAAC2oB,EAAAA,GAAa,KACZ3oB,EAAAA,cAAC4oB,EAAAA,GAAM,KACL5oB,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,qBACLokB,QAAS9oB,EAAAA,cAACy2B,GAAS,QAErBz2B,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,wBACLokB,QAAS9oB,EAAAA,cAACs5B,GAAI,QAEhBt5B,EAAAA,cAAC6oB,EAAAA,GAAK,CACJnkB,KAAK,kCACLokB,QAAS9oB,EAAAA,cAACk6B,GAAgB,U,mBCjBpC,MAAMmB,GAAWC,EAAAA,MACjBD,GAAS18B,OAAOyU,QAAQioB,I,uBCFxB,MAAME,GAAcC,GAAAA,GAAAA,QAGpBD,GAAYE,OAAQ,EACpBv2B,OAAOw2B,SAAaH,GCJpB,qBAA6BI,GAAAA,GACvB71B,WACF,OAAO81B,KAAKr3B,KAAKyc,IAAI,OACvB,CAEA6a,OACEC,UAAUC,UAAUC,UAAUJ,KAAK91B,KACrC,GCPF,iBAA6B61B,GAAAA,GAIvBM,eACF,OAAOC,EAAEN,KAAK9S,QAChB,CAIAqT,UACEP,KAAKK,SAASG,GAAG,CACfC,MAAQ79B,IACN,MAAM89B,EAAUJ,EAAE19B,EAAE2L,QAEhB,IAAMmyB,EAAQC,KAAK,mBAAqBD,EAAQ1wB,MAAM/I,SAAWy5B,EAAQC,KAAK,iBAIlFX,KAAK1mB,eAAegnB,EAAE19B,EAAE2L,QAAQ,EAElCqyB,KAAOh+B,IACLo9B,KAAK1mB,eAAegnB,EAAE19B,EAAE2L,SAAS,EAAK,GAG5C,CAIAsyB,aAAaC,GAEX,OAAOA,EAAEr8B,QAAQ,MAAO,IAAIA,QAAQ,wBAAyB,IAC/D,CAEA6U,eAAepN,GAAsB,IAAf00B,EAAIv0B,UAAApF,OAAA,QAAA2D,IAAAyB,UAAA,IAAAA,UAAA,GAKxB,IAAI00B,EAAY70B,EAAM8D,MAGtB,GAAkB,KAAd+wB,EAAJ,CAGA,IAAIC,EAAeD,EAAU95B,OAGzBg6B,EAAY/0B,EAAMy0B,KAAK,kBAG3B,GAAII,EAAU5c,QAAQ,MAAQ,EAAG,CAC/B,IAAI+c,EAAcH,EAAU5c,QAAQ,KAChCgd,EAAYJ,EAAUK,UAAU,EAAGF,GACnCG,EAAaN,EAAUK,UAAUF,GAErCC,EAAYnB,KAAKa,aAAaM,GAC9BE,EAAarB,KAAKa,aAAaQ,GAE3BT,IACFS,GAAc,MAOhBN,EAAY,IAAMI,EAAY,KAH9BE,EAAaA,EAAWD,UAAU,EAAG,GAKvC,MAKEL,EAAY,KADZA,EAAYf,KAAKa,aAAaE,IAI1BH,IACFG,GAAa,OAOjB,GAFA70B,EAAM8D,IAAI+wB,IAELH,EAGHK,EADkBF,EAAU95B,OACF+5B,EAAeC,EACzC/0B,EAAM,GAAGo1B,kBAAkBL,EAAWA,EA/CR,CAiDlC,G,WC1FF,iBAA6BlB,GAAAA,GAC3BQ,WACEgB,EAAAA,GAAAA,GAASvB,KAAK9S,QAChB,CAEAsU,aACED,GAAAA,EAAAA,QAAiBvB,KAAK9S,QACxB,GCRF,MACMuU,GAAsB,CAC1B,aACA,aACA,eACA,WACA,cACA,OAGF,qBAA6B1B,GAAAA,GAGvBtnB,YACF,OAAO1E,KAAKqK,MAAM4hB,KAAKr3B,KAAKyc,IAAI,UAAY,KAC9C,CAIAmb,UACEP,KAAK9S,QAAQ1e,iBAAiB,QAASwxB,KAAK0B,YAAYC,KAAK3B,MAC/D,CAEAwB,aACExB,KAAK9S,QAAQze,oBAAoB,QAASuxB,KAAK0B,YAAYC,KAAK3B,MAClE,CAIA0B,cACE,MAAMvtB,EAAM6rB,KAAK4B,YAAY5B,KAAK9S,QAAQpjB,MAE1CR,OAAOu4B,QAAQC,QAhCQ,mCAgCoB,IAAK9B,KAAKvnB,MAAOtE,OAC9D,CAIAytB,YAAYztB,GACV,MAAM4tB,EAAS,IAAI3tB,IAAID,GACjBmO,EAAS,IAAI4C,gBAAgB6c,EAAO5c,QAQ1C,OANAsc,GAAoBjqB,SAAQwqB,IAC1B1f,EAAO2f,OAAOD,EAAM,IAGtBD,EAAO5c,OAAS7C,EAAO1V,WAEhBm1B,EAAOn1B,UAChB,G,wFClDK,IAAKs1B,GAAY,SAAZA,GAAY,OAAZA,EAAY,sBAAZA,EAAY,4BAAZA,CAAY,MAkBZC,GAA6B,SAA7BA,GAA6B,OAA7BA,EAA6B,cAA7BA,EAA6B,gBAA7BA,CAA6B,MAU7BC,GAAc,SAAdA,GAAc,OAAdA,EAAc,sBAAdA,EAAc,YAAdA,CAAc,MAKdC,GAAe,SAAfA,GAAe,OAAfA,EAAe,wBAAfA,EAAe,sBAAfA,EAAe,gBAAfA,CAAe,MC3BpB,MAAMC,IAAqBC,EAAAA,GAAAA,IAAoB,CACpDC,SAAWC,GAA2BA,EAAWjgC,GACjDkgC,aAAcA,CAAC7e,EAAeC,IAAkBD,EAAE8e,UAAY7e,EAAE6e,YAG5DC,GAAsBN,GAAmBO,cAC5Ct+B,GAAUA,EAAMu+B,cAKZ,MAAMC,GAAqBx+B,GAAqBq+B,GAAoBI,UAAUz+B,GACxE0+B,GAAuB1+B,GAAqBq+B,GAAoBM,UAAU3+B,GAE1E4+B,GAAmB5+B,GAAqBA,EAAMu+B,YAAYM,aAC1DC,GAAc9+B,GAAqBA,EAAMu+B,YAAYQ,SACrDnU,GAAc5qB,GAAqBA,EAAMu+B,YAAYS,SAGrDC,IAA2BC,EAAAA,GAAAA,IACtC,CAACV,KACAD,IACC3yB,EAAAA,GAAAA,QACE2yB,GACCL,GAA2BJ,GAAgBqB,aAAejB,EAAWl+B,UAI/Do/B,IAAeF,EAAAA,GAAAA,IAC1B,CAACD,KACAV,GAAgB,IAAMA,EAAY77B,SClCxB28B,KDqCsBH,EAAAA,GAAAA,IACjC,CAACV,KACAD,GAAgBA,EAAY77B,OAAS,EAAI67B,EAAY,QAAKl4B,ICvCnCsqB,GACpB/Y,MAAMiK,QAAQ8O,GACTlyB,OAAOD,KAAKmyB,GAAK7yB,KAAIwH,GAAOg6B,GAAiB3O,EAAIrrB,MAGnDg6B,GAAiB3O,IAGb4O,GAAa5O,GACpB/Y,MAAMiK,QAAQ8O,GACTlyB,OAAOD,KAAKmyB,GAAK7yB,KAAIwH,GAAOk6B,GAAiB7O,EAAIrrB,MAGnDk6B,GAAiB7O,GAGpB2O,GAAoB3O,GAAgB8O,GAAAA,QAAAA,UAAwB9O,EAAK,CAAE+O,WAAW,EAAMC,kBAAkB,IACtGH,GAAoB7O,GAAgB8O,GAAAA,QAAAA,UAAwB9O,EAAK,CAAE+O,WAAW,EAAMC,kBAAkB,ICjB/FC,GAAcpvB,IACzBqvB,GAAAA,GAAAA,MAAYrvB,EAAS,CACnBwc,SAAU,KACV,ECFS8S,GAAiB,WAC5B,MAGMC,EAAM,CAFVC,kBAAkB,KAFgBl4B,UAAApF,OAAA,QAAA2D,IAAAyB,UAAA,GAAAA,UAAA,GAAG,CAAC,GAQlCg4B,OACoBz5B,IAAxBs1B,UAAUsE,UACN,CAACtE,UAAUuE,UACXvE,UAAUsE,UAChB,GAAKH,EAGL,OAAOA,EAAehiC,KAAIqiC,IACxB,MAAMC,EAAgBD,EAAOjoB,OAC7B,OAAO6nB,EAAIC,iBACPI,EAAc39B,MAAM,OAAO,GAC3B29B,CAAa,GAErB,ECjBMC,GAAyB,0BAMlBC,IAAmBC,EAAAA,GAAAA,IAC9B,gCACAlhC,UAAkD,IAA3C,UAAEmhC,GAAmC3hC,EAC1C,MAAMu2B,EAAU,IAAIC,GAAAA,EAAa,MAAOgL,GAAwB,CAC9D/K,aAAc,OACdmL,MAAOpB,GAAU,CAAEmB,gBAGflhC,QAAiB81B,EAAQG,UAE/B,GAAIj2B,EAASE,GAAI,CACf,MAAMC,QAAaH,EAASG,KAE5B,OAAO8/B,GAAU9/B,EACnB,CAAO,CACL,MAAM+Q,EAAU,+DAIhB,MAFAovB,GAAWpvB,GACX7Q,QAAQD,MAAM8Q,GACR,IAAIlS,MAAMkS,EAClB,KAWSkwB,IAAmBH,EAAAA,GAAAA,IAC9B,gCACAlhC,UAAkF,IAA3E,SAAEshC,EAAQ,UAAEH,EAAS,QAAEI,EAAO,YAAEC,GAAqCx1B,EAC1Eu1B,EAAU,IACLA,EACHE,SDjD+BrsB,KAAKssB,iBAAiBC,kBAAkBF,SCkDvEG,QAASnB,MAGX,MAAM1K,EAAU,IAAIC,GAAAA,EAAa,OAAQgL,GAAwB,CAC/D/K,aAAc,OACd/lB,KAAM8vB,GAAU,CAAE6B,gBAAiB,CAAEP,WAAUH,YAAWI,UAASC,mBAG/DvhC,QAAiB81B,EAAQG,UAE/B,GAAIj2B,EAASE,GAAI,CACf,MAAMC,QAAaH,EAASG,KAE5B,OAAO8/B,GAAU9/B,EACnB,CAAO,CACL,MAAM+Q,EAAU,iEAIhB,MAFAovB,GAAWpvB,GACX7Q,QAAQD,MAAM8Q,GACR,IAAIlS,MAAMkS,EAClB,KChES2wB,IAAmBC,EAAAA,GAAAA,IAAY,CAC1C/+B,KAAM,cACNg/B,aAActD,GAAmBuD,gBAAgB,CAC/CzC,aAAclB,GAAa4D,aAC3BxC,UAAU,EACVC,UAAU,EACVwC,aAAa,IAEfC,SAAU,CACRC,iBAAkB3D,GAAmB4D,UACrCC,mBAAmB5hC,EAAOmZ,GACxBnZ,EAAM6+B,aAAe1lB,EAAO0oB,OAC9B,EACAC,+BAA+B9hC,EAAOmZ,GACpC,MAAM+kB,EAAal+B,EAAM+hC,SAAS5oB,EAAO0oB,QAAQ5jC,IAEjD,GAAIigC,EAAY,CACd,IAAI8D,EAAoB9D,EAAW8D,kBAE/BA,EACFA,GAAqB7oB,EAAO0oB,QAAQI,uBAEpCD,EAAoB7oB,EAAO0oB,QAAQI,uBAGrCjiC,EAAM+hC,SAAS5oB,EAAO0oB,QAAQ5jC,IAAM,IAC/BigC,EACH8D,oBAEJ,CACF,GAEFE,cAAgBC,IACdA,EAAQC,QAAQ9B,GAAiB+B,SAAUriC,IACzCA,EAAMg/B,UAAW,CAAI,IAEvBmD,EAAQC,QAAQ9B,GAAiBgC,WAAW,CAACtiC,EAAOmZ,KAClD,MAAM0oB,EAAU,IAAK1oB,EAAO0oB,SAE5B7hC,EAAMg/B,UAAW,EACjBh/B,EAAMwhC,YAAcK,EAAQL,YAC5BzD,GAAmBwE,WAAWviC,EAAO6hC,EAAQz9B,KAAK,IAEpD+9B,EAAQC,QAAQ9B,GAAiBkC,UAAWxiC,IAC1CA,EAAMg/B,UAAW,CAAK,IAGxBmD,EAAQC,QAAQ1B,GAAiB2B,SAAUriC,IACzCA,EAAM++B,UAAW,CAAI,IAEvBoD,EAAQC,QAAQ1B,GAAiB4B,WAAW,CAACtiC,EAAOmZ,KAClD,MAAM0oB,EAAU,IAAK1oB,EAAO0oB,SAE5B7hC,EAAM++B,UAAW,EACjBhB,GAAmB4D,UAAU3hC,EAAO6hC,EAAQz9B,KAAK,IAEnD+9B,EAAQC,QAAQ1B,GAAiB8B,UAAWxiC,IAC1CA,EAAM++B,UAAW,CAAK,GACtB,IAIN,OAAeoC,GAAwB,QAEhC,MAAM,+BAAEW,GAA8B,mBAAEF,GAAkB,iBAAEF,IAAqBP,GAAiBsB,QC9DzG,QAJoBC,EAAAA,GAAAA,IAAgB,CAClCnE,YAAaoE,KCaf,QAZcC,EAAAA,GAAAA,IAAe,CAC3BC,QAASC,GACTC,SCR6B,MDS7BC,WAAaC,GAIFA,MEPb,QAFqBC,EAAAA,EAAAA,eAAgC,M,qBCQrD,OAVA,WACE,OACErjC,EAAAA,cAAA,OAAK0B,MAAM,KAAKK,OAAO,KAAK0F,QAAQ,YAAYD,KAAK,OAAOD,MAAM,8BAChEvH,EAAAA,cAAA,QAAMmH,EAAE,khBAAkhBK,KAAK,YAC/hBxH,EAAAA,cAAA,QAAMmH,EAAE,ggBAAggBK,KAAK,YAC7gBxH,EAAAA,cAAA,QAAMmH,EAAE,g5CAAg5CK,KAAK,YAGn6C,ECeA,OAhBA,SAAyBxI,GAAsB,IAArB,QAAEskC,GAAgBtkC,EAC1C,OACEgB,EAAAA,cAAA,OAAKgB,UAAU,mBAAmBqB,QAASA,IAAMihC,KAC/CtjC,EAAAA,cAAA,OAAKgB,UAAU,SACbhB,EAAAA,cAACujC,GAAQ,MAAG,YAGdvjC,EAAAA,cAAA,OAAKgB,UAAU,WACbhB,EAAAA,cAAA,OAAKgB,UAAU,cACbhB,EAAAA,cAACwjC,GAAAA,EAAe,CAACC,KAAMC,GAAAA,QAKjC,E,WCvBO,MAAMC,GAAiBA,CAAC5zB,EAAamO,KAC1C,IACE,MAAMyf,EAAS,IAAI3tB,IAAID,GAEvB,IAAK,MAAMtK,KAAOyY,EACZA,EAAO0lB,eAAen+B,IACxBk4B,EAAOvV,aAAa/F,IAAI5c,EAAKyY,EAAOzY,IAIxC,OAAOk4B,EAAOn1B,UAChB,CAAE,MAAO3I,GAEP,OADAC,QAAQD,MAAM,eAAgBA,GACvBkQ,CACT,GCTI8zB,GAAa,CACjBC,WAAY,OACZC,WAAY,SAGRC,GAAwB,CAC5B,uCAAwC,wEACxC,sCAAuC,uEACvC,+CAAgD,iFAwClD,OA3BA,SAAuBhlC,GAA4C,IAA3C,SAAEC,EAAQ,aAAEglC,EAAY,KAAEv+B,GAAc1G,EAC9D,OALsB+Q,EAKHrK,EAJZ9G,OAAOD,KAAKqlC,IAAuBl4B,SAASiE,GAM/C/P,EAAAA,cAAA,KACE0F,KAAMi+B,GAAeK,GAAsBt+B,GAAOm+B,IAClD,cAAY,OACZ,kBAAgB,gBAChB,2BAA0Bl0B,KAAKC,UAAU4vB,GAAU,CAAE0E,kBAAmBD,KACxE95B,OAAO,UAENlL,GAKHe,EAAAA,cAAA,KACE0F,KAAMi+B,GAAej+B,EAAMm+B,IAC3B,kBAAgB,gBAChB,2BAA0Bl0B,KAAKC,UAAU4vB,GAAU,CAAE0E,kBAAmBD,KACxE95B,OAAO,UAENlL,GAzBe8Q,KA6BxB,ECjBA,OAxBA,SAAiB/Q,GAAoC,IAAnC,aAAEilC,EAAY,QAAE1jC,GAAgBvB,EAChD,GAAI,KAAOuB,EACT,OACEP,EAAAA,cAAA,UAEG,CACL,MAAMmkC,EAAa,CACjB1kB,EAAGjU,IAAA,IAAC,SAAEvM,EAAQ,KAAEyG,GAAM8F,EAAA,OACpBxL,EAAAA,cAACokC,GAAc,CACb1+B,KAAMA,EACNu+B,aAAcA,EACdhlC,SAAUA,GACV,GAIN,OACEe,EAAAA,cAACqkC,GAAAA,EAAa,CAACF,WAAYA,GACxB5jC,EAGP,CACF,ECAA,OAnBA,SAAevB,GAAiD,IAAhD,aAAEilC,EAAY,QAAE1jC,EAAO,KAAE8E,EAAI,MAAElF,GAAcnB,EAC3D,MAAMslC,EAAsBnO,KAAW,CACrC,4BAA4B,EAC5B,UAAa6H,GAAeuG,YAAcl/B,EAC1C,KAAQ24B,GAAe1E,OAASj0B,EAChC,WAAc44B,GAAgBqB,aAAen/B,EAC7C,UAAa89B,GAAgBuG,YAAcrkC,EAC3C,OAAU89B,GAAgBwG,SAAWtkC,IAGvC,OACEH,EAAAA,cAAA,OAAKgB,UAAWsjC,GACdtkC,EAAAA,cAAA,OAAKgB,UAAU,qCACZg9B,GAAeuG,YAAcl/B,EAAOrF,EAAAA,cAAC0kC,GAAQ,CAACnkC,QAASA,EAAS0jC,aAAcA,IAAmB1jC,GAI1G,EC1BO,MAAMokC,GAAiBC,GAAAA,GAAAA,YACjBC,GAAiBC,GAAAA,GAAAA,YC4B9B,OArBA,SAAiB9lC,GAA2B,IAA1B,aAAEilC,GAAqBjlC,EACvC,MAAMq/B,EAAawG,IAAgB1kC,GjBMJ4kC,EAAC5kC,EAAkB8jC,IAAyBzF,GAAoBwG,WAAW7kC,EAAO8jC,GiBNpEc,CAAkB5kC,EAAO8jC,IAAegB,GAAAA,SAErF,OACEjlC,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACklC,GAAM,CACLjB,aAAcA,EACd1jC,QAAS89B,EAAW2C,YACpB37B,KAAM24B,GAAe1E,KACrBn5B,MAAO89B,GAAgBuG,YAEzBxkC,EAAAA,cAACklC,GAAM,CACLjB,aAAcA,EACd1jC,QAAS89B,EAAW8D,mBAAqB,GACzC98B,KAAM24B,GAAeuG,UACrBpkC,MAAOk+B,EAAWl+B,QAI1B,EClBA,OATA,WACE,OACEH,EAAAA,cAAA,OAAKgB,UAAU,yDACbhB,EAAAA,cAACwjC,GAAAA,EAAe,CAACC,KAAM0B,GAAAA,IAAWnkC,UAAU,YAC5ChB,EAAAA,cAAA,QAAMgB,UAAU,QAAO,cAG7B,ECwBA,OA5BA,SAAuBhC,GAAmC,IAAlC,WAAEomC,EAAU,SAAEnmC,GAAiBD,EACrD,MAAMqmC,EAAWrlC,EAAAA,OAA6B,MACxCslC,EAAWtlC,EAAAA,OAA6B,MAiB9C,OAPAA,EAAAA,WAAgB,KACd,IAAKslC,EAASr7B,QAAS,OACvB,MAAMs7B,EAAiB,IAAIC,gBAAe,KATtCJ,EACFlgC,OAAOugC,SAAS,CAAElkC,IAAK8jC,EAASp7B,QAAS4L,aAAckD,SAAU,WAEjEssB,EAASp7B,QAASw7B,SAAS,CAAElkC,IAAK8jC,EAASp7B,QAAS4L,aAAckD,SAAU,UAMd,IAEhE,OADAwsB,EAAeG,QAAQJ,EAASr7B,SACzB,IAAMs7B,EAAenI,YAAY,GACvC,IAGDp9B,EAAAA,cAAA,OAAKgB,UAAU,yBAAyBmK,IAAKk6B,GAC3CrlC,EAAAA,cAAA,OAAKgB,UAAU,uCAAuCmK,IAAKm6B,GACxDrmC,GAIT,ECGA,OAnBA,SAAaD,GAAgC,IAA/B,WAAEomC,GAAa,GAAapmC,EACxC,MAAM2mC,EAAWhB,KACXiB,EAAgBf,GAAehG,GAAqBoG,GAAAA,SACpD9F,EAAW0F,GAAe9Z,GAAYka,GAAAA,UACtC,UAAEtE,GAAc3gC,EAAAA,WAAmC6lC,IAMzD,OAJA7lC,EAAAA,WAAgB,KACd2lC,EAASlF,GAAiB,CAAEE,cAAa,GACxC,IAGD3gC,EAAAA,cAAC8lC,GAAc,CAACV,WAAYA,GACxB,IAAMQ,EAAc/iC,QAAWs8B,EAAoI,KAAxHn/B,EAAAA,cAACklC,GAAM,CAAC3kC,QAAQ,gCAAgC8E,KAAM24B,GAAeuG,UAAWpkC,MAAO89B,GAAgB8H,aACnJ5G,EAAWn/B,EAAAA,cAACgmC,GAAO,MAAM,KACzBJ,EAAc3nC,KAAKgmC,GAAiBjkC,EAAAA,cAACimC,GAAQ,CAACxgC,IAAKw+B,EAAcA,aAAcA,MAGtF,E,iCCbA,OAZA,SAAwBjlC,GAA2B,IAA1B,aAAEggC,GAAqBhgC,EAC9C,MAAMknC,EAAgB/P,KAAW,CAC/B,2BAA2B,EAC3B,UAAa2H,GAAaqI,YAAcnH,EACxC,aAAgBlB,GAAa4D,eAAiB1C,IAGhD,OACEh/B,EAAAA,cAAA,OAAKgB,UAAWklC,GAAelmC,EAAAA,cAAA,YAAM,QAEzC,EC2EA,OA3EA,WACE,MAAM2lC,EAAWhB,KACXzF,EAAW2F,GAAe5F,GAAYgG,GAAAA,SACtCmB,EAAavB,GAAetF,GAAc0F,GAAAA,SAC1CjG,EAAe6F,GAAe9F,GAAiBkG,GAAAA,UAC/C,SAAEnE,EAAQ,UAAEH,EAAS,QAAEI,GAAY/gC,EAAAA,WAAmC6lC,KACrE7E,EAAaqF,GAAkBrmC,EAAAA,SAVnB,KAWZ6lB,EAASC,GAAc9lB,EAAAA,UAAe,IACtC0a,EAAU4rB,GAAetmC,EAAAA,UAAe,GACzCumC,EAAcvmC,EAAAA,YAAawG,GAE3BggC,EAAeA,KACd9rB,IACHirB,EAAS9E,GAAiB,CAAEC,WAAUH,YAAWI,UAASC,iBAC1DqF,EAlBe,IAoBXI,GAAAA,IACFF,EAAat8B,QAAQuyB,OAEzB,EAuBF,OAbAx8B,EAAAA,WAAgB,KACd8lB,EAAWoZ,GAAYkH,EAAW,GACjC,CAAClH,EAAUkH,IAEdpmC,EAAAA,WAAgB,KACdsmC,EAtCiB,KAuCEtF,GACd9B,GACAkH,GACAtI,GAAaqI,YAAcnH,EAC/B,GACA,CAACgC,EAAa9B,EAAUkH,EAAYpH,IAGrCh/B,EAAAA,cAAA,OAAKgB,UAAU,4BACbhB,EAAAA,cAAA,OAAKgB,UAAU,kCACbhB,EAAAA,cAAC0mC,GAAAA,EAAgB,CACf1lC,UAAU,eACVC,MAAO,CAAE6U,OAAQ,QACjB3K,IAAKo7B,EACL3rB,KAAM,EACN+rB,QAAS,EACT3iC,MAAOg9B,EACP93B,SAAW1K,GAAM6nC,EAAe7nC,EAAE2L,OAAOnG,OACzC6G,YAxDW,8BAyDXwpB,UAhCerqB,IAxBI,UAyBIA,EAAMvE,MACjCuE,EAAMiF,iBACNu3B,IACF,KA+BExmC,EAAAA,cAAA,OAAKgB,UAAU,qCACbhB,EAAAA,cAAC4mC,GAAe,CAAC5H,aAAcA,IAC/Bh/B,EAAAA,cAAC6mC,GAAAA,EAAM,CACLv/B,QAAQ,UACRjF,QAASA,IAAMmkC,IACfM,KAAK,KACLpsB,SAAUA,GAEV1a,EAAAA,cAACwjC,GAAAA,EAAe,CACdC,KAAM5d,EAAUsf,GAAAA,IAAYzB,GAAAA,IAC5B1iC,UAAW6kB,EAAU,eAAYrf,MAM7C,ECtCA,OAtCgBxH,IAA8C,IAA7C,SAAEC,GAAiBD,EAClC,MAAM2mC,EAAWhB,MACX,UAAEhE,GAAc3gC,EAAAA,WAAmC6lC,IAanDkB,EAAgBA,KACbC,EAAAA,GAAAA,IChC2BtkC,SAASsC,cAAe,iCAAiC6Y,aAAa,YDgCtEopB,cAAcC,OAAO1H,GAAU,CAC/D2H,QAvBe,0BAwBfxG,cACE,CACFyG,UAAWC,EACXC,aAAcC,EACdC,SAAUC,IAIRJ,EAAkBA,IAAM1B,EAAS5D,GAAmBjE,GAAaqI,YACjEoB,EAAqBA,IAAM5B,EAAS5D,GAAmBjE,GAAa4D,eACpE+F,EAAkBzF,GAxBOA,KAC7B,OAAQA,EAAQz8B,MACd,KAAKw4B,GAA8B2J,MACjC/B,EAAS1D,GAA+BD,EAAQz9B,OAChD,MACF,KAAKw5B,GAA8Bn/B,OACjC+mC,EAAS9D,GAAiBG,EAAQz9B,OAC7B,EAiB8BojC,CAAsBjI,GAAUsC,IAOzE,OALAhiC,EAAAA,WAAgB,KACd,MAAMmnC,EAAUJ,IAChB,MAAO,IAAMI,EAAQS,aAAa,GACjC,IAEK5nC,EAAAA,cAAAA,EAAAA,SAAA,KAAGf,EAAY,EEhBzB,OAvBA,SAAeD,GAAoB,IAAnB,MAAE6oC,GAAc7oC,EAK9B,OACEgB,EAAAA,cAAA,OAAKgB,UAAU,oBACbhB,EAAAA,cAAA,OAAKgB,UAAU,SACbhB,EAAAA,cAACujC,GAAQ,MAAG,YAGdvjC,EAAAA,cAAA,OAAKgB,UAAU,WACbhB,EAAAA,cAAC6mC,GAAAA,EAAM,CAACv/B,QAAQ,UAAUjF,QAASA,IAAMwlC,KACvC7nC,EAAAA,cAACwjC,GAAAA,EAAe,CAACC,KAAMqE,GAAAA,OAEzB9nC,EAAAA,cAAC6mC,GAAAA,EAAM,CAACv/B,QAAQ,UAAUjF,QAASA,KAbvC6C,OAAO6iC,KARO,QAQS,SAawC,GACzD/nC,EAAAA,cAACwjC,GAAAA,EAAe,CAACC,KAAMuE,GAAAA,QAKjC,ECVA,OAZA,SAAuBhpC,GAAoB,IAAnB,MAAE6oC,GAAc7oC,EACtC,OACEgB,EAAAA,cAAA,OAAKgB,UAAU,kBACbhB,EAAAA,cAACioC,GAAM,CAACJ,MAAOA,IAAMA,MACrB7nC,EAAAA,cAACkoC,GAAO,KACNloC,EAAAA,cAACmoC,GAAI,CAAC/C,YAAY,KAEpBplC,EAAAA,cAACooC,GAAM,MAGb,EC4BA,OA9BA,SAAyBppC,GAAqE,IAAlEqV,OAAO,SAAEysB,EAAQ,cAAEuH,EAAa,QAAEtH,EAAO,UAAEJ,IAAoB3hC,EACzF,MAAOspC,EAAWC,GAAgBvoC,EAAAA,UAAe,IAC1CwoC,EAAiBC,GAAsBzoC,EAAAA,UAAe,GAEvDskC,EAAsBnO,KAAW,CACrC,aAAa,EACb,UAAamS,EACb,UAAaA,IAUf,OAPAtoC,EAAAA,WAAgB,MAEV,IAAUsoC,GAAa,GAASE,GAClCC,GAAmB,EACrB,GACC,CAACH,IAGFtoC,EAAAA,cAAC0oC,GAAAA,GAAQ,CAACC,MAAOA,IACf3oC,EAAAA,cAAC6lC,GAAAA,SAAqB,CAAC7hC,MAAO,CAAE88B,WAAUuH,gBAAetH,UAASJ,cAChE3gC,EAAAA,cAAC4oC,GAAAA,GAAO,CAACxnC,SAAS,eAClBpB,EAAAA,cAAA,OAAKgB,UAAWsjC,GACdtkC,EAAAA,cAAC6oC,GAAgB,CAACvF,QAASA,IAAMiF,GAAa,KAC7CC,EAAkBxoC,EAAAA,cAAC8oC,GAAc,CAACjB,MAAOA,IAAMU,GAAa,KAAY,OAKnF,ECxCA,iBAA6B5M,GAAAA,GACvBtnB,YACF,OAAO1E,KAAKqK,MAAM4hB,KAAKr3B,KAAKyc,IAAI,SAClC,CAEAmb,UACEP,KAAKmN,MAAOC,EAAAA,EAAAA,YAAWpN,KAAK9S,SAC5B8S,KAAKmN,KAAKE,OAAOjpC,EAAAA,cAACkpC,GAAgB,CAAC70B,MAAOurB,GAAAA,QAAAA,UAAwBhE,KAAKvnB,MAAO,CAAEwrB,WAAW,EAAMC,kBAAkB,MACrH,CAEA1C,aACExB,KAAKmN,KAAKI,SACZ,GCjBF,iBAA6BxN,GAAAA,GAI3B5f,aAAavd,GACX0G,OAAO7F,SAASqG,KAAOk2B,KAAKwN,gBAAgBlkC,OAAO7F,SAASqG,KAAM,kBAAmBlH,EAAE2L,OAAOnG,MAChG,CAIAolC,gBAAgBr5B,EAAKs5B,EAAWC,GAC9B,MAAMC,EAAY,IAAIv5B,IAAID,GACpBmO,EAAS,IAAI4C,gBAAgByoB,EAAUxoB,QAK7C,OAHA7C,EAAOmE,IAAIgnB,EAAWC,GACtBC,EAAUxoB,OAAS7C,EAAO1V,WAEnB+gC,EAAU7jC,IACnB,GCeF,OAhBA,SAAiB1G,GAAqE,IAAlEqV,OAAO,SAAEysB,EAAQ,cAAEuH,EAAa,QAAEtH,EAAO,UAAEJ,IAAoB3hC,EACjF,OACEgB,EAAAA,cAAC0oC,GAAAA,GAAQ,CAACC,MAAOA,IACf3oC,EAAAA,cAAC6lC,GAAAA,SAAqB,CAAC7hC,MAAO,CAAE88B,WAAUuH,gBAAetH,UAASJ,cAChE3gC,EAAAA,cAAC4oC,GAAAA,GAAO,CAACxnC,SAAS,eAClBpB,EAAAA,cAAA,OAAKgB,UAAU,gBACbhB,EAAAA,cAACkoC,GAAO,KACNloC,EAAAA,cAACmoC,GAAI,CAAC/C,YAAY,KAEpBplC,EAAAA,cAACooC,GAAM,QAKjB,EC1BA,iBAA6BzM,GAAAA,GACvBtnB,YACF,OAAO1E,KAAKqK,MAAM4hB,KAAKr3B,KAAKyc,IAAI,SAClC,CAEAmb,UACEP,KAAKmN,MAAOC,EAAAA,EAAAA,YAAWpN,KAAK9S,SAC5B8S,KAAKmN,KAAKE,OAAOjpC,EAAAA,cAACwpC,GAAM,CAACn1B,MAAOurB,GAAAA,QAAAA,UAAwBhE,KAAKvnB,MAAO,CAAEwrB,WAAW,EAAMC,kBAAkB,MAC3G,CAEA1C,aACExB,KAAKmN,KAAKI,SACZ,GCZF5N,GAAYkO,SAAS,YAAaC,IAGlCnO,GAAYkO,SAAS,mBAAoBE,IAGzCpO,GAAYkO,SAAS,mBAAoBG,IAGzCrO,GAAYkO,SAAS,gBAAiBI,IAGtCtO,GAAYkO,SAAS,aAAcK,IAGnCvO,GAAYkO,SAAS,6BAA8BM,IAGnDxO,GAAYkO,SAAS,gBAAiBO,I,eCTtC9kC,OAAOif,MAAQA,GAAAA,GACfjf,OAAO2hC,OAASA,GAAAA,GAChB3hC,OAAO+kC,SAAWA,GAAAA,GAClB/kC,OAAOglC,SAAWA,GAAAA,GAClBhlC,OAAOilC,SAAWA,GAAAA,GAClBjlC,OAAOklC,MAAQA,GAAAA,GACfllC,OAAOmlC,UAAYA,GAAAA,GACnBnlC,OAAOS,QAAUA,GAAAA,GACjBT,OAAOolC,UAAYA,GAAAA,GACnBplC,OAAOqlC,IAAMA,GAAAA,GACbrlC,OAAOslC,MAAQA,GAAAA,GACftlC,OAAOmV,QAAUA,GAAAA,E,sBChBjB,MAAMowB,GAAQ/nC,SAASiV,iBAAiB,+CAClC+yB,GAAUhoC,SAASiV,iBAAiB,gCACpCgzB,GAAYjoC,SAASiV,iBAAiB,oBAMtCizB,GAAkB,GAGlBC,GAAc,IAOpB,SAASC,GAAStsC,EAAGusC,GACf7lC,OAAO8lC,WAAaH,KAIxBE,EAAKx7B,UAAUC,IAAI,WAEnB1O,YAAW,KACTiqC,EAAKx7B,UAAUE,OAAO,WACtBs7B,EAAKx7B,UAAUC,IAAI,OAAO,GACzB,GA4DL,SAAsBu7B,GACpB,MAAME,EAAaF,EAAKG,cAClBC,EAAOF,EAAWC,cAElBE,EAAcD,EAAK57B,UAAUrF,SAAS,WACtCmhC,EAAaD,EAAc,EAAE,GAAI,GAAK,CAAC,EAAG,GAC1CE,EAAgBF,EAAc,cAAgB,QAEpDG,EAAAA,GAAAA,IAAaJ,EAAMF,EAAY,CAC7BvqC,UAAW4qC,EACXE,UAAW,CACT,CACEhpC,KAAM,SACNipC,QAAS,CACP3c,OAAQuc,IAGZ,CACE7oC,KAAM,kBACNipC,QAAS,CACPvlC,QAAS0kC,OAKnB,CAnFEc,CAAaX,GACf,CAwFAN,GAAMr3B,SAAS6E,IACb,MAAM8yB,EAAO9yB,EAASjT,cAAc,kBAGpCiT,EAAS7N,iBAAiB,cAAe5L,IACvCssC,GAAStsC,EAAGusC,EAAK,IAInB9yB,EAAS7N,iBAAiB,cAAe5L,KA9F3C,SAAkBA,EAAGusC,GACf7lC,OAAO8lC,WAAaH,IAInBE,EAAKx7B,UAAUrF,SAAS,UAId,UAAX1L,EAAE+G,MAAoB/G,EAAE2L,OAAOwhC,QAAQ,yBAI3CZ,EAAKx7B,UAAUC,IAAI,WACnBu7B,EAAKx7B,UAAUE,OAAO,QAEtB3O,YAAW,KACTiqC,EAAKx7B,UAAUE,OAAO,UAAU,GA9CT,MAgD3B,CA4EIm8B,CAASptC,EAAGusC,EAAK,GACjB,IAGJL,GAAQt3B,SAASy4B,IACf,MAAMd,EAAOc,EAAOX,cAAclmC,cAAc,kBAGhD6mC,EAAOzhC,iBAAiB,SAAU5L,KAjFpC,SAAoBA,EAAGusC,GAGrB,GAFAvsC,EAAEyQ,iBAEE/J,OAAO8lC,YAAcH,GACvB,OAGoBE,EAAKG,cACMS,QAAQ,mCACTh0B,iBAAiB,kBAEpCvE,SAASkZ,IAChBA,IAAOye,GACTze,EAAG/c,UAAUE,OAAO,OACtB,IAGFs7B,EAAKx7B,UAAUs8B,OAAO,OACxB,CAgEIC,CAAWttC,EAAGusC,EAAK,GACnB,IAGJJ,GAAUv3B,SAAS24B,IACjBA,EAAS3hC,iBAAiB,oBAAoB,MAlEhD,SAAmB4hC,GACb9mC,OAAO8lC,YAAcH,IAIzBmB,EAAM54B,SAAS23B,IACbA,EAAKx7B,UAAUE,OAAO,OAAO,GAEjC,CA8DIw8B,CAHcF,EAASp0B,iBAAiB,kBAGxB,GAChB,I,kDC7JJukB,KAAEx5B,UAAUwpC,OAAM,WACd,IAAKxpC,SAASsC,cAAc,iBAAkB,OAE9C,MAAMmnC,EAASC,OAAO,8GAA+G,CACjIC,WAAY,eAEVC,EAAWH,EAAOG,WACxB,IAAIC,GAAgB,EACpB,MAAMC,EAAmB9pC,SAAS0M,eAAe,eAC3Cq9B,EAAOH,EAASpF,OAAO,OAAQ,CACjCjmC,MAAO,CACHo0B,KAAM,CAEFpvB,MAAO,UACP7D,SAAU,WAItBqqC,EAAKC,MAAM,iBACXD,EAAKrQ,GAAG,UAAU,SAASpyB,GACnBA,EAAMnK,MACN2sC,EAAiBl9B,YAActF,EAAMnK,MAAM8Q,QAE3C67B,EAAiBl9B,YAAc,GAEnCi9B,EAAgBviC,EAAM2iC,QAC1B,IAEA,MAAMC,EAAOlqC,SAAS0M,eAAe,gBAC/By9B,EAAeD,EAAK5nC,cAAc,2CAClC8nC,EAAqBD,EAAav9B,YAClCy9B,EAAoBF,EAAaG,QAAQC,mBACxCJ,EAAaG,QAAQC,YAiC5BL,EAAKxiC,iBAAiB,UA/BtB,SAASo8B,EAAax8B,GAClB,IAAKuiC,EAKD,OAJAviC,EAAMiF,sBACDu9B,EAAiBl9B,aAAuD,IAAxCk9B,EAAiBl9B,YAAYzM,SAC9D2pC,EAAiBl9B,YAAc,qCAKvCtF,EAAMiF,iBACN49B,EAAav9B,YAAcy9B,EAC3BF,EAAanyB,UAAW,EACxByxB,EAAOe,mBAAmBN,EAAKI,QAAQG,OAAQ,CAC3CC,eAAgB,CACZX,KAAMA,KAEX/oC,MAAK,SAAS2pC,GAEb,GADAR,EAAanyB,UAAW,EACpB2yB,EAAOxtC,MACP2sC,EAAiBl9B,YAAc+9B,EAAOxtC,MAAM8Q,QAC5Ck8B,EAAav9B,YAAcw9B,OACxB,GAAoC,cAAhCO,EAAOC,cAAczoB,OAAwB,CACzB+nB,EAAK5nC,cAAc,+CAC3BhB,MAAQqpC,EAAOC,cAAclvC,GAEhDwuC,EAAKviC,oBAAoB,SAAUm8B,GACnCqG,EAAaU,QACbV,EAAar8B,OACjB,CACJ,GACJ,IAGmB9N,SAAS0M,eAAe,gBAC1B,IAAIo+B,kBAAiB,SAASC,EAAeC,GAC1D,MAAM97B,EAAQg7B,EAAK5nC,cAAc,SACjC,IAAK4M,EAAO,OAEZ,MAAM+7B,EAAiB/7B,EAAMrC,UACvBq+B,EAAiB,kBACvB,IAAK,MAAMC,KAAYJ,EACfI,EAAS1jC,OAAOoF,UAAUrF,SAAS,wBACnCyjC,EAAen+B,IAAIo+B,GAEnBD,EAAel+B,OAAOm+B,GAE1B9tC,QAAQ+N,IAAI,OAASggC,EAASC,cAAgB,2BAEtD,IACSpI,QAAQhjC,SAAS0M,eAAe,gBAAiB,CAAE2+B,YAAY,GAC5E,IACA7R,KAAEx5B,UAAUwpC,OAAM,WACd,IAAKxpC,SAASsC,cAAc,oBACxB,OAEJ,MAAMgpC,EAAatrC,SAAS0M,eAAe,eACrC6+B,EAAaD,GAAYhB,SAASiB,YAAc,UAChDrB,EAAOlqC,SAAS0M,eAAe,gBAC/By9B,EAAeD,EAAK5nC,cAAc,2CAClC8nC,EAAqBD,EAAav9B,YAClCy9B,EAAoBF,EAAaG,QAAQC,YACzCd,EAASC,OAAO,8GAA+G,CACjIC,WAAY,eAEVZ,EAAU,CACdyC,aAActB,EAAKI,QAAQG,QAEvBb,EAAWH,EAAOG,SAASb,GAC3B0C,EAAsBzrC,SAAS0M,eAAe,kBAE9Cg/B,EAAiB9B,EAASpF,OAAO,UAAW,CAC1C3U,OAAQ,CACJ8b,eAAgB,CACZz/B,MAAsB,UAAfq/B,EAAyB,OAAS,YAMzDG,EAAe1B,MAAM,oBACrB0B,EAAehS,GAAG,UAAU,SAASpyB,GAC7BA,EAAMnK,MACNsuC,EAAoB7+B,YAActF,EAAMnK,MAAM8Q,QAE9Cw9B,EAAoB7+B,YAAc,EAE1C,IA0CAs9B,EAAKxiC,iBAAiB,UAxCtB,SAAsBJ,GAClBA,EAAMiF,iBAEN49B,EAAanyB,UAAW,EACxBmyB,EAAav9B,YAAcy9B,EAE3B,MAAMuB,EAAgB,CAClBC,WAAY3B,EAAKI,QAAQwB,WAGV,YAAfP,GACAK,EAAcG,oBAAsB,CAChCC,gBAAiB,CACb9/B,MAAOg+B,EAAKI,QAAQ2B,gBAI5BxC,EAAOyC,eAAe,CAClBtC,WACAgC,kBACD5qC,MAAK,SAAS2pC,GACbR,EAAanyB,UAAW,EACpB2yB,EAAOxtC,QACPsuC,EAAoB7+B,YAAc+9B,EAAOxtC,MAAM8Q,QAC/Ck8B,EAAav9B,YAAcw9B,EAEnC,KAEAX,EAAO0C,aAAa,CAChBvC,WACAgC,kBACD5qC,MAAK,SAAS2pC,GACbR,EAAanyB,UAAW,EACpB2yB,EAAOxtC,QACPsuC,EAAoB7+B,YAAc+9B,EAAOxtC,MAAM8Q,QAC/Ck8B,EAAav9B,YAAcw9B,EAEnC,GAER,GAEJ,I,mCCrKA,GAAeluC,OAAOkwC,OAAO,CAC3BC,qBAAsB,eACtBC,sBAAuB,WACvBC,eAAgB,cAChBC,uBAAwB,oBACxBC,0BAA2B,+DAG3BC,0BAA2B,oBAC3BC,sBAAuB,qBACvBC,yBAA0B,wBAC1BC,uBAAwB,sBACxBC,qBAAsB,oBACtBC,cAAe,aACfC,OAAQ,MACRC,wBAAyB,uBACzBC,6BAA8B,4BAC9BC,gBAAiB,WACjBC,mBAAoB,gBACpBC,mBAAoB,gBAEpBC,SAAU,CAERC,OAAQ,WACRC,UAAW,kBACXC,WAAY,mBAGZC,cAAe,yCACfC,WAAY,qBAGZC,WAAY,iBACZC,oBAAqB,yBACrBC,mBAAoB,wBACpBC,uBACE,gGACFC,mBAAoB,0BACpBC,mBAAoB,iBACpBC,oBAAqB,yBACrBC,oBAAqB,0BACrBC,yBAA0B,yCAC1BC,yBAA0B,8BAC1BC,qBAAsB,wBACtBC,uBAAwB,mBAGxBC,2BAA4B,gBAC5BC,+BAAgC,mBAChCC,kBAAmB,QACnBC,YAAa,WAGbC,eAAgB,OCrDb,SAASC,GAAmBC,GACjC,OAAOtpC,WAAWupC,iBAAiB/uC,SAASgvC,iBAAiBtvC,UAAYovC,CAC3E,CAEO,SAASG,GAA4BC,EAAK7D,GAC/C,MAAMjlB,EAAUpmB,SAAS2N,cAAcuhC,GAEvC,OADAhzC,OAAOuS,QAAQ48B,GAAY36B,SAAQpU,IAAA,IAAEyG,EAAKzB,GAAMhF,EAAA,OAAK8pB,EAAQ+oB,aAAapsC,EAAKzB,EAAM,IAC9E8kB,CACT,CAEO,SAASgpB,KACd,OAAO5sC,OAAO6sC,aAAervC,SAASgvC,gBAAgB54B,WAAa,CACrE,CCTA,MAAMk3B,GAAW,CACfgC,OACOpW,KAAKqW,2BACVrW,KAAKsW,yBACLtW,KAAKuW,sBACP,EAEAF,yBAEE,IADoBvvC,SAAS0M,eAAegjC,GAAAA,sBAC1B,OAAO,EAGzB,GADyB1vC,SAAS0M,eAAegjC,GAAAA,8BAE/C,MAAM,IAAI3zC,MAAM,6EAGlB,OAAO,CACT,EAGAyzC,yBACE,MAAMG,EAAc3vC,SAAS0M,eAAegjC,GAAAA,sBACtCE,EAAkB1W,KAAK2W,0BAC7B3W,KAAK4W,sBAAsBH,EAAaC,EAC1C,EAEAC,0BACE,MAAME,EAAUd,GAA4B,MAAO,CACjDvzC,GAAIg0C,GAAAA,SAAAA,aAGAM,EAASf,GAA4B,KAAM,CAC/CvzC,GAAIg0C,GAAAA,SAAAA,YAENM,EAAOpjC,YAAc8iC,GAAAA,SAAAA,YAErB,MAAMO,EAAchB,GAA4B,MAAO,CACrDvzC,GAAIg0C,GAAAA,SAAAA,SAGAQ,EAASjB,GAA4B,SAAU,CACnD7f,MAAO,GACPD,IAAKugB,GAAAA,SAAAA,cACL,oBAAqBA,GAAAA,SAAAA,aAOvB,OAJAK,EAAQliC,YAAYmiC,GACpBD,EAAQliC,YAAYoiC,GACpBF,EAAQliC,YAAYqiC,GAEbH,CACT,EAEAD,sBAAsBH,EAAaC,GACjC,MAAMO,EAAe96B,MAAM3X,KAAKiyC,EAAYS,qBAAqB,OAAOja,MACrEka,GAAOA,EAAGzjC,YAAY+I,SAAW+5B,GAAAA,4BAGhCS,EACFA,EAAaG,WAAWC,aAAaX,EAAiBO,GAEtDR,EAAY9hC,YAAY+hC,EAE5B,EAGAH,sBACE,MAAMe,EAAe,IAAI1F,kBAAkB2F,IACzC,MAAMC,EAAe1wC,SAASsC,cAAcotC,GAAAA,SAAAA,YACxCgB,IACFF,EAAa9V,aACbxB,KAAKyX,wBAAwBD,GAC7BxX,KAAK0X,qBAAqBF,GAC5B,IAGFF,EAAaxN,QAAQhjC,SAASgN,KAAM,CAClC6jC,WAAW,EACXC,SAAS,GAEb,EAEAH,wBAAwBD,GACL,IAAI5F,kBAAkB2F,IACrCA,EAAU//B,SAAQ,IAAMwoB,KAAK6X,sBAAqB,IAG3C/N,QAAQ0N,EAAc,CAC7BG,WAAW,EACXC,SAAS,GAEb,EAEAC,qBACuB/wC,SAASiV,iBAAiBy6B,GAAAA,SAAAA,wBAElCh/B,SAAS4E,IACpB4jB,KAAK8X,iBAAiB17B,GACtB4jB,KAAK+X,sBAAsB37B,EAAO,GAEtC,EAEA07B,iBAAiB17B,GACXA,EAAOzI,UAAUrF,SAASkoC,GAAAA,SAAAA,sBAC5Bp6B,EAAO1I,YAAc,GACrB0I,EAAO65B,aAAa,oBAAqB,UAChC75B,EAAOzI,UAAUrF,SAASkoC,GAAAA,SAAAA,sBACnCp6B,EAAOzI,UAAUE,OAAO2iC,GAAAA,SAAAA,oBACxBp6B,EAAO1I,YAAc8iC,GAAAA,SAAAA,kBACrBp6B,EAAO65B,aAAa,oBAAqB,QAE7C,EAEA8B,sBAAsB37B,GACpB,MAAM47B,EAAc57B,EAAO2zB,QAAQyG,GAAAA,SAAAA,oBACnC,IAAKwB,EAAa,OAGlB,MAAMz6B,EAAWy6B,EAAY5uC,cAAc,YAE3C,GADqBmU,GAAYA,EAASnV,MAAMqU,OAAOxV,OAAS,EAC9C,OAElB,MAAMgxC,EAAcD,EAAY5uC,cAAe,SAAQotC,GAAAA,SAAAA,yBACvD,IAAKyB,EAAa,OAElB77B,EAAO/W,MAAMG,SAAW,SACxB,MAAM0yC,EAAcD,EAAYC,YAC5BA,IAAgB97B,GAClB67B,EAAYb,WAAWC,aAAaj7B,EAAQ87B,EAEhD,EAEAR,qBAAqBF,GACF,IAAI5F,kBAAiB,KAClB9qC,SAASiV,iBAAiBy6B,GAAAA,SAAAA,oBAClCh/B,SAAS+F,IACbA,EAAS0E,aAAa,iBAAmBu0B,GAAAA,SAAAA,4BAC3CxW,KAAKmY,cAAc56B,EACrB,GACA,IAGKusB,QAAQ0N,EAAc,CAC7BG,WAAW,EACXC,SAAS,GAEb,EAEAO,cAAc56B,GACZyiB,KAAKoY,cAAc76B,GACnByiB,KAAKqY,uBAAuB96B,GAC5ByiB,KAAKsY,yBAAyB/6B,EAChC,EAEA66B,cAAc76B,GACZva,OAAOu1C,OAAOh7B,EAASlY,MAAO,CAC5Bc,OAAQ,OACRuT,WAAY,IACZC,cAAe,IACfwX,WAAY,IACZzqB,WAAY,QAEd6W,EAAS04B,aAAa,cAAeO,GAAAA,SAAAA,gCACrCj5B,EAAS04B,aAAa,YAAaO,GAAAA,SAAAA,eACrC,EAEA6B,uBAAuB96B,GACrB,MAAMi7B,EAAiBj7B,EAAS+xB,cAAcA,cACxC2B,EAAeuH,GAAgBpvC,cAAcotC,GAAAA,SAAAA,qBAC7CiC,EAAoBD,GAAgBpvC,cAAcotC,GAAAA,SAAAA,0BAExD,GAAIvF,IAAiBuH,EAAepvC,cAAe,IAAGotC,GAAAA,SAAAA,4BAAgD,CACpG,MAAMkC,EAAY1Y,KAAK2Y,wBAAwB1H,EAAcwH,GAC7Dl7B,EAAS+xB,cAAcsJ,MAAMF,GAC7B1Y,KAAK6Y,6BAA6Bt7B,EAAU0zB,EAAcwH,EAC5D,CACF,EAEAE,wBAAwB1H,EAAcwH,GACpC,MAAMC,EAAY5xC,SAAS2N,cAAc,OACzCikC,EAAUtzC,UAAYoxC,GAAAA,SAAAA,yBAEtB,MAAMsC,EAAgBhyC,SAAS2N,cAAc,OAK7C,GAJAqkC,EAAc1zC,UAAYoxC,GAAAA,SAAAA,qBAC1BvF,EAAamG,WAAWC,aAAayB,EAAe7H,GACpD6H,EAAcnkC,YAAYs8B,GAEtBwH,EAAmB,CACrB,MAAMM,EAAkBjyC,SAAS2N,cAAc,OAC/CskC,EAAgB3zC,UAAYoxC,GAAAA,SAAAA,uBAC5BiC,EAAkBrB,WAAWC,aAAa0B,EAAiBN,GAC3DM,EAAgBpkC,YAAY8jC,GAC5BC,EAAU/jC,YAAYokC,EACxB,CAIA,OAFAL,EAAU/jC,YAAYmkC,GAEfJ,CACT,EAEAG,6BAA6Bt7B,EAAU0zB,EAAcwH,GACnD,MAAMO,EAAUz7B,EAASnV,MAAMqU,OAAOxV,OAAS,EAC/C+4B,KAAKiZ,yBAAyBhI,EAAcwH,EAAmBO,EACjE,EAEAV,yBAAyB/6B,GACvBA,EAAS/O,iBAAiB,SAAS,KACjC+O,EAASlY,MAAMc,OAAS,OACxBoX,EAASlY,MAAMc,OAAU,GAAEoX,EAAStD,iBAEpC,MAAM++B,EAAUz7B,EAASnV,MAAMqU,OAAOxV,OAAS,EACzCuxC,EAAiBj7B,EAAS+xB,cAAcA,cACxC2B,EAAeuH,GAAgBpvC,cAAcotC,GAAAA,SAAAA,qBAC7CiC,EAAoBD,GAAgBpvC,cAAcotC,GAAAA,SAAAA,0BAExDxW,KAAKiZ,yBAAyBhI,EAAcwH,EAAmBO,EAAQ,GAE3E,EAEAC,yBAAyBhI,EAAcwH,EAAmBO,GACxD,MAAME,EAAmB,CACvB/yC,OAAQ6yC,EAAU,OAAS,IAC3BjuC,UAAWiuC,EAAU,MAAQ,KAG3B/H,IACFjuC,OAAOu1C,OAAOtH,EAAa3B,cAAcjqC,MAAO,IAC3C6zC,EACHnlB,WAAY,mDAEdkd,EAAa5rC,MAAMwQ,QAAUmjC,EAAU,IAAM,IAC7C/H,EAAa5rC,MAAM0uB,WAAa,yBAG9B0kB,IACFz1C,OAAOu1C,OAAOE,EAAkBnJ,cAAcjqC,MAAO,IAChD6zC,EACHnlB,WAAY,mDAEd0kB,EAAkBpzC,MAAMwQ,QAAUmjC,EAAU,IAAM,IAClDP,EAAkBpzC,MAAM0uB,WAAa,wBAEzC,GAGFuM,EAAEx5B,UAAUwpC,MAAM8D,GAASgC,KAAKzU,KAAKyS,KCtPtB,MAAM+E,GACnBC,YAAYC,EAAOC,GAA0B,IAAfpmB,EAAM7mB,UAAApF,OAAA,QAAA2D,IAAAyB,UAAA,GAAAA,UAAA,GAAG,IACrC2zB,KAAKqZ,MAAQA,EACbrZ,KAAKsZ,UAAYA,EACjBtZ,KAAK9M,OAASA,EACd8M,KAAKuZ,IAAM,KACXvZ,KAAKr7B,QAAU,KACfq7B,KAAKwZ,SAAW,GAChBxZ,KAAKyZ,SAAW,CAAC,EAEjBzZ,KAAK0Z,kBAAkB5xC,MAAK,IAAMk4B,KAAKoW,QACzC,CAEAsD,kBACE,OAAO,IAAIC,SAAS12C,IAClB,MAAM22C,EAAgBA,KACpB5Z,KAAKuZ,IAAMzyC,SAAS0M,eAAewsB,KAAKqZ,OACxCrZ,KAAKr7B,QAAUmC,SAAS0M,eAAewsB,KAAKsZ,WAExCtZ,KAAKuZ,KAAOvZ,KAAKr7B,SAAWq7B,KAAKuZ,IAAIl2C,SAAS4D,OAAS,EACzDhE,IAEA42C,sBAAsBD,EACxB,EAG0B,YAAxB9yC,SAASgzC,WACXhzC,SAAS0H,iBAAiB,mBAAoBorC,GAE9CA,GACF,GAEJ,CAEAxD,OACOpW,KAAKuZ,KAAQvZ,KAAKr7B,SAKvBq7B,KAAK+Z,eACL/Z,KAAKga,oBACLha,KAAKia,mBANH/1C,QAAQD,MAAM,+CAOlB,CAEA81C,eACE,MAAMG,EAAc/9B,MAAM3X,KAAKw7B,KAAKr7B,QAAQoX,iBAAiB,2BAA2B5L,QACrFgqC,IAAaA,EAAQC,aAAa5D,GAAAA,sBAErCxW,KAAKwZ,SAAWU,EAAYt2B,MAAK,CAACC,EAAGC,IAC5BD,EAAE/G,wBAAwBnX,IAAMme,EAAEhH,wBAAwBnX,MAEnEq6B,KAAKqa,YAAc,IAAIC,IAAIta,KAAKwZ,SAASn3C,KAAI,CAACk4C,EAAG3jC,IAAU,CAAC2jC,EAAE/3C,GAAI,CAAE23C,QAASI,EAAG3jC,YAClF,CAEAojC,oBACEha,KAAKyZ,SAAW,CAAC,EACHzZ,KAAKuZ,IAAIx9B,iBAAiB,aAClCvE,SAAS5N,IACb,MAAM4wC,EAAW5wC,EAAKqY,aAAa,QAAQmf,UAAU,GAC/CqZ,EAAa7wC,EAAKqY,aAAa,8BACrC+d,KAAKyZ,SAASe,GAAY,CAAE5wC,OAAM6wC,WAAYzyC,SAASyyC,EAAY,IAAK,GAE5E,CAEAC,oBAAoBxtB,GAClB,MAAMytB,EAAaztB,EAAQ0tB,uBAAuB,YAClDz+B,MAAM3X,KAAKm2C,GAAYnjC,SAAS5N,IAC9B,MAAM4wC,EAAW5wC,EAAKqY,aAAa,QAAQmf,UAAU,GACrDpB,KAAKyZ,SAASe,GAAY5wC,CAAI,IAGhC,MAAMixC,EAAW3tB,EAAQgqB,qBAAqB,MAC9C/6B,MAAM3X,KAAKq2C,GAAUrjC,SAASsjC,IAC5B9a,KAAK0a,oBAAoBI,EAAG,GAEhC,CAEAb,kBACE3wC,OAAOkF,iBAAiB,SAAUwxB,KAAK+a,SAASpZ,KAAK3B,MACvD,CAEA+a,WACE,MAAMC,EAAiB9E,KAA6BlW,KAAK9M,OACzD,IAAI+nB,EAAsBjb,KAAKwZ,SAAS/oB,WAAW0pB,GAAYA,EAAQe,UAAYF,IAAkB,GACxE,IAAzBC,IAA4BA,EAAsBjb,KAAKwZ,SAASvyC,OAAS,GAE7E+4B,KAAKmb,kBAAkBF,EACzB,CAEAE,kBAAkBF,GAGhB,GAFAj4C,OAAOoK,OAAO4yB,KAAKyZ,UAAUjiC,SAAQpU,IAAA,IAAC,KAAEwG,GAAMxG,EAAA,OAAKwG,EAAK+J,UAAUE,OAAO,SAAS,IAE9EonC,GAAuB,EAAG,CAC5B,MAAMG,EAAiB,IAAIC,IAC3B,IAAIzkC,EAAQqkC,EAEZ,KAAOrkC,GAAS,GAAG,CACjB,MAAMujC,EAAUna,KAAKwZ,SAAS5iC,GAC9BwkC,EAAexnC,IAAIumC,EAAQ33C,IAG3B,MAAM84C,EAAetzC,SAASmyC,EAAQoB,QAAQzvC,OAAO,IAErD,IADA8K,IACOA,GAAS,GAAG,CAEjB,GADoB5O,SAASg4B,KAAKwZ,SAAS5iC,GAAO2kC,QAAQzvC,OAAO,IAC/CwvC,EAAc,MAChC1kC,GACF,CACF,CAEAwkC,EAAe5jC,SAASgkC,IACtB,MAAMC,EAAUzb,KAAKyZ,SAAS+B,GAC1BC,GACFA,EAAQ7xC,KAAK+J,UAAUC,IAAI,SAC7B,GAEJ,CACF,ECpHF,MAAM8nC,GAAM,CACVtF,OACE,MAAMuF,EAAM70C,SAASsC,cAAe,OAAMotC,GAAAA,8BACpCC,EAAc3vC,SAAS0M,eAAegjC,GAAAA,sBACvCmF,GAAQlF,IAEbzW,KAAK4b,sBACL5b,KAAK6b,kBACL7b,KAAK8b,kBACL9b,KAAK+b,wBACL/b,KAAKgc,sBACLhc,KAAKic,2BACLjc,KAAKkc,4BAEL5yC,OAAOkF,iBAAiB,UAAU,KAChCwxB,KAAK+b,wBACL/b,KAAK6b,gBAAgBF,GACrB3b,KAAKgc,qBAAqB,IAE9B,EAEAE,4BACE,MAAMhpB,EAAS8M,KAAK6K,WAAkC,GAArBvhC,OAAO6yC,YAAoB,IAC5D,IAAIhD,GAAgB3C,GAAAA,OAAkBA,GAAAA,qBAAgCtjB,EACxE,EAEA2X,WACE,MAAMuR,EAAmBt1C,SAAS0M,eAAegjC,GAAAA,uBACjD,MAA6D,SAAtDltC,OAAOusC,iBAAiBuG,GAAkBpxC,OACnD,EAEA+wC,wBACE,MAAMJ,EAAM70C,SAAS0M,eAAegjC,GAAAA,QAEpC,GAAIxW,KAAK6K,WAAY,CACE/jC,SAAS0M,eAAegjC,GAAAA,sBAChC7hC,YAAYgnC,EAC3B,KAAO,CACuB70C,SAAS0M,eAAegjC,GAAAA,0BAChC7hC,YAAYgnC,EAClC,CACF,EAEAC,sBACE,MACMlzC,EADc5B,SAAS0M,eAAegjC,GAAAA,sBAChBz6B,iBAAiB,0BAS7CrT,EAAQ8O,SAASs/B,IACf,GAAIA,EAAOsD,aAAa5D,GAAAA,oBAA+B,OAEvD,MAAM6F,EAAUvF,EAAOpjC,YAAY+I,OAC7B6/B,EAAQxF,EAAO70B,aAAau0B,GAAAA,qBAAoD6F,EAVnF9nC,cACA9P,QAAQ,gBAAiB,IACzBgY,OACAhY,QAAQ,OAAQ,KAChBA,QAAQ,MAAO,KAQbqyC,EAAOt0C,KACVs0C,EAAOt0C,GAAK85C,EACd,GAEJ,EAEAT,kBACE,MAAMF,EAAM70C,SAASsC,cAAe,OAAMotC,GAAAA,8BACpC+F,EAASz1C,SAAS0M,eAAegjC,GAAAA,gBACjCgG,EAAoB11C,SAAS0M,eAAegjC,GAAAA,wBAC5CiG,EAAY31C,SAAS0M,eAAegjC,GAAAA,eAE1C,GAAI+F,GAAUZ,GAAOa,GAAqBC,EAAW,CACnD,MAAMC,EAAepzC,OAAOqzC,QAAUJ,EAAOK,aAAeL,EAAOK,aAAejH,GAAmB,GAC/FkH,EAAeL,EAAkBI,aACjCE,EAAkBL,EAAUG,aAI5B7sC,EAHezG,OAAO6yC,YAGKO,EAAeG,EAAeC,EAF/CnH,GAAmB,GAGnCgG,EAAIt2C,MAAM0K,UAAa,GAAEA,KAC3B,CACF,EAEA+rC,kBACE,MACMiB,EADcj2C,SAAS0M,eAAegjC,GAAAA,sBACbptC,cAAcotC,GAAAA,uBAC7C,IAAKuG,EAAY,OAEjB,MAAMC,EAAgBjH,GAA4B,MAAO,CACvDvzC,GAAIg0C,GAAAA,6BACJ5nB,MAAO,cAGHquB,EAAqBlH,GAA4B,MAAO,CAC5DvzC,GAAIg0C,GAAAA,0BAGA0G,EAAiBnH,GAA4B,SAAU,CAC3DnnB,MAAO,wCACPjlB,KAAM,SACNnH,GAAIg0C,GAAAA,uBACJ,iBAAkB,WAClB,qBAAsB,OACtB,gBAAiB,UAEnB0G,EAAexpC,YAAc8iC,GAAAA,gBAC7BxW,KAAKmd,0BAA4B7zC,OAAOusC,iBAAiBqH,GAAgBE,iBAAiB,iBAE1F,MAAMC,EAAetH,GAA4B,MAAO,CACtDvzC,GAAIg0C,GAAAA,qBACJ5nB,MAAO,sBACP,kBAAmB4nB,GAAAA,yBAGrByG,EAAmBtoC,YAAYuoC,GAC/BD,EAAmBtoC,YAAY0oC,GAC/BL,EAAcroC,YAAYsoC,GAC1BF,EAAW3F,WAAWC,aAAa2F,EAAeD,EAAW7E,YAC/D,EAEA8D,sBACE,MAAMvF,EAAc3vC,SAAS0M,eAAegjC,GAAAA,sBACtC8G,EAAmBx2C,SAAS0M,eAAegjC,GAAAA,8BAC3C+G,EAAqBz2C,SAAS0M,eAAegjC,GAAAA,yBAC7C0G,EAAiBp2C,SAAS0M,eAAegjC,GAAAA,wBACzCgH,EACJD,EAAmBX,aAAetwC,WAAWhD,OAAOusC,iBAAiB0H,GAAoBzyC,cAC3Fk1B,KAAKyd,qBACL,MAAMC,EAAsB1d,KAAK2d,aAEjCr0C,OAAOkF,iBAAiB,UAAU,KAChC,MACMovC,EADiB1H,MACWwH,EAClCJ,EAAiB3pC,UAAUs8B,OAAO,QAAS2N,GAC3CV,EAAe73C,MAAMkF,aAAeqzC,EAAU,IAAM,KACpDnH,EAAYpxC,MAAMqU,WAAakkC,EAAW,GAAEJ,MAAyB,GAAG,GAE5E,EAEAC,qBACE,MAAMV,EAAaj2C,SAASsC,cAAcotC,GAAAA,uBAC1C,GAAIuG,EAAY,CACd,MAAMc,EAAOd,EAAWjgC,wBAClBghC,EAASx0C,OAAOusC,iBAAiBkH,GACjCjyC,EAAewB,WAAWwxC,EAAOhzC,cACvCk1B,KAAK2d,aAAeE,EAAKhzC,OAASC,EAAeorC,IACnD,CACF,EAEA+F,2BACiBn1C,SAASsC,cAAe,OAAMotC,GAAAA,8BACtChoC,iBAAiB,SAAUJ,IAChC,GAA6B,MAAzBA,EAAMG,OAAOgtC,QAAiB,CAChCntC,EAAMiF,iBACN,MAAMqtB,EAAUJ,EAAElyB,EAAMG,OAAOwvC,MACzBC,EAAY1d,EAAG,IAAGkW,GAAAA,gCAA0CyH,eAAiB,EAEnF3d,EAAEh3B,QAAQ4T,UAAUwjB,EAAQxN,SAASvtB,IAAMq4C,EAC7C,IAEJ,GAGF1d,EAAEx5B,UAAUwpC,MAAMoL,GAAItF,KAAKzU,KAAK+Z,KCjJhCwC,IAAAA,QACAC,EAAAA,IAgBAr3C,SAAS0H,iBAAiB,oBAAoB,KAC5C,MAAM4vC,EAAsBt3C,SAAS0M,eAAe,mCAC9C6qC,EAAoBv3C,SAAS0M,eAAe,iCAC5C8qC,EAAmBx3C,SAAS0M,eAAe,2BAC3C+qC,EAAkBz3C,SAAS0M,eAAe,gCAEhD,GAAI4qC,EAAqB,EACVhR,EAAAA,EAAAA,YAAWgR,GACnB/Q,OAAOjpC,EAAAA,cAAC0oB,GAAuB,MACtC,CAEA,GAAIuxB,EAAmB,EACRjR,EAAAA,EAAAA,YAAWiR,GACnBhR,OAAOjpC,EAAAA,cAACy4B,GAAqB,MACpC,CAEA,GAAIyhB,EAAkB,EACPlR,EAAAA,EAAAA,YAAWkR,GACnBjR,OAAOjpC,EAAAA,cAACo6C,GAAkB,MACjC,CAEA,GAAID,EAAiB,EACNnR,EAAAA,EAAAA,YAAWmR,GACnBlR,OAAOjpC,EAAAA,cAACo7B,GAAmB,MAClC,I,+CC3DF,GAAe4L,E,QAAAA,MC+EftkC,SAAS0H,iBAAiB,oBAAoB,WAC5C,MAAMiwC,EAAgB33C,SAAS0M,eAAe,sBAC9C,IAAKirC,EACH,OAGF,MAAMlzB,EAASkzB,EAAcx8B,aAAa,8BACrCsJ,GAILmzB,EAASrT,cAAcC,OACrB,CAAEC,QAAS,2BAA4BjgB,QAASC,GAChD,CACEigB,YACE,EAGFE,eACE,EAGF3E,WACE,EAGF6E,SAASjjC,GACa,iBAAhBA,EAAKsgB,OAtGjB,WAEE,MAAM01B,EAAgB73C,SAASsC,cAAc,yBACzCu1C,IACFA,EAAct5C,MAAM2F,QAAU,QAIhC,MAAM4zC,EAAa93C,SAASsC,cAAc,sBACtCw1C,IACFA,EAAWlrC,YAAc,WACzBkrC,EAAWjrC,UAAUE,OAAO,iBAC5B+qC,EAAWjrC,UAAUC,IAAI,eACzBgrC,EAAW9/B,UAAW,GAIxB,MAAM+/B,EAAgB/3C,SAASiV,iBAAiB,KAChD,IAAI+iC,GAAc,EAElBD,EAAcrnC,SAAQunC,KAEhBA,EAAErrC,YAAYxD,SAAS,eAAiB6uC,EAAErrC,YAAYxD,SAAS,WAAa6uC,EAAErrC,YAAYxD,SAAS,iBAChG4uC,EAOHC,EAAE15C,MAAM2F,QAAU,QALlB+zC,EAAErrC,YAAc,iCAChBqrC,EAAEprC,UAAUC,IAAI,wBAChBkrC,GAAc,GAKlB,GAEJ,CAqEUE,GACyB,kBAAhBr2C,EAAKsgB,QAjExB,WAEE,MAAM01B,EAAgB73C,SAASsC,cAAc,yBACzCu1C,IACFA,EAAct5C,MAAM2F,QAAU,QAIhC,MAAM4zC,EAAa93C,SAASsC,cAAc,sBACtCw1C,IACFA,EAAWlrC,YAAc,WACzBkrC,EAAWjrC,UAAUE,OAAO,iBAC5B+qC,EAAWjrC,UAAUC,IAAI,eACzBgrC,EAAW9/B,UAAW,GAIxB,MAAM+/B,EAAgB/3C,SAASiV,iBAAiB,KAChD,IAAI+iC,GAAc,EAElBD,EAAcrnC,SAAQunC,KAEhBA,EAAErrC,YAAYxD,SAAS,eAAiB6uC,EAAErrC,YAAYxD,SAAS,WAAa6uC,EAAErrC,YAAYxD,SAAS,iBAChG4uC,EAOHC,EAAE15C,MAAM2F,QAAU,QALlB+zC,EAAErrC,YAAc,0DAChBqrC,EAAEprC,UAAUC,IAAI,wBAChBkrC,GAAc,GAKlB,GAEJ,CAgCUG,EAEJ,GAGN,G,kBCtHA,MAAM55C,EAAQyB,SAAS2N,cAAc,SACrCpP,EAAMqO,YAAe,uEAKrB5M,SAASsvB,KAAKzhB,YAAYtP,GAE1ByB,SAAS0H,iBAAiB,oBAAoB,WAC5CtK,QAAQ+N,IAAI,+BAGZ,MAAMitC,EAAkBp4C,SAASiV,iBAAiB,2CAClD7X,QAAQ+N,IAAI,uBAAwBitC,EAAgBj4C,QAEpDi4C,EAAgB1nC,SAAQtL,IACtBA,EAAMyH,UAAUC,IAAI,2BAEhB1H,EAAMkuC,aAAa,cACrBluC,EAAMklC,QAAQ+N,aAAc,EAC5BjzC,EAAMkzC,gBAAgB,aAExBl7C,QAAQ+N,IAAI,+BAAgC/F,EAAM,IAIpD,MAAMmzC,EAAav4C,SAASiV,iBAAiB,0BAC7C7X,QAAQ+N,IAAI,oBAAqBotC,EAAWp4C,QAE5Co4C,EAAW7nC,SAAQ8nC,IAEjB,MAAMC,EAAeD,EAASvP,QAAQ,eAAeyP,oBAAoBp2C,cAAc,2CACvFlF,QAAQ+N,IAAI,uCAAwCqtC,EAAS98C,GAAI+8C,GAE7DA,IAEED,EAAShvC,UACXivC,EAAa5rC,UAAUE,OAAO,2BAE1B0rC,EAAanO,QAAQ+N,aACvBI,EAAatJ,aAAa,WAAY,YAExC/xC,QAAQ+N,IAAI,sCAAuCqtC,EAAS98C,KAI9D88C,EAAS9wC,iBAAiB,UAAU,WAClCtK,QAAQ+N,IAAI,oBAAqB+tB,KAAKx9B,GAAIw9B,KAAK1vB,SAC3C0vB,KAAK1vB,SACPivC,EAAa5rC,UAAUE,OAAO,2BAE1B0rC,EAAanO,QAAQ+N,aACvBI,EAAatJ,aAAa,WAAY,cAGxCsJ,EAAa5rC,UAAUC,IAAI,2BAEvB2rC,EAAanF,aAAa,aAC5BmF,EAAaH,gBAAgB,YAGnC,IACF,GAEJ,G,kBC/DA5wC,iBAAiB,4BAA4BJ,IACzC,MAAM,OAAEG,EAAM,OAAEkxC,GAAWrxC,GACrB,GAAE5L,EAAE,KAAE6d,GAASo/B,EACrBlxC,EAAOmxC,mBAAmB,cAAgB,gCACjBl9C,2FACWA,4GACM6d,EAAKzZ,8BAE/C,IAGJ4H,iBAAiB,uBAAuBJ,IACpC,MAAM,GAAE5L,GAAO4L,EAAMqxC,OACL34C,SAAS0M,eAAgB,iBAAgBhR,KACjDmR,UAAUE,OAAO,yBAAyB,IAGtDrF,iBAAiB,0BAA0BJ,IACvC,MAAM,GAAE5L,EAAE,SAAEm9C,GAAavxC,EAAMqxC,OACP34C,SAAS0M,eAAgB,0BAAyBhR,KAC1D6C,MAAMS,MAAS,GAAE65C,IAAW,IAGhDnxC,iBAAiB,uBAAuBJ,IACpCA,EAAMiF,iBACN,MAAM,GAAE7Q,EAAE,MAAEyB,GAAUmK,EAAMqxC,OACtBvyB,EAAUpmB,SAAS0M,eAAgB,iBAAgBhR,KACzD0qB,EAAQvZ,UAAUC,IAAI,wBACtBsZ,EAAQ+oB,aAAa,QAAShyC,GAE9B,MACM27C,EADat2C,OAAO7F,SAAS8F,SAAS2G,SAAS,eAEjD,6HACA,wMACE2vC,EAAoB/4C,SAASsC,cAAc,4CACjDy2C,EAAkBH,mBAAmB,WAChC,qKAAoKE,YACzKC,EAAkBhsC,QAAQ,IAG9BrF,iBAAiB,qBAAqBJ,IAClC,MAAM,GAAE5L,GAAO4L,EAAMqxC,OACL34C,SAAS0M,eAAgB,iBAAgBhR,KACjDmR,UAAUC,IAAI,0BAA0B,G,kBC7CpD9M,SAAS0H,iBAAiB,oBAAoB,WAC1C,GAAI1H,SAAS0M,eAAe,mBAAoB,CAC5C,MAAMssC,EAAQ,IAAIC,MAAM,mBAAoB,CACxCC,MAAO,OACPC,QAAS,CACLC,QAAS,CAAExH,UAAW,eAI9B5xC,SAAS0M,eAAe,QAAQ2sC,QAAU,WACtCL,EAAMj5B,QAAQu5B,MAClB,EACAt5C,SAAS0M,eAAe,QAAQ2sC,QAAU,WACtCL,EAAMj5B,QAAQw5B,MAClB,EAEA,MAAMC,EAAex5C,SAASsC,cAAc,mBAAmBhB,MAC3Dk4C,IACAR,EAAM3S,KAAKoT,UAAYD,GAG3Bx5C,SAAS0M,eAAe,mBAAmBhF,iBAAiB,SAAS,SAAS5L,GAC1EA,EAAEyQ,iBAEF,MAAMmtC,EAAe15C,SAAS0M,eAAe,sBACvCitC,EAAa35C,SAAS0M,eAAe,oBAErC7O,EAAUm7C,EAAM3S,KAAKoT,UACrBvP,EAAOlqC,SAASsC,cAAc,gBAC9BgK,EAAa49B,EAAKtzB,OAAOoI,MAAM,iCAAiC,GAEtEhiB,MAAO,kCAAiCsP,IAAc,CAClDjK,OAAQ,OACRT,QAAS,CACL,eAAgB,mBAChB,eAAgB5B,SAASsC,cAAc,uBAAuBzE,SAElEmP,KAAMC,KAAKC,UAAU,CAAErP,QAASA,MAEnCmD,MAAKjE,GAAYA,EAASG,SAC1B8D,MAAKa,IACkB,YAAhBA,EAAKsgB,QACLu3B,EAAan7C,MAAM2F,QAAU,QAC7B9F,YAAW,KACTs7C,EAAan7C,MAAM2F,QAAU,MAAM,GAClC,OAEHy1C,EAAWp7C,MAAM2F,QAAU,QAC3B9F,YAAW,KACTu7C,EAAWp7C,MAAM2F,QAAU,MAAM,GAChC,KACP,IAEHkX,OAAMje,IACHC,QAAQD,MAAM,SAAUA,GAExB,MAAMy8C,EAAa55C,SAAS0M,eAAe,eAC3CktC,EAAWhtC,YAAc,gBACzBgtC,EAAW/sC,UAAUE,OAAO,gBAC5B6sC,EAAW/sC,UAAUC,IAAI,cAAc,GAE/C,IAEA9M,SAAS0M,eAAe,kBAAkBhF,iBAAiB,SAAS,WAEhE,MAAMmyC,EAAoB,oDAAmDb,EAAM3S,KAAKoT,wBAExFK,WAAWn6B,IAAI,CACXo6B,OAAQ,EACRC,SAAU,uBACVC,MAAO,CAAEp3C,KAAM,OAAQq3C,QAAS,IAChCC,MAAO,CAAExzC,KAAM,KAAM4L,OAAQ,SAAU6nC,YAAa,cACrD18C,KAAKm8C,GAAkBQ,MAC9B,IAEAr6C,SAAS0M,eAAe,wBAAwB2sC,QAAU,WACtDr5C,SAAS0M,eAAe,oBAAoBnO,MAAM2F,QAAU,MAChE,EAEA1B,OAAO62C,QAAU,SAAS/xC,GAClBA,EAAMG,SAAWzH,SAAS0M,eAAe,sBACzC1M,SAAS0M,eAAe,oBAAoBnO,MAAM2F,QAAU,OAEpE,CACJ,CACJ,G,kBCpFAs1B,EAAEx5B,UAAUwpC,OAAM,WAChB,IAAKxpC,SAASsC,cAAc,6BAA8B,OAC1D,MAAMg4C,EAAoB9gB,EAAE,6BAEtB+gB,EAAkBjzC,GAAU,OAAOkzC,KAAKC,OAAOC,aAAapzC,EAAMqzC,QAElEC,EAAiBtzC,IACrB,MAAMvE,EAAMuE,EAAMvE,IACZ83C,EAAOvzC,EAAMwzC,SAAWxzC,EAAMyzC,QAOpC,OACEzzC,EAAM0zC,UALa,CAAC,YAAa,MAAO,QAAS,OAAQ,MAAO,UAMnD5xC,SAASrG,IALN,CAAC,YAAa,UAAW,aAAc,aAM7CqG,SAASrG,IAClB83C,GANgB,CAAC,IAAK,IAAK,IAAK,IAAK,KAMlBzxC,SAASrG,EAAI0K,cAAgB,EAiCrD6sC,EAAkB5gB,GAAG,WA7BEpyB,IACrB,MACM2zC,EADQ3zC,EAAMG,OAAOnG,MAAM3D,QAAQ,MAAO,IACpBwC,QAAU,KAGhCo6C,EAAejzC,KAAWszC,EAActzC,IAAYizC,EAAejzC,IAAU2zC,IACjF3zC,EAAMiF,gBACR,IAuBF+tC,EAAkB5gB,GAAG,SApBEpyB,IACrB,GAAIszC,EAActzC,GAChB,OAGF,MACM0X,EADQ1X,EAAMG,OAAOnG,MAAM3D,QAAQ,MAAO,IAAIuH,MAAM,EAAG,IACzC8Z,MAAM,iCAE1B,IAAKA,EAAO,MAAO,GAEnB,MAAO,CAAEk8B,EAAUC,EAAQC,GAAQp8B,EAEnC,IAAIjU,EAAY,GACZqwC,EAAMrwC,EAAa,IAAGmwC,MAAaC,KAAUC,IACxCD,EAAQpwC,EAAa,IAAGmwC,MAA8B,GAAjBC,EAAOh7C,OAAcg7C,EAAS,IAAMA,IACzED,IAAUnwC,EAAa,IAAsB,GAAnBmwC,EAAS/6C,OAAc+6C,EAAW,KAAOA,KAC5E5zC,EAAMG,OAAOnG,MAAQyJ,CAAS,GAKlC,G,kBCvDAyuB,EAAEx5B,UAAUwpC,OAAM,WAChB,IAAKxpC,SAASsC,cAAc,wDACvBtC,SAASsC,cAAc,gEAAiE,OAE7F,MAAM+4C,EAAW7hB,EAAE,sDACb8hB,EAAmB9hB,EAAE,gEAC3B,IAAI7I,EAAS,GACTQ,EAAY,GACZE,GAAc,EAEfgqB,IACDA,EAAS3hB,GAAG,WAAW,SAAU59B,GAC/Bu1B,EAAwB,cAAVv1B,EAAEiH,GAClB,IAEAs4C,EAAS3hB,GAAG,SAAS,WACnB,IACInI,EADM2H,KAAK53B,MACK3D,QAAQ,MAAO,IAE/B4zB,EAAUpxB,OAASgxB,EAAUhxB,QAGtBoxB,EAAUpxB,OAASgxB,EAAUhxB,OADtCwwB,EAASY,EAIAF,IAETV,EAASA,EAAOzrB,MAAM,GAAI,IAI5B,IAAIq2C,EAcR,SAAmB5qB,GACjB,OAAIA,EAAOxwB,QAAU,EACZwwB,EAAOzrB,MAAM,EAAG,GAAK,IAAMyrB,EAAOzrB,MAAM,EAAG,GAAK,IAAMyrB,EAAOzrB,MAAM,EAAG,GACpEyrB,EAAOxwB,QAAU,EACnBwwB,EAAOzrB,MAAM,EAAG,GAAK,IAAMyrB,EAAOzrB,MAAM,GAExCyrB,CAEX,CAtBuBD,CAAUC,GAE7BuI,KAAK53B,MAAQi6C,EACbpqB,EAAYR,EACZU,GAAc,CAChB,KAGCiqB,GACDA,EAAiB5hB,GAAG,SAAS,WAC3BR,KAAK53B,MAAQ43B,KAAK53B,MAAM3D,QAAQ,MAAO,IAAIuH,MAAM,EAAG,EACtD,GAYJ,G,iBCtDAlF,SAAS0H,iBAAiB,oBAAoB,WAE5C,MAAM8zC,EAAex7C,SAASsC,cAAc,kEACtCm5C,EAAgBz7C,SAASsC,cAAc,mDACvCo5C,EAAa17C,SAASsC,cAAc,eAG1C,IAAKk5C,IAAiBC,IAAkBC,EAEtC,YADAt+C,QAAQ27B,MAAM,2CAKhB,MAAM4iB,EAAeH,EAAavS,QAAQ,eACpC2S,EAAgBH,EAAcxS,QAAQ,eACtC4S,EAAaH,EAAWp5C,cAAc,gBAE5C,IAAKq5C,IAAiBC,IAAkBC,EAEtC,YADAz+C,QAAQ27B,MAAM,kDAKhB,IAAI+iB,IAAmBL,EAAcn6C,QAAUk6C,EAAal6C,OAGvDw6C,IACHH,EAAa9uC,UAAUC,IAAI,UAC3B8uC,EAAc/uC,UAAUE,OAAO,UAC/ByuC,EAAa1oC,UAAW,EACxB2oC,EAAc3oC,UAAW,EACzB+oC,EAAWjvC,YAAc,iCAG3B8uC,EAAWh0C,iBAAiB,SAAS,SAAS5L,GAC5CA,EAAEyQ,iBAEEuvC,GACFH,EAAa9uC,UAAUC,IAAI,UAC3B8uC,EAAc/uC,UAAUE,OAAO,UAC/ByuC,EAAa1oC,UAAW,EACxB2oC,EAAc3oC,UAAW,EACzB+oC,EAAWjvC,YAAc,kCAEzB+uC,EAAa9uC,UAAUE,OAAO,UAC9B6uC,EAAc/uC,UAAUC,IAAI,UAC5B0uC,EAAa1oC,UAAW,EACxB2oC,EAAc3oC,UAAW,EACzB+oC,EAAWjvC,YAAc,8CAG3BkvC,GAAkBA,CACpB,GACF,G,kBCjDA,MAAMC,EAAS/7C,SAASiV,iBAAiB,eACnC5E,EAAS,CAAC,OAAQ,SAAU,UAElC0rC,EAAOrrC,SAASsrC,IACd,MAAMC,EAAQD,EAAM/mC,iBAAiB,oBAErC5E,EAAOK,SAASpJ,IACd9E,OAAOkF,iBAAiBJ,GAAO,KAC7B,MAAM40C,EAAM,GAAGh3C,MAAMi3C,KAAKF,GAAOG,UAEjCF,EAAIhlC,QAAO,CAACxB,EAAOrG,EAAMyH,KACvB,MAAMzX,EAASgQ,EAAKgtC,aAAen7C,SAASsB,OAAOusC,iBAAiB1/B,GAAMinC,iBAAiB,kBAErFuC,EAAWnjC,GAASrW,GADX68C,EAAIplC,EAAI,GAAKolC,EAAIplC,EAAI,GAAGs9B,UAAY/kC,EAAK+kC,UAAY/0C,IACvBA,EAGvC0qC,EAAO16B,EAAKitC,kBACZC,EAAYxS,EAAKuS,kBACjBE,EAAY,gBAAkB3D,EAAW,IACzC9pC,EAAU,iBAAmB8pC,EAAW,IACxC4D,EAAQ,kBAAoB5D,EAAW,IAM7C,OAJA9O,EAAKxrC,MAAMO,UAAY,cAAgB09C,EAAY,WAAaC,EAAQ,IACxEF,EAAUh+C,MAAMwQ,QAAUA,EAGnB8pC,CAAQ,GACd,EAAE,GACL,GACF,G,kBC7BY74C,SAASiV,iBAAiB,4BAElCvE,SAASy4B,IACfA,EAAOzhC,iBAAiB,SAAS,SAAU5L,GACzCA,EAAEyQ,iBAEF,IAAI9E,EAASzH,SAASsC,cAAc6mC,EAAOhuB,aAAa,SACpDtY,EAAuB,aAAhB4E,EAAO5E,KAAsB,OAAS,WAEjD4E,EAAO5E,KAAOA,CAChB,GAAE,G,kBCdJ,IAAI65C,EAAkB,EAetB,SAASC,EAAYr1C,GACjBA,EAAMsqC,UAAUgL,cAAc,IAAIC,MAAM,cAC5C,CAhBA78C,SAAS0H,iBAAiB,+BAAgCJ,IACe,QAAjEtH,SAAS0M,eAAe,gCAAgCpL,OACxDq7C,EAAYr1C,GACZtH,SAAS8zC,uBAAuB,OAAO,GAAG97B,UAAW,KAC5C0kC,EAAkB,KAC3BC,EAAYr1C,GACZA,EAAMsqC,UAAU6H,UAAY,mHAChC,IAGJz5C,SAAS0H,iBAAiB,qBAAsBJ,IAC5Cq1C,EAAYr1C,EAAM,G","sources":["webpack://solosuit/./app/javascript/channels/ sync _channel\\..+$","webpack://solosuit/./app/javascript/components/collectors_dashboard/PrivateRoute.jsx","webpack://solosuit/./app/javascript/components/shared/Popover.jsx","webpack://solosuit/./app/javascript/utils/cookies.js","webpack://solosuit/./app/javascript/components/collectors_dashboard/Sidebar.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/Layout.jsx","webpack://solosuit/./app/javascript/components/shared/Tooltip.jsx","webpack://solosuit/./app/javascript/components/shared/Alert.jsx","webpack://solosuit/./app/javascript/other/money.js","webpack://solosuit/./app/javascript/components/collectors_dashboard/accounts/Filters.jsx","webpack://solosuit/./app/javascript/components/shared/icons/ArrowIcon.jsx","webpack://solosuit/./app/javascript/components/shared/icons/SparkleIcon.jsx","webpack://solosuit/./app/javascript/components/shared/icons/CheckMarkIcon.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/accounts/AccountDetails.jsx","webpack://solosuit/./app/javascript/components/shared/CurrencyInput.jsx","webpack://solosuit/./app/javascript/components/shared/FloatingLabelInput.jsx","webpack://solosuit/./app/javascript/components/shared/icons/Calculator.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/accounts/actions/AcceptOrCounteroffer.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/accounts/actions/SendPaymentDetails.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/accounts/actions/UploadSettlementAgreement.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/accounts/AccountRow.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/accounts/AccountsTable.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/Accounts.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/DirectDeposit.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/PaymentDetails.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/Users.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/Login.jsx","webpack://solosuit/./app/javascript/components/collectors_dashboard/InviteAccept.jsx","webpack://solosuit/./app/javascript/components/CollectorsDashboardRoot.jsx","webpack://solosuit/./app/javascript/components/ui/Card.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/CallToActionCards.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/CreditReportCard.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/CreditReportCTA.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/CreditReport.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/ProgressChecklist.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/DocumentCard.jsx","webpack://solosuit/./app/javascript/components/shared/ProgressCircle.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/PaymentPlanSummary.jsx","webpack://solosuit/./app/javascript/utils/form.ts","webpack://solosuit/./app/javascript/components/shared/GooglePlacesAutocomplete.jsx","webpack://solosuit/./app/javascript/components/shared/SSNInput.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/ProfileEdit.jsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/AccountActions.jsx","webpack://solosuit/./app/javascript/components/ui/Badge.tsx","webpack://solosuit/./app/javascript/components/consumer_dashboard/Dashboard.jsx","webpack://solosuit/./app/javascript/components/ConsumerDashboardRoot.jsx","webpack://solosuit/./app/javascript/components/ExtractSummaryRoot.jsx","webpack://solosuit/./app/javascript/components/on_call_dashboard/Dashboard.jsx","webpack://solosuit/./app/javascript/components/on_call_dashboard/User.jsx","webpack://solosuit/./app/javascript/components/on_call_dashboard/CustomerDocument.jsx","webpack://solosuit/./app/javascript/components/OnCallDashboardRoot.jsx","webpack://solosuit/./app/javascript/channels/index.js","webpack://solosuit/./app/javascript/controllers/application.js","webpack://solosuit/./app/javascript/controllers/clipboard_controller.js","webpack://solosuit/./app/javascript/controllers/inputs/currency_controller.js","webpack://solosuit/./app/javascript/controllers/inputs/textarea_controller.js","webpack://solosuit/./app/javascript/controllers/pilot/anchor_controller.js","webpack://solosuit/./app/javascript/bundles/Pilot/types.ts","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/selectors.ts","webpack://solosuit/./app/javascript/bundles/Pilot/utils/json.ts","webpack://solosuit/./app/javascript/bundles/Pilot/utils/toast.ts","webpack://solosuit/./app/javascript/bundles/Pilot/utils/browser.ts","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/actions.ts","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/slice.ts","webpack://solosuit/./app/javascript/bundles/Pilot/reducers.ts","webpack://solosuit/./app/javascript/bundles/Pilot/store.ts","webpack://solosuit/./app/javascript/bundles/Pilot/utils/env.ts","webpack://solosuit/./app/javascript/bundles/Pilot/contexts/PilotContext.ts","webpack://solosuit/./app/javascript/bundles/Pilot/assets/Sparkles.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/components/FastActionButton.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/utils/url.ts","webpack://solosuit/./app/javascript/bundles/Pilot/components/markdownRenderers/AnchorRenderer.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/components/Markdown.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/Bubble.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/hooks.ts","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/ListItem.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/components/Loading.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/ScrollableList.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/List.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/components/ChannelStateDot.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/Footer.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/features/completions/Channel.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/utils/channels.ts","webpack://solosuit/./app/javascript/bundles/Pilot/components/Header.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/components/FastActionChat.tsx","webpack://solosuit/./app/javascript/bundles/Pilot/FastActionWidget.tsx","webpack://solosuit/./app/javascript/controllers/pilot/faw_controller.js","webpack://solosuit/./app/javascript/controllers/pilot/playground_selector_controller.js","webpack://solosuit/./app/javascript/bundles/Pilot/Window.tsx","webpack://solosuit/./app/javascript/controllers/pilot/window_controller.js","webpack://solosuit/./app/javascript/controllers/index.js","webpack://solosuit/./app/javascript/theme/bootstrap.js","webpack://solosuit/./app/javascript/theme/navbar-dropdown.js","webpack://solosuit/./app/javascript/other/stripe.js.erb","webpack://solosuit/./app/javascript/other/constants.js","webpack://solosuit/./app/javascript/other/domHelpers.js","webpack://solosuit/./app/javascript/other/commento.js","webpack://solosuit/./app/javascript/other/customScrollSpy.js","webpack://solosuit/./app/javascript/other/toc.js","webpack://solosuit/./app/javascript/application.js","webpack://solosuit/./app/javascript/channels/consumer.js","webpack://solosuit/./app/javascript/channels/plaid_report_status_channel.js","webpack://solosuit/./app/javascript/hardship_form.js","webpack://solosuit/./app/javascript/other/direct_uploads.js","webpack://solosuit/./app/javascript/other/document_editor.js","webpack://solosuit/./app/javascript/other/phone_number_input_formatter.js","webpack://solosuit/./app/javascript/other/ssn_input_formatter.js","webpack://solosuit/./app/javascript/other/ssn_toggle.js","webpack://solosuit/./app/javascript/theme/card-stack.js","webpack://solosuit/./app/javascript/theme/password.js","webpack://solosuit/./app/javascript/other/document_download_link_polling.js.erb"],"sourcesContent":["var map = {\n\t\"./plaid_report_status_channel.js\": 8411,\n\t\"channels/plaid_report_status_channel.js\": 8411\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 9248;","import React, { useEffect, useState } from 'react';\nimport { Navigate, useLocation } from 'react-router-dom';\n\nconst PrivateRoute = ({ children }) => {\n const [isAuthenticated, setIsAuthenticated] = useState(null);\n const location = useLocation();\n\n useEffect(() => {\n const checkAuth = async () => {\n try {\n const response = await fetch('/collectors/api/check_auth');\n if (response.ok) {\n const data = await response.json();\n setIsAuthenticated(true);\n } else {\n setIsAuthenticated(false);\n }\n } catch (error) {\n console.error('Error checking authentication:', error);\n setIsAuthenticated(false);\n }\n };\n\n checkAuth();\n }, []);\n\n if (isAuthenticated === null) {\n // Still checking authentication\n return null;\n }\n\n return isAuthenticated ? (\n children\n ) : (\n \n );\n};\n\nexport default PrivateRoute; ","import React, { useEffect, useState } from 'react';\n\nconst Popover = ({ title, content, isVisible, onClose, placement = 'right' }) => {\n const [animate, setAnimate] = useState(false);\n\n useEffect(() => {\n if (isVisible) {\n const timer = setTimeout(() => {\n setAnimate(true);\n }, 100);\n\n return () => clearTimeout(timer);\n }\n }, [isVisible]);\n\n const getPlacementStyles = () => {\n const baseStyles = {\n position: 'absolute',\n zIndex: 1000,\n };\n\n switch (placement) {\n case 'right':\n return {\n ...baseStyles,\n left: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginLeft: '15px',\n };\n default:\n return baseStyles;\n }\n };\n\n const getCaretStyles = () => {\n const baseStyles = {\n position: 'absolute',\n width: '12px',\n height: '12px',\n backgroundColor: '#f8f9fa', // Light background to match header\n border: '1px solid rgba(0,0,0,0.1)',\n transform: 'rotate(45deg)',\n boxShadow: '-2px -2px 2px rgba(0,0,0,0.03)',\n };\n\n switch (placement) {\n case 'right':\n return {\n ...baseStyles,\n left: '-7px',\n top: 'calc(50% - 6px)',\n borderRight: 'none',\n borderTop: 'none',\n };\n default:\n return baseStyles;\n }\n };\n\n if (!isVisible) return null;\n\n return (\n
\n \n\n {/* Caret */}\n
\n \n {/* Header */}\n
\n
{title}
\n
\n \n {/* Content */}\n
\n

\n {content}\n

\n
\n \n
\n
\n
\n );\n};\n\nexport default Popover; ","export const getCookieValue = (name) => {\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) {\n return parts.pop().split(';').shift();\n }\n return '0';\n};\n\nexport const setCookie = (name, value) => {\n // Set cookie to expire in 1 year\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n document.cookie = `${name}=${value};expires=${date.toUTCString()};path=/`;\n}; ","import React, { useEffect, useState } from 'react';\nimport { Link, useNavigate } from 'react-router-dom';\nimport Popover from '../shared/Popover';\nimport { getCookieValue, setCookie } from '../../utils/cookies';\n\nconst POPOVER_COOKIE_NAME = 'users_popover_views';\nconst MAX_POPOVER_VIEWS = 2;\n\nconst Sidebar = ({ horizontal = false }) => {\n const [showUsersPopover, setShowUsersPopover] = useState(false);\n const navigate = useNavigate();\n const [error, setError] = React.useState(null);\n const [scope, setScope] = React.useState(null);\n\n useEffect(() => {\n const initializePopover = () => {\n const viewCount = parseInt(getCookieValue(POPOVER_COOKIE_NAME));\n \n if (viewCount < MAX_POPOVER_VIEWS) {\n // Show popover after 1 second delay\n const timer = setTimeout(() => {\n setShowUsersPopover(true);\n }, 1000);\n\n return () => clearTimeout(timer);\n }\n };\n\n fetchAuthInfo().then(() => {\n if (scope === 'admin') {\n initializePopover();\n }\n });\n }, [scope]);\n\n const handlePopoverClose = () => {\n setShowUsersPopover(false);\n \n // Update cookie\n const viewCount = parseInt(getCookieValue(POPOVER_COOKIE_NAME));\n setCookie(POPOVER_COOKIE_NAME, viewCount + 1);\n };\n\n const fetchAuthInfo = async () => {\n const response = await fetch('/collectors/api/check_auth', {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const data = await response.json();\n setScope(data.scope);\n };\n\n const links = React.useMemo(() => {\n const baseLinks = [\n { name: 'Accounts', path: '/collectors/accounts' },\n { name: 'Direct Deposit', path: '/collectors/direct_deposit' },\n { name: 'Payment Details', path: '/collectors/payment_details' },\n ];\n \n if (scope === 'admin') {\n baseLinks.push({ \n name: 'Users',\n path: '/collectors/users',\n popover: {\n title: 'Manage Users',\n content: (\n <>\n Add or remove users and control their access to your organization.{' '}\n \n Go to Users →\n \n \n )\n }\n });\n }\n \n return baseLinks;\n }, [scope]);\n\n const handleLogout = async () => {\n try {\n const response = await fetch('/collectors/api/logout', {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n }\n });\n\n if (response.ok) {\n navigate('/collectors');\n } else {\n setError('Logout failed. Please try again.');\n setTimeout(() => setError(null), 5000); // Clear error after 5 seconds\n }\n } catch (error) {\n setError('Network error during logout. Please try again.');\n setTimeout(() => setError(null), 5000); // Clear error after 5 seconds\n }\n };\n\n const isCurrentPage = (path) => {\n return window.location.pathname === path;\n };\n\n const renderError = () => {\n if (!error) return null;\n \n return (\n
\n {error}\n \n
\n );\n };\n\n if (horizontal) {\n return (\n <>\n {renderError()}\n
\n
    \n {links.map((link) => (\n
  • \n \n {link.name}\n \n {link.popover && showUsersPopover && (\n \n )}\n
  • \n ))}\n
  • \n \n
  • \n
\n
\n \n );\n }\n\n return (\n
\n {renderError()}\n
\n
\n {links.map((link) => (\n
\n \n {link.name}\n \n {link.popover && showUsersPopover && (\n \n )}\n
\n ))}\n \n Logout\n \n
\n
\n
\n );\n};\n\nexport default Sidebar;","import React from 'react';\nimport Sidebar from './Sidebar';\n\nconst Layout = ({ children }) => {\n return (\n
\n
\n
\n \n
\n\n
\n
\n \n
\n \n {children}\n
\n
\n
\n );\n};\n\nexport default Layout;","import React, { useState } from 'react';\n\nconst Tooltip = ({ text, width, position = 'top', children }) => {\n const [isVisible, setIsVisible] = useState(false);\n\n const tooltipStyle = {\n position: 'absolute',\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n color: 'white',\n padding: '5px 10px',\n borderRadius: '4px',\n fontSize: '14px',\n textTransform: 'none',\n letterSpacing: '0px',\n fontFamily: '\"DM Sans\", sans-serif',\n fontWeight: '400',\n zIndex: 1000,\n whiteSpace: width ? 'normal' : 'nowrap',\n width: width || undefined,\n ...(position === 'top' ? {\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: '5px',\n } : {\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginTop: '5px',\n })\n };\n\n const containerStyle = {\n position: 'relative',\n display: 'inline-block',\n maxWidth: '250px',\n whiteSpace: 'normal',\n wordWrap: 'break-word',\n };\n\n return (\n
setIsVisible(true)}\n onMouseLeave={() => setIsVisible(false)}\n >\n {isVisible && (\n
\n {text}\n
\n )}\n {children}\n
\n );\n};\n\nexport default Tooltip; ","import React from 'react';\n\nconst ICONS = {\n success: (\n \n ),\n danger: (\n \n ),\n primary: (\n \n )\n};\n\nconst Alert = ({ type = 'success', children }) => {\n const variant = type === 'success' ? 'success' : type === 'danger' ? 'danger' : 'primary';\n \n return (\n
\n {ICONS[type] && (\n \n {ICONS[type]}\n \n )}\n
\n {children}\n
\n
\n );\n};\n\nexport default Alert; ","// input, if int, is cents\n// input, if string, is dollars\n// output is a string that with dollar sign and commas\nexport function formatDollars(input, showCents = true) {\n let rawFloat;\n if (typeof input === 'string') {\n rawFloat = parseFloat(input.replace(/[^\\d.]/g, ''));\n } else {\n rawFloat = showCents ? (input / 100).toFixed(2) : Math.round(input / 100);\n }\n \n // Convert to string and split into whole/decimal parts\n const [whole, decimal] = rawFloat.toString().split('.');\n \n // Add commas to whole number part using regex\n const withCommas = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n \n // Combine with decimal part and add dollar sign\n return `$${withCommas}${showCents ? (decimal ? '.' + decimal : '.00') : ''}`;\n}\n\n// $100.00 -> 10000\n// $100 -> 10000\n// 100 -> 10000\nexport function extractCentsFromDollarString(input) {\n if (typeof input === 'number') {\n return input * 100;\n }\n \n // Remove dollar sign and any commas\n const cleanedInput = input.replace(/[$,]/g, '');\n \n // Convert to float and multiply by 100 to get cents\n const dollars = parseFloat(cleanedInput);\n return Math.round(dollars * 100);\n}","import React from 'react';\n\nconst Chevron = () => (\n \n \n \n);\n\nconst RangeFilter = ({ name, values, currentValue, onChange, onRemove, filterKey, unit }) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const dropdownRef = React.useRef(null);\n const [localMin, setLocalMin] = React.useState(currentValue?.min || '');\n const [localMax, setLocalMax] = React.useState(currentValue?.max || '');\n\n React.useEffect(() => {\n const handleClickOutside = (event) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, []);\n\n const handleSave = () => {\n onChange(filterKey, { min: localMin, max: localMax });\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setLocalMin('');\n setLocalMax('');\n onRemove(filterKey);\n setIsOpen(false);\n };\n\n const formatValue = (value) => {\n if (!value) return '∞';\n if (unit.value === 'DATE') {\n const date = new Date(value * 1000);\n const tzOffset = date.getTimezoneOffset() * 60000;\n const adjustedDate = new Date(date.getTime() + tzOffset);\n return adjustedDate.toLocaleDateString();\n }\n return unit.location === 'before' ? `${unit.value}${value}` : `${value}${unit.value}`;\n };\n\n const renderInput = (value, setValue, placeholder) => {\n if (unit.value === 'DATE') {\n return (\n {\n const selectedDate = new Date(e.target.value + 'T00:00:00.000Z');\n const timestamp = Math.floor(selectedDate.getTime() / 1000);\n setValue(timestamp);\n }}\n placeholder={placeholder}\n min={values?.min ? new Date(values.min * 1000).toISOString().slice(0, 10) : undefined}\n max={values?.max ? new Date(values.max * 1000).toISOString().slice(0, 10) : undefined}\n />\n );\n }\n\n return (\n
\n {unit.location === 'before' && {unit.value}}\n setValue(e.target.value)}\n placeholder={placeholder}\n />\n {unit.location === 'after' && {unit.value}}\n
\n );\n };\n\n const displayValue = currentValue \n ? `${formatValue(currentValue.min)} - ${formatValue(currentValue.max)}`\n : name;\n\n return (\n
\n \n \n {isOpen && (\n
\n
\n \n {renderInput(\n localMin,\n setLocalMin,\n values?.min ? \n unit.value === 'DATE' ? \n new Date(values.min).toISOString().split('T')[0] : \n values.min.toLocaleString() \n : 'Min'\n )}\n
\n
\n \n {renderInput(\n localMax,\n setLocalMax,\n values?.max ? \n unit.value === 'DATE' ? \n new Date(values.max).toISOString().split('T')[0] : \n values.max.toLocaleString() \n : 'Max'\n )}\n
\n
\n \n \n
\n
\n )}\n
\n );\n};\n\nconst EnumFilter = ({ name, values, currentValue=[], onChange, onRemove, filterKey }) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const dropdownRef = React.useRef(null);\n const [localSelections, setLocalSelections] = React.useState(currentValue);\n\n React.useEffect(() => {\n const handleClickOutside = (event) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n setIsOpen(false);\n setLocalSelections(currentValue);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [currentValue]);\n\n const handleToggle = (val) => {\n setLocalSelections(prev => \n prev.includes(val) \n ? prev.filter(v => v !== val)\n : [...prev, val]\n );\n };\n\n const handleSave = () => {\n onChange(filterKey, localSelections);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setLocalSelections([]);\n onRemove(filterKey);\n setIsOpen(false);\n };\n\n const displayValue = currentValue.length > 0 ? `${name} (${currentValue.length})` : name;\n\n return (\n
\n \n \n
\n
\n
\n
    \n {values?.map((val) => (\n
  • \n
    handleToggle(val)}\n role=\"button\"\n >\n
    \n \n
    \n {val}\n
    \n
  • \n ))}\n
\n
\n
\n \n \n
\n
\n
\n
\n );\n};\n\nconst TextFilter = ({ name, currentValue='', onChange, onRemove, filterKey }) => {\n const [localValue, setLocalValue] = React.useState(currentValue);\n const debounceTimeout = React.useRef(null);\n\n React.useEffect(() => {\n return () => {\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n };\n }, []);\n\n const handleInputChange = (value) => {\n setLocalValue(value);\n \n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n\n debounceTimeout.current = setTimeout(() => {\n if (value === '') {\n onRemove(filterKey);\n } else {\n onChange(filterKey, value);\n }\n }, 250);\n };\n\n const handleClear = () => {\n setLocalValue('');\n onRemove(filterKey);\n };\n\n return (\n
\n handleInputChange(e.target.value)}\n placeholder={name}\n />\n {localValue && (\n \n ×\n \n )}\n
\n );\n};\n\n/**\n * \n * @param {*} filters: example: [{ name: 'State', key: 'state', type: 'enum', values: ['CA', 'NY', 'TX'] }]\n * @param {*} setFilter: setFilter(key, newValue)\n * @returns \n */\nconst Filters = ({ filters=[], filterValues={}, setFilter, removeFilter, clearAll }) => {\n const hasActiveFilters = Object.keys(filterValues).length > 0;\n\n return (\n <>\n
\n {filters.map((filter) => {\n if (!filter.visible_in_ui) return null;\n switch (filter.type) {\n case 'enum':\n return (\n \n );\n case 'range':\n return (\n \n );\n case 'text':\n return (\n \n );\n default:\n return null;\n }\n })}\n
\n {hasActiveFilters && (\n
\n \n
\n )}\n \n );\n};\n\nexport default Filters;\n","import React from 'react';\n\nconst ArrowIcon = () => (\n \n \n \n \n \n);\n\nexport default ArrowIcon; ","import React from 'react';\n\nconst SparkleIcon = ({ width = 44, height = 44, style = {} }) => {\n // Create default styles that can be overridden\n const defaultStyle = {\n marginRight: '5px',\n marginBottom: '3px'\n };\n \n // Merge default styles with custom styles (custom styles take precedence)\n const mergedStyles = {...defaultStyle, ...style};\n \n return (\n \n \n \n \n \n );\n};\n\nexport default SparkleIcon; ","import React from 'react';\n\nconst CheckMarkIcon = () => (\n \n \n \n);\n\nexport default CheckMarkIcon; ","import React from 'react';\nimport { formatDollars } from '../../../other/money';\nimport ArrowIcon from '../../../components/shared/icons/ArrowIcon';\nimport SparkleIcon from '../../../components/shared/icons/SparkleIcon';\nimport CheckMarkIcon from '../../../components/shared/icons/CheckMarkIcon';\n\n// Safe wrapper around formatDollars that handles nullable values and various money object formats\nconst formatMoneyValue = (value) => {\n if (value === null || value === undefined) {\n return '$0.00';\n }\n \n // Handle string values (formatted currency like \"$3.90\")\n if (typeof value === 'string') {\n if (value.includes('$')) {\n return value;\n }\n // If it's a string with no dollar sign, try to format it\n return `$${parseFloat(value).toFixed(2)}`;\n }\n \n // Handle different money object formats\n if (typeof value === 'object') {\n // First priority: use formatted value if available\n if (value.formatted) return value.formatted;\n \n // Second priority: use dollars if available\n if (value.dollars !== undefined) return formatDollars(value.dollars * 100);\n \n // Third priority: use cents if available\n if (value.cents !== undefined) return formatDollars(value.cents);\n }\n \n // Default to $0.00 for any other case\n return '$0.00';\n};\n\n// Helper function to display money values\nconst displayValue = (value) => {formatMoneyValue(value)};\n\n// Check if any hardship data exists\nconst hasHardshipData = (info) => \n info.hardship_statement || \n (info.hardship && Object.values(info.hardship).some(value => value !== \"0\" && value));\n\n// Check if there is any cash flow data\nconst hasCashFlowData = (info) => {\n // First try to check if we have a string value (either legacy or detailed data)\n if (typeof info.monthly_income_total === 'string' || typeof info.monthly_expenses_total === 'string') {\n // Check if either income or expense is not $0.00\n return (info.monthly_income_total && info.monthly_income_total !== '$0.00') || \n (info.monthly_expenses_total && info.monthly_expenses_total !== '$0.00');\n }\n \n // Then check if we might have a money object (legacy data format)\n if (typeof info.monthly_income_total === 'object' || typeof info.monthly_expenses_total === 'object') {\n return (info.monthly_income_total?.cents > 0) || \n (info.monthly_expenses_total?.cents > 0);\n }\n \n // If we don't have either format, there's no cash flow data\n return false;\n};\n\n// Helper to render financial details section - only called when has_detailed_data is true\nconst renderFinancialDetails = (financialDetails) => {\n if (!financialDetails) {\n console.log(\"No financial details to render\");\n return null;\n }\n \n console.log(\"Rendering financial details:\", financialDetails);\n \n const incomeFields = [\n { key: 'net_employment_income', label: 'Employment income' },\n { key: 'unemployment_income', label: 'Unemployment income' },\n { key: 'retirement_income', label: 'Retirement income' },\n { key: 'other_income', label: 'Other income' }\n ];\n \n const expenseFields = [\n // Column 1\n { key: 'mortgage_payments', label: 'Mortgage payments' },\n { key: 'rent', label: 'Rent payments' },\n { key: 'auto_payments', label: 'Auto payments' },\n // Column 2\n { key: 'student_loan_payment', label: 'Student loan payments' },\n { key: 'credit_card_payments', label: 'Credit card payments' },\n { key: 'personal_loan_payments', label: 'Personal loan payments' },\n { key: 'other_loan_payments', label: 'Other loan payments' },\n { key: 'insurance', label: 'Insurance' },\n { key: 'utilities', label: 'Utilities' },\n { key: 'telephone', label: 'Telephone' },\n // Column 3\n { key: 'general_expenses', label: 'General expenses' },\n { key: 'food', label: 'Food' },\n { key: 'transportation', label: 'Transportation' },\n { key: 'medical_expenses', label: 'Medical expenses' },\n { key: 'child_care', label: 'Child care' },\n { key: 'charitable_giving', label: 'Charitable giving' },\n { key: 'other_expenses', label: 'Other expenses' }\n ];\n \n // Function to render a financial item\n const renderItem = (item) => {\n const value = financialDetails[item.key];\n const displayedValue = displayValue(value);\n \n // Skip items with zero values to reduce clutter\n if (displayedValue === '$0.00') {\n return null;\n }\n \n return (\n

\n {item.label}: {displayedValue}\n

\n );\n };\n \n // Check if we have any non-zero income items\n const hasIncomeItems = incomeFields.some(\n field => financialDetails[field.key] && formatMoneyValue(financialDetails[field.key]) !== '$0.00'\n );\n \n // Check if we have any non-zero expense items\n const hasExpenseItems = expenseFields.some(\n field => financialDetails[field.key] && formatMoneyValue(financialDetails[field.key]) !== '$0.00'\n );\n \n console.log(\"Has income items:\", hasIncomeItems);\n console.log(\"Has expense items:\", hasExpenseItems);\n \n if (!hasIncomeItems && !hasExpenseItems) {\n console.log(\"No non-zero items to display\");\n return null;\n }\n \n return (\n
\n
\n {/* Income items - only shown if there's at least one non-zero item */}\n {hasIncomeItems && (\n <>\n {incomeFields.map(field => renderItem(field))}\n \n )}\n \n {/* First column of expense items */}\n {hasExpenseItems && (\n <>\n {expenseFields.slice(0, 3).map(field => renderItem(field))}\n \n )}\n
\n \n
\n {/* Second column of expense items */}\n {hasExpenseItems && expenseFields.slice(3, 10).map(field => renderItem(field))}\n
\n \n
\n {/* Third column of expense items */}\n {hasExpenseItems && expenseFields.slice(10).map(field => renderItem(field))}\n
\n
\n );\n};\n\nconst AccountDetails = ({ account: info }) => {\n console.log('Account Info:', info);\n console.log('Financial Details:', info.financial_details);\n console.log('Has Detailed Data:', info.has_detailed_data);\n const downloadAuthorizationLetter = async (event, documentId) => {\n event.preventDefault();\n const linkElement = event.target;\n const statusElement = document.getElementById(`download-status-${documentId}`);\n const errorElement = document.getElementById(`download-error-${documentId}`);\n \n errorElement.querySelector('span').textContent = '';\n errorElement.classList.add('d-none');\n \n linkElement.classList.add('d-none');\n statusElement.classList.remove('d-none');\n \n try {\n const response = await fetch('/collectors/api/render_document', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({ customer_document_id: documentId })\n });\n \n if (!response.ok) {\n throw new Error('Failed to download file');\n }\n\n // Get the blob from the response\n const blob = await response.blob();\n \n // Create a URL for the blob\n const url = window.URL.createObjectURL(blob);\n \n // Create a sanitized customer name for the filename\n const sanitizedName = info.civil_number\n ? info.civil_number.replace(/[^a-z0-9]/gi, '_').toLowerCase()\n : 'authorization_letter';\n \n // Create and trigger download\n const downloadLink = document.createElement('a');\n downloadLink.href = url;\n downloadLink.download = `authorization_letter__${sanitizedName}.pdf`;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n \n // Cleanup\n document.body.removeChild(downloadLink);\n window.URL.revokeObjectURL(url);\n \n } catch (error) {\n console.error('Error:', error);\n errorElement.querySelector('span').textContent = error.message;\n errorElement.classList.remove('d-none');\n } finally {\n statusElement.classList.add('d-none');\n linkElement.classList.remove('d-none');\n }\n };\n\n const downloadHistoryCSV = (documentId, referenceNumber, events) => {\n const sanitizeForCSV = (str) => {\n if (!str) return '';\n return `\"${str.toString().replace(/\"/g, '\"\"').replace(/[\\n\\r]+/g, ' ')}\"`;\n };\n\n // Updated header row order\n const csvRows = [\n ['Account Information', '', '', '', ''].join(','),\n ['Plaintiff Name', sanitizeForCSV(info.plaintiff_name || 'n/a'), '', '', ''].join(','),\n ['Lawsuit State', sanitizeForCSV(info.lawsuit_state || 'n/a'), '', '', ''].join(','),\n ['Consumer Name', sanitizeForCSV(info.customer_name || 'n/a'), '', '', ''].join(','),\n ['Reference Number', sanitizeForCSV(info.civil_number || 'n/a'), '', '', ''].join(','),\n ['', '', '', '', ''].join(','),\n ['Activity Log', '', '', '', ''].join(','),\n ['Date', 'Time', 'Party', 'Reference', 'Action'].join(',') // Reordered columns\n ];\n \n events.forEach(event => {\n const date = new Date(event.created_at);\n let actionText = info.event_id_to_english_text[event.id];\n \n if (event.disclosures?.length > 0) {\n actionText += ' The collector made the following disclosures: ';\n actionText += event.disclosures.map(disclosure => disclosure.text).join(' ');\n }\n\n // Reordered row data to match new column order\n const row = [\n sanitizeForCSV(date.toLocaleDateString('en-US', { month: 'numeric', day: 'numeric', year: 'numeric' })),\n sanitizeForCSV(date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })),\n sanitizeForCSV(event.party === 'customer' ? 'Consumer' : event.party.charAt(0).toUpperCase() + event.party.slice(1)),\n sanitizeForCSV(referenceNumber),\n sanitizeForCSV(actionText)\n ];\n csvRows.push(row.join(','));\n });\n\n // Create and trigger download\n const csvContent = csvRows.join('\\n');\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `activity_log_${documentId}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n };\n\n return (\n
\n

Account Information

\n

Plaintiff Name: {info.plaintiff_name || 'n/a'}

\n

Lawsuit State: {info.lawsuit_state || 'n/a'}

\n

Consumer Name: {info.customer_name || 'n/a'}

\n

Reference Number: {info.civil_number || 'n/a'}

\n

Social Security Number: {info?.social_security_number?.social_security_number || (info?.social_security_number?.social_security_number_last_four ? `XXX-XX-${info.social_security_number.social_security_number_last_four}` : 'n/a')}

\n

Date of Birth: {info.birthdate}

\n

\n Address:{' '}\n {info.customer_mailing_address ? (\n `${info.customer_mailing_address.customer_street}, ${info.customer_mailing_address.customer_city}, ${info.customer_mailing_address.customer_state} ${info.customer_mailing_address.customer_zip_code}`\n ) : (\n 'n/a'\n )}\n

\n

SoloSettle Email: {info.email || 'n/a'}

\n

{info.lawsuit_exists ? 'Litigation Account' : 'Pre-litigation Account'}

\n \n {info.settlement_negotiation_events?.length > 0 && (\n
\n downloadAuthorizationLetter(e, info.customer_document.id)}\n >\n Download authorization letter\n \n
\n \n Downloading... \n \n
\n
\n \n
\n
\n )}\n \n {/* Hardship information section */}\n {hasHardshipData(info) && (\n <>\n

Hardship information

\n \n {info.hardship_statement ? (\n
\n

\n \n \n AI Summary\n \n

\n

{info.hardship_statement}

\n
\n ) : info.hardship && (\n
\n {Object.entries(info.hardship)\n .filter(([_, value]) => value !== \"0\" && value)\n .map(([key, value]) => (\n

{value}

\n ))}\n
\n )}\n \n )}\n \n {/* Cash flow statement section */}\n {hasCashFlowData(info) && (\n <>\n

\n Cash flow statement\n {info.plaid_verified && (\n \n \n Verified by Plaid\n \n )}\n

\n
\n

Summary

\n \n {/* Income and expense values will be either formatted strings or money objects */}\n

Monthly income: {displayValue(info.monthly_income_total)}

\n

Monthly expenses: {displayValue(info.monthly_expenses_total)}

\n \n {/* Show detailed breakdown only when user has completed the detailed form and has financial details */}\n {info.has_detailed_data && info.financial_details && renderFinancialDetails(info.financial_details)}\n
\n \n )}\n\n
\n\n

Payment tiers

\n
\n {info.latest_historical_offer?.phases && info.latest_historical_offer?.phases.length > 1 && (\n \n \n \n \n \n \n \n \n \n {info.latest_historical_offer.phases.map((phase, index) => (\n \n \n \n \n \n ))}\n \n
Tier# PaysAmount
{index + 1}{phase.iterations}{formatDollars(phase.payment_amount_cents)}
\n )}\n {!info.latest_historical_offer?.phases || info.latest_historical_offer?.phases.length === 0 && (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Tier# PaysAmount
1{info.latest_historical_offer.payments}{formatDollars(info.latest_historical_offer.total_amount_cents)}
\n )}\n
\n\n
\n \n

History

\n
\n
\n {\n e.preventDefault();\n downloadHistoryCSV(info.customer_document.id, info.civil_number, info.settlement_negotiation_events || []);\n }}\n >\n \n \n
\n \n \n \n \n \n \n \n \n \n \n {(info.settlement_negotiation_events || []).map((event, index) => {\n const disclosures = event.disclosures?.map(d => d.text) || [];\n return (\n \n \n \n \n \n \n );\n })}\n \n
DATETIMEPARTYACTION
{new Date(event.created_at).toLocaleDateString('en-US', { month: 'numeric', day: 'numeric', year: 'numeric' })}{new Date(event.created_at).toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })}{event.party === 'customer' ? 'Consumer' : event.party.charAt(0).toUpperCase() + event.party.slice(1)}\n {info.event_id_to_english_text[event.id]}\n \n {disclosures.length > 0 && (\n
The collector made the following disclosures:
\n )}\n {disclosures.map(disclosureText => (\n
{disclosureText}
\n ))}\n
\n
\n
\n );\n };\n\nexport default AccountDetails;\n","import React from 'react';\nimport Tooltip from './Tooltip';\n\nconst CurrencyInput = ({ label, value, onChange, className = '', style = {}, ...props }) => {\n const [isFocused, setIsFocused] = React.useState(false);\n\n const formatCurrency = (value) => {\n if (!value) return '';\n const numberValue = parseFloat(value);\n if (isNaN(numberValue)) return '';\n\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(numberValue);\n };\n\n const handleChange = (e) => {\n let inputValue = e.target.value;\n // Remove everything except digits and decimal point\n const rawValue = inputValue.replace(/[^0-9.]/g, '');\n \n onChange({\n target: {\n name: e.target.name,\n value: rawValue\n }\n });\n };\n\n return (\n
\n \n {label}\n \n setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n className={`form-control form-control-sm ${className}`}\n style={{ \n paddingTop: '18px',\n paddingBottom: '4px',\n ...style\n }}\n {...props}\n />\n
\n );\n};\n\nexport default CurrencyInput;","import React from 'react';\n\nconst FloatingLabelInput = ({ \n label,\n value,\n onChange,\n type = 'text',\n required = false,\n className = '',\n style = {},\n component: Component = 'input',\n isTextarea = false,\n onFocus,\n ...props \n}) => {\n const InputComponent = isTextarea ? 'textarea' : Component;\n \n return (\n
\n \n {label}\n \n {\n onChange(e);\n if (isTextarea && e.target) {\n e.target.style.height = 'auto';\n e.target.style.height = `${e.target.scrollHeight}px`;\n }\n }}\n onFocus={(e) => {\n if (isTextarea && e.target) {\n e.target.style.height = 'auto';\n e.target.style.height = `${e.target.scrollHeight}px`;\n }\n onFocus?.(e);\n }}\n required={required}\n className={`form-control form-control-sm ${className}`}\n style={{ \n paddingTop: '18px',\n paddingBottom: '4px',\n height: isTextarea ? 'auto' : undefined,\n resize: isTextarea ? 'none' : undefined,\n overflow: isTextarea ? 'hidden' : undefined,\n ...style\n }}\n {...props}\n />\n
\n );\n};\n\nexport default FloatingLabelInput;","import React from 'react';\n\nconst Calculator = ({ className = '', style = {}, onClick }) => (\n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default Calculator; ","import React, { useState, useEffect } from 'react';\nimport CurrencyInput from '../../../shared/CurrencyInput';\nimport Tooltip from '../../../shared/Tooltip';\nimport FloatingLabelInput from '../../../shared/FloatingLabelInput';\nimport Calculator from '../../../shared/icons/Calculator';\n\nconst DEFAULT_ACCEPTANCE_DISCLOSURE = 'This acceptance is a communication from a debt collector';\nconst DEFAULT_COUNTEROFFER_DISCLOSURE = 'This counteroffer is a communication from a debt collector';\n\n// Custom debounce hook\nconst useDebounce = (value, delay) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n\nconst AcceptOrCounteroffer = ({ account, validFirstPaymentDate, onSuccess }) => {\n const [selectedAction, setSelectedAction] = useState(\n account.latest_historical_offer?.first_payment_date >= validFirstPaymentDate \n ? 'accept' \n : 'counteroffer'\n );\n \n const [activeDropdown, setActiveDropdown] = useState(null);\n const [isDisabled, setIsDisabled] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [formData, setFormData] = useState({\n total_amount: '',\n payments: '',\n first_payment_date: '',\n tiers: [],\n disclosures: [selectedAction === 'accept' ? \n DEFAULT_ACCEPTANCE_DISCLOSURE :\n DEFAULT_COUNTEROFFER_DISCLOSURE, '']\n });\n\n const [lastPaymentAmountCents, setLastPaymentAmountCents] = useState(null);\n\n useEffect(() => {\n const disclosuresCpy = [...formData.disclosures];\n disclosuresCpy[0] = selectedAction === 'accept' ? \n DEFAULT_ACCEPTANCE_DISCLOSURE :\n DEFAULT_COUNTEROFFER_DISCLOSURE;\n setFormData({ ...formData, disclosures: disclosuresCpy });\n }, [selectedAction]);\n\n const debouncedTiers = useDebounce(JSON.stringify(formData), 500);\n\n // Add a unique row identifier\n const rowId = `action-row-${account.customer_document.id}`;\n\n // Modify useEffect to run once on mount\n useEffect(() => {\n // Adjust textareas\n setTimeout(() => {\n document.querySelectorAll('textarea').forEach(adjustTextareaHeight);\n }, 0);\n }, []); // Empty dependency array - runs once on mount\n\n // Add useEffect for click outside handler\n useEffect(() => {\n const handleClickOutside = (event) => {\n const dropdowns = document.querySelectorAll(`#${rowId} .action-dropdown`);\n const buttons = document.querySelectorAll(`#${rowId} .action-button`);\n \n // Don't close if clicking on any button in this row\n if (Array.from(buttons).some(button => button.contains(event.target))) {\n return;\n }\n \n // Close if clicking outside dropdowns\n if (!Array.from(dropdowns).some(dropdown => dropdown.contains(event.target))) {\n setTimeout(() => {\n setActiveDropdown(null);\n }, 0);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [rowId]);\n\n const handleAcceptOffer = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n setIsDisabled(true);\n \n if (!confirm(\"Are you sure you want to accept this offer?\")) {\n setIsLoading(false);\n setIsDisabled(false);\n return;\n }\n\n const response = await fetch('/collectors/api/accept_offer', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({ \n customer_document_id: account.customer_document.id,\n disclosures: formData.disclosures.filter(d => d.trim() !== '')\n })\n });\n const data = await response.json();\n if (data.success) {\n onSuccess?.(data);\n return data;\n } else {\n alert(data.error || 'Error processing request');\n setIsLoading(false);\n setIsDisabled(false);\n }\n };\n\n function constructRequestBodyForCounteroffer() {\n const phases = formData.tiers.map((tier, index) => ({\n index,\n // when parsing to determine the amount in cents, there might be a rounding error.\n // so we round to the nearest cent. (these errors are always a tiny tiny fraction of a cent)\n payment_amount_cents: Math.round(parseFloat(tier.total) * 100).toString(),\n iterations: parseInt(tier.payments),\n }));\n\n const body = {\n customer_document_id: account.customer_document.id,\n total_amount: formData.total_amount,\n first_payment_date: formData.first_payment_date,\n disclosures: formData.disclosures.filter(d => d.trim() !== ''),\n phases: phases\n };\n if (phases.length === 0) {\n body.payments = formData.payments;\n }\n return body;\n }\n\n const handleCounterOffer = async (event) => {\n event.preventDefault();\n setIsLoading(true);\n setIsDisabled(true);\n\n if (!confirm(\"Are you sure you want to submit this counteroffer?\")) {\n setIsLoading(false);\n setIsDisabled(false);\n return;\n }\n\n const body = constructRequestBodyForCounteroffer();\n\n const response = await fetch('/collectors/api/create_counteroffer', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify(body)\n });\n\n const data = await response.json();\n if (data.success) {\n onSuccess?.(data);\n return data;\n } else {\n alert(data.error || data.errors[0] || 'Error processing request');\n setIsLoading(false);\n setIsDisabled(false);\n }\n };\n \n // Add form change handler\n const handleFormChange = (e) => {\n const { name, value } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n\n // Add this new function to handle dropdown visibility\n const ensureDropdownVisible = () => {\n const tableContainer = document.getElementById('table-container');\n const dropdown = document.querySelector(`#${rowId} .action-dropdown`);\n \n if (tableContainer && dropdown) {\n const dropdownRect = dropdown.getBoundingClientRect();\n const containerRect = tableContainer.getBoundingClientRect();\n \n // Calculate if dropdown extends beyond visible area\n const overflowAmount = (dropdownRect.bottom - containerRect.bottom) + 20; // 20px buffer\n \n if (overflowAmount > 0) {\n const scrollOptions = {\n top: tableContainer.scrollTop + overflowAmount,\n behavior: 'smooth'\n };\n tableContainer.scroll(scrollOptions);\n }\n }\n };\n\n // Update handleDisclosureChange to include scrolling\n const handleDisclosureChange = (index, value) => {\n if (index === 0) return;\n \n setFormData(prev => {\n const newDisclosures = [...prev.disclosures];\n newDisclosures[index] = value;\n \n if (index === newDisclosures.length - 1 && value.trim() !== '') {\n newDisclosures.push('');\n }\n \n return {\n ...prev,\n disclosures: newDisclosures\n };\n });\n\n // Add setTimeout to ensure the DOM has updated\n setTimeout(ensureDropdownVisible, 0);\n };\n\n // Update adjustTextareaHeight to include scrolling\n const adjustTextareaHeight = (textarea) => {\n if (!textarea) return;\n const originalHeight = textarea.style.height;\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n \n // Only trigger scroll if height actually changed\n if (originalHeight !== textarea.style.height) {\n setTimeout(ensureDropdownVisible, 0);\n }\n };\n\n // Update click handler for buttons\n const handleButtonClick = (action) => {\n // If clicking the same button that's already active, close it\n if (activeDropdown === action) {\n setActiveDropdown(null);\n } else {\n // If clicking a different button, switch to it immediately\n setActiveDropdown(action);\n \n // Scroll to make dropdown visible\n setTimeout(() => {\n document.querySelectorAll('textarea').forEach(adjustTextareaHeight);\n ensureDropdownVisible();\n }, 0);\n }\n setSelectedAction(action);\n };\n\n const handleDeleteDisclosure = (index) => {\n if (index === 0) return; // Don't allow deletion of the first disclosure\n \n setFormData(prev => ({\n ...prev,\n disclosures: prev.disclosures.filter((_, i) => i !== index)\n }));\n\n // Ensure dropdown remains visible after deletion\n setTimeout(ensureDropdownVisible, 0);\n };\n\n const showAcceptButton = account.latest_historical_offer?.first_payment_date >= validFirstPaymentDate;\n\n // Add this helper function near the top of the component\n const calculateBalanceRemaining = (totalAmount, tiers) => {\n if (!totalAmount || !tiers?.length) return '$0.00';\n \n const total = parseFloat(totalAmount.replace(/[^0-9.-]+/g, ''));\n const tiersTotal = tiers.reduce((sum, tier) => {\n const tierTotal = parseFloat(tier.total.replace(/[^0-9.-]+/g, '') || 0);\n const payments = parseInt(tier.payments || 0);\n return sum + (tierTotal * payments);\n }, 0);\n \n return (total - tiersTotal).toLocaleString('en-US', {\n style: 'currency',\n currency: 'USD'\n });\n };\n\n // Add this helper function to check if a tier is fully filled\n const isTierComplete = (tier) => {\n return tier.total?.trim() !== '' && tier.payments?.trim() !== '';\n };\n\n // Add this helper function to calculate the missing field\n const calculateMissingField = (tier, index) => {\n const totalAmount = parseFloat(formData.total_amount.replace(/[^0-9.-]+/g, ''));\n const remainingBalance = parseFloat(calculateBalanceRemaining(formData.total_amount, formData.tiers).replace(/[^0-9.-]+/g, ''));\n \n if (remainingBalance <= 0) return;\n\n const newTiers = [...formData.tiers];\n \n // If payment amount is missing\n if (tier.payments && !tier.total) {\n const payments = parseInt(tier.payments);\n const totalPerPayment = remainingBalance / payments;\n newTiers[index].total = totalPerPayment.toFixed(2);\n }\n // If number of payments is missing\n else if (tier.total && !tier.payments) {\n const tierTotal = parseFloat(tier.total.replace(/[^0-9.-]+/g, ''));\n const payments = Math.ceil(remainingBalance / tierTotal);\n newTiers[index].payments = payments.toString();\n }\n\n setFormData(prev => ({ ...prev, tiers: newTiers }));\n };\n\n // Add this helper function to determine if calculator should be enabled\n const isCalculatorEnabled = (tier, index) => {\n const remainingBalance = parseFloat(calculateBalanceRemaining(formData.total_amount, formData.tiers).replace(/[^0-9.-]+/g, ''));\n \n // Disable if no total amount set or balance is 0\n if (!formData.total_amount || remainingBalance <= 0) return false;\n \n // Disable if both fields are empty or both are filled\n if ((!tier.total && !tier.payments) || (tier.total && tier.payments)) return false;\n \n // Enable if exactly one field is filled\n return (tier.total && !tier.payments) || (!tier.total && tier.payments);\n };\n\n useEffect(() => {\n const fetchLastPayment = async () => {\n if (!debouncedTiers) return;\n \n // short-circuit if we're still missing some values.\n const formData = JSON.parse(debouncedTiers);\n if (!formData.total_amount) return;\n if (formData.total_amount && !formData.payments && formData.tiers.length === 0) return;\n if (formData.tiers.length > 0 && !formData.tiers.every(tier => \n tier.total?.trim() !== '' && tier.payments?.trim() !== ''\n )) {\n return;\n }\n \n try {\n const body = constructRequestBodyForCounteroffer();\n const response = await fetch('/collectors/api/determine_offer_last_payment', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]')?.content,\n },\n body: JSON.stringify(body)\n });\n\n if (!response.ok) throw new Error('Network response was not ok');\n \n const data = await response.json();\n \n if (data.success && data.has_extra_tier) {\n setLastPaymentAmountCents(data.last_payment_amount_cents);\n } else {\n setLastPaymentAmountCents(null);\n }\n } catch (error) {\n setLastPaymentAmountCents(null);\n }\n };\n\n fetchLastPayment();\n }, [debouncedTiers]);\n\n return (\n
\n
\n \n {showAcceptButton && (\n \n handleButtonClick('accept')}\n >\n Accept\n \n \n )}\n\n {/* Accept dropdown */}\n {activeDropdown === 'accept' && (\n
\n
\n
\n \n
\n {/* Disclosures section */}\n
\n \n

Disclosures

\n
\n {formData.disclosures.map((disclosure, index) => (\n
\n {\n handleDisclosureChange(index, e.target.value);\n }}\n isTextarea\n rows={1}\n readOnly={index === 0}\n style={{ flex: 1 }}\n />\n handleDeleteDisclosure(index)}\n style={{ \n minWidth: '24px',\n visibility: formData.disclosures.length > 1 && disclosure.trim() !== '' && index !== 0\n ? 'visible' \n : 'hidden'\n }}\n >\n ×\n \n
\n ))}\n
\n
\n
\n )}\n
\n\n {showAcceptButton && (\n  \n )}\n\n \n \n handleButtonClick('counteroffer')}\n >\n Counteroffer\n \n \n\n {/* Counteroffer dropdown */}\n {activeDropdown === 'counteroffer' && (\n
\n
\n {/* Show original configuration if no tiers */}\n {formData.tiers.length === 0 ? (\n
\n
\n \n \n \n
\n \n \n
\n ) : (\n <>\n {/* First row - Total amount and date when using tiers */}\n
\n \n \n \n \n
\n\n {/* Tier rows */}\n {formData.tiers.map((tier, index) => (\n
\n {\n const newTiers = [...formData.tiers];\n newTiers[index].total = e.target.value;\n setFormData(prev => ({ ...prev, tiers: newTiers }));\n }}\n style={{ width: '125px' }}\n required\n />\n
\n {\n const newTiers = [...formData.tiers];\n newTiers[index].payments = e.target.value;\n setFormData(prev => ({ ...prev, tiers: newTiers }));\n }}\n style={{ width: '80px' }}\n required\n />\n calculateMissingField(tier, index)}\n style={{ padding: '4px 8px' }}\n >\n \n \n
\n {\n setFormData(prev => ({\n ...prev,\n tiers: prev.tiers.length <= 2 ? [] : prev.tiers.filter((_, i) => i !== index)\n }));\n setTimeout(ensureDropdownVisible, 0);\n }}\n style={{ minWidth: '24px' }}\n >\n ×\n \n {index === formData.tiers.length - 1 && (\n \n )}\n
\n ))}\n \n )}\n\n\n {lastPaymentAmountCents && (\n \n Final payment of tier {formData.tiers.length} will be ${lastPaymentAmountCents / 100}\n \n )}\n
\n\n {/* Disclosures section */}\n
\n \n

Disclosures

\n
\n {formData.disclosures.map((disclosure, index) => (\n
\n {\n handleDisclosureChange(index, e.target.value);\n }}\n isTextarea\n rows={1}\n readOnly={index === 0}\n style={{ flex: 1 }}\n />\n handleDeleteDisclosure(index)}\n style={{ \n minWidth: '24px',\n visibility: formData.disclosures.length > 1 && disclosure.trim() !== '' && index !== 0\n ? 'visible' \n : 'hidden'\n }}\n >\n ×\n \n
\n ))}\n
\n
\n
\n )}\n
\n
\n
\n );\n};\n\nexport default AcceptOrCounteroffer;","import React, { useState, useEffect } from 'react';\nimport Tooltip from '../../../shared/Tooltip';\n\nconst SendPaymentDetails = ({ account, onSuccess }) => {\n const [formData, setFormData] = useState({\n file_number: '',\n payee: '',\n recipient: '',\n mailing_address: ''\n });\n const [formState, setFormState] = useState({\n isSubmitting: false,\n isSubmitted: false,\n error: null\n });\n const [activeDropdown, setActiveDropdown] = useState(false);\n \n // Add a unique row identifier\n const rowId = `payment-details-row-${account.customer_document.id}`;\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n const dropdown = document.querySelector(`#${rowId} .action-dropdown`);\n const button = document.querySelector(`#${rowId} .action-button`);\n \n // Don't close if clicking on the button\n if (button?.contains(event.target)) {\n return;\n }\n \n // Close if clicking outside dropdown\n if (!dropdown?.contains(event.target)) {\n setActiveDropdown(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [rowId]);\n\n // Add this new function to handle dropdown visibility\n const ensureDropdownVisible = () => {\n const tableContainer = document.getElementById('table-container');\n const dropdown = document.querySelector(`#${rowId} .action-dropdown`);\n \n if (tableContainer && dropdown) {\n const dropdownRect = dropdown.getBoundingClientRect();\n const containerRect = tableContainer.getBoundingClientRect();\n \n // Calculate if dropdown extends beyond visible area\n const overflowAmount = (dropdownRect.bottom - containerRect.bottom) + 20; // 20px buffer\n \n if (overflowAmount > 0) {\n const scrollOptions = {\n top: tableContainer.scrollTop + overflowAmount,\n behavior: 'smooth'\n };\n tableContainer.scroll(scrollOptions);\n }\n }\n };\n\n const handleButtonClick = () => {\n setActiveDropdown(!activeDropdown);\n \n // Scroll when opening dropdown\n if (!activeDropdown) {\n const tableContainer = document.getElementById('table-container');\n if (tableContainer) {\n const scrollOptions = {\n left: tableContainer.scrollWidth,\n behavior: 'smooth'\n };\n setTimeout(() => {\n tableContainer.scroll(scrollOptions);\n ensureDropdownVisible();\n }, 0);\n }\n }\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setFormState({ ...formState, isSubmitting: true, error: null });\n\n if (!confirm(\"Are you sure you want to submit?\")) {\n setFormState({ ...formState, isSubmitting: false, isSubmitted: false });\n return;\n }\n \n try {\n const response = await fetch('/collectors/api/update_payment_details', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({\n customer_document_id: account.customer_document.id,\n ...formData\n })\n });\n\n if (response.ok) {\n setFormState({ isSubmitting: false, isSubmitted: true, error: null });\n onSuccess();\n } else {\n const data = await response.json();\n alert(data.error);\n setFormState({ isSubmitting: false, isSubmitted: false });\n }\n } catch (e) {\n alert(e.message);\n setFormState({ isSubmitting: false, isSubmitted: false });\n }\n };\n\n const handleChange = (e) => {\n setFormData(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n };\n\n return (\n
\n
\n \n \n \n Enter Payment Details\n \n \n\n {activeDropdown && (\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n )}\n
\n
\n
\n );\n};\n\nexport default SendPaymentDetails;","import React, { useState, useEffect } from 'react';\nimport Tooltip from '../../../shared/Tooltip';\n\nconst UploadSettlementAgreement = ({ account, onSuccess }) => {\n const [file, setFile] = useState(null);\n const [isUploaded, setIsUploaded] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [activeDropdown, setActiveDropdown] = useState(false);\n const [disclosures, setDisclosures] = useState(['This document is a communication from a debt collector.', '']);\n \n // Add unique row identifier\n const rowId = `upload-settlement-row-${account.customer_document.id}`;\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n const dropdown = document.querySelector(`#${rowId} .action-dropdown`);\n const button = document.querySelector(`#${rowId} .action-button`);\n \n if (button?.contains(event.target)) {\n return;\n }\n \n if (!dropdown?.contains(event.target)) {\n setActiveDropdown(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [rowId]);\n\n // Add this new function to handle dropdown visibility\n const ensureDropdownVisible = () => {\n const tableContainer = document.getElementById('table-container');\n const dropdown = document.querySelector(`#${rowId} .action-dropdown`);\n \n if (tableContainer && dropdown) {\n const dropdownRect = dropdown.getBoundingClientRect();\n const containerRect = tableContainer.getBoundingClientRect();\n \n // Calculate if dropdown extends beyond visible area\n const overflowAmount = (dropdownRect.bottom - containerRect.bottom) + 20; // 20px buffer\n \n if (overflowAmount > 0) {\n const scrollOptions = {\n top: tableContainer.scrollTop + overflowAmount,\n behavior: 'smooth'\n };\n tableContainer.scroll(scrollOptions);\n }\n }\n };\n\n const handleButtonClick = () => {\n setActiveDropdown(!activeDropdown);\n \n if (!activeDropdown) {\n const tableContainer = document.getElementById('table-container');\n if (tableContainer) {\n const scrollOptions = {\n left: tableContainer.scrollWidth,\n behavior: 'smooth'\n };\n setTimeout(() => {\n tableContainer.scroll(scrollOptions);\n ensureDropdownVisible();\n }, 0);\n }\n }\n };\n\n const handleFileChange = (e) => {\n setFile(e.target.files[0]);\n };\n\n // Update adjustTextareaHeight to include scrolling\n const adjustTextareaHeight = (textarea) => {\n if (!textarea) return;\n const originalHeight = textarea.style.height;\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n \n // Only trigger scroll if height actually changed\n if (originalHeight !== textarea.style.height) {\n setTimeout(ensureDropdownVisible, 0);\n }\n };\n\n // Update handleDisclosureChange to include scrolling\n const handleDisclosureChange = (index, value) => {\n const newDisclosures = [...disclosures];\n newDisclosures[index] = value;\n \n // Add new empty disclosure if typing in last field\n if (index === newDisclosures.length - 1 && value.trim() !== '') {\n newDisclosures.push('');\n }\n \n setDisclosures(newDisclosures);\n \n // Add setTimeout to ensure the DOM has updated\n setTimeout(ensureDropdownVisible, 0);\n };\n\n // Update handleDeleteDisclosure to include scrolling\n const handleDeleteDisclosure = (index) => {\n const disclosure = disclosures[index];\n if (!disclosure || disclosure.trim() === '') {\n return;\n }\n setDisclosures(disclosures.filter((_, i) => i !== index));\n \n // Ensure dropdown remains visible after deletion\n setTimeout(ensureDropdownVisible, 0);\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n if (!confirm(\"Are you sure you want to submit?\")) {\n return;\n }\n \n setIsSubmitting(true);\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('customer_document_id', account.customer_document.id);\n \n // Fix: Append each disclosure separately\n const filteredDisclosures = disclosures.filter(d => d.trim() !== '');\n filteredDisclosures.forEach(disclosure => {\n formData.append('disclosures[]', disclosure);\n });\n\n try {\n const response = await fetch('/collectors/api/upload_settlement_agreement', {\n method: 'POST',\n headers: {\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content,\n },\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n \n setIsUploaded(true);\n onSuccess();\n } catch (error) {\n console.error('Error uploading settlement agreement:', error);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n if (isUploaded) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n
\n \n \n \n Upload Settlement Agreement\n \n \n\n {activeDropdown && (\n
\n
\n
\n
\n \n \n \n
\n \n \n {isSubmitting ? (\n <>\n \n Submitting...\n \n ) : 'Submit'}\n \n \n
\n\n {/* Updated Disclosures section */}\n
\n {disclosures.map((disclosure, index) => (\n
\n {\n handleDisclosureChange(index, e.target.value);\n adjustTextareaHeight(e.target);\n }}\n onFocus={(e) => adjustTextareaHeight(e.target)}\n className=\"form-control form-control-sm\"\n placeholder={`Disclosure ${index + 1}`}\n rows={1}\n style={{ overflow: 'hidden', resize: 'none' }}\n />\n handleDeleteDisclosure(index)}\n style={{ \n minWidth: '24px',\n visibility: disclosures.length > 1 && disclosure.trim() !== '' \n ? 'visible' \n : 'hidden'\n }}\n >\n ×\n \n
\n ))}\n
\n
\n
\n )}\n
\n
\n
\n );\n};\n\nexport default UploadSettlementAgreement;","import React, { useState, useEffect } from 'react';\nimport { formatDollars, extractCentsFromDollarString } from '../../../other/money';\nimport AccountDetails from './AccountDetails';\n\nimport AcceptOrCounteroffer from './actions/AcceptOrCounteroffer';\nimport SendPaymentDetails from './actions/SendPaymentDetails';\nimport UploadSettlementAgreement from './actions/UploadSettlementAgreement';\n\nconst AccountRow = ({ validFirstPaymentDate, account, columnsToShow }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [currentAction, setCurrentAction] = useState(null);\n const [isArchived, setIsArchived] = useState(!!account.customer_document.archived_by_law_firm_on);\n\n useEffect(() => {\n setCurrentAction(account.current_action);\n setIsLoading(false);\n }, [account.current_action]);\n\n useEffect(() => {\n setIsExpanded(false);\n }, [account.current_action]);\n\n function handleRefreshCurrentAction() {\n setIsLoading(true);\n fetch(`/collectors/api/get_current_action?customer_document_id=${account.customer_document.id}`)\n .then(response => response.json())\n .then(data => {\n setCurrentAction(data);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n\n const handleArchiveAction = () => {\n const action = isArchived ? 'unarchive' : 'archive';\n const confirmMessage = `Are you sure you want to ${action} this account?`;\n \n if (window.confirm(confirmMessage)) {\n setIsLoading(true);\n fetch(`/collectors/api/${action}_document`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n },\n body: JSON.stringify({\n customer_document_id: account.customer_document.id\n })\n })\n .then(response => {\n if (!response.ok) throw new Error(`${action} failed`);\n setIsArchived(!isArchived);\n return response.json();\n })\n .catch(error => {\n alert(`Failed to ${action} document`);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n };\n\n return (\n <>\n setIsExpanded(!isExpanded)}\n >\n {columnsToShow.includes('Name') && (\n \n \n \n )}\n {columnsToShow.includes('Birthdate') && (\n \n {account.birthdate && new Date(account.birthdate).toLocaleDateString()}\n \n )}\n {columnsToShow.includes('Reference') && (\n \n {account.civil_number || 'n/a'}\n \n )}\n {columnsToShow.includes('Lawsuit State') && (\n \n {account.lawsuit_state || 'n/a'}\n \n )}\n {columnsToShow.includes('Plaintiff') && (\n \n {account.plaintiff_name || 'n/a'}\n \n )}\n {columnsToShow.includes('Amount') && (\n \n {account.lawsuit_amount && formatDollars(account.lawsuit_amount)}\n \n )}\n {columnsToShow.includes('Status') && (\n \n {account.last_action || '-'}\n \n )}\n {columnsToShow.includes('Status Date') && (\n \n {account.latest_event?.created_at && new Date(account.latest_event.created_at).toLocaleDateString()}\n \n )}\n {columnsToShow.includes('Offer Amount') && (\n \n {account.latest_historical_offer?.total_amount_cents && \n formatDollars(account.latest_historical_offer.total_amount_cents)}\n \n )}\n {columnsToShow.includes('# Pays') && (\n \n {account.latest_historical_offer?.payments || '-'}\n \n )}\n {columnsToShow.includes('# Tiers') && (\n \n {account.latest_historical_offer?.phases?.length || 1 }\n \n )}\n {columnsToShow.includes('%') && (\n \n {account.latest_historical_offer?.total_amount_cents && account.lawsuit_amount && (\n `${Math.round((account.latest_historical_offer.total_amount_cents / extractCentsFromDollarString(account.lawsuit_amount)) * 100)}%`\n )}\n \n )}\n {columnsToShow.includes('First Payment') && (\n \n
\n {account.latest_historical_offer?.first_payment_date < validFirstPaymentDate && [\"offer\", \"counteroffer\", \"sent_confusing_response_to_offer\"].includes(account.latest_event?.action) && (\n
\n
!
\n
\n First payment date must be on or after {account.latest_historical_offer?.first_payment_date}. You'll need to counteroffer with a new payment date.\n
\n
\n )}\n \n {account.latest_historical_offer?.first_payment_date && \n new Date(account.latest_historical_offer.first_payment_date + 'T00:00:00').toLocaleDateString('en-US', {\n month: 'numeric',\n day: 'numeric',\n year: 'numeric'\n })\n }\n \n
\n \n )}\n \n
\n \n
    \n
  • \n \n
  • \n
\n
\n \n {isLoading &&
}\n {!isLoading && \n {currentAction.type == \"accept_or_counteroffer\" &&
e.stopPropagation()}>
}\n {currentAction.type == \"waiting_for_customer\" &&
Waiting on customer response to counteroffer.
}\n \n {currentAction.type == \"request_payment_details\" &&
e.stopPropagation()}>
}\n {currentAction.type == \"request_settlement_agreement\" &&
e.stopPropagation()}>
}\n\n {currentAction.type == \"waiting_for_signed_settlement_agreement\" &&
Waiting for signed settlement agreement.
}\n {currentAction.type == \"waiting_for_payment\" &&
Waiting for first payment.
}\n \n {/* Payment status */}\n {currentAction.type == \"payment_setup_complete\" &&
Consumer set up auto-pay but hasn't made a payment yet.
}\n {currentAction.type == \"first_payment_made\" &&
Consumer made their first payment{currentAction.params.latest_payment_intent ? ` on ${new Date(currentAction.params.latest_payment_intent.created_at).toLocaleDateString()}` : ''}.
}\n }\n \n {isExpanded && (\n \n \n \n \n \n )}\n \n );\n};\n\nexport default AccountRow;","import React, { useState, useEffect } from 'react';\nimport AccountRow from './AccountRow';\nimport Tooltip from '../../shared/Tooltip';\nimport { extractCentsFromDollarString } from '../../../other/money';\n\nconst SortIcon = ({ column, currentSort }) => {\n const isActive = currentSort.column === column;\n const direction = currentSort.direction;\n\n return (\n \n \n \n \n );\n};\n\nconst AccountsTable = ({ \n accounts, \n setAccounts,\n selectedFilterValues, \n onLoadMore, \n hasMorePages, \n hasPaymentDetails, \n validFirstPaymentDate \n}) => {\n const [activeDropdownId, setActiveDropdownId] = useState(null);\n const [sortConfig, setSortConfig] = React.useState({\n column: null,\n direction: 'asc'\n });\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n const dropdowns = document.querySelectorAll('.action-dropdown');\n const buttons = document.querySelectorAll('.action-button');\n \n if (\n !Array.from(dropdowns).some(dropdown => dropdown.contains(event.target)) &&\n !Array.from(buttons).some(button => button.contains(event.target))\n ) {\n setActiveDropdownId(null);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSort = (column) => {\n const direction = sortConfig.column === column && sortConfig.direction === 'asc' ? 'desc' : 'asc';\n setSortConfig({ column, direction });\n\n const actionOrder = [\n \"Consumer Offer\",\n \"Lawyer Sent Confusing Response to Offer\",\n \"Consumer Counteroffer\",\n \"Lawyer Counteroffer\",\n \"Lawyer Accept\",\n \"Consumer Accept\",\n \"Lawyer Sent Confusing Response To Payment Details Request\",\n \"Lawyer Sent Payment Details\",\n \"Lawyer Sent Settlement Agreement\",\n \"Consumer Signed Settlement Agreement\"\n ];\n\n const sortedAccounts = [...accounts].sort((a, b) => {\n const compareValue = (val1, val2) => {\n if (val1 < val2) return -1;\n if (val1 > val2) return 1;\n return 0;\n };\n\n let comparison = 0;\n switch (column) {\n case 'name':\n comparison = compareValue(a.customer_name?.toLowerCase(), b.customer_name?.toLowerCase());\n break;\n case 'birthdate':\n comparison = compareValue(new Date(a.birthdate), new Date(b.birthdate));\n break;\n case 'reference':\n comparison = compareValue(a.civil_number?.toLowerCase(), b.civil_number?.toLowerCase());\n break;\n case 'lawsuitState':\n comparison = compareValue(a.lawsuit_state?.toLowerCase(), b.lawsuit_state?.toLowerCase());\n break;\n case 'plaintiff':\n comparison = compareValue(a.plaintiff_name?.toLowerCase(), b.plaintiff_name?.toLowerCase());\n break;\n case 'amount':\n comparison = compareValue(parseFloat(a.lawsuit_amount?.replace(/[$,]/g, '')) || 0, parseFloat(b.lawsuit_amount?.replace(/[$,]/g, '')) || 0);\n break;\n case 'status':\n const indexA = actionOrder.indexOf(a.last_action);\n const indexB = actionOrder.indexOf(b.last_action);\n comparison = compareValue(indexA, indexB);\n break;\n case 'statusDate':\n comparison = compareValue(new Date(a.latest_event.created_at), new Date(b.latest_event.created_at));\n break;\n case 'offerAmount':\n comparison = compareValue(parseFloat(a.latest_historical_offer?.total_amount_cents) || 0, parseFloat(b.latest_historical_offer?.total_amount_cents) || 0);\n break;\n case 'numberOfPayments':\n comparison = compareValue(parseInt(a.latest_historical_offer?.payments) || 0, parseInt(b.latest_historical_offer?.payments) || 0);\n break;\n case 'numberOfTiers':\n comparison = compareValue(parseInt(a.latest_historical_offer?.phases) || 0, parseInt(b.latest_historical_offer?.phases) || 0);\n break;\n case 'percentage':\n comparison = compareValue(\n (a.latest_historical_offer?.total_amount_cents && a.lawsuit_amount ? \n Math.round((a.latest_historical_offer.total_amount_cents / extractCentsFromDollarString(a.lawsuit_amount)) * 100) : 0),\n (b.latest_historical_offer?.total_amount_cents && b.lawsuit_amount ?\n Math.round((b.latest_historical_offer.total_amount_cents / extractCentsFromDollarString(b.lawsuit_amount)) * 100) : 0)\n );\n break;\n case 'firstPayment':\n comparison = compareValue(new Date(a.latest_historical_offer?.first_payment_date), new Date(b.latest_historical_offer?.first_payment_date));\n break;\n default:\n comparison = 0;\n }\n\n return direction === 'asc' ? comparison : -comparison;\n });\n\n setAccounts(sortedAccounts);\n };\n\n const columnsToShow = selectedFilterValues.columns || [];\n\n console.log(\"--------------------------------\");\n console.log(columnsToShow);\n console.log(\"--------------------------------\");\n \n return (\n <>\n
\n \n \n \n {columnsToShow.includes('Name') && (\n \n )}\n {columnsToShow.includes('Birthdate') && (\n \n )}\n {columnsToShow.includes('Reference') && (\n \n )}\n {columnsToShow.includes('Lawsuit State') && (\n \n )}\n {columnsToShow.includes('Plaintiff') && (\n \n )}\n {columnsToShow.includes('Amount') && (\n \n )}\n {columnsToShow.includes('Status') && (\n \n )}\n {columnsToShow.includes('Status Date') && (\n \n )}\n {columnsToShow.includes('Offer Amount') && (\n \n )}\n {columnsToShow.includes('# Pays') && (\n \n )}\n {columnsToShow.includes('# Tiers') && (\n \n )}\n {columnsToShow.includes('%') && (\n \n )}\n {columnsToShow.includes('First Payment') && (\n \n )}\n \n \n \n \n \n {accounts.map(account => (\n \n ))}\n \n
handleSort('name')} style={{ cursor: 'pointer' }}>\n
\n Name \n
\n
handleSort('birthdate')} style={{ cursor: 'pointer' }}>\n
\n Birthdate \n
\n
handleSort('reference')} style={{ cursor: 'pointer' }}>\n \n
\n Reference \n
\n
\n
handleSort('lawsuitState')} style={{ cursor: 'pointer' }}>\n
\n Lawsuit State \n
\n
handleSort('plaintiff')} style={{ cursor: 'pointer' }}>\n
\n Plaintiff \n
\n
handleSort('amount')} style={{ cursor: 'pointer' }}>\n \n
\n Amount \n
\n
\n
handleSort('status')} style={{ cursor: 'pointer' }}>\n \n
\n Status \n
\n
\n
handleSort('statusDate')} style={{ cursor: 'pointer' }}>\n \n
\n Status Date \n
\n
\n
handleSort('offerAmount')} style={{ cursor: 'pointer' }}>\n \n
\n Offer Amount \n
\n
\n
handleSort('numberOfPayments')} style={{ cursor: 'pointer' }}>\n \n
\n # Pays \n
\n
\n
handleSort('numberOfTiers')} style={{ cursor: 'pointer' }}>\n
\n # Tiers \n
\n
handleSort('percentage')} style={{ cursor: 'pointer' }}>\n \n
\n % \n
\n
\n
handleSort('firstPayment')} style={{ cursor: 'pointer' }}>\n \n
\n First Payment \n
\n
\n
handleSort('status')} style={{ cursor: 'pointer' }}>\n \n
\n Action \n
\n
\n
\n\n {hasMorePages && (\n
\n \n
\n )}\n
\n \n );\n};\n\nexport default AccountsTable;\n","import React, { useEffect, useState } from 'react';\nimport Layout from './Layout';\nimport Tooltip from '../shared/Tooltip';\nimport Alert from '../shared/Alert';\n\nimport { formatDollars } from '../../other/money';\n\nimport Filters from './accounts/Filters';\nimport AccountsTable from './accounts/AccountsTable';\n\nconst FILTERS_NOT_IN_URL_BAR = ['columns'];\nconst DEFAULT_SHOWN_COLUMNS = ['Name', 'Reference', 'Amount', 'Status', 'Status Date', 'Offer Amount', '# Pays', '# Tiers', '%', 'First Payment']\n\nconst Accounts = () => {\n const [basicStats, setBasicStats] = useState(null);\n const [accountsData, setAccountsData] = useState(null);\n const [scope, setScope] = useState(null);\n const [numPages, setNumPages] = useState(() => {\n const urlParams = new URLSearchParams(window.location.search);\n return parseInt(urlParams.get('num_pages')) || 1;\n });\n const [collectorMetrics, setCollectorMetrics] = useState(null);\n\n const [selectedFilterValues, setSelectedFilterValues] = useState(() => {\n const urlParams = new URLSearchParams(window.location.search);\n const initialValues = {\n columns: DEFAULT_SHOWN_COLUMNS // Set default columns\n };\n \n // First check for search parameter specifically\n const searchValue = urlParams.get('filters[search]');\n if (searchValue) {\n initialValues.search = searchValue;\n }\n\n // Check for customer_document_id specifically\n const customerDocumentId = urlParams.get('filters[customer_document_id]');\n if (customerDocumentId) {\n initialValues.customer_document_id = customerDocumentId;\n }\n \n // Extract all other filter parameters from URL\n for (const [key, value] of urlParams.entries()) {\n if (key.startsWith('filters[') && key.endsWith(']')) {\n const matches = key.match(/filters\\[([^\\]]+)\\]\\[([^\\]]+)\\]/);\n if (!matches) {\n // Handle simple filter parameters that don't have nested structure\n const simpleMatch = key.match(/filters\\[([^\\]]+)\\]/);\n if (simpleMatch && !['search', 'customer_document_id'].includes(simpleMatch[1])) {\n initialValues[simpleMatch[1]] = value;\n }\n continue;\n }\n \n const [, filterName, arrayIndexOrKey] = matches;\n \n if (['search', 'customer_document_id'].includes(filterName)) continue;\n \n if (!initialValues[filterName]) {\n initialValues[filterName] = Number.isInteger(parseInt(arrayIndexOrKey)) ? [] : {};\n }\n \n if (Number.isInteger(parseInt(arrayIndexOrKey))) {\n if (Array.isArray(initialValues[filterName])) {\n initialValues[filterName].push(value);\n }\n } else {\n if (!Array.isArray(initialValues[filterName])) {\n initialValues[filterName][arrayIndexOrKey] = value;\n }\n }\n }\n }\n \n return initialValues;\n });\n\n useEffect(() => {\n const fetchCollectorMetrics = async () => {\n const collectorMetricsResponse = await fetch(`/collectors/api/calculate_collector_metrics`, {\n headers: {\n 'Accept': 'application/json',\n },\n });\n const collectorMetricsJson = await collectorMetricsResponse.json();\n setCollectorMetrics(collectorMetricsJson);\n };\n fetchCollectorMetrics();\n }, []);\n \n\n const [filters, setFilters] = useState([]);\n\n useEffect(() => {\n const urlParams = new URLSearchParams();\n urlParams.set('num_pages', numPages);\n \n Object.entries(selectedFilterValues)\n .filter(([key]) => key !== 'columns') // Exclude columns from URL parameters\n .forEach(([key, value]) => {\n if (typeof value === 'object') {\n // Handle range filters\n Object.entries(value).forEach(([rangeKey, rangeValue]) => {\n urlParams.set(`filters[${key}][${rangeKey}]`, rangeValue);\n });\n } else {\n // Handle regular filters\n urlParams.set(`filters[${key}]`, value);\n }\n });\n \n const newUrl = `${window.location.pathname}${urlParams.toString() ? '?' + urlParams.toString() : ''}`;\n window.history.pushState({}, '', newUrl);\n }, [selectedFilterValues, numPages]);\n\n const fetchAccountData = async () => {\n const urlParams = new URLSearchParams();\n urlParams.set('num_pages', numPages);\n \n const filtersString = Object.entries(selectedFilterValues)\n .filter(([key]) => !FILTERS_NOT_IN_URL_BAR.includes(key))\n .map(([key, value]) => {\n if (typeof value === 'object') {\n // Handle range filters\n return Object.entries(value)\n .map(([rangeKey, rangeValue]) => `filters[${key}][${rangeKey}]=${rangeValue}`)\n .join('&');\n }\n // Handle regular filters\n return `filters[${key}]=${value}`;\n }).join('&');\n \n const accountsDataResponse = await fetch(`/collectors/api/apply_filters?${urlParams.toString()}&${filtersString}`, {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const accountsDataJson = await accountsDataResponse.json();\n setAccountsData(accountsDataJson);\n };\n\n const fetchFilterValues = async () => {\n const filterValuesResponse = await fetch(`/collectors/api/filter_values`, {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const filterValuesJson = await filterValuesResponse.json();\n setFilters(filterValuesJson.filters);\n };\n\n const fetchBasicStats = async () => {\n const basicStatsResponse = await fetch(`/collectors/api/basic_stats`, {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const basicStatsJson = await basicStatsResponse.json();\n setBasicStats(basicStatsJson);\n };\n\n useEffect(() => {\n setAccountsData(null);\n fetchAccountData();\n }, [numPages, selectedFilterValues]);\n\n useEffect(() => {\n fetchBasicStats();\n fetchFilterValues();\n }, []);\n\n const handleFilterChange = (key, value, rangeKey = null) => {\n const clonedFilterValues = JSON.parse(JSON.stringify(selectedFilterValues));\n if (rangeKey) {\n // Handle range filters\n clonedFilterValues[key] = clonedFilterValues[key] || {};\n clonedFilterValues[key][rangeKey] = value;\n } else {\n // Handle regular filters\n clonedFilterValues[key] = value;\n }\n setSelectedFilterValues(clonedFilterValues);\n };\n\n const handleFilterRemove = (key) => {\n const clonedFilterValues = { ...selectedFilterValues };\n delete clonedFilterValues[key];\n setSelectedFilterValues(clonedFilterValues);\n };\n\n const handleClearAll = () => {\n window.location.href = '/collectors/accounts';\n };\n\n return (\n \n
\n {basicStats && (\n <>\n

Hello, {basicStats.law_firm.name}

\n\n

\n Consumers are notified that each communication is from a debt collector.\n

\n\n
\n \n {collectorMetrics === null ? (\n
\n \n
\n ) : (\n
\n
\n
\n
\n \n
Collected
\n

{formatDollars(collectorMetrics.collected_amount || 0, false)}

\n
\n
\n
\n
\n
\n
\n
\n \n
Uncollected
\n

{formatDollars(collectorMetrics.uncollected_amount || 0, false)}

\n
\n
\n
\n
\n
\n
\n
\n \n
Waiting on consumer
\n

{formatDollars(collectorMetrics.waiting_on_consumer_amount || 0, false)}

\n
\n
\n
\n
\n
\n
\n
\n \n
Waiting on you
\n

{formatDollars(collectorMetrics.waiting_on_collector_amount || 0, false)}

\n
\n
\n
\n
\n
\n
\n
\n \n
Your response rate
\n

= 90 ? 'text-success' : 'text-warning'}`}>\n {collectorMetrics.response_rate || 0}%\n

\n
\n
\n
\n
\n
\n
\n
\n \n
Recent offers
\n

+{collectorMetrics.offers_count || 0}

\n
\n
\n
\n
\n
\n )}\n\n

Accounts

\n\n {filters.length === 0 ? (\n
\n \n
\n ) : (\n \n )}\n \n )}\n\n {basicStats && !accountsData && (\n
\n {/* Table header placeholder */}\n
\n \n \n \n \n \n
\n {/* Table rows placeholders */}\n {[...Array(6)].map((_, i) => (\n
\n \n \n \n \n \n
\n ))}\n
\n )}\n\n\n {selectedFilterValues.customer_document_id && (\n \n Currently viewing a single account. Click handleFilterRemove('customer_document_id')}>here to view all of them.\n \n )}\n\n {accountsData && (\n <>\n {\n const clonedAccounts = JSON.parse(JSON.stringify(accountsData));\n clonedAccounts.customer_info = accounts;\n setAccountsData(clonedAccounts);\n }}\n hasPaymentDetails={accountsData.has_payment_details}\n validFirstPaymentDate={accountsData.valid_first_payment_date}\n />\n\n {accountsData.more_pages && (\n
\n \n
\n )}\n\n
\n Showing {accountsData.customer_info.length} out of {accountsData.total_count} matching accounts\n
\n \n )}\n
\n
\n );\n};\n\nexport default Accounts;","import React, { useState } from 'react';\nimport Layout from './Layout';\n\nconst DirectDeposit = () => {\n const [email, setEmail] = useState('');\n const [status, setStatus] = useState({ message: '', isError: false });\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setStatus({ message: '', isError: false });\n\n try {\n const response = await fetch('/collectors/api/digital_check_email', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({ email })\n });\n\n if (response.ok) {\n setStatus({ message: 'Email saved successfully!', isError: false });\n setEmail('');\n } else {\n const data = await response.json();\n setStatus({ message: data.message, isError: true });\n }\n } catch (error) {\n setStatus({ message: error.message, isError: true });\n }\n };\n\n return (\n \n
Direct Deposit
\n

Enter an email address to receive direct deposit instructions.

\n

\n We'll email a digital check with the option to deposit it directly to your bank account.
\n Most people use an email address for their accounting department.\n

\n \n
\n {status.message && (\n
\n {status.message}\n
\n )}\n
\n setEmail(e.target.value)}\n required\n />\n
\n\n \n
\n
\n );\n};\n\nexport default DirectDeposit;","import React, { useState, useEffect } from 'react';\nimport Layout from './Layout';\n\nconst PaymentDetails = () => {\n const [formData, setFormData] = useState({\n payee: '',\n mailing_name: '',\n mailing_street: '',\n mailing_city: '',\n mailing_state: '',\n mailing_zip: ''\n });\n\n useEffect(() => {\n fetchLawFirmData();\n }, []);\n\n const fetchLawFirmData = async () => {\n try {\n const response = await fetch('/collectors/api/get_law_firm');\n const data = await response.json();\n if (data.law_firm) {\n setFormData({\n payee: data.law_firm.payee || '',\n mailing_name: data.law_firm.mailing_name || null,\n mailing_street: data.law_firm.mailing_street || '',\n mailing_city: data.law_firm.mailing_city || '',\n mailing_state: data.law_firm.mailing_state || '',\n mailing_zip: data.law_firm.mailing_zip || ''\n });\n }\n } catch (error) {\n alert('Error loading law firm data');\n }\n };\n\n const handleChange = (e) => {\n const { name, value } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n try {\n const response = await fetch('/collectors/api/update_firm_payment_details', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({ law_firm: formData })\n });\n\n const data = await response.json();\n if (response.ok) {\n alert('Payment details updated successfully');\n } else {\n alert(data.message);\n }\n } catch (error) {\n alert('Error updating payment details');\n }\n };\n\n return (\n \n

Payment Details

\n
\n

Enter your firms payment details here.

\n
\n
\n

\n If you're being paid by check, each check will be sent in accord with these payment details. Note that you may not enter a PO Box.\n

\n For faster payment, set up direct deposit.\n

\n
\n
\n\n
\n
\n
\n {Object.entries({\n payee: 'Payee Name',\n mailing_name: 'Mailing Name (optional)',\n mailing_street: 'Street Address',\n mailing_city: 'City'\n }).map(([field, label]) => (\n
\n \n \n
\n ))}\n\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default PaymentDetails;","import React, { useState, useEffect } from 'react';\nimport Sidebar from './Sidebar';\nimport FloatingLabel from 'react-bootstrap/FloatingLabel';\nimport Form from 'react-bootstrap/Form';\nimport Alert from '../shared/Alert';\n\nconst Users = () => {\n const [users, setUsers] = useState([]);\n const [authToken, setAuthToken] = useState('');\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(true);\n const [newUserEmail, setNewUserEmail] = useState('');\n const [newUserRole, setNewUserRole] = useState('user');\n const [formError, setFormError] = useState(null);\n const [successMessage, setSuccessMessage] = useState(null);\n const [scope, setScope] = useState(null);\n const [currentUserEmail, setCurrentUserEmail] = useState(null);\n const [hoveredRowId, setHoveredRowId] = useState(null);\n\n const fetchUsers = async () => {\n try {\n const response = await fetch('/collectors/api/users', {\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n }\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch users');\n }\n\n const data = await response.json();\n setUsers(data.users);\n setAuthToken(data.auth_token);\n } catch (err) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n \n const fetchAuthInfo = async () => {\n const response = await fetch('/collectors/api/check_auth', {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const data = await response.json();\n setScope(data.scope);\n setCurrentUserEmail(data.current_user.email);\n };\n\n useEffect(() => {\n fetchUsers();\n fetchAuthInfo();\n }, []);\n\n const handleAddUser = async (e) => {\n e.preventDefault();\n setFormError(null);\n setSuccessMessage(null);\n\n try {\n const response = await fetch('/collectors/api/users/create', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({\n user: {\n email: newUserEmail,\n law_firm_scope: newUserRole\n }\n })\n });\n\n const data = await response.json();\n \n if (!response.ok) {\n throw new Error(data.message || 'Failed to create user');\n }\n\n // Refresh users list\n await fetchUsers();\n \n // Reset form and show success message\n setNewUserEmail('');\n setNewUserRole('user');\n setSuccessMessage(`User added successfully. An invite has been sent to ${newUserEmail}.`);\n \n // Clear success message after 5 seconds\n setTimeout(() => {\n setSuccessMessage(null);\n }, 5000);\n } catch (err) {\n setFormError(err.message);\n }\n };\n\n const handleRemoveUser = async (userId) => {\n if (!window.confirm('Are you sure you want to remove this user?')) {\n return;\n }\n\n try {\n const response = await fetch('/collectors/api/users/remove', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({\n user_id: userId\n })\n });\n\n if (!response.ok) {\n const data = await response.json();\n throw new Error(data.message || 'Failed to remove user');\n }\n\n await fetchUsers();\n } catch (err) {\n setError(err.message);\n }\n };\n\n if (loading) return
Loading...
;\n if (error) return
Error: {error}
;\n\n return (\n
\n
\n \n
\n
\n

Users

\n
\n \n
\n

Authentication Code


\n

People in your organization can use this code to access your dashboard.

\n e.target.select()}\n />\n
\n\n
\n\n
\n {successMessage && (\n \n {successMessage}\n \n )}\n {formError && (\n \n \n \n {formError}\n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n {users.map(user => (\n setHoveredRowId(user.id)}\n onMouseLeave={() => setHoveredRowId(null)}\n style={{ height: '80px' }}\n >\n \n \n \n \n ))}\n \n \n \n \n \n \n
EmailRole
{user.email}{user.law_firm_scope}\n {user.email !== currentUserEmail && hoveredRowId === user.id && (\n {\n e.preventDefault();\n handleRemoveUser(user.id);\n }}\n aria-label=\"Remove user\"\n >\n \n \n \n \n \n \n \n )}\n
\n \n setNewUserEmail(e.target.value)}\n required\n />\n \n \n setNewUserRole(e.target.value)}\n required\n >\n \n \n \n \n \n
\n
\n
\n
\n
\n );\n};\n\nexport default Users; ","import React, { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport Alert from '../shared/Alert';\n\nconst Login = () => {\n const navigate = useNavigate();\n const location = useLocation();\n const [errorMessage, setErrorMessage] = useState('');\n const [isEmailLogin, setIsEmailLogin] = useState(true);\n\n\n const handleLogin = async (credentials, queryString) => {\n try {\n const response = await fetch('/collectors/api/login', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify(credentials)\n });\n\n const data = await response.json();\n \n if (!response.ok || data.error) {\n setErrorMessage(data.error || 'An unexpected error occurred');\n return;\n }\n\n const authCheckResponse = await fetch('/collectors/api/check_auth', {\n headers: {\n 'Accept': 'application/json'\n }\n });\n\n if (authCheckResponse.ok) {\n navigate(`/collectors/accounts${queryString}`);\n } else {\n setErrorMessage('Login succeeded but session initialization failed. Please try again.');\n }\n \n } catch (error) {\n console.error('Error during login:', error);\n setErrorMessage('A network error occurred. Please check your connection and try again.');\n }\n };\n\n useEffect(() => {\n const checkAuthAndToken = async () => {\n try {\n // Get URL params first\n const params = new URLSearchParams(location.search);\n \n // Create query string without auth_token\n const nonAuthParams = new URLSearchParams();\n params.forEach((value, key) => {\n if (key !== 'auth_token') {\n nonAuthParams.set(key, value);\n }\n });\n const queryString = nonAuthParams.toString() ? `?${nonAuthParams}` : '';\n \n // Check if already authenticated\n const response = await fetch('/collectors/api/check_auth', {\n headers: {\n 'Accept': 'application/json'\n }\n });\n \n if (response.ok) {\n navigate(`/collectors/accounts${queryString}`);\n return;\n }\n\n // If not authenticated, check for auth token\n const authToken = params.get('auth_token');\n if (authToken) {\n await handleLogin({ auth_token: authToken }, queryString);\n }\n } catch (error) {\n console.error('Error in authentication flow:', error);\n setErrorMessage('Error during authentication. Please try again.');\n }\n };\n\n checkAuthAndToken();\n }, [navigate, location]);\n\n const handleSubmit = (e) => {\n e.preventDefault();\n const params = new URLSearchParams(location.search);\n const remainingParams = new URLSearchParams();\n params.forEach((value, key) => {\n if (key !== 'auth_token') {\n remainingParams.set(key, value);\n }\n });\n\n if (isEmailLogin) {\n const email = e.target.email.value;\n const password = e.target.password.value;\n handleLogin({ email, password }, remainingParams.toString());\n } else {\n const authToken = e.target.auth_token.value;\n handleLogin({ auth_token: authToken }, remainingParams.toString());\n }\n };\n\n return (\n
\n
\n
\n

\n {isEmailLogin \n ? 'Sign In' \n : 'Enter Authentication Code'}\n

\n\n

You can sign in with your email and password or use a login token.

\n \n {errorMessage && (\n \n {errorMessage}\n \n )}\n \n
\n {isEmailLogin ? (\n <>\n
\n \n \n
\n
\n
\n \n \n
\n \n ) : (\n
\n \n \n
\n )}\n \n
\n \n
\n
\n\n {\n e.preventDefault();\n setIsEmailLogin(!isEmailLogin);\n }}\n >\n {isEmailLogin ? 'Have a login token?' : 'Back to email login'}\n \n
\n
\n
\n );\n};\n\nexport default Login;","import React, { useState, useEffect } from 'react';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport Alert from '../shared/Alert';\n\nconst InviteAccept = () => {\n const [searchParams] = useSearchParams();\n const navigate = useNavigate();\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(false);\n const token = searchParams.get('token');\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setError(null);\n setLoading(true);\n\n if (password !== confirmPassword) {\n setError(\"Passwords don't match\");\n setLoading(false);\n return;\n }\n\n try {\n const response = await fetch('/collectors/api/accept_invite', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({\n token,\n password\n })\n });\n\n const data = await response.json();\n\n if (!response.ok) {\n throw new Error(data.message || 'Failed to set password');\n }\n\n // Redirect to login page\n navigate('/collectors');\n } catch (err) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n
\n
\n
\n
\n
\n

Set Your Password

\n \n {error && (\n \n {error}\n \n )}\n\n
\n
\n \n setPassword(e.target.value)}\n required\n />\n
\n\n
\n \n setConfirmPassword(e.target.value)}\n required\n />\n
\n\n

Already have a password?

\n\n \n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default InviteAccept; ","import React from 'react';\nimport { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';\nimport PrivateRoute from './collectors_dashboard/PrivateRoute';\nimport Accounts from './collectors_dashboard/Accounts';\nimport DirectDeposit from './collectors_dashboard/DirectDeposit';\nimport PaymentDetails from './collectors_dashboard/PaymentDetails';\nimport Users from './collectors_dashboard/Users';\nimport Login from './collectors_dashboard/Login';\nimport InviteAccept from './collectors_dashboard/InviteAccept';\n\nconst CollectorsDashboardRoot = () => {\n return (\n \n \n }\n />\n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n \n \n );\n};\n\nexport default CollectorsDashboardRoot;","import React from 'react';\n\nconst Card = React.forwardRef(({ className = '', children, ...props }, ref) => (\n \n {children}\n
\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef(({ className = '', children, ...props }, ref) => (\n \n {children}\n \n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef(({ className = '', children, ...props }, ref) => (\n \n {children}\n \n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef(({ className = '', children, ...props }, ref) => (\n \n {children}\n \n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef(({ className = '', children, ...props }, ref) => (\n \n {children}\n \n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef(({ className = '', children, ...props }, ref) => (\n \n {children}\n \n));\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }; ","import React, { useState, useEffect } from 'react';\nimport { Card, CardContent, CardTitle, CardDescription, CardFooter } from '../ui/Card';\n\nconst HIDE_DURATION_DAYS = 7;\n\nconst CallToActionCards = () => {\n const [hiddenCards, setHiddenCards] = useState({\n soloSettle: false,\n debtAnswer: false\n });\n\n useEffect(() => {\n Object.keys(hiddenCards).forEach(cardKey => {\n const hiddenUntil = localStorage.getItem(`hidden_${cardKey}`);\n if (hiddenUntil && new Date(hiddenUntil) > new Date()) {\n setHiddenCards(prev => ({ ...prev, [cardKey]: true }));\n } else if (hiddenUntil) {\n localStorage.removeItem(`hidden_${cardKey}`);\n }\n });\n }, []);\n\n const hideCard = (cardKey) => {\n const hiddenUntil = new Date();\n hiddenUntil.setDate(hiddenUntil.getDate() + HIDE_DURATION_DAYS);\n localStorage.setItem(`hidden_${cardKey}`, hiddenUntil.toISOString());\n setHiddenCards(prev => ({ ...prev, [cardKey]: true }));\n };\n\n if (hiddenCards.soloSettle && hiddenCards.debtAnswer) {\n return null;\n }\n\n return (\n
\n {!hiddenCards.soloSettle && (\n
\n \n \n
\n

Try SoloSettle

\n
\n \n Are you ready to resolve your debt once and for all? SoloSettle makes it easy to settle with your collector.\n \n \n Learn More\n \n
\n
\n
\n )}\n {!hiddenCards.debtAnswer && (\n
\n \n \n
\n

File an Answer on your Lawsuit

\n
\n \n You made an offer to settle but you haven't filed an Answer yet on your lawsuit. Filing an Answer is crucial for settling.\n \n \n File an Answer\n \n
\n
\n
\n )}\n
\n );\n};\n\nexport default CallToActionCards; ","import React from 'react';\nimport { Card, CardContent, CardTitle, CardDescription } from '../ui/Card';\n\nconst CreditFactor = ({ label, value, statusTier, impact }) => {\n const statusTierInfo = {\n 1: { class: 'bg-success', text: 'Excellent' },\n 2: { class: 'bg-primary', text: 'Good' },\n 3: { class: 'bg-warning', text: 'Fair' },\n 4: { class: 'bg-danger', text: 'Needs some love' },\n 5: { class: 'bg-danger', text: 'Needs extra love' }\n }\n\n return (\n
\n
\n {label}:\n \n {typeof value === 'object' ? `${value.years} yrs, ${value.months} mos` : value}\n {typeof value === 'number' && !label.includes('Accounts') && !label.includes('Marks') && !label.includes('Inquiries') ? '%' : ''}\n \n
\n
\n \n {statusTierInfo[statusTier].text}\n \n |\n {impact} Impact\n
\n
\n)};\n\nconst CreditReportCard = ({ creditReport }) => {\n const factors = [\n { key: 'payment_history', label: 'Payment History' },\n { key: 'credit_utilization', label: 'Credit Card Usage' },\n { key: 'derogatory_marks', label: 'Derogatory Marks' },\n { key: 'credit_age', label: 'Credit Age' },\n { key: 'total_accounts', label: 'Total Accounts' },\n { key: 'hard_inquiries', label: 'Hard Inquiries' },\n { key: 'available_credit', label: 'Available Credit' }\n ];\n\n return (\n \n \n \n

Credit Report

\n

{creditReport.improvement_message}

\n
\n \n

Credit Factors

\n {factors.map(({ key, label }) => (\n \n ))}\n
\n
\n
\n );\n};\n\nexport default CreditReportCard; ","import React, { useState } from 'react';\nimport { post } from '@rails/request.js'\nimport { Card, CardContent, CardTitle, CardDescription } from '../ui/Card';\n\nconst PROFILE_PAGE_URL = '/my_dashboard?activeTab=profile';\nconst CREDIT_REPORT_PAGE_URL = '/my_dashboard?activeTab=credit_report';\nconst CREDIT_REPORT_FETCH_URL = '/my_dashboard/fetch_credit_report';\n\nconst CreditReportCTA = () => {\n const [isFetching, setIsFetching] = useState(false);\n const [error, setError] = useState(null);\n\n const handleFetchCreditReport = async () => {\n setIsFetching(true);\n\n try {\n const response = await post(CREDIT_REPORT_FETCH_URL);\n\n if (response.ok) {\n window.location.href = CREDIT_REPORT_PAGE_URL;\n } else {\n setError(true);\n }\n } catch (error) {\n console.error('Error fetching credit report:', error);\n setError(true);\n } finally {\n setIsFetching(false);\n }\n }\n\n if (error) {\n return (\n \n \n \n

Sorry, there was an error fetching your credit report.

\n
\n \n

Please double-check your profile information and try again.

\n \n \n Go to profile\n \n
\n
\n
\n )\n }\n\n\n return (\n \n \n \n

Find hidden debt in collections.

\n
\n \n

Most people being sued for a debt have 4 other accounts in collections. We can help you settle every one.

\n \n \n \n

\n This won't affect your credit score. By clicking continue, you agree to a soft-credit pull as stated in our Terms of Service.\n

\n
\n
\n
\n );\n};\n\nexport default CreditReportCTA; ","import React from 'react';\nimport CreditReportCard from './CreditReportCard';\nimport CreditReportCTA from './CreditReportCTA';\nimport { Card, CardContent, CardTitle, CardDescription } from '../ui/Card';\n\nconst PROFILE_REDIRECT_URL = \"/my_dashboard?activeTab=profile&redirect_url=/my_dashboard?activeTab=credit_report\";\nconst CREDIT_REPORT_URL = \"/my_dashboard?activeTab=credit_report\";\n\nconst ErrorCard = ({ title, message, buttonText, buttonUrl }) => (\n \n \n \n

{title}

\n
\n \n

{message}

\n \n \n {buttonText}\n \n
\n
\n
\n);\n\nconst MissingMetadataCard = () => (\n \n \n \n

Find hidden debt in collections.

\n
\n \n

Most people being sued for a debt have 4 other accounts in collections. We can help you settle every one.

\n \n \n See my credit report\n \n \n

\n This won't affect your credit score. By clicking continue, you agree to a soft-credit pull as stated in our Terms of Service.\n

\n
\n
\n
\n);\n\nconst CreditReport = ({ creditReport }) => {\n switch (creditReport.status) {\n case 'error':\n return (\n \n );\n case 'available':\n return ;\n case 'missing_metadata':\n return ;\n case 'consent_required':\n return ;\n case 'fetching':\n // If fetching with no base report yet\n if (!creditReport.base_report) {\n return (\n \n );\n } \n \n if (creditReport.base_report?.error) {\n return (\n \n );\n }\n \n return ;\n default:\n return null;\n }\n};\n\nexport default CreditReport; ","import React from 'react';\n\nconst ProgressChecklist = ({ document, section, sectionIndex, showHeader = true, openByDefault = false, showInitialLinks = false }) => {\n const hasSectionStarted = (section) => {\n return section.steps.some(step => step.completed || step.current);\n };\n\n const allSectionStepsCompleted = (section) => {\n return section.steps.every(step => step.completed);\n };\n\n const canShowLink = (currentStepIndex) => {\n if (!showInitialLinks) return false;\n \n // Find the first step without a value\n const firstIncompleteIndex = section.steps.findIndex(step => !step.value);\n \n // Allow links for all steps before the first incomplete one\n return currentStepIndex <= firstIncompleteIndex;\n };\n\n return (\n
\n

\n \n

\n
{\n if (!el) return;\n \n el.addEventListener('show.bs.collapse', () => {\n const accordionItem = window.document.getElementById(`accordion-item-${sectionIndex}-${document.id}`);\n const shouldBeMuted = !allSectionStepsCompleted(section);\n accordionItem.classList[shouldBeMuted ? 'add' : 'remove']('muted');\n });\n\n el.addEventListener('hide.bs.collapse', () => {\n const accordionItem = window.document.getElementById(`accordion-item-${sectionIndex}-${document.id}`);\n const shouldBeMuted = !hasSectionStarted(section);\n accordionItem.classList[shouldBeMuted ? 'add' : 'remove']('muted');\n });\n }}\n >\n {section.steps.map((step, stepIndex) => (\n step.current && document.resume_url ? (\n
\n \n \n {step.title}\n {canShowLink(stepIndex) ? (\n step.value ? (\n <>: \n {step.value}\n \n ) : (\n <>: \n <edit>\n \n )\n ) : (\n step.value ? `: ${step.value}` : ''\n )}\n \n \n
\n ) : (\n
\n {step.title}\n {canShowLink(stepIndex) ? (\n step.value ? (\n <>: \n {step.value}\n \n ) : (\n <>: \n <edit>\n \n )\n ) : (\n step.value ? `: ${step.value}` : ''\n )}\n
\n )\n ))}\n
\n
\n );\n};\n\nexport default ProgressChecklist; ","import React from 'react';\nimport ProgressChecklist from './ProgressChecklist';\n\nconst DocumentCard = ({ document }) => {\n const formatDate = (dateString) => {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' });\n };\n\n return (\n
\n
\n \n

{document.title}

\n
\n

\n Started on {formatDate(document.created_at)}\n

\n
\n

Status

\n \n
\n
\n

Progress Checklist

\n
\n {document.sectioned_steps?.map((section, sectionIndex) => (\n \n ))}\n
\n
\n
\n
\n );\n};\n\nexport default DocumentCard; ","import React from 'react';\n\nfunction useAnimateValue(value, duration) {\n const [current, setCurrent] = React.useState(value);\n\n React.useLayoutEffect(() => {\n const stepDuration = 1/50;\n const totalSteps = duration / stepDuration;\n const stepSize = (value - current) / totalSteps;\n let currentStep = 0;\n\n const interval = setInterval(() => setCurrent(current => {\n currentStep++;\n if (currentStep >= totalSteps) {\n clearInterval(interval);\n return value;\n }\n return current + stepSize;\n }), stepDuration * 1000);\n\n return () => clearInterval(interval);\n }, [value, duration]);\n\n return current;\n}\n\nconst AnimatePercentage = React.memo(({ value, duration }) => {\n const v = useAnimateValue(value, duration);\n return Math.round(v * 100) / 100;\n});\n\nconst ProgressCircle = ({ \n percentage = 0,\n strokeWidth = 35,\n ballStrokeWidth = 0,\n reduction = 0,\n transitionDuration = 0.5,\n background = '#6A97F0',\n hideBall = true,\n gradient = [\n { stop: 0.6, color: '#0058F0' },\n { stop: 1, color: '#001100' }\n ],\n titleText = null\n}) => {\n const width = 200;\n const center = width / 2;\n const height = center + center * Math.cos(reduction * Math.PI);\n const [unique] = React.useState(() => Math.random().toString());\n const rotate = -90 + (180 * reduction);\n const r = center - strokeWidth / 2 - (ballStrokeWidth / 2);\n const circumference = Math.PI * r * 2;\n const offset = circumference * (100 - percentage * (1 - reduction)) / 100;\n\n return (\n
\n \n \n \n {gradient.map(({stop, color}) => (\n \n ))}\n \n \n \n \n %\n \n {titleText && {titleText}}\n \n {/* Background circle */}\n \n \n {/* Progress circle */}\n \n \n {/* Ball at the end of progress */}\n {!hideBall && (\n \n )}\n \n
\n );\n};\n\nexport default React.memo(ProgressCircle); ","import React from 'react';\nimport ProgressCircle from '../shared/ProgressCircle';\n\nconst PaymentPlanSummary = ({ paymentPlan }) => {\n if (!paymentPlan) return null;\n\n const {\n total_amount_customer_pays,\n balance_remaining,\n total_savings,\n previous_payment_date,\n next_payment_amount,\n next_payment_date,\n payment_history,\n progress_percentage,\n last_payment_date,\n total_payments_count,\n payments_remaining,\n is_subscription_active,\n subscription_needs_attention,\n subscription_latest_invoice_url\n } = paymentPlan;\n\n return (\n
\n

Payment Plan

\n\n {is_subscription_active && next_payment_amount && next_payment_date && (\n <>\n
\n \n \n \n
\n {next_payment_amount} auto-pay scheduled for {next_payment_date}.\n
\n
\n\n
\n
\n Upcoming payment: {next_payment_amount}\n
\n
\n Due {next_payment_date}\n
\n
\n \n )}\n\n {subscription_needs_attention && next_payment_amount && previous_payment_date && (\n
\n \n \n \n
\n Failed autopay of {next_payment_amount} on {previous_payment_date}. If you fail to make this payment, you will be in default. Click here to update your payment method.\n
\n
\n )}\n\n
\n\n {payment_history && payment_history.length > 0 && (\n
\n

Transactions

\n {payment_history.map((payment) => (\n
\n {payment.amount} paid on {payment.date}\n
\n ))}\n
\n
\n )}\n \n
\n

Payment Plan Summary

\n\n
\n
\n
\n Total payment amount:\n {total_amount_customer_pays}\n
\n
\n Balance remaining:\n {balance_remaining}\n
\n {total_savings && (\n
\n Total savings:\n {total_savings}\n
\n )}\n
\n Payments:\n {total_payments_count}\n
\n
\n Payments remaining:\n {payments_remaining}\n
\n {is_subscription_active && (\n
\n Last payment:\n {last_payment_date}\n
\n )}\n
\n \n
\n \n
\n
\n
\n
\n );\n};\n\nexport default PaymentPlanSummary; \n","export const nullifyEmptyFormValues = (obj: any) => {\n if (!obj || typeof obj !== 'object') {\n return obj && obj.length > 0 ? obj : null;\n }\n\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [\n key,\n nullifyEmptyFormValues(value)\n ])\n );\n};\n\nexport const setNestedFormValue = (obj: any, path: string, value: any) => {\n const keys = path.split('.');\n const lastKey = keys.pop();\n const target = keys.reduce((acc, key) => (acc[key] = acc[key] || {}), obj);\n target[lastKey] = value;\n return { ...obj };\n};","import React, { useEffect, useRef } from 'react';\nimport FloatingLabel from 'react-bootstrap/FloatingLabel';\nimport Form from 'react-bootstrap/Form';\n\nconst GooglePlacesAutocomplete = ({ \n value,\n onChange,\n onPlaceSelected,\n isInvalid,\n error,\n disabled = false\n}) => {\n const inputRef = useRef(null);\n const autocompleteRef = useRef(null);\n const scriptRef = useRef(null);\n\n useEffect(() => {\n const loadGoogleMapsScript = () => {\n const apiKey = document.body.getAttribute('data-google-maps-api-key');\n scriptRef.current = document.createElement('script');\n scriptRef.current.src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&libraries=places&loading=async&callback=initGooglePlaces`;\n scriptRef.current.async = true;\n scriptRef.current.defer = true;\n \n window.initGooglePlaces = () => {\n initAutocomplete();\n delete window.initGooglePlaces;\n };\n\n document.head.appendChild(scriptRef.current);\n };\n\n if (!window.google) {\n loadGoogleMapsScript();\n } else {\n initAutocomplete();\n }\n\n return () => {\n if (autocompleteRef.current) {\n window.google.maps.event.clearInstanceListeners(autocompleteRef.current);\n }\n if (scriptRef.current) {\n document.head.removeChild(scriptRef.current);\n }\n if (window.initGooglePlaces) {\n delete window.initGooglePlaces;\n }\n };\n }, []);\n\n const initAutocomplete = () => {\n if (!inputRef.current || !window.google) return;\n\n autocompleteRef.current = new window.google.maps.places.Autocomplete(inputRef.current, {\n componentRestrictions: { country: [\"us\", \"as\", \"gu\", \"mp\", \"pr\", \"um\", \"vi\"] },\n fields: [\"address_components\"],\n types: [\"address\"]\n });\n\n // Prevent form submission on enter\n inputRef.current.addEventListener('keypress', (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n }\n });\n\n autocompleteRef.current.addListener('place_changed', () => {\n const place = autocompleteRef.current.getPlace();\n let address = {\n address_line1: '',\n city: '',\n state: '',\n zip_code: ''\n };\n\n for (const component of place.address_components) {\n const componentType = component.types[0];\n\n switch (componentType) {\n case \"street_number\":\n address.address_line1 = `${component.long_name} ${address.address_line1}`;\n break;\n case \"route\":\n address.address_line1 += component.short_name;\n break;\n case \"postal_code\":\n address.zip_code = component.long_name;\n break;\n case \"locality\":\n address.city = component.long_name;\n break;\n case \"administrative_area_level_1\":\n address.state = component.short_name;\n break;\n }\n }\n\n onPlaceSelected(address);\n });\n };\n\n return (\n \n \n \n {error}\n \n \n );\n};\n\nexport default GooglePlacesAutocomplete; ","import React, { useState, useEffect } from 'react';\nimport FloatingLabel from 'react-bootstrap/FloatingLabel';\nimport Form from 'react-bootstrap/Form';\n\nconst formatSSN = (digits) => {\n if (digits.length >= 5) {\n return digits.slice(0, 3) + '-' + digits.slice(3, 5) + '-' + digits.slice(5, 9);\n } else if (digits.length >= 3) {\n return digits.slice(0, 3) + '-' + digits.slice(3);\n } else {\n return digits;\n }\n};\n\nconst SSNInput = ({ \n fullSSN, \n lastFour, \n onChange, \n errors = {}\n}) => {\n const [initialRender, setInitialRender] = useState(false);\n const [showFullSSN, setShowFullSSN] = useState(true);\n const [digits, setDigits] = useState('');\n const [oldDigits, setOldDigits] = useState('');\n const [isBackspace, setIsBackspace] = useState(false);\n\n useEffect(() => {\n if (lastFour && !fullSSN) {\n setShowFullSSN(false);\n }\n }, [initialRender]);\n\n useEffect(() => {\n setInitialRender(true);\n }, []);\n\n const handleToggle = (e) => {\n e.preventDefault();\n setShowFullSSN(!showFullSSN);\n };\n\n const handleKeyDown = (e) => {\n setIsBackspace(e.key === 'Backspace');\n };\n\n const handleChange = (e) => {\n const { name, value } = e.target;\n \n if (name === 'metadata.ssn') {\n const newDigits = value.replace(/\\D/g, '');\n \n let updatedDigits;\n if (newDigits.length < oldDigits.length) {\n // deleted a digit\n updatedDigits = newDigits;\n } else if (newDigits.length > oldDigits.length) {\n // added a digit\n updatedDigits = newDigits;\n } else if (isBackspace) {\n // deleted a non-digit character (like a dash)\n updatedDigits = digits.slice(0, -1);\n } else {\n updatedDigits = digits;\n }\n\n setDigits(updatedDigits);\n setOldDigits(updatedDigits);\n setIsBackspace(false);\n\n // Update both full SSN and last four\n onChange({\n target: {\n name,\n value: formatSSN(updatedDigits)\n }\n });\n \n // Mirror last 4 digits if we have enough digits otherwise clear the last 4 digits\n if (updatedDigits.length >= 6) {\n onChange({\n target: {\n name: 'metadata.ssn_last_four',\n value: updatedDigits.slice(5, 9)\n }\n });\n } else {\n onChange({\n target: {\n name: 'metadata.ssn_last_four',\n value: ''\n }\n });\n }\n } else {\n onChange({\n target: {\n name,\n value: value.replace(/\\D/g, '').slice(0, 4)\n }\n });\n }\n };\n\n return (\n
\n {showFullSSN ? (\n \n \n \n {errors.ssn?.join(', ')}\n \n \n ) : (\n \n \n \n {errors.ssn_last_four?.join(', ')}\n \n \n )}\n \n {showFullSSN ? \"I only want to enter the last four digits.\" : \"I want to enter the full SSN.\"}\n \n
\n );\n};\n\nexport default SSNInput; ","import React, { useState, useEffect } from 'react';\nimport { FetchRequest } from '@rails/request.js';\nimport FloatingLabel from 'react-bootstrap/FloatingLabel';\nimport Form from 'react-bootstrap/Form';\nimport { Card, CardContent } from '../ui/Card';\nimport { nullifyEmptyFormValues, setNestedFormValue } from '../../utils/form';\nimport GooglePlacesAutocomplete from '../shared/GooglePlacesAutocomplete';\nimport SSNInput from '../shared/SSNInput';\nimport Alert from '../shared/Alert';\n\nconst PROFILE_EDIT_PATH = \"/users\"\n\nconst ProfileEdit = ({ initialData, onProfileUpdate }) => {\n const [formData, setFormData] = useState({\n first_name: '',\n last_name: '',\n email: '',\n current_password: '',\n password: '',\n password_confirmation: '',\n metadata: {\n address_line1: '',\n city: '',\n state: '',\n zip_code: '',\n birthdate: '',\n ssn_last_four: '',\n ssn: ''\n }\n });\n const [errors, setErrors] = useState({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [successMessage, setSuccessMessage] = useState('');\n const [redirectUrl, setRedirectUrl] = useState(null);\n const isOAuthUser = initialData?.is_oauth_user;\n\n useEffect(() => {\n if (initialData) {\n setFormData(prevData => ({\n ...prevData,\n first_name: initialData.first_name || '',\n last_name: initialData.last_name || '',\n email: initialData.email || '',\n metadata: {\n ...prevData.metadata,\n ...initialData.metadata\n }\n }));\n }\n }, [initialData]);\n\n useEffect(() => {\n const urlParams = new URLSearchParams(window.location.search);\n const redirectUrl = urlParams.get('redirect_url');\n if (redirectUrl) {\n setRedirectUrl(redirectUrl);\n }\n }, []);\n\n const allFieldsFilled = () => {\n return formData.first_name && formData.last_name && formData.metadata.address_line1 && formData.metadata.city && formData.metadata.state && formData.metadata.zip_code && formData.metadata.birthdate && (formData.metadata.ssn || formData.metadata.ssn_last_four);\n }\n\n const handleChange = (e) => {\n const { name, value } = e.target;\n\n setFormData(prev => setNestedFormValue(prev, name, value));\n\n // Clear any existing error for this field\n if (name.split('.').reduce((acc, key) => acc?.[key], errors)) {\n setErrors(prev => setNestedFormValue(prev, name, null));\n }\n\n // Clear success message if exists\n if (successMessage) {\n setSuccessMessage('');\n }\n };\n\n const handlePlaceSelected = (address) => {\n setFormData(prev => ({\n ...prev,\n metadata: { ...prev.metadata, ...address }\n }));\n \n // Clear any existing errors for address fields\n if (errors.metadata) {\n const ADDRESS_FIELDS = ['address_line1', 'city', 'state', 'zip_code'];\n\n setErrors(prev => ({\n ...prev,\n metadata: {\n ...prev.metadata,\n ...Object.fromEntries(ADDRESS_FIELDS.map(field => [field, null]))\n }\n }));\n }\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setIsSubmitting(true);\n setErrors({});\n setSuccessMessage('');\n\n const userData = nullifyEmptyFormValues({\n first_name: formData.first_name,\n last_name: formData.last_name,\n metadata: formData.metadata\n });\n\n // Only include password fields for non-OAuth users\n if (!isOAuthUser) {\n userData.current_password = formData.current_password;\n \n // Only include new password fields if a new password is being set\n if (formData.password) {\n userData.password = formData.password;\n userData.password_confirmation = formData.password_confirmation;\n }\n }\n\n // Validate SSN\n if (formData.metadata.ssn) {\n const ssn = formData.metadata.ssn.replace(/\\D/g, '');\n if (ssn.length !== 9) {\n setErrors(prev => ({ ...prev, metadata: { ...prev.metadata, ssn: ['Full SSN must be 9 digits'] } }));\n setIsSubmitting(false);\n return;\n }\n }\n if (formData.metadata.ssn_last_four) {\n const ssnLastFour = formData.metadata.ssn_last_four.replace(/\\D/g, '');\n if (ssnLastFour.length !== 4) {\n setErrors(prev => ({ ...prev, metadata: { ...prev.metadata, ssn_last_four: ['Last 4 of SSN must be 4 digits'] } }));\n setIsSubmitting(false);\n return;\n }\n }\n\n try {\n const request = new FetchRequest(\"PUT\", PROFILE_EDIT_PATH, {\n body: { user: userData },\n responseKind: \"json\"\n });\n \n const response = await request.perform();\n const data = await response.json;\n \n if (response.ok) {\n setFormData(prev => ({\n ...prev,\n current_password: '',\n password: '',\n password_confirmation: ''\n }));\n setSuccessMessage('Profile updated successfully');\n \n if (onProfileUpdate) {\n onProfileUpdate(data.user);\n }\n\n if (redirectUrl) {\n window.location.href = redirectUrl;\n }\n } else {\n setErrors(data.errors || {});\n if (data.error === \"Current password can't be blank\") {\n setErrors(prev => ({\n ...prev,\n current_password: [\"Current password is required to make changes\"]\n }));\n }\n }\n } catch (error) {\n setErrors({ base: ['An error occurred while updating your profile.'] });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return (\n \n \n
\n

Basic Information

\n \n We use AES 256-bit block-level asymmetric non-deterministic encryption to protect your data.\n \n
\n\n {successMessage && (\n
\n \n {successMessage}\n \n
\n )}\n\n {errors.base && (\n
\n \n {errors.base.join(', ')}\n \n
\n )}\n\n {redirectUrl && redirectUrl.includes('credit_report') && !allFieldsFilled() && (\n
\n \n Please fill out the basic information below to view your credit report.\n \n
\n )}\n\n
\n
\n
\n \n \n \n {errors.first_name?.join(', ')}\n \n \n
\n
\n \n \n \n {errors.last_name?.join(', ')}\n \n \n
\n
\n\n \n \n \n Contact support if you need to update your email. It cannot be changed here.\n \n \n \n
\n
\n \n
\n
\n \n \n \n {errors.metadata?.city?.join(', ')}\n \n \n
\n
\n \n \n \n {errors.metadata?.state?.join(', ')}\n \n \n
\n
\n \n \n \n {errors.metadata?.zip_code?.join(', ')}\n \n \n
\n
\n\n
\n
\n \n \n \n {errors.metadata?.birthdate?.join(', ')}\n \n \n
\n
\n \n
\n
\n\n {!isOAuthUser && (\n <>\n

Password

\n \n \n \n Enter your password to confirm changes.\n \n {errors.current_password?.join(', ')}\n \n \n\n \n \n Leave blank if you don't want to change it.\n \n {errors.password?.join(', ')}\n \n \n\n \n \n \n {errors.password_confirmation?.join(', ')}\n \n \n \n )}\n\n
\n \n
\n
\n
\n
\n );\n};\n\nexport default ProfileEdit; ","import React from 'react';\nimport { Card, CardContent } from '../ui/Card';\n\nconst SIGN_OUT_PATH = \"/users/sign_out\"\n\nconst AccountActions = () => {\n return (\n \n \n
\n

Account Actions

\n
\n\n
\n \n
\n
\n
\n );\n};\n\nexport default AccountActions;","import React from 'react';\nimport classNames from 'classnames';\n\ntype BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'info';\n\ninterface BadgeProps {\n as?: React.ElementType;\n variant?: BadgeVariant;\n className?: string;\n children: React.ReactNode;\n}\n\nconst Badge = React.forwardRef(({ \n as: Component = 'div',\n variant = 'default',\n className = '', \n children,\n ...props \n}, ref) => {\n const baseClasses = 'badge rounded-pill fs-4 border';\n \n const variantClasses = {\n default: 'bg-primary text-white border-primary',\n secondary: 'bg-secondary text-white',\n destructive: 'bg-danger text-white',\n outline: 'bg-transparent text-primary border-primary',\n success: 'bg-success text-white',\n warning: 'bg-warning text-dark',\n info: 'bg-info text-white',\n };\n\n const classes = classNames(\n baseClasses,\n variantClasses[variant],\n className,\n );\n\n return (\n \n {children}\n \n );\n});\n\nBadge.displayName = \"Badge\";\n\nexport { Badge }; ","import React, { useState, useEffect } from 'react';\nimport CallToActionCards from './CallToActionCards';\nimport CreditReport from './CreditReport';\nimport DocumentCard from './DocumentCard';\nimport PaymentPlanSummary from './PaymentPlanSummary';\nimport ProfileEdit from './ProfileEdit';\nimport AccountActions from './AccountActions';\nimport { Card, CardContent, CardTitle, CardDescription } from '../ui/Card';\nimport { Badge } from '../ui/Badge';\n\nconst Dashboard = () => {\n const [cases, setCases] = useState([]);\n const [unorganizedDocuments, setUnorganizedDocuments] = useState([]);\n const [flashNotice, setFlashNotice] = useState(null);\n const [loading, setLoading] = useState(true);\n const [creditReport, setCreditReport] = useState(null);\n const [activeTab, setActiveTab] = useState('all');\n const [userProfile, setUserProfile] = useState(null);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const response = await fetch('/my_dashboard.json', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n credentials: 'same-origin'\n });\n const data = await response.json();\n setCases(data.cases);\n setCreditReport(data.credit_report);\n setUnorganizedDocuments(data.unorganizedDocuments);\n setFlashNotice(data.flash_notice);\n setUserProfile(data.user_profile);\n } catch (error) {\n console.error('Error fetching dashboard data:', error);\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, []);\n\n useEffect(() => {\n const url = new URL(window.location);\n const activeTab = url.searchParams.get('activeTab');\n if (activeTab) {\n setActiveTab(activeTab);\n }\n }, []);\n\n const formatMoney = (amount) => {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(amount);\n };\n\n const CaseHeader = ({ info }) => {\n if (info.plaintiff_name && info.lawsuit_amount) {\n return (\n
\n

{info.plaintiff_name}

\n

{formatMoney(info.lawsuit_amount)}

\n
\n );\n } else if (info.civil_number) {\n return

Case {info.civil_number}

;\n } else {\n return

Case #{info.id}

;\n }\n };\n\n const handleProfileUpdate = (updatedProfile) => {\n setUserProfile(prev => ({\n ...prev,\n ...updatedProfile\n }));\n };\n\n const handleTabChange = (tab) => {\n const newTab = activeTab === tab ? 'all' : tab;\n setActiveTab(newTab);\n const url = new URL(window.location);\n url.searchParams.set('activeTab', newTab);\n window.history.pushState({}, '', url);\n };\n\n return (\n
\n
\n
\n

Dashboard

\n {flashNotice && (\n
{flashNotice}
\n )}\n
\n {cases.length > 0 && (\n handleTabChange('cases')}\n >\n Cases\n \n )}\n handleTabChange('profile')}\n >\n Profile\n \n {creditReport && (\n handleTabChange('credit_report')}\n >\n Credit Report\n \n )}\n {unorganizedDocuments.length > 0 && (\n handleTabChange('documents')}\n >\n Documents\n \n )}\n
\n
\n
\n\n {activeTab === 'all' && }\n\n
\n {loading ? (\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n
\n ) : (\n
\n {['all', 'cases'].includes(activeTab) && cases.map((consumer_case) => (\n
\n
\n
\n \n
\n
\n {consumer_case.has_payment_plan && (\n \n \n {consumer_case.documents.map(doc => \n doc.payment_plan && \n )}\n \n \n )}\n {consumer_case.documents.map((document) => (\n \n \n \n \n \n ))}\n
\n
\n
\n
\n
\n ))}\n\n {['all', 'documents'].includes(activeTab) && unorganizedDocuments.length > 0 && (\n <>\n {cases.length > 0 && activeTab == 'all' &&
}\n {unorganizedDocuments.map((document) => (\n \n \n \n \n \n ))}\n \n )}\n\n {['all', 'profile'].includes(activeTab) && (\n <>\n {(unorganizedDocuments.length > 0 || cases.length > 0) && activeTab == 'all' &&
}\n \n {activeTab == 'profile' && }\n \n )}\n\n {['all', 'credit_report'].includes(activeTab) && (\n <>\n {activeTab == 'all' &&
}\n \n \n )}\n
\n )}\n
\n\n
\n
\n \n \n

Create a New Document

\n \n \n \n Debt Answer\n \n

Use this document to respond to a debt collection lawsuit.

\n
\n\n \n \n SoloSettle\n \n

Use this to settle a debt.

\n
\n\n \n \n Document Generation\n \n

Generate documents with AI.

\n
\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default Dashboard; ","import React from 'react';\nimport { BrowserRouter, Routes, Route } from 'react-router-dom';\nimport Dashboard from './consumer_dashboard/Dashboard';\n\nconst ConsumerDashboardRoot = () => {\n return (\n \n \n }\n />\n \n \n );\n};\n\nexport default ConsumerDashboardRoot; ","import React, { useState, useEffect } from 'react';\nimport ProgressChecklist from './consumer_dashboard/ProgressChecklist';\n\nconst ExtractContinueRoot = () => {\n const [document, setDocument] = useState(null);\n\n useEffect(() => {\n const fetchData = async () => {\n const documentId = window.location.pathname.match(/\\/(\\d+)\\//)?.[1];\n \n const response = await fetch(`/my_dashboard/document/${documentId}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n credentials: 'same-origin'\n });\n const data = await response.json();\n setDocument(data.document);\n };\n fetchData();\n }, []);\n\n return (\n
\n

Extracted Data

\n \n

\n You can click on any blue link to fix the data, or click Continue to jump to the first incomplete step.\n

\n\n {document?.sectioned_steps.length > 0 && document?.sectioned_steps[0].steps.some(step => step.value) ? (\n
\n
\n \n
\n
\n ) : (\n

\n No data could be automatically extracted from your document. Click Continue to add information manually.\n

\n )}\n\n
\n\n \n
\n );\n};\n\nexport default ExtractContinueRoot;","import React, { useState, useEffect } from 'react';\nimport { get } from '@rails/request.js';\nimport { useNavigate } from 'react-router-dom';\n\nconst Dashboard = () => {\n const [userData, setUserData] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [viewEmail, setViewEmail] = useState('');\n const [viewCustomerDocumentId, setViewCustomerDocumentId] = useState('');\n const navigate = useNavigate();\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const response = await get('/on_call/dashboard?format=json', {\n responseKind: 'json'\n });\n const data = await response.json;\n if (!response.ok) {\n throw new Error(data.error);\n }\n setUserData(data.user);\n } catch (error) {\n setError(error.message);\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, []);\n\n const handleUserView = (e) => {\n e.preventDefault();\n const trimmedEmail = viewEmail.trim();\n if (trimmedEmail) {\n navigate(`/on_call/users/${encodeURIComponent(trimmedEmail)}`);\n }\n };\n\n const handleCustomerDocumentView = (e) => {\n e.preventDefault();\n const trimmedCustomerDocumentId = viewCustomerDocumentId.trim();\n if (trimmedCustomerDocumentId) {\n navigate(`/on_call/customer_documents/${encodeURIComponent(trimmedCustomerDocumentId)}`);\n }\n };\n\n if (loading) {\n return (\n
\n
\n
\n

Loading...

\n
\n
\n
\n );\n }\n\n if (error) {\n return (\n
\n
\n
\n

Error

\n

There was an error loading the dashboard: {error}

\n
\n
\n
\n );\n }\n\n return (\n
\n
\n
\n

On-Call Dashboard

\n
\n
\n\n
\n
\n

View

\n\n
\n
\n
\n

User

\n

View user information including metadata and documents.

\n \n
\n
\n setViewEmail(e.target.value)}\n required\n />\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n

Customer Document

\n

View customer document information.

\n \n
\n
\n setViewCustomerDocumentId(e.target.value)}\n required\n />\n \n
\n
\n
\n
\n
\n\n
\n
\n
\n );\n};\n\nexport default Dashboard; ","import React, { useState, useEffect } from 'react';\nimport { get } from '@rails/request.js';\nimport { useNavigate, useParams } from 'react-router-dom';\n\nconst User = () => {\n const { email: emailFromUrl } = useParams();\n const navigate = useNavigate();\n const initialEmail = emailFromUrl || '';\n\n const [email, setEmail] = useState(initialEmail);\n const [userData, setUserData] = useState(null);\n const [loading, setLoading] = useState(initialEmail ? true : false);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n if (initialEmail) {\n fetchUserData(initialEmail);\n }\n }, []);\n\n const fetchUserData = async (emailToView) => {\n if (!emailToView) return;\n\n setLoading(true);\n setError(null);\n \n try {\n const response = await get(`/on_call/users/${encodeURIComponent(emailToView)}?format=json`, {\n responseKind: 'json'\n });\n const data = await response.json;\n\n if (!response.ok) {\n throw new Error(data.error);\n }\n setUserData(data.user);\n } catch (error) {\n setError(error.message || 'Error viewing user');\n } finally {\n setLoading(false);\n }\n };\n\n const handleUserView = async (e) => {\n if (e) {\n e.preventDefault();\n }\n \n if (!email.trim()) return;\n\n navigate(`/on_call/users/${encodeURIComponent(email)}`, { replace: true });\n await fetchUserData(email);\n };\n\n const formatDate = (dateString) => {\n if (!dateString) return 'N/A';\n return new Date(dateString).toLocaleString();\n };\n\n return (\n
\n
\n
\n \n

User

\n
\n
\n\n
\n
\n
\n
\n
\n
\n setEmail(e.target.value)}\n required\n />\n \n
\n
\n
\n
\n
\n
\n\n {error && (\n
\n
\n
\n {error}\n
\n
\n
\n )}\n\n {loading && !userData && (\n
\n
\n
\n
\n Loading...\n
\n
\n
\n
\n )}\n\n {userData && (\n
\n
\n
\n
\n
\n

Basic Information

\n
\n
\n

ID: {userData.id}

\n

Email: {userData.email}

\n

Name: {userData.first_name} {userData.last_name}

\n

Created: {formatDate(userData.created_at)}

\n

Last Updated: {formatDate(userData.updated_at)}

\n

Google OAuth User: {userData.is_oauth_user ? 'Yes' : 'No'}

\n
\n
\n
\n
\n \n
\n
\n
\n
\n

User Metadata

\n
\n
\n
\n \n \n \n \n \n \n \n \n {Object.entries(userData.metadata || {}).map(([key, value]) => (\n \n \n \n \n ))}\n \n
FieldValue
{key.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase())}{value || 'N/A'}
\n
\n
\n
\n
\n
\n\n {userData.law_firm.id && (\n
\n
\n
\n
\n

Law Firm

\n
\n
\n

ID: {userData.law_firm.id}

\n

Scope: {userData.law_firm.law_firm_scope}

\n
\n
\n
\n
\n )}\n\n {userData.customer_documents.length > 0 && (\n
\n
\n
\n
\n

Customer Documents

\n
\n
\n
    \n {userData.customer_documents.map(document => (\n
  • \n {document.id}\n
  • \n ))}\n
\n
\n
\n
\n
\n )}\n\n {userData.posthog_variants && (\n
\n
\n
\n
\n

PostHog Variants

\n
\n
\n
    \n {Object.entries(userData.posthog_variants).map(([key, value]) => (\n
  • {key.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ')}: {value ? 'Test' : 'Control'}
  • \n ))}\n
\n
\n
\n
\n
\n )}\n
\n )}\n
\n );\n};\n\nexport default User; ","import React, { useState, useEffect } from 'react';\nimport { get, destroy } from '@rails/request.js';\nimport { useNavigate, useParams } from 'react-router-dom';\n\nconst CustomerDocument = () => {\n const { id: idFromUrl } = useParams();\n const navigate = useNavigate();\n const initialCustomerDocumentId = idFromUrl || '';\n\n const [customerDocumentId, setCustomerDocumentId] = useState(initialCustomerDocumentId);\n const [customerDocumentData, setCustomerDocumentData] = useState(null);\n const [loading, setLoading] = useState(initialCustomerDocumentId ? true : false);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n if (initialCustomerDocumentId) {\n fetchCustomerDocumentData(initialCustomerDocumentId);\n }\n }, []);\n\n const fetchCustomerDocumentData = async (customerDocumentIdToView) => {\n if (!customerDocumentIdToView) return;\n\n setLoading(true);\n setError(null);\n \n try {\n const response = await get(`/on_call/customer_documents/${encodeURIComponent(customerDocumentIdToView)}?format=json`, {\n responseKind: 'json'\n });\n const data = await response.json;\n if (!response.ok) {\n throw new Error(data.error);\n }\n setCustomerDocumentData(data.customer_document);\n } catch (error) {\n setError(error.message || 'Error viewing customer document');\n } finally {\n setLoading(false);\n }\n };\n\n const handleCustomerDocumentView = async (e) => {\n if (e) {\n e.preventDefault();\n }\n \n if (!customerDocumentId.trim()) return;\n\n navigate(`/on_call/customer_documents/${encodeURIComponent(customerDocumentId)}`, { replace: true });\n await fetchCustomerDocumentData(customerDocumentId);\n };\n\n const handleRescindAcceptance = async () => {\n if (!customerDocumentId.trim()) return;\n \n const confirmed = window.confirm(\"Are you sure you want to rescind this acceptance? This action cannot be undone.\");\n if (!confirmed) return;\n \n const response = await destroy(`/on_call/customer_documents/${encodeURIComponent(customerDocumentId)}/rescind_acceptance?format=json`, {\n responseKind: 'json'\n });\n if (!response.ok) {\n throw new Error(response.error);\n }\n const data = await response.json;\n if (data.success) {\n await fetchCustomerDocumentData(customerDocumentId);\n }\n };\n\n const formatDate = (dateString) => {\n if (!dateString) return 'N/A';\n return new Date(dateString).toLocaleString();\n };\n\n return (\n
\n
\n
\n \n

Customer Document

\n
\n
\n\n
\n
\n
\n
\n
\n
\n setCustomerDocumentId(e.target.value)}\n required\n />\n \n
\n
\n
\n
\n
\n
\n\n {error && (\n
\n
\n
\n {error}\n
\n
\n
\n )}\n\n {loading && !customerDocumentData && (\n
\n
\n
\n
\n Loading...\n
\n
\n
\n
\n )}\n\n {customerDocumentData && (\n
\n
\n
\n
\n
\n

Basic Information

\n
\n
\n

ID: {customerDocumentData.id}

\n

Created: {formatDate(customerDocumentData.created_at)}

\n

Last Updated: {formatDate(customerDocumentData.updated_at)}

\n

User: {customerDocumentData.user.email}

\n

Document Name: {customerDocumentData.document_name}

\n

Resume Step: {customerDocumentData.resume_step || 'N/A'}

\n

Source: {customerDocumentData.source || 'N/A'}

\n

Active: {customerDocumentData.active ? 'Yes' : 'No'}

\n

Case ID: {customerDocumentData.case_id || 'N/A'}

\n

Archived by Law Firm On: {customerDocumentData.archived_by_law_firm_on ? formatDate(customerDocumentData.archived_by_law_firm_on) : 'N/A'}

\n
\n
\n
\n
\n {customerDocumentData.confirm_law_firm && (\n
\n
\n
\n
\n

Confirm Law Firm

\n
\n
\n

ID: {customerDocumentData.confirm_law_firm.id}

\n

Name: {customerDocumentData.confirm_law_firm.name}

\n
\n
\n
\n
\n )}\n {customerDocumentData?.settlement_negotiation_events?.length > 0 && (\n
\n
\n
\n
\n

Settlement Negotiation Events

\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n {customerDocumentData.settlement_negotiation_events.map((event) => (\n \n \n \n \n \n \n \n ))}\n \n
IDPartyActionCreated AtParty Email From
{event.id}{event.party}{event.action}{formatDate(event.created_at)}{event.party_email_from}
\n
\n
\n {customerDocumentData.can_rescind_acceptance && (\n
\n
\n \n
\n
\n )}\n
\n
\n
\n
\n )}\n
\n )}\n
\n );\n};\n\nexport default CustomerDocument; ","import React from 'react';\nimport { BrowserRouter, Routes, Route } from 'react-router-dom';\nimport Dashboard from './on_call_dashboard/Dashboard';\nimport User from './on_call_dashboard/User';\nimport CustomerDocument from './on_call_dashboard/CustomerDocument';\n\nconst OnCallDashboardRoot = () => {\n return (\n \n \n }\n />\n }\n />\n }\n />\n \n \n );\n};\n\nexport default OnCallDashboardRoot;\n","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\..+$/)\nchannels.keys().forEach(channels)\n\n// Explicitly import the plaid report status channel to ensure it's loaded\nimport \"./plaid_report_status_channel\"\n","import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n get text() {\n return this.data.get(\"text\")\n }\n\n copy() {\n navigator.clipboard.writeText(this.text)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n // *** Getters\n\n get $element() {\n return $(this.element)\n }\n\n // *** Lifecycle\n\n connect() {\n this.$element.on({\n keyup: (e) => {\n const $target = $(e.target)\n\n if (0 === $target.prop(\"selectionStart\") && $target.val().length === $target.prop(\"selectionEnd\")) {\n return;\n }\n\n this.formatCurrency($(e.target));\n },\n blur: (e) => {\n this.formatCurrency($(e.target), true);\n }\n });\n }\n\n // *** Helpers\n\n formatNumber(n) {\n // format number 1234567 to 1,234,567\n return n.replace(/\\D/g, \"\").replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\n }\n\n formatCurrency(input, blur = false) {\n // appends $ to value, validates decimal side\n // and puts cursor back in right position.\n\n // get input value\n var input_val = input.val();\n\n // don't validate empty input\n if (input_val === \"\") { return; }\n\n // original length\n var original_len = input_val.length;\n\n // initial caret position \n var caret_pos = input.prop(\"selectionStart\");\n\n // check for decimal\n if (input_val.indexOf(\".\") >= 0) {\n var decimal_pos = input_val.indexOf(\".\");\n var left_side = input_val.substring(0, decimal_pos);\n var right_side = input_val.substring(decimal_pos);\n\n left_side = this.formatNumber(left_side);\n right_side = this.formatNumber(right_side);\n\n if (blur) {\n right_side += \"00\";\n }\n\n // Limit decimal to only 2 digits\n right_side = right_side.substring(0, 2);\n\n // join number by .\n input_val = \"$\" + left_side + \".\" + right_side;\n\n } else {\n // no decimal entered\n // add commas to number\n // remove all non-digits\n input_val = this.formatNumber(input_val);\n input_val = \"$\" + input_val;\n\n // final formatting\n if (blur) {\n input_val += \".00\";\n }\n }\n\n // send updated string to input\n input.val(input_val);\n\n if (!blur) {\n // put caret back in the right position\n var updated_len = input_val.length;\n caret_pos = updated_len - original_len + caret_pos;\n input[0].setSelectionRange(caret_pos, caret_pos);\n }\n }\n}","import { Controller } from \"@hotwired/stimulus\"\nimport autosize from \"autosize\"\n\nexport default class extends Controller {\n connect() {\n autosize(this.element)\n }\n\n disconnect() {\n autosize.destroy(this.element)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nconst POSTHOG_EVENT_NAME = \"pilot:completions:anchor_clicked\"\nconst SANATIZE_PARAM_KEYS = [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n \"_gl\"\n]\n\nexport default class extends Controller {\n // *** Getters\n\n get props() {\n return JSON.parse(this.data.get(\"props\") || \"{}\")\n }\n\n // *** Lifecycle\n\n connect() {\n this.element.addEventListener(\"click\", this.handleClick.bind(this))\n }\n\n disconnect() {\n this.element.removeEventListener(\"click\", this.handleClick.bind(this))\n }\n\n // *** Events\n\n handleClick() {\n const url = this.sanitizeUrl(this.element.href)\n\n window.posthog.capture(POSTHOG_EVENT_NAME, { ...this.props, url })\n }\n\n // *** Helpers\n\n sanitizeUrl(url) {\n const urlObj = new URL(url)\n const params = new URLSearchParams(urlObj.search)\n\n SANATIZE_PARAM_KEYS.forEach(param => {\n params.delete(param)\n })\n\n urlObj.search = params.toString()\n\n return urlObj.toString()\n }\n}\n","export enum ChannelState {\n Connected = \"CONNECTED\",\n Disconnected = \"DISCONNECTED\",\n}\n\nexport interface Completion {\n assistantResponse?: string;\n createdAt: number;\n id: number;\n state: CompletionState;\n userRequest: string;\n}\n\nexport interface CompletionsChannelPayload {\n data: Completion | CompletionDelta;\n type: CompletionsChannelPayloadType;\n}\n\nexport enum CompletionsChannelPayloadType {\n Delta = \"delta\",\n Object = \"object\"\n}\n\nexport interface CompletionDelta {\n id: number;\n assistantResponseDelta: string;\n}\n\nexport enum CompletionRole {\n Assistant = \"assistant\",\n User = \"user\",\n}\n\nexport enum CompletionState {\n Processing = \"processing\",\n Completed = \"completed\",\n Failed = \"failed\",\n}\n\nexport interface PilotContextType {\n agentKey: string;\n authenticated: boolean;\n context: object;\n threadKey: string;\n}\n","import { createEntityAdapter, createSelector } from \"@reduxjs/toolkit\"\nimport { filter } from 'lodash'\n\nimport { RootState } from \"../../store\"\nimport { Completion, CompletionState } from \"../../types\"\n\nexport const completionsAdapter = createEntityAdapter({\n selectId: (completion: Completion) => completion.id,\n sortComparer: (a: Completion, b: Completion) => a.createdAt - b.createdAt,\n})\n\nconst completionsSelector = completionsAdapter.getSelectors(\n (state) => state.completions\n)\n\nexport default completionsSelector\n\nexport const getAllCompletions = (state: RootState) => completionsSelector.selectAll(state)\nexport const getAllCompletionIds = (state: RootState) => completionsSelector.selectIds(state)\nexport const getCompletionById = (state: RootState, completionId: number) => completionsSelector.selectById(state, completionId)\nexport const getChannelState = (state: RootState) => state.completions.channelState\nexport const isCreating = (state: RootState) => state.completions.creating\nexport const isFetching = (state: RootState) => state.completions.fetching\nexport const getHasNextPage = (state: RootState) => state.completions.hasNextPage\n\nexport const getProcessingCompletions = createSelector(\n [getAllCompletions],\n (completions) =>\n filter(\n completions,\n (completion: Completion) => CompletionState.Processing === completion.state\n )\n)\n\nexport const isProcessing = createSelector(\n [getProcessingCompletions],\n (completions) => 0 !== completions.length\n)\n\nexport const getOldestCompletion = createSelector(\n [getAllCompletions],\n (completions) => completions.length > 0 ? completions[0] : undefined\n)\n","import JsConvertCase from 'js-convert-case'\n\nexport const snakeKeys = (obj: Object | Array): any => {\n if (Array.isArray(obj)) {\n return Object.keys(obj).map(key => snakeCaseConvert(obj[key as any]))\n }\n\n return snakeCaseConvert(obj)\n}\n\nexport const camelKeys = (obj: Object | Array): any => {\n if (Array.isArray(obj)) {\n return Object.keys(obj).map(key => camelCaseConvert(obj[key as any]))\n }\n\n return camelCaseConvert(obj)\n}\n\nconst snakeCaseConvert = (obj: Object) => JsConvertCase.snakeKeys(obj, { recursive: true, recursiveInArray: true })\nconst camelCaseConvert = (obj: Object) => JsConvertCase.camelKeys(obj, { recursive: true, recursiveInArray: true })\n","import toast from 'react-hot-toast'\n\nexport const toastError = (message: string) => {\n toast.error(message, {\n duration: 10000,\n })\n}\n","export const browserTimeZone = () => Intl.DateTimeFormat().resolvedOptions().timeZone\n\n// https://phrase.com/blog/posts/detecting-a-users-locale/\nexport const browserLocales = (options = {}) => {\n const defaultOptions = {\n languageCodeOnly: false,\n };\n const opt = {\n ...defaultOptions,\n ...options,\n };\n const browserLocales =\n navigator.languages === undefined\n ? [navigator.language]\n : navigator.languages;\n if (!browserLocales) {\n return undefined;\n }\n return browserLocales.map(locale => {\n const trimmedLocale = locale.trim();\n return opt.languageCodeOnly\n ? trimmedLocale.split(/-|_/)[0]\n : trimmedLocale;\n });\n}\n","import { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport { FetchRequest } from \"@rails/request.js\";\n\nimport { camelKeys, snakeKeys } from \"../../utils/json\";\nimport { toastError } from \"../../utils/toast\";\nimport { browserLocales, browserTimeZone } from \"bundles/Pilot/utils/browser\";\n\nconst PILOT_COMPLETIONS_PATH = \"/pilot/completions.json\"\n\ntype FetchCompletionsParams = {\n threadKey: string;\n};\n\nexport const fetchCompletions = createAsyncThunk(\n \"completions/fetchCompletions\",\n async ({ threadKey }: FetchCompletionsParams) => {\n const request = new FetchRequest(\"GET\", PILOT_COMPLETIONS_PATH, {\n responseKind: \"json\",\n query: snakeKeys({ threadKey }),\n })\n\n const response = await request.perform()\n\n if (response.ok) {\n const json = await response.json\n\n return camelKeys(json)\n } else {\n const message = \"Unable to load messages!\\nPlease try again in a few minutes.\";\n\n toastError(message)\n console.error(message)\n throw new Error(message)\n }\n }\n)\n\ntype CreateCompletionParams = {\n agentKey: string;\n threadKey: string;\n context: object;\n userRequest: string;\n};\n\nexport const createCompletion = createAsyncThunk(\n \"completions/createCompletion\",\n async ({ agentKey, threadKey, context, userRequest }: CreateCompletionParams) => {\n context = {\n ...context,\n timeZone: browserTimeZone(),\n locales: browserLocales()\n }\n\n const request = new FetchRequest(\"POST\", PILOT_COMPLETIONS_PATH, {\n responseKind: \"json\",\n body: snakeKeys({ pilotCompletion: { agentKey, threadKey, context, userRequest } }),\n })\n\n const response = await request.perform();\n\n if (response.ok) {\n const json = await response.json\n\n return camelKeys(json)\n } else {\n const message = \"Unable to create question!\\nPlease try again in a few minutes.\";\n\n toastError(message)\n console.error(message)\n throw new Error(message)\n }\n }\n)\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport { completionsAdapter } from \"./selectors\"\nimport { fetchCompletions, createCompletion } from './actions'\nimport { ChannelState, Completion, CompletionDelta } from '../../types'\n\nexport const completionsSlice = createSlice({\n name: 'completions',\n initialState: completionsAdapter.getInitialState({\n channelState: ChannelState.Disconnected,\n creating: false,\n fetching: false,\n hasNextPage: false,\n }),\n reducers: {\n upsertCompletion: completionsAdapter.upsertOne,\n updateChannelState(state, action: PayloadAction) {\n state.channelState = action.payload\n },\n appendAssistantCompletionDelta(state, action: PayloadAction) {\n const completion = state.entities[action.payload.id]\n\n if (completion) {\n let assistantResponse = completion.assistantResponse\n\n if (assistantResponse) {\n assistantResponse += action.payload.assistantResponseDelta\n } else {\n assistantResponse = action.payload.assistantResponseDelta\n }\n\n state.entities[action.payload.id] = {\n ...completion,\n assistantResponse\n }\n }\n },\n },\n extraReducers: (builder) => {\n builder.addCase(fetchCompletions.pending, (state) => {\n state.fetching = true\n });\n builder.addCase(fetchCompletions.fulfilled, (state, action) => {\n const payload = { ...action.payload } as { data: Completion[], hasNextPage: boolean };\n\n state.fetching = false\n state.hasNextPage = payload.hasNextPage\n completionsAdapter.upsertMany(state, payload.data);\n });\n builder.addCase(fetchCompletions.rejected, (state) => {\n state.fetching = false\n });\n\n builder.addCase(createCompletion.pending, (state) => {\n state.creating = true\n });\n builder.addCase(createCompletion.fulfilled, (state, action) => {\n const payload = { ...action.payload } as { data: Completion };\n\n state.creating = false\n completionsAdapter.upsertOne(state, payload.data);\n });\n builder.addCase(createCompletion.rejected, (state) => {\n state.creating = false\n });\n }\n})\n\nexport default completionsSlice.reducer\n\nexport const { appendAssistantCompletionDelta, updateChannelState, upsertCompletion } = completionsSlice.actions\n","import { combineReducers } from \"redux\"\n\nimport completionsReducer from \"./features/completions/slice\"\n\nconst rootReducer = combineReducers({\n completions: completionsReducer,\n});\n\nexport default rootReducer\n","import { configureStore } from \"@reduxjs/toolkit\"\nimport { createLogger } from \"redux-logger\"\n\nimport { isNotProduction } from \"./utils/env\"\nimport rootReducer from \"./reducers\"\n\nconst store = configureStore({\n reducer: rootReducer,\n devTools: isNotProduction,\n middleware: (getDefaultMiddleware) => {\n if (isNotProduction) {\n return getDefaultMiddleware().concat(createLogger());\n } else {\n return getDefaultMiddleware();\n }\n },\n})\n\nexport default store\n\nexport type RootState = ReturnType\nexport type AppDispatch = typeof store.dispatch\n","export const isNotProduction = \"production\" !== process.env.NODE_ENV\n","import { createContext } from 'react'\n\nimport { PilotContextType } from '../types'\n\nconst PilotContext = createContext(null!)\n\nexport default PilotContext\n","import React from 'react'\n\nfunction Sparkles() {\n return (\n \n \n \n \n \n )\n}\n\nexport default Sparkles\n","import React from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowUp } from '@fortawesome/free-solid-svg-icons'\nimport Sparkles from '../assets/Sparkles';\n\ntype Props = {\n clicked: () => void;\n}\n\nfunction FastActionButton({ clicked }: Props) {\n return (\n
clicked()}>\n
\n \n Ask Solo\n
\n
\n
\n \n
\n
\n
\n )\n}\n\nexport default FastActionButton\n","export const addQueryParams = (url: string, params: any) => {\n try {\n const urlObj = new URL(url);\n\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n urlObj.searchParams.set(key, params[key]);\n }\n }\n\n return urlObj.toString();\n } catch (error) {\n console.error(\"Invalid URL:\", error);\n return url; // Return original URL if invalid\n }\n}\n","import React from 'react'\n\nimport { addQueryParams } from '../../utils/url'\nimport { snakeKeys } from '../../utils/json'\n\nconst UTM_PARAMS = {\n utm_source: \"solo\",\n utm_medium: \"pilot\",\n}\n\nconst SOLO_PRODUCT_MAPPINGS = {\n \"https://www.solosuit.com/debt_answer\": \"https://www.solosuit.com/customer_documents?document_name=debt_answer\",\n \"https://www.solosuit.com/solosettle\": \"https://www.solosuit.com/customer_documents?document_name=solosettle\",\n \"https://www.solosuit.com/document_generation\": \"https://www.solosuit.com/customer_documents?document_name=document_generation\",\n}\n\ntype Params = {\n children: React.ReactNode;\n completionId: number;\n href: string;\n}\n\nconst soloProductUrl = (url: string) => {\n return Object.keys(SOLO_PRODUCT_MAPPINGS).includes(url)\n}\n\nfunction AnchorRenderer({ children, completionId, href }: Params) {\n if (soloProductUrl(href)) {\n return (\n \n {children}\n \n )\n } else {\n return (\n \n {children}\n \n )\n }\n}\n\nexport default AnchorRenderer\n","import React from 'react'\nimport ReactMarkdown from 'react-markdown'\n\nimport AnchorRenderer from './markdownRenderers/AnchorRenderer'\n\ntype Props = {\n completionId: number;\n content: string;\n}\n\nfunction Markdown({ completionId, content }: Props) {\n if (\"\" === content) {\n return (\n

\n )\n } else {\n const components = {\n a: ({ children, href }) => (\n \n )\n }\n\n return (\n \n {content}\n \n )\n }\n}\n\nexport default Markdown\n","import React from 'react'\nimport classNames from 'classnames';\n\nimport { CompletionRole, CompletionState } from '../../types';\nimport Markdown from '../../components/Markdown';\n\ntype Props = {\n completionId?: number;\n content: string;\n role: CompletionRole;\n state: CompletionState;\n}\n\nfunction Bubble({ completionId, content, role, state }: Props) {\n const containerClassNames = classNames({\n \"pilot-completions-bubble\": true,\n \"assistant\": CompletionRole.Assistant === role,\n \"user\": CompletionRole.User === role,\n \"processing\": CompletionState.Processing === state,\n \"completed\": CompletionState.Completed === state,\n \"failed\": CompletionState.Failed === state,\n })\n\n return (\n

\n
\n {CompletionRole.Assistant === role ? : content}\n
\n
\n )\n}\n\nexport default Bubble\n","import { useDispatch, useSelector } from 'react-redux'\n\nimport type { RootState, AppDispatch } from './store'\n\nexport const useAppDispatch = useDispatch.withTypes()\nexport const useAppSelector = useSelector.withTypes()\n","import React from 'react'\nimport { isEqual } from 'lodash'\n\nimport { CompletionRole, CompletionState } from '../../types'\nimport Bubble from './Bubble'\nimport { useAppSelector } from '../../hooks';\nimport { getCompletionById } from './selectors';\n\ntype Props = {\n completionId: number;\n}\n\nfunction ListItem({ completionId }: Props) {\n const completion = useAppSelector((state) => getCompletionById(state, completionId), isEqual)\n\n return (\n <>\n \n \n \n )\n}\n\nexport default ListItem\n","import React from \"react\"\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons'\n\nfunction Loading() {\n return (\n
\n \n loading...\n
\n )\n}\n\nexport default Loading\n","import React from 'react'\n\ntype Props = {\n bodyScroll: boolean;\n children: React.ReactNode;\n}\n\nfunction ScrollableList({ bodyScroll, children }: Props) {\n const outerRef = React.useRef(null)\n const innerRef = React.useRef(null)\n\n const scrollToBottom = () => {\n if (bodyScroll) {\n window.scrollTo({ top: outerRef.current!.scrollHeight, behavior: 'smooth' })\n } else {\n outerRef.current!.scrollTo({ top: outerRef.current!.scrollHeight, behavior: 'smooth' })\n }\n }\n\n React.useEffect(() => {\n if (!innerRef.current) return\n const resizeObserver = new ResizeObserver(() => scrollToBottom())\n resizeObserver.observe(innerRef.current)\n return () => resizeObserver.disconnect()\n }, [])\n\n return (\n
\n
\n {children}\n
\n
\n )\n}\n\nexport default ScrollableList\n","import React from 'react'\nimport { isEqual } from 'lodash'\n\nimport ListItem from './ListItem'\nimport { getAllCompletionIds, isFetching } from './selectors'\nimport { useAppDispatch, useAppSelector } from '../../hooks'\nimport { fetchCompletions } from './actions'\nimport Loading from '../../components/Loading'\nimport Bubble from './Bubble'\nimport { PilotContextType, CompletionRole, CompletionState } from '../../types'\nimport PilotContext from 'bundles/Pilot/contexts/PilotContext'\nimport ScrollableList from './ScrollableList'\n\ntype Props = {\n bodyScroll?: boolean;\n}\n\nfunction List({ bodyScroll = false}: Props) {\n const dispatch = useAppDispatch()\n const completionIds = useAppSelector(getAllCompletionIds, isEqual)\n const fetching = useAppSelector(isFetching, isEqual)\n const { threadKey } = React.useContext(PilotContext)\n\n React.useEffect(() => {\n dispatch(fetchCompletions({ threadKey }))\n }, [])\n\n return (\n \n {(0 === completionIds.length && !fetching) ? : null}\n {fetching ? : null}\n {completionIds.map((completionId) => )}\n \n )\n}\n\nexport default List\n","import React from 'react'\nimport classNames from 'classnames';\n\nimport { ChannelState } from '../types'\n\ntype Props = {\n channelState: ChannelState;\n}\n\nfunction ChannelStateDot({ channelState }: Props) {\n const dotClassNames = classNames({\n \"pilot-channel-state-dot\": true,\n \"connected\": ChannelState.Connected === channelState,\n \"disconnected\": ChannelState.Disconnected === channelState,\n })\n\n return (\n
 
\n )\n}\n\nexport default ChannelStateDot\n","import React from 'react'\nimport Button from 'react-bootstrap/Button'\nimport TextareaAutosize from 'react-textarea-autosize'\nimport { isEqual } from 'lodash'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowUp, faSpinner } from '@fortawesome/free-solid-svg-icons'\nimport { isMobile } from 'react-device-detect'\n\nimport { useAppDispatch, useAppSelector } from '../../hooks'\nimport { createCompletion } from './actions'\nimport { getChannelState, isCreating, isProcessing } from './selectors'\nimport { PilotContextType, ChannelState } from '../../types'\nimport ChannelStateDot from '../../components/ChannelStateDot'\nimport PilotContext from 'bundles/Pilot/contexts/PilotContext'\n\nconst EMPTY_STRING = \"\"\nconst PLACE_HOLDER = \"Ask Solo a question here...\"\nconst ENTER_KEYBOARD_EVENT = \"Enter\"\n\nfunction Footer() {\n const dispatch = useAppDispatch()\n const creating = useAppSelector(isCreating, isEqual)\n const processing = useAppSelector(isProcessing, isEqual)\n const channelState = useAppSelector(getChannelState, isEqual)\n const { agentKey, threadKey, context } = React.useContext(PilotContext)\n const [userRequest, setUserRequest] = React.useState(EMPTY_STRING)\n const [loading, setLoading] = React.useState(false)\n const [disabled, setDisabled] = React.useState(true)\n const textareaRef = React.useRef(undefined)\n\n const handleSubmit = () => {\n if (!disabled) {\n dispatch(createCompletion({ agentKey, threadKey, context, userRequest }))\n setUserRequest(EMPTY_STRING)\n\n if (isMobile) {\n textareaRef!.current.blur()\n }\n }\n }\n\n const handleKeyDown = (event: any) => {\n if (ENTER_KEYBOARD_EVENT === event.key) {\n event.preventDefault()\n handleSubmit()\n }\n }\n\n React.useEffect(() => {\n setLoading(creating || processing)\n }, [creating, processing])\n\n React.useEffect(() => {\n setDisabled(\n EMPTY_STRING === userRequest\n || creating\n || processing\n || ChannelState.Connected !== channelState\n )\n }, [userRequest, creating, processing, channelState])\n\n return (\n
\n
\n setUserRequest(e.target.value)}\n placeholder={PLACE_HOLDER}\n onKeyDown={handleKeyDown}\n />\n
\n
\n \n handleSubmit()}\n size='sm'\n disabled={disabled}\n >\n \n \n
\n
\n )\n}\n\nexport default Footer\n","import * as React from 'react'\nimport { createConsumer } from \"@rails/actioncable\"\n\nimport { cableUrl } from \"../../utils/channels\"\nimport { camelKeys, snakeKeys } from \"../../utils/json\"\nimport { ChannelState, CompletionsChannelPayload, CompletionsChannelPayloadType, CompletionDelta, Completion, PilotContextType } from \"../../types\"\nimport { appendAssistantCompletionDelta, updateChannelState, upsertCompletion } from './slice'\nimport { useAppDispatch } from '../../hooks'\nimport PilotContext from 'bundles/Pilot/contexts/PilotContext'\n\nconst CHANNEL_NAME = \"PilotCompletionsChannel\"\n\ntype Props = {\n children: React.ReactNode;\n}\n\nconst Channel = ({ children }: Props): React.ReactElement => {\n const dispatch = useAppDispatch()\n const { threadKey } = React.useContext(PilotContext)\n\n const handlePayloadReceived = (payload: CompletionsChannelPayload) => {\n switch (payload.type) {\n case CompletionsChannelPayloadType.Delta:\n dispatch(appendAssistantCompletionDelta(payload.data as CompletionDelta))\n break\n case CompletionsChannelPayloadType.Object:\n dispatch(upsertCompletion(payload.data as Completion))\n break\n }\n }\n\n const createChannel = () => {\n return createConsumer(cableUrl()).subscriptions.create(snakeKeys({\n channel: CHANNEL_NAME,\n threadKey,\n }), {\n connected: handleConnected,\n disconnected: handleDisconnected,\n received: handleReceived,\n })\n }\n\n const handleConnected = () => dispatch(updateChannelState(ChannelState.Connected))\n const handleDisconnected = () => dispatch(updateChannelState(ChannelState.Disconnected))\n const handleReceived = (payload: any) => handlePayloadReceived(camelKeys(payload))\n\n React.useEffect(() => {\n const channel = createChannel()\n return () => channel.unsubscribe()\n }, [])\n\n return (<>{children})\n}\n\nexport default Channel\n","export const cableUrl = (): string => document.querySelector(`meta[name=\"action-cable-url\"]`)!.getAttribute(\"content\")!\n","import React from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronDown, faArrowUpRightFromSquare } from '@fortawesome/free-solid-svg-icons'\nimport Sparkles from '../assets/Sparkles'\nimport Button from 'react-bootstrap/Button'\n\nconst SOLO_PATH = \"/solo\"\n\ntype Props = {\n close: () => void;\n}\n\nfunction Header({ close }: Props) {\n const openInNewWindow = () => {\n window.open(SOLO_PATH, \"_blank\")\n }\n\n return (\n
\n
\n \n Ask Solo\n
\n
\n \n \n
\n
\n )\n}\n\nexport default Header\n","import React from 'react'\n\nimport List from '../features/completions/List'\nimport Footer from '../features/completions/Footer'\nimport Channel from '../features/completions/Channel'\nimport Header from '../components/Header'\n\ninterface Props {\n close: () => void;\n}\n\nfunction FastActionChat({ close }: Props) {\n return (\n
\n
close()} />\n \n \n \n
\n
\n )\n}\n\nexport default FastActionChat\n","import React from 'react'\nimport { Toaster } from 'react-hot-toast'\nimport { Provider } from 'react-redux'\nimport classNames from 'classnames'\n\nimport store from './store'\nimport PilotContext from './contexts/PilotContext'\nimport FastActionButton from './components/FastActionButton'\nimport FastActionChat from './components/FastActionChat'\n\ninterface Props {\n props: {\n agentKey: string;\n authenticated: boolean;\n context: object;\n threadKey: string;\n }\n}\n\nfunction FastActionWidget({ props: { agentKey, authenticated, context, threadKey } }: Props) {\n const [collapsed, setCollapsed] = React.useState(true)\n const [showCompletions, setShowCompletions] = React.useState(false)\n\n const containerClassNames = classNames({\n \"pilot-faw\": true,\n \"expanded\": !collapsed,\n \"collapsed\": collapsed,\n })\n\n React.useEffect(() => {\n // We don't want to connect unless the user opens the widget, then we stay connected\n if (false === collapsed && false == showCompletions) {\n setShowCompletions(true)\n }\n }, [collapsed])\n\n return (\n \n \n \n
\n setCollapsed(false)} />\n {showCompletions ? setCollapsed(true)} /> : null}\n
\n
\n
\n )\n}\n\nexport default FastActionWidget\n","import { Controller } from \"@hotwired/stimulus\"\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport JsConvertCase from 'js-convert-case'\n\nimport FastActionWidget from '../../bundles/Pilot/FastActionWidget'\n\nexport default class extends Controller {\n get props() {\n return JSON.parse(this.data.get(\"props\"))\n }\n\n connect() {\n this.root = createRoot(this.element)\n this.root.render()\n }\n\n disconnect() {\n this.root.unmount()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n // *** Events\n\n handleChange(e) {\n window.location.href = this.replaceUrlParam(window.location.href, 'pilot_prompt_id', e.target.value)\n }\n\n // *** Helpers\n\n replaceUrlParam(url, paramName, paramValue) {\n const urlObject = new URL(url)\n const params = new URLSearchParams(urlObject.search)\n\n params.set(paramName, paramValue)\n urlObject.search = params.toString()\n\n return urlObject.href\n }\n}\n","import React from 'react'\nimport { Toaster } from 'react-hot-toast'\nimport { Provider } from 'react-redux'\n\nimport List from './features/completions/List'\nimport Footer from './features/completions/Footer'\nimport Channel from './features/completions/Channel'\nimport store from './store'\nimport PilotContext from './contexts/PilotContext'\n\ninterface Props {\n props: {\n agentKey: string;\n authenticated: boolean;\n context: object;\n threadKey: string;\n }\n}\n\nfunction PilotApp({ props: { agentKey, authenticated, context, threadKey } }: Props) {\n return (\n \n \n \n
\n \n \n \n
\n
\n
\n
\n )\n}\n\nexport default PilotApp","import { Controller } from \"@hotwired/stimulus\"\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport JsConvertCase from 'js-convert-case'\n\nimport Window from '../../bundles/Pilot/Window'\n\nexport default class extends Controller {\n get props() {\n return JSON.parse(this.data.get(\"props\"))\n }\n\n connect() {\n this.root = createRoot(this.element)\n this.root.render()\n }\n\n disconnect() {\n this.root.unmount()\n }\n}\n","// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport ClipboardController from \"./clipboard_controller\"\napplication.register(\"clipboard\", ClipboardController)\n\nimport Inputs__CurrencyController from \"./inputs/currency_controller\"\napplication.register(\"inputs--currency\", Inputs__CurrencyController)\n\nimport Inputs__TextareaController from \"./inputs/textarea_controller\"\napplication.register(\"inputs--textarea\", Inputs__TextareaController)\n\nimport Pilot__AnchorController from \"./pilot/anchor_controller\"\napplication.register(\"pilot--anchor\", Pilot__AnchorController)\n\nimport Pilot__FawController from \"./pilot/faw_controller\"\napplication.register(\"pilot--faw\", Pilot__FawController)\n\nimport Pilot__PlaygroundSelectorController from \"./pilot/playground_selector_controller\"\napplication.register(\"pilot--playground-selector\", Pilot__PlaygroundSelectorController)\n\nimport Pilot__WindowController from \"./pilot/window_controller\"\napplication.register(\"pilot--window\", Pilot__WindowController)\n","import {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip,\n} from 'bootstrap';\n\n// Make available globally\nwindow.Alert = Alert;\nwindow.Button = Button;\nwindow.Carousel = Carousel;\nwindow.Collapse = Collapse;\nwindow.Dropdown = Dropdown;\nwindow.Modal = Modal;\nwindow.Offcanvas = Offcanvas;\nwindow.Popover = Popover;\nwindow.ScrollSpy = ScrollSpy;\nwindow.Tab = Tab;\nwindow.Toast = Toast;\nwindow.Tooltip = Tooltip;\n","//\n// navbar-dropdown.js\n//\n\nimport { createPopper } from '@popperjs/core';\n\n//\n// Variables\n//\n\n// Selectors\nconst drops = document.querySelectorAll('.navbar-nav .dropdown, .navbar-nav .dropend');\nconst toggles = document.querySelectorAll('.navbar-nav .dropdown-toggle');\nconst collapses = document.querySelectorAll('.navbar-collapse');\n\n// Transition\nconst transitionDuration = 200;\n\n// Positioner\nconst overflowPadding = 16;\n\n// Breakpoint\nconst desktopSize = 992;\n\n//\n// Functions\n//\n\n// Show drop\nfunction showDrop(e, menu) {\n if (window.innerWidth < desktopSize) {\n return;\n }\n\n menu.classList.add('showing');\n\n setTimeout(() => {\n menu.classList.remove('showing');\n menu.classList.add('show');\n }, 1);\n\n positionDrop(menu);\n}\n\n// Hide drop\nfunction hideDrop(e, menu) {\n if (window.innerWidth < desktopSize) {\n return;\n }\n\n if (!menu.classList.contains('show')) {\n return;\n }\n\n if (e.type === 'click' && e.target.closest('.dropdown-menu form')) {\n return;\n }\n\n menu.classList.add('showing');\n menu.classList.remove('show');\n\n setTimeout(() => {\n menu.classList.remove('showing');\n }, transitionDuration);\n}\n\n// Toggle drop\nfunction toggleDrop(e, menu) {\n e.preventDefault();\n\n if (window.innerWidth >= desktopSize) {\n return;\n }\n\n const parentElement = menu.parentElement;\n const parentMenu = parentElement.closest('.navbar, .navbar .dropdown-menu');\n const siblingMenus = parentMenu.querySelectorAll('.dropdown-menu');\n\n siblingMenus.forEach((el) => {\n if (el !== menu) {\n el.classList.remove('show');\n }\n });\n\n menu.classList.toggle('show');\n}\n\n// Hide menus\nfunction hideMenus(menus) {\n if (window.innerWidth >= desktopSize) {\n return;\n }\n\n menus.forEach((menu) => {\n menu.classList.remove('show');\n });\n}\n\n// Position drop\nfunction positionDrop(menu) {\n const positioner = menu.parentElement;\n const drop = positioner.parentElement;\n\n const isDropright = drop.classList.contains('dropend');\n const menuOffset = isDropright ? [-32, 0] : [0, 0];\n const menuPlacement = isDropright ? 'right-start' : 'auto';\n\n createPopper(drop, positioner, {\n placement: menuPlacement,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: menuOffset,\n },\n },\n {\n name: 'preventOverflow',\n options: {\n padding: overflowPadding,\n },\n },\n ],\n });\n}\n\n//\n// Listeners\n//\n\ndrops.forEach((dropdown) => {\n const menu = dropdown.querySelector('.dropdown-menu');\n\n // Show drop\n dropdown.addEventListener('mouseenter', (e) => {\n showDrop(e, menu);\n });\n\n // Hide drop\n dropdown.addEventListener('mouseleave', (e) => {\n hideDrop(e, menu);\n });\n});\n\ntoggles.forEach((toggle) => {\n const menu = toggle.parentElement.querySelector('.dropdown-menu');\n\n // Toggle drop (mobile)\n toggle.addEventListener('click', (e) => {\n toggleDrop(e, menu);\n });\n});\n\ncollapses.forEach((collapse) => {\n collapse.addEventListener('hide.bs.collapse', () => {\n const menus = collapse.querySelectorAll('.dropdown-menu');\n\n // Hide menus\n hideMenus(menus);\n });\n});\n","import $ from \"jquery\";\n\n$(document).ready(function() {\n if (!document.querySelector(\"#card-element\")) return;\n\n const stripe = Stripe('pk_live_51EKqBsCvO67G2przyFOcLxrj7qhOxK7KIpiLSuLXEpxyZYPpO7qNDgvvAEVOUkIjWyv2fsd89ekF27RKwkatfDrh00gEVrDGbi', {\n apiVersion: '2023-10-16',\n });\n const elements = stripe.elements();\n var inputComplete = false;\n const cardErrorSection = document.getElementById('card-errors');\n const card = elements.create(\"card\", {\n style: {\n base: {\n //these values are taken from the defaults we are using in bootstrap's \"forms\" style for .form-control\n color: '#464a4c',\n fontSize: '16px'\n }\n }\n });\n card.mount(\"#card-element\");\n card.on('change', function(event) {\n if (event.error) {\n cardErrorSection.textContent = event.error.message;\n } else {\n cardErrorSection.textContent = '';\n }\n inputComplete = event.complete;\n });\n\n const form = document.getElementById('payment-form');\n const submitButton = form.querySelector(\"input[type=submit], button[type=submit]\");\n const originalButtonText = submitButton.textContent;\n const buttonDisableText = submitButton.dataset.disableWith;\n delete submitButton.dataset.disableWith;\n\n function handleSubmit(event) {\n if (!inputComplete) {\n event.preventDefault();\n if (!cardErrorSection.textContent || cardErrorSection.textContent.length === 0) {\n cardErrorSection.textContent = \"Your card details are incomplete\";\n }\n return;\n }\n\n event.preventDefault();\n submitButton.textContent = buttonDisableText;\n submitButton.disabled = true;\n stripe.confirmCardPayment(form.dataset.secret, {\n payment_method: {\n card: card\n }\n }).then(function(result) {\n submitButton.disabled = false;\n if (result.error) {\n cardErrorSection.textContent = result.error.message;\n submitButton.textContent = originalButtonText;\n } else if (result.paymentIntent.status === 'succeeded') {\n const paymentIntentInput = form.querySelector(\"input[type=hidden][name*=payment_intent_id]\");\n paymentIntentInput.value = result.paymentIntent.id;\n\n form.removeEventListener('submit', handleSubmit);\n submitButton.focus();\n submitButton.click();\n }\n });\n }\n form.addEventListener('submit', handleSubmit);\n\n const targetNode = document.getElementById('card-element');\n const observer = new MutationObserver(function(mutationsList, observer) {\n const label = form.querySelector('label');\n if (!label) return;\n \n const labelClassList = label.classList;\n const highlightClass = 'highlight-label';\n for (const mutation of mutationsList) {\n if (mutation.target.classList.contains('StripeElement--focus')) {\n labelClassList.add(highlightClass);\n } else {\n labelClassList.remove(highlightClass);\n }\n console.log('The ' + mutation.attributeName + ' attribute was modified.');\n }\n });\n observer.observe(document.getElementById('card-element'), { attributes: true });\n});\n$(document).ready(function() {\n if (!document.querySelector(\"#payment-element\")){\n return;\n }\n const stripeData = document.getElementById('stripe-data');\n const intentType = stripeData?.dataset?.intentType || 'payment';\n const form = document.getElementById('payment-form');\n const submitButton = form.querySelector(\"input[type=submit], button[type=submit]\");\n const originalButtonText = submitButton.textContent;\n const buttonDisableText = submitButton.dataset.disableWith;\n const stripe = Stripe('pk_live_51LXZcYB2PeTgiGWPnB8PA4kRwRoKwYpLQTB3Ur2AXJgOsWsE1fNmeKL5TtnJkC5G7J4MRNMe9JLKMVC6DCfAj3dh00P2iS75NT', {\n apiVersion: '2023-10-16',\n });\n const options = {\n clientSecret: form.dataset.secret\n };\n const elements = stripe.elements(options);\n const paymentErrorSection = document.getElementById('payment-errors');\n \n const paymentElement = elements.create(\"payment\", {\n fields: {\n billingDetails: {\n email: intentType === 'setup' ? 'auto' : 'never'\n }\n }\n });\n \n \n paymentElement.mount(\"#payment-element\");\n paymentElement.on('change', function(event) {\n if (event.error) {\n paymentErrorSection.textContent = event.error.message;\n } else {\n paymentErrorSection.textContent = '';\n }\n });\n\n function handleSubmit(event) {\n event.preventDefault();\n\n submitButton.disabled = true;\n submitButton.textContent = buttonDisableText;\n\n const confirmParams = {\n return_url: form.dataset.returnUrl\n };\n\n if (intentType === 'payment') {\n confirmParams.payment_method_data = {\n billing_details: {\n email: form.dataset.customerEmail,\n }\n };\n \n stripe.confirmPayment({\n elements,\n confirmParams\n }).then(function(result) {\n submitButton.disabled = false;\n if (result.error) {\n paymentErrorSection.textContent = result.error.message;\n submitButton.textContent = originalButtonText;\n }\n });\n } else {\n stripe.confirmSetup({\n elements,\n confirmParams\n }).then(function(result) {\n submitButton.disabled = false;\n if (result.error) {\n paymentErrorSection.textContent = result.error.message;\n submitButton.textContent = originalButtonText;\n }\n });\n }\n }\n form.addEventListener('submit', handleSubmit);\n});\n","export default Object.freeze({\n BLOG_POST_CONTENT_ID: 'post-content',\n BLOG_SUMMARY_SELECTOR: '.summary',\n MAIN_NAVBAR_ID: 'main-navbar',\n START_ANSWER_BUTTON_ID: 'blog_floating_cta',\n ARTICLES_LIST_HEADER_TEXT: 'How to Answer a Summons for debt collection in all 50 states',\n\n // Table of Contents constants\n TOC_DATA_TOGGLE_ATTRIBUTE: 'data-toggle=\"toc\"',\n TOC_DESKTOP_COLUMN_ID: 'toc-desktop-column',\n TOC_DESKTOP_CONTAINER_ID: 'toc-desktop-container',\n TOC_DROPDOWN_BUTTON_ID: 'toc-dropdown-button',\n TOC_DROPDOWN_MENU_ID: 'toc-dropdown-menu',\n TOC_HEADER_ID: 'toc-header',\n TOC_ID: 'toc',\n TOC_MOBILE_CONTAINER_ID: 'toc-mobile-container',\n TOC_MOBILE_STICKY_WRAPPER_ID: 'toc-mobile-sticky-wrapper',\n TOC_MOBILE_TEXT: 'Contents',\n TOC_SKIP_ATTRIBUTE: 'data-toc-skip',\n TOC_TEXT_ATTRIBUTE: 'data-toc-text',\n\n COMMENTO: {\n // IDs\n DIV_ID: 'commento',\n HEADER_ID: 'commento-header',\n WRAPPER_ID: 'commento-wrapper',\n\n // URLs\n SCRIPT_SOURCE: 'https://cdn.commento.io/js/commento.js',\n CSS_SOURCE: '/blog_commento.css',\n\n // Selectors\n ROOT_CLASS: '.commento-root',\n CANCEL_BUTTON_CLASS: 'commento-option-cancel',\n REPLY_BUTTON_CLASS: 'commento-option-reply',\n REPLY_BUTTONS_SELECTOR:\n '.commento-option-button.commento-option-reply, .commento-option-button.commento-option-cancel',\n TEXT_AREA_SELECTOR: '.commento-root textarea',\n COMMENT_CARD_CLASS: '.commento-card',\n COMMENT_TEXT_PREFIX: 'commento-comment-text-',\n SUBMIT_BUTTON_CLASS: '.commento-submit-button',\n ANONYMOUS_CHECKBOX_CLASS: '.commento-anonymous-checkbox-container',\n CONTROLS_CONTAINER_CLASS: 'commento-controls-container',\n SUBMIT_WRAPPER_CLASS: 'submit-button-wrapper',\n CHECKBOX_WRAPPER_CLASS: 'checkbox-wrapper',\n\n // Text content\n TEXT_AREA_PLACEHOLDER_TEXT: 'Add a comment',\n NEW_TEXT_AREA_PLACEHOLDER_TEXT: 'Add a comment...',\n REPLY_BUTTON_TEXT: 'Reply',\n HEADER_TEXT: 'Comments',\n\n // Limits\n MAX_CHARACTERS: 10000,\n },\n});\n","export function convertRemToPixels(rem) {\n return parseFloat(getComputedStyle(document.documentElement).fontSize) * rem;\n}\n\nexport function createElementWithAttributes(tag, attributes) {\n const element = document.createElement(tag);\n Object.entries(attributes).forEach(([key, value]) => element.setAttribute(key, value));\n return element;\n}\n\nexport function getCurrentScrollPosition() {\n return window.pageYOffSet || document.documentElement.scrollTop || 0;\n}\n","import CONSTANTS from './constants';\nimport { createElementWithAttributes } from './domHelpers';\n\nconst COMMENTO = {\n init() {\n if (!this.validateInitialization()) return;\n this.injectCommentoElements();\n this.initializeObservers();\n },\n\n validateInitialization() {\n const postContent = document.getElementById(CONSTANTS.BLOG_POST_CONTENT_ID);\n if (!postContent) return false;\n\n const mobileTocWrapper = document.getElementById(CONSTANTS.TOC_MOBILE_STICKY_WRAPPER_ID);\n if (mobileTocWrapper) {\n throw new Error('Commento must be initialized before TOC to ensure proper header inclusion');\n }\n\n return true;\n },\n\n // DOM manipulation methods\n injectCommentoElements() {\n const postContent = document.getElementById(CONSTANTS.BLOG_POST_CONTENT_ID);\n const commentoWrapper = this.createCommentoStructure();\n this.insertCommentoIntoDOM(postContent, commentoWrapper);\n },\n\n createCommentoStructure() {\n const wrapper = createElementWithAttributes('div', {\n id: CONSTANTS.COMMENTO.WRAPPER_ID,\n });\n\n const header = createElementWithAttributes('h2', {\n id: CONSTANTS.COMMENTO.HEADER_ID,\n });\n header.textContent = CONSTANTS.COMMENTO.HEADER_TEXT;\n\n const commentoDiv = createElementWithAttributes('div', {\n id: CONSTANTS.COMMENTO.DIV_ID,\n });\n\n const script = createElementWithAttributes('script', {\n defer: '',\n src: CONSTANTS.COMMENTO.SCRIPT_SOURCE,\n 'data-css-override': CONSTANTS.COMMENTO.CSS_SOURCE,\n });\n\n wrapper.appendChild(header);\n wrapper.appendChild(commentoDiv);\n wrapper.appendChild(script);\n\n return wrapper;\n },\n\n insertCommentoIntoDOM(postContent, commentoWrapper) {\n const articlesList = Array.from(postContent.getElementsByTagName('h2')).find(\n (h2) => h2.textContent.trim() === CONSTANTS.ARTICLES_LIST_HEADER_TEXT\n );\n\n if (articlesList) {\n articlesList.parentNode.insertBefore(commentoWrapper, articlesList);\n } else {\n postContent.appendChild(commentoWrapper);\n }\n },\n\n // Observer initialization and management\n initializeObservers() {\n const rootObserver = new MutationObserver((mutations) => {\n const commentoRoot = document.querySelector(CONSTANTS.COMMENTO.ROOT_CLASS);\n if (commentoRoot) {\n rootObserver.disconnect();\n this.initReplyButtonObserver(commentoRoot);\n this.initTextareaObserver(commentoRoot);\n }\n });\n\n rootObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n },\n\n initReplyButtonObserver(commentoRoot) {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach(() => this.handleReplyButtons());\n });\n\n observer.observe(commentoRoot, {\n childList: true,\n subtree: true,\n });\n },\n\n handleReplyButtons() {\n const replyButtons = document.querySelectorAll(CONSTANTS.COMMENTO.REPLY_BUTTONS_SELECTOR);\n\n replyButtons.forEach((button) => {\n this.styleReplyButton(button);\n this.repositionReplyButton(button);\n });\n },\n\n styleReplyButton(button) {\n if (button.classList.contains(CONSTANTS.COMMENTO.CANCEL_BUTTON_CLASS)) {\n button.textContent = '';\n button.setAttribute('data-reply-button', 'false');\n } else if (button.classList.contains(CONSTANTS.COMMENTO.REPLY_BUTTON_CLASS)) {\n button.classList.remove(CONSTANTS.COMMENTO.REPLY_BUTTON_CLASS);\n button.textContent = CONSTANTS.COMMENTO.REPLY_BUTTON_TEXT;\n button.setAttribute('data-reply-button', 'true');\n }\n },\n\n repositionReplyButton(button) {\n const commentCard = button.closest(CONSTANTS.COMMENTO.COMMENT_CARD_CLASS);\n if (!commentCard) return;\n\n // Check if this is an edit action by looking for a textarea with content\n const textarea = commentCard.querySelector('textarea');\n const isEditAction = textarea && textarea.value.trim().length > 0;\n if (isEditAction) return;\n\n const commentText = commentCard.querySelector(`[id^=\"${CONSTANTS.COMMENTO.COMMENT_TEXT_PREFIX}\"]`);\n if (!commentText) return;\n\n button.style.position = 'static';\n const nextSibling = commentText.nextSibling;\n if (nextSibling !== button) {\n commentText.parentNode.insertBefore(button, nextSibling);\n }\n },\n\n initTextareaObserver(commentoRoot) {\n const observer = new MutationObserver(() => {\n const textareas = document.querySelectorAll(CONSTANTS.COMMENTO.TEXT_AREA_SELECTOR);\n textareas.forEach((textarea) => {\n if (textarea.getAttribute('placeholder') === CONSTANTS.COMMENTO.TEXT_AREA_PLACEHOLDER_TEXT) {\n this.setupTextarea(textarea);\n }\n });\n });\n\n observer.observe(commentoRoot, {\n childList: true,\n subtree: true,\n });\n },\n\n setupTextarea(textarea) {\n this.styleTextarea(textarea);\n this.setupControlsContainer(textarea);\n this.initializeTextareaEvents(textarea);\n },\n\n styleTextarea(textarea) {\n Object.assign(textarea.style, {\n height: 'auto',\n paddingTop: '0',\n paddingBottom: '0',\n lineHeight: '1',\n fontWeight: '300',\n });\n textarea.setAttribute('placeholder', CONSTANTS.COMMENTO.NEW_TEXT_AREA_PLACEHOLDER_TEXT);\n textarea.setAttribute('maxlength', CONSTANTS.COMMENTO.MAX_CHARACTERS);\n },\n\n setupControlsContainer(textarea) {\n const textAreaParent = textarea.parentElement.parentElement;\n const submitButton = textAreaParent?.querySelector(CONSTANTS.COMMENTO.SUBMIT_BUTTON_CLASS);\n const anonymousCheckbox = textAreaParent?.querySelector(CONSTANTS.COMMENTO.ANONYMOUS_CHECKBOX_CLASS);\n\n if (submitButton && !textAreaParent.querySelector(`.${CONSTANTS.COMMENTO.CONTROLS_CONTAINER_CLASS}`)) {\n const container = this.createControlsContainer(submitButton, anonymousCheckbox);\n textarea.parentElement.after(container);\n this.initializeControlsVisibility(textarea, submitButton, anonymousCheckbox);\n }\n },\n\n createControlsContainer(submitButton, anonymousCheckbox) {\n const container = document.createElement('div');\n container.className = CONSTANTS.COMMENTO.CONTROLS_CONTAINER_CLASS;\n\n const submitWrapper = document.createElement('div');\n submitWrapper.className = CONSTANTS.COMMENTO.SUBMIT_WRAPPER_CLASS;\n submitButton.parentNode.insertBefore(submitWrapper, submitButton);\n submitWrapper.appendChild(submitButton);\n\n if (anonymousCheckbox) {\n const checkboxWrapper = document.createElement('div');\n checkboxWrapper.className = CONSTANTS.COMMENTO.CHECKBOX_WRAPPER_CLASS;\n anonymousCheckbox.parentNode.insertBefore(checkboxWrapper, anonymousCheckbox);\n checkboxWrapper.appendChild(anonymousCheckbox);\n container.appendChild(checkboxWrapper);\n }\n\n container.appendChild(submitWrapper);\n\n return container;\n },\n\n initializeControlsVisibility(textarea, submitButton, anonymousCheckbox) {\n const hasText = textarea.value.trim().length > 0;\n this.updateControlsVisibility(submitButton, anonymousCheckbox, hasText);\n },\n\n initializeTextareaEvents(textarea) {\n textarea.addEventListener('input', () => {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n\n const hasText = textarea.value.trim().length > 0;\n const textAreaParent = textarea.parentElement.parentElement;\n const submitButton = textAreaParent?.querySelector(CONSTANTS.COMMENTO.SUBMIT_BUTTON_CLASS);\n const anonymousCheckbox = textAreaParent?.querySelector(CONSTANTS.COMMENTO.ANONYMOUS_CHECKBOX_CLASS);\n\n this.updateControlsVisibility(submitButton, anonymousCheckbox, hasText);\n });\n },\n\n updateControlsVisibility(submitButton, anonymousCheckbox, hasText) {\n const visibilityStyles = {\n height: hasText ? '40px' : '0',\n marginTop: hasText ? '4px' : '0',\n };\n\n if (submitButton) {\n Object.assign(submitButton.parentElement.style, {\n ...visibilityStyles,\n transition: 'height 0.2s ease-out, margin-top 0.2s ease-out',\n });\n submitButton.style.opacity = hasText ? '1' : '0';\n submitButton.style.transition = 'opacity 0.2s ease-out';\n }\n\n if (anonymousCheckbox) {\n Object.assign(anonymousCheckbox.parentElement.style, {\n ...visibilityStyles,\n transition: 'height 0.2s ease-out, margin-top 0.2s ease-out',\n });\n anonymousCheckbox.style.opacity = hasText ? '1' : '0';\n anonymousCheckbox.style.transition = 'opacity 0.2s ease-out';\n }\n },\n};\n\n$(document).ready(COMMENTO.init.bind(COMMENTO));\n","import CONSTANTS from './constants';\nimport { getCurrentScrollPosition } from './domHelpers';\nexport default class CustomScrollSpy {\n constructor(navId, contentId, offset = 100) {\n this.navId = navId;\n this.contentId = contentId;\n this.offset = offset;\n this.nav = null;\n this.content = null;\n this.headings = [];\n this.tocLinks = {};\n\n this.waitForElements().then(() => this.init());\n }\n\n waitForElements() {\n return new Promise((resolve) => {\n const checkElements = () => {\n this.nav = document.getElementById(this.navId);\n this.content = document.getElementById(this.contentId);\n\n if (this.nav && this.content && this.nav.children.length > 0) {\n resolve();\n } else {\n requestAnimationFrame(checkElements);\n }\n };\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', checkElements);\n } else {\n checkElements();\n }\n });\n }\n\n init() {\n if (!this.nav || !this.content) {\n console.error('CustomScrollSpy: Required elements not found');\n return;\n }\n\n this.findHeadings();\n this.createTocLinksMap();\n this.bindScrollEvent();\n }\n\n findHeadings() {\n const allHeadings = Array.from(this.content.querySelectorAll('h1, h2, h3, h4, h5, h6')).filter(\n (heading) => !heading.hasAttribute(CONSTANTS.TOC_SKIP_ATTRIBUTE)\n );\n this.headings = allHeadings.sort((a, b) => {\n return a.getBoundingClientRect().top - b.getBoundingClientRect().top;\n });\n this.headingsMap = new Map(this.headings.map((h, index) => [h.id, { heading: h, index }]));\n }\n\n createTocLinksMap() {\n this.tocLinks = {};\n const links = this.nav.querySelectorAll('.nav-link');\n links.forEach((link) => {\n const targetId = link.getAttribute('href').substring(1);\n const positionId = link.getAttribute('data-positional-element-id');\n this.tocLinks[targetId] = { link, positionId: parseInt(positionId, 10) };\n });\n }\n\n recursivelyMapLinks(element) {\n const foundLinks = element.getElementsByClassName('nav-link');\n Array.from(foundLinks).forEach((link) => {\n const targetId = link.getAttribute('href').substring(1);\n this.tocLinks[targetId] = link;\n });\n\n const foundUls = element.getElementsByTagName('ul');\n Array.from(foundUls).forEach((ul) => {\n this.recursivelyMapLinks(ul);\n });\n }\n\n bindScrollEvent() {\n window.addEventListener('scroll', this.onScroll.bind(this));\n }\n\n onScroll() {\n const scrollPosition = getCurrentScrollPosition() + this.offset;\n let currentHeadingIndex = this.headings.findIndex((heading) => heading.offsetTop > scrollPosition) - 1;\n if (currentHeadingIndex === -2) currentHeadingIndex = this.headings.length - 1;\n\n this.updateActiveLinks(currentHeadingIndex);\n }\n\n updateActiveLinks(currentHeadingIndex) {\n Object.values(this.tocLinks).forEach(({ link }) => link.classList.remove('active'));\n\n if (currentHeadingIndex >= 0) {\n const activeHeadings = new Set();\n let index = currentHeadingIndex;\n\n while (index >= 0) {\n const heading = this.headings[index];\n activeHeadings.add(heading.id);\n\n // Find the next parent heading\n const currentLevel = parseInt(heading.tagName.charAt(1));\n index--;\n while (index >= 0) {\n const parentLevel = parseInt(this.headings[index].tagName.charAt(1));\n if (parentLevel < currentLevel) break;\n index--;\n }\n }\n\n activeHeadings.forEach((headingId) => {\n const tocLink = this.tocLinks[headingId];\n if (tocLink) {\n tocLink.link.classList.add('active');\n }\n });\n }\n }\n}\n","import CONSTANTS from './constants';\nimport CustomScrollSpy from './customScrollSpy';\nimport { createElementWithAttributes, convertRemToPixels, getCurrentScrollPosition } from './domHelpers';\n\nconst TOC = {\n init() {\n const toc = document.querySelector(`nav[${CONSTANTS.TOC_DATA_TOGGLE_ATTRIBUTE}]`);\n const postContent = document.getElementById(CONSTANTS.BLOG_POST_CONTENT_ID);\n if (!toc || !postContent) return;\n\n this.sanitizePostContent();\n this.setTocMaxHeight();\n this.injectMobileToc();\n this.determineTocPlacement();\n this.initializeMobileToc();\n this.initializeScrollHandling();\n this.initializeCustomScrollSpy();\n\n window.addEventListener('resize', () => {\n this.determineTocPlacement();\n this.setTocMaxHeight(toc);\n this.initializeMobileToc();\n });\n },\n\n initializeCustomScrollSpy() {\n const offset = this.isMobile() ? window.innerHeight * 0.4 : 100;\n new CustomScrollSpy(CONSTANTS.TOC_ID, CONSTANTS.BLOG_POST_CONTENT_ID, offset);\n },\n\n isMobile() {\n const tocDesktopColumn = document.getElementById(CONSTANTS.TOC_DESKTOP_COLUMN_ID);\n return window.getComputedStyle(tocDesktopColumn).display === 'none';\n },\n\n determineTocPlacement() {\n const toc = document.getElementById(CONSTANTS.TOC_ID);\n\n if (this.isMobile()) {\n const dropdownMenu = document.getElementById(CONSTANTS.TOC_DROPDOWN_MENU_ID);\n dropdownMenu.appendChild(toc);\n } else {\n const tocDesktopContainer = document.getElementById(CONSTANTS.TOC_DESKTOP_CONTAINER_ID);\n tocDesktopContainer.appendChild(toc);\n }\n },\n\n sanitizePostContent() {\n const postContent = document.getElementById(CONSTANTS.BLOG_POST_CONTENT_ID);\n const headers = postContent.querySelectorAll('h1, h2, h3, h4, h5, h6');\n const sanitizeHeaderText = (text) =>\n text\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '')\n .trim()\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-');\n\n headers.forEach((header) => {\n if (header.hasAttribute(CONSTANTS.TOC_SKIP_ATTRIBUTE)) return;\n\n const tocText = header.textContent.trim();\n const tocId = header.getAttribute(CONSTANTS.TOC_TEXT_ATTRIBUTE) || sanitizeHeaderText(tocText);\n\n if (!header.id) {\n header.id = tocId;\n }\n });\n },\n\n setTocMaxHeight() {\n const toc = document.querySelector(`nav[${CONSTANTS.TOC_DATA_TOGGLE_ATTRIBUTE}]`);\n const navbar = document.getElementById(CONSTANTS.MAIN_NAVBAR_ID);\n const startAnswerButton = document.getElementById(CONSTANTS.START_ANSWER_BUTTON_ID);\n const tocHeader = document.getElementById(CONSTANTS.TOC_HEADER_ID);\n\n if (navbar && toc && startAnswerButton && tocHeader) {\n const navbarHeight = window.scrollY < navbar.offsetHeight ? navbar.offsetHeight : convertRemToPixels(2);\n const buttonHeight = startAnswerButton.offsetHeight;\n const tocHeaderHeight = tocHeader.offsetHeight;\n const windowHeight = window.innerHeight;\n const padding = convertRemToPixels(3);\n\n const maxHeight = windowHeight - navbarHeight - buttonHeight - tocHeaderHeight - padding;\n toc.style.maxHeight = `${maxHeight}px`;\n }\n },\n\n injectMobileToc() {\n const postContent = document.getElementById(CONSTANTS.BLOG_POST_CONTENT_ID);\n const summaryDiv = postContent.querySelector(CONSTANTS.BLOG_SUMMARY_SELECTOR);\n if (!summaryDiv) return;\n\n const stickyWrapper = createElementWithAttributes('div', {\n id: CONSTANTS.TOC_MOBILE_STICKY_WRAPPER_ID,\n class: 'd-lg-none',\n });\n\n const mobileTocContainer = createElementWithAttributes('div', {\n id: CONSTANTS.TOC_MOBILE_CONTAINER_ID,\n });\n\n const dropdownButton = createElementWithAttributes('button', {\n class: 'btn btn-primary dropdown-toggle w-100',\n type: 'button',\n id: CONSTANTS.TOC_DROPDOWN_BUTTON_ID,\n 'data-bs-toggle': 'dropdown',\n 'data-bs-auto-close': 'true',\n 'aria-expanded': 'false',\n });\n dropdownButton.textContent = CONSTANTS.TOC_MOBILE_TEXT;\n this.initialButtonBorderRadius = window.getComputedStyle(dropdownButton).getPropertyValue('border-radius');\n\n const dropdownMenu = createElementWithAttributes('div', {\n id: CONSTANTS.TOC_DROPDOWN_MENU_ID,\n class: 'dropdown-menu w-100',\n 'aria-labelledby': CONSTANTS.TOC_DROPDOWN_BUTTON_ID,\n });\n\n mobileTocContainer.appendChild(dropdownButton);\n mobileTocContainer.appendChild(dropdownMenu);\n stickyWrapper.appendChild(mobileTocContainer);\n summaryDiv.parentNode.insertBefore(stickyWrapper, summaryDiv.nextSibling);\n },\n\n initializeMobileToc() {\n const postContent = document.getElementById(CONSTANTS.BLOG_POST_CONTENT_ID);\n const mobileTocWrapper = document.getElementById(CONSTANTS.TOC_MOBILE_STICKY_WRAPPER_ID);\n const tocMobileContainer = document.getElementById(CONSTANTS.TOC_MOBILE_CONTAINER_ID);\n const dropdownButton = document.getElementById(CONSTANTS.TOC_DROPDOWN_BUTTON_ID);\n const totalMobilePadding =\n tocMobileContainer.offsetHeight + parseFloat(window.getComputedStyle(tocMobileContainer).marginBottom);\n this.updateTriggerPoint();\n const initialTriggerPoint = this.triggerPoint;\n\n window.addEventListener('scroll', () => {\n const scrollPosition = getCurrentScrollPosition();\n const isFixed = scrollPosition >= initialTriggerPoint;\n mobileTocWrapper.classList.toggle('fixed', isFixed);\n dropdownButton.style.borderRadius = isFixed ? '0' : null;\n postContent.style.paddingTop = isFixed ? `${totalMobilePadding}px` : '0';\n });\n },\n\n updateTriggerPoint() {\n const summaryDiv = document.querySelector(CONSTANTS.BLOG_SUMMARY_SELECTOR);\n if (summaryDiv) {\n const rect = summaryDiv.getBoundingClientRect();\n const styles = window.getComputedStyle(summaryDiv);\n const marginBottom = parseFloat(styles.marginBottom);\n this.triggerPoint = rect.bottom + marginBottom + getCurrentScrollPosition();\n }\n },\n\n initializeScrollHandling() {\n const tocNav = document.querySelector(`nav[${CONSTANTS.TOC_DATA_TOGGLE_ATTRIBUTE}]`);\n tocNav.addEventListener('click', (event) => {\n if (event.target.tagName === 'A') {\n event.preventDefault();\n const $target = $(event.target.hash);\n const tocHeight = $(`#${CONSTANTS.TOC_MOBILE_STICKY_WRAPPER_ID}`).outerHeight() || 0;\n\n $(window).scrollTop($target.offset().top - tocHeight);\n }\n });\n },\n};\n\n$(document).ready(TOC.init.bind(TOC));\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport Rails from '@rails/ujs';\nimport * as ActiveStorage from '@rails/activestorage';\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport CollectorsDashboardRoot from './components/CollectorsDashboardRoot';\nimport ConsumerDashboardRoot from './components/ConsumerDashboardRoot';\nimport ExtractSummaryRoot from './components/ExtractSummaryRoot';\nimport OnCallDashboardRoot from './components/OnCallDashboardRoot';\n\n// Import ActionCable\nimport '@rails/actioncable'\n\n// Import all channels\nimport './channels'\n\n// Import hardship form js\nimport './hardship_form'\n\nRails.start();\nActiveStorage.start();\n\nimport \"./controllers\"\n\nimport 'theme/theme';\n\nimport 'other/document_editor';\nimport 'other/direct_uploads';\nimport 'other/stripe';\nimport 'other/document_download_link_polling';\nimport 'other/ssn_input_formatter';\nimport 'other/ssn_toggle';\nimport 'other/phone_number_input_formatter';\nimport 'other/commento';\nimport 'other/toc';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const collectorsContainer = document.getElementById('react-collectors-dashboard-root')\n const consumerContainer = document.getElementById('react-consumer-dashboard-root')\n const extractContainer = document.getElementById('react-extract-container')\n const onCallContainer = document.getElementById('react-on-call-dashboard-root')\n\n if (collectorsContainer) {\n const root = createRoot(collectorsContainer)\n root.render()\n }\n\n if (consumerContainer) {\n const root = createRoot(consumerContainer)\n root.render()\n }\n\n if (extractContainer) {\n const root = createRoot(extractContainer)\n root.render()\n }\n\n if (onCallContainer) {\n const root = createRoot(onCallContainer)\n root.render()\n }\n});\n","// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `bin/rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n","// This file is no longer being used directly\n// The ActionCable subscription is now created directly in the view\n// to avoid asset pipeline issues\n\nimport consumer from \"./consumer\"\n\n/**\n * Update the UI when a Plaid report is ready\n */\nfunction updateUIForReportReady() {\n // Hide loading button\n const loadingButton = document.querySelector('#plaid-loading-button');\n if (loadingButton) {\n loadingButton.style.display = 'none';\n }\n \n // Update skip button to continue\n const skipButton = document.querySelector('#plaid-skip-button');\n if (skipButton) {\n skipButton.textContent = 'Continue';\n skipButton.classList.remove('btn-secondary');\n skipButton.classList.add('btn-primary');\n skipButton.disabled = false;\n }\n \n // Update ALL paragraphs with generating text - not just ones with the class\n const allParagraphs = document.querySelectorAll('p');\n let foundStatus = false;\n \n allParagraphs.forEach(p => {\n // Check if this is a status paragraph\n if (p.textContent.includes('generating') || p.textContent.includes('report') || p.textContent.includes('connecting')) {\n if (!foundStatus) {\n // Update the first one to show success\n p.textContent = \"Account Connection Successful!\";\n p.classList.add('plaid-status-message');\n foundStatus = true;\n } else {\n // Hide any additional status paragraphs\n p.style.display = 'none';\n }\n }\n });\n}\n\n/**\n * Update the UI when a Plaid report fails\n */\nfunction updateUIForReportFailed() {\n // Hide loading button\n const loadingButton = document.querySelector('#plaid-loading-button');\n if (loadingButton) {\n loadingButton.style.display = 'none';\n }\n \n // Update skip button to continue\n const skipButton = document.querySelector('#plaid-skip-button');\n if (skipButton) {\n skipButton.textContent = 'Continue';\n skipButton.classList.remove('btn-secondary');\n skipButton.classList.add('btn-primary');\n skipButton.disabled = false;\n }\n \n // Update ALL paragraphs with generating text - not just ones with the class\n const allParagraphs = document.querySelectorAll('p');\n let foundStatus = false;\n \n allParagraphs.forEach(p => {\n // Check if this is a status paragraph\n if (p.textContent.includes('generating') || p.textContent.includes('report') || p.textContent.includes('connecting')) {\n if (!foundStatus) {\n // Update the first one to show error\n p.textContent = \"We couldn't generate your report, but you can continue.\";\n p.classList.add('plaid-status-message');\n foundStatus = true;\n } else {\n // Hide any additional status paragraphs\n p.style.display = 'none';\n }\n }\n });\n}\n\ndocument.addEventListener('DOMContentLoaded', function() {\n const userIdElement = document.getElementById('user-plaid-channel');\n if (!userIdElement) {\n return;\n }\n \n const userId = userIdElement.getAttribute(\"data-plaid-channel-user-id\");\n if (!userId) {\n return;\n }\n \n consumer.subscriptions.create(\n { channel: \"PlaidReportStatusChannel\", user_id: userId },\n {\n connected() {\n // Connection established\n },\n\n disconnected() {\n // Connection lost\n },\n\n rejected() {\n // Connection rejected\n },\n\n received(data) {\n if (data.status === 'report_ready') {\n updateUIForReportReady();\n } else if (data.status === 'report_failed') {\n updateUIForReportFailed();\n }\n }\n }\n );\n});\n","// Add styles directly to ensure they're applied\nconst style = document.createElement('style');\nstyle.textContent = `\n .hardship-details-hidden {\n display: none !important;\n }\n`;\ndocument.head.appendChild(style);\n\ndocument.addEventListener('DOMContentLoaded', function() {\n console.log('Hardship form script loaded');\n\n // First, hide all detail inputs and remove required attribute\n const allDetailInputs = document.querySelectorAll('textarea[placeholder=\"Tell us more...\"]');\n console.log('Found detail inputs:', allDetailInputs.length);\n \n allDetailInputs.forEach(input => {\n input.classList.add('hardship-details-hidden');\n // Store the original required state if it exists\n if (input.hasAttribute('required')) {\n input.dataset.wasRequired = true;\n input.removeAttribute('required');\n }\n console.log('Added hidden class to input:', input);\n });\n\n // Add event listeners to all checkboxes\n const checkboxes = document.querySelectorAll('input[type=\"checkbox\"]');\n console.log('Found checkboxes:', checkboxes.length);\n \n checkboxes.forEach(checkbox => {\n // Get the associated details input (it's in the next form-group div)\n const detailsInput = checkbox.closest('.form-group').nextElementSibling?.querySelector('textarea[placeholder=\"Tell us more...\"]');\n console.log('Found associated input for checkbox:', checkbox.id, detailsInput);\n \n if (detailsInput) {\n // Set initial state if checked\n if (checkbox.checked) {\n detailsInput.classList.remove('hardship-details-hidden');\n // Restore required attribute if it was originally required\n if (detailsInput.dataset.wasRequired) {\n detailsInput.setAttribute('required', 'required');\n }\n console.log('Showing input for checked checkbox:', checkbox.id);\n }\n \n // Add change event listener\n checkbox.addEventListener('change', function() {\n console.log('Checkbox changed:', this.id, this.checked);\n if (this.checked) {\n detailsInput.classList.remove('hardship-details-hidden');\n // Restore required attribute if it was originally required\n if (detailsInput.dataset.wasRequired) {\n detailsInput.setAttribute('required', 'required');\n }\n } else {\n detailsInput.classList.add('hardship-details-hidden');\n // Remove required attribute to avoid validation errors on hidden fields\n if (detailsInput.hasAttribute('required')) {\n detailsInput.removeAttribute('required');\n }\n }\n });\n }\n });\n});","// from https://guides.rubyonrails.org/v5.2/active_storage_overview.html#example\n\naddEventListener(\"direct-upload:initialize\", event => {\n const { target, detail } = event\n const { id, file } = detail\n target.insertAdjacentHTML(\"beforebegin\", `\n
\n
\n ${file.name}\n
\n `)\n})\n\naddEventListener(\"direct-upload:start\", event => {\n const { id } = event.detail\n const element = document.getElementById(`direct-upload-${id}`)\n element.classList.remove(\"direct-upload--pending\")\n})\n\naddEventListener(\"direct-upload:progress\", event => {\n const { id, progress } = event.detail\n const progressElement = document.getElementById(`direct-upload-progress-${id}`)\n progressElement.style.width = `${progress}%`\n})\n\naddEventListener(\"direct-upload:error\", event => {\n event.preventDefault()\n const { id, error } = event.detail\n const element = document.getElementById(`direct-upload-${id}`)\n element.classList.add(\"direct-upload--error\")\n element.setAttribute(\"title\", error)\n\n const soloSettle = window.location.pathname.includes(\"solosettles\")\n const emailInstructions = soloSettle ?\n \"send your files to support@solosuit.com.\" :\n \"send your files to support@solosuit.com and then click the following button to skip this step: \"\n const chooseFilesButton = document.querySelector(\"input[type=file][data-direct-upload-url]\")\n chooseFilesButton.insertAdjacentHTML(\"afterend\",\n `
There was an error uploading a file. Refresh the page and try again.
If you experience repeated errors, ${emailInstructions}
`)\n chooseFilesButton.remove()\n})\n\naddEventListener(\"direct-upload:end\", event => {\n const { id } = event.detail\n const element = document.getElementById(`direct-upload-${id}`)\n element.classList.add(\"direct-upload--complete\")\n})\n","document.addEventListener(\"DOMContentLoaded\", function() {\n if (document.getElementById('document-editor')) {\n const quill = new Quill('#document-editor', {\n theme: 'snow',\n modules: {\n toolbar: { container: '#toolbar' }\n }\n });\n\n document.getElementById('undo').onclick = function() {\n quill.history.undo();\n };\n document.getElementById('redo').onclick = function() {\n quill.history.redo();\n };\n\n const savedContent = document.querySelector('#hidden-content').value;\n if (savedContent) {\n quill.root.innerHTML = savedContent;\n }\n\n document.getElementById('api-save-button').addEventListener('click', function(e) {\n e.preventDefault();\n\n const successAlert = document.getElementById('save-success-alert');\n const errorAlert = document.getElementById('save-error-alert');\n \n const content = quill.root.innerHTML;\n const form = document.querySelector('#editor-form');\n const documentId = form.action.match(/document_generations\\/(\\d+)/)?.[1];\n \n fetch(`/steps_api/save_editor_content/${documentId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n },\n body: JSON.stringify({ content: content })\n })\n .then(response => response.json())\n .then(data => {\n if (data.status === 'success') {\n successAlert.style.display = 'block';\n setTimeout(() => {\n successAlert.style.display = 'none';\n }, 3000);\n } else {\n errorAlert.style.display = 'block';\n setTimeout(() => {\n errorAlert.style.display = 'none';\n }, 3000);\n }\n })\n .catch(error => {\n console.error('Error:', error);\n // Show error message\n const saveStatus = document.getElementById('save-status');\n saveStatus.textContent = 'Error saving!';\n saveStatus.classList.remove('text-success');\n saveStatus.classList.add('text-danger');\n });\n });\n\n document.getElementById('preview-button').addEventListener('click', function() {\n // wrap with ql-editor to reproduce exactly what we see in the editor\n const quillHtmlContent = `
${quill.root.innerHTML}
`;\n\n html2pdf().set({\n margin: 1,\n filename: 'document-preview.pdf',\n image: { type: 'jpeg', quality: 0.8 },\n jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' } // 8.5 x 11 inches\n }).from(quillHtmlContent).save();\n });\n\n document.getElementById('solosuit-close-modal').onclick = function() {\n document.getElementById('export-pdf-modal').style.display = \"none\";\n };\n\n window.onclick = function(event) {\n if (event.target === document.getElementById('export-pdf-modal')) {\n document.getElementById('export-pdf-modal').style.display = \"none\";\n }\n };\n }\n});","// https://stackoverflow.com/questions/30058927/format-a-phone-number-as-a-user-types-using-pure-javascript\n$(document).ready(function () {\n if (!document.querySelector('input[id*=\"phone_number\"]')) return;\n const phoneNumberInputs = $('input[id*=\"phone_number\"]');\n\n const isNumericInput = (event) => /^\\d$/.test(String.fromCharCode(event.which));\n\n const isModifierKey = (event) => {\n const key = event.key;\n const ctrl = event.ctrlKey || event.metaKey;\n\n // allowed keys\n const functionKeys = ['Backspace', 'Tab', 'Enter', 'Home', 'End', 'Delete'];\n const arrowKeys = ['ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown'];\n const ctrlCombos = ['a', 'c', 'v', 'x', 'z'];\n\n return (\n event.shiftKey ||\n functionKeys.includes(key) ||\n arrowKeys.includes(key) ||\n (ctrl && ctrlCombos.includes(key.toLowerCase())) // user wants to paste phone number\n );\n };\n\n const enforceFormat = (event) => {\n const input = event.target.value.replace(/\\D/g, '');\n const isAtMaxLength = input.length >= 10;\n\n // input must be of a valid number format or a modifier key, and not longer than ten digits\n if ((!isNumericInput(event) && !isModifierKey(event)) || (isNumericInput(event) && isAtMaxLength)) {\n event.preventDefault();\n }\n };\n\n const formatToPhone = (event) => {\n if (isModifierKey(event)) {\n return;\n }\n\n const input = event.target.value.replace(/\\D/g, '').slice(0, 10);\n const match = input.match(/^(\\d{0,3})(\\d{0,3})(\\d{0,4})$/);\n\n if (!match) return '';\n\n const [, areaCode, middle, last] = match;\n\n let formatted = '';\n if (last) formatted = `(${areaCode}) ${middle}-${last}`;\n else if (middle) formatted = `(${areaCode}) ${middle.length == 3 ? middle + '-' : middle}`;\n else if (areaCode) formatted = `(${areaCode.length == 3 ? areaCode + ') ' : areaCode}`;\n event.target.value = formatted;\n };\n\n phoneNumberInputs.on('keydown', enforceFormat);\n phoneNumberInputs.on('keyup', formatToPhone);\n});\n","$(document).ready(function () {\n if (!document.querySelector('#walk_through_step_response_social_security_number') && \n !document.querySelector('#walk_through_step_response_social_security_number_last_four')) return;\n\n const ssnInput = $('#walk_through_step_response_social_security_number');\n const ssnLastFourInput = $('#walk_through_step_response_social_security_number_last_four');\n let digits = '';\n let oldDigits = '';\n let isBackspace = false;\n\n if(ssnInput) {\n ssnInput.on('keydown', function (e) {\n isBackspace = e.key === 'Backspace';\n });\n \n ssnInput.on('input', function () {\n let val = this.value;\n let newDigits = val.replace(/\\D/g, '');\n \n if (newDigits.length < oldDigits.length) {\n // deleted a digit\n digits = newDigits;\n } else if (newDigits.length > oldDigits.length) {\n // added a digit\n digits = newDigits;\n } else if (isBackspace) {\n // deleted a non-digit character (like a dash)\n digits = digits.slice(0, -1);\n }\n \n // Format the digits with dashes\n let formattedVal = formatSSN(digits);\n \n this.value = formattedVal;\n oldDigits = digits;\n isBackspace = false;\n });\n }\n\n if(ssnLastFourInput) {\n ssnLastFourInput.on('input', function() {\n this.value = this.value.replace(/\\D/g, '').slice(0, 4);\n });\n }\n\n function formatSSN(digits) {\n if (digits.length >= 5) {\n return digits.slice(0, 3) + '-' + digits.slice(3, 5) + '-' + digits.slice(5, 9);\n } else if (digits.length >= 3) {\n return digits.slice(0, 3) + '-' + digits.slice(3);\n } else {\n return digits;\n }\n }\n});\n","document.addEventListener('DOMContentLoaded', function() {\n // First find all required elements\n const fullSsnInput = document.querySelector('input[name*=\"social_security_number\"]:not([name*=\"last_four\"])');\n const lastFourInput = document.querySelector('input[name*=\"social_security_number_last_four\"]');\n const toggleLink = document.querySelector('.ssn-toggle');\n\n // Early return if any required elements are missing\n if (!fullSsnInput || !lastFourInput || !toggleLink) {\n console.debug('SSN toggle: Required elements not found');\n return;\n }\n\n // Get parent form groups after confirming inputs exist\n const fullSsnGroup = fullSsnInput.closest('.form-group');\n const lastFourGroup = lastFourInput.closest('.form-group');\n const toggleText = toggleLink.querySelector('.toggle-text');\n\n if (!fullSsnGroup || !lastFourGroup || !toggleText) {\n console.debug('SSN toggle: Required parent elements not found');\n return;\n }\n \n // Initialize state based on which field has a value\n let showingFullSsn = !(lastFourInput.value && !fullSsnInput.value);\n \n // Set initial visibility\n if (!showingFullSsn) {\n fullSsnGroup.classList.add('d-none');\n lastFourGroup.classList.remove('d-none');\n fullSsnInput.required = false;\n lastFourInput.required = true;\n toggleText.textContent = 'I want to enter the full SSN.';\n }\n\n toggleLink.addEventListener('click', function(e) {\n e.preventDefault();\n \n if (showingFullSsn) {\n fullSsnGroup.classList.add('d-none');\n lastFourGroup.classList.remove('d-none');\n fullSsnInput.required = false;\n lastFourInput.required = true;\n toggleText.textContent = 'I want to enter the full SSN.';\n } else {\n fullSsnGroup.classList.remove('d-none');\n lastFourGroup.classList.add('d-none');\n fullSsnInput.required = true;\n lastFourInput.required = false;\n toggleText.textContent = 'I only want to enter the last four digits.';\n }\n \n showingFullSsn = !showingFullSsn;\n });\n}); ","//\n// card-stack.js\n//\n\nconst stacks = document.querySelectorAll('.card-stack');\nconst events = ['load', 'resize', 'scroll'];\n\nstacks.forEach((stack) => {\n const items = stack.querySelectorAll('.card-stack-item');\n\n events.forEach((event) => {\n window.addEventListener(event, () => {\n const arr = [].slice.call(items).reverse();\n\n arr.reduce((total, item, i) => {\n const height = item.clientHeight + parseInt(window.getComputedStyle(item).getPropertyValue('margin-bottom'));\n const offset = arr[i - 1] ? arr[i - 1].offsetTop - item.offsetTop : height;\n const progress = total + (height - offset) / height;\n\n // if (progress !== total) {\n const card = item.firstElementChild;\n const cardInner = card.firstElementChild;\n const translate = 'calc(-1rem * ' + progress + ')';\n const opacity = 'calc(1 - .2 * ' + progress + ')';\n const scale = 'calc(1 - .03 * ' + progress + ')';\n\n card.style.transform = 'translateY(' + translate + ') scale(' + scale + ')';\n cardInner.style.opacity = opacity;\n // }\n\n return progress;\n }, 0);\n });\n });\n});\n","//\n// password.js\n//\n\nconst toggles = document.querySelectorAll('[data-toggle=\"password\"]');\n\ntoggles.forEach((toggle) => {\n toggle.addEventListener('click', function (e) {\n e.preventDefault();\n\n var target = document.querySelector(toggle.getAttribute('href'));\n var type = target.type === 'password' ? 'text' : 'password';\n\n target.type = type;\n });\n});\n","let polling_counter = 0;\ndocument.addEventListener('download_link_polling_event', (event) => {\n if (document.getElementById('download_link_polling_status').value == 'true') {\n stopPolling(event)\n document.getElementsByClassName('btn')[0].disabled = false\n } else if (++polling_counter > 20) {\n stopPolling(event)\n event.container.innerHTML = '
There was an error generating your document. Please refresh the page to try again.
'\n }\n})\n\ndocument.addEventListener('await_error_event', (event) => {\n stopPolling(event)\n})\n\nfunction stopPolling(event) {\n event.container.dispatchEvent(new Event('async-stop'))\n}\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","_ref","children","isAuthenticated","setIsAuthenticated","useState","location","useLocation","useEffect","async","response","fetch","ok","json","error","console","checkAuth","React","Navigate","to","state","from","replace","title","content","isVisible","onClose","placement","animate","setAnimate","timer","setTimeout","clearTimeout","className","style","getPlacementStyles","baseStyles","position","zIndex","left","top","transform","marginLeft","width","boxShadow","border","animation","getCaretStyles","height","backgroundColor","borderRight","borderTop","background","fontSize","onClick","fontWeight","getCookieValue","name","parts","document","cookie","split","length","pop","shift","POPOVER_COOKIE_NAME","horizontal","showUsersPopover","setShowUsersPopover","navigate","useNavigate","setError","scope","setScope","fetchAuthInfo","then","initializePopover","parseInt","handlePopoverClose","viewCount","setCookie","value","date","Date","setFullYear","getFullYear","toUTCString","headers","data","links","baseLinks","path","push","popover","Link","handleLogout","method","querySelector","isCurrentPage","window","pathname","renderError","role","minWidth","type","link","key","href","Popover","Sidebar","flex","text","setIsVisible","tooltipStyle","color","padding","borderRadius","textTransform","letterSpacing","fontFamily","whiteSpace","undefined","bottom","marginBottom","marginTop","display","maxWidth","wordWrap","onMouseEnter","onMouseLeave","ICONS","success","d","danger","primary","variant","xmlns","fill","viewBox","charAt","toUpperCase","slice","formatDollars","input","rawFloat","showCents","arguments","parseFloat","toFixed","Math","round","whole","decimal","toString","extractCentsFromDollarString","cleanedInput","dollars","Chevron","stroke","strokeWidth","RangeFilter","values","currentValue","onChange","onRemove","filterKey","unit","isOpen","setIsOpen","dropdownRef","localMin","setLocalMin","min","localMax","setLocalMax","max","handleClickOutside","event","current","contains","target","addEventListener","removeEventListener","formatValue","tzOffset","getTimezoneOffset","getTime","toLocaleDateString","renderInput","setValue","placeholder","toISOString","selectedDate","timestamp","floor","displayValue","ref","toLocaleString","handleClear","handleSave","EnumFilter","_ref2","localSelections","setLocalSelections","maxHeight","val","prev","includes","filter","v","handleToggle","checked","cursor","TextFilter","_ref3","localValue","setLocalValue","debounceTimeout","handleInputChange","_ref4","filters","filterValues","setFilter","removeFilter","clearAll","hasActiveFilters","visible_in_ui","ArrowIcon","strokeLinecap","strokeLinejoin","mergedStyles","marginRight","CheckMarkIcon","formatMoneyValue","formatted","cents","account","info","log","financial_details","has_detailed_data","plaintiff_name","lawsuit_state","customer_name","civil_number","social_security_number","social_security_number_last_four","birthdate","customer_mailing_address","customer_street","customer_city","customer_state","customer_zip_code","email","lawsuit_exists","settlement_negotiation_events","customer_document","documentId","preventDefault","linkElement","statusElement","getElementById","errorElement","textContent","classList","add","remove","body","JSON","stringify","customer_document_id","blob","url","URL","createObjectURL","sanitizedName","toLowerCase","downloadLink","createElement","download","appendChild","click","removeChild","revokeObjectURL","message","downloadAuthorizationLetter","hardship_statement","hardship","some","hasHardshipData","alignItems","SparkleIcon","entries","_","monthly_income_total","monthly_expenses_total","hasCashFlowData","plaid_verified","opacity","financialDetails","incomeFields","label","expenseFields","renderItem","item","displayedValue","hasIncomeItems","field","hasExpenseItems","renderFinancialDetails","latest_historical_offer","phases","phase","index","iterations","payment_amount_cents","payments","total_amount_cents","downloadHistoryCSV","referenceNumber","events","sanitizeForCSV","str","csvRows","join","forEach","created_at","actionText","event_id_to_english_text","disclosures","disclosure","row","month","day","year","toLocaleTimeString","hour","minute","party","csvContent","Blob","disclosureText","props","isFocused","setIsFocused","pointerEvents","_extends","numberValue","isNaN","Intl","NumberFormat","currency","minimumFractionDigits","maximumFractionDigits","format","formatCurrency","rawValue","onFocus","onBlur","paddingTop","paddingBottom","required","component","Component","isTextarea","InputComponent","scrollHeight","resize","overflow","DEFAULT_ACCEPTANCE_DISCLOSURE","DEFAULT_COUNTEROFFER_DISCLOSURE","validFirstPaymentDate","onSuccess","selectedAction","setSelectedAction","first_payment_date","activeDropdown","setActiveDropdown","isDisabled","setIsDisabled","isLoading","setIsLoading","formData","setFormData","total_amount","tiers","lastPaymentAmountCents","setLastPaymentAmountCents","disclosuresCpy","debouncedTiers","useDebounce","delay","debouncedValue","setDebouncedValue","handler","rowId","querySelectorAll","adjustTextareaHeight","dropdowns","buttons","Array","button","dropdown","constructRequestBodyForCounteroffer","tier","total","trim","handleFormChange","ensureDropdownVisible","tableContainer","dropdownRect","getBoundingClientRect","containerRect","overflowAmount","scrollOptions","scrollTop","behavior","scroll","handleDisclosureChange","newDisclosures","textarea","originalHeight","handleButtonClick","action","handleDeleteDisclosure","i","showAcceptButton","calculateBalanceRemaining","totalAmount","reduce","sum","isCalculatorEnabled","remainingBalance","parse","every","has_extra_tier","last_payment_amount_cents","fetchLastPayment","Tooltip","right","onSubmit","confirm","alert","disabled","FloatingLabelInput","rows","readOnly","visibility","errors","CurrencyInput","newTiers","calculateMissingField","totalPerPayment","tierTotal","ceil","Calculator","file_number","payee","recipient","mailing_address","formState","setFormState","isSubmitting","isSubmitted","handleChange","scrollWidth","file","setFile","isUploaded","setIsUploaded","setIsSubmitting","setDisclosures","FormData","append","accept","files","columnsToShow","isExpanded","setIsExpanded","currentAction","setCurrentAction","isArchived","setIsArchived","archived_by_law_firm_on","handleRefreshCurrentAction","finally","current_action","lawsuit_amount","textOverflow","last_action","latest_event","stopPropagation","handleArchiveAction","confirmMessage","getAttribute","catch","AcceptOrCounteroffer","SendPaymentDetails","UploadSettlementAgreement","params","latest_payment_intent","colSpan","AccountDetails","SortIcon","column","currentSort","isActive","direction","accounts","setAccounts","selectedFilterValues","onLoadMore","hasMorePages","hasPaymentDetails","activeDropdownId","setActiveDropdownId","sortConfig","setSortConfig","handleSort","actionOrder","sortedAccounts","sort","a","b","compareValue","val1","val2","comparison","indexOf","columns","minHeight","verticalAlign","AccountRow","FILTERS_NOT_IN_URL_BAR","DEFAULT_SHOWN_COLUMNS","Accounts","basicStats","setBasicStats","accountsData","setAccountsData","numPages","setNumPages","urlParams","URLSearchParams","search","get","collectorMetrics","setCollectorMetrics","setSelectedFilterValues","initialValues","searchValue","customerDocumentId","startsWith","endsWith","matches","match","simpleMatch","filterName","arrayIndexOrKey","Number","isInteger","isArray","collectorMetricsResponse","collectorMetricsJson","fetchCollectorMetrics","setFilters","set","rangeKey","rangeValue","newUrl","history","pushState","filtersString","_ref5","_ref6","accountsDataResponse","accountsDataJson","fetchAccountData","basicStatsResponse","basicStatsJson","fetchBasicStats","filterValuesResponse","filterValuesJson","fetchFilterValues","handleFilterRemove","clonedFilterValues","Layout","law_firm","collected_amount","uncollected_amount","waiting_on_consumer_amount","waiting_on_collector_amount","response_rate","offers_count","Filters","handleClearAll","Alert","AccountsTable","customer_info","clonedAccounts","has_payment_details","valid_first_payment_date","more_pages","total_count","DirectDeposit","setEmail","status","setStatus","isError","PaymentDetails","mailing_name","mailing_street","mailing_city","mailing_state","mailing_zip","fetchLawFirmData","htmlFor","Users","users","setUsers","authToken","setAuthToken","loading","setLoading","newUserEmail","setNewUserEmail","newUserRole","setNewUserRole","formError","setFormError","successMessage","setSuccessMessage","currentUserEmail","setCurrentUserEmail","hoveredRowId","setHoveredRowId","fetchUsers","auth_token","err","current_user","select","user","law_firm_scope","user_id","userId","handleRemoveUser","FloatingLabel","Form","Login","errorMessage","setErrorMessage","isEmailLogin","setIsEmailLogin","handleLogin","credentials","queryString","nonAuthParams","checkAuthAndToken","remainingParams","password","InviteAccept","searchParams","useSearchParams","setPassword","confirmPassword","setConfirmPassword","token","CollectorsDashboardRoot","BrowserRouter","Routes","Route","element","PrivateRoute","Card","displayName","CardTitle","CardDescription","CardContent","CardFooter","CallToActionCards","hiddenCards","setHiddenCards","soloSettle","debtAnswer","cardKey","hiddenUntil","localStorage","getItem","removeItem","hideCard","setDate","getDate","setItem","CreditFactor","statusTier","impact","statusTierInfo","class","years","months","creditReport","improvement_message","status_tier","CreditReportCTA","isFetching","setIsFetching","rel","post","PROFILE_REDIRECT_URL","ErrorCard","buttonText","buttonUrl","MissingMetadataCard","CreditReportCard","base_report","section","sectionIndex","showHeader","openByDefault","showInitialLinks","hasSectionStarted","steps","step","completed","canShowLink","currentStepIndex","findIndex","el","accordionItem","shouldBeMuted","allSectionStepsCompleted","stepIndex","resume_url","is_completed","dateString","status_color","lineHeight","sectioned_steps","ProgressChecklist","AnimatePercentage","duration","setCurrent","totalSteps","stepSize","currentStep","interval","setInterval","clearInterval","stepDuration","useAnimateValue","ProgressCircle","percentage","ballStrokeWidth","reduction","transitionDuration","hideBall","gradient","stop","titleText","center","cos","PI","unique","random","rotate","r","circumference","offset","x1","y1","x2","y2","stopColor","x","y","textAnchor","cx","cy","strokeDasharray","strokeDashoffset","transition","paymentPlan","total_amount_customer_pays","balance_remaining","total_savings","previous_payment_date","next_payment_amount","next_payment_date","payment_history","progress_percentage","last_payment_date","total_payments_count","payments_remaining","is_subscription_active","subscription_needs_attention","subscription_latest_invoice_url","payment","amount","nullifyEmptyFormValues","obj","fromEntries","setNestedFormValue","lastKey","acc","onPlaceSelected","isInvalid","inputRef","useRef","autocompleteRef","scriptRef","google","initAutocomplete","loadGoogleMapsScript","apiKey","src","defer","initGooglePlaces","head","maps","clearInstanceListeners","places","Autocomplete","componentRestrictions","country","fields","types","addListener","place","getPlace","address","address_line1","city","zip_code","address_components","long_name","short_name","controlId","formatSSN","digits","fullSSN","lastFour","initialRender","setInitialRender","showFullSSN","setShowFullSSN","setDigits","oldDigits","setOldDigits","isBackspace","setIsBackspace","newDigits","updatedDigits","flexDirection","gap","onKeyDown","ssn","ssn_last_four","initialData","onProfileUpdate","first_name","last_name","current_password","password_confirmation","metadata","setErrors","redirectUrl","setRedirectUrl","isOAuthUser","is_oauth_user","prevData","base","userData","request","FetchRequest","responseKind","perform","GooglePlacesAutocomplete","ADDRESS_FIELDS","now","SSNInput","AccountActions","Badge","as","classes","classNames","default","secondary","destructive","outline","warning","Dashboard","cases","setCases","unorganizedDocuments","setUnorganizedDocuments","flashNotice","setFlashNotice","setCreditReport","activeTab","setActiveTab","userProfile","setUserProfile","credit_report","flash_notice","user_profile","fetchData","CaseHeader","handleTabChange","tab","newTab","msOverflowStyle","scrollbarWidth","consumer_case","has_payment_plan","documents","doc","payment_plan","PaymentPlanSummary","DocumentCard","ProfileEdit","updatedProfile","CreditReport","ConsumerDashboardRoot","ExtractContinueRoot","setDocument","firstIncompleteStep","find","setUserData","viewEmail","setViewEmail","viewCustomerDocumentId","setViewCustomerDocumentId","trimmedEmail","encodeURIComponent","trimmedCustomerDocumentId","User","emailFromUrl","useParams","initialEmail","fetchUserData","emailToView","formatDate","updated_at","l","customer_documents","posthog_variants","word","CustomerDocument","idFromUrl","initialCustomerDocumentId","setCustomerDocumentId","customerDocumentData","setCustomerDocumentData","fetchCustomerDocumentData","customerDocumentIdToView","document_name","resume_step","source","active","case_id","confirm_law_firm","overflowX","party_email_from","can_rescind_acceptance","destroy","OnCallDashboardRoot","channels","require","application","Application","debug","Stimulus","Controller","this","copy","navigator","clipboard","writeText","$element","$","connect","on","keyup","$target","prop","blur","formatNumber","n","input_val","original_len","caret_pos","decimal_pos","left_side","substring","right_side","setSelectionRange","autosize","disconnect","SANATIZE_PARAM_KEYS","handleClick","bind","sanitizeUrl","posthog","capture","urlObj","param","delete","ChannelState","CompletionsChannelPayloadType","CompletionRole","CompletionState","completionsAdapter","createEntityAdapter","selectId","completion","sortComparer","createdAt","completionsSelector","getSelectors","completions","getAllCompletions","selectAll","getAllCompletionIds","selectIds","getChannelState","channelState","isCreating","creating","fetching","getProcessingCompletions","createSelector","Processing","isProcessing","snakeKeys","snakeCaseConvert","camelKeys","camelCaseConvert","JsConvertCase","recursive","recursiveInArray","toastError","toast","browserLocales","opt","languageCodeOnly","languages","language","locale","trimmedLocale","PILOT_COMPLETIONS_PATH","fetchCompletions","createAsyncThunk","threadKey","query","createCompletion","agentKey","context","userRequest","timeZone","DateTimeFormat","resolvedOptions","locales","pilotCompletion","completionsSlice","createSlice","initialState","getInitialState","Disconnected","hasNextPage","reducers","upsertCompletion","upsertOne","updateChannelState","payload","appendAssistantCompletionDelta","entities","assistantResponse","assistantResponseDelta","extraReducers","builder","addCase","pending","fulfilled","upsertMany","rejected","actions","combineReducers","completionsReducer","configureStore","reducer","rootReducer","devTools","middleware","getDefaultMiddleware","createContext","clicked","Sparkles","FontAwesomeIcon","icon","faArrowUp","addQueryParams","hasOwnProperty","UTM_PARAMS","utm_source","utm_medium","SOLO_PRODUCT_MAPPINGS","completionId","pilotCompletionId","components","AnchorRenderer","ReactMarkdown","containerClassNames","Assistant","Completed","Failed","Markdown","useAppDispatch","useDispatch","useAppSelector","useSelector","getCompletionById","selectById","isEqual","Bubble","faSpinner","bodyScroll","outerRef","innerRef","resizeObserver","ResizeObserver","scrollTo","observe","dispatch","completionIds","PilotContext","ScrollableList","Successful","Loading","ListItem","dotClassNames","Connected","processing","setUserRequest","setDisabled","textareaRef","handleSubmit","isMobile","TextareaAutosize","maxRows","ChannelStateDot","Button","size","createChannel","createConsumer","subscriptions","create","channel","connected","handleConnected","disconnected","handleDisconnected","received","handleReceived","Delta","handlePayloadReceived","unsubscribe","close","faChevronDown","open","faArrowUpRightFromSquare","Header","Channel","List","Footer","authenticated","collapsed","setCollapsed","showCompletions","setShowCompletions","Provider","store","Toaster","FastActionButton","FastActionChat","root","createRoot","render","FastActionWidget","unmount","replaceUrlParam","paramName","paramValue","urlObject","Window","register","ClipboardController","Inputs__CurrencyController","Inputs__TextareaController","Pilot__AnchorController","Pilot__FawController","Pilot__PlaygroundSelectorController","Pilot__WindowController","Carousel","Collapse","Dropdown","Modal","Offcanvas","ScrollSpy","Tab","Toast","drops","toggles","collapses","overflowPadding","desktopSize","showDrop","menu","innerWidth","positioner","parentElement","drop","isDropright","menuOffset","menuPlacement","createPopper","modifiers","options","positionDrop","closest","hideDrop","toggle","toggleDrop","collapse","menus","hideMenus","ready","stripe","Stripe","apiVersion","elements","inputComplete","cardErrorSection","card","mount","complete","form","submitButton","originalButtonText","buttonDisableText","dataset","disableWith","confirmCardPayment","secret","payment_method","result","paymentIntent","focus","MutationObserver","mutationsList","observer","labelClassList","highlightClass","mutation","attributeName","attributes","stripeData","intentType","clientSecret","paymentErrorSection","paymentElement","billingDetails","confirmParams","return_url","returnUrl","payment_method_data","billing_details","customerEmail","confirmPayment","confirmSetup","freeze","BLOG_POST_CONTENT_ID","BLOG_SUMMARY_SELECTOR","MAIN_NAVBAR_ID","START_ANSWER_BUTTON_ID","ARTICLES_LIST_HEADER_TEXT","TOC_DATA_TOGGLE_ATTRIBUTE","TOC_DESKTOP_COLUMN_ID","TOC_DESKTOP_CONTAINER_ID","TOC_DROPDOWN_BUTTON_ID","TOC_DROPDOWN_MENU_ID","TOC_HEADER_ID","TOC_ID","TOC_MOBILE_CONTAINER_ID","TOC_MOBILE_STICKY_WRAPPER_ID","TOC_MOBILE_TEXT","TOC_SKIP_ATTRIBUTE","TOC_TEXT_ATTRIBUTE","COMMENTO","DIV_ID","HEADER_ID","WRAPPER_ID","SCRIPT_SOURCE","CSS_SOURCE","ROOT_CLASS","CANCEL_BUTTON_CLASS","REPLY_BUTTON_CLASS","REPLY_BUTTONS_SELECTOR","TEXT_AREA_SELECTOR","COMMENT_CARD_CLASS","COMMENT_TEXT_PREFIX","SUBMIT_BUTTON_CLASS","ANONYMOUS_CHECKBOX_CLASS","CONTROLS_CONTAINER_CLASS","SUBMIT_WRAPPER_CLASS","CHECKBOX_WRAPPER_CLASS","TEXT_AREA_PLACEHOLDER_TEXT","NEW_TEXT_AREA_PLACEHOLDER_TEXT","REPLY_BUTTON_TEXT","HEADER_TEXT","MAX_CHARACTERS","convertRemToPixels","rem","getComputedStyle","documentElement","createElementWithAttributes","tag","setAttribute","getCurrentScrollPosition","pageYOffSet","init","validateInitialization","injectCommentoElements","initializeObservers","CONSTANTS","postContent","commentoWrapper","createCommentoStructure","insertCommentoIntoDOM","wrapper","header","commentoDiv","script","articlesList","getElementsByTagName","h2","parentNode","insertBefore","rootObserver","mutations","commentoRoot","initReplyButtonObserver","initTextareaObserver","childList","subtree","handleReplyButtons","styleReplyButton","repositionReplyButton","commentCard","commentText","nextSibling","setupTextarea","styleTextarea","setupControlsContainer","initializeTextareaEvents","assign","textAreaParent","anonymousCheckbox","container","createControlsContainer","after","initializeControlsVisibility","submitWrapper","checkboxWrapper","hasText","updateControlsVisibility","visibilityStyles","CustomScrollSpy","constructor","navId","contentId","nav","headings","tocLinks","waitForElements","Promise","checkElements","requestAnimationFrame","readyState","findHeadings","createTocLinksMap","bindScrollEvent","allHeadings","heading","hasAttribute","headingsMap","Map","h","targetId","positionId","recursivelyMapLinks","foundLinks","getElementsByClassName","foundUls","ul","onScroll","scrollPosition","currentHeadingIndex","offsetTop","updateActiveLinks","activeHeadings","Set","currentLevel","tagName","headingId","tocLink","TOC","toc","sanitizePostContent","setTocMaxHeight","injectMobileToc","determineTocPlacement","initializeMobileToc","initializeScrollHandling","initializeCustomScrollSpy","innerHeight","tocDesktopColumn","tocText","tocId","navbar","startAnswerButton","tocHeader","navbarHeight","scrollY","offsetHeight","buttonHeight","tocHeaderHeight","summaryDiv","stickyWrapper","mobileTocContainer","dropdownButton","initialButtonBorderRadius","getPropertyValue","dropdownMenu","mobileTocWrapper","tocMobileContainer","totalMobilePadding","updateTriggerPoint","initialTriggerPoint","triggerPoint","isFixed","rect","styles","hash","tocHeight","outerHeight","Rails","ActiveStorage","collectorsContainer","consumerContainer","extractContainer","onCallContainer","ExtractSummaryRoot","userIdElement","consumer","loadingButton","skipButton","allParagraphs","foundStatus","p","updateUIForReportReady","updateUIForReportFailed","allDetailInputs","wasRequired","removeAttribute","checkboxes","checkbox","detailsInput","nextElementSibling","detail","insertAdjacentHTML","progress","emailInstructions","chooseFilesButton","quill","Quill","theme","modules","toolbar","onclick","undo","redo","savedContent","innerHTML","successAlert","errorAlert","saveStatus","quillHtmlContent","html2pdf","margin","filename","image","quality","jsPDF","orientation","save","phoneNumberInputs","isNumericInput","test","String","fromCharCode","which","isModifierKey","ctrl","ctrlKey","metaKey","shiftKey","isAtMaxLength","areaCode","middle","last","ssnInput","ssnLastFourInput","formattedVal","fullSsnInput","lastFourInput","toggleLink","fullSsnGroup","lastFourGroup","toggleText","showingFullSsn","stacks","stack","items","arr","call","reverse","clientHeight","firstElementChild","cardInner","translate","scale","polling_counter","stopPolling","dispatchEvent","Event"],"sourceRoot":""}