{"version":3,"file":"js/9909-1fe8440c892d2e0dbbd3.js","mappings":"oKASA,MAPA,SAA4BA,GACxB,OACIC,EAAAA,cAAA,OAAKC,UAAU,uCAGvB,E,wSCHA,SAASC,EAAqBH,GAC1B,OACIC,EAAAA,cAAA,OAAKC,UAAU,6CACVF,EAAMI,SAGnB,CAEA,SAASC,EAAoBL,GACzB,OACIC,EAAAA,cAAA,OAAKC,UAAU,gCACXD,EAAAA,cAAA,UAAKD,EAAMM,OAGvB,CAEA,SAASC,EAAsBP,GAC3B,OACIC,EAAAA,cAAA,OAAKC,UAAU,6EACVF,EAAMI,SAGnB,CAEA,SAASI,EAA4BR,GACjC,OACIC,EAAAA,cAAA,OAAKC,UAAU,+DACXD,EAAAA,cAACQ,EAAkB,CAACC,KAAMV,EAAMU,OAChCT,EAAAA,cAACU,EAAsB,CAACC,KAAMZ,EAAMY,OAGhD,CAEA,SAASH,EAAmBT,GACxB,OACIC,EAAAA,cAAA,OAAKC,UAAU,wBACXD,EAAAA,cAAA,OAAKY,IAAKb,EAAMU,OAG5B,CAEA,SAASC,EAAuBX,GAC5B,OACIC,EAAAA,cAAA,OAAKC,UAAU,oCACVF,EAAMY,KAGnB,CAEA,SAASE,EAAwBd,GAC7B,OACIC,EAAAA,cAAA,OAAKC,UAAU,wCACVF,EAAMI,SAGnB,CAEA,SAASW,EAA6Cf,GAGlD,OACIC,EAAAA,cAAA,OAAKC,UAAU,sGACXD,EAAAA,cAAA,OAAKC,UAAU,UAAS,sDAGxBD,EAAAA,cAAA,OAAKY,IAAKG,EAAa,iBAAe,UAAU,oBAAkB,MAAM,gBAP1D,oLAU1B,CAEA,SAASC,EAAWjB,GAChB,OACIC,EAAAA,cAAA,OAAKC,UAAU,sBAEvB,C,gVC3DA,SAASgB,EAAwBlB,GAE7B,OACIC,EAAAA,cAAA,OAAKC,UAAU,oCACXD,EAAAA,cAAA,OAAKC,UAAU,UACVF,EAAMmB,QAAUnB,EAAMmB,QAAU,MAAQ,SAAS,uCAIlE,CAEA,SAASC,EAAuBpB,GAE5B,MAAMqB,EAAqBrB,EAAMsB,aAAaC,KAAI,CAACC,EAAaC,IAExDxB,EAAAA,cAACyB,EAAiB,CAACC,OAAQH,EAAYG,OAAQf,KAAMY,EAAYZ,KAAMgB,IAAK,MAAQH,MAK5F,OACIxB,EAAAA,cAAA,OAAKC,UAAU,oCACXD,EAAAA,cAAA,OAAKC,UAAU,UACVF,EAAMmB,QAAUnB,EAAMmB,QAAU,MAAQ,SAAS,mFAGtDlB,EAAAA,cAAA,OAAKC,UAAU,OACXD,EAAAA,cAAA,OAAKC,UAAU,oEACVmB,IAKrB,CAEA,SAASK,EAAkB1B,GACvB,MAAM6B,EAAa7B,EAAM2B,OAAS,oBAAuC,OAAjB3B,EAAM2B,OAAkB,mBAAqB,kBAC/FjB,EAAOV,EAAM2B,OAASG,EAAmC,OAAjB9B,EAAM2B,OAAkBI,EAAiBC,EAEvF,OACI/B,EAAAA,cAAA,OAAKC,UAAW,oBAAsB2B,EAAa,qCAC/C5B,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAAA,OAAKY,IAAKH,KAEdT,EAAAA,cAAA,OAAKC,UAAU,gCACVF,EAAMY,MAKvB,CAEA,MAjEA,SAA4BZ,GAIxB,OACkC,IAA9BA,EAAMsB,aAAaW,OACfhC,EAAAA,cAACiB,EAAuB,CAACC,QAASnB,EAAMmB,UAExClB,EAAAA,cAACmB,EAAsB,CAACD,QAASnB,EAAMmB,QAASG,aAActB,EAAMsB,cAGhF,E,sBCfA,MAAMY,EAEM,2BCECC,EAAmBA,CAACC,EAAU,CAAC,KASjC,IANe,CAClB,eAAgB,mBAChB,eAAgBC,QAMbD,IAMJE,eAAeC,EAAeC,EAAUC,GAM3C,GAAwB,MAApBD,EAASb,QAAsC,MAApBa,EAASb,OAAgB,CACpD,MAAMe,QAAaF,EAASG,OAE5B,OADAD,EAAc,SAAI,EACXA,CAEX,CAAO,GAAwB,MAApBF,EAASb,OAEhB,MAAO,CAAEiB,SAAS,GAEf,GAAwB,MAApBJ,EAASb,OAAgB,CAIhC,MAAMe,QAAaF,EAASG,OAE5B,GAAID,EAAKG,cAEL,OADAJ,EAAeC,EAAKG,eACb,CAAC,EAER,MAAM,IAAIC,MAAM,qCAGxB,CAAO,GAAwB,MAApBN,EAASb,OAAgB,CAEhC,MAAMoB,QAAkBP,EAASG,OACjC,MAAM,IAAIG,MAAO,gBAAeC,EAAUC,SAAW,kBAEzD,CAAO,GAAwB,MAApBR,EAASb,OAAgB,CAShC,MADAc,EAJyBQ,OAAOC,SAASC,KAAKC,MAAM,KAAK,GAEXA,MAAM,KAAKC,MAAM,EAAG,GAAGC,KAAK,MAGpE,IAAIR,MAAM,+BACpB,CAAO,GAAwB,MAApBN,EAASb,OAEhB,MAAM,IAAImB,MAAM,kEACb,GAAwB,MAApBN,EAASb,OAEhB,MAAM,IAAImB,MAAM,oDACb,GAAwB,MAApBN,EAASb,OAAgB,CAEhC,MAAMoB,QAAkBP,EAASG,OACjC,IAAIY,EAAgB,GAMpB,MALIR,EAAUS,OACVD,EA0BZ,SAAuBC,GACnB,GAAIA,EAAQ,CACR,IAAIC,EAAiB,GAMrB,OAJIA,EADAD,EAAOE,cAAgBC,OAWnC,SAA+BH,GAE3B,IAAII,EAAc,GAKlB,OAJAD,OAAOE,KAAKL,GAAQM,SAAQ,SAAUlC,GAElCgC,IAD0B,SAAPhC,EAAiB,QAAkB,YAAPA,EAAoB,WAAqB,yBAAPA,EAAiC,wBAA0BA,GAChH,IAAM4B,EAAO5B,GAAO,IACpD,IACOgC,CACX,CAlB6BG,CAAsBP,GAEtBA,EAEdC,CACX,CACI,MAAO,2GAEf,CAtC4BO,CAAcjB,EAAUS,QACjCT,EAAUkB,QACjBV,EAAgBR,EAAUkB,OAExB,IAAInB,MAAO,yBAAwBS,GAAiB,kBAC9D,CAAO,MAAwB,MAApBf,EAASb,OAEV,IAAImB,MAAM,8DAEV,IAAIA,MAAO,8BAA6BN,EAASb,yCAE/D,CAEO,MAAMuC,EAAgBD,IACzBE,QAAQC,IAAI,aAAcH,GACnB,CAAErB,SAAS,EAAOqB,MAAOA,EAAMjB,UAmC1C,SAASX,IACL,MAEMgC,EAFUC,SAASC,OACInB,MAAM,MACDoB,MAAKD,GAAUA,EAAOE,WAAW,qBACnE,OAAOJ,EAAeA,EAAajB,MAAM,KAAK,GAAK,IACvD,CCjIA,MAEuBd,MAAOoC,EAAgBC,EAAYlC,EAAiB,QACvE,MAAMmC,EAAM1C,EAAmByC,EAAa,yBAEtCE,EAAOC,KAAKC,UAAU,CAC1BL,eAAgBA,IAGlB,IACE,MAAMlC,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,OACR7C,QAASD,IACT+C,YAAa,UACbL,KAAMA,IAER,aAAatC,EAAeC,EAAUC,EAExC,CAAE,MAAOwB,GAGP,OAFAkB,OAASjB,EAAaD,GACtBkB,OAA0B,kBAAI,KACvBA,MACT,GAtBJ,EA0BoB7C,MAAO8C,EAAUT,EAAYlC,EAAiB,QAC9D,MAAM4C,EAAcD,EAAShC,MAAM,YAAcuB,GAAY,GACvDC,EAAM1C,EAAmByC,EAAa,4BAA8BU,EAE1E,IACE,MAAM7C,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,MACR7C,QAASD,IACT+C,YAAa,YAGf,aAAa3C,EAAeC,EAAUC,EAExC,CAAE,MAAOwB,GACP,OAAOC,EAAaD,EACtB,GAzCJ,EA6CiB3B,MAAOoC,EAAgBY,EAAgBX,EAAYlC,EAAiB,QACjF,MAAMmC,EAAM1C,EAAmByC,EAAa,WAEtCE,EAAOC,KAAKC,UAAU,CAC1BQ,OAAQ,CACNC,QAASd,EACTe,UAAWH,KAIf,IACE,MAAM9C,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,OACR7C,QAASD,IACT0C,KAAMA,EACNK,YAAa,YAGf,aAAa3C,EAAeC,EAAUC,EAGxC,CAAE,MAAOwB,GACP,OAAOC,EAAaD,EACtB,GApEJ,EAwEkB3B,MAAOqC,EAAYlC,EAAiB,QAClD,MAAMmC,EAAM1C,EAAmByC,EAAa,WAE5C,IACE,MAAMnC,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,SACR7C,QAASD,IACT+C,YAAa,YAGf,aAAa3C,EAAeC,EAAUC,EAGxC,CAAE,MAAOwB,GACP,OAAOC,EAAaD,EACtB,GCvFJ,EAEc3B,MAAOqC,EAAYlC,EAAiB,QAC9C,MAAMmC,EAAM1C,EAAmByC,EAE/B,IACE,MAAMnC,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,MACR7C,QAASD,IACT+C,YAAa,YAGf,aAAa3C,EAAeC,EAAUC,EAExC,CAAE,MAAOwB,GACP,MAAMyB,EAAaxB,EAAaD,GAEhC,OADAyB,EAAoB,QAAI,KACjBA,CACT,GAlBJ,EAsB2BpD,MAAOoC,EAAgBC,EAAYlC,KAC1D,MAAMmC,EAAM1C,EAAmByC,EAAa,6BAGtCE,EAAOC,KAAKC,UAAU,CAC1BL,eAAgBA,IAGlB,IACE,MAAMlC,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,OACR7C,QAASD,IACT0C,KAAMA,EACNK,YAAa,YAGf,aAAa3C,EAAeC,EAAUC,EAExC,CAAE,MAAOwB,GACP,OAAOC,EAAaD,EACtB,GCuHJ,SAAS0B,IAEL,OACI1F,EAAAA,cAAA,OAAKC,UAAU,gEACXD,EAAAA,cAAA,OAAKC,UAAU,eAAc,qEAGzC,CAGA,SAAS0F,EAAuB5F,GAC5B,OAAIA,EAAM6F,iBAEF5F,EAAAA,cAAC6F,EAAAA,GAAoB,CAAClF,KAAK,eAAemF,WAAW,SAASC,YAAY,KAI1E/F,EAAAA,cAACgG,EAAAA,GAAkB,CAACrF,KAAK,iBAAiBmF,WAAW,SAASC,YAAY,OAAOE,QAASlG,EAAMkG,SAG5G,CAEA,MAzKA,SAAoBlG,GAChB,IAAImG,GAASC,EAAAA,EAAAA,KACb,MAAMC,GAAWC,EAAAA,EAAAA,MACXC,GAAQC,EAAAA,EAAAA,MACRC,EAAYN,EAAOM,WACnB,QAAEjB,IAAYkB,EAAAA,EAAAA,MACbC,EAAaC,IAAkBC,EAAAA,EAAAA,WAAS,IACxCC,EAAUC,IAAeF,EAAAA,EAAAA,WAAS,IAClCG,EAAmBC,IAAwBJ,EAAAA,EAAAA,WAAS,IACpDK,EAAqBC,IAA0BN,EAAAA,EAAAA,WAAS,IACxDO,EAAgBC,IAAqBR,EAAAA,EAAAA,WAAS,IAE9CS,EAAeC,IAAoBV,EAAAA,EAAAA,UAAS,8GAC7C,KAAEnE,EAAI,QAAE8E,EAAO,UAAEC,EAAS,UAAEC,EAAS,YAAEC,IAAgBC,EAAAA,EAAAA,MAoB7DC,EAAAA,EAAAA,YAAU,KAEc,IADOvD,SAASwD,iBAAiB,+BACTvG,KAAIwG,GAAoB,IAAIC,UAAUC,QAAQF,IAAkB,GAC7G,KAGHF,EAAAA,EAAAA,YAAU,KACNjB,IAAiBpB,GAWbA,GATJlD,eAA0BkD,GACtB,MAAMxC,QAAgBkF,EAA+B1C,EAASiB,EAAWJ,GACrErD,EAAQJ,QACR2E,EAAiBvE,EAAQmF,mBAEzBhE,QAAQC,IAAI,kCAEpB,CAGIgE,CAAW5C,EAEf,GACD,CAACA,KAGJqC,EAAAA,EAAAA,YAAU,KA4BFH,KA1BJpF,iBACI,MAAM+F,QAAgBH,EAAyB1C,EAAS9C,EAAM+D,EAAWJ,GACrEgC,EAAQzF,QAERmE,GAAY,IAEZA,GAAY,GACZ5C,QAAQC,IAAIiE,EAAQpE,OACpBsC,EAAM+B,KAAKD,EAAQpE,MAAO,CAAEsE,KAAM,UAE1C,CAiBIC,GAfJlG,iBACI,MAAME,QAAiBiG,EAAyCjD,EAASiB,EAAWJ,GAChF7D,EAASI,SACT5C,EAAM0I,sBAAsBlG,EAASmG,qBACrC1B,EAAqBzE,EAASoG,qBAE9BzE,QAAQC,IAAI5B,EAASyB,OAEzBkD,GAAuB,EAC3B,CAOI0B,GACA1B,GAAuB,GAC3B,GACD,CAACO,KAEJG,EAAAA,EAAAA,YAAU,KACFf,GAAYE,GACZK,GAAkB,EACtB,GAED,CAACP,EAAUE,IAcd,MAAM8B,EAAeA,IACb1B,EACQnH,EAAAA,cAACgG,EAAAA,GAAkB,CAACrF,KAAK,gBAAgBmF,WAAW,SAASC,YAAY,OAAOE,QAASA,IAAMG,EAASrG,EAAM+I,YAC/GpC,EACC1G,EAAAA,cAAC2F,EAAsB,CAACM,QAASA,KAf7CyB,EAAY,CAAE3E,QAASsE,SACvBf,EAAM+B,KAAK,oDAAqD,CAAEC,KAAM,UAcL1C,iBAAkB4B,IAEzExH,EAAAA,cAAAA,EAAAA,SAAA,MAMhB,OACIA,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACa,EAAuB,KACnBd,EAAMgJ,aAEX/I,EAAAA,cAACgB,EAAU,MACa,QAAvBjB,EAAMiJ,cAA0BhJ,EAAAA,cAAC0F,EAAiB,MAC/C1F,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACiJ,EAAkB,CAAC/H,QAASnB,EAAMmJ,YAAa7H,aAActB,EAAMqB,qBACpEpB,EAAAA,cAAA,OAAKC,UAAU,kBACb4G,EAA8D7G,EAAAA,cAAAA,EAAAA,SAAA,KAAE,KAArDA,EAAAA,cAACc,EAA4C,MAC1Dd,EAAAA,cAAA,OAAKC,UAAU,sHACXD,EAAAA,cAACmJ,EAAAA,GAAa,CAACC,aAAa,EAAOC,YAAY,SAC/CrJ,EAAAA,cAAC6I,EAAY,MACZ5B,EAAsBjH,EAAAA,cAAA,WAAK,gBAAqBA,EAAAA,cAAAA,EAAAA,SAAA,QAOzE,E,WC/JA,EAEeqC,MAAOmE,EAAW8C,EAAa,GAAI9G,EAAiB,QAE3D,MACMmC,EAAM1C,EAAmBuE,EAAY,WADvB8C,EAAa,gBAAkBA,EAAa,IAGhE,IACI,MAAM/G,QAAiBwC,MAAMJ,EAAK,CAC9BK,OAAQ,MACR7C,QAASD,IACT+C,YAAa,YAGjB,aAAa3C,EAAeC,EAAUC,EAC1C,CAAE,MAAOwB,GACL,OAAOC,EAAaD,EACxB,GAjBR,EAoB0B3B,MAAOmE,EAAW+C,EAAU7G,EAAMF,EAAiB,QACrE,MAAMmC,EAAM1C,EAAmBuE,EAAY,oBAErC5B,EAAOC,KAAKC,UACd,CACI0E,gBAAiB9G,EACjB+G,UAAWF,IAInB,IACI,MAAMhH,QAAiBwC,MAAMJ,EAAK,CAC9BK,OAAQ,OACR7C,QAASD,IACT+C,YAAa,UACbL,KAAMA,IAGV,aAAatC,EAAeC,EAAUC,EAC1C,CAAE,MAAOwB,GACL,OAAOC,EAAaD,EACxB,GC4CR,SAAS0F,EAAgC3J,GACrC,MAAM4J,EAAY,aAAe5J,EAAMyG,UACvC,OAAIzG,EAAM6J,cAEF5J,EAAAA,cAAA,OAAKC,UAAU,yFACXD,EAAAA,cAAA,OAAKC,UAAU,QAAO,wCAGtBD,EAAAA,cAACgG,EAAAA,GAAkB,CAACrF,KAAK,mBAAmBmF,WAAW,SAASG,QAASA,IAAMlG,EAAMqG,SAASuD,MAG/F5J,EAAM8J,eAET7J,EAAAA,cAAA,OAAKC,UAAU,yFACXD,EAAAA,cAAA,OAAKC,UAAU,aAAY,yGAG3BD,EAAAA,cAACgG,EAAAA,GAAkB,CAACrF,KAAK,mBAAmBmF,WAAW,SAASG,QAASA,IAAMlG,EAAMqG,SAASuD,MAI/F5J,EAAM+J,iBAET9J,EAAAA,cAAA,OAAKC,UAAU,yFACXD,EAAAA,cAAA,OAAKC,UAAU,QAAO,oEAO1BD,EAAAA,cAAA,OAAKC,UAAU,kBAAkB8J,GAAG,iBAC/BhK,EAAMiK,eAAiBhK,EAAAA,cAACiK,EAAAA,OAAM,CAACC,MAAOnK,EAAMoK,WAAenK,EAAAA,cAACoK,EAAAA,EAAW,MAIxF,CAIA,MAjHA,SAAwBrK,GACpB,MAAOoK,EAAUE,IAAezD,EAAAA,EAAAA,UAAS,OAClCkD,EAAkBQ,IAAuB1D,EAAAA,EAAAA,WAAS,IAClDgD,EAAeW,IAAoB3D,EAAAA,EAAAA,WAAS,IAC5CiD,EAAgBW,IAAqB5D,EAAAA,EAAAA,WAAS,IAC9CoD,EAAgBS,IAAqB7D,EAAAA,EAAAA,WAAS,IAC9C8D,EAAYC,IAAiB/D,EAAAA,EAAAA,UAAS,MACvCgE,GAAWC,EAAAA,EAAAA,UAEjBD,EAASE,QAAUJ,EAInB,MAAMlE,GADOL,EAAAA,EAAAA,KACYK,UACzBuE,EAAAA,cAAcC,WAAW,aACzB,MAAM5E,GAAWC,EAAAA,EAAAA,MAKX4E,GAAqBC,EAAAA,EAAAA,cAAY7I,UAEnCiI,GAAoB,GAEpB,MAAM/H,QAAiB4I,EACnB3E,EACAoE,EAASE,QACTM,EAAO3I,KACP2D,GAGC7D,EAAS8I,KAIVjF,EAAS7D,EAAS+I,WAFlBd,GAAkB,EAGtB,GAED,IAwBH,OArBA5C,EAAAA,EAAAA,YAAU,MAENvF,iBACI,MAAMI,QAAa0I,EAAoB3E,EAAW,WAAYJ,GAE9D,GAAoB,GAAhB3D,EAAKE,QAEL,YADA4H,GAAiB,GAIrB,MAAMgB,EAAe,IAAIC,EAAAA,YAAY/I,EAAKgJ,QAC1CF,EAAaG,WAAWC,IAAIV,GAC5BZ,EAAYkB,GACZd,GAAkB,GAClBE,EAAclI,EAAKgH,UACvB,CAEAmC,EAAa,GACd,IAIC5L,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKC,UAAU,IAAG,4JAGlBD,EAAAA,cAAC0J,EAA+B,CAACE,cAAeA,EAAeE,iBAAkBA,EAAkBE,eAAgBA,EAAgBG,SAAUA,EAAUN,eAAgBA,EAAgBzD,SAAUA,EAAUI,UAAWA,IAIlO,EC6BA,SAASqF,EAA8B9L,GACnC,MAAM4J,EAAY,aAAe5J,EAAMyG,UACvC,OAAIzG,EAAM6J,cAEF5J,EAAAA,cAAA,OAAKC,UAAU,yFACXD,EAAAA,cAAA,OAAKC,UAAU,QAAO,sCAGtBD,EAAAA,cAACgG,EAAAA,GAAkB,CAACrF,KAAK,mBAAmBmF,WAAW,SAASG,QAASA,IAAMlG,EAAMqG,SAASuD,MAG/F5J,EAAM+L,aAET9L,EAAAA,cAAA,OAAKC,UAAU,yFACXD,EAAAA,cAAA,OAAKC,UAAU,QAAO,yGAGtBD,EAAAA,cAACgG,EAAAA,GAAkB,CAACrF,KAAK,mBAAmBmF,WAAW,SAASG,QAASA,IAAMlG,EAAMqG,SAASuD,MAI/F5J,EAAMgM,eAET/L,EAAAA,cAAA,OAAKC,UAAU,yFACXD,EAAAA,cAAA,OAAKC,UAAU,QAAO,kEAO1BD,EAAAA,cAAA,OAAKC,UAAU,kBAAkB8J,GAAG,iBAC/BhK,EAAMiM,aAAehM,EAAAA,cAACiK,EAAAA,OAAM,CAACC,MAAOnK,EAAM0L,SAAazL,EAAAA,cAACoK,EAAAA,EAAW,MAIpF,CAIA,MA5IA,SAAsBrK,GAClB,MAAO0L,EAAQQ,IAAarF,EAAAA,EAAAA,UAAS,OAC9BmF,EAAgBG,IAAqBtF,EAAAA,EAAAA,WAAS,IAC9CgD,EAAeW,IAAoB3D,EAAAA,EAAAA,WAAS,IAC5CoF,EAAcG,IAAmBvF,EAAAA,EAAAA,WAAS,IAC1CkF,EAAcM,IAAmBxF,EAAAA,EAAAA,WAAS,IAC1C2C,EAAU8C,IAAezF,EAAAA,EAAAA,UAAS,MACnCgE,GAAWC,EAAAA,EAAAA,UAEjBD,EAASE,QAAUvB,EACnB,MAAM+C,EAAmB,UAAY/C,EAK/B/C,GADOL,EAAAA,EAAAA,KACYK,UACzBuE,EAAAA,cAAcC,WAAW,aACzB,MAAM5E,GAAWC,EAAAA,EAAAA,MAKXkG,GAAmBrB,EAAAA,EAAAA,cAAY7I,UAEjC6J,GAAkB,GAElB,MAAM3J,QAAiB4I,EACnB3E,EACAoE,EAASE,QACTM,EAAO3I,KACP2D,GAEJA,EAAS7D,EAAS+I,UAAU,GAG7B,IAGH,SAASkB,EAAef,GACpB,MAAMhJ,EAAOgJ,EAAOhJ,KACpBA,EAAKgK,OAAShB,EAAOiB,cACrB1J,OAAO2J,aAAaC,QAAQN,EAAkBzH,KAAKC,UAAUrC,GACjE,CA+CA,OAhCAmF,EAAAA,EAAAA,YAAU,MAENvF,iBACI,MAAMI,QAAa0I,EAAoB3E,EAAW,SAAUJ,GAE5D,GAAoB,GAAhB3D,EAAKE,QAEL,YADA4H,GAAiB,GAIrB,MAAMsC,QAAmBpK,EAAKgJ,OAIxBqB,EAAa,IAAItB,EAAAA,MAAMqB,GAE7BC,EAAWC,eAAepB,IAAIa,GAE9BM,EAAWE,qBAAqBrB,IAAIa,GAEpCM,EAAWpB,WAAWC,IAAIY,GAhClC,SAA2Bd,GACvB,MAAMwB,EAAWjK,OAAO2J,aAAaO,QAAQZ,IAAqB,KAClE,GAAIW,EAAU,CACV,MAAMxK,EAAOoC,KAAKsI,MAAMF,GACxBxB,EAAOhJ,KAAOA,EACVA,EAAKgK,SACLhB,EAAOiB,cAAgBjK,EAAKgK,OAEpC,CACJ,CAyBQW,CAAkBN,GAClBb,EAAUa,GACVX,GAAgB,GAChBE,EAAY5J,EAAKgH,UACrB,CAEA4D,EAAW,GACZ,IAICrN,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKC,UAAU,IAAG,qCAGlBD,EAAAA,cAAC6L,EAA6B,CAACjC,cAAeA,EAAemC,eAAgBA,EAAgBC,aAAcA,EAAcP,OAAQA,EAAQK,aAAcA,EAAc1F,SAAUA,EAAUI,UAAWA,IAIhN,E,WC9GA,GACiBnE,MAAOmE,EAAW8G,EAAeC,EAAY/K,EAAiB,QAC3E,MAAMmC,EAAM1C,EAAmBuE,EAAY,aAGrC5B,EAAOC,KAAKC,UAAU,CAC1B0I,SAAU,CACRC,YAAaH,EACbC,WAAYA,KAIhB,IACE,MAAMhL,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,OACR7C,QAASD,IACT0C,KAAMA,EACNK,YAAa,YAGf,aAAa3C,EAAeC,EAAUC,EAExC,CAAE,MAAOwB,GACP,OAAOC,EAAaD,EACtB,GAxBJ,GA2Be3B,MAAOmE,EAAWhE,EAAiB,QAC9C,MAAMmC,EAAM1C,EAAmBuE,EAAY,aAE3C,IACE,MAAMjE,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,MACR7C,QAASD,IACT+C,YAAa,YAGf,aAAa3C,EAAeC,EAAUC,EAExC,CAAE,MAAOwB,GACP,OAAOC,EAAaD,EACtB,GAzCJ,GA4CiB3B,MAAOmE,EAAWkH,EAAWlL,EAAiB,QAC3D,MAAMmC,EAAM1C,EAAmBuE,EAAY,cAAgBkH,EAErD9I,EAAOC,KAAKC,UAAU,CAC1B0I,SAAU,CACRzD,GAAI2D,KAIR,IACE,MAAMnL,QAAiBwC,MAAMJ,EAAK,CAChCK,OAAQ,SACR7C,QAASD,IACT0C,KAAMA,EACNK,YAAa,YAGf,aAAa3C,EAAeC,EAAUC,EAExC,CAAE,MAAOwB,GACP,OAAOC,EAAaD,EACtB,GCuBJ,SAAS2J,GAAY5N,GAEjB,OACIC,EAAAA,cAAA,QAAM4N,SAAWC,GAAU9N,EAAM6N,SAASC,GAAQ5N,UAAU,8BACxDD,EAAAA,cAAA,OAAKC,UAAU,UAAS,kEAC4CF,EAAMwN,WAAW,qBAErFvN,EAAAA,cAAA,OAAKC,UAAU,cACfD,EAAAA,cAAA,OAAKC,UAAU,2BACXD,EAAAA,cAAC8N,EAAAA,GAAS,CAACC,MAAOhO,EAAMwN,WAAa,4CAA6CS,KAAK,UAAUjE,GAAG,gBAAgBkE,YAAY,qBAAqB3F,KAAK,OAAO4F,SAAUnO,EAAMmO,SAAUnI,YAAY,SACvM/F,EAAAA,cAAC8N,EAAAA,GAAS,CAACC,MAAM,yBAAyBC,KAAK,iBAAiBjE,GAAG,iBAAiBkE,YAAY,kBAAkB3F,KAAK,OAAO4F,SAAUnO,EAAMmO,SAAUnI,YAAY,SACpK/F,EAAAA,cAACgG,EAAAA,GAAkB,CAACrF,KAAK,iBAAiBmF,WAAW,SAASC,YAAY,MAK1F,CAGA,OAlGA,SAAuBhG,GACnB,MAAOwN,EAAYY,IAAiBvH,EAAAA,EAAAA,UAAS,YACtC0G,EAAec,IAAoBxH,EAAAA,EAAAA,UAAS,KAC5CyH,EAAgBC,IAAqB1H,EAAAA,EAAAA,UAAS,IAG/CJ,GADOL,EAAAA,EAAAA,KACYK,UACnBJ,GAAWC,EAAAA,EAAAA,MACXC,GAAQC,EAAAA,EAAAA,MA+Dd,OACIvG,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAC2N,GAAW,CAACO,SA3CrB,SAAkBL,GACd,OAAQA,EAAMU,OAAOP,MACjB,IAAK,UACDI,EAAiBP,EAAMU,OAAOC,OAClC,IAAK,iBACDF,EAAkBT,EAAMU,OAAOC,OAE3C,EAoCyCjB,WAAYA,EAAYK,SAlCjE,SAAkBC,GACdA,EAAMY,iBAGFnB,GAAiBe,EAMmB,IAApCK,EAAAA,EAAAA,GAAkBpB,GAMtBjL,iBACI,MAAMoD,QAAmBkJ,GAAyBnI,EAAW8G,EAAeC,EAAYnH,GAEpFX,EAAW9C,SACX5C,EAAM6O,mBAAmB7O,EAAM8O,gBAAkB,GACjDvI,EAAM+B,KAAK,wEAAyE,CAAEC,KAAM,aAE5FhC,EAAM+B,KAAK5C,EAAWzB,MAAMjB,QAAS,CAAEuF,KAAM,SAErD,CAEAwG,GAhBIxI,EAAM+B,KAAK,eAAiBkF,EAAa,WACrC,CAAEjF,KAAM,UAPZhC,EAAM+B,KAAK,gCAAiC,CAAEC,KAAM,SAuB5D,IAUJ,ECvBA,OA9DAjG,eAA6BuC,GACzB,MACMmK,EAAQ1K,SAAS2K,cAAc,2BAA2BC,QAEhE,IACI,MAAMC,QAAmBnK,MAJjB,mBAI4B,CAChCC,OAAQ,OACR7C,QAAS,CACL,eAAgB4M,EAChB,eAAgB,oBAEpBnK,KAAMA,IAGV,GAAIsK,EAAWC,GAAI,CACf,MAAMC,QAAqBF,EAAWxM,OAQtC,MANmB,CACf2M,UAAWD,EAAaE,WACxB3M,SAAS,EACT2I,UAAW8D,EAAa9D,UACxBiE,cAAe,GAIvB,CAAO,GAAyB,KAArBL,EAAWxN,OAAe,CACjC,MAAM0N,QAAqBF,EAAWxM,OACtC,IAAIc,EAAiB,KAGjBA,EADA4L,EAAa7L,OAAOE,cAAgBC,OACnB0L,EAAa7L,QAuBvBA,EAvB8C6L,EAAa7L,OAwB1EiM,EAAa,GACjB9L,OAAOE,KAAKL,GAAQM,SAAQ,SAAUlC,GAClC,MAAM8N,EAAoB,SAAP9N,EAAiB,QAAkB,YAAPA,EAAoB,WAAa,wBAChF6N,EAAWE,KAAKD,EAAa,IAAMlM,EAAO5B,GAC9C,IACO6N,GA7BiF,CAAC,6GAE5DJ,EAAa7L,OAAS6L,EAAa7L,OAAS,wBAMjE,MAJmB,CACfZ,SAAS,EACTgN,mBAAoBnM,EAG5B,CAEI,MADAU,QAAQC,IAAI,eACN,IAAItB,MAAM,+BAGxB,CAAE,MAAOmB,GAKL,MAJmB,CACfrB,SAAS,EACTgN,mBAAoB,CAAC,8GAG7B,CAGJ,IAAuBpM,EACfiM,CAHR,EC2DA,OA5GA,SAA0BzP,GACtB,MAAO6P,EAAOC,IAAYjJ,EAAAA,EAAAA,UAAS,KAC5BkJ,EAAUC,IAAenJ,EAAAA,EAAAA,UAAS,KAClCoJ,EAAsBC,IAA2BrJ,EAAAA,EAAAA,UAAS,IAC3DN,GAAQC,EAAAA,EAAAA,MAIR2J,EAAiBlN,OAAOC,SAASkN,OAAS,oBAmBhD,SAASjC,EAASL,GACd,OAAQA,EAAMU,OAAOP,MACjB,IAAK,QACD6B,EAAShC,EAAMU,OAAOC,OAC1B,IAAK,WACDuB,EAAYlC,EAAMU,OAAOC,OAC7B,IAAK,uBACDyB,EAAwBpC,EAAMU,OAAOC,OAEjD,CA8CA,OAzEAtK,QAAQC,IAAI+L,GA0ERlQ,EAAAA,cAAA,OAAKC,UAAU,SACXD,EAAAA,cAAA,OAAKC,UAAU,mBAAkB,KAC7BD,EAAAA,cAACoQ,EAAAA,GAAS,CAACC,YAAY,sBACnBrQ,EAAAA,cAAA,MAAIC,UAAU,oBAAmB,4BACjCD,EAAAA,cAAA,OAAKC,UAAU,+BAA8B,6FAI7CD,EAAAA,cAAA,OAAKC,UAAU,oBACXD,EAAAA,cAAA,QAAM4N,SAAWC,GArDrC,SAAkBA,GAMd,GALAA,EAAMY,iBAKc,GAAhBmB,EAAM5N,QAAkC,GAAnB8N,EAAS9N,OAAe,OACjD,GAAI8N,GAAYE,EAAiF,YAAzD1J,EAAM+B,KAAK,yBAA0B,CAAEC,KAAM,UACrF,GAAIwH,EAAS9N,QAAU,EAAmF,YAA9EsE,EAAM+B,KAAK,8CAA+C,CAAEC,KAAM,UAW3EjG,WACf,MAAM6C,QAAeoL,GAAc1L,GAE/BM,EAAOvC,QAQPK,OAAOC,SAASC,KAAOgN,EAGvBhL,EAAOyK,mBAAmB9L,SAAS0M,IAC/BjK,EAAM+B,KAAKkI,EAAQ,CAAEjI,KAAM,SAAU,GAE7C,EAIJkI,CA7Ba3L,KAAKC,UAAU,CACxB2L,KAAM,CACFb,MAAOA,EACPE,SAAUA,EACVY,sBAAuBV,KA0BnC,CAY+CpC,CAASC,GAAQ5N,UAAU,8DAClDD,EAAAA,cAAC8N,EAAAA,GAAS,CAACC,MAAM,QAAQC,KAAK,QAAQjE,GAAG,YAAYkE,YAAY,QAAQ3F,KAAK,QAAQ4F,SAAUA,EAAUnI,YAAY,SACtH/F,EAAAA,cAAC8N,EAAAA,GAAS,CAACC,MAAM,WAAWC,KAAK,WAAWjE,GAAG,eAAekE,YAAY,WAAW3F,KAAK,WAAWqI,aAAa,eAAezC,SAAUA,EAAUnI,YAAY,SACjK/F,EAAAA,cAAC8N,EAAAA,GAAS,CAACC,MAAM,mBAAmBC,KAAK,uBAAuBjE,GAAG,sBAAsBkE,YAAY,mBAAmB3F,KAAK,WAAWqI,aAAa,eAAezC,SAAUA,EAAUnI,YAAY,SACpM/F,EAAAA,cAAA,OAAKC,UAAU,SACXD,EAAAA,cAAC4Q,EAAAA,GAAa,CAACjQ,KAAK,iBAAiBmF,WAAW,SAASC,YAAY,cASrG,ECoBA,OAxHA,SAA4BhG,GAExB,MAAMyG,GADOL,EAAAA,EAAAA,KACYK,UACnBJ,GAAWC,EAAAA,EAAAA,MACXC,GAAQC,EAAAA,EAAAA,MAoCd,SAASsK,GAAW,QAAEC,IAClB,MAAsB,aAAlBA,EAAQpP,OAEJ1B,EAAAA,cAAA,KAAGkD,KAAM4N,EAAQC,kBAAkB,sBAInCD,EAAQpP,MAGpB,CAEA,SAASsP,IACL,MAAMC,EAAOlR,EAAMmR,YAAY5P,KAAKwP,GAE5B9Q,EAAAA,cAAA,MAAI2B,IAAK,UAAYmP,EAAQ/G,IACzB/J,EAAAA,cAAA,UAAI,IAAE8Q,EAAQrD,YAAY,KAC1BzN,EAAAA,cAAA,UAAI,IAAE8Q,EAAQvD,WAAW,KACzBvN,EAAAA,cAAA,UAAI,KAAG8Q,EAAQK,qBAAqB,KACpCnR,EAAAA,cAAA,UAAI,IAACA,EAAAA,cAAC6Q,EAAU,CAACC,QAASA,IAAW,KACrC9Q,EAAAA,cAAA,UAAI,IAAoB,aAAlB8Q,EAAQpP,OACT1B,EAAAA,cAAC6F,EAAAA,GAAoB,CAACyC,KAAK,SAASkG,MAAOsC,EAAQ/G,GAAI9D,QAASA,KAAM2H,OAtCzEF,EAsCkFoD,EAAQ/G,QApCxG1H,iBACI,MAAMoD,QAAmBkJ,GAAyBnI,EAAWkH,EAAWtH,GAEpEX,EAAW9C,SACX5C,EAAM6O,mBAAmB7O,EAAM8O,gBAAkB,GACjDvI,EAAM+B,KAAK,kBAAmB,CAAEC,KAAM,aAGtChC,EAAM+B,KAAK5C,EAAWzB,MAAMjB,QAAS,CAAEuF,KAAM,SAErD,CAEAwG,GAdJ,IAAkBpB,CAsC8F,EAAC/M,KAAK,oBAElGX,EAAAA,cAAAA,EAAAA,SAAA,UAOhB,OACIA,EAAAA,cAAA,aACKiR,EAGb,CAEA,SAASG,IACL,OACIpR,EAAAA,cAAA,aACIA,EAAAA,cAAA,UACIA,EAAAA,cAAA,UAAI,aACJA,EAAAA,cAAA,UAAI,WACJA,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UAAI,YACJA,EAAAA,cAAA,UAAI,WAKpB,CAEA,SAASqR,IACL,OACIrR,EAAAA,cAAA,WACIA,EAAAA,cAAA,OAAKC,UAAU,2CACXD,EAAAA,cAAA,SAAOC,UAAU,2BACbD,EAAAA,cAACoR,EAAa,MACdpR,EAAAA,cAACgR,EAAW,QAGpBhR,EAAAA,cAAA,OAAKC,UAAU,oBAAmB,sDAK9C,CAIA,OACID,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,MAAIC,UAAU,QAAO,oBACpBF,EAAMuR,cAAgBtR,EAAAA,cAACqR,EAAkB,MAAMrR,EAAAA,cAACoK,EAAAA,EAAW,MAIxE,ECfA,OAtGA,SAAwBrK,GACpB,MAAOwR,EAAkBC,IAAuB5K,EAAAA,EAAAA,UAAS,iCAClDsK,EAAaO,IAAkB7K,EAAAA,EAAAA,UAAS,KACxC0K,EAAeI,IAAoB9K,EAAAA,EAAAA,WAAS,IAC5C+K,EAAcC,IAAmBhL,EAAAA,EAAAA,UAAS,IAC1CiI,EAAiBD,IAAsBhI,EAAAA,EAAAA,UAAS,IAChDiL,EAAkBC,IAAuBlL,EAAAA,EAAAA,UAAS,GAEnD3D,GAAW8O,EAAAA,EAAAA,MACX3L,GAAWC,EAAAA,EAAAA,MAEXG,GADOL,EAAAA,EAAAA,KACYK,UAuCzB,SAASwL,IACL,OAAIjS,EAAMkS,UACFX,EACIO,GAAoB,EAGhB7R,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACkS,GAAkB,CAAChB,YAAaA,EAAaI,cAAeA,EAAe1C,mBAAoBA,EAAoBC,gBAAiBA,IACrI7O,EAAAA,cAACgB,EAAU,MACXhB,EAAAA,cAACmS,GAAgB,OAMrBnS,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACoS,GAAa,CAACxD,mBAAoBA,EAAoBC,gBAAiBA,KAOhF7O,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACoK,EAAAA,EAAW,OAOpBpK,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACmS,GAAgB,MAIjC,CAGA,OA7Ec5L,EAAAA,EAAAA,OASdqB,EAAAA,EAAAA,YAAU,KACF3E,EAASoP,OACLpP,EAASoP,MAAMC,gBACfd,EAAoB,yEAO5BnP,iBACI,MAAMkQ,QAAoB5D,GAAuBnI,EAAWJ,GACxDmM,EAAY5P,UACZ8O,EAAec,EAAYC,WAC3BZ,EAAgBW,EAAYC,UAAUxQ,QACtC8P,EAAoBS,EAAYE,mBAChCf,GAAiB,GAEzB,CAEAgB,EAAa,GACd,CAAC7D,IAgDA7O,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACa,EAAuB,KACnB0Q,GAELvR,EAAAA,cAACgB,EAAU,MACXhB,EAAAA,cAACgS,EAAc,MAK3B,ECwBA,OAnIA,SAAyBjS,GACrB,MAAO4S,EAAiBC,IAAsBhM,EAAAA,EAAAA,UAAS7G,EAAM4S,kBACtDE,EAAwBC,IAA6BlM,EAAAA,EAAAA,UAAS,MAE9DmM,EAAuBC,IAA4BpM,EAAAA,EAAAA,UAAS,OAC5DqM,EAAcC,IAAmBtM,EAAAA,EAAAA,UAAS,OAC1CuM,EAAcC,IAAmBxM,EAAAA,EAAAA,UAAS,MA0CjD,IAAIyM,EAAWV,EAAgBW,KAAKhS,KAAIiS,IACpC,MAAMC,EAAOD,EAAIE,UACjB,OACIzT,EAAAA,cAAC0T,EAAAA,GAAc,CAAC3F,MAAOyF,EAAMhF,MAAOgF,EAAM7R,IAAK6R,GAAQ,IAI3DG,EAnBJ,WACI,GAAIV,EACA,OAAON,EAAgBW,KAAK/O,MAAKgP,GAAOA,EAAIE,WAAaR,IAAcW,aAAatS,KAAIuS,IACpF,MAAMC,EAAOD,EAAYE,gBACzB,OACI/T,EAAAA,cAAA,UAAQwO,MAAOsF,EAAMnS,IAAKmS,GAAOA,EAAc,GAI/D,CAUeE,GAEf,MAAMC,EAAalU,EAAMmU,WAAa,aAAgBnU,EAAMoU,kBAAoB,SAAW,OAE3F,SAASC,IACL,OAAIrU,EAAMoU,kBAEFnU,EAAAA,cAAA,OAAKC,UAAU,IACXD,EAAAA,cAAA,KAAGC,UAAU,gBAAgBgG,QAASA,IAAMlG,EAAMsU,oBAAoB,WAMtErU,EAAAA,cAAAA,EAAAA,SAAA,KAEhB,CAQA,OACIA,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKC,UAAU,sCACXD,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAAA,OAAKC,UAAU,kBACXD,EAAAA,cAAA,OAAKC,UAAU,UAAS,cAI5BD,EAAAA,cAAA,OAAKC,UAAU,4BACXD,EAAAA,cAAA,OAAKC,UAAU,uCACVF,EAAMuU,YAInBtU,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAAA,OAAKC,UAAU,kBACXD,EAAAA,cAAA,OAAKC,UAAU,UAAS,oBAI5BD,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAACuU,EAAAA,GAAgB,CAACvG,KAAK,OAAOjE,GAAG,aAAamE,SApFlE,SAAiBM,GACb0E,EAAgB1E,GAGhBsE,EAA0B,KAC1BE,EAAyB,MACzBI,EAAgB,KACpB,EA6EqFnF,YAAY,gBAAgBuG,aAAa,MACrGnB,KAIbrT,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAAA,OAAKC,UAAU,kBACXD,EAAAA,cAAA,OAAKC,UAAU,UAAS,qBAI5BD,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAACuU,EAAAA,GAAgB,CAACvG,KAAK,OAAOjE,GAAG,OAAOyE,MAAOqE,EAAwB3E,SArF3F,SAAiBM,GACbsE,EAA0BtE,GAC1B4E,EAAgB5E,GAChB,MAAMzE,EAAK4I,EAAgBW,KAAK/O,MAAKgP,GAAOA,EAAIE,WAAaR,IAAcW,aAAarP,MAAKsP,GAAeA,EAAYE,iBAAmBvF,IAAOiG,8BAClJzB,EAAyBjJ,EAC7B,EAgF8G2K,UAAU,eAChG1U,EAAAA,cAAC0T,EAAAA,GAAc,CAAC3F,MAAM,gBAAgBS,MAAM,IAAI7M,IAAI,SAASgT,YAAY,IACxEhB,MAKjB3T,EAAAA,cAAA,OAAKC,UAAU,mDACXD,EAAAA,cAAA,OAAKC,UAAU,IACXD,EAAAA,cAACgG,EAAAA,GAAkB,CAACrF,KAAMsT,EAAYnO,WAAW,SAASG,QAASA,KA7G/ElG,EAAM6U,SAAS7B,EAAuBE,EAAcE,EA6GuD,EAACwB,WAA4B,MAAhBxB,GAAwBpT,EAAMmU,cAE9IlU,EAAAA,cAACoU,EAAU,OAK3B,ECnEA,OA/DA,SAAqBrU,GACjB,MAAO6P,EAAOC,IAAYjJ,EAAAA,EAAAA,UAAS,KAC5BoH,EAAM6G,IAAWjO,EAAAA,EAAAA,UAAS,IAGjC,SAASsH,EAASL,GACW,SAArBA,EAAMU,OAAOP,KACb6B,EAAShC,EAAMU,OAAOC,OACM,QAArBX,EAAMU,OAAOP,MACpB6G,EAAQhH,EAAMU,OAAOC,MAE7B,CAEA,SAASsG,EAAa/U,GAElB,OACIC,EAAAA,cAAA,KAAGC,UAAU,gBAAgBgG,QAASlG,EAAMkG,SAAS,SAI7D,CAEA,OACIjG,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACa,EAAuB,KACpBb,EAAAA,cAAA,OAAKC,UAAU,mDACXD,EAAAA,cAAA,OAAKC,UAAU,UAAS,kBAGxBD,EAAAA,cAAA,OAAKC,UAAU,UACVF,EAAMkT,aAAa,MAAIlT,EAAMoT,cAElCnT,EAAAA,cAAC8U,EAAY,CAAC7O,QAASA,IAAMlG,EAAMgV,mBAAkB,OAG7D/U,EAAAA,cAACgB,EAAU,MACXhB,EAAAA,cAAA,WACIA,EAAAA,cAAA,UAAI,oCAGJA,EAAAA,cAAA,OAAKC,UAAU,qBAAoB,2JAIvCD,EAAAA,cAAA,OAAKC,UAAU,OACXD,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAAC8N,EAAAA,GAAS,CAACC,MAAM,QAAQC,KAAK,QAAQ1F,KAAK,QAAQ2F,YAAY,mBAAmBC,SAAUA,EAAUyC,aAAa,UAG3H3Q,EAAAA,cAAA,OAAKC,UAAU,OACXD,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAAC8N,EAAAA,GAAS,CAACC,MAAM,0BAA0BC,KAAK,OAAO1F,KAAK,OAAO2F,YAAY,0BAA0BC,SAAUA,EAAUyC,aAAa,MAAM5K,YAAY,WAGpK/F,EAAAA,cAAA,OAAKC,UAAU,OACXD,EAAAA,cAAA,OAAKC,UAAU,OACXD,EAAAA,cAACgG,EAAAA,GAAkB,CAACsC,KAAK,SAAS3H,KAAMZ,EAAMmU,WAAa,UAAY,SAAUjO,QAASA,IAAMlG,EAAM6N,SAASgC,EAAO5B,GAAOgH,SAAUjV,EAAMmU,eAKjK,EC9DA,GAC6B7R,MAAOmE,EAAW8N,EAAW,GAAI9R,EAAiB,QACvE,MACMmC,EAAM1C,EAAmBuE,EAAY,aADR,IAAZ8N,EAAiB,aAAeA,EAAW,IAGlE,IACI,MAAM/R,QAAiBwC,MAAMJ,EAAK,CAC9BK,OAAQ,MACR7C,QAASD,IACT+C,YAAa,YAGjB,aAAa3C,EAAeC,EAAUC,EAE1C,CAAE,MAAOwB,GACL,OAAOC,EAAaD,EACxB,GAhBR,GAmByB3B,MAAOmE,EAAWhE,EAAiB,QACpD,MAAMmC,EAAM1C,EAAmBuE,EAAY,mBAE3C,IACI,MAAMjE,QAAiBwC,MAAMJ,EAAK,CAC9BK,OAAQ,MACR7C,QAASD,IACT+C,YAAa,YAEjB,aAAa3C,EAAeC,EAAUC,EAE1C,CAAE,MAAOwB,GACL,OAAOC,EAAaD,EACxB,GAhCR,GAmCuB3B,MAAOmE,EAAWyO,EAA4BrF,EAAO5B,EAAMxL,EAAiB,QAC3F,MAAMmC,EAAM1C,EAAmBuE,EAAY,YAGrC5B,EAAOC,KAAKC,UAAU,CACxB2P,8BAA+BQ,EAC/BrF,MAAOA,EACP5B,KAAMA,IAIV,IACI,MAAMzL,QAAiBwC,MAAMJ,EAAK,CAC9BK,OAAQ,OACR7C,QAASD,IACT0C,KAAMA,EACNK,YAAa,YAEjB,aAAa3C,EAAeC,EAAUC,EAE1C,CAAE,MAAOwB,GACL,OAAOC,EAAaD,EACxB,GCsDR,OAzGA,SAA+BjE,GAC3B,MAAMqG,GAAWC,EAAAA,EAAAA,MACXC,GAAQC,EAAAA,EAAAA,OAEPwM,EAAuBC,IAA4BpM,EAAAA,EAAAA,UAAS,OAC5DqM,EAAcC,IAAmBtM,EAAAA,EAAAA,UAAS,OAC1CuM,EAAcC,IAAmBxM,EAAAA,EAAAA,UAAS,OAC1CgJ,EAAOC,IAAYjJ,EAAAA,EAAAA,UAAS,KAC5BoH,EAAM6G,IAAWjO,EAAAA,EAAAA,UAAS,KAG1BsO,EAAgBH,IAAqBnO,EAAAA,EAAAA,WAAS,IAC9CsN,EAAYiB,IAAiBvO,EAAAA,EAAAA,WAAS,GAkC7C,SAASgH,EAASwH,EAAaC,EAAYC,EAAgB,MAEvDzF,EAASuF,GACTvF,EAASwF,GACT,MAAME,EAAuBD,GAAgCvC,EAc7DoC,GAAc,GAZd9S,eAAiCmT,EAAYC,EAAWC,GAEpD,MAAMnT,QAAiBoT,GAA8B5V,EAAMyG,UAAWkP,EAAoBF,EAAYC,EAAWrP,GAE7G7D,EAASI,QAETyD,EAAS,GAETE,EAAM+B,KAAK9F,EAASyB,MAAO,CAAEsE,KAAM,UAEvC6M,GAAc,EAClB,CAEAS,CAAkBR,EAAaC,EAAYE,EAE/C,CAQA,OACIvV,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKC,UAAU,UAAS,2BACKF,EAAMoU,kBAAoB,KAAO,GAAG,iBAAepU,EAAM8V,aAAa,sCAAoC9V,EAAM+V,cAAgB,GAAK,OAAO,aAExKZ,EACGlV,EAAAA,cAAC+V,GAAW,CACR9C,aAAcA,EACdE,aAAcA,EACdvF,SAAUA,EACVmH,kBAAmBA,EACnBb,WAAYA,IAGhBlU,EAAAA,cAACgW,GAAe,CACZ1B,SAAUvU,EAAMuU,SAChB3B,gBAAiB5S,EAAM4S,gBACvBiC,SA7DhB,SAA2BU,EAAe9B,EAAMM,GACvC/T,EAAMoU,mBAMPnB,EAAyBsC,GACzBpC,EAAgBM,GAChBJ,EAAgBU,GAChBlG,EAAS7N,EAAM6P,MAAO7P,EAAMiO,KAAMsH,KARlCtC,EAAyBsC,GACzBpC,EAAgBM,GAChBJ,EAAgBU,GAChBiB,GAAkB,GAO1B,EAkDgBb,WAAYA,EACZC,kBAAmBpU,EAAMoU,kBACzBE,iBAAkBtU,EAAMsU,mBAM5C,EC3BA,OA9EA,SAAoCtU,GAChC,MAAMkW,EAAc,IAEdC,EADkB,IAAIC,KAAKpW,EAAMqW,YACmB,IAAID,KAExDE,EAAaH,EAA+BD,GAE3CK,EAAkBC,IAAuB3P,EAAAA,EAAAA,UAASsP,EAA+BD,GA2BxF,SAASO,IACL,OACIxW,EAAAA,cAAA,KAAGC,UAAU,gBAAgBgG,QAASA,IAAMlG,EAAM0W,cAAc,aAIxE,CAEA,SAASC,IACL,OACI1W,EAAAA,cAAA,KAAGC,UAAU,gBAAgBgG,QAASA,IAAMlG,EAAM4W,UAAU,SAIpE,CAMA,OArCA/O,EAAAA,EAAAA,YAAU,KACN,GAAIyO,EAAa,EAAG,CAChB,MAAMO,EAAcC,YAAW,KAC3BN,GAAoB,EAAK,GAC1BF,GAEH,MAAO,IAAMS,aAAaF,EAC9B,IACD,IA8BC5W,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKC,UAAU,UAAS,2KACgJF,EAAM6P,MAAM,4BAAqB7P,EAAMiO,KAAK,MAEpNhO,EAAAA,cAACa,EAAuB,KACpBb,EAAAA,cAAA,OAAKC,UAAU,uEACXD,EAAAA,cAAA,OAAKC,UAAU,UAAS,kBAGxBD,EAAAA,cAAA,OAAKC,UAAU,UACVF,EAAMkT,aAAa,MAAIlT,EAAMoT,cAElCnT,EAAAA,cAACwW,EAAgB,MACjBxW,EAAAA,cAAC0W,EAAY,QAGrB1W,EAAAA,cAAA,OAAKC,UAAU,QACXD,EAAAA,cAACgG,EAAAA,GAAkB,CAACsC,KAAK,SAAS3H,KAAK,eAAesF,QAASA,KArBvEjD,OAAO+T,KAAKhX,EAAMiX,WAAY,SAqB6D,EAACrC,YAAa2B,KAIjH,EC7CA,OA/BA,SAAmCvW,GAG/B,SAASqU,IACL,OAAIrU,EAAMoU,kBAEFnU,EAAAA,cAAA,OAAKC,UAAU,OACXD,EAAAA,cAAA,OAAKC,UAAU,OACXD,EAAAA,cAACgG,EAAAA,GAAkB,CAACsC,KAAK,SAAS3H,KAAK,OAAOsF,QAASA,IAAMlG,EAAMsU,uBAKvErU,EAAAA,cAAAA,EAAAA,SAAA,KAEhB,CAEA,OACIA,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACa,EAAuB,KAAC,4HAGzBb,EAAAA,cAACgB,EAAU,MACXhB,EAAAA,cAACoU,EAAU,MACXpU,EAAAA,cAACgB,EAAU,MAKvB,ECkKA,OA9KA,SAAwBjB,GAEpB,MAAOgT,EAAuBC,IAA4BpM,EAAAA,EAAAA,UAAS,OAC5DqM,EAAcC,IAAmBtM,EAAAA,EAAAA,UAAS,KAC1CuM,EAAcC,IAAmBxM,EAAAA,EAAAA,UAAS,KAC1CgJ,EAAOC,IAAYjJ,EAAAA,EAAAA,UAAS,KAC5BoH,EAAM6G,IAAWjO,EAAAA,EAAAA,UAAS,KAG1B0N,EAAU2C,IAAerQ,EAAAA,EAAAA,UAAS,KAClCoQ,EAAYE,IAAiBtQ,EAAAA,EAAAA,UAAS,KACtCuQ,EAAWC,IAAgBxQ,EAAAA,EAAAA,UAAS,KACpC0P,EAAkBC,IAAuB3P,EAAAA,EAAAA,WAAS,IAClDkP,EAAeuB,IAAoBzQ,EAAAA,EAAAA,WAAS,IAC5C+L,EAAiBC,IAAsBhM,EAAAA,EAAAA,UAAS,CAAC,IAEjD0Q,EAAoBC,IAAyB3Q,EAAAA,EAAAA,WAAS,IACtD4Q,EAAYC,IAAiB7Q,EAAAA,EAAAA,UAAS,YACtCuN,EAAmBuD,IAAwB9Q,EAAAA,EAAAA,WAAS,GAGrDR,GAAWC,EAAAA,EAAAA,MAEXG,GADOL,EAAAA,EAAAA,KACYK,UACnBF,GAAQC,EAAAA,EAAAA,MAmDd,SAASoR,EAAuBrC,EAAesC,EAAiBC,GAC5D7E,EAAyBsC,GACzBpC,EAAgB0E,GAChBxE,EAAgByE,GAChBH,GAAqB,GACrBD,EAAc,sBAClB,CAEA,SAASK,KAELzV,wBAC6BsT,GAAgCnP,EAAWJ,IAErDzD,SACX8U,EAAc,eACdnR,EAAM+B,KAAK,mBAAoB,CAAEC,KAAM,aAGvChC,EAAM+B,KAAK,gEAAiE,CAAEC,KAAM,SAE5F,CAEAyP,EACJ,CAEA,SAASC,IACLN,GAAqB,GACrBD,EAAc,cAClB,CAEA,SAASpD,IACLqD,GAAqB,GACrBD,EAAc,YAClB,CAEA,SAASQ,IACL,MAAkB,WAAdT,EAEIxX,EAAAA,cAACoK,EAAAA,EAAW,MAEK,eAAdoN,EACH9T,OAAOE,KAAK+O,GAAiB3Q,OAAS,EAElChC,EAAAA,cAACkY,GAAqB,CAClBvF,gBAAiBA,EACjBmD,cAAeA,EACfxB,SAAUA,EACVqD,uBAAwBA,EACxBnR,UAAWA,EACX2N,kBAAmBA,EACnBE,iBAAkBA,EAClBzE,MAAOA,EACP5B,KAAMA,EACN6H,aAAc9V,EAAM8V,eAKxB7V,EAAAA,cAACmY,GAAyB,CACtBhE,kBAAmBA,EACnBE,iBAAkBA,IAIT,aAAdmD,EAEHxX,EAAAA,cAACoY,GAA0B,CACvBpK,KAAMA,EACN4B,MAAOA,EACP6G,WAAYuB,EACZrB,OAAQmB,EACR7E,aAAcA,EACdE,aAAcA,EACd6D,WAAYA,EACZG,UAAWA,EACXhD,kBAAmBA,SAXxB,CAeX,CAQA,OAjIAvM,EAAAA,EAAAA,YAAU,KACNqP,EAAYoB,KAAKC,iBAAiBC,kBAAkBC,UAKpDnW,iBACI,MAAMoW,QAAoB9C,GAAoCnP,EAAW6R,KAAKC,iBAAiBC,kBAAkBC,SAAUpS,GAC3H,GAAIqS,EAAY9V,QAQZ,GAPA4U,GAAsB,GACtB3E,EAAmB6F,EAAYC,kBAC/BrB,EAAiBoB,EAAYE,gBAC7B1B,EAAYwB,EAAYnE,UACxBzE,EAAS4I,EAAY7I,OACrBiF,EAAQ4D,EAAYzK,MAES,GAAzByK,EAAYG,UAAmB,CAC/BnB,EAAc,aACd,MAAMoB,EAAcJ,EAAYK,eAChC5F,EAAgB,IAAIiD,KAAK0C,EAAYzC,YAAY2C,mBAAmB,QAAS,CAAEC,QAAS,OAAQC,MAAO,OAAQ1F,IAAK,aACpHH,EAAgB,IAAI+C,KAAK0C,EAAYzC,YAAY8C,mBAAmB,QAAS,CAAEC,KAAM,UAAWC,OAAQ,UAAWC,QAAQ,KAC3HnC,EAAcuB,EAAYa,aAC1BlC,EAAayB,EAAYzC,WAG7B,MACIqB,EAAc,cAG1B,CAEA8B,EAAkB,GACnB,IAkGCvZ,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACgB,EAAU,MACTsW,EACEtX,EAAAA,cAACiY,EAA2B,MAC5BjY,EAAAA,cAACoK,EAAAA,EAAW,MAK5B,EClKA,OA5BA,SAAwBrK,GAiBpB,OACIC,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACa,EAAuB,KAAC,iHAGzBb,EAAAA,cAACgB,EAAU,MAIvB,EC+HA,SAASwY,GAAazZ,GAClB,OACIC,EAAAA,cAAA,OAAKC,UAAU,qCACVF,EAAMM,MAGnB,CAEA,SAASoZ,GAAkB1Z,GACvB,OACIC,EAAAA,cAAA,OAAKC,UAAU,2EACVF,EAAMI,SAGnB,CAEA,SAASuZ,GAAmB3Z,GACxB,OACIC,EAAAA,cAAA,OAAKC,UAAU,OACXD,EAAAA,cAAA,OAAKC,UAAU,UACXD,EAAAA,cAAA,OAAKC,UAAU,2CACVF,EAAMI,WAK3B,CAEA,OA5JA,SAAuBJ,GACnB,MAAO4Z,EAAaC,IAAkBhT,EAAAA,EAAAA,UAAS,KACxCsC,EAAa2Q,IAAkBjT,EAAAA,EAAAA,UAAS,KACxCkT,EAAaC,IAAkBnT,EAAAA,EAAAA,WAAS,IACxCiP,EAAcmE,IAAmBpT,EAAAA,EAAAA,UAAS,KAC1CqT,EAAcC,IAAmBtT,EAAAA,EAAAA,UAAS,KAC1CuT,EAAaC,IAAkBxT,EAAAA,EAAAA,UAAS,KACxCoC,EAAeqR,IAAoBzT,EAAAA,EAAAA,UAAS,KAC5CkC,EAAUwR,IAAe1T,EAAAA,EAAAA,UAAS,KAClC2T,EAAoBC,IAAyB5T,EAAAA,EAAAA,UAAS,KACtDxF,EAAoBqH,IAAyB7B,EAAAA,EAAAA,UAAS,KACvD,QAAErB,EAAO,aAAEkV,EAAY,YAAE/T,EAAW,eAAEgU,IAAmBjU,EAAAA,EAAAA,MAExDkU,EAAgBC,IAAqBhU,EAAAA,EAAAA,WAAS,IAC9CiU,EAAkBC,IAAuBlU,EAAAA,EAAAA,WAAS,GAInDJ,GADOL,EAAAA,EAAAA,KACYK,UACnBJ,GAAWC,EAAAA,EAAAA,MA0EjB,OAjEAuB,EAAAA,EAAAA,YAAU,MAGNvF,iBACI,MAAM0Y,QAAoBvS,EAA4BhC,EAAWJ,GAC7D2U,EAAYpY,UACZiX,EAAemB,EAAYC,cAC3BnB,EAAekB,EAAYE,cAC3BlB,EAAegB,EAAYG,cAC3BlB,EAAgBe,EAAYI,eAC5BjB,EAAgBa,EAAYK,eAC5BhB,EAAeW,EAAYM,cAC3BhB,EAAiBU,EAAYO,gBAC7Bd,EAAsBO,EAAYQ,qBAClCjB,EAAYS,EAAYzP,WACxB7C,EAAsBsS,EAAYrS,qBAElCkS,GAAkB,GAE1B,CAUAY,GANAnZ,uBACkC4F,EAA4BjF,OAAOC,SAASC,KAAMsD,EAAWJ,GAC3F0U,GAAoB,EAExB,CAGAW,EAAkB,GACnB,KAEH7T,EAAAA,EAAAA,YAAU,KAcD6S,GAAiBlV,GAZtBlD,iBACI,MAAMqZ,QAA6BzT,EAA0BzB,EAAWJ,GAEpEsV,EAAqB/Y,SAErByD,EAASsV,EAAqBpQ,UAGtC,CAQIqQ,EAEJ,GAED,CAAClB,EAAc/T,EAAagU,EAAgBnV,IAW3CvF,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAC4b,EAAkB,MACnB5b,EAAAA,cAACyZ,GAAiB,KACdzZ,EAAAA,cAACwZ,GAAY,CAACnZ,MAAM,uBACpBL,EAAAA,cAAC0Z,GAAkB,KACdmB,GAAoBF,EAAiB3a,EAAAA,cAACoK,EAAAA,EAAW,MAC9CpK,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACE,EAAoB,KACjBF,EAAAA,cAACI,EAAmB,CAACC,MAAOsZ,IAC5B3Z,EAAAA,cAACM,EAAqB,KACjBwZ,EAAc9Z,EAAAA,cAACO,EAA2B,CAACE,KAAMob,EAAUlb,KAAK,sBAAyBX,EAAAA,cAAAA,EAAAA,SAAA,MACzE,QAAhB6V,EAAyB7V,EAAAA,cAACO,EAA2B,CAACE,KAAMqb,EAAWnb,KAAMkV,EAAe,aAAiB7V,EAAAA,cAAAA,EAAAA,SAAA,MAC7Gia,EAAe,EAAIja,EAAAA,cAACO,EAA2B,CAACE,KAAMsb,EAAYpb,KAAM,IAAMsZ,EAAe,iBAAqBja,EAAAA,cAAAA,EAAAA,SAAA,QAG3HA,EAAAA,cAACgc,EAAAA,GAAM,KACHhc,EAAAA,cAACic,EAAAA,GAAK,CAACC,KAAK,IAAIC,QAASnc,EAAAA,cAACoc,EAAU,CAACrT,YAAawR,EAAoBrR,YAAaA,EAAa9H,mBAAoBA,EAAoBqH,sBAAuBA,EAAuBK,SAAUA,EAAUE,cAAeA,MACzNhJ,EAAAA,cAACic,EAAAA,GAAK,CAACC,KAAK,YAAYC,QAASnc,EAAAA,cAACqc,EAAc,QAChDrc,EAAAA,cAACic,EAAAA,GAAK,CAACC,KAAK,YAAYC,QAASnc,EAAAA,cAACsc,GAAc,CAACzG,aAAcA,MAC/D7V,EAAAA,cAACic,EAAAA,GAAK,CAACC,KAAK,UAAUC,QAASnc,EAAAA,cAACuc,EAAY,QAE5Cvc,EAAAA,cAACic,EAAAA,GAAK,CAACC,KAAK,YAAYC,QAASnc,EAAAA,cAACwc,GAAc,CAACvK,UAAWgI,EAAe,MAC3Eja,EAAAA,cAACic,EAAAA,GAAK,CAACC,KAAK,YAAYC,QAASnc,EAAAA,cAACyc,GAAc,YAUhF,C,0ECtHA,IA/BA,SAAsB1c,GASlB,OANA6H,EAAAA,EAAAA,YAAU,KACNvD,SAASO,KAAK8X,MAAMC,gBAAkB,SAAS,GAChD,IAKC3c,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,cACIA,EAAAA,cAAA,OAAKC,UAAU,wBACXD,EAAAA,cAAA,OAAKC,UAAU,kFACXD,EAAAA,cAAA,OAAKC,UAAU,qBACXD,EAAAA,cAAA,UAAQC,UAAU,iBAAgB,KAC5BD,EAAAA,cAAA,QAAMC,UAAU,2BAA0B,WAGpDD,EAAAA,cAAA,OAAKC,UAAU,IACXD,EAAAA,cAACmJ,EAAAA,GAAa,CAACC,aAAa,EAAOC,YAAY,aAK/DrJ,EAAAA,cAAC4c,EAAAA,GAAM,MAInB,C,wECjBA,IAfA,WACI,OACI5c,EAAAA,cAAA,OAAKC,UAAU,aACXD,EAAAA,cAAA,OAAKC,UAAU,oFACXD,EAAAA,cAAA,WACIA,EAAAA,cAAC6c,IAAW,CAACC,MAAM,QAAQ,aAAW,kBAAkBC,KAAM,MAElE/c,EAAAA,cAAA,OAAKC,UAAU,4BAA2B,eAM1D,C,qECdO,MAAM+c,GAAcC,E,SAAAA,eAAc,CAAC,E,qECA1C,MAAMhb,EAAY,CAEhBib,OAAQ,I,+HCEH,MAAMhb,EAAmBA,CAACC,EAAU,CAAC,KASjC,IANe,CAClB,eAAgB,mBAChB,eAAgBC,QAMbD,IAMJE,eAAeC,EAAeC,EAAUC,GAO3C,GAAwB,MAApBD,EAASb,QAAsC,MAApBa,EAASb,OAAgB,CACpD,MAAMe,QAAaF,EAASG,OAE5B,OADAD,EAAc,SAAI,EACXA,CAEX,CAAO,GAAwB,MAApBF,EAASb,OAEhB,MAAO,CAAEiB,SAAS,GAEf,GAAwB,MAApBJ,EAASb,OAAgB,CAIhC,MAAMe,QAAaF,EAASG,OAE5B,GAAID,EAAKG,cAEL,OADAJ,EAAeC,EAAKG,eACb,CAAC,EAER,MAAM,IAAIC,MAAM,qCAGxB,CAAO,GAAwB,MAApBN,EAASb,OAAgB,CAEhC,MAAMoB,QAAkBP,EAASG,OACjC,MAAM,IAAIG,MAAO,gBAAeC,EAAUC,SAAW,kBAEzD,CAAO,GAAwB,MAApBR,EAASb,OAAgB,CAEhC,MAAMyb,EAAc5a,EAASJ,QAAQib,IAAI,gBACzC,GAAID,IAA4D,IAA7CA,EAAYE,QAAQ,oBAA4B,CAC/D,MAAMva,QAAkBP,EAASG,OAC3BK,EAAW,iBAAgBD,EAAUC,SAAW,kBAGtD,OAFAD,EAAUH,SAAU,EACpBG,EAAUkB,MAAQjB,EACXD,CACX,CAAO,CACH,MAAMwa,QAAqB/a,EAAS5B,OACpC,MAAM,IAAIkC,MAAO,GAAEya,GAAgB,2CACvC,CACJ,CAAO,GAAwB,MAApB/a,EAASb,OAEhB,MAAM,IAAImB,MAAM,kEACb,GAAwB,MAApBN,EAASb,OAEhB,MAAM,IAAImB,MAAM,oDACb,GAAwB,MAApBN,EAASb,OAAgB,CAEhC,MACM4B,EAuBd,SAAuBC,GACnB,GAAIA,EAAQ,CACR,IAAIC,EAAiB,GAMrB,OAJIA,EADAD,EAAOE,cAAgBC,OAWnC,SAA+BH,GAE3B,IAAII,EAAc,GAKlB,OAJAD,OAAOE,KAAKL,GAAQM,SAAQ,SAAUlC,GAElCgC,IAD0B,SAAPhC,EAAiB,QAAkB,YAAPA,EAAoB,WAAqB,yBAAPA,EAAiC,wBAA0BA,GAChH,IAAM4B,EAAO5B,GAAO,IACpD,IACOgC,CACX,CAlB6BG,CAAsBP,GAEtBA,EAEdC,CACX,CACI,MAAO,2GAEf,CAnC8BO,QADExB,EAASG,QACaa,QAC9C,MAAM,IAAIV,MAAO,yBAAwBS,GAAiB,kBAC9D,CAAO,MAAwB,MAApBf,EAASb,OAEV,IAAImB,MAAM,8DAEV,IAAIA,MAAO,8BAA6BN,EAASb,yCAE/D,CAEO,MAAMuC,EAAgBD,IACzBE,QAAQC,IAAI,aAAcH,GACnB,CAAErB,SAAS,EAAOqB,MAAOA,EAAMjB,UAmC1C,SAASX,IACL,MAEMgC,EAFUC,SAASC,OACInB,MAAM,MACDoB,MAAKD,GAAUA,EAAOE,WAAW,qBACnE,OAAOJ,EAAeA,EAAajB,MAAM,KAAK,GAAK,IACvD,C,+DChIA,KAEIoa,OAAQlb,MAAOuN,EAAOE,EAAU0N,EAAW,KAAMhb,EAAiB,QAC9D,MAAMmC,EAAM1C,EAAAA,EAAUib,OAAS,eAGzBtY,EAAOC,KAAKC,UAAU,CACxB2L,KAAM,CACFb,QACAE,YAEJ2N,YAAaD,IAGjB,IACI,MAAMjb,QAAiBwC,MAAMJ,EAAK,CAC9BK,OAAQ,OACR7C,SAASD,EAAAA,EAAAA,MACT0C,KAAMA,EACNK,YAAa,YAGjB,aAAa3C,EAAAA,EAAAA,IAAeC,EAAUC,EAE1C,CAAE,MAAOwB,GACL,OAAOC,EAAAA,EAAAA,IAAaD,EACxB,GAGJ0Z,iBAAkBrb,MAAOoC,EAAgBY,EAAgBmY,EAAW,KAAMhb,EAAiB,QACvF,MAAMmC,EAAM1C,EAAAA,EAAUib,OAAS,eAEzBtY,EAAOC,KAAKC,UAAU,CACxBU,UAAW,CACPH,eAAgBA,EAChBE,QAASd,GAEbgZ,YAAaD,IAGjB,IACI,MAAMjb,QAAiBwC,MAAMJ,EAAK,CAC9BK,OAAQ,OACR7C,SAASD,EAAAA,EAAAA,MACT0C,KAAMA,EACNK,YAAa,YAGjB,aAAa3C,EAAAA,EAAAA,IAAeC,EAAUC,EAE1C,CAAE,MAAOwB,GACL,OAAOC,EAAAA,EAAAA,IAAaD,EACxB,GAGJ2Z,QAAStb,MAAOG,EAAiB,QAC7B,MAAMmC,EAAM1C,EAAAA,EAAUib,OAAS,gBAE/B,IACI,MAAM3a,QAAiBwC,MAAMJ,EAAK,CAC9BK,OAAQ,SACR7C,SAASD,EAAAA,EAAAA,MACT+C,YAAa,YAGjB,aAAa3C,EAAAA,EAAAA,IAAeC,EAAUC,EAE1C,CAAE,MAAOwB,GACL,OAAOC,EAAAA,EAAAA,IAAaD,EACxB,GAGJ4Z,UAAWvb,MAAOG,EAAiB,QAI/B,IACI,MAAMD,QAAiBwC,MAHf,mBAG0B,CAC9BC,OAAQ,MACR7C,SAASD,EAAAA,EAAAA,MACT+C,YAAa,YAGjB,aAAa3C,EAAAA,EAAAA,IAAeC,EAAUC,EAE1C,CAAE,MAAOwB,GACL,OAAOC,EAAAA,EAAAA,IAAaD,EACxB,GAGJ6Z,SAAUxb,MAAOG,EAAiB,QAI9B,IACI,MAAMD,QAAiBwC,MAHf,mBAG0B,CAC9BC,OAAQ,MACR7C,SAASD,EAAAA,EAAAA,MACT+C,YAAa,YAEjB,aAAa3C,EAAAA,EAAAA,IAAeC,EAAUC,EAE1C,CAAE,MAAOwB,GACL,OAAOC,EAAAA,EAAAA,IAAaD,EACxB,G,mpBCtGR,SAAS8J,EAAU/N,GACf,MAAM+d,EAAS/d,EAAMgG,aAAe,GACpC,OAAIhG,EAAMge,QAEF/d,EAAAA,cAAA,OAAKC,UAAW,cAAgB6d,EAAS,UACrC9d,EAAAA,cAAA,SAAOC,UAAU,cAAcF,EAAMgO,OACrC/N,EAAAA,cAAA,OAAKC,UAAU,OAAOW,IAAKib,EAAU,iBAAe,UAAU,oBAAkB,MAAM,gBAAe9b,EAAMge,UAC3G/d,EAAAA,cAAA,SAAOgO,KAAMjO,EAAMiO,KAAMjE,GAAIhK,EAAMgK,GAAIiU,UAAQ,EAAC9P,SAAWL,GAAU9N,EAAMmO,SAASL,GAAQ5N,UAAU,2BAA2BgO,YAAalO,EAAMkO,YAAa3F,KAAMvI,EAAMuI,KAAMyV,QAAQ,OAAOpN,aAAc5Q,EAAM4Q,gBAK1N3Q,EAAAA,cAAA,OAAKC,UAAW,cAAgB6d,EAAS,UACrC9d,EAAAA,cAAA,SAAOC,UAAU,cAAcF,EAAMgO,OACrC/N,EAAAA,cAAA,SAAOgO,KAAMjO,EAAMiO,KAAMjE,GAAIhK,EAAMgK,GAAIiU,UAAQ,EAAC9P,SAAWL,GAAU9N,EAAMmO,SAASL,GAAQ5N,UAAU,2BAA2BgO,YAAalO,EAAMkO,YAAa3F,KAAMvI,EAAMuI,KAAMqI,aAAc5Q,EAAM4Q,eAIvN,CAEA,SAASsN,EAAkBle,GACvB,OACIC,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAAA,SAAOC,UAAU,cAAcF,EAAMgO,OACrC/N,EAAAA,cAAA,SAAOgO,KAAMjO,EAAMiO,KAAMjE,GAAIhK,EAAMgK,GAAIiU,UAAQ,EAAC9P,SAAWL,GAAU9N,EAAMmO,SAASL,EAAMU,OAAOC,OAAQvO,UAAU,eAAegO,YAAalO,EAAMkO,YAAa3F,KAAMvI,EAAMuI,OAG1L,CAEA,SAAS4V,EAAuBne,GAC5B,OACIC,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAAA,SAAOC,UAAU,+BAA+BF,EAAMoe,cACtDne,EAAAA,cAAA,WACKD,EAAMI,UAIvB,CAGA,SAASie,EAAYre,GAIjB,OACIC,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAAA,SACIC,UANI,sCAOJqI,KAAK,QACL0F,KAAMjO,EAAMiO,KACZjE,GAAIhK,EAAMgK,GACVyE,MAAOzO,EAAMyO,MACbN,SAAUA,IAAMnO,EAAMmO,SAASnO,EAAMyO,SAEzCxO,EAAAA,cAAA,SAAOC,UAAU,oCAAoCoe,QAASte,EAAMgK,IAC/DhK,EAAMgO,OAIvB,CAEA,SAASuQ,EAAeve,GAGpB,OACIC,EAAAA,cAAA,OAAKC,UAAU,yBACXD,EAAAA,cAAA,SACIC,UALI,yCAMJqI,KAAK,WACL0F,KAAMjO,EAAMiO,KACZjE,GAAIhK,EAAMgK,GACVyE,MAAOzO,EAAMyO,MACb+P,QAASxe,EAAMwe,QACfrQ,SAAWL,GAAU9N,EAAMmO,SAASL,EAAMU,OAAOgQ,WAErDve,EAAAA,cAAA,SAAOC,UAAU,oCAAoCoe,QAASte,EAAMgK,IAC/DhK,EAAMgO,OAIvB,CAEA,SAASwG,EAAiBxU,GACtB,MAAMye,EAAuBze,EAAMkO,aAAejO,EAAAA,cAAC0T,EAAc,CAACiB,YAAY,EAAMnG,MAAM,KAAKT,MAAOhO,EAAMkO,cACtGlI,EAAchG,EAAMgG,aAAe,GACzC,OACI/F,EAAAA,cAAA,OAAKC,UAAW,cAAgB8F,EAAc,UACzChG,EAAMoe,aAAene,EAAAA,cAAA,SAAOC,UAAU,+BAA+BF,EAAMoe,cAAwBne,EAAAA,cAAAA,EAAAA,SAAA,MACpGA,EAAAA,cAAA,UAAQC,UAAU,gCAAgC+N,KAAMjO,EAAMiO,KAAME,SAAWL,GAAU9N,EAAMmO,SAASL,EAAMU,OAAOC,OAAQzE,GAAIhK,EAAMgK,GAAIyE,MAAOzO,EAAMyO,MAAOgG,aAAczU,EAAMyU,aAAc,aAAYzU,EAAM2U,WAC9M8J,EACAze,EAAMI,UAIvB,CAEA,SAASuT,EAAe3T,GACpB,OACIC,EAAAA,cAAA,UAAQgV,SAAUjV,EAAM4U,WAAY1U,UAAU,eAAeuO,MAAOzO,EAAMyO,OAAQzO,EAAMgO,MAEhG,CAIA,SAAS6C,EAAc7Q,GACnB,MACM0e,EAAW,mDADG1e,EAAMgG,aAAe,IAGzC,OACI/F,EAAAA,cAAA,UAAQsI,KAAMvI,EAAM+F,WAAYG,QAASlG,EAAMkG,QAAShG,UAAWwe,EAAUzJ,SAAUjV,EAAM4U,YACzF3U,EAAAA,cAAA,WAAMD,EAAMY,MAGxB,CAGA,SAASqF,EAAmBjG,GACxB,MACM0e,EAAW,yEADG1e,EAAMgG,aAAe,IAGzC,OACI/F,EAAAA,cAAA,UAAQsI,KAAMvI,EAAM+F,WAAYG,QAASlG,EAAMkG,QAAShG,UAAWwe,EAAUzJ,SAAUjV,EAAM4U,YACzF3U,EAAAA,cAAA,WAAMD,EAAMY,MAGxB,CAGA,SAAS+d,EAAgB3e,GACrB,MAAMgG,EAAchG,EAAMgG,aAAe,GACnC0Y,EAAY1e,EAAM4U,WAAgE,yCAA2C5O,EAA7F,gCAAkCA,EAExE,OACI/F,EAAAA,cAAA,OAAKC,UAAWwe,GACZze,EAAAA,cAAA,UAAQsI,KAAMvI,EAAM+F,WAAYG,QAASlG,EAAMkG,QAAS+O,SAAUjV,EAAM4U,WAAY1U,UAAU,wDAC1FD,EAAAA,cAAA,WAAMD,EAAMY,KAAK,MAKjC,CAGA,SAASkF,EAAqB9F,GAC1B,MAGM0e,EAAW,wCAHG1e,EAAMgG,aAAe,KACpBhG,EAAM4e,OAA4B,GAAnB,mBACd5e,EAAM4U,WAAa,YAAc,IAGvD,OACI3U,EAAAA,cAAA,OAAKC,UAAWwe,GACZze,EAAAA,cAAA,UAAQsI,KAAMvI,EAAM+F,WAAYG,QAASlG,EAAMkG,QAAS+O,SAAUjV,EAAM4U,WAAY1U,UAAU,8EAC1FD,EAAAA,cAAA,WAAMD,EAAMY,KAAK,MAIjC,CAcA,SAASie,EAAoB7e,GACzB,MACM0e,EAAW,sDADG1e,EAAMgG,aAAe,IAGzC,OACI/F,EAAAA,cAAA,UAAQsI,KAAMvI,EAAM+F,WAAYG,QAASlG,EAAMkG,QAAS+O,SAAUjV,EAAM4U,WAAY1U,UAAWwe,GAC3Fze,EAAAA,cAAA,WAAMD,EAAMY,MAGxB,CAEA,SAASke,IACL,OACI7e,EAAAA,cAAA,OAAKC,UAAU,uEACXD,EAAAA,cAAA,OAAKC,UAAU,SACXD,EAAAA,cAAA,MAAIC,UAAU,iBAElBD,EAAAA,cAAA,OAAKC,UAAU,sBAAqB,MACpCD,EAAAA,cAAA,OAAKC,UAAU,SACXD,EAAAA,cAAA,MAAIC,UAAU,iBAI9B,CAEA,SAAS6e,GAAqB,SAAE3e,IAC5B,OACIH,EAAAA,cAAA,OAAKC,UAAU,kCACXD,EAAAA,cAAA,OAAKC,UAAU,8DACVE,GAIjB,CAEA,SAAS4e,GAAe,SAAE5e,IACtB,OACIH,EAAAA,cAAA,OAAKC,UAAU,SACXD,EAAAA,cAAA,OAAKC,UAAU,4BAA2B,KACrCE,GAKjB,CAEA,SAASiQ,GAAU,SAAEjQ,EAAQ,MAAE6e,EAAQ,SAAQ,YAAE3O,EAAc,KAC3D,MAAM4O,EAAuB,WAAVD,EAAqB,qBAAuB,oBACzDE,EAAmC,KAAhB7O,EAAqB,eAAiBA,EAC/D,OACIrQ,EAAAA,cAAA,OAAKC,UAAW,oDAAsDif,GAClElf,EAAAA,cAAA,OAAKC,UAAW,0CAA4Cgf,EAAa,iBACpE9e,GAKjB,CAEA,SAASgf,GAAc,SAAEhf,IACrB,OACIH,EAAAA,cAAA,OAAKC,UAAU,oBACVE,EAIb,CAEA,SAASif,GAAU,SAAEjf,EAAQ,SAAEyN,IAC3B,OACI5N,EAAAA,cAAA,QAAM4N,SAAWC,GAAUD,EAASC,GAAQ5N,UAAU,8DACjDE,EAGb,CAEA,SAASkf,GAAe,MAAEhf,IACtB,OACIL,EAAAA,cAAA,MAAIC,UAAU,sCAAsCI,EAE5D,CAEA,SAASif,IAEL,OACItf,EAAAA,cAAA,OAAKC,UAAU,8BACXD,EAAAA,cAACuf,EAAAA,GAAI,CAACtf,UAAU,gBAAgBuf,GAAI,CAAEra,SAAU,oBAAqB,oBAGjF,CAEA,SAASsa,GAAe,YAAEC,EAAc,0BAAyB,KAAExD,EAAO,UAAS,SAAEyD,EAAW,YAC5F,OACI3f,EAAAA,cAAA,OAAKC,UAAU,uDACXD,EAAAA,cAAA,OAAKC,UAAU,oBAAoByf,EAAY,IAAC1f,EAAAA,cAACuf,EAAAA,GAAI,CAACtf,UAAU,iBAAiBuf,GAAI,CAAEra,SAAU+W,IAASyD,IAGtH,CAEA,SAASC,GAAa,OAAErc,IAEpB,OAAKA,EAGMA,EAAOE,cAAgBoc,QAAUtc,EAAOvB,OAAS,EAEpDhC,EAAAA,cAAA,OAAKC,UAAU,mBACXD,EAAAA,cAAA,OAAKC,UAAU,2BACVsD,IAINA,EAAOE,cAAgBqc,OAASvc,EAAOvB,OAAS,EAEnDhC,EAAAA,cAAA,OAAKC,UAAU,mBACXD,EAAAA,cAAA,OAAKC,UAAU,2BAEVsD,EAAOjC,KAAI,CAAC0C,EAAOxC,IACTxB,EAAAA,cAAA,OAAK2B,IAAKH,GAAQwC,OAOlChE,EAAAA,cAAAA,EAAAA,SAAA,MAtBAA,EAAAA,cAAAA,EAAAA,SAAA,KAwBf,CAEA,SAAS+f,GAAc,QAAEC,IAErB,OAAKA,EAGMA,EAAQvc,cAAgBoc,OAE3B7f,EAAAA,cAAA,OAAKC,UAAU,mBACXD,EAAAA,cAAA,OAAKC,UAAU,8BACV+f,IAINA,EAAQvc,cAAgBqc,MAE3B9f,EAAAA,cAAA,OAAKC,UAAU,mBACXD,EAAAA,cAAA,OAAKC,UAAU,8BAEV+f,EAAQ1e,KAAI,CAAC2e,EAAQze,IACXxB,EAAAA,cAAA,OAAK2B,IAAKH,GAAQye,YANtC,EATIjgB,EAAAA,cAAAA,EAAAA,SAAA,KAqBf,CAEA,SAASkgB,IACL,OACIlgB,EAAAA,cAAA,OAAKC,UAAU,uCAEvB,C,oDC9UA,MAAMkgB,EAAa,CACjBxD,gBAAiB,UACjBG,MAAO,UACPsD,aAAc,OACdC,OAAQ,oBACRC,QAAS,OACTC,eAAgB,gBAChBC,WAAY,SACZC,UAAW,+BAEXC,UAAW,aACXC,SAAU,QACVC,SAAU,YAGNC,EAAsB,CAC1BC,QAAS,OACTR,QAAS,OACTS,MAAO,OACPR,eAAgB,SAChBC,WAAY,SACZQ,cAAe,MACfC,UAAW,QAGPC,EAAuB,CAC3BZ,QAAS,OACTC,eAAgB,UAGZY,EAAe,CACnBC,KAAM,EACNC,UAAW,OACXN,MAAO,QAGHO,EAAmB,CAEvBC,OAAQ,OAGRC,OAAQ,UAIRlB,QAAS,OACTC,eAAgB,SAChBC,WAAY,UA+Cd,IArB4BiB,EAAG1e,UAAS2e,UAAShF,QAAOiF,WACtD3hB,EAAAA,cAAA,OAAK0c,MAAO,IAAKyD,KAAezD,IAC9B1c,EAAAA,cAAA,OAAK0c,MAAOmE,GACV7gB,EAAAA,cAAA,OAAK0c,MAAOwE,GACVlhB,EAAAA,cAAA,OAAK0c,MAAO,CAAEqE,MAAO,GAAIQ,OAAQ,KA3BzBjZ,KACd,OAAQA,GACN,IAAK,QACH,OACEtI,EAAAA,cAAA,OAAK4hB,MAAM,6BAA6Bb,MAAM,KAAKQ,OAAO,KAAKM,QAAQ,YAAYC,KAAK,QACtF9hB,EAAAA,cAAA,QAAM+hB,EAAE,ujDAAujDD,KAAK,aAG1kD,IAAK,OACH,OACE9hB,EAAAA,cAAA,OAAK4hB,MAAM,6BAA6Bb,MAAM,KAAKQ,OAAO,KAAKM,QAAQ,YAAYC,KAAK,QACtF9hB,EAAAA,cAAA,QAAM+hB,EAAE,uyCAAuyCD,KAAK,aAG1zC,IAAK,UACH,OACE9hB,EAAAA,cAAA,OAAK4hB,MAAM,6BAA6Bb,MAAM,KAAKQ,OAAO,KAAKM,QAAQ,YAAYC,KAAK,QACtF9hB,EAAAA,cAAA,QAAM+hB,EAAE,6jBAA6jBD,KAAK,aAGllB,EAQSE,CAAQN,EAAQpZ,QAGrBtI,EAAAA,cAAA,OAAK0c,MAAOyE,EAAclhB,UAAU,UACjC8C,GAEH/C,EAAAA,cAAA,OAAKiG,QAAS0b,EAAOjF,MAAO4E,GAC1BthB,EAAAA,cAAA,OAAK8hB,KAAK,UAAUF,MAAM,6BAA6BL,OAAO,KAAKR,MAAM,KAAKc,QAAQ,aACpF7hB,EAAAA,cAAA,QAAM+hB,EAAE,4IACR/hB,EAAAA,cAAA,QAAM+hB,EAAE,kBAAkBD,KAAK,Y,mDC7EzC,IAVA,SAA2BG,GACvB,IAGI,OAFa,IAAIC,EAAAA,KACZC,MAAMC,kBAAkBH,IACtB,CACX,CAAE,MAAOI,GACL,OAAO,CACX,CACJ,C,+DCaA,IAlBA,UAAsB,KAClB5R,IAEA,MAAMrK,GAAWC,EAAAA,EAAAA,MAYjB,OARAuB,EAAAA,EAAAA,YAAU,KACD6I,GAAqC,IAA7B/M,OAAOE,KAAK6M,GAAMzO,OAG3BoE,EAASqK,EAAK6R,eAFdtf,OAAOC,SAASC,KAAO,mCAG3B,GACD,IAEIlD,EAAAA,cAAAA,EAAAA,SAAA,KACX,C,sMCZA,SAASuiB,GAAe,SACtBpiB,IAEA,OACEH,EAAAA,cAACwiB,EAAS,CAACC,mBAAmB,OAAOC,yBAAyB,YAC3DviB,GAAsBH,EAAAA,cAAC4c,EAAAA,GAAM,MAGpC,CAEA,SAAS+F,GAAa,SACpBxiB,IAEA,OACEH,EAAAA,cAACwiB,EAAS,CAACC,mBAAmB,GAAGC,yBAAyB,IACvDviB,GAAsBH,EAAAA,cAAC4c,EAAAA,GAAM,MAIpC,CAaA,SAASgG,GAAwB,SAC/BziB,IAEA,OACEH,EAAAA,cAACwiB,EAAS,CAACC,mBAAmB,OAAOC,yBAAyB,cAC3DviB,GAAsBH,EAAAA,cAAC4c,EAAAA,GAAM,MAGpC,CAKA,SAASiG,GAAY,SACnB1iB,IAEA,OAAOA,GAAsBH,EAAAA,cAAC4c,EAAAA,GAAM,KACtC,CAOA,SAAS4F,GAAU,mBACjBC,EAAkB,yBAClBC,IAEA,MAAM,KAAEjS,EAAI,QAAEqS,EAAO,YAAEC,IAAgBC,EAAAA,EAAAA,YAAWhG,EAAAA,IACjC3W,EAAAA,EAAAA,MAEjB,OAAiC,IAA7B3C,OAAOE,KAAK6M,GAAMzO,OACbhC,EAAAA,cAACoK,EAAAA,EAAW,MAEfqG,EAAKwS,aAAeR,GAAsBhS,EAAKyS,mBAAqBR,EAC/D1iB,EAAAA,cAAC4c,EAAAA,GAAM,MAEP5c,EAAAA,cAACmjB,EAAAA,GAAQ,CAAC3D,GAAI/O,EAAK6R,eAGhC,C","sources":["webpack://despark/./app/javascript/components/public_portal/standard_components/FullPageBackground.jsx","webpack://despark/./app/javascript/components/public_portal/overview_components/CommonOverviewComponents.jsx","webpack://despark/./app/javascript/components/public_portal/pages/landing_page/WalletRequirements.jsx","webpack://despark/./app/javascript/components/public_portal/api/apiConfig.js","webpack://despark/./app/javascript/components/public_portal/api/apiUtils.js","webpack://despark/./app/javascript/components/public_portal/api/api_calls/SessionAPI.js","webpack://despark/./app/javascript/components/public_portal/api/api_calls/PublicMissionAPI.js","webpack://despark/./app/javascript/components/public_portal/pages/landing_page/PMOverview.jsx","webpack://despark/./app/javascript/components/public_portal/api/api_calls/SurveyAPI.js","webpack://despark/./app/javascript/components/public_portal/pages/screener/PublicScreener.jsx","webpack://despark/./app/javascript/components/public_portal/pages/survey/PublicSurvey.jsx","webpack://despark/./app/javascript/components/public_portal/api/api_calls/CashOutAPI.js","webpack://despark/./app/javascript/components/public_portal/pages/complete/PublicCashOut.jsx","webpack://despark/./app/javascript/components/public_portal/api/api_calls/SignUpApiCall.jsx","webpack://despark/./app/javascript/components/public_portal/pages/complete/PublicSignUpCard.jsx","webpack://despark/./app/javascript/components/public_portal/pages/complete/PublicCashOutTable.jsx","webpack://despark/./app/javascript/components/public_portal/pages/complete/PublicComplete.jsx","webpack://despark/./app/javascript/components/public_portal/pages/schedule/DateTimeSelects.jsx","webpack://despark/./app/javascript/components/public_portal/pages/schedule/EmailSelect.jsx","webpack://despark/./app/javascript/components/public_portal/api/api_calls/ScheduleAPI.js","webpack://despark/./app/javascript/components/public_portal/pages/schedule/PublicSimpleScheduler.jsx","webpack://despark/./app/javascript/components/public_portal/pages/schedule/PublicScheduledSessionList.jsx","webpack://despark/./app/javascript/components/public_portal/pages/schedule/PublicSchedulePlaceholder.jsx","webpack://despark/./app/javascript/components/public_portal/pages/schedule/PublicSchedule.jsx","webpack://despark/./app/javascript/components/public_portal/pages/rejected/PublicRejected.jsx","webpack://despark/./app/javascript/components/public_portal/PublicMission.jsx","webpack://despark/./app/javascript/components/public_portal/standard_components/HeaderPublic.jsx","webpack://despark/./app/javascript/components/public_portal/standard_components/LoadingIcon.jsx","webpack://despark/./app/javascript/components/user_portal/UserContext.jsx","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/apiConfig.js","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/apiUtils.js","webpack://despark/./app/javascript/components/user_portal/preauth_portal/api/api_calls/sessionAPI.js","webpack://despark/./app/javascript/components/user_portal/preauth_portal/components/CommonComponents.jsx","webpack://despark/./app/javascript/components/utility_components/CustomAlertTemplate.jsx","webpack://despark/./app/javascript/components/utility_components/IsValidAddress.jsx","webpack://despark/./app/javascript/components/utility_components/routing_components/PageNotFound.jsx","webpack://despark/./app/javascript/components/utility_components/routing_components/auth_routes.jsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\n\nfunction FullPageBackground(props) {\n return (\n
\n
\n )\n}\n\nexport default FullPageBackground","import React from \"react\";\nimport TooltipIcon from '../../../../assets/images/info_icon.svg';\n\n\nfunction MissionDetailsHeader(props) {\n return (\n
\n {props.children}\n
\n )\n}\n\nfunction MissionDetailsTitle(props) {\n return (\n
\n

{props.title}

\n
\n )\n}\n\nfunction MissionDetailsIconRow(props) {\n return (\n
\n {props.children}\n
\n )\n}\n\nfunction MissionDetailsIconComponent(props) {\n return (\n
\n \n \n
\n )\n}\n\nfunction MissionDetailsIcon(props) {\n return (\n
\n \n
\n )\n}\n\nfunction MissionDetailsIconText(props) {\n return (\n
\n {props.text}\n
\n )\n}\n\nfunction MissionDetailsHighlight(props) {\n return (\n
\n {props.children}\n
\n )\n}\n\nfunction MissionDetailsConnectAndVerifyTextAndTooltip(props) {\n const verifyTooltip = \"Signing your wallet verifies that you own that address. It prevents other users from impersonating you and allows us to verify that you meet the requirements for this mission.\"\n\n return (\n
\n
\n Please connect and verify your wallet to continue.\n
\n \n
\n )\n}\n\nfunction VertSpacer(props) {\n return (\n
\n )\n}\n\nexport { MissionDetailsIconRow, MissionDetailsIconComponent, MissionDetailsHeader, MissionDetailsTitle, MissionDetailsHighlight, MissionDetailsConnectAndVerifyTextAndTooltip, VertSpacer }","import React from \"react\";\nimport GrayCircleIcon from '../../../../../assets/images/mission_detail_icons/gray_circle_icon.svg';\nimport GreenCircleIcon from '../../../../../assets/images/mission_detail_icons/green_circle_icon.svg';\nimport RedCircleIcon from '../../../../../assets/images/mission_detail_icons/red_circle_icon.svg';\n\n\nfunction WalletRequirements(props) {\n\n\n\n return (\n props.requirements.length === 0 ?\n \n :\n \n\n )\n}\n\nfunction WalletRequirementsEmpty(props) {\n\n return (\n
\n
\n {props.company ? props.company + \" is\" : \"We are\"} interested in feedback from users.\n
\n
\n )\n}\n\nfunction WalletRequirementsFull(props) {\n\n const walletRequirements = props.requirements.map((requirement, index) => {\n return (\n \n\n )\n });\n\n return (\n
\n
\n {props.company ? props.company + \" is\" : \"We are\"} interested in feedback from users that meet\n ALL of the following requirements:\n
\n
\n
\n {walletRequirements}\n
\n
\n
\n )\n}\n\nfunction WalletRequirement(props) {\n const classColor = props.status ? \"requirement-green\" : props.status === null ? \"requirement-gray\" : \"requirement-red\";\n const icon = props.status ? GreenCircleIcon : props.status === null ? GrayCircleIcon : RedCircleIcon;\n\n return (\n
\n
\n \n
\n
\n {props.text}\n
\n
\n\n )\n}\n\nexport default WalletRequirements;","\n\nconst apiConfig = {\n // Set the base URL for your API\n apiUrl: '/api/public/v1/missions/',\n };\n\nexport { apiConfig};\n ","// import usenavigate\nimport { apiConfig } from './apiConfig';\n\n\n\n// Helper function to add common headers to the API request\nexport const addCommonHeaders = (headers = {}) => {\n // const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n const commonHeaders = {\n 'Content-Type': 'application/json',\n \"X-CSRF-Token\": getCSRFToken(),\n // Add any other common headers here\n };\n\n return {\n ...commonHeaders,\n ...headers,\n };\n};\n\n\n\nexport async function handleResponse(response, handleRedirect) {\n\n // RULES:\n // Always retrun success: true if the response is good\n // Always return success: false otherwise; unless we navigate from here.\n\n if (response.status === 200 || response.status === 201) { //ok or created\n const data = await response.json();\n data[\"success\"] = true\n return data;\n\n } else if (response.status === 204) { // no content\n // For successful POST or PUT requests without any response body\n return { success: true };\n\n } else if (response.status === 302) { // 302 Found - Temporary Redirect\n // For redirects, we return the redirect path\n // In the future, allow components to pass in a callback function \n // to handle the redirects\n const data = await response.json();\n\n if (data.redirect_path) {\n handleRedirect(data.redirect_path)\n return {}\n } else {\n throw new Error('Redirect: Redirect path not found.');\n }\n\n } else if (response.status === 400) {\n // Bad Request\n const errorData = await response.json();\n throw new Error(`Bad Request: ${errorData.message || 'Unknown error'}`);\n\n } else if (response.status === 401) {\n // Unauthorized\n // Take the current URL, which looks like: \"/public/missions/1/screener\" or like \"public/missions/1\"\n // And limit it to the content before the last slash, which is the missionId\n const browserRouterUrl = window.location.href.split(\"#\")[1];\n // Get the first 4 elements of the URL when split by \"/\"\n const unauthorizedRedirect = browserRouterUrl.split(\"/\").slice(0, 4).join(\"/\");\n\n handleRedirect(unauthorizedRedirect)\n throw new Error('Unauthorized: Please log in.');\n } else if (response.status === 403) {\n // Forbidden\n throw new Error('Forbidden: You do not have permission to access this resource.');\n } else if (response.status === 404) {\n // Not Found\n throw new Error('Not Found: The requested resource was not found.');\n } else if (response.status === 422) {\n // Unprocessable Entity\n const errorData = await response.json();\n var errorMessages = \"\"\n if (errorData.errors) {\n errorMessages = CleanUpErrors(errorData.errors)\n } else if (errorData.error) {\n errorMessages = errorData.error\n }\n throw new Error(`Unprocessable Entity: ${errorMessages || 'Unknown error'}`);\n } else if (response.status === 500) {\n // Internal Server Error\n throw new Error('Internal Server Error: Something went wrong on the server.');\n } else {\n throw new Error(`Request failed with status ${response.status}. Please contact info@despark.io`);\n }\n};\n\nexport const handleErrors = (error) => {\n console.log('API Error:', error);\n return { success: false, error: error.message };\n};\n\n// ----------------------------------\n// ----------------------------------\n// -------- Helper Functions --------\n// ----------------------------------\n// ----------------------------------\n\n\n// Clean up 422 errors\nfunction CleanUpErrors(errors) {\n if (errors) {\n let failureReasons = \"\"\n if (errors.constructor === Object) {\n failureReasons = CleanUpMultipleErrors(errors)\n } else {\n failureReasons = errors\n }\n return failureReasons\n } else {\n return \"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io\"\n }\n}\n\nfunction CleanUpMultipleErrors(errors) {\n\n var errorString = \"\";\n Object.keys(errors).forEach(function (key) {\n const objectName = key == \"email\" ? \"Email\" : (key == \"password\" ? \"Password\" : (key == \"password_confirmation\" ? \"Password Confirmation\" : key))\n errorString += objectName + \" \" + errors[key] + \"\\n\";\n });\n return errorString\n}\n\nfunction getCSRFToken() {\n const cookies = document.cookie;\n const splitCookies = cookies.split('; ');\n const desparkToken = splitCookies.find(cookie => cookie.startsWith(\"_despark_token=\"))\n return desparkToken ? desparkToken.split('=')[1] : null\n}\n","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n // Get the signature message based on this wallet\n getSignatureMessage: async (wallet_address, mission_id, handleRedirect = null) => {\n const url = apiConfig.apiUrl + mission_id + \"/get_signature_message\";\n\n const body = JSON.stringify({\n wallet_address: wallet_address\n })\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n credentials: 'include',\n body: body\n })\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n result = handleErrors(error);\n result[\"signature_message\"] = null\n return result\n }\n },\n\n // Check if the user is on the correct page when they click into the app\n checkInitialPage: async (pathname, mission_id, handleRedirect = null) => {\n const lastUrlSlug = pathname.split(\"missions/\" + mission_id)[1]\n const url = apiConfig.apiUrl + mission_id + \"/check_page?current_page=\" + lastUrlSlug;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n // Create a new session for this user\n createSession: async (wallet_address, signature_data, mission_id, handleRedirect = null) => {\n const url = apiConfig.apiUrl + mission_id + \"/session\";\n\n const body = JSON.stringify({\n wallet: {\n address: wallet_address,\n signature: signature_data\n }\n })\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n // Destroy the session for this user\n destroySession: async (mission_id, handleRedirect = null) => {\n const url = apiConfig.apiUrl + mission_id + \"/session\";\n\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}\n\n","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n // Get the signature message based on this wallet\n getMission: async (mission_id, handleRedirect = null) => {\n const url = apiConfig.apiUrl + mission_id;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n const returnData = handleErrors(error);\n returnData[\"mission\"] = null\n return returnData\n }\n },\n\n // Check whether the wallet meets the mission requirements\n checkWalletRequirements: async (wallet_address, mission_id, handleRedirect) => {\n const url = apiConfig.apiUrl + mission_id + \"/check_wallet_requirements\";\n\n\n const body = JSON.stringify({\n wallet_address: wallet_address\n })\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n }\n\n\n}\n\n","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\n\nimport { ConnectButton } from '@rainbow-me/rainbowkit';\nimport { MissionDetailsHighlight, MissionDetailsConnectAndVerifyTextAndTooltip, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport WalletRequirements from \"./WalletRequirements\";\nimport { useSignMessage, useAccount } from \"wagmi\";\nimport { PrimaryButtonSmall, SecondaryButtonSmall } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\n// API Calls\nimport SessionAPI from \"../../api/api_calls/SessionAPI\";\nimport PublicMissionAPI from \"../../api/api_calls/PublicMissionAPI\";\n\n\n\n\n\nfunction PMOverview(props) {\n let params = useParams()\n const navigate = useNavigate();\n const alert = useAlert();\n const missionId = params.missionId;\n const { address } = useAccount();\n const [isConnected, setIsConnected] = useState(false);\n const [loggedIn, setLoggedIn] = useState(false);\n const [meetsRequirements, setMeetsRequirements] = useState(false);\n const [requirementsLoading, setRequirementsLoading] = useState(false)\n const [showNextButton, setShowNextButton] = useState(false)\n\n const [messageToSign, setMessageToSign] = useState(\"Despark is having a server error. Signing this is harmless, but won't log you in. Please try again later.\");\n const { data, isError, isLoading, isSuccess, signMessage } = useSignMessage();\n const mockedRequirements = [\n {\n status: null,\n text: \"Wallet has used Uniswap on Ethereum\"\n },\n {\n status: null,\n text: \"Wallet has balance of at least 0.1 ETH\"\n },\n ]\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n // Initialize tooltips \n useEffect(() => {\n const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))\n }, []);\n\n // Set isConnected & get signature message\n useEffect(() => {\n setIsConnected(!!address);\n\n async function GetMessage(address) {\n const message = await SessionAPI.getSignatureMessage(address, missionId, navigate)\n if (message.success) {\n setMessageToSign(message.signature_message)\n } else {\n console.log(\"Error getting signature message\")\n }\n }\n\n if (address) {\n GetMessage(address)\n // This is where we will start the address prep.\n }\n }, [address]);\n\n // Check Signature validity and whether the wallet meets teh requirements\n useEffect(() => {\n\n async function CreateSession() {\n const session = await SessionAPI.createSession(address, data, missionId, navigate)\n if (session.success) {\n // This is where the new checkwalletrequirements will go.\n setLoggedIn(true)\n } else {\n setLoggedIn(false)\n console.log(session.error)\n alert.show(session.error, { type: 'error' })\n }\n }\n\n async function CheckWalletRequirements() {\n const response = await PublicMissionAPI.checkWalletRequirements(address, missionId, navigate)\n if (response.success) {\n props.setWalletRequirements(response.wallet_requirements)\n setMeetsRequirements(response.meets_requirements)\n } else {\n console.log(response.error)\n }\n setRequirementsLoading(false)\n }\n\n // So, if we signed the message, in parallel: \n // 1. Check if we meet the requirements\n // 2. Check signature validity and create a session\n if (isSuccess) {\n CreateSession()\n CheckWalletRequirements()\n setRequirementsLoading(true)\n }\n }, [isSuccess]);\n\n useEffect(() => {\n if (loggedIn && meetsRequirements) {\n setShowNextButton(true)\n }\n\n }, [loggedIn, meetsRequirements]);\n\n function signAndAlert() {\n signMessage({ message: messageToSign })\n alert.show(\"Please open your wallet to sign the login message\", { type: 'info' })\n }\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n const SecondButton = () => {\n if (showNextButton) {\n return ( navigate(props.nextPath)} />)\n } else if (isConnected) {\n return ( signAndAlert()} signatureLoading={isLoading} />)\n } else {\n return (<>)\n }\n }\n\n\n\n return (\n <>\n \n {props.description}\n \n \n {props.missionStatus != \"open\" ? :\n <>\n \n
\n {!loggedIn ? : <> }\n
\n \n \n {requirementsLoading ?
\"Loading...\"
: <>}\n
\n }\n\n \n )\n\n}\n\nfunction ClosedMissionText() {\n\n return (\n
\n
This feedback mission is now closed. Thank you for your interest.
\n
\n )\n}\n\n\nfunction ButtonOrLoadingMessage(props) {\n if (props.signatureLoading) {\n return (\n \n )\n } else {\n return (\n \n )\n }\n}\n\nexport default PMOverview;","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n\n getSurvey: async (missionId, surveyType = \"\", handleRedirect = null) => {\n // This function is called when the screener is loaded and grabs the screener from the server\n const paramString = surveyType ? \"?survey_type=\" + surveyType : \"\"\n const url = apiConfig.apiUrl + missionId + \"/survey\" + paramString;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include'\n })\n\n return await handleResponse(response, handleRedirect);\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n createSurveyResponse: async (missionId, surveyId, json, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/survey_responses\";\n\n const body = JSON.stringify(\n {\n survey_response: json,\n survey_id: surveyId\n })\n\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n credentials: 'include',\n body: body\n })\n\n return await handleResponse(response, handleRedirect);\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { Survey, Model, StylesManager } from \"survey-react\";\nimport 'survey-react/defaultV2.min.css';\n\nimport { PrimaryButtonSmall } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n\n// API Calls\nimport SurveyAPI from \"../../api/api_calls/SurveyAPI\";\n\n\n\n\nfunction PublicScreener(props) {\n const [screener, setScreener] = useState(null);\n const [screenerComplete, setScreenerComplete] = useState(false);\n const [failedLoading, setFailedLoading] = useState(false);\n const [screenerFailed, setScreenerFailed] = useState(false);\n const [screenerLoaded, setScreenerLoaded] = useState(false);\n const [screenerId, setScreenerId] = useState(null);\n const stateRef = useRef();\n\n stateRef.current = screenerId;\n\n\n let params = useParams()\n const missionId = params.missionId;\n StylesManager.applyTheme(\"defaultV2\");\n const navigate = useNavigate();\n\n\n\n // On complete, save the screener results\n const onScreenerComplete = useCallback(async (sender) => {\n\n setScreenerComplete(true);\n\n const response = await SurveyAPI.createSurveyResponse(\n missionId,\n stateRef.current, // This lets us send the screenerId to the API call (otherwise it's stale and null)\n sender.data, // This is the survey data\n navigate\n )\n\n if (!response.pass) {\n // Set it to failed and show the user the failed status.\n setScreenerFailed(true);\n } else {\n navigate(response.next_path)\n }\n\n }, []);\n\n // Load the screener\n useEffect(() => {\n // Grab information on this user\n async function GetScreener() {\n const data = await SurveyAPI.getSurvey(missionId, \"screener\", navigate);\n\n if (data.success == false) {\n setFailedLoading(true);\n return;\n }\n // Once it loads, then run through and set all the screener stuff\n const tempScreener = new Model(await data.survey);\n tempScreener.onComplete.add(onScreenerComplete);\n setScreener(tempScreener);\n setScreenerLoaded(true);\n setScreenerId(data.survey_id);\n }\n\n GetScreener();\n }, []);\n\n\n return (\n <>\n
\n Screener required: To help us gather the most relevant insights, please complete this short screener before proceeding to the main feedback session.\n
\n \n \n )\n\n}\n\nfunction SwitchCompleteAndFailedScreener(props) {\n const lastRoute = \"/missions/\" + props.missionId;\n if (props.failedLoading) {\n return (\n
\n
\n Screener not available at this time.\n
\n props.navigate(lastRoute)} />\n
\n )\n } else if (props.screenerFailed) {\n return (\n
\n
\n Unfortunately, you aren't the target audience for this feedback session. Thank you for your interest.\n
\n props.navigate(lastRoute)} />\n\n
\n )\n } else if (props.screenerComplete) {\n return (\n
\n
\n Thank you for completing the screener. Saving your responses...\n
\n
\n )\n } else {\n return (\n
\n {props.screenerLoaded ? : }\n
\n )\n }\n}\n\n\n\nexport default PublicScreener","import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { Link, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport { Survey, Model, StylesManager } from \"survey-react\";\nimport 'survey-react/defaultV2.min.css';\n\nimport { PrimaryButtonSmall } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n// API Calls\nimport SurveyAPI from \"../../api/api_calls/SurveyAPI\";\n\n\n\n\n\nfunction PublicSurvey(props) {\n const [survey, setSurvey] = useState(null);\n const [surveyComplete, setSurveyComplete] = useState(false);\n const [failedLoading, setFailedLoading] = useState(false);\n const [surveyLoaded, setSurveyLoaded] = useState(false);\n const [surveyFailed, setSurveyFailed] = useState(false);\n const [surveyId, setSurveyId] = useState(null);\n const stateRef = useRef();\n\n stateRef.current = surveyId;\n const STORAGE_ITEM_KEY = \"survey-\" + surveyId;\n\n\n\n let params = useParams()\n const missionId = params.missionId;\n StylesManager.applyTheme(\"defaultV2\");\n const navigate = useNavigate();\n\n\n\n // On complete, save the survey results\n const onSurveyComplete = useCallback(async (sender) => {\n\n setSurveyComplete(true);\n\n const response = await SurveyAPI.createSurveyResponse(\n missionId,\n stateRef.current, // This lets us send the screenerId to the API call (otherwise it's stale and null)\n sender.data, // This is the survey data\n navigate\n )\n navigate(response.next_path)\n\n\n }, []);\n\n // Save the survey data to local storage\n function saveSurveyData(survey) {\n const data = survey.data;\n data.pageNo = survey.currentPageNo;\n window.localStorage.setItem(STORAGE_ITEM_KEY, JSON.stringify(data));\n }\n\n // Restore the survey data from local storage\n function restoreSurveyData(survey) {\n const prevData = window.localStorage.getItem(STORAGE_ITEM_KEY) || null;\n if (prevData) {\n const data = JSON.parse(prevData);\n survey.data = data;\n if (data.pageNo) {\n survey.currentPageNo = data.pageNo;\n }\n }\n }\n\n // Load the survey\n useEffect(() => {\n // Grab information on this user\n async function GetSurvey() {\n const data = await SurveyAPI.getSurvey(missionId, \"survey\", navigate);\n\n if (data.success == false) {\n setFailedLoading(true);\n return;\n }\n // Once it loads, then run through and set all the survey stuff\n const surveyData = await data.survey;\n // Manually turn off autofocus for these.\n // Not working, but based on https://surveyjs.answerdesk.io/ticket/details/t8403/first-question-gets-focused-automatically\n // surveyData[\"focusFirstQuestionAutomatic\"] = false;\n const tempSurvey = new Model(surveyData);\n // Save survey results when users change a question value...\n tempSurvey.onValueChanged.add(saveSurveyData);\n // ... and switch to the next page\n tempSurvey.onCurrentPageChanged.add(saveSurveyData);\n // Save the survey results when the survey is complete\n tempSurvey.onComplete.add(onSurveyComplete);\n // Restore the survey data from local storage\n restoreSurveyData(tempSurvey);\n setSurvey(tempSurvey);\n setSurveyLoaded(true);\n setSurveyId(data.survey_id);\n }\n\n GetSurvey();\n }, []);\n\n\n return (\n <>\n
\n Please complete the survey below.\n
\n \n \n )\n\n}\n\nfunction SwitchCompleteAndFailedSurvey(props) {\n const lastRoute = \"/missions/\" + props.missionId;\n if (props.failedLoading) {\n return (\n
\n
\n Survey not available at this time.\n
\n props.navigate(lastRoute)} />\n
\n )\n } else if (props.surveyFailed) {\n return (\n
\n
\n Unfortunately, you aren't the target audience for this feedback session. Thank you for your interest.\n
\n props.navigate(lastRoute)} />\n\n
\n )\n } else if (props.surveyComplete) {\n return (\n
\n
\n Thank you for completing the survey. Saving your responses...\n
\n
\n )\n } else {\n return (\n
\n {props.surveyLoaded ? : }\n
\n )\n }\n}\n\n\n\nexport default PublicSurvey","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n createCashOut: async (missionId, walletAddress, blockchain, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/cash_outs\";\n\n\n const body = JSON.stringify({\n cash_out: {\n eth_address: walletAddress,\n blockchain: blockchain\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n getCashOuts: async (missionId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/cash_outs\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n deleteCashOut: async (missionId, cashOutId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/cash_outs/\" + cashOutId;\n\n const body = JSON.stringify({\n cash_out: {\n id: cashOutId,\n }\n });\n\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\n\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport { FormField, PrimaryButtonSmall } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\nimport IsValidEVMAddress from \"../../../utility_components/IsValidAddress\";\n\n// API Calls\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\n\nfunction PublicCashOut(props) {\n const [blockchain, setBlockchain] = useState(\"Polygon\");\n const [walletAddress, setWalletAddress] = useState(\"\");\n const [confirmAddress, setConfirmAddress] = useState(\"\");\n\n let params = useParams()\n const missionId = params.missionId;\n const navigate = useNavigate();\n const alert = useAlert();\n\n\n\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n //Update state on input change\n function onChange(event) {\n switch (event.target.name) {\n case 'address':\n setWalletAddress(event.target.value)\n case 'confirmAddress':\n setConfirmAddress(event.target.value)\n }\n }\n\n function onSubmit(event) {\n event.preventDefault();\n\n // Make sure eth address matches confirmed eth address\n if (walletAddress != confirmAddress) {\n alert.show(\"Wallet addresses do not match\", { type: 'error' })\n return;\n }\n\n // Make sure eth address is valid\n if (IsValidEVMAddress(walletAddress) == false) {\n alert.show(\"Not a valid \" + blockchain + \" address\",\n { type: 'error' })\n return;\n }\n\n async function CashOutRequest() {\n const returnData = await CashOutAPI.createCashOut(missionId, walletAddress, blockchain, navigate)\n\n if (returnData.success) {\n props.setRefreshCashOuts(props.refreshCashOuts + 1)\n alert.show(\"Thank you for participating! Your reward will be sent within 48 hours\", { type: \"success\" })\n } else {\n alert.show(returnData.error.message, { type: 'error' })\n }\n }\n\n CashOutRequest();\n }\n\n\n\n return (\n <>\n \n \n )\n\n}\n\nfunction CashOutForm(props) {\n\n return (\n
props.onSubmit(event)} className=\"form row d-flex row-gap-4 \">\n
\n What wallet should we send the reward to? This will be sent on {props.blockchain} within 48 hours.\n
\n
\n
\n \n \n \n
\n\n \n )\n}\n\n\nexport default PublicCashOut;","\n\n\n// // Sign up the User\nasync function SignUpApiCall(body) {\n const url = \"/users/signupnew\";\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n try {\n const myResponse = await fetch(url, {\n method: \"POST\",\n headers: {\n \"X-CSRF-Token\": token,\n \"Content-Type\": \"application/json\"\n },\n body: body\n })\n\n if (myResponse.ok) {\n const responseBody = await myResponse.json();\n\n const returnData = {\n userEmail: responseBody.user_email,\n success: true,\n next_path: responseBody.next_path,\n failureReason: []\n }\n return returnData\n\n } else if (myResponse.status == 422) {\n const responseBody = await myResponse.json();\n let failureReasons = null;\n // Sometimes Rails returns a dcitionary of errors. Handle it. \n if (responseBody.errors.constructor === Object) {\n failureReasons = responseBody.errors ? CleanUpErrors(responseBody.errors) : [\"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io\"]\n } else {\n failureReasons = responseBody.errors ? responseBody.errors : \"Something went wrong.\"\n }\n const returnData = {\n success: false,\n failureReasonArray: failureReasons\n }\n return returnData\n } else {\n console.log(\"Other Issue\")\n throw new Error(\"Network response was not ok.\");\n }\n\n } catch (error) {\n const returnData = {\n success: false,\n failureReasonArray: [\"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io.\"]\n }\n return returnData\n }\n}\n\nfunction CleanUpErrors(errors) {\n var errorArray = [];\n Object.keys(errors).forEach(function (key) {\n const objectName = key == \"email\" ? \"Email\" : (key == \"password\" ? \"Password\" : \"Password Confirmation\")\n errorArray.push(objectName + \" \" + errors[key]);\n });\n return errorArray\n}\n\nexport default SignUpApiCall;","import React, { useState, useEffect } from \"react\";\nimport { LogInCard, FormField, PrimaryButton } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\nimport { useAlert } from 'react-alert';\nimport SignUpApiCall from \"../../api/api_calls/SignUpApiCall\";\n\n\nfunction PublicSignUpCard(props) {\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [passwordConfirmation, setPasswordConfirmation] = useState(\"\")\n const alert = useAlert();\n\n // Path starts with localhost:3000/ or app.despark.io/ \n // Duplicate that path, and then add /sign-in-redirect\n const postSignUpPath = window.location.origin + \"/sign-in-redirect\";\n console.log(postSignUpPath)\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n //Update state on input change\n function onChange(event) {\n switch (event.target.name) {\n case 'email':\n setEmail(event.target.value)\n case 'password':\n setPassword(event.target.value)\n case 'passwordConfirmation':\n setPasswordConfirmation(event.target.value)\n }\n }\n\n // The log in function called on submit\n function onSubmit(event) {\n event.preventDefault();\n const url = \"/users/signupnew\";\n\n\n\n if (email.length == 0 || password.length == 0) { return; }\n if (password != passwordConfirmation) { alert.show(\"Passwords do not match\", { type: 'error' }); return; }\n if (password.length <= 7) { alert.show(\"Password must be at least 8 characters long\", { type: 'error' }); return; }\n\n // You must do it this way, with the user on the outside. \n const body = JSON.stringify({\n user: {\n email: email,\n password: password,\n password_confirmation: passwordConfirmation\n }\n });\n\n const SignUpUser = async (body) => {\n const result = await SignUpApiCall(body);\n\n if (result.success) {\n\n //We no longer set this, as they aren't logged in under confirmable.\n // props.setUserEmail && props.setUserEmail(result.userEmail); \n // localStorage.removeItem(\"user\");\n // localStorage.setItem(\"user\", JSON.stringify(result.userEmail));\n // We use the javascript here to force it reload.\n // We pass through a rails route to force cSRF token to reload.\n window.location.href = postSignUpPath\n } else {\n // sets the message to display to user\n result.failureReasonArray.forEach((reason) => {\n alert.show(reason, { type: 'error' });\n })\n }\n }\n\n\n SignUpUser(body)\n }\n\n return (\n
\n
{/* This sets the width and margins */}\n \n
Give Feedback, Get Paid
\n
\n Enjoy giving feedback? Create a Despark account and you can get paid to help improve web3\n
\n\n
\n
onSubmit(event)} className=\"form bg-transparent-color no-outline text-white w-100 mt-5\">\n \n \n \n
\n \n
\n \n
\n
\n
\n
\n )\n\n}\n\nexport default PublicSignUpCard;","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\n\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport { SecondaryButtonSmall } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n// API Calls\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\n\nfunction PublicCashOutTable(props) {\n let params = useParams()\n const missionId = params.missionId;\n const navigate = useNavigate();\n const alert = useAlert();\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n // Delete the cash out and send to create a new one\n function onSubmit(cashOutId) {\n\n async function CashOutRequest() {\n const returnData = await CashOutAPI.deleteCashOut(missionId, cashOutId, navigate)\n\n if (returnData.success) {\n props.setRefreshCashOuts(props.refreshCashOuts + 1)\n alert.show(\"Request deleted\", { type: \"success\" })\n // Can't do state here because of the Rails backend. \n } else {\n alert.show(returnData.error.message, { type: 'error' })\n }\n }\n\n CashOutRequest();\n }\n\n function StatusLink({ cashOut }) {\n if (cashOut.status == \"completed\") {\n return (\n Completed - Link \n )\n } else {\n return (\n cashOut.status\n )\n }\n }\n\n function CashOutRows() {\n const rows = props.cashOutList.map((cashOut) => {\n return (\n \n {cashOut.eth_address} \n {cashOut.blockchain} \n ${cashOut.usd_amount_formatted} \n \n {cashOut.status == \"requested\" ?\n ( onSubmit(cashOut.id)} text=\"Delete & Update\" />)\n :\n <>\n }\n \n \n )\n })\n\n return (\n \n {rows}\n \n )\n }\n\n function CashOutHeader() {\n return (\n \n \n Address \n Chain \n Amount \n Status \n Edit \n \n \n )\n\n }\n\n function CashOutTableHelper() {\n return (\n
\n
\n \n \n \n
\n
\n
\n Cash outs are generally processed within 48 hours.\n
\n
\n )\n }\n\n\n // ADD IN THE LINK FOR COMPLETED ONES\n return (\n <>\n
Cash Out Status
\n {props.cashOutLoaded ? : }\n \n )\n\n}\n\n\nexport default PublicCashOutTable;","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams, useLocation } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport PublicSignUpCard from \"./PublicSignUpCard\";\nimport PublicCashOutTable from \"./PublicCashOutTable\";\nimport PublicCashOut from \"./PublicCashOut\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n// API Calls\nimport CashOutAPI from \"../../api/api_calls/CashOutAPI\";\n\nfunction PublicComplete(props) {\n const [completionNotice, setCompletionNotice] = useState(\"Thank you for participating!\");\n const [cashOutList, setCashOutList] = useState([])\n const [cashOutLoaded, setCashOutLoaded] = useState(false)\n const [cashOutCount, setCashOutCount] = useState(0)\n const [refreshCashOuts, setRefreshCashOuts] = useState(0)\n const [availableBalance, setAvailableBalance] = useState(0)\n\n const location = useLocation();\n const navigate = useNavigate();\n let params = useParams()\n const missionId = params.missionId;\n const alert = useAlert();\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n useEffect(() => {\n if (location.state) {\n if (location.state.receivedReward) {\n setCompletionNotice(\"Thank you for participating! Your reward will be sent within 48 hours\")\n }\n }\n\n\n\n // Get the list of current cashouts\n async function GetCashOuts() {\n const cashOutData = await CashOutAPI.getCashOuts(missionId, navigate)\n if (cashOutData.success) {\n setCashOutList(cashOutData.cash_outs)\n setCashOutCount(cashOutData.cash_outs.length)\n setAvailableBalance(cashOutData.available_balance)\n setCashOutLoaded(true)\n }\n }\n\n GetCashOuts()\n }, [refreshCashOuts]);\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n function CashOutSection() {\n if (props.hasReward) {\n if (cashOutLoaded) {\n if (availableBalance <= 0) {\n // If there are cashouts, show the table\n return (\n <>\n \n \n \n \n )\n } else {\n // If there are no cashouts, show the cashout form\n return (\n <>\n \n \n )\n }\n } else {\n // If the cashouts are still loading, show a loading message\n return (\n <>\n \n \n )\n }\n } else {\n // If the mission has no reward, show the sign up card\n return (\n <>\n \n \n )\n }\n }\n\n\n return (\n <>\n \n {completionNotice}\n \n \n \n\n \n )\n\n}\n\nexport default PublicComplete;","import React, { useState } from \"react\";\nimport { DropdownQuestion, DropdownOption, PrimaryButtonSmall } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\n\n\n\nfunction DateTimeSelects(props) {\n const [appointmentList, setAppointmentList] = useState(props.appointmentList)\n const [timeOptionSelectHelper, setTimeOptionSelectHelper] = useState(\"0\")\n\n const [selectedAppointmentId, setSelectedAppointmentId] = useState(null)\n const [selectedDate, setSelectedDate] = useState(null)\n const [selectedTime, setSelectedTime] = useState(null)\n\n // ----------------------------------------\n // Date and Time Set Up\n // ----------------------------------------\n\n function finalizeAppointment() {\n props.onSelect(selectedAppointmentId, selectedDate, selectedTime)\n }\n\n // Set the date selected\n function setDate(value) {\n setSelectedDate(value)\n\n // Reset the time variables\n setTimeOptionSelectHelper(\"0\")\n setSelectedAppointmentId(null)\n setSelectedTime(null)\n }\n\n // Set the time selected\n // Also set the id\n function setTime(value) {\n setTimeOptionSelectHelper(value)\n setSelectedTime(value)\n const id = appointmentList.days.find(day => day.date_text == selectedDate).appointments.find(appointment => appointment.start_time_text == value).mission_event_availability_id\n setSelectedAppointmentId(id)\n }\n\n // Function to get the time list.\n function getTimeList() {\n if (selectedDate) {\n return appointmentList.days.find(day => day.date_text == selectedDate).appointments.map(appointment => {\n const time = appointment.start_time_text\n return (\n \n )\n })\n }\n }\n\n // Get hte list of dates\n let dateList = appointmentList.days.map(day => {\n const date = day.date_text\n return (\n \n )\n })\n\n let timeList = getTimeList()\n\n const buttonText = props.submitting ? \"Loading...\" : (props.rescheduleClicked ? \"Submit\" : \"Next\")\n\n function BackButton() {\n if (props.rescheduleClicked) {\n return (\n \n )\n } else {\n return (<>)\n }\n }\n // ----------------------------------------\n // ----------------------------------------\n // ------------ Rendering ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n return (\n <>\n
\n
\n
\n
\n Timezone:\n
\n
\n
\n
\n {props.timezone}\n
\n
\n
\n
\n
\n
\n Available Days:\n
\n
\n
\n \n {dateList}\n \n
\n
\n
\n
\n
\n Available Times:\n
\n
\n
\n \n \n {timeList}\n \n
\n
\n
\n
\n
\n finalizeAppointment()} isDisabled={selectedTime == null || props.submitting} />\n
\n \n
\n\n \n )\n}\n\nexport default DateTimeSelects;","import React, { useState, } from \"react\";\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport { PrimaryButton, PrimaryButtonSmall, FormField } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\n\nfunction EmailSelect(props) {\n const [email, setEmail] = useState(\"\")\n const [name, setName] = useState(\"\")\n\n\n function onChange(event) {\n if (event.target.name == \"email\") {\n setEmail(event.target.value)\n } else if (event.target.name == \"name\") {\n setName(event.target.value)\n }\n }\n\n function ChangeButton(props) {\n\n return (\n \n Change\n \n )\n }\n\n return (\n <>\n \n
\n
\n Selected Time:\n
\n
\n {props.selectedDate} @ {props.selectedTime}\n
\n props.setSelectingEmail(false)} />\n
\n
\n \n
\n
\n Where should we send the invite?\n
\n
\n We will ONLY send you information about this session, including an invitation and information on the session and reward. We will NOT share your email.\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n props.onSubmit(email, name)} disabled={props.submitting} />\n
\n
\n \n )\n}\n\nexport default EmailSelect;","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n getPublicScheduleStatus: async (missionId, timezone = \"\", handleRedirect = null) => {\n const timeZoneString = timezone != \"\" ? \"?timezone=\" + timezone : \"\"\n const url = apiConfig.apiUrl + missionId + \"/schedule\" + timeZoneString;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n cancelUpcomingEvent: async (missionId, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/schedule/cancel\";\n\n try {\n const response = await fetch(url, {\n method: \"PUT\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n submitAppointment: async (missionId, missionEventAvailabilityId, email, name, handleRedirect = null) => {\n const url = apiConfig.apiUrl + missionId + \"/schedule\"\n\n\n const body = JSON.stringify({\n mission_event_availability_id: missionEventAvailabilityId,\n email: email,\n name: name\n\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n}","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport DateTimeSelects from \"./DateTimeSelects\";\nimport EmailSelect from \"./EmailSelect\";\n\n// API Calls\nimport ScheduleAPI from \"../../api/api_calls/ScheduleAPI\";\n\nfunction PublicSimpleScheduler(props) {\n const navigate = useNavigate()\n const alert = useAlert()\n\n const [selectedAppointmentId, setSelectedAppointmentId] = useState(null)\n const [selectedDate, setSelectedDate] = useState(null)\n const [selectedTime, setSelectedTime] = useState(null)\n const [email, setEmail] = useState(\"\")\n const [name, setName] = useState(\"\")\n\n\n const [selectingEmail, setSelectingEmail] = useState(false)\n const [submitting, setSubmitting] = useState(false)\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n function SelectAppointment(appointmentId, date, time) {\n if (!props.rescheduleClicked) {\n setSelectedAppointmentId(appointmentId)\n setSelectedDate(date)\n setSelectedTime(time)\n setSelectingEmail(true)\n } else {\n setSelectedAppointmentId(appointmentId)\n setSelectedDate(date)\n setSelectedTime(time)\n onSubmit(props.email, props.name, appointmentId)\n }\n }\n\n\n function onSubmit(input_email, input_name, appointmentId = null) {\n // Submit from here\n setEmail(input_email)\n setEmail(input_name)\n const updatedAppointmentId = appointmentId ? appointmentId : selectedAppointmentId\n \n async function submitAppointment(finalEmail, finalName, finalAppointmentId) {\n // Had to accept an input of appointmentId, because the state didn't update in time from SelectAppointment\n const response = await ScheduleAPI.submitAppointment(props.missionId, finalAppointmentId, finalEmail, finalName, navigate)\n\n if (response.success) {\n // Refresh the page\n navigate(0);\n } else {\n alert.show(response.error, { type: 'error'})\n }\n setSubmitting(false)\n }\n setSubmitting(true)\n submitAppointment(input_email, input_name, updatedAppointmentId )\n\n }\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Rendering ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n return (\n < >\n
\n Please select a slot to {props.rescheduleClicked ? \"re\" : \"\"}schedule your {props.timeEstimate}-minute feedback session. Video is {props.videoRequired ? \"\" : \"NOT \"}required.\n
\n {selectingEmail ?\n \n :\n \n }\n\n \n )\n}\n\n\n\nexport default PublicSimpleScheduler\n","import React, { useState, useEffect, useCallback, useReducer } from \"react\";\nimport { MissionDetailsHighlight } from \"../../overview_components/CommonOverviewComponents\";\nimport { PrimaryButtonSmall } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\n\n\nfunction PublicScheduledSessionList(props) {\n const fiveMinutes = 5 * 60 * 1000\n const startTimeAsDate = new Date(props.start_time)\n const timeDifferenceFromNowToStart = (startTimeAsDate) - (new Date()) // Time difference from start time to now in milliseconds\n\n const timeToWait = timeDifferenceFromNowToStart - fiveMinutes\n\n const [joinButtonActive, setJoinButtonActive] = useState(timeDifferenceFromNowToStart < fiveMinutes);\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects -------------\n // ----------------------------------------\n // ----------------------------------------\n\n // Set a Timeout to activcate teh button when \n // we're within five minutes of the meeting start time\n useEffect(() => {\n if (timeToWait > 0) {\n const buttonTimer = setTimeout(() => {\n setJoinButtonActive(true)\n }, timeToWait);\n\n return () => clearTimeout(buttonTimer);\n }\n }, [])\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n function RescheduleButton() {\n return (\n props.reschedule()}>\n Reschedule\n \n )\n }\n\n function CancelButton() {\n return (\n props.cancel()}>\n Cancel\n \n )\n }\n\n function joinMeeting() {\n window.open(props.meetingUrl, '_blank');\n }\n\n return (\n <>\n
\n You've scheduled a time for your feedback session. After attending and completing the session, you'll be sent an email with details of your reward. Your email is “{props.email}” and pseudonym is \"{props.name}\".\n
\n \n
\n
\n Selected Time:\n
\n
\n {props.selectedDate} @ {props.selectedTime}\n
\n \n \n
\n
\n
\n joinMeeting()} isDisabled={!joinButtonActive} />\n
\n \n )\n}\n\nexport default PublicScheduledSessionList;","import React from \"react\";\nimport { VertSpacer, MissionDetailsHighlight } from \"../../overview_components/CommonOverviewComponents\";\nimport { PrimaryButtonSmall } from \"../../../user_portal/preauth_portal/components/CommonComponents\";\n\n\nfunction PublicSchedulePlaceholder(props) {\n\n\n function BackButton() {\n if (props.rescheduleClicked) {\n return (\n
\n
\n props.cancelReschedule()} />\n
\n
\n )\n } else {\n return (<>)\n }\n }\n\n return (\n <>\n \n There are no currently available times. We're working to find new time slots for sessions. Please check back again soon.\n \n \n \n \n\n\n\n )\n}\n\nexport default PublicSchedulePlaceholder","import React, { useState, useEffect } from \"react\";\nimport { useNavigate, useParams, useLocation } from \"react-router-dom\";\nimport { useAlert } from 'react-alert';\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\nimport PublicSimpleScheduler from \"./PublicSimpleScheduler\";\nimport PublicScheduledSessionList from \"./PublicScheduledSessionList\";\nimport PublicSchedulePlaceholder from \"./PublicSchedulePlaceholder\";\nimport LoadingIcon from \"../../standard_components/LoadingIcon\";\n\n// API Calls\nimport ScheduleAPI from \"../../api/api_calls/ScheduleAPI\";\n\n\n\n// A slightly complicated component\n// This can be in a few states:\n// 1. The user is selecting a time.\n// 2. The user has selected a time, and needs to give an email\n// 3. The user has set up the session, and has the option to reschedule or cancel\n\n// We're going to hit the API to pull back schedule details for this mission.\n// We're going to BOTH ask for available times and for the user's current session status.\nfunction PublicSchedule(props) {\n\n const [selectedAppointmentId, setSelectedAppointmentId] = useState(null);\n const [selectedDate, setSelectedDate] = useState(\"\");\n const [selectedTime, setSelectedTime] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [name, setName] = useState(\"\");\n\n\n const [timezone, setTimezone] = useState(\"\");\n const [meetingUrl, setMeetingUrl] = useState(\"\");\n const [startTime, setStartTime] = useState(\"\");\n const [joinButtonActive, setJoinButtonActive] = useState(false);\n const [videoRequired, setVideoRequired] = useState(false);\n const [appointmentList, setAppointmentList] = useState({});\n\n const [availabilityLoaded, setAvailabilityLoaded] = useState(false);\n const [pageStatus, setPageStatus] = useState(\"loading\");\n const [rescheduleClicked, setRescheduleClicked] = useState(false);\n\n\n const navigate = useNavigate();\n let params = useParams()\n const missionId = params.missionId;\n const alert = useAlert()\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n useEffect(() => {\n setTimezone(Intl.DateTimeFormat().resolvedOptions().timeZone)\n\n // Get back the current status here.\n // Includes: whether anything has been scheduled. If so, time and email. \n // If not, the available times.\n async function GetSessionStatus() {\n const sessionData = await ScheduleAPI.getPublicScheduleStatus(missionId, Intl.DateTimeFormat().resolvedOptions().timeZone, navigate)\n if (sessionData.success) {\n setAvailabilityLoaded(true);\n setAppointmentList(sessionData.appointment_list);\n setVideoRequired(sessionData.video_required);\n setTimezone(sessionData.timezone)\n setEmail(sessionData.email)\n setName(sessionData.name)\n\n if (sessionData.scheduled == true) {\n setPageStatus(\"scheduled\")\n const first_event = sessionData.upcoming_event\n setSelectedDate(new Date(first_event.start_time).toLocaleDateString('en-us', { weekday: \"long\", month: \"long\", day: \"numeric\" }))\n setSelectedTime(new Date(first_event.start_time).toLocaleTimeString('en-us', { hour: \"numeric\", minute: \"numeric\", hour12: true }))\n setMeetingUrl(sessionData.meeting_url)\n setStartTime(first_event.start_time)\n\n\n } else {\n setPageStatus(\"unscheduled\")\n }\n }\n }\n\n GetSessionStatus()\n }, []);\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n function setSelectedAppointment(appointmentId, newSelectedDate, newSelectedTime) {\n setSelectedAppointmentId(appointmentId)\n setSelectedDate(newSelectedDate)\n setSelectedTime(newSelectedTime)\n setRescheduleClicked(false)\n setPageStatus(\"appointmentSelected\")\n }\n\n function onCancel() {\n \n async function CancelSession() {\n const cancelData = await ScheduleAPI.cancelUpcomingEvent(missionId, navigate)\n\n if (cancelData.success) {\n setPageStatus(\"unscheduled\")\n alert.show(\"Session Canceled\", { type: 'success' })\n\n } else {\n alert.show(\"There was an error cancelling your session. Please try again.\", { type: 'error' })\n }\n }\n\n CancelSession()\n }\n\n function onReschedule() {\n setRescheduleClicked(true)\n setPageStatus(\"unscheduled\")\n }\n\n function cancelReschedule() {\n setRescheduleClicked(false)\n setPageStatus(\"scheduled\")\n }\n\n function SwitchComponentByPageStatus() {\n if (pageStatus == \"loading\") {\n return (\n \n )\n } else if (pageStatus == \"unscheduled\") {\n if (Object.keys(appointmentList).length > 0) {\n return (\n \n )\n } else {\n return (\n \n )\n }\n } else if (pageStatus == \"scheduled\") {\n return (\n \n )\n }\n }\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Rendering ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n return (\n <>\n \n { availabilityLoaded ? \n : \n \n }\n \n )\n\n}\n\nexport default PublicSchedule;","import React, { useState, useEffect } from \"react\";\nimport { MissionDetailsHighlight, VertSpacer } from \"../../overview_components/CommonOverviewComponents\";\n\n\nfunction PublicRejected(props) {\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n\n return (\n <>\n \n Unfortunately, you are not the target audience for this mission. Thanks for your interest in giving feedback.\n \n \n \n )\n\n}\n\nexport default PublicRejected;","import React, { useState, useEffect } from \"react\";\nimport { Link, Outlet, useNavigate, useOutletContext, useParams } from \"react-router-dom\";\nimport FullPageBackground from \"./standard_components/FullPageBackground\";\nimport InfoIcon from '../../../assets/images/mission_detail_icons/blue_info_icon.svg';\nimport ClockIcon from '../../../assets/images/mission_detail_icons/blue_clock_icon.svg';\nimport DollarIcon from '../../../assets/images/mission_detail_icons/blue_dollar_icon.svg';\nimport { MissionDetailsIconComponent, MissionDetailsIconRow, MissionDetailsHeader, MissionDetailsTitle } from \"./overview_components/CommonOverviewComponents\";\nimport { Route, Routes } from \"react-router-dom\";\nimport { useAccount } from \"wagmi\";\nimport LoadingIcon from \"./standard_components/LoadingIcon\";\n\n\n// Pages\nimport PMOverview from \"./pages/landing_page/PMOverview\";\nimport PublicScreener from \"./pages/screener/PublicScreener\";\nimport PublicSurvey from \"./pages/survey/PublicSurvey\";\nimport PublicCashOut from \"./pages/complete/PublicCashOut\";\nimport PublicComplete from \"./pages/complete/PublicComplete\";\nimport PublicSchedule from \"./pages/schedule/PublicSchedule\";\nimport PublicRejected from \"./pages/rejected/PublicRejected\";\n\n\n// API Calls\nimport SessionAPI from \"./api/api_calls/SessionAPI\";\nimport PublicMissionAPI from \"./api/api_calls/PublicMissionAPI\";\n\n\n\n\nfunction PublicMission(props) {\n const [missionName, setMissionName] = useState(\"\")\n const [companyName, setCompanyName] = useState(\"\")\n const [hasScreener, setHasScreener] = useState(false)\n const [timeEstimate, setTimeEstimate] = useState(\"\")\n const [rewardAmount, setRewardAmount] = useState(\"\")\n const [missionType, setMissionType] = useState(\"\")\n const [missionStatus, setMissionStatus] = useState(\"\")\n const [nextPath, setNextPath] = useState(\"\")\n const [missionDescription, setMissionDescription] = useState(\"\")\n const [walletRequirements, setWalletRequirements] = useState([])\n const { address, isConnecting, isConnected, isDisconnected } = useAccount();\n\n const [missionLoading, setMissionLoading] = useState(true)\n const [checkPageLoading, setCheckPageLoading] = useState(true)\n\n\n let params = useParams()\n const missionId = params.missionId;\n const navigate = useNavigate();\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- UseEffects ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n useEffect(() => {\n\n // Get the data for hte mission that will persist throughout.\n async function GetMissionData() {\n const missionData = await PublicMissionAPI.getMission(missionId, navigate)\n if (missionData.success) {\n setMissionName(missionData.mission_name)\n setCompanyName(missionData.company_name)\n setHasScreener(missionData.has_screener)\n setTimeEstimate(missionData.time_estimate)\n setRewardAmount(missionData.reward_amount)\n setMissionType(missionData.mission_type)\n setMissionStatus(missionData.mission_status)\n setMissionDescription(missionData.mission_description)\n setNextPath(missionData.next_path)\n setWalletRequirements(missionData.wallet_requirements)\n\n setMissionLoading(false)\n }\n }\n\n // Single call to check the initial page the user has come to. \n // If the user \n async function CheckInitialPage() {\n const pageCheckResult = await SessionAPI.checkInitialPage(window.location.href, missionId, navigate)\n setCheckPageLoading(false)\n // Redirects are handled within the API call itself.\n }\n\n GetMissionData()\n CheckInitialPage()\n }, [])\n\n useEffect(() => {\n\n async function DestroySession() {\n const sessionDestroyResult = await SessionAPI.destroySession(missionId, navigate)\n\n if (sessionDestroyResult.success) {\n // Redirect to the next page\n navigate(sessionDestroyResult.next_path)\n // window.location.assign(sessionDestroyResult.full_path)\n }\n }\n\n // Validate that the user is connected to the wallet.\n // First check whether they are in the process of connecting, then check if they are connected.\n if (!isConnecting && !address) {\n // Log them out\n // Tell Rails to reset the session. \n // Redirect them to this page.\n DestroySession()\n\n }\n\n }, [isConnecting, isConnected, isDisconnected, address])\n\n\n // ----------------------------------------\n // ----------------------------------------\n // --------------- Helpers ----------------\n // ----------------------------------------\n // ----------------------------------------\n\n\n return (\n <>\n \n \n \n \n {checkPageLoading || missionLoading ? :\n <>\n \n \n \n {hasScreener ? : <>}\n {timeEstimate != \"null\" ? : <>}\n {rewardAmount > 0 ? : <>}\n \n \n \n } />\n } />\n } />\n } />\n {/* } /> */}\n 0} />} />\n } />\n\n \n \n }\n \n \n \n )\n\n}\n\nfunction SectionTitle(props) {\n return (\n
\n {props.title}\n
\n )\n}\n\nfunction FullPageContainer(props) {\n return (\n
\n {props.children}\n
\n )\n}\n\nfunction MissionDetailsCard(props) {\n return (\n
\n
\n
\n {props.children}\n
\n
\n
\n )\n}\n\nexport default PublicMission;","import React, { useEffect } from \"react\";\nimport { Link, Outlet } from \"react-router-dom\";\nimport { ConnectButton } from '@rainbow-me/rainbowkit';\n\n\n\nfunction HeaderPublic(props) {\n //Use effect that sets body, html background color to #0c0c0c\n\n useEffect(() => {\n document.body.style.backgroundColor = \"#0c0c0c\";\n }, []);\n\n // const toRoute = (props.logoRoute == \"homepage\") ? \"https://despark.io\" : \"/signin\";\n\n return (\n <>\n
\n
\n
\n
\n \n despark\n \n
\n
\n \n
\n
\n
\n
\n \n \n )\n\n}\n\nexport default HeaderPublic","import React from \"react\";\nimport PulseLoader from \"react-spinners/PulseLoader\";\n\nfunction LoadingIcon() {\n return (\n
\n
\n
\n \n
\n
\n Loading...\n
\n
\n
\n )\n}\n\nexport default LoadingIcon;","import React, { createContext } from \"react\";\n\nexport const UserContext = createContext({});","\n\nconst apiConfig = {\n // Set the base URL for your API\n apiUrl: '/',\n};\n\nexport { apiConfig };\n","// import usenavigate\nimport { apiConfig } from './apiConfig';\n\n\n\n// Helper function to add common headers to the API request\nexport const addCommonHeaders = (headers = {}) => {\n // const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n const commonHeaders = {\n 'Content-Type': 'application/json',\n \"X-CSRF-Token\": getCSRFToken(),\n // Add any other common headers here\n };\n\n return {\n ...commonHeaders,\n ...headers,\n };\n};\n\n\n\nexport async function handleResponse(response, handleRedirect) {\n\n\n // RULES:\n // Always retrun success: true if the response is good\n // Always return success: false otherwise; unless we navigate from here.\n\n if (response.status === 200 || response.status === 201) { //ok or created\n const data = await response.json();\n data[\"success\"] = true\n return data;\n\n } else if (response.status === 204) { // no content\n // For successful POST or PUT requests without any response body\n return { success: true };\n\n } else if (response.status === 302) { // 302 Found - Temporary Redirect\n // For redirects, we return the redirect path\n // In the future, allow components to pass in a callback function \n // to handle the redirects\n const data = await response.json();\n\n if (data.redirect_path) {\n handleRedirect(data.redirect_path)\n return {}\n } else {\n throw new Error('Redirect: Redirect path not found.');\n }\n\n } else if (response.status === 400) {\n // Bad Request\n const errorData = await response.json();\n throw new Error(`Bad Request: ${errorData.message || 'Unknown error'}`);\n\n } else if (response.status === 401) {\n // Unauthorized\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.indexOf(\"application/json\") !== -1) {\n const errorData = await response.json();\n const message = `Unauthorized: ${errorData.message || 'Unknown error'}`\n errorData.success = false\n errorData.error = message\n return errorData\n } else {\n const errorMessage = await response.text();\n throw new Error(`${errorMessage || 'Unknown error. Please try again later.'}`);\n }\n } else if (response.status === 403) {\n // Forbidden\n throw new Error('Forbidden: You do not have permission to access this resource.');\n } else if (response.status === 404) {\n // Not Found\n throw new Error('Not Found: The requested resource was not found.');\n } else if (response.status === 422) {\n // Unprocessable Entity\n const errorData = await response.json();\n const errorMessages = CleanUpErrors(errorData.errors)\n throw new Error(`Unprocessable Entity: ${errorMessages || 'Unknown error'}`);\n } else if (response.status === 500) {\n // Internal Server Error\n throw new Error('Internal Server Error: Something went wrong on the server.');\n } else {\n throw new Error(`Request failed with status ${response.status}. Please contact info@despark.io`);\n }\n};\n\nexport const handleErrors = (error) => {\n console.log('API Error:', error);\n return { success: false, error: error.message };\n};\n\n// ----------------------------------\n// ----------------------------------\n// -------- Helper Functions --------\n// ----------------------------------\n// ----------------------------------\n\n\n// Clean up 422 errors\nfunction CleanUpErrors(errors) {\n if (errors) {\n let failureReasons = \"\"\n if (errors.constructor === Object) {\n failureReasons = CleanUpMultipleErrors(errors)\n } else {\n failureReasons = errors\n }\n return failureReasons\n } else {\n return \"Unable to complete request. Please try again later. If this issue persists, contact us at info@despark.io\"\n }\n}\n\nfunction CleanUpMultipleErrors(errors) {\n\n var errorString = \"\";\n Object.keys(errors).forEach(function (key) {\n const objectName = key == \"email\" ? \"Email\" : (key == \"password\" ? \"Password\" : (key == \"password_confirmation\" ? \"Password Confirmation\" : key))\n errorString += objectName + \" \" + errors[key] + \"\\n\";\n });\n return errorString\n}\n\nfunction getCSRFToken() {\n const cookies = document.cookie;\n const splitCookies = cookies.split('; ');\n const desparkToken = splitCookies.find(cookie => cookie.startsWith(\"_despark_token=\"))\n return desparkToken ? desparkToken.split('=')[1] : null\n}\n\n","import { apiConfig } from '../apiConfig';\nimport { addCommonHeaders, handleResponse, handleErrors } from '../apiUtils';\n\nexport default {\n\n create: async (email, password, log_hash = null, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/signin\";\n\n\n const body = JSON.stringify({\n user: {\n email,\n password\n },\n sign_in_log: log_hash\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n createFromWallet: async (wallet_address, signature_data, log_hash = null, handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/signin\";\n\n const body = JSON.stringify({\n signature: {\n signature_data: signature_data,\n address: wallet_address\n },\n sign_in_log: log_hash\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: addCommonHeaders(),\n body: body,\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n destroy: async (handleRedirect = null) => {\n const url = apiConfig.apiUrl + \"users/signout\";\n\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n checkUser: async (handleRedirect = null) => {\n // This doesn't use the api/v1 format. \n const url = \"/users/checkuser\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n userInfo: async (handleRedirect = null) => {\n // This doesn't use the api/v1 format. \n const url = \"/users/user_info\";\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: addCommonHeaders(),\n credentials: 'include',\n })\n return await handleResponse(response, handleRedirect);\n\n } catch (error) {\n return handleErrors(error);\n }\n },\n\n}","import React, { useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport InfoIcon from '../../../../../assets/images/info_icon.svg';\n\n\nfunction FormField(props) {\n const margin = props.marginClass || \"\";\n if (props.tooltip) {\n return (\n
\n \n \n props.onChange(event)} className=\"form-control style-black\" placeholder={props.placeholder} type={props.type} tooltip=\"true\" autoComplete={props.autoComplete} />\n
\n )\n } else {\n return (\n
\n \n props.onChange(event)} className=\"form-control style-black\" placeholder={props.placeholder} type={props.type} autoComplete={props.autoComplete} />\n
\n )\n }\n}\n\nfunction TextEntryQuestion(props) {\n return (\n
\n \n props.onChange(event.target.value)} className=\"form-control\" placeholder={props.placeholder} type={props.type} />\n
\n )\n}\n\nfunction MultipleChoiceQuestion(props) {\n return (\n
\n \n
\n {props.children}\n
\n
\n )\n}\n\n\nfunction RadioOption(props) {\n const classes = \"form-check-input custom-radio-color\"\n\n\n return (\n
\n props.onChange(props.value)}\n />\n \n
\n )\n}\n\nfunction CheckboxOption(props) {\n const classes = \"form-check-input custom-checkbox-color\"\n\n return (\n
\n props.onChange(event.target.checked)}\n />\n \n
\n )\n}\n\nfunction DropdownQuestion(props) {\n const placeholderSelection = props.placeholder && \n const marginClass = props.marginClass || \"\";\n return (\n
\n {props.questionText ? : <>}\n \n
\n )\n}\n\nfunction DropdownOption(props) {\n return (\n \n )\n}\n\n\n// A 100% width button with a purple gradient background, white text, and no border\nfunction PrimaryButton(props) {\n const marginClass = props.marginClass || \"\";\n const cssClass = \"btn btn-purple-gradient-color text-white w-100 \" + marginClass\n\n return (\n \n )\n}\n\n// A minimally sized button with a purple gradient background, white text, and no border\nfunction PrimaryButtonSmall(props) {\n const marginClass = props.marginClass || \"\";\n const cssClass = \"btn btn-small btn-purple-gradient-color min-width-content text-white \" + marginClass\n\n return (\n \n )\n}\n\n// A 100% width button with a gray gradient background, and gradient border white text, and no border\nfunction SecondaryButton(props) {\n const marginClass = props.marginClass || \"\";\n const cssClass = !props.isDisabled ? (\"secondary-border-outer w-100 \" + marginClass) : (\"secondary-border-outer disabled w-100 \" + marginClass)\n\n return (\n
\n \n
\n )\n\n}\n\n// A minimally sized button with a gray gradient background, and gradient border white text, and no border\nfunction SecondaryButtonSmall(props) {\n const marginClass = props.marginClass || \"\";\n const shrinkClass = !props.shrink ? \" flex-shrink-0\" : \"\"; // If not shrink, then add in flex-shrink-0\n const disabledClass = props.isDisabled ? \" disabled\" : \"\";\n const cssClass = \"secondary-border-outer border-small \" + marginClass + shrinkClass + disabledClass\n\n return (\n
\n \n
\n )\n}\n\nfunction TertiaryButton(props) {\n const marginClass = props.marginClass || \"\";\n const cssClass = \"btn btn-transparent-color text-mid-gray \" + marginClass\n\n return (\n \n )\n}\n\n// A minimally sized button with a transparent backgroudn and gray border and text\nfunction TertiaryButtonSmall(props) {\n const marginClass = props.marginClass || \"\";\n const cssClass = \"btn btn-small btn-transparent-color text-mid-gray \" + marginClass\n\n return (\n \n )\n}\n\nfunction OrSeparater() {\n return (\n
\n
\n
\n
\n
or
\n
\n
\n
\n
\n )\n}\n\nfunction PreAuthPageContainer({ children }) {\n return (\n
\n
\n {children}\n
\n
\n )\n}\n\nfunction LogInContainer({ children }) {\n return (\n
\n
{/* This sets the width and margins */}\n {children}\n
\n
\n )\n\n}\n\nfunction LogInCard({ children, align = 'center', borderClass = '' }) {\n const alignClass = align === 'center' ? 'align-items-center' : 'align-items-start'\n const borderClassFinal = borderClass === '' ? 'gray-outline' : borderClass\n return (\n
\n
\n {children}\n
\n
\n )\n\n}\n\nfunction LogInCardBody({ children }) {\n return (\n
\n {children}\n
\n )\n\n}\n\nfunction LogInForm({ children, onSubmit }) {\n return (\n
onSubmit(event)} className=\"form bg-transparent-color no-outline text-white w-100 mt-5\">\n {children}\n
\n )\n}\n\nfunction LogInCardTitle({ title }) {\n return (\n

{title}

\n )\n}\n\nfunction ForgotPasswordLink() {\n\n return (\n
\n Forgot Password?\n
\n )\n}\n\nfunction SignUpTertiary({ preLinkText = \"Don't have an account? \", path = \"/signup\", linkText = \"Sign Up\" }) {\n return (\n
\n
{preLinkText} {linkText}
\n
\n )\n}\n\nfunction ErrorMessage({ errors }) {\n // Check if it's empty, vs. a string, vs. an array\n if (!errors) {\n // Empty or Null.\n return <>\n } else if (errors.constructor === String && errors.length > 0) {\n return (\n
\n
\n {errors}\n
\n
\n )\n } else if (errors.constructor === Array && errors.length > 0) {\n return (\n
\n
\n {/* Okay, then we map each error to a new line */}\n {errors.map((error, index) => {\n return
{error}
\n })}\n
\n
\n )\n\n } else {\n return <>\n }\n}\n\nfunction NoticeMessage({ notices }) {\n // Check if it's empty, vs. a string, vs. an array\n if (!notices) {\n // Empty or Null.\n return <>\n } else if (notices.constructor === String) {\n return (\n
\n
\n {notices}\n
\n
\n )\n } else if (notices.constructor === Array) {\n return (\n
\n
\n {/* Okay, then we map each error to a new line */}\n {notices.map((notice, index) => {\n return
{notice}
\n })}\n
\n
\n )\n }\n}\n\nfunction TurnBackgroundBlackComponent() {\n return (\n
\n )\n}\n\n\nexport {\n FormField, TextEntryQuestion, MultipleChoiceQuestion, RadioOption, CheckboxOption, DropdownQuestion, DropdownOption, PrimaryButton, PrimaryButtonSmall,\n SecondaryButton, SecondaryButtonSmall, TertiaryButton, TertiaryButtonSmall,\n OrSeparater, LogInCard, LogInCardTitle, ErrorMessage, NoticeMessage, TurnBackgroundBlackComponent, LogInContainer, LogInCardBody, LogInForm, ForgotPasswordLink, SignUpTertiary, PreAuthPageContainer\n}","import React from 'react'\n\nconst alertStyle = {\n backgroundColor: '#141414',\n color: '#FEFEFE',\n borderRadius: '10px',\n border: '1px solid #5A5A5A',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n boxShadow: '0 4px 4px 0 rgba(0,0,0,0.25)', /* offset-x | offset-y | blur-radius | spread-radius | color */\n // width: '300px',\n boxSizing: 'border-box',\n fontSize: '.9rem',\n position: 'relative'\n}\n\nconst contentWrapperStyle = {\n padding: '16px',\n display: 'flex',\n width: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n columnGap: '16px'\n}\n\nconst iconPlaceholderStyle = {\n display: 'flex',\n justifyContent: 'center',\n}\n\nconst messageStyle = {\n flex: 3,\n textAlign: 'left',\n width: '100%'\n}\n\nconst closeButtonStyle = {\n // minWidth: '50px',\n height: '100%',\n // position: 'absolute',\n // borderRadius: '0 10px 10px 0',\n cursor: 'pointer',\n // top: 0,\n // right: 0,\n // backgroundColor: '#141414',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n}\n\nconst getIcon = type => {\n switch (type) {\n case 'error':\n return (\n \n \n \n )\n case 'info':\n return (\n \n \n \n ) \n case 'success':\n return (\n \n \n \n )\n }\n}\n\nconst CustomAlertTemplate = ({ message, options, style, close }) => (\n
\n
\n
\n
\n {getIcon(options.type)}\n
\n
\n
\n {message}\n
\n
\n \n \n \n \n
\n
\n
\n)\n\nexport default CustomAlertTemplate","import { Web3 } from \"web3\";\n\nfunction IsValidEVMAddress(adr) {\n try {\n const web3 = new Web3()\n web3.utils.toChecksumAddress(adr)\n return true\n } catch (e) {\n return false\n }\n}\n\nexport default IsValidEVMAddress;","import React, { useEffect, useContext } from \"react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\n\n\n\nfunction PageNotFound({\n user,\n}) {\n const navigate = useNavigate()\n\n\n\n useEffect(() => {\n if (!user || Object.keys(user).length === 0) {\n window.location.href = \"https://app.despark.io/app/signin\"\n } else {\n navigate(user.auth_redirect)\n }\n }, []);\n\n return <>\n};\n\nexport default PageNotFound;\n","import React, { useContext } from \"react\";\nimport { UserContext } from \"../../user_portal/UserContext\";\nimport { Outlet, useNavigate, Navigate } from \"react-router-dom\";\nimport LoadingIcon from \"../../public_portal/standard_components/LoadingIcon\";\n\n// Api Calls\nimport sessionAPI from \"../../user_portal/preauth_portal/api/api_calls/sessionAPI\";\n\n// Expected - that user.authStatus is set to \"user\" and user.onboarding_status is set to \"complete\"\nfunction ProtectedRoute({\n children\n}) {\n return (\n \n {children ? children : }\n \n )\n};\n\nfunction PreAuthRoute({\n children\n}) {\n return (\n \n {children ? children : }\n \n )\n\n};\n\n// Not used today. \nfunction UnconfirmedUserRoute({\n children\n}) {\n return (\n \n {children ? children : }\n \n )\n};\n\nfunction ConfirmedNoProfileRoute({\n children\n}) {\n return (\n \n {children ? children : }\n \n )\n};\n\n// Public route - auth doesn't actually matter. \n// Hypothetically, a user could be logged in and connected and go here. \n// That should be fine. \nfunction PublicRoute({\n children\n}) {\n return children ? children : ;\n};\n\n\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n\nfunction AuthRoute({\n expectedUserStatus,\n expectedOnboardingStatus\n}) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n const navigate = useNavigate()\n\n if (Object.keys(user).length === 0) {\n return \n } else {\n if (user.auth_status == expectedUserStatus && user.onboarding_status == expectedOnboardingStatus) {\n return ;\n } else {\n return \n }\n }\n};\n\n\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n// -------------- HELPER FUNCTIONS----------------\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n// -----------------------------------------------\n\n\n// Check the user status against the expected status.\n// Call check user api call.\n// Compare current status to expected status.\n// If there is no user, redirect to redirectPath.\n// async function CheckUser(expectedStatus, userDetails, navigate) {\n// const response = await sessionAPI.checkUser(navigate)\n// const data = response.data\n\n// let currentStatus = \"\"\n// let redirectPath = \"\"\n// if (response.success) {\n// // There is a user! We were wrong. Just Set the User and carry on. \n// const userEmail = data.email\n// currentStatus = data.onboarding_status\n// redirectPath = data.onboarding_redirect\n\n// userDetails.setUser(userEmail)\n// userDetails.setUserStatus(currentStatus)\n// localStorage.setItem(\"user\", JSON.stringify(userEmail));\n// localStorage.setItem(\"userStatus\", JSON.stringify(currentStatus));\n\n// } else {\n// // There is no user. \n// currentStatus = \"\"\n// redirectPath = \"/signin\"\n\n// userDetails.setUser(\"\")\n// userDetails.setUserStatus(\"\")\n\n// localStorage.removeItem(\"user\");\n// localStorage.removeItem(\"userStatus\");\n// }\n\n// // Check if correct status. If not, redirect.\n// if (currentStatus == expectedStatus) {\n// // All is good.\n// return\n// } else {\n// // Not good. Redirect.\n// navigate(redirectPath)\n// return\n// }\n\n// }\n\n// -----------------------------------------------\n// -----------------------------------------------\n// --------- ADMIN HELPER FUNCTIONS --------------\n// -----------------------------------------------\n// -----------------------------------------------\n\n\nfunction AdminRoute({\n userDetails,\n children\n}) {\n AdminAuthRoute({ userDetails: userDetails, children: children })\n return children ? children : ;\n};\n\n\nfunction AdminAuthRoute({\n userDetails,\n children\n}) {\n // Always check for admin\n const navigate = useNavigate()\n CheckAdmin(userDetails, navigate)\n};\n\n\n\nasync function CheckAdmin(userDetails, navigate) {\n const { user, setUser, refreshUser } = useContext(UserContext);\n\n const response = await sessionAPI.checkUser(navigate)\n\n const redirectPath = \"/signin\"\n let admin = false\n\n\n\n if (response.success) {\n // There is a user! We were wrong. Just Set the User and carry on. \n admin = response.data.admin\n\n } else {\n if (Object.keys(user).length === 0) {\n return \n } else {\n refreshUser();\n }\n\n // Check if correct status. If not, redirect.\n if (admin) {\n // All is good.\n return true\n } else {\n // Not good. Redirect.\n navigate(redirectPath)\n return false\n }\n }\n\n}\n\n\n\nexport { ProtectedRoute, PreAuthRoute, UnconfirmedUserRoute, ConfirmedNoProfileRoute, PublicRoute, AdminRoute };\n"],"names":["props","React","className","MissionDetailsHeader","children","MissionDetailsTitle","title","MissionDetailsIconRow","MissionDetailsIconComponent","MissionDetailsIcon","icon","MissionDetailsIconText","text","src","MissionDetailsHighlight","MissionDetailsConnectAndVerifyTextAndTooltip","TooltipIcon","VertSpacer","WalletRequirementsEmpty","company","WalletRequirementsFull","walletRequirements","requirements","map","requirement","index","WalletRequirement","status","key","classColor","GreenCircleIcon","GrayCircleIcon","RedCircleIcon","length","apiConfig","addCommonHeaders","headers","getCSRFToken","async","handleResponse","response","handleRedirect","data","json","success","redirect_path","Error","errorData","message","window","location","href","split","slice","join","errorMessages","errors","failureReasons","constructor","Object","errorString","keys","forEach","CleanUpMultipleErrors","CleanUpErrors","error","handleErrors","console","log","desparkToken","document","cookie","find","startsWith","wallet_address","mission_id","url","body","JSON","stringify","fetch","method","credentials","result","pathname","lastUrlSlug","signature_data","wallet","address","signature","returnData","ClosedMissionText","ButtonOrLoadingMessage","signatureLoading","SecondaryButtonSmall","buttonType","marginClass","PrimaryButtonSmall","onClick","params","useParams","navigate","useNavigate","alert","useAlert","missionId","useAccount","isConnected","setIsConnected","useState","loggedIn","setLoggedIn","meetsRequirements","setMeetsRequirements","requirementsLoading","setRequirementsLoading","showNextButton","setShowNextButton","messageToSign","setMessageToSign","isError","isLoading","isSuccess","signMessage","useSignMessage","useEffect","querySelectorAll","tooltipTriggerEl","bootstrap","Tooltip","SessionAPI","signature_message","GetMessage","session","show","type","CreateSession","PublicMissionAPI","setWalletRequirements","wallet_requirements","meets_requirements","CheckWalletRequirements","SecondButton","nextPath","description","missionStatus","WalletRequirements","companyName","ConnectButton","showBalance","chainStatus","surveyType","surveyId","survey_response","survey_id","SwitchCompleteAndFailedScreener","lastRoute","failedLoading","screenerFailed","screenerComplete","id","screenerLoaded","Survey","model","screener","LoadingIcon","setScreener","setScreenerComplete","setFailedLoading","setScreenerFailed","setScreenerLoaded","screenerId","setScreenerId","stateRef","useRef","current","StylesManager","applyTheme","onScreenerComplete","useCallback","SurveyAPI","sender","pass","next_path","tempScreener","Model","survey","onComplete","add","GetScreener","SwitchCompleteAndFailedSurvey","surveyFailed","surveyComplete","surveyLoaded","setSurvey","setSurveyComplete","setSurveyLoaded","setSurveyFailed","setSurveyId","STORAGE_ITEM_KEY","onSurveyComplete","saveSurveyData","pageNo","currentPageNo","localStorage","setItem","surveyData","tempSurvey","onValueChanged","onCurrentPageChanged","prevData","getItem","parse","restoreSurveyData","GetSurvey","walletAddress","blockchain","cash_out","eth_address","cashOutId","CashOutForm","onSubmit","event","FormField","label","name","placeholder","onChange","setBlockchain","setWalletAddress","confirmAddress","setConfirmAddress","target","value","preventDefault","IsValidEVMAddress","CashOutAPI","setRefreshCashOuts","refreshCashOuts","CashOutRequest","token","querySelector","content","myResponse","ok","responseBody","userEmail","user_email","failureReason","errorArray","objectName","push","failureReasonArray","email","setEmail","password","setPassword","passwordConfirmation","setPasswordConfirmation","postSignUpPath","origin","LogInCard","borderClass","SignUpApiCall","reason","SignUpUser","user","password_confirmation","autoComplete","PrimaryButton","StatusLink","cashOut","transaction_link","CashOutRows","rows","cashOutList","usd_amount_formatted","CashOutHeader","CashOutTableHelper","cashOutLoaded","completionNotice","setCompletionNotice","setCashOutList","setCashOutLoaded","cashOutCount","setCashOutCount","availableBalance","setAvailableBalance","useLocation","CashOutSection","hasReward","PublicCashOutTable","PublicSignUpCard","PublicCashOut","state","receivedReward","cashOutData","cash_outs","available_balance","GetCashOuts","appointmentList","setAppointmentList","timeOptionSelectHelper","setTimeOptionSelectHelper","selectedAppointmentId","setSelectedAppointmentId","selectedDate","setSelectedDate","selectedTime","setSelectedTime","dateList","days","day","date","date_text","DropdownOption","timeList","appointments","appointment","time","start_time_text","getTimeList","buttonText","submitting","rescheduleClicked","BackButton","cancelReschedule","timezone","DropdownQuestion","defaultValue","mission_event_availability_id","ariaLabel","isDisabled","onSelect","setName","ChangeButton","setSelectingEmail","disabled","missionEventAvailabilityId","selectingEmail","setSubmitting","input_email","input_name","appointmentId","updatedAppointmentId","finalEmail","finalName","finalAppointmentId","ScheduleAPI","submitAppointment","timeEstimate","videoRequired","EmailSelect","DateTimeSelects","fiveMinutes","timeDifferenceFromNowToStart","Date","start_time","timeToWait","joinButtonActive","setJoinButtonActive","RescheduleButton","reschedule","CancelButton","cancel","buttonTimer","setTimeout","clearTimeout","open","meetingUrl","setTimezone","setMeetingUrl","startTime","setStartTime","setVideoRequired","availabilityLoaded","setAvailabilityLoaded","pageStatus","setPageStatus","setRescheduleClicked","setSelectedAppointment","newSelectedDate","newSelectedTime","onCancel","CancelSession","onReschedule","SwitchComponentByPageStatus","PublicSimpleScheduler","PublicSchedulePlaceholder","PublicScheduledSessionList","Intl","DateTimeFormat","resolvedOptions","timeZone","sessionData","appointment_list","video_required","scheduled","first_event","upcoming_event","toLocaleDateString","weekday","month","toLocaleTimeString","hour","minute","hour12","meeting_url","GetSessionStatus","SectionTitle","FullPageContainer","MissionDetailsCard","missionName","setMissionName","setCompanyName","hasScreener","setHasScreener","setTimeEstimate","rewardAmount","setRewardAmount","missionType","setMissionType","setMissionStatus","setNextPath","missionDescription","setMissionDescription","isConnecting","isDisconnected","missionLoading","setMissionLoading","checkPageLoading","setCheckPageLoading","missionData","mission_name","company_name","has_screener","time_estimate","reward_amount","mission_type","mission_status","mission_description","GetMissionData","CheckInitialPage","sessionDestroyResult","DestroySession","FullPageBackground","InfoIcon","ClockIcon","DollarIcon","Routes","Route","path","element","PMOverview","PublicScreener","PublicSchedule","PublicSurvey","PublicComplete","PublicRejected","style","backgroundColor","Outlet","PulseLoader","color","size","UserContext","createContext","apiUrl","contentType","get","indexOf","errorMessage","create","log_hash","sign_in_log","createFromWallet","destroy","checkUser","userInfo","margin","tooltip","required","TextEntryQuestion","MultipleChoiceQuestion","questionText","RadioOption","htmlFor","CheckboxOption","checked","placeholderSelection","cssClass","SecondaryButton","shrink","TertiaryButtonSmall","OrSeparater","PreAuthPageContainer","LogInContainer","align","alignClass","borderClassFinal","LogInCardBody","LogInForm","LogInCardTitle","ForgotPasswordLink","Link","to","SignUpTertiary","preLinkText","linkText","ErrorMessage","String","Array","NoticeMessage","notices","notice","TurnBackgroundBlackComponent","alertStyle","borderRadius","border","display","justifyContent","alignItems","boxShadow","boxSizing","fontSize","position","contentWrapperStyle","padding","width","flexDirection","columnGap","iconPlaceholderStyle","messageStyle","flex","textAlign","closeButtonStyle","height","cursor","CustomAlertTemplate","options","close","xmlns","viewBox","fill","d","getIcon","adr","Web3","utils","toChecksumAddress","e","auth_redirect","ProtectedRoute","AuthRoute","expectedUserStatus","expectedOnboardingStatus","PreAuthRoute","ConfirmedNoProfileRoute","PublicRoute","setUser","refreshUser","useContext","auth_status","onboarding_status","Navigate"],"sourceRoot":""}