{"version":3,"file":"js/chunk-common.30212050.js","mappings":"oOAUA,MAAMA,EAAuB,KAE7B,KACE,UAAMC,GACJ,MAAMC,QAAcC,KAAKD,QACzB,OAAGA,GAASA,EAAME,MAChBD,KAAKE,uBACQF,KAAKG,eAAeJ,IAE5B,IACR,EACDG,cAAAA,GACE,MAAME,EAAeC,EAAAA,EAAMC,QAAQ,qBAChCF,GACDG,aAAaH,GAEf,MAAMI,EAAaC,YAAY,KAC7BT,KAAKU,SAAL,GACCb,GACHQ,EAAAA,EAAMM,OAAO,oBAAqBH,EACnC,EACD,oBAAML,CAAeJ,GACnB,IAAIA,EAAME,KAAM,OAAO,KACvB,MAAMW,QAAoBC,EAAAA,EAASC,UAMnC,MAL+B,kBAA5BF,EAAYG,KAAKC,QAA4BC,QAAQC,MAAM,6BAC9DL,EAAAA,EAASM,WAAWpB,EAAME,KAAKmB,IAC5BC,EAAAA,GAAQC,WAAavB,EAAME,KAAKqB,UACjCD,EAAAA,GAAAA,eAAuBtB,EAAME,KAAKqB,UAE7BvB,CACR,EACD,aAAMW,GACJ,MAAMX,QAAcC,KAAKD,QACzB,OAAGA,GAASA,EAAME,MAChBD,KAAKE,iBACEH,IAEPC,KAAKuB,gBACE,KAEV,EACD,WAAMxB,GACJ,IACE,MAAMyB,QAAkBC,EAAAA,IAAIC,IAAI,oBAChC,OAAyB,MAArBF,EAAUR,QAAkBQ,EAAUT,KAAKY,KAC1C3B,KAAK4B,eAAeJ,EAAUR,QAC1BQ,EAAUT,MAGjBE,QAAQY,MAAM,4BAA6BL,IAC3CM,EAAAA,EAAAA,aAAY,CAAEC,SAAU,CACNf,OAAQQ,EAAUR,OAClBgB,OAAQ,CACNC,SAASC,EAAAA,EAAAA,aACTC,IAAK,MAGTH,OAAQ,CACMC,SAASC,EAAAA,EAAAA,aACTC,IAAK,OAE5B,KAGV,CAAC,MAAOC,GAyBP,OAvByB,MAAtBA,EAAEL,SAASf,QAAmD,2BAAjCoB,EAAEL,SAAShB,KAAKsB,cAC9CC,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAMpB,EAAAA,GAAAA,EAAU,+EAChBqB,QAAS,IACTC,KAAM3C,KAAKuB,cACXqB,SAAUvB,EAAAA,GAAAA,EAAU,sBAEtBZ,YAAW,KAAQT,KAAKuB,eAAL,GAAwB,MAEb,MAAtBa,EAAEL,SAASf,QAAmD,uBAAjCoB,EAAEL,SAAShB,KAAKsB,cACrDC,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAMpB,EAAAA,GAAAA,EAAU,+EAChBqB,QAAS,IACTC,KAAM3C,KAAK6C,iBACXD,SAAUvB,EAAAA,GAAAA,EAAU,kBAEtBZ,YAAW,KAAQT,KAAK6C,kBAAL,GAA2B,QAE9CC,EAAAA,EAAAA,MACAhB,EAAAA,EAAAA,aAAYM,IAEP,IACR,CACF,EACDR,cAAAA,CAAemB,GACb,OAAQA,GACN,KAAK,IACH9B,QAAQ+B,IAAI,uBACZhD,KAAKuB,gBACL,MACF,KAAK,IACHN,QAAQ+B,IAAI,uBACZC,SAASC,KAAO,YAAahB,EAAAA,EAAAA,aAAc,4BAC3C,MACF,KAAK,IAEH,OADAjB,QAAQY,MAAM,8DACP,EACT,QAEE,OADAZ,QAAQY,MAAM,wCAAyCkB,IAChD,EAEZ,EACDF,gBAAAA,GACEI,SAASC,KAA8B,MAAtBD,SAASE,SAAoB,WAAWC,EAAAA,KAAoB,YAAalB,EAAAA,EAAAA,YAC3F,EACDX,aAAAA,GACEV,EAAAA,EAASwC,MAAM,gCACf,MAAMC,EAAiBC,SAASC,KAAO,YAAatB,EAAAA,EAAAA,aAAc,IAElEuB,EAAAA,EAAQC,IAAI,WAAY,MAAMJ,EAAgB,CAAEK,OAAQ,mBACxDb,EAAAA,EAAAA,KACAG,SAASC,KAAO,WAAWE,EAAAA,UAC5B,E,mRC5HH/B,EAAAA,GAAAA,KAAauC,EAAAA,GAeN,MAAMC,EAAa,IAIjBC,OAAOb,SAASc,KAGZ7B,EAAY,IAIhB4B,OAAOb,SAASc,KAGZC,EAAe,KAC1B,OAAQC,cACN,IAAK,aACH,MAAO,uBACT,IAAK,UACH,MAAO,0BACT,IAAK,cACH,MAAO,0BACT,QACE,MAAO,0BARX,EAYWxC,EAAMyC,IAAAA,OAAa,CAC9BjC,QAAS,WAAa4B,IACtBM,iBAAiB,EACjBC,eAAgB,SAAUpD,GACxB,OAAOA,EAAS,GACjB,IAIUc,EAAeM,IAC1B,IAAIK,EACCL,EAAEL,UAKLP,EAAAA,EAAUI,eAAeQ,EAAEL,SAASf,QACpCyB,EAAO,GAAGpB,EAAAA,GAAAA,EAAU,sCAAsCe,EAAEJ,OAAOC,WAAWG,EAAEJ,OAAOG,QAAQC,EAAEiC,eALjG7C,EAAAA,EAAUI,eAAe,KACzBa,EAAO,GAAGpB,EAAAA,GAAAA,EAAU,oCAAoCe,EAAEJ,OAAOC,WAAWG,EAAEJ,OAAOG,QAAQC,EAAEiC,aAC/F5B,GAAcpB,EAAAA,GAAAA,EAAU,0FAMxBiB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,QACPC,OACAC,QAAS,MAHX,C,sNCpEG,MAAM4B,EAAoB,SAC3BC,EAAW,KACb,OAAQN,cACR,IAAK,cACL,IAAK,UACD,MAAO,uBACX,QACI,MAAO,oBALX,EASSb,EAAkBmB,IAElBC,EAAQ,EACRC,EAAQ,EACRC,EAAS,EACTC,EAAW,EAIXC,EAAkBC,EAAAA,MAAAA,E,oDClB/B,MAAMC,GAAYb,EACZc,EAAiBjB,OAAOb,SAAS+B,UAAYF,EAAY,QAAU,IAEnEG,EAAiB,KACrB,GAAGC,MAAMC,QAAQC,UAAUC,YAAcD,UAAUC,UAAUC,OAAS,EAAG,CACvE,MAAMC,EAAcH,UAAUC,UAAU,GAAGG,QAAQ,KACnD,OAAQD,GAAe,EAAKH,UAAUC,UAAU,GAAGI,UAAU,EAAGF,GAAeH,UAAUC,UAAU,EACpG,CACD,OAAOD,UAAU9D,QAAjB,EAGIsC,EAA6B,CACjC/B,QAAQoC,CAAAA,oBAAAA,aAAAA,SAAAA,aAAAA,SAAAA,KAAYyB,WAAwC,SAA1BzB,CAAAA,oBAAAA,aAAAA,SAAAA,aAAAA,SAAAA,KAAYyB,UAC9CC,IAAKtE,EAAAA,GAAQC,UAAY2D,IACzBW,YAAa,KACbC,WAAY,GACZC,mBAAmB,EAEnBC,aAAa,EACbC,cAAc,EACdC,QAAS,CACPC,SAAU,WAAWnB,sBAAmC1D,EAAAA,GAAQC,UAAY2D,YAE9EkB,uBAAyBC,GAEhBtB,EAAY,IAAIsB,KAASA,GAIpC,K,oDC7BA,MAAMtD,EAAauD,iBACjBhG,EAAAA,EAAMM,OAAO,cACbN,EAAAA,EAAMM,OAAO,8BACbN,EAAAA,EAAMM,OAAO,eACbN,EAAAA,EAAMM,OAAO,cACbN,EAAAA,EAAMM,OAAO,yBACbN,EAAAA,EAAMM,OAAO,eACbN,EAAAA,EAAMM,OAAO,cACd,EAED,K,8FCZc,aACZ,MAAO,uCAAuC2F,QAAQ,SAAS,SAASC,GACtE,MAAMC,EAAoB,GAAhBC,KAAKC,SAAgB,EAAGC,EAAS,KAALJ,EAAWC,EAAS,EAAJA,EAAU,EAChE,OAAOG,EAAEtC,SAAS,GACnB,GACF,C,eCCD,MAAMuC,EAAS,IAAIC,UAAU,UAAWhD,EAAAA,EAAAA,cAAe,QACjDiD,EAAW,QAWXjG,EAAW,CACfkG,UAAWV,eACI7E,EAAAA,EAAU1B,OAEzBuD,MAAO,CAAC2D,EAAiBjE,EAAO,OAE9B6D,EAAOvD,MAAMN,EAAMiE,EAAnB,EAEFlG,QAASuF,UACP,IACE,MAAMvF,QAAgBW,EAAAA,IAAIC,IAAI,YAE9B,OADAuF,eAAeC,QAAQ,YAAapG,EAAQC,KAAKoG,OAC1CrG,CACR,CACD,MAAMI,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACnC,MAAO,CAAEH,KAAM,CAAEqG,eAAe,EAAOpG,OAAQ,mBAA/C,EAEFG,WAAakG,IACX,IAAIC,EAAoBL,eAAeM,QAAQ,eAC/C,GAAyB,OAAtBD,EAA4B,CAC7B,MAAME,EAAuBC,IAC7BR,eAAeC,QAAQ,cAAeM,GACtCF,EAAoBE,CACrB,CACD3G,EAAS6G,UAAUL,EAAQC,GAC3BV,EAAOe,UAAY9G,EAAS+G,cAC5BhB,EAAOiB,QAAW3G,GAAUD,QAAQC,MAAM,oBAAqBA,GAC/D0F,EAAOkB,OAAUC,GAAUzF,EAAAA,EAASC,MAAM,gBAAiBwF,GAC3DnB,EAAOoB,QAAWD,GAAUlH,EAASoH,aAAaF,EAAOV,EACnD,EAERY,YAAAA,CAAaF,EAA6DV,GACrEU,GAA0B,KAAjBA,EAAMf,QAChBnG,EAASM,WAAWkG,EAEvB,EACDK,SAAAA,CAAUL,EAAgBC,GACpBA,IACFA,EAAoBL,eAAeM,QAAQ,gBAC1CD,GACDzG,EAASqH,KAAK,CACZC,KAAM,QACN/G,GAAIkG,EACJc,QAAS,IACTC,KAAM,CAAC,aAAehB,EAAS,aAGpC,EACDO,cAAgBU,IACd,MAAMC,EAAUC,KAAKC,MAAMH,EAAQvH,MACnC,IAAI2H,EAAY,GAChB,OAAOH,EAAQJ,MACb,IAAK,QACH7F,EAAAA,EAASC,MAAM,kBACf,MACF,IAAK,OACH1B,EAASqH,KAAK,CACZC,KAAM,OACNC,QAAS,MAEX,MACF,IAAK,MACuB,MAAvBG,EAAQI,YAAkD,kCAA5BJ,EAAQK,QAAQN,SAC/CzH,EAASgI,UAAUN,EAAQO,MAE7B,MACF,IAAK,MACHJ,EAAY,gBAAgBH,EAAQO,OAAOxC,QAAQ,IAAK,KACxDhE,EAAAA,EAASC,MAAMmG,EAAWH,EAAQD,QAAQA,SAC1C,MACF,QAGErH,QAAQC,MAAM,iBAAmBqH,EAAQJ,KAAO,yBAA0BI,GAC1E,MAvBJ,EA0BFL,KAAOI,KACDA,EAAQS,MAAQ9B,eAAeM,QAAQ,eACzCe,EAAQS,KAAO9B,eAAeM,QAAQ,eACpCe,EAAQlH,IAAM6F,eAAeM,QAAQ,iBACvCe,EAAQlH,GAAK6F,eAAeM,QAAQ,gBAC/BX,EAAOsB,KAAKM,KAAKQ,UAAUV,KAEpCO,UAAYC,IACV,MAAMG,EAAcC,aAAY,KAC1BtC,EAAOuC,aAAevC,EAAOwC,OAC/BC,cAAcJ,GACdpI,EAASqH,KAAK,CACZC,KAAM,MACNW,KAAMhC,EAAWgC,EACjBV,QAAS,MAIZ,GACA,IAXH,GAeJ,O,oDCtHIkB,EAAS,WAAa,IAAIC,EAAIvJ,KAASwJ,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAEH,EAAQ,KAAEG,EAAG,QAAQ,CAACA,EAAG,MAAM,CAACE,MAAM,CAAC,MAAQL,EAAIM,cAAcH,EAAG,eAAe,CAACE,MAAM,CAAC,MAAQL,EAAIM,cAAcH,EAAG,aAAa,CAACI,GAAG,CAAC,MAAQP,EAAIQ,MAAM,MAAQR,EAAIS,QAAQ,CAAEC,OAAOC,KAAKX,EAAIY,OAAO7E,QAAUiE,EAAIa,iBAAkBV,EAAG,cAAc,CAACW,YAAY,MAAMT,MAAM,CAAC,GAAK,aAAaL,EAAIe,MAAM,GAAGZ,EAAG,WAAW,GAAGH,EAAIe,KAAKZ,EAAG,aAAa,EAAE,EACtca,EAAkB,G,WCDlB,EAAS,WAAa,IAAIhB,EAAIvJ,KAASwJ,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACW,YAAY,oBAAoB,CAACX,EAAG,aAAa,CAACE,MAAM,CAAC,IAAM,GAAG,MAAQ,GAAG,QAAU,KAAK,MAAQL,EAAI/G,MAAM,MAAsB,YAAd+G,EAAI/G,OAAqBgI,MAAM,CAACC,MAAOlB,EAAW,QAAEmB,SAAS,SAAUC,GAAMpB,EAAIqB,QAAQD,CAAG,EAAEE,WAAW,YAAY,CAACtB,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI9G,MAAM,KAAgC,oBAAnB8G,EAAIyB,WAA2BtB,EAAG,QAAQ,CAACE,MAAM,CAAC,SAAW,IAAIE,GAAG,CAAC,MAAQP,EAAI5G,OAAO,CAAC4G,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI3G,UAAU,OAAO2G,EAAIe,MAAM,IAAI,EAAE,EAC3gB,EAAkB,G,WC+BtB,EAAeW,EAAAA,WAAIC,OAAO,CACxBC,KAAM,WAENpK,IAAAA,GACE,MAAO,CACLyB,MAAO,GACPC,KAAM,GACNC,QAAS,KACTsI,WAAY,KACZpI,SAAU5C,KAAKoL,GAAG,QAClBR,SAAS,EAEZ,EAEDS,SAAU,CACRC,YAAAA,GACE,MAA+B,kBAAjBtL,KAAK0C,QAAuB1C,KAAK0C,QAAU,GAC1D,GAGH6I,OAAAA,GACEjJ,EAAAA,EAASkJ,IAAI,kBAAmBxL,KAAKyL,QACtC,EAEDC,QAAS,CACPD,OAAAA,CAAQrJ,GACN6I,EAAAA,WAAIvH,IAAI1D,KAAM,QAASA,KAAK2L,SAASC,MAAMC,OAAOC,MAAM1J,EAAEI,QAC1DyI,EAAAA,WAAIvH,IAAI1D,KAAM,OAAQoC,EAAEK,MACxBwI,EAAAA,WAAIvH,IAAI1D,KAAM,UAAWoC,EAAEM,SAC3BuI,EAAAA,WAAIvH,IAAI1D,KAAM,aAAcoC,EAAEO,MAC3BP,EAAEQ,UACHqI,EAAAA,WAAIvH,IAAI1D,KAAM,WAAYoC,EAAEQ,UAC9BqI,EAAAA,WAAIvH,IAAI1D,KAAM,WAAW,EAC1B,EACD2C,IAAAA,GACE3C,KAAK4K,SAAU,EACgB,oBAApB5K,KAAKgL,YAA2BhL,KAAKgL,YACjD,GAGHe,MAAO,CACLnB,OAAAA,CAAQoB,GACFA,GAAKvL,YAAW,KAAQT,KAAK4K,SAAU,CAAf,GAAwB5K,KAAKsL,aAC1D,KC3E4O,I,mDCQ7OW,GAAY,OACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIF,EAAeA,EAAiB,QAMhC,IAAkBA,EAAW,CAACC,KAAI,cAAU,MChB5C,MAAejB,EAAAA,WAAIkB,MAAM,CACvBhB,KAAM,cAENO,QAAS,CACP3B,MAAO,SAAUqC,EAAiBC,GAChCD,EAAGE,MAAMC,WAAa,uBACzBH,EAAGE,MAAME,QAAU,IACnB/L,WAAW4L,EAAM,IACf,EACHrC,MAAM,SAAUoC,EAAiBC,GAC7BD,EAAGE,MAAMC,WAAa,uBACzBH,EAAGE,MAAME,QAAU,IACnB/L,WAAW4L,EAAM,IACf,KCtBD,EAAS,WAAa,IAAI9C,EAAIvJ,KAASwJ,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,MAAM,CAACW,YAAY,oBAAoB,CAACX,EAAG,OAAO,CAACA,EAAG,YAAYH,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI6B,GAAG,aAAa,KAAK7B,EAAIwB,GAAGxB,EAAInB,SAAS,MAAM,GAAGmB,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI6B,GAAG,yBAAyB,IAAI7B,EAAIwB,GAAGxB,EAAItJ,KAAKwM,UAAU,KAAKlD,EAAIwB,GAAGxB,EAAItJ,KAAKyM,OAAO,MAAMnD,EAAIwB,GAAGxB,EAAI6B,GAAG,yBAAyB,IAAI7B,EAAIwB,GAAGxB,EAAIoD,eAAerH,QAAQ,IAAIiE,EAAIwB,GAAGxB,EAAI6B,GAAI,QAAU7B,EAAIoD,eAAerH,OAAS,EAAI,IAAM,MAAO,QAAQoE,EAAG,MAAM,CAACW,YAAY,2BAA2BT,MAAM,CAAC,GAAK,aAAa,CAACF,EAAG,KAAK,CAACW,YAAY,QAAQ,CAACX,EAAG,SAAS,CAACE,MAAM,CAAC,gBAAgB,GAAG,0BAAyB,EAAM,aAAa,OAAO,WAAW,GAAG,OAAS,eAAegD,YAAYrD,EAAIsD,GAAG,CAAC,CAACzG,IAAI,YAAY0G,GAAG,SAASC,GAClyB,IAAIjD,EAAKiD,EAAIjD,GACb,MAAO,CAACJ,EAAG,KAAKH,EAAIyD,GAAG,CAAC3C,YAAY,aAAaT,MAAM,CAAC,GAAK,eAAeE,GAAI,CAACJ,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,IAAI,gBAAoC,MAApBL,EAAI0D,OAAOnE,MAAgBS,EAAI0D,OAAOnE,KAAKoE,SAAS,kBAAkB,CAAC3D,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI4D,gBAAgB,UAAU,GAAG,MAAM,CAACzD,EAAG,SAAS,CAAEO,OAAOC,KAAKX,EAAIY,OAAO7E,OAAS,GAAIoE,EAAG,eAAe,CAACE,MAAM,CAAC,mBAAmB,OAAO,UAAY,GAAG,OAAS,GAAG,eAAe,GAAG,MAAQ,oBAAoB,YAAc,wBAAwBY,MAAM,CAACC,MAAOlB,EAAqB,kBAAEmB,SAAS,SAAUC,GAAMpB,EAAI6D,kBAAkBzC,CAAG,EAAEE,WAAW,uBAAuBtB,EAAIe,KAAKf,EAAI8D,GAAI9D,EAAiB,eAAE,SAAS+D,GAAM,OAAO5D,EAAG,cAAc,CAACtD,IAAIkH,EAAKC,WAAWzD,GAAG,CAAC,MAAQ,SAAS0D,GAAQ,OAAOjE,EAAIkE,QAAQC,KAAM,UAAaJ,EAAe,WAAI,SAAU,IAAI,CAAC5D,EAAG,oBAAoB,CAACH,EAAIuB,GAAGvB,EAAIwB,GAAGuC,EAAKnC,UAAU,EAAE,IAAK5B,EAAIoE,cAAcrI,OAAqFiE,EAAIe,KAAjFZ,EAAG,cAAc,CAACA,EAAG,oBAAoB,CAACH,EAAIuB,GAAG,yBAAyB,IAAa,IAAI,GAAwB,MAApBvB,EAAI0D,OAAOnE,KAAc,CAACY,EAAG,YAAY,CAACE,MAAM,CAAC,YAAY,MAAM,MAAQ,IAAIgD,YAAYrD,EAAIsD,GAAG,CAAC,CAACzG,IAAI,YAAY0G,GAAG,SAASC,GAC9kC,IAAIjD,EAAKiD,EAAIjD,GACb,MAAO,CAACJ,EAAG,KAAK,CAACW,YAAY,8BAA8B,CAACX,EAAG,SAASH,EAAIyD,GAAG,CAAC3C,YAAY,qBAAqBP,GAAG,CAAC,MAAQ,SAAS0D,GAAQ,OAAOjE,EAAIqE,cAAc,IAAI9D,GAAI,CAACP,EAAIuB,GAAG,oBAAoB,GAAG,IAAI,MAAK,EAAM,aAAa,CAACpB,EAAG,OAAO,CAACA,EAAG,IAAI,CAACH,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAI6B,GAAG,iDAAiD7B,EAAIe,KAAMf,EAAI0D,OAAOY,OAAe,SAAEtE,EAAI8D,GAAI9D,EAAa,WAAE,SAASuE,GAAM,OAAOpE,EAAG,KAAK,CAACtD,IAAI0H,EAAKhF,KAAKiF,MAAM,CAAC,aAAc,CAAC,YAAaxE,EAAI0D,OAAOnE,OAASgF,EAAKhF,QAAQ,CAACY,EAAG,cAAc,CAACE,MAAM,CAAC,GAAM,UAAaL,EAAI0D,OAAOY,OAAe,SAAI,IAAOC,EAAS,KAAG,gBAAgBvE,EAAI0D,OAAOnE,KAAKoE,SAASY,EAAKhF,QAAQ,CAACS,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI6B,GAAG0C,EAAKrL,OAAO,QAAQ,EAAE,IAAG8G,EAAIe,MAAM,KAAKZ,EAAG,MAAM,CAACW,YAAY,iBAAiB,CAACX,EAAG,MAAM,CAACW,YAAY,mBAAmB,CAACX,EAAG,KAAK,CAACW,YAAY,QAAQ,CAAsB,MAApBd,EAAI0D,OAAOnE,MAAoC,iBAApBS,EAAI0D,OAAOnE,KAAyB,CAACY,EAAG,KAAK,CAACW,YAAY,cAAc,CAACX,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,IAAI,gBAAoC,MAApBL,EAAI0D,OAAOnE,OAAe,CAACS,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAI6B,GAAG,cAAc,GAAG1B,EAAG,KAAK,CAACW,YAAY,cAAc,CAACX,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,eAAe,gBAAoC,iBAApBL,EAAI0D,OAAOnE,OAA0B,CAACS,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI6B,GAAG,mBAAmB,QAAQ,IAAI7B,EAAIe,KAAMf,EAAI0D,OAAOnE,KAAKoE,SAAS,WAAY,CAAC3D,EAAI8D,GAAI9D,EAAa,WAAE,SAASuE,EAAKE,GAAO,MAAO,CAAEzE,EAAI0D,OAAOnE,KAAKmF,MAAM,KAAK,KAAOH,EAAKhF,KAAM,CAACS,EAAI8D,GAAIS,EAAa,UAAE,SAASI,EAAMC,GAAY,MAAO,CAACzE,EAAG,KAAK,CAACtD,IAAI4H,EAAQ,IAAMG,EAAW9D,YAAY,cAAc,CAACX,EAAG,cAAc,CAACE,MAAM,CAAC,GAAM,UAAaL,EAAI0D,OAAOY,OAAe,SAAI,KAAOC,EAAKhF,OAASoF,EAAME,WAAa,GAAON,EAAS,KAAI,KAASI,EAAgB,WAAG,gBAAgB3E,EAAI0D,OAAOnE,KAAKuF,SAAU,GAAMH,EAAgB,cAAM,CAAC3E,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI6B,GAAG8C,EAAMI,QAAQ,QAAQ,GAAG,KAAI/E,EAAIe,KAAK,KAAIf,EAAIe,MAAM,QAAQ,EACvxD,EAAkB,G,+BCkGtB,EAAeW,EAAAA,WAAIC,OAAO,CACxBC,KAAM,eACNoD,MAAO,CAAC,SACRC,WAAY,CAAEC,SAAUA,KACxBpD,SAAU,KACLqD,EAAAA,EAAAA,IAAS,OAAQ,CAAC,SACrBvB,cAAAA,GAEE,IAAIwB,EAAmC,CAAC,EAExC,OADA3O,KAAKmK,MAAMyE,SAAStB,IAAiDqB,EAAMrB,EAAKC,YAAcD,EAAKnC,IAA9B,IAC7DnL,KAAKiN,OAAOY,OAAOgB,UAAY5E,OAAOC,KAAKyE,GAAOzB,SAASlN,KAAKiN,OAAOY,OAAOgB,UAClF,GAAG7O,KAAKoL,GAAG,kBAAkBuD,EAAM3O,KAAKiN,OAAOY,OAAOgB,YACtD7O,KAAKoL,GAAG,WACb,EACDuB,cAAAA,GACE,OAAO3M,KAAKC,KAAK6O,SACdC,QAAQC,GAA0C,CAAC,EAAG,GAAG9B,SAAS8B,EAAOC,UAAU7N,MACnF8N,KAAKF,GAA2BA,EAAOG,KACvCJ,QAAO,CAACtE,EAAeuD,EAAeoB,IAAmBA,EAAK5J,QAAQiF,KAAWuD,GACrF,GAGHzC,OAAAA,GACKtB,OAAOC,KAAKlK,KAAKmK,OAAO7E,QAAQtF,KAAKqP,aACzC,EAEDtO,IAAAA,GACE,MAAO,CACLuO,UAAW,CACT,CACExG,KAAM,QACNrG,KAAM,QACN8M,SAAU,CACR,CACEnB,WAAY,QACZE,MAAO,iBAET,CACEF,WAAY,SACZE,MAAO,kBAIb,CACExF,KAAM,UACNrG,KAAM,UACN8M,SAAU,CACR,CACEnB,WAAY,UACZE,MAAO,mBAET,CACEF,WAAY,SACZE,MAAO,kBAET,CACEF,WAAY,SACZE,MAAO,oBAIb,CACExF,KAAM,WACNrG,KAAM,gBACN8M,SAAU,CACR,CACEnB,WAAY,WACZE,MAAO,WAET,CACEF,WAAY,WACZE,MAAO,iBAET,CACEF,WAAY,UACZE,MAAO,gBAET,CACEF,WAAY,WACZE,MAAO,eAKfX,cAAe,GACfP,kBAAmB,GACnBhF,QAASxD,EAAAA,GAEZ,EAED8G,QAAS,CACL2D,WAAAA,CAAYG,GACR,MAAM7B,EAAgB,CAAC,EACvB,GAAI6B,GAAqB,KAAXA,EAKV,IAAI,IAAIlC,KAAQrD,OAAOC,KAAKlK,KAAKmK,OAC1BmD,EAAKmC,cAAcvC,SAASsC,EAAOC,gBAAkBnC,IAAStN,KAAKiN,OAAOY,OAAOgB,UAAU5E,OAAOyF,OAAO/B,EAAe,CAAC,CAACL,GAAOtN,KAAKmK,MAAMmD,UALnJ,IAAI,IAAIA,KAAQrD,OAAOC,KAAKlK,KAAKmK,OAC1BmD,IAAStN,KAAKiN,OAAOY,OAAOgB,UAAU5E,OAAOyF,OAAO/B,EAAe,CAAC,CAACL,GAAOtN,KAAKmK,MAAMmD,KAOlGrC,EAAAA,WAAIvH,IAAI1D,KAAM,gBAAiBiK,OAAO0F,OAAOhC,GAChD,EACDC,YAAAA,GACItL,EAAAA,EAASC,MAAM,kBAAmB,CAC9BC,MAAO,UAAWC,KAAMzC,KAAKoL,GAAG,gDAEpCpL,KAAK4P,OAAOC,SAAS,mBACxB,EACDC,mBAAAA,GACI9P,KAAKqP,YAAYrP,KAAKoN,kBACzB,GAGLrB,MAAO,CACHqB,iBAAAA,CAAkBzG,GACd3G,KAAKqP,YAAY1I,EACpB,EACDwD,KAAAA,GACInK,KAAK8P,qBACR,KChO8O,I,6ECQjP,GAAY,OACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIF,EAAe,EAAiB,QAWhC,IAAkB,EAAW,CAACC,MAAK,UAAM,cAAU,mBAAe,WAAM,eAAW,aAAS,MC9B5F,IAAI,EAAS,WAAa,IAAIxG,EAAIvJ,KAASwJ,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACA,EAAG,MAAM,CAACW,YAAY,2BAA2B,CAACX,EAAG,MAAM,CAACW,YAAY,kBAAkB,CAACX,EAAG,MAAM,CAACW,YAAY,qCAAqC,CAACd,EAAIyG,GAAG,GAAGtG,EAAG,MAAM,CAACW,YAAY,gCAAgC,CAACX,EAAG,OAAO,CAACW,YAAY,qBAAqB,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAI6B,GAAG,wBAAwB1B,EAAG,KAAK,CAACW,YAAY,eAAe,CAACX,EAAG,KAAK,CAACW,YAAY,oBAAoB,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,sCAAsC,OAAS,WAAW,CAACF,EAAG,IAAI,CAACW,YAAY,MAAM,CAACX,EAAG,iBAAiB,OAAOA,EAAG,KAAK,CAACW,YAAY,oBAAoB,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,gCAAgC,OAAS,WAAW,CAACF,EAAG,IAAI,CAACW,YAAY,yBAAyBX,EAAG,IAAI,CAACW,YAAY,MAAM,CAACX,EAAG,gBAAgB,eAAeA,EAAG,MAAM,CAACW,YAAY,kBAAkB,CAACX,EAAG,MAAM,CAACW,YAAY,MAAM4F,YAAY,CAAC,YAAY,SAAS,CAACvG,EAAG,KAAKH,EAAI8D,GAAI9D,EAAmB,iBAAE,SAASuE,GAAM,OAAOpE,EAAG,KAAK,CAACtD,IAAI0H,EAAK3C,KAAKd,YAAY,iDAAiD,CAACX,EAAG,MAAM,CAAgB,SAAdoE,EAAKhF,KAAiB,CAACY,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,KAAKE,GAAG,CAAC,MAAQ,SAAS0D,GAAyD,OAAjDA,EAAO0C,kBAAkB1C,EAAO2C,iBAAwB5G,EAAI6G,SAASC,MAAM,KAAMC,UAAU,IAAI,CAAC/G,EAAIuB,GAAGvB,EAAIwB,GAAG+C,EAAK3C,UAAU,CAACzB,EAAG,IAAI,CAACE,MAAM,CAAC,KAAOkE,EAAKhF,KAAK,OAAS,WAAW,CAACS,EAAIuB,GAAGvB,EAAIwB,GAAG+C,EAAK3C,WAAW,IAAI,IAAG,OAAOzB,EAAG,MAAM,CAACW,YAAY,kBAAkB,CAACX,EAAG,MAAM,CAACW,YAAY,oBAAoB,CAACX,EAAG,IAAI,CAACW,YAAY,mBAAmB,CAACd,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAKxB,EAAI6B,GAAG,aAAgB,KAAQ7B,EAAIgH,KAAKC,cAAiB,IAAOjH,EAAI6B,GAAG,8CAAiD,MAAO,IAAI7B,EAAIwB,GAAGxB,EAAI6B,GAAG,mGAAmG,cAAc,EACnxD,EAAkB,CAAC,WAAa,IAAI7B,EAAIvJ,KAASwJ,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACW,YAAY,0BAA0B,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,MAAM,CAACF,EAAG,MAAM,CAACE,MAAM,CAAC,IAAM,yBAAyB,G,wCC8DxO,EAAeqB,EAAAA,WAAIC,OAAO,CACxBC,KAAM,SAENqD,WAAW,CACTiC,aADS,IAETC,YAAWA,KAGb3P,IAAAA,GACE,MAAO,CACLwP,KAAM,IAAII,KACVC,gBAAiB,CAEf,CACE9H,KAAM,uCACNqC,KAAMnL,KAAKoL,GAAG,eAEhB,CACEtC,KAAM,qDACNqC,KAAMnL,KAAKoL,GAAG,qBAEhB,CACEtC,KAAM,gDAENqC,KAAMnL,KAAKoL,GAAG,mBAEhB,CACEtC,KAAM,iDACNqC,KAAMnL,KAAKoL,GAAG,mBAEhB,CACEtC,KAAM,sCACNqC,KAAMnL,KAAKoL,GAAG,cAEhB,CACEtC,KAAM,oCACNqC,KAAMnL,KAAKoL,GAAG,YAEhB,CACEtC,KAAM,oCACNqC,KAAMnL,KAAKoL,GAAG,aAGlBtC,KAAM,CAAE+H,KAAM,KAEjB,EACDnF,QAAS,CACP0E,QAAAA,GAAatM,OAAOgN,OAAO,OAAS,KC9GuM,ICQ3O,GAAY,OACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIF,EAAe,EAAiB,QCnB5B,EAAS,WAAa,IAAIvH,EAAIvJ,KAASwJ,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACW,YAAY,UAAU,CAACX,EAAG,MAAM,CAACW,YAAY,gBAAgB,CAACX,EAAG,MAAM,CAACW,YAAY,oBAAoB,CAACX,EAAG,MAAM,CAACW,YAAY,8BAA8B,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAQ,WAAaL,EAAInG,gBAAkB,MAAO,CAACsG,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,YAAY,CAACF,EAAG,kBAAkB,OAAOA,EAAG,MAAM,CAACW,YAAY,qBAAqB4F,YAAY,CAAC,YAAY,OAAO,kBAAkB,WAAW,eAAe,SAAS,CAACvG,EAAG,MAAM,CAACW,YAAY,uBAAuB,CAACX,EAAG,MAAM,CAACW,YAAY,uBAAuB,CAACX,EAAG,KAAK,CAACW,YAAY,0DAA0D,CAACX,EAAG,KAAK,CAACW,YAAY,sBAAsB,CAACX,EAAG,KAAK,CAACW,YAAY,gDAAgDT,MAAM,CAAC,uBAAuB,KAAK,CAACF,EAAG,MAAM,CAACW,YAAY,0BAA0B,CAACX,EAAG,IAAI,CAACW,YAAY,YAAYT,MAAM,CAAC,KAAO,wBAAwB,CAACF,EAAG,aAAa,KAAKA,EAAG,KAAK,CAACW,YAAY,2BAA2B,CAACX,EAAG,KAAK,CAACW,YAAY,QAAQ,CAACX,EAAG,KAAK,CAACW,YAAY,wBAAwB,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAO,qCAAqC,CAACL,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI6B,GAAG,oBAAoB,SAAS7B,EAAI8D,GAAI9D,EAAS,OAAE,SAAS+D,GAAM,OAAO5D,EAAG,KAAK,CAACtD,IAAIkH,EAAKlM,GAAGiJ,YAAY,wBAAwB,CAACX,EAAG,cAAc,CAACtD,IAAIkH,EAAKlM,GAAGwI,MAAM,CAAC,GAAM,UAAa0D,EAAe,WAAI,WAAY,CAAC/D,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGuC,EAAKnC,MAAM,QAAQ,EAAE,KAAI,SAASzB,EAAG,KAAK,CAACW,YAAY,sBAAsB,CAACX,EAAG,KAAK,CAACW,YAAY,gDAAgDT,MAAM,CAAC,uBAAuB,KAAK,CAACF,EAAG,MAAM,CAACW,YAAY,0BAA0B,CAACX,EAAG,OAAO,CAACW,YAAY,iEAAiE,CAACX,EAAG,gBAAgB,GAAGA,EAAG,OAAO,CAACW,YAAY,oCAAoC,CAACX,EAAG,gBAAgB,KAAKA,EAAG,KAAK,CAACW,YAAY,2BAA2B,CAACX,EAAG,KAAK,CAACW,YAAY,QAAQ,CAACd,EAAI8D,GAAI9D,EAAa,WAAE,SAASwH,GAAM,MAAO,CAACrH,EAAG,KAAK,CAACW,YAAY,wBAAwB,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAQ,WAAaL,EAAInG,gBAAmB2N,EAAS,OAAK,CAACxH,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI6B,GAAG2F,EAAK5F,OAAO,SAAS,IAAGzB,EAAG,KAAK,CAACW,YAAY,wBAAwB,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAQ,WAAaL,EAAInG,gBAAkB,WAAY0G,GAAG,CAAC,MAAQ,SAAS0D,GAAyD,OAAjDA,EAAO2C,iBAAiB3C,EAAO0C,kBAAyB3G,EAAIyH,OAAOX,MAAM,KAAMC,UAAU,IAAI,CAAC/G,EAAIuB,GAAG,IAAIvB,EAAIwB,GAAGxB,EAAI6B,GAAG,WAAW,UAAU,WAAW1B,EAAG,KAAK,CAACW,YAAY,2DAA2D,CAACX,EAAG,KAAK,CAACW,YAAY,sBAAsB,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAQ,WAAaL,EAAInG,gBAAkB,iBAAkB,CAACsG,EAAG,eAAe,KAAKA,EAAG,IAAI,CAACE,MAAM,CAAC,KAAQ,WAAaL,EAAInG,gBAAkB,kBAAmBsG,EAAG,KAAK,CAACW,YAAY,sBAAsB,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAQ,WAAaL,EAAInG,gBAAkB,kBAAmBsG,EAAG,IAAI,CAACE,MAAM,CAAC,KAAQ,WAAaL,EAAInG,gBAAkB,qBAAsB,CAACsG,EAAG,iBAAiB,aAAaA,EAAG,MAAM,CAACW,YAAY,gBAAgB,CAACX,EAAG,IAAI,CAACE,MAAM,CAAC,KAAQ,WAAaL,EAAInG,gBAAkB,mBAAoB,CAACsG,EAAG,SAAS,CAACW,YAAY,6BAA6B,CAACd,EAAIuB,GAAGvB,EAAIwB,GAAGxB,EAAI6B,GAAG,4BAA4B,EACnoG,EAAkB,G,yGC6GtB,GAAeH,EAAAA,WAAIC,OAAO,CACxBC,KAAM,MACNoD,MAAO,CAAC,SAERC,WAAY,CACVyC,WADU,IAEVC,cAFU,IAGVzC,SAHU,IAIV0C,aAJU,IAKVC,YAAWA,MAGbC,OAAAA,GACErR,KAAKsR,eACN,EAEDC,SAAAA,GACEvR,KAAKsR,cAAc,SACpB,EAEDvQ,IAAAA,GACE,MAAO,CACLqC,gBADK,KAELoO,UAAW,CACT,CACE1I,KAAM,mBACNqC,KAAM,gBAER,CACErC,KAAM,oBACNqC,KAAM,eAER,CACErC,KAAM,kBACNqC,KAAM,YAER,CACErC,KAAM,kBACNqC,KAAM,YAER,CACErC,KAAM,oBACNqC,KAAM,cAER,CACErC,KAAM,kBACNqC,KAAM,gBAIb,EAEDO,QAAS,CACP4F,aAAAA,CAAcG,EAAS,OACrB,MAAMC,EAAQnO,SAASoO,iBAAiB,yBACxC,IAAI,MAAOC,EAAGC,KAASH,EAAMI,UAAW,CAEtC,IAAIrG,EAAUoG,EAAKE,cAAc,2BAClB,OAAZtG,IACa,QAAXgG,EACDhG,EAAQuG,iBAAiB,SAAU5P,GAAMyP,EAAKI,UAAUC,OAAO,YAE/DzG,EAAQ0G,oBAAoB,SAAU/P,GAAMyP,EAAKI,UAAUC,OAAO,YAGvE,CACF,EACDlB,MAAAA,IACElO,EAAAA,GAAAA,KACAjC,GAAAA,EAASwC,QACTS,OAAOb,SAASC,KAAO,WAAWE,EAAAA,WACnC,KCrLuO,MCQxO,IAAY,OACd,GACA,EACA,GACA,EACA,KACA,KACA,MAIF,GAAe,GAAiB,Q,YCUhC,GAAe6H,EAAAA,WAAIC,OAAO,CACxBC,KAAM,MACNqD,WAAY,CACV4D,OAAQnH,EAAAA,WAAIC,OAAOkH,GAEnBC,aAAcpH,EAAAA,WAAIC,OAAOmH,GACzBC,SAAUrH,EAAAA,WAAIC,OAAOoH,GACrBC,IAAKtH,EAAAA,WAAIC,OAAOqH,KAElBC,OAAQ,CAAEvH,EAAAA,WAAIkB,MAAMsG,IACpBpH,SAAU,KACLqD,EAAAA,EAAAA,IAAS,OAAQ,CAAC,OAAQ,sBAC1BA,EAAAA,EAAAA,IAAS,QAAS,CAAC,WAExBnD,OAAAA,GACEjJ,EAAAA,EAASkJ,IAAI,kBACX,IAAMP,EAAAA,WAAIvH,IAAI1D,KAAM,oBAAoB,KACvC4D,GAAAA,EAAc+B,IACf3F,KAAK2L,SAAS+G,KAAKC,QAAU/O,GAAAA,EAAc+B,IAE3C1E,QAAQ+B,IAAI,WAEdhD,KAAK4S,aACL5S,KAAK6S,oBACL7S,KAAK8S,cAAc9S,KAAKmK,MACzB,EACDpJ,IAAAA,GACE,MAAO,CACL8I,WAAY,GACZO,kBAAkB,EAErB,EACDsB,QAAS,CACPkH,UAAAA,GACE,MAAMG,EAAOxP,SAASyP,qBAAqB,QAAQ,GAC7CC,EAAM1P,SAAS2P,cAAc,QACnCD,EAAIE,aAAa,MAAO,QACxBF,EAAIE,aAAa,OAAQ,WAAalQ,SAASc,KAAO,uBACtDgP,EAAKK,YAAYH,EAClB,EACDJ,iBAAAA,GACE,GAA8B,kBAApBjO,EAAAA,GAA8B,CACtC,MAAMmO,EAAOxP,SAASyP,qBAAqB,QAAQ,GAC7CC,EAAM1P,SAAS2P,cAAc,QACnCD,EAAIE,aAAa,OAAQ,eACzBF,EAAIE,aAAa,UAAWvO,EAAAA,IAC5BmO,EAAKK,YAAYH,EAClB,CACF,EACDI,SAAAA,CAAUC,EAASC,GACjB,OAAID,EAAEnI,KAAOoI,EAAEpI,MAAc,EACzBmI,EAAEnI,KAAOoI,EAAEpI,KAAa,EACrB,CACR,EACD2H,aAAAA,CAAcnM,GACZ,MAAM6M,EAASvJ,OAAO0F,OAAOhJ,GAAG8M,KAAKzT,KAAKqT,WAC1CpI,EAAAA,WAAIvH,IAAI1D,KAAM,aAAcwT,EAC7B,GAEHzH,MAAO,CACL5B,KAAAA,CAAMxD,GACJ3G,KAAK8S,cAAcnM,EACpB,KC3F8N,M,WCO/N,IAAY,OACd,GACA2C,EACAiB,GACA,EACA,KACA,KACA,MAIF,GAAe,GAAiB,QAKhC,IAAkB,GAAW,CAACmJ,KAAI,O,wCCvB9B,GAAS,WAAa,IAAInK,EAAIvJ,KAASwJ,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,cAAc,EAC7G,GAAkB,GCAlBiK,GAAS,CAAC,EAKV,IAAY,OACdA,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,GAAe,GAAiB,QCZhCtS,GAAAA,GAAAA,KAAauC,GAAAA,GAEN,MAAMgQ,GAAwB,CACnC,CACE9K,KAAM,IACNmD,UAAW4H,GACXtE,SAAU,CACR,CACEzG,KAAM,IACNqC,KAAM9J,GAAAA,GAAAA,EAAU,YAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,2BACvC4K,UAAW,IAA2D,iEAExE,CACEnD,KAAM,cACNqC,KAAM9J,GAAAA,GAAAA,EAAU,eAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,8BACvC4K,UAAW,IAA8D,kEAI/E,CACEnD,KAAM,SACNmD,UAAW4H,GACXtE,SAAU,CACR,CACEzG,KAAM,YACNiL,SAAU,yBACV9H,UAAW4H,GACXtE,SAAU,CACR,CACEzG,KAAM,UACNmD,UAAW4H,GACXtE,SAAU,CACR,CACEzG,KAAM,IACNqC,KAAM9J,GAAAA,GAAAA,EAAU,mBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,kCACvC4K,UAAW,IAAyE,0EAEtF,CACEnD,KAAM,SACNqC,KAAM9J,GAAAA,GAAAA,EAAU,kBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,iCACvC4K,UAAW,IAAwE,+BAErF,CACEnD,KAAM,SACNqC,KAAM9J,GAAAA,GAAAA,EAAU,kBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,iCACvC4K,UAAW,IAAwE,qGAErF,CACEnD,KAAM,UACNqC,KAAM9J,GAAAA,GAAAA,EAAU,kBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,iCACvC4K,UAAW,IAAwE,yFACnFsD,SAAU,CACR,CACEzG,KAAM,wBACNqC,KAAM9J,GAAAA,GAAAA,EAAU,wBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,uCACvC4K,UAAW,IAA8D,uFAMnF,CACEnD,KAAM,QACNmD,UAAW4H,GACXtE,SAAU,CACR,CACEzG,KAAM,IACNqC,KAAM9J,GAAAA,GAAAA,EAAU,iBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,gCACvC4K,UAAW,IAAqE,yFAChFsD,SAAU,CACR,CACEzG,KAAM,kBACNqC,KAAM9J,GAAAA,GAAAA,EAAU,sBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,qCACvC4K,UAAW,IAA8D,qFAI/E,CACEnD,KAAM,SACNqC,KAAM9J,GAAAA,GAAAA,EAAU,gBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,+BACvC4K,UAAW,IAAoE,0FAC/EsD,SAAU,CACR,CACEzG,KAAM,0BACNqC,KAAM9J,GAAAA,GAAAA,EAAU,WAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,+BACvC4K,UAAW,IAA8D,qFAI/E,CACEnD,KAAM,eACNqC,KAAM9J,GAAAA,GAAAA,EAAU,aAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,4BACvC4K,UAAW,IAAiE,mEAIlF,CACEnD,KAAM,WACNmD,UAAW4H,GACXtE,SAAU,CACR,CACEzG,KAAM,IACNqC,KAAM9J,GAAAA,GAAAA,EAAU,iBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,gCACvC4K,UAAW,IAAmE,yEAEhF,CACEnD,KAAM,WACNqC,KAAM9J,GAAAA,GAAAA,EAAU,iBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,gCACvC4K,UAAW,IAAoE,iEAEjF,CACEnD,KAAM,UACNqC,KAAM9J,GAAAA,GAAAA,EAAU,gBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,+BACvC4K,UAAW,IAAmE,uDAC9EsD,SAAU,CACR,CACEzG,KAAM,aACNqC,KAAM9J,GAAAA,GAAAA,EAAU,qBAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,oCACvC4K,UAAW,IAA4E,oFAI7F,CACEnD,KAAM,cACNqC,KAAM9J,GAAAA,GAAAA,EAAU,cAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,6BACvC4K,UAAW,IAAqE,iEAElF,CACEnD,KAAM,yBACNqC,KAAM9J,GAAAA,GAAAA,EAAU,eAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,8BACvC4K,UAAW,IAAsE,iEAEnF,CACEnD,KAAM,WACNqC,KAAM9J,GAAAA,GAAAA,EAAU,YAChByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,2BACvC4K,UAAW,IAAoE,sCAQ7F,CACEnD,KAAM,IACNqC,KAAM,GAAG9J,GAAAA,GAAAA,EAAU,eACnByS,KAAM,CAAExF,MAAO,cAAcjN,GAAAA,GAAAA,EAAU,4BACvC4K,UAAW,IAAsD,iC,gBClKrEhB,EAAAA,WAAI+I,IAAIC,GAAAA,GAIR,MAAMC,GAA+B,CACnCC,KAAM,UACNC,KAAMnQ,IACN2P,OAHmC,GAInCS,cAAAA,GAAoB,MAAO,CAAEC,EAAG,EAAGC,EAAG,EAAK,GAGvCC,GAAS,IAAIP,GAAAA,EAAUC,IAE7BM,GAAOC,YAAWpO,MAAO8I,EAAIuF,EAAOC,KAClCpR,SAAS+K,MAAQ,WAEjB,IAAIsG,GAAS,EACTC,QAAgBxU,GAAAA,EAAMC,QAAQ,gBAElC,GAAIuU,GAAYA,EAAQzN,eAAkByN,EAAQlT,IAG3C,CACL,MAAMb,QAAgBD,GAAAA,EAASC,UACJ,kBAAxBA,EAAQC,KAAKC,QAA4BH,GAAAA,EAASM,WAAW0T,EAAQ5U,KAAKmB,GAC9E,YALOf,GAAAA,EAAMwP,SAAS,qBACrBgF,QAAgBxU,GAAAA,EAAMC,QAAQ,gBAUhC,GAJIuU,EAAQlT,KAAQkT,EAAQzN,gBAC1BwN,GAAS,IAGI,IAAXA,GAAiC,kBAAPzF,GAAmBA,EAAGtB,QAAwC,kBAAvBsB,EAAGtB,OAAOgB,SAAuB,CACpG,MAAMiG,QAAezU,GAAAA,EAAMC,QAAQ,wBAAwB6O,EAAGtB,OAAOgB,UAClEiG,EAAOxP,OAAS,IACjBsP,GAAS,EACTtS,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAMpB,GAAAA,GAAAA,EAAU,+BAAiC8N,EAAGtB,OAAOgB,SAAW,KAAOxN,GAAAA,GAAAA,EAAU,mDACvFqB,QAAS,IACTC,KAAMnB,GAAAA,EAAUqB,iBAChBD,SAAUvB,GAAAA,GAAAA,EAAU,qBAEtBZ,YAAW,KAAQe,GAAAA,EAAUqB,kBAAV,GAAgC,KAEtD,CACE+R,GACDD,GAAM,IAGV,MAAMI,GAAe,uBACrBP,GAAOQ,WAAW7F,IAChBlE,EAAAA,WAAIgK,UAAS,KACO,kBAAP9F,GAAsC,kBAAZA,EAAG2E,KACtCvQ,SAAS+K,MAAQa,EAAG2E,KAAKxF,MACtB/K,SAAS+K,MAAQyG,EAAjB,GAHP,IAOF,U,YC/DA9J,EAAAA,WAAI+I,IAAIkB,GAAAA,GAER,MAAMC,GAAU,IAAID,GAAAA,EAAQ,CAC1BE,WAAY,CACVC,WAAY,CACVC,GAAI,EACJC,GAAI,IACJC,GAAI,IACJC,GAAI,KAENC,eAAgB,GAElB9J,MAAO,CACLC,OAAQ,CACNC,MAAO,CACL6J,QAAS,UACTC,UAAW,OACXC,OAAQ,UACRC,QAAS,UACTC,QAAS,UACTC,MAAO,UACPC,cAAe,UACfvR,OAAQ,UACRwR,aAAc,UACdC,KAAM,UACNC,WAAY,UACZC,OAAQ,UACRC,aAAc,UACd9R,MAAO,UACP+R,YAAa,UACbC,SAAU,UACVC,OAAQ,UACRC,aAAc,UACd,gBAAiB,UACjB,iBAAkB,UAClB,eAAgB,eAMxB,U,uBC5BO,MAAMC,GAAQ,CACnBC,OAAAA,GACE3L,EAAAA,WAAI4L,UAAUC,KAAO,IAAI7L,EAAAA,WAEzBA,EAAAA,WAAI4L,UAAUE,SAAW,CAACC,EAAkBC,IACnCA,EAAIC,MAAKlL,GAAOgL,EAAS9J,SAASlB,KAG3Cf,EAAAA,WAAI4L,UAAUM,UAAY,CAACC,EAAazR,KAC/B,CAAEyR,IAAMC,OAAOD,GAAMzR,IAAM0R,OAAO1R,KAM3CsF,EAAAA,WAAI8D,OAAO,YAAY,SAASwB,EAAc+G,EAAcC,GAI1D,GAFAC,KAAAA,OAAc1T,OAAOxC,WAEfgW,IAAQC,EAEZ,OAAOC,KAAAA,IAAWjH,EAAM,cAAckH,UAGxC,MAAMC,EAAeJ,EAAO,GAAG/G,KAAQ+G,IAAS/G,EAE1CoH,EAAMH,KAAAA,IAAWE,GAGvB,OAAOC,EAAIC,GAAGL,GAAUE,SACzB,IAGDxM,EAAAA,WAAI8D,OAAO,aAAa,SAAStM,GAC/B,MAAMoV,EAAQ,+BACd,OAAOpV,EAAK6D,QAAQuR,EAAO,GAC5B,IAGD5M,EAAAA,WAAI8D,OAAO,YAAY,SAAUtM,EAAc6C,EAAgBwS,GAI7D,GAHAA,EAAQA,GAAS,MACjBxS,EAASA,GAAU,GAEf7C,EAAK6C,QAAUA,EAAQ,OAAO7C,EAElC,IAAIsV,EAAStV,EAAKuV,MAAM,EAAG1S,EAASwS,EAAMxS,QACtC2S,EAAOF,EAAOzS,OAAS,EAG3B,MAAO2S,EAAO,GAAsB,MAAjBF,EAAOE,IAAiBF,EAAOE,KAAUH,EAAM,GAAIG,GAAQ,EAO9E,OAJAA,EAAOA,GAAQ3S,EAASwS,EAAMxS,OAE9ByS,EAASA,EAAOC,MAAM,EAAGC,GAElBF,EAASD,CACjB,IAGD7M,EAAAA,WAAI8D,OAAO,SAAS,SAAStM,GAC3B,OAAOyV,OAAOzV,GAAMgN,aACrB,IAGDxE,EAAAA,WAAI8D,OAAO,cAAc,SAAStM,GAChC,OAAOA,EAAK0V,OAAO,GAAGC,cAAgB3V,EAAKuV,MAAM,GAAGvI,aACrD,GACF,G,4BC3EH5K,EAAQ,OAKR,IACExD,GAAAA,GAAAA,IAAYgX,GAAAA,GACTvY,KAAK8D,GAAAA,GACL0U,MAAK,KAEJrN,EAAAA,WAAI4L,UAAU0B,EAAItN,EAAAA,WAAI4L,UAAUzL,GAO/BtH,OAAwC0U,GAAM,IAAIvN,EAAAA,WAAI,CACrDuJ,OADqD,GAErDnU,MAFqD,KAGrD8U,QAHqD,GAIrD7L,OAAQmP,GAAKA,EAAEC,MACIC,OAAO,OAL3B,GAQN,CAAC,MAAMvW,IACNnB,QAAQC,MAAM,uCAAwCkB,GACvD,CAED6I,EAAAA,WAAI+I,IAAI4E,GAAAA,EAAY,CAACvX,QAAOA,GAAAA,KAG5B4J,EAAAA,WAAI+I,IAAI2C,G,oFCnCD,MAAMrU,EAAW,IAAI2I,EAAAA,U,2GCHrB,MAAM3K,EAA8C,CACzD8G,aAAAA,CAAcyR,GAAS,OAAOA,EAAMzR,aAAe,EACnDhH,YAAAA,CAAayY,GAAS,OAAOA,EAAMzY,YAAc,EACjDH,IAAAA,CAAK4Y,GAAS,OAAOA,EAAM5Y,IAAM,EACjC6Y,eAAAA,CAAgBD,GAAS,OAAQA,EAAM5Y,KAAQ4Y,EAAM5Y,KAAK6O,SAASI,KAAIF,GAAUA,EAAOG,KAAM,EAAI,EAClG0F,OAAAA,CAAQgE,GAAS,MAAO,CACtBzR,cAAeyR,EAAMzR,cACrBhH,aAAcyY,EAAMzY,aACpBkB,SAAUuX,EAAMvX,SAChBrB,KAAM4Y,EAAM5Y,KACZ0B,IAAKkX,EAAMlX,IACX,G,cCTG,MAAMoX,EAA8C,CACzD,kBAAMC,EAAa,OAAErY,IACnB,IACE,MAAMoB,QAAiBlB,EAAAA,EAASkG,YAC5BhF,GAAYA,EAAS9B,YACjBI,GAAMwP,SAAS,oBACvBlP,EAAO,gBAAiBoB,EACzB,CAAC,MAAMb,GACNP,EAAO,eAAgBO,EACxB,CACF,GCXU+X,EAAuC,CAClDC,KAAAA,CAAML,GAAS5O,OAAOyF,OAAOmJ,EAAOM,EAAe,EACnDC,aAAAA,CAAcP,EAAOjQ,GACnBiQ,EAAMzR,cAAgBwB,EAAQxB,cAC9ByR,EAAM3X,OAAQ,EACd2X,EAAM5Y,KAAO2I,EAAQ3I,KACrB4Y,EAAMlX,IAAMiH,EAAQjH,GACrB,EACDvB,YAAAA,CAAayY,EAAOjQ,GAClBiQ,EAAMzY,aAAewI,CACtB,EACDyQ,YAAAA,CAAaR,GACXA,EAAMzR,eAAgB,EACtByR,EAAM3X,OAAQ,EACd2X,EAAM5Y,UAAOqZ,EACbT,EAAMlX,KAAM,CACb,GChBUwX,EAA4B,CACvC/R,eAAe,EACfhH,cAAc,EACdc,OAAO,EACPI,SAAU,GACVrB,UAAMqZ,EACN3X,KAAK,GAGMkX,EAAQM,EAEfI,GAAa,EAEnB,OACEA,aACAV,QACAvY,QAHa,EAIbyY,QAJa,EAKbE,UAASA,GCnBJ,MAAM3Y,EAA8C,CACzDkZ,KAAAA,CAAMX,GAAS,OAAOA,EAAMW,KAAO,GCLxB1S,EAAW,4B,eCKjB,MAAMiS,EAA8C,CACzD,YAAMU,EAAO,OAAE9Y,GAAUoQ,GACvB,IACE,MAAMhP,QAAiBN,EAAAA,IAAIiY,KAAK,GAAG5S,WAAmBiK,GAC9B,MAApBhP,EAASf,QAAgBL,EAAO,iBAAkB,CAAE6Y,MAAOzX,EAAShB,MACzE,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAMuV,EAAO,SAAE5G,GAAY8J,GACzB,IACE,MAAM5X,QAAiBN,EAAAA,IAAIiY,KAAK,GAAG5S,WAAmB6S,GAC9B,MAApB5X,EAASf,QAAgB6O,EAAS,QACvC,CACD,MAAM3O,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,WAAM0Y,EAAM,OAAEjZ,IACZ,IACE,MAAMoB,QAAiBN,EAAAA,IAAIC,IAAI,GAAGoF,KACV,MAApB/E,EAASf,QAAgBL,EAAO,iBAAkB,CAAE6Y,MAAOzX,EAAShB,MACzE,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAM2Y,EAAO,SAAEhK,GAAYkB,GACzB,IACE,MAAMhP,QAAiBN,EAAAA,IAAIiY,KAAK,GAAG5S,WAAmBiK,GAC9B,MAApBhP,EAASf,QAAgB6O,EAAS,QACvC,CACD,MAAM3O,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,GC7BU+X,EAAuC,CAClDa,cAAAA,CAAejB,EAAOjQ,GACpBiQ,EAAMW,MAAQ5Q,EAAQ4Q,KACvB,EACDN,KAAAA,CAAML,GAAS5O,OAAOyF,OAAOmJ,EAAOM,EAAe,GCHxCA,EAA4B,CACvCK,MAAO,IAGIX,EAAQM,EAEfI,GAAa,EAEnB,OACEA,WADa,EAEbV,MAFa,EAGbvY,QAHa,EAIbyY,QAJa,EAKbE,UAASA,GCdJ,MAAM3Y,EAA8C,CACzDoZ,IAAAA,CAAKb,GAAS,OAAOA,EAAMa,IAAM,EACjCK,KAAAA,CAAMlB,GAAS,OAAOA,EAAMkB,KAAO,EACnCC,yBAAAA,CAA0BnB,EAAO7X,GAAsB,OAAO6X,EAAMmB,0BAA0BhZ,EAAS,EACvGiZ,wBAAAA,CAAyBpB,GAAS,OAAOA,EAAMoB,wBAA0B,EACzEC,uBAAAA,CAAwBrB,GAAS,OAAOA,EAAMqB,uBAAyB,EACvEC,yBAAAA,CAA0BtB,GAAS,OAAOA,EAAMsB,yBAA2B,G,SCVtE,MAAMrT,EAAW,M,qCCUxBzF,EAAAA,GAAAA,KAAauC,EAAAA,GAyCN,MAAMmV,EAA8C,CACzD,aAAMqB,EAAQ,OAAEzZ,IAAU,GAAES,EAAF,OAAM0T,IAC9B,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,GAAGoF,WAAkBgO,WAAgB1T,KACpE,GAAwB,MAApBW,EAASf,OAEX,OADAL,EAAO,wBAAyBoB,EAAShB,MAClCgB,EAAShB,KAGhB,MADAE,QAAQC,MAAMa,GACR,IAAIsY,MAAM,uBAEnB,CACD,MAAMnZ,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,2BAAMoZ,EAAsB,OAAE3Z,IAAU,OAAEmU,EAAF,OAAUzN,EAAV,OAAkBrG,EAAlB,MAA0BuZ,EAA1B,cAAiCC,GAAgB,IACvF,IACE,MAAMC,EAA+B,kBAAVF,EAAqBA,EAAQ,EAClDxY,QAAiBN,EAAAA,IACpBC,IAAI,GAAGoF,WAAkBgO,aAAkBzN,WAAgBrG,IAC1D,CAAE6M,OAAQ,CAAE0M,MAAOE,EAAaD,mBAEpC,GAAwB,MAApBzY,EAASf,OAAgB,CAC3B,OAAQA,GACN,IAAK,UACHL,EAAO,oCAAqCoB,EAAShB,KAAKgZ,OAC1D,MACF,IAAK,SACHpZ,EAAO,mCAAoCoB,EAAShB,KAAKgZ,OACzD,MACF,IAAK,WACHpZ,EAAO,qCAAsCoB,EAAShB,KAAKgZ,OAC3D,MAEJ,OAAOhY,EAAShB,KAAKgZ,KACtB,CACF,CACD,MAAM7Y,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACA,wBAAMwZ,EAAmB,OAAE/Z,GAAUmU,GACnC,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,GAAGoF,WAAkBgO,mBACpD,GAAwB,MAApB/S,EAASf,OAEX,OADAL,EAAO,mCAAoCoB,EAAShB,MAC7CgB,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACA,aAAMyZ,EAAQ,SAAE9K,IAAY,OAAE+K,EAAF,OAAU9F,EAAV,OAAkBzN,IAC5C,IACE,MAAMtF,QAAiBN,EAAAA,IAAIiY,KAAK,GAAG5S,WAAkBgO,kBAAwB,CAAE8F,SAAQvT,WASvF,OAPwB,MAApBtF,EAASf,QACXsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAMpB,EAAAA,GAAAA,EAAU,kBAChBsB,KAAM,IAAMkN,EAAS,YAAa,CAAE+K,SAAQvT,SAAQyN,aAGjD/S,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,iBAAM2Z,EAAY,SAAEhL,IAAY,OAAEiF,EAAF,MAAUiF,IACxC,IACE,MAAMhY,QAAiBN,EAAAA,IAAIiY,KAAK,GAAG5S,WAAkBgO,uBAA6B,CAAEiF,UASpF,OAPuB,MAApBhY,EAASf,QACVsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAMsX,EAAMzU,OAASjE,EAAAA,GAAAA,EAAU,oBAC/BsB,KAAM,IAAMkN,EAAS,gBAAiB,CAAEiF,SAAQiF,YAG7ChY,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,eAAM4Z,CAAUlJ,GAAG,OAAEgJ,EAAF,OAAU9F,EAAV,OAAkBzN,IACnC,IACE,aAAa5F,EAAAA,IAAIiY,KAAK,GAAG5S,WAAkBgO,oBAA0B,CAAE8F,SAAQvT,UAChF,CACD,MAAMnG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,mBAAM6Z,CAAcnJ,GAAG,MAAEmI,EAAF,OAASjF,IAC9B,IACE,aAAarT,EAAAA,IAAIiY,KAAK,GAAG5S,WAAkBgO,yBAA+B,CAAEiF,SAC7E,CACD,MAAM7Y,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAMuY,EAAO,SAAE5J,IAAY,OAAExI,EAAF,QAAU2T,EAAV,YAAmBC,EAAnB,KAAgC9S,EAAhC,KAAsCmF,EAAtC,aAA4C4N,EAA5C,SAA0DjY,EAA1D,OAAoEkY,IAC7F,IACE,MAAMpZ,QAAiBN,EAAAA,IAAIiY,KAAK,GAAG5S,WAAkBwG,iBACrB,CAAEjG,SAAQ2T,UAASC,cAAa9S,OAAMmF,OAAM4N,eAAcjY,WAAUkY,WAQpG,OAPwB,MAApBpZ,EAASf,QACXsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAM,GAAGpB,EAAAA,GAAAA,EAAU,mBAAmB2Z,KACtCrY,KAAM,IAAMkN,EAAS,WAAY,CAAE+K,OAAQ7Y,EAAShB,KAAMsG,SAAQiG,WAG/DvL,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAMka,EAAO,SAAEvL,IAAY,OAAE+K,EAAF,OAAUvT,EAAV,OAAkByN,EAAlB,OAA0B9N,EAA1B,QAAkCqU,IAC3D,IACE,MAAMtZ,QAAiBN,EAAAA,IACpBiY,KAAK,GAAG5S,WAAkBgO,WAAgB8F,WAAiB,CAAE5T,SAAQqU,UAAShU,WAEzD,MAApBtF,EAASf,QACXsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAMpB,EAAAA,GAAAA,EAAU,kBAChBsB,KAAM,IAAMkN,EAAS,WAAY,CAAE+K,SAAQvT,SAAQyN,YAGxD,CACD,MAAM5T,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,cAAMoa,CAAS1J,GAAG,OAACgJ,EAAD,OAAS9F,EAAT,OAAiBzN,IACjC,IACE,aAAa5F,EAAAA,IAAIiY,KAAK,GAAG5S,WAAkBgO,WAAgB8F,aAAmB,CAAEvT,UACjF,CACD,MAAMnG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAMuV,EAAO,SAAE5G,IAAY,KAAE0L,EAAF,OAAQX,EAAR,OAAgB9F,EAAhB,OAAwBzN,IACjD,IACE,MAAMtF,QAAiBN,EAAAA,IACpBgV,OAAO,GAAG3P,WAAkBgO,WAAgB8F,IAAU,CAAE/M,OAAQ,CAAExG,YAWrE,OATwB,MAApBtF,EAASf,SACNua,GACHjZ,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAMpB,EAAAA,GAAAA,EAAU,iBAChBsB,KAAM,IAAMkN,EAAS,WAAY,CAAE+K,SAAQvT,SAAQyN,cAIlD/S,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EAED,gBAAMsa,EAAW,SAAE3L,IAAY,MAAEkK,EAAF,OAASjF,IACtC,IACE,MAAM/S,QAAiBN,EAAAA,IACpBgV,OAAO,GAAG3P,WAAkBgO,eAAqB,CAAE/T,KAAM,CAAEgZ,WAW9D,OATIhY,EAASf,OASNe,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,cAAMua,CAAS7J,GAAG,OAAEgJ,EAAF,OAAU9F,EAAV,OAAkBzN,IAClC,IACE,aAAa5F,EAAAA,IAAIiY,KAAK,GAAG5S,WAAkBgO,WAAgB8F,aAAmB,CAAEvT,UACjF,CACD,MAAMnG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAM2Y,CAAOjI,GAAG,KAAE8H,IAChB,IACE,MAAMgC,EAAczR,OAAOyF,OAAOgK,EAAM,CAACiC,SAAUjC,EAAKvR,OACxD,aAAa1G,EAAAA,IAAIiY,KAAK,GAAG5S,WAAkB4S,EAAKkC,MAAMxa,YAAYsY,EAAKtY,YAAa,CAAEsY,KAAMgC,GAC7F,CACD,MAAOxa,GAA6B,OAApBY,EAAAA,EAAAA,aAAYZ,GAAeA,CAAO,CACnD,GC7NU+X,EAAuC,CAClDa,cAAAA,CAAejB,EAAOjQ,GACpBiQ,EAAMkB,MAAQnR,EAAQ4Q,KACvB,EACDqC,qBAAAA,CAAsBhD,EAAOjQ,GAC3BqC,EAAAA,WAAIvH,IAAImV,EAAO,OAAQjQ,EACxB,EACDkT,gCAAAA,CAAiCjD,EAAOjQ,GACtCiQ,EAAMkD,mBAAqBnT,CAC5B,EACDoT,iCAAAA,CAAkCnD,EAAOjQ,GACvCiQ,EAAMoB,yBAA2BrR,CAClC,EACDqT,gCAAAA,CAAiCpD,EAAOjQ,GACtCiQ,EAAMqB,wBAA0BtR,CACjC,EACDsT,kCAAAA,CAAmCrD,EAAOjQ,GACxCiQ,EAAMsB,0BAA4BvR,CACnC,EACDuT,8BAAAA,CAA+BtD,EAAOjQ,GACpCiQ,EAAMmB,0BAA0BpR,EAAQ5H,QAAU4H,EAAQ4Q,KAC3D,EACDN,KAAAA,CAAML,GAAS5O,OAAOyF,OAAOmJ,EAAOM,EAAe,GCtBxCA,EAA4B,CACvCY,MAAO,GACPC,0BAA2B,CAAC,EAC5BC,yBAA0B,GAC1BC,wBAAyB,GACzBC,0BAA2B,GAC3B4B,mBAAoB,IAGTlD,EAAQM,EAEfI,GAAa,EAEnB,OACEA,WADa,EAEbV,MAFa,EAGbvY,QAHa,EAIbyY,QAJa,EAKbE,UAASA,GCnBJ,MAAM3Y,EAA8C,CACzDkZ,KAAAA,CAAMX,GAAS,OAAOA,EAAMW,KAAO,GCLxB1S,EAAW,WCKXiS,EAA8C,CACzD,cAAMqD,EAAS,OAAEzb,IACf,MAAMoB,QAAiBN,EAAAA,IAAIC,IAAI,GAAGoF,SAClC,OAAwB,MAApB/E,EAASf,QACXL,EAAO,iBAAkB,CAAE6Y,MAAOzX,EAAShB,OACpCgB,EAAShB,OAEhBJ,EAAO,cAAeoB,IACf,EAEV,GCXUkX,EAAuC,CAClDa,cAAAA,CAAejB,EAAOjQ,GACpBiQ,EAAM3X,OAAQ,EACd2X,EAAMW,MAAQ5Q,EAAQ4Q,KACvB,EACD1X,WAAAA,CAAY+W,GACVA,EAAM3X,OAAQ,EACd2X,EAAMW,MAAQ,EACf,EACDN,KAAAA,CAAML,GAAS5O,OAAOyF,OAAOmJ,EAAOM,EAAe,GCRxCA,EAA4B,CACvCjY,OAAO,EACPsY,MAAO,IAGIX,EAAQM,EAEfI,GAAa,EAEnB,OACEA,WADa,EAEbV,MAFa,EAGbvY,QAHa,EAIbyY,QAJa,EAKbE,UAASA,GCfJ,MAAM3Y,EAA8C,CACzD6J,KAAAA,CAAM0O,GAAS,OAAOA,EAAM1O,KAAO,EACnCkS,WAAaxD,GAAWtL,GACnBtD,OAAOC,KAAK2O,EAAM1O,OAAO+C,SAASK,GAC5BsL,EAAM1O,MAAMoD,GACd,CAAC,EAEV+O,SAAWzD,GAAWzX,IACpB,MAAMmb,EAAYtS,OAAO0F,OAAOkJ,EAAM1O,OAAOqS,MAAKlP,GAAQA,EAAKlM,KAAOA,IACtE,OAAOmb,GAAwB,CAAC,CAAhC,EAEFE,eAAiB5D,GAAWtL,GACvBtD,OAAOC,KAAK2O,EAAM1O,OAAO+C,SAASK,GAC5BsL,EAAM1O,MAAMoD,GAAYnM,GAC1B,GAETsb,aAAe7D,GAAW/D,GACrB7K,OAAOC,KAAK2O,EAAM8D,UAAUzP,SAAS4H,EAAOzQ,YACtCwU,EAAM8D,SAAS7H,GAEjB,GAET8H,YAAc/D,GAAW/D,GACpB7K,OAAOC,KAAK2O,EAAMgE,SAAS3P,SAAS4H,EAAOzQ,YACrCwU,EAAMgE,QAAQ/H,GAChB,ICrBXzT,EAAAA,GAAAA,KAAauC,EAAAA,GAUN,MAAMmV,EAA8C,CACzD,mBAAM+D,CAAclL,GAAG,QAAEmL,EAAF,OAAWjI,EAAX,SAAmBkI,IACxC,IACE,MAAMjb,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,uBAA6B,CAAEiI,UAASC,aACrF,OAA2B,MAApBjb,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,sBAAM+b,CAAiBrL,GAAG,QAAEmL,EAAF,SAAWC,EAAX,OAAqBlI,IAC7C,IACE,MAAM/S,QAAiBN,EAAAA,IAAIgV,OAAO,aAAa3B,iBAAsBkI,IAAY,CAAEjc,KAAM,CAAEgc,aAO3F,OANwB,MAApBhb,EAASf,QACXsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAMpB,EAAAA,GAAAA,EAAU,qBAGbU,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,sBAAMgc,CAAiBtL,EAAGkD,GACxB,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,kBAC5C,OAA2B,MAApB/S,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,kBAAMic,CAAavL,GAAG,OAAEkD,EAAF,QAAUlM,IAC9B,IACE,MAAM7G,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,kBAAwBlM,GACrE,OAA2B,MAApB7G,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,kBAAMkc,CAAaxL,GAAG,SAAEoL,EAAF,OAAYlI,IAChC,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,YAAiBkI,YAC7D,OAA2B,MAApBjb,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,gBAAMmc,EAAW,OAAE1c,IACjB,IACE,MAAMoB,QAAiBN,EAAAA,IAAIC,IAAI,2BAE/B,YADwB,MAApBK,EAASf,QAAgBL,EAAO,mBAAoBoB,EAAShB,MAElE,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,uBAAMoc,CAAkB1L,GAAG,aAAE2L,EAAF,KAAgBC,EAAhB,OAAsB1I,IAC/C,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,aAAmB,CAAEjH,OAAQ,CAAE0P,eAAcC,UACzF,OAA2B,MAApBzb,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,mBAAMuc,EAAc,OAAE9c,GAAUmU,GAC9B,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,cAC5C,GAAuB,MAApB/S,EAASf,OAEV,OADAL,EAAO,sBAAuB,CAAEgc,SAAU5a,EAAShB,KAAK2c,gBAAiB5I,WAClE/S,EAAShB,KAAK2c,gBAChBzc,QAAQ+B,IAAI,+BAAgCjB,EACpD,CACD,MAAOb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACD,mBAAMyc,CAAc/L,EAAGkD,GACrB,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,UAC5C,OAA2B,MAApB/S,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,uBAAM0c,CAAkBhM,EAAGkD,GACzB,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,cAC5C,OAA2B,MAApB/S,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,uBAAM2c,CAAkBjM,EAAGkD,GACzB,IACE,MAAM/S,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,oBAC7C,OAA2B,MAApB/S,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAOb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACD,oBAAM4c,CAAelM,GAAG,SAACoL,EAAD,OAAWlI,IACjC,IACI,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,YAAiBkI,eAC7D,GAAIjb,EAASf,OAAS,IACpB,MAAMe,EAGR,OAAOA,EAAShB,IACnB,CACD,MAAMG,GAEJ,MADAY,EAAAA,EAAAA,aAAY,CAAEC,SAAUb,EAAOc,OAAQd,EAAMc,SACvCd,CACP,CACF,EACD,iBAAM6c,CAAYnM,GAAG,SAACoL,EAAD,OAAWlI,IAC9B,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,YAAiBkI,KAC7D,OAA2B,MAApBjb,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,kBAAM8c,EAAa,OAAErd,GAAUmU,GAC7B,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,aAC5C,GAAwB,MAApB/S,EAASf,OAAgB,CAC3B,IAAI6b,EAAU9a,EAAShB,KAAK8b,QAAQ3N,KAAK+O,IAChC,CAACxT,MAAOwT,EAAO7c,GAAIqB,KAAMwb,EAAOhD,gBAIzC,OAFA4B,EAAU,CAAC,CAACpS,MAAO,EAAGhI,KAAM,6BAA6Byb,OAAOrB,GAChElc,EAAO,qBAAsB,CAAEkc,UAAS/H,WACjC+H,CACR,CACF,CACD,MAAM3b,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,sBAAMid,EAAiB,OAAExd,GAAUmU,GACjC,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,kBAC5C,GAAwB,MAApB/S,EAASf,OAAgB,CAC3B,MAAM6b,EAAU9a,EAAShB,KAAK8b,QAE9B,OADAlc,EAAO,qBAAsB,CAAEkc,UAAS/H,WACjC+H,CACR,CACF,CACD,MAAM3b,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,0BAAMkd,CAAqBxM,GAAG,eAACyM,EAAD,OAAiBvJ,IAC7C,IACE,MAAM/S,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,2BAAiC,CAACuJ,mBAC/E,OAA2B,MAApBtc,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,kBAAMod,CAAa1M,GAAG,OAAEkD,EAAF,QAAUlM,IAC9B,IACE,MAAM7G,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBlM,EAAQxH,UAAWwH,GACjF,OAA2B,MAApB7G,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,gBAAMqd,CAAW3M,GAAG,OAAEkD,EAAF,QAAUlM,IAC5B,IACE,MAAM7G,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,WAAiBlM,GAC9D,OAA2B,MAApB7G,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,oBAAMsd,CAAe5M,GAAG,SAAE+K,EAAF,OAAY7H,IAClC,IACE,MAAM/S,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,aAAmB,CAAE6H,WAAU8B,SAAU3J,IACtF,OAA2B,MAApB/S,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAOb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACD,oBAAMwd,CAAe9M,GAAG,SAAE+K,EAAF,OAAY7H,IAClC,MAAM/S,QAAiBN,EAAAA,IAAIgV,OAAO,aAAa3B,cAAmB6H,EAASgC,KAAK,QAChF,OAA2B,MAApB5c,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,EACD,uBAAM6c,CAAkBhN,EAAGkD,GACzB,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,yBAC5C,OAA2B,MAApB/S,EAASf,OAAiBe,EAAShB,KAAOgB,CAClD,CACD,MAAMb,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,GC1LU+X,EAAuC,CAClDnX,WAAAA,CAAY+W,GACVA,EAAM3X,OAAQ,EACd2X,EAAM1O,MAAQ,CAAC,CAChB,EACD0U,mBAAAA,CAAoBhG,EAAOjQ,GACzBiQ,EAAM8D,SAAS/T,EAAQkM,QAAUlM,EAAQ+T,QAC1C,EACDmC,kBAAAA,CAAmBjG,EAAOjQ,GACxBiQ,EAAMgE,QAAU,IAAKhE,EAAMgE,QAAS,CAACjU,EAAQkM,QAASlM,EAAQiU,QAC/D,EACDkC,gBAAAA,CAAiBlG,EAAOjQ,GACtB,MAAMoW,EAAepW,EAAQqW,QAAO,CAAC9U,EAAOmD,KAC1CnD,EAAMmD,EAAKC,YAAcD,EAClBnD,IACN,CAAC,GACJ0O,EAAM1O,MAAQ6U,EACdnG,EAAM3X,OAAQ,CACf,EACDgY,KAAAA,CAAML,GAAS5O,OAAOyF,OAAOmJ,EAAOM,EAAe,GClBxCA,EAA4B,CACvCjY,OAAO,EACPyb,SAAU,CAAC,EACXE,QAAS,CAAC,EACV1S,MAAO,CAAC,GAGG0O,EAAQM,EAEfI,GAAa,EAEnB,OACEA,WADa,EAEbV,MAFa,EAGbvY,QAHa,EAIbyY,QAJa,EAKbE,UAASA,GCjBJ,MAAM3Y,EAA8C,CACzD4e,QAAUrG,GAAW/D,GAA4B+D,EAAMqG,QAAQpK,ICIjEzT,EAAAA,GAAAA,KAAauC,EAAAA,GAEN,MAAMmV,EAA8C,CACzD,kBAAMoG,EAAa,OAAExe,GAAUmU,GAC7B,IACE,MAAM/S,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,qBAC5C,GAAwB,MAApB/S,EAASf,OAEX,OADAL,EAAO,qBAAsB,CAACye,YAAard,EAAShB,KAAM+T,WACnD/S,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,aAAMyZ,EAAQ,SAAE9K,IACF,OAAEiF,EAAF,OAAUuK,IACtB,IACE,MAAMtd,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBuK,EAAOC,mBACrE,GAAwB,MAApBvd,EAASf,OAMX,OALAsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAO,GAAGpB,EAAAA,GAAAA,EAAU,eAAege,EAAO5S,YAAYpL,EAAAA,GAAAA,EAAU,uBAChEsB,KAAM,IAAMkN,EAAS,YAAa,CAAEiF,SAAQzN,OAAQgY,EAAOC,YAEtDvd,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACA,iBAAM2Z,EAAY,SAAEhL,IACF,OAAEiF,EAAF,QAAUyK,IAC1B,IACE,MAAMC,EAAUD,EAAQrQ,KAAImQ,GAAUA,EAAOC,UAASX,KAAK,KACrD5c,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,wBAA8B,CAAE0K,YAC7E,GAAwB,MAApBzd,EAASf,OACX,OAAOe,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,eAAM4Z,EAAU,SAAEjL,IAAY,OAAEiF,EAAF,OAAUzN,IACtC,IACE,aAAawI,EAAS,aAAc,CAAEiF,SAAQzN,UAC/C,CACD,MAAMnG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAMka,EAAO,SAAEvL,IACF,OAAEiF,EAAF,OAAUuK,EAAV,OAAkBpB,EAAlB,QAA0B5C,IAErC,IACE,MAAMtZ,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBuK,EAAOC,iBAAkB,CAAErB,SAAQ5C,YACjG,GAAwB,MAApBtZ,EAASf,OAMX,OALAsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAO,GAAGpB,EAAAA,GAAAA,EAAU,eAAege,EAAO5S,YAAYpL,EAAAA,GAAAA,EAAU,4BAChEsB,KAAM,IAAMkN,EAAS,WAAY,CAAEiF,SAAQzN,OAAQgY,EAAOC,YAErDvd,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,gBAAMue,EAAW,SAAE5P,IACN,OAAEiF,EAAF,QAAUyK,EAAV,OAAmBtB,EAAnB,QAA2B5C,IAEtC,IACE,MAAMmE,EAAUD,EAAQrQ,KAAImQ,GAAUA,EAAOC,UAASX,KAAK,KACrD5c,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,uBAA6B,CAAEmJ,SAAQ5C,UAASmE,YAC7F,GAAwB,MAApBzd,EAASf,OACX,OAAOe,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,cAAMoa,EAAS,SAAEzL,IAAY,OAAEiF,EAAF,OAAUzN,IACrC,IAEE,aADMwI,EAAS,oBAAqB,CAAEiF,SAAQzN,iBACjCwI,EAAS,eAAgBiF,EACvC,CACD,MAAM5T,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,uBAAMwe,EAAkB,SAAE7P,IAAY,OAAEiF,EAAF,OAAUzN,IAC9C,IACE,MAAMtF,QAAiBN,EAAAA,IAAIC,IAAI,aAAaoT,aAC5C,GAAI/S,EAAShB,KAAKmO,KAAKoF,GAA2BA,EAAEgL,UAASpS,SAAS7F,GAAS,CAC7E,MAAMpH,EAAO8B,EAAShB,KAAKyb,MAAMlI,GAAyBA,EAAEgL,UAAYjY,IACxE,YAAaiS,IAATrZ,GAAuBA,EAAK0f,gBAE3B,QADU9P,EAAS,aAAc,CAAEiF,SAAQzN,UAEjD,CAEC,aADM5F,EAAAA,IAAIiY,KAAK,aAAa5E,SAAe,CAAEzN,WACtCwI,EAAS,aAAc,CAAEiF,SAAQzN,UAE3C,CACD,MAAMnG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,gBAAM0e,CAAWhO,GAAG,OAAEkD,EAAF,OAAUzN,IAC5B,IACE,MAAMtF,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBzN,WAAiB,CAAEsY,WAAY,EAAGE,YAAa,IAC7G,GAAwB,MAApB9d,EAASf,OAKX,OAJAsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAM,GAAGpB,EAAAA,GAAAA,EAAU,UAAUgG,KAAUhG,EAAAA,GAAAA,EAAU,mBAE5CU,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,cAAM4e,EAAS,SAAEjQ,IACF,OAAEiF,EAAF,OAAUuK,IACvB,IACE,MAAMtd,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBuK,EAAOC,oBACrE,GAAwB,MAApBvd,EAASf,OAMX,OALAsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAM,GAAGpB,EAAAA,GAAAA,EAAU,UAAUge,EAAO5S,YAAYpL,EAAAA,GAAAA,EAAU,mBAC1DsB,KAAM,IAAMkN,EAAS,aAAc,CAAEiF,SAAQuK,aAExCtd,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACA,kBAAM6e,EAAa,SAAElQ,IACF,OAAEiF,EAAF,QAAUyK,IAC3B,IACE,MAAMC,EAAUD,EAAQrQ,KAAImQ,GAAUA,EAAOC,UAASX,KAAK,KACrD5c,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,yBAA+B,CAAC0K,YAC7E,GAAwB,MAApBzd,EAASf,OACX,OAAOe,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,gBAAM8e,EAAW,SAAEnQ,IACF,OAAEiF,EAAF,OAAUuK,IACzB,IACE,MAAMtd,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBuK,EAAOC,sBACrE,GAAwB,MAApBvd,EAASf,OAMX,OALAsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAM,GAAGpB,EAAAA,GAAAA,EAAU,UAAUge,EAAO5S,YAAYpL,EAAAA,GAAAA,EAAU,qBAC1DsB,KAAM,IAAMkN,EAAS,WAAY,CAAEiF,SAAQuK,aAEtCtd,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACA,oBAAM+e,EAAe,SAAEpQ,IACF,OAAEiF,EAAF,QAAUyK,IAC7B,IACE,MAAMC,EAAUD,EAAQrQ,KAAImQ,GAAUA,EAAOC,UAASX,KAAK,KAErD5c,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,4BAAkC,CAAE0K,YACjF,GAAwB,MAApBzd,EAASf,OACX,OAAOe,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,kBAAMgf,CAAatO,GAAG,OAAEkD,EAAF,OAAUuK,IAC9B,IACE,MAAMtd,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBuK,EAAOC,yBACrE,GAAwB,MAApBvd,EAASf,OAKX,OAJAsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAM,GAAGpB,EAAAA,GAAAA,EAAU,UAAUge,EAAO5S,YAAYpL,EAAAA,GAAAA,EAAU,iCAErDU,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,EACA,sBAAMif,EAAiB,SAAEtQ,IACF,OAAEiF,EAAF,QAAUyK,IAC/B,IACE,MAAMC,EAAUD,EAAQrQ,KAAImQ,GAAUA,EAAOC,UAASX,KAAK,KACrD5c,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,+BAAqC,CAAE0K,YACpF,GAAwB,MAApBzd,EAASf,OACX,OAAOe,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,gCAAMkf,CAA2BxO,GAAG,OAACkD,EAAD,OAASuK,EAAT,mBAAiBgB,IAKnD,IACE,MAAMte,QAAiBN,EAAAA,IACpBiY,KAAK,aAAa5E,YAAiBuK,EAAOC,wCAAyC,CAAEe,uBACxF,GAAwB,MAApBte,EAASf,OAMX,OALAsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,UACPC,KAAM,GAAGpB,EAAAA,GAAAA,EAAU,yDAAyDge,EAAO5S,YACnF/J,QAAS,MAEJX,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,oCAAMof,CAA+B1O,GAAG,OAACkD,EAAD,QAASyK,EAAT,mBAAkBc,IAKxD,IACE,MAAMb,EAAUD,EAAQrQ,KAAImQ,GAAUA,EAAOC,UAASX,KAAK,KACrD5c,QAAiBN,EAAAA,IACpBiY,KAAK,aAAa5E,8CAAoD,CAAEuL,qBAAoBb,YAC/F,OAAOzd,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAMqf,CAAO3O,GACA,OAAEkD,EAAF,OAAUuK,IAErB,IACE,MAAMtd,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBuK,EAAOC,kBAOrE,OANwB,MAApBvd,EAASf,QACXsB,EAAAA,EAASC,MAAM,kBAAmB,CAChCC,MAAO,QACPC,KAAM,GAAGpB,EAAAA,GAAAA,EAAU,cAAcge,EAAO5S,YAAYpL,EAAAA,GAAAA,EAAU,sBAG3DU,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,gBAAMsf,CAAW5O,GACA,OAAEkD,EAAF,QAAUyK,IAEzB,IACE,MAAMC,EAAUD,EAAQrQ,KAAImQ,GAAUA,EAAOC,UAASX,KAAK,KACrD5c,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,uBAA6B,CAAE0K,YAC5E,OAAOzd,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,0BAAMuf,CAAqB7O,GACA,aAAE8O,EAAF,YAAgBC,EAAhB,OAA6B7L,EAA7B,OAAqCzN,IAE9D,IACE,MAAMtF,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,YAAiBzN,cAC9B,CAAEqZ,eAAcC,gBAChD,OAAO5e,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,mBAAM0f,CAAchP,EAAGiP,GACrB,IACE,MAAM9e,QAAiBN,EAAAA,IAAIiY,KAAK,mBAAoBmH,GACpD,OAAO9e,EAAShB,IACjB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACpC,EACD,YAAM4f,CAAOlP,GAAG,OAAEkD,EAAF,OAAUuK,IACxB,IACE,MAAMtd,QAAiBN,EAAAA,IAAIiY,KAAK,aAAa5E,kBAAwB,CACnEzN,OAAQgY,EAAOC,QACfyB,QAASjM,IAEX,GAAwB,MAApB/S,EAASf,OAAgB,OAAOe,EAAShB,IAC9C,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACrC,GCjRW+X,EAAuC,CAClD+H,kBAAAA,CAAmBnI,GAAO,YAAEuG,EAAF,OAAetK,IACvC+D,EAAMqG,QAAQpK,GAAUsK,CACzB,EACDlG,KAAAA,CAAML,GAAS5O,OAAOyF,OAAOmJ,EAAOM,EAAe,GCHxCA,EAA4B,CACvC+F,QAAS,CAAC,GAGCrG,EAAQM,EAEfI,IAAa,EAEnB,QACEA,WADa,GAEbV,MAFa,EAGbvY,QAHa,EAIbyY,QAJa,EAKbE,UAASA,GCdJ,MAAM3Y,GAA8C,CACzDkZ,KAAAA,CAAMX,GAAS,OAAOA,EAAMW,KAAO,EACnCzI,IAAAA,CAAK8H,GAAS,OAAOA,EAAM9H,IAAM,GCNtBjK,GAAW,YCKXiS,GAA8C,CACzD,aAAMqB,EAAQ,OAAEzZ,IAAU,GAAES,EAAF,SAAM0N,GAAW,IACzC,IACE,MAAM/M,QAAiBN,EAAAA,IAAIC,IAAI,GAAGoF,MAAY1F,IAAM,CAClDyM,OAAQ,CAAEiB,cAEZ,GAAwB,MAApB/M,EAASf,OAEX,OADAL,EAAO,wBAAyB,CAAEoQ,KAAMhP,EAAShB,OAC1CgB,EAAShB,IAEnB,CACD,MAAMG,IAASY,EAAAA,EAAAA,aAAYZ,EAAQ,CACnC,OAAO,CACR,GCdU+X,GAAuC,CAClDa,cAAAA,CAAejB,EAAOjQ,GACpBiQ,EAAMW,MAAQ5Q,EAAQ4Q,KACvB,EACDqC,qBAAAA,CAAsBhD,EAAOjQ,GAC3BiQ,EAAM9H,KAAOnI,EAAQmI,IACtB,EACDmI,KAAAA,CAAML,GAAS5O,OAAOyF,OAAOmJ,EAAOM,GAAe,GCNxCA,GAA4B,CACvCK,MAAO,GACPzI,KAAM,CAAC,GAGI8H,GAAQM,GAEfI,IAAa,EAEnB,QACEA,WADa,GAEbV,MAFa,GAGbvY,QAHa,GAIbyY,QAJa,GAKbE,UAASA,ICPXhO,EAAAA,WAAI+I,IAAIiN,EAAAA,IAER,MAAM5gB,GAAiC,CACrC6gB,QAAS,CACPnY,KADO,EAEPoY,qBAFO,EAGPpH,MAHO,EAIPqH,KAJO,EAKPjX,MALO,EAMPkX,gBANO,GAOPC,MAAKA,IAEPC,QAAS,EACPC,EAAAA,EAAAA,GAAqB,CAAEC,QAAS3d,OAAOmD,mBAI3C,WAAmBga,EAAAA,GAAAA,MAAsB5gB,G,iCCtBxC,SAAS+B,EAAEmW,EAAEmJ,GAAG,SAASpO,IAAI,MAAMlR,EAAEmW,EAAEvF,qBAAqB,UAAU,GAAG0O,EAAEnJ,EAAErF,cAAc,UAAUwO,EAAEvZ,KAAK,kBAAkBuZ,EAAErb,OAAM,EAAGqb,EAAEC,IAAI,kCAAkCvf,EAAEwf,WAAWC,aAAaH,EAAEtf,EAAG,IAAGA,EAAE0O,OAAO4Q,EAAE,SAASnJ,EAAEmJ,EAAEpO,GAAGlR,EAAE0O,OAAOgR,WAAWpU,KAAK,CAACqU,OAAOxJ,EAAEyJ,QAAQN,EAAE3gB,KAAKuS,GAAI,EAACoO,EAAEI,WAAW,GAAG,aAAavJ,EAAEpP,WAAW,OAAOmK,IAAIlR,EAAE6f,YAAY7f,EAAE6f,YAAY,SAAS3O,GAAGlR,EAAE4P,iBAAiB,OAAOsB,GAAE,EAAI,CAAla,CAAmaxP,OAAOP,SAASO,OAAOgN,QAAQ,WAAW,OAAO,CAAO,GAC5dhN,OAAOgN,OAAO,OAAQ,uC,wBCRtB,IAAI5B,EAAM,CACT,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,MACX,aAAc,MACd,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,gBAAiB,MACjB,aAAc,MACd,gBAAiB,MACjB,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,MACX,aAAc,MACd,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,WAAY,MACZ,cAAe,MACf,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,YAAa,MACb,eAAgB,MAChB,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,QAAS,MACT,aAAc,MACd,gBAAiB,MACjB,WAAY,MACZ,UAAW,KACX,aAAc,KACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,YAAa,MACb,eAAgB,MAChB,UAAW,KACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,gBAAiB,MACjB,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,OAIf,SAASgT,EAAeC,GACvB,IAAI/gB,EAAKghB,EAAsBD,GAC/B,OAAOE,EAAoBjhB,EAC5B,CACA,SAASghB,EAAsBD,GAC9B,IAAIE,EAAoBC,EAAEpT,EAAKiT,GAAM,CACpC,IAAI/f,EAAI,IAAIiY,MAAM,uBAAyB8H,EAAM,KAEjD,MADA/f,EAAEW,KAAO,mBACHX,CACP,CACA,OAAO8M,EAAIiT,EACZ,CACAD,EAAehY,KAAO,WACrB,OAAOD,OAAOC,KAAKgF,EACpB,EACAgT,EAAeK,QAAUH,EACzBI,EAAOC,QAAUP,EACjBA,EAAe9gB,GAAK,K,oBClSdohB,EAAOC,QAAU,CACfC,YAAY,EACZ,MAAApZ,CAAOE,EAAID,GACT,MAAM,GAAEG,EAAE,GAAEoB,EAAE,KAAE/J,EAAI,SAAEwO,EAAW,IAAOhG,GAGtCwE,MAAO4U,EAAU,YACjBtY,EAAW,MACXiC,EAAK,YACL2D,EAAW,MACXrG,EAAQ,CAAC,KACNgZ,GACD7hB,EAEJ,OAAO2I,EACL,MACA,CACEqE,MAAO,CAAC4U,EAAWtY,GACnBiC,MAAO,CAACA,EAAM2D,GACdrG,MAAOK,OAAOyF,OAAO,CAAC,YAAY,UAAU,MAAQ,6BAA6B,QAAU,aAAc9F,MACtGgZ,GAELrT,EAAS2O,OAAO,CAACxU,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,wYAE3C,E,oBCxBF4Y,EAAOC,QAAU,CACfC,YAAY,EACZ,MAAApZ,CAAOE,EAAID,GACT,MAAM,GAAEG,EAAE,GAAEoB,EAAE,KAAE/J,EAAI,SAAEwO,EAAW,IAAOhG,GAGtCwE,MAAO4U,EAAU,YACjBtY,EAAW,MACXiC,EAAK,YACL2D,EAAW,MACXrG,EAAQ,CAAC,KACNgZ,GACD7hB,EAEJ,OAAO2I,EACL,MACA,CACEqE,MAAO,CAAC4U,EAAWtY,GACnBiC,MAAO,CAACA,EAAM2D,GACdrG,MAAOK,OAAOyF,OAAO,CAAC,MAAQ,6BAA6B,QAAU,eAAgB9F,MAClFgZ,GAELrT,EAAS2O,OAAO,CAACxU,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,oLAE3C,E,mBCxBF4Y,EAAOC,QAAU,CACfC,YAAY,EACZ,MAAApZ,CAAOE,EAAID,GACT,MAAM,GAAEG,EAAE,GAAEoB,EAAE,KAAE/J,EAAI,SAAEwO,EAAW,IAAOhG,GAGtCwE,MAAO4U,EAAU,YACjBtY,EAAW,MACXiC,EAAK,YACL2D,EAAW,MACXrG,EAAQ,CAAC,KACNgZ,GACD7hB,EAEJ,OAAO2I,EACL,MACA,CACEqE,MAAO,CAAC,cAAc4U,EAAWtY,GACjCiC,MAAO,CAACA,EAAM2D,GACdrG,MAAOK,OAAOyF,OAAO,CAAC,YAAY,UAAU,MAAQ,6BAA6B,QAAU,cAAe9F,MACvGgZ,GAELrT,EAAS2O,OAAO,CAACxU,EAAG,OAAO,CAACW,YAAY,QAAQT,MAAM,CAAC,EAAI,mBAAmBF,EAAG,OAAO,CAACW,YAAY,QAAQT,MAAM,CAAC,EAAI,q3CAAq3CF,EAAG,OAAO,CAACW,YAAY,QAAQT,MAAM,CAAC,EAAI,wLAAwLF,EAAG,OAAO,CAACW,YAAY,QAAQT,MAAM,CAAC,EAAI,isDAAisDF,EAAG,OAAO,CAACW,YAAY,QAAQT,MAAM,CAAC,EAAI,ibAAibF,EAAG,OAAO,CAACW,YAAY,QAAQT,MAAM,CAAC,EAAI,0IAA0IF,EAAG,OAAO,CAACW,YAAY,QAAQT,MAAM,CAAC,EAAI,gIAEvnI,E,oBCxBF4Y,EAAOC,QAAU,CACfC,YAAY,EACZ,MAAApZ,CAAOE,EAAID,GACT,MAAM,GAAEG,EAAE,GAAEoB,EAAE,KAAE/J,EAAI,SAAEwO,EAAW,IAAOhG,GAGtCwE,MAAO4U,EAAU,YACjBtY,EAAW,MACXiC,EAAK,YACL2D,EAAW,MACXrG,EAAQ,CAAC,KACNgZ,GACD7hB,EAEJ,OAAO2I,EACL,MACA,CACEqE,MAAO,CAAC4U,EAAWtY,GACnBiC,MAAO,CAACA,EAAM2D,GACdrG,MAAOK,OAAOyF,OAAO,CAAC,YAAY,UAAU,MAAQ,6BAA6B,QAAU,aAAc9F,MACtGgZ,GAELrT,EAAS2O,OAAO,CAACxU,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,wHAE3C,E,oBCxBF4Y,EAAOC,QAAU,CACfC,YAAY,EACZ,MAAApZ,CAAOE,EAAID,GACT,MAAM,GAAEG,EAAE,GAAEoB,EAAE,KAAE/J,EAAI,SAAEwO,EAAW,IAAOhG,GAGtCwE,MAAO4U,EAAU,YACjBtY,EAAW,MACXiC,EAAK,YACL2D,EAAW,MACXrG,EAAQ,CAAC,KACNgZ,GACD7hB,EAEJ,OAAO2I,EACL,MACA,CACEqE,MAAO,CAAC4U,EAAWtY,GACnBiC,MAAO,CAACA,EAAM2D,GACdrG,MAAOK,OAAOyF,OAAO,CAAC,YAAY,UAAU,MAAQ,6BAA6B,QAAU,aAAc9F,MACtGgZ,GAELrT,EAAS2O,OAAO,CAACxU,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,yQAE3C,E,oBCxBF4Y,EAAOC,QAAU,CACfC,YAAY,EACZ,MAAApZ,CAAOE,EAAID,GACT,MAAM,GAAEG,EAAE,GAAEoB,EAAE,KAAE/J,EAAI,SAAEwO,EAAW,IAAOhG,GAGtCwE,MAAO4U,EAAU,YACjBtY,EAAW,MACXiC,EAAK,YACL2D,EAAW,MACXrG,EAAQ,CAAC,KACNgZ,GACD7hB,EAEJ,OAAO2I,EACL,MACA,CACEqE,MAAO,CAAC4U,EAAWtY,GACnBiC,MAAO,CAACA,EAAM2D,GACdrG,MAAOK,OAAOyF,OAAO,CAAC,YAAY,UAAU,MAAQ,6BAA6B,QAAU,aAAc9F,MACtGgZ,GAELrT,EAAS2O,OAAO,CAACxU,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,kVAE3C,E,oBCxBF4Y,EAAOC,QAAU,CACfC,YAAY,EACZ,MAAApZ,CAAOE,EAAID,GACT,MAAM,GAAEG,EAAE,GAAEoB,EAAE,KAAE/J,EAAI,SAAEwO,EAAW,IAAOhG,GAGtCwE,MAAO4U,EAAU,YACjBtY,EAAW,MACXiC,EAAK,YACL2D,EAAW,MACXrG,EAAQ,CAAC,KACNgZ,GACD7hB,EAEJ,OAAO2I,EACL,MACA,CACEqE,MAAO,CAAC4U,EAAWtY,GACnBiC,MAAO,CAACA,EAAM2D,GACdrG,MAAOK,OAAOyF,OAAO,CAAC,MAAQ,6BAA6B,QAAU,eAAgB9F,MAClFgZ,GAELrT,EAAS2O,OAAO,CAACxU,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,+xBAE3C,E","sources":["webpack://fc3_modtools-frontend/./src/helpers/authcheck.ts","webpack://fc3_modtools-frontend/./src/helpers/axios.ts","webpack://fc3_modtools-frontend/./src/helpers/constants.ts","webpack://fc3_modtools-frontend/./src/helpers/i18next-config.ts","webpack://fc3_modtools-frontend/./src/helpers/vuexReset.ts","webpack://fc3_modtools-frontend/./src/helpers/uuid.ts","webpack://fc3_modtools-frontend/./src/helpers/wsClient.ts","webpack://fc3_modtools-frontend/./src/App.vue?959a","webpack://fc3_modtools-frontend/./src/components/Snackbar.vue?c31d","webpack://fc3_modtools-frontend/./src/components/Snackbar.vue","webpack://fc3_modtools-frontend/./src/components/Snackbar.vue?83b4","webpack://fc3_modtools-frontend/./src/components/Snackbar.vue?8aa5","webpack://fc3_modtools-frontend/./src/mixins/Transitions.ts","webpack://fc3_modtools-frontend/./src/components/SecondaryNav.vue?f3c9","webpack://fc3_modtools-frontend/./src/components/SecondaryNav.vue","webpack://fc3_modtools-frontend/./src/components/SecondaryNav.vue?e624","webpack://fc3_modtools-frontend/./src/components/SecondaryNav.vue?1c6b","webpack://fc3_modtools-frontend/./src/components/Bottom.vue?27a3","webpack://fc3_modtools-frontend/./src/components/Bottom.vue","webpack://fc3_modtools-frontend/./src/components/Bottom.vue?3408","webpack://fc3_modtools-frontend/./src/components/Bottom.vue?41ae","webpack://fc3_modtools-frontend/./src/components/Top.vue?d6a4","webpack://fc3_modtools-frontend/./src/components/Top.vue","webpack://fc3_modtools-frontend/./src/components/Top.vue?4b59","webpack://fc3_modtools-frontend/./src/components/Top.vue?674c","webpack://fc3_modtools-frontend/./src/App.vue","webpack://fc3_modtools-frontend/./src/App.vue?7971","webpack://fc3_modtools-frontend/./src/App.vue?3a89","webpack://fc3_modtools-frontend/./src/views/RouterView.vue?ed01","webpack://fc3_modtools-frontend/./src/views/RouterView.vue","webpack://fc3_modtools-frontend/./src/router/routes.ts","webpack://fc3_modtools-frontend/./src/router/index.ts","webpack://fc3_modtools-frontend/./src/plugins/vuetify.ts","webpack://fc3_modtools-frontend/./src/plugins/vue_init.ts","webpack://fc3_modtools-frontend/./src/main.ts","webpack://fc3_modtools-frontend/./src/store/eventHub.ts","webpack://fc3_modtools-frontend/./src/store/auth/getters.ts","webpack://fc3_modtools-frontend/./src/store/auth/actions.ts","webpack://fc3_modtools-frontend/./src/store/auth/mutations.ts","webpack://fc3_modtools-frontend/./src/store/auth/index.ts","webpack://fc3_modtools-frontend/./src/store/moderator-preferences/getters.ts","webpack://fc3_modtools-frontend/./src/store/moderator-preferences/types.ts","webpack://fc3_modtools-frontend/./src/store/moderator-preferences/actions.ts","webpack://fc3_modtools-frontend/./src/store/moderator-preferences/mutations.ts","webpack://fc3_modtools-frontend/./src/store/moderator-preferences/index.ts","webpack://fc3_modtools-frontend/./src/store/posts/getters.ts","webpack://fc3_modtools-frontend/./src/store/posts/types.ts","webpack://fc3_modtools-frontend/./src/store/posts/actions.ts","webpack://fc3_modtools-frontend/./src/store/posts/mutations.ts","webpack://fc3_modtools-frontend/./src/store/posts/index.ts","webpack://fc3_modtools-frontend/./src/store/tags/getters.ts","webpack://fc3_modtools-frontend/./src/store/tags/types.ts","webpack://fc3_modtools-frontend/./src/store/tags/actions.ts","webpack://fc3_modtools-frontend/./src/store/tags/mutations.ts","webpack://fc3_modtools-frontend/./src/store/tags/index.ts","webpack://fc3_modtools-frontend/./src/store/towns/getters.ts","webpack://fc3_modtools-frontend/./src/store/towns/actions.ts","webpack://fc3_modtools-frontend/./src/store/towns/mutations.ts","webpack://fc3_modtools-frontend/./src/store/towns/index.ts","webpack://fc3_modtools-frontend/./src/store/town-memberships/getters.ts","webpack://fc3_modtools-frontend/./src/store/town-memberships/actions.ts","webpack://fc3_modtools-frontend/./src/store/town-memberships/mutations.ts","webpack://fc3_modtools-frontend/./src/store/town-memberships/index.ts","webpack://fc3_modtools-frontend/./src/store/users/getters.ts","webpack://fc3_modtools-frontend/./src/store/users/types.ts","webpack://fc3_modtools-frontend/./src/store/users/actions.ts","webpack://fc3_modtools-frontend/./src/store/users/mutations.ts","webpack://fc3_modtools-frontend/./src/store/users/index.ts","webpack://fc3_modtools-frontend/./src/store/index.ts","webpack://fc3_modtools-frontend/./src/helpers/helpscout.js","webpack://fc3_modtools-frontend/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://fc3_modtools-frontend/./src/assets/alerts.svg","webpack://fc3_modtools-frontend/./src/assets/facebook_f_brands.svg","webpack://fc3_modtools-frontend/./src/assets/logo.svg","webpack://fc3_modtools-frontend/./src/assets/main.svg","webpack://fc3_modtools-frontend/./src/assets/messages.svg","webpack://fc3_modtools-frontend/./src/assets/profile.svg","webpack://fc3_modtools-frontend/./src/assets/twitter_brands.svg"],"sourcesContent":["import Cookies from \"js-cookie\"\nimport { API, handleError, vueDomain } from '@/helpers/axios'\nimport {eventHub} from \"@/store/eventHub\";\nimport { UserSession } from '@/store/auth/types'\nimport wsClient from '@/helpers/wsClient'\nimport i18next from 'i18next'\nimport resetStore from '@/helpers/vuexReset'\nimport store from '@/store'\nimport {fc3MainHostname} from \"@/helpers/constants\";\n\nconst authAutoCheckTimeout = 30*60*1000 // 30 minutes (in ms)\n\nexport default {\n async init(): Promise {\n const check = await this.check()\n if(check && check.user) {\n this.setupAutocheck()\n return await this.websocketSetup(check)\n }\n return null\n },\n setupAutocheck(): void {\n const checkTimeout = store.getters['auth/checkTimeout']\n if(checkTimeout) {\n clearTimeout(checkTimeout)\n }\n const newTimeout = setTimeout( () => {\n this.refresh()\n }, authAutoCheckTimeout)\n store.commit('auth/checkTimeout', newTimeout)\n },\n async websocketSetup(check: UserSession): Promise {\n if(!check.user) return null // For typescript\n const wssAuthResp = await wsClient.wssAuth()\n if(wssAuthResp.data.status !== 'authenticated') console.error('wssAuth not authenticated')\n wsClient.initialize(check.user.id);\n if(i18next.language !== check.user.language) {\n i18next.changeLanguage(check.user.language)\n }\n return check\n },\n async refresh(): Promise {\n const check = await this.check()\n if(check && check.user) {\n this.setupAutocheck()\n return check\n } else {\n this.loginRedirect()\n return null\n }\n },\n async check(): Promise {\n try {\n const authcheck = await API.get('api/user-session')\n if((authcheck.status === 200 && authcheck.data.wss)\n || this.httpCodeSwitch(authcheck.status)) {\n return authcheck.data\n }\n else {\n console.debug('request failed authcheck!', authcheck)\n handleError({ response: {\n status: authcheck.status,\n config: {\n baseURL: vueDomain(),\n url: ' '\n }\n },\n config: {\n baseURL: vueDomain(),\n url: ' '\n }})\n return null\n }\n\n } catch (e) {\n // unauthenticated users wind up here\n if(e.response.status === 401 && e.response.data.errorMessage === 'Missing authentication') {\n eventHub.$emit('triggerSnackbar', {\n color: 'warning',\n text: i18next.t('It looks like you are not logged in. Redirecting you to login in 4 seconds.'),\n timeout: 4000,\n undo: this.loginRedirect,\n undoText: i18next.t('Go to login form')\n })\n setTimeout(() => { this.loginRedirect() }, 4000)\n\n } else if(e.response.status === 403 && e.response.data.errorMessage === 'Insufficient scope') {\n eventHub.$emit('triggerSnackbar', {\n color: 'warning',\n text: i18next.t('You do not have access to the requested page. Redirecting you in 3 seconds.'),\n timeout: 3000,\n undo: this.loggedInRedirect,\n undoText: i18next.t('Redirect now')\n })\n setTimeout(() => { this.loggedInRedirect() }, 3000)\n } else {\n resetStore()\n handleError(e)\n }\n return null\n }\n },\n httpCodeSwitch(code: number) : void | boolean {\n switch (code) {\n case 401: // User is unauthenticated\n console.log('redirecting for 401')\n this.loginRedirect()\n break\n case 403: // Unauthorized request\n console.log('redirecting for 403')\n location.href = 'https://' + vueDomain() + '/?redirected=unauthorized'\n break\n case 500: // server (or axios/browser) thinks something else is wrong.\n console.debug('httpCodeSwitch response status code 500: internal error. ')\n return true;\n default:\n console.debug('httpCodeSwitch response status code: ', code)\n return true\n }\n },\n loggedInRedirect(): void {\n location.href = (location.pathname === '/') ? `https://${fc3MainHostname}` : 'https://' + vueDomain()\n },\n loginRedirect(): void {\n wsClient.close('User redirected by authcheck')\n const redirectTarget = document.URL || 'https://' + vueDomain() + '/'\n // TODO: Cookie “redirect” will be soon rejected because it has the “sameSite” attribute set to “none” or an invalid value, without the “secure” attribute. To know more about the “sameSite“ attribute, read https://developer.mozilla.org/docs/Web/HTTP/Cookies\n Cookies.set('redirect', 'to='+redirectTarget, { domain: 'freecycle.org' })\n resetStore()\n location.href = `https://${fc3MainHostname}/login`\n }\n}\n","import axios from 'axios'\nimport authcheck from '@/helpers/authcheck'\nimport {eventHub} from \"@/store/eventHub\";\nimport i18next from 'i18next'\nimport i18nextConfig from '@/helpers/i18next-config'\n\ni18next.init(i18nextConfig)\n\ninterface ResponseData {\n status: number;\n config: Record;\n}\n\ninterface ResponseError {\n response: ResponseData;\n config: {\n baseURL: string;\n url: string;\n };\n}\n\nexport const hapiDomain = (): string => {\n if (process.env.VUE_APP_ENVIRONMENT === 'development') {\n return 'mt.freecycle.org:8000'\n }\n return window.location.host // just the same as where we are. because everywhere but local dev, nginx sorts out the port.\n}\n\nexport const vueDomain = (): string => {\n if (process.env.VUE_APP_ENVIRONMENT === 'development') {\n return 'mt.freecycle.org:8080'\n }\n return window.location.host\n}\n\nexport const imagesDomain = (): string => {\n switch (process.env.VUE_APP_ENVIRONMENT) {\n case 'production':\n return 'images.freecycle.org'\n case 'staging':\n return 'devimages.freecycle.org'\n case 'development':\n return 'devimages.freecycle.org'\n default:\n return 'devimages.freecycle.org'\n }\n}\n\nexport const API = axios.create({\n baseURL: 'https://' + hapiDomain(),\n withCredentials: true,\n validateStatus: function (status) {\n return status < 500; // maybe need to play with this... this controls if axios rejects promise...\n }\n})\n\n// This pops up a snackbar error when Axios gets an error response, or if there's some other error, alerts in a different way.\nexport const handleError = (e: ResponseError): void => {\n let text;\n if (!e.response) {\n authcheck.httpCodeSwitch(500) // why pretend like it's a 500 when it's not?\n text = `${i18next.t('backend API seems to be down.')} ${e.config.baseURL}/${e.config.url}: ${e.toString()}`\n text = text + i18next.t('Sorry, please reload, or try again later. If problem persists, use help beacon below.');\n } else {\n authcheck.httpCodeSwitch(e.response.status)\n text = `${i18next.t('Error talking to backend API on')} ${e.config.baseURL}/${e.config.url}: ${e.toString()}`\n }\n\n eventHub.$emit('triggerSnackbar', {\n color: 'error',\n text,\n timeout: 12000\n })\n}\n","export const spamcontrolUserId = 29883384\nconst mainHost = (): string => {\n switch (process.env.VUE_APP_ENVIRONMENT) {\n case 'development':\n case 'staging':\n return 'newdev.freecycle.org'\n default:\n return 'www.freecycle.org'\n }\n};\n\nexport const fc3MainHostname = mainHost();\n\nexport const offer = 1;\nexport const taken = 2;\nexport const wanted = 3;\nexport const received = 4;\nexport const lend = 9;\nexport const borrow = 10;\n\nexport const vue_app_version = require('../../package.json').version\n","import i18next, { InitOptions } from 'i18next'\n\nconst isDevMode = process.env.VUE_APP_ENVIRONMENT === 'development'\nconst loadPathDomain = window.location.hostname + (isDevMode ? ':8000' : '')\n\nconst findSimpleLang = () => {\n if(Array.isArray(navigator.languages) && navigator.languages.length > 0) {\n const hyphenIndex = navigator.languages[0].indexOf('-')\n return (hyphenIndex > -1) ? navigator.languages[0].substring(0, hyphenIndex) : navigator.languages[0]\n }\n return navigator.language\n}\n\nconst i18nextConfig: InitOptions = {\n debug: (process.env.i18_DEBUG) ? (process.env.i18_DEBUG === 'true') : false,\n lng: i18next.language || findSimpleLang(),\n fallbackLng: 'en', // the key is the fallback\n fallbackNS: '',\t\t// not using namespaces\n returnEmptyString: false,\n // allow keys to be phrases having `:`, `.`\n nsSeparator: false,\n keySeparator: false,\n backend: {\n loadPath: `https://${loadPathDomain}/api/translations/${i18next.language || findSimpleLang()}.json`\n },\n parseMissingKeyHandler: (key: string) => {\n //isDevMode && console.debug('###### parseMissingKey: ', key);\n return isDevMode ? `»${key}«` : key;\n }\n}\n\nexport default i18nextConfig\n","import store from '@/store'\n\nconst resetStore = async function(): Promise {\n store.commit('auth/reset')\n store.commit('moderatorPreferences/reset')\n store.commit('posts/reset')\n store.commit('tags/reset')\n store.commit('townMemberships/reset')\n store.commit('towns/reset')\n store.commit('users/reset')\n}\n\nexport default resetStore\n","export default function(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n","import authcheck from '@/helpers/authcheck'\nimport { API, handleError, hapiDomain } from '@/helpers/axios'\nimport generateUuid from '@/helpers/uuid'\nimport { eventHub } from '@/store/eventHub'\nimport { UserSession } from '@/store/auth/types'\n\nconst socket = new WebSocket('wss://' + hapiDomain() + '/wss')\nconst basePath = '/wss/'\n\ninterface WssSendObject {\n type: string;\n id?: string | null;\n version: string;\n auth?: string | Record | null;\n subs?: string[];\n path?: string;\n}\n\nconst wsClient = {\n authCheck: async (): Promise => {\n return await authcheck.init()\n },\n close: (reason?: string, code = 1000): void => {\n // https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes\n socket.close(code, reason)\n },\n wssAuth: async (): Promise<{data: {authenticated: boolean, status: string}}> => {\n try {\n const wssAuth = await API.get('nes/auth')\n sessionStorage.setItem('wss-token', wssAuth.data.token)\n return wssAuth\n }\n catch(error) { handleError(error) }\n return { data: { authenticated: false, status: 'unauthenticated' } }\n },\n initialize: (userId: number): void => {\n let websocketClientId = sessionStorage.getItem('websocketId')\n if(websocketClientId === null) {\n const newWebsocketClientId = generateUuid()\n sessionStorage.setItem('websocketId', newWebsocketClientId)\n websocketClientId = newWebsocketClientId\n }\n wsClient.sendHello(userId, websocketClientId)\n socket.onmessage = wsClient.handleMessage\n socket.onerror = (error) => console.error('websocket error: ', error)\n socket.onopen = (event) => eventHub.$emit('websocketOpen', event)\n socket.onclose = (event) => wsClient.reopenSocket(event, userId)\n return\n },\n reopenSocket(event: { reason: string; wasClean: boolean; code: number; }, userId: number) {\n if(event && event.reason === '') {\n wsClient.initialize(userId)\n }\n },\n sendHello(userId: number, websocketClientId?: string | null): void {\n if(!websocketClientId)\n websocketClientId = sessionStorage.getItem('websocketId')\n if(websocketClientId) {\n wsClient.send({\n type: 'hello',\n id: websocketClientId,\n version: '2',\n subs: ['/wss/user/' + userId + '/session']\n })\n }\n },\n handleMessage: (message: { data: string }): void => {\n const msgData = JSON.parse(message.data)\n let eventName = ''\n switch(msgData.type) {\n case 'hello':\n eventHub.$emit('websocketHello')\n break\n case 'ping':\n wsClient.send({\n type: 'ping',\n version: '2'\n })\n break\n case 'sub':\n if(msgData.statusCode === 400 && msgData.payload.message === 'Connection is not initialized') {\n wsClient.subscribe(msgData.path)\n }\n break\n case 'pub':\n eventName = `websocketPub-${msgData.path}`.replace('/', '-')\n eventHub.$emit(eventName, msgData.message.message)\n break\n default:\n // TODO: Handle message indicating user is unauthenticated\n // UPDATE: Not sure what triggers that message anymore. Changed to a console.error to spot it more easily\n console.error('we received a ' + msgData.type + ' message from Hapi WSS', msgData)\n break\n }\n },\n send: (message: WssSendObject): void => {\n if(!message.auth && sessionStorage.getItem('wss-token'))\n message.auth = sessionStorage.getItem('wss-token')\n if(!message.id && sessionStorage.getItem('websocketId'))\n message.id = sessionStorage.getItem('websocketId')\n return socket.send(JSON.stringify(message))\n },\n subscribe: (path: string): void => {\n const statusCheck = setInterval(() => {\n if (socket.readyState === socket.OPEN) {\n clearInterval(statusCheck)\n wsClient.send({\n type: 'sub',\n path: basePath + path,\n version: '2'\n })\n } else {\n // console.log('readyState', socket.readyState)\n }\n }, 1000)\n }\n}\n\nexport default wsClient\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.user)?_c('v-app',[_c('Top',{attrs:{\"towns\":_vm.townsAlpha}}),_c('SecondaryNav',{attrs:{\"towns\":_vm.townsAlpha}}),_c('transition',{on:{\"enter\":_vm.enter,\"leave\":_vm.leave}},[(Object.keys(_vm.towns).length && _vm.wssHelloReceived)?_c('router-view',{staticClass:\"row\",attrs:{\"id\":\"content\"}}):_vm._e()],1),_c('Bottom')],1):_vm._e(),_c('Snackbar')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"snackbar-wrapper\"},[_c('v-snackbar',{attrs:{\"top\":\"\",\"right\":\"\",\"timeout\":\"-1\",\"color\":_vm.color,\"light\":_vm.color === 'warning'},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \"),(typeof _vm.undoMethod === 'function')?_c('v-btn',{attrs:{\"outlined\":\"\"},on:{\"click\":_vm.undo}},[_vm._v(\" \"+_vm._s(_vm.undoText)+\" \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue'\nimport { eventHub } from '@/store/eventHub'\n\ninterface SnackbarEvent {\n color: string;\n id: string;\n text: string;\n timeout: number | null;\n undo: () => void | null;\n undoText: string | null;\n}\n\nexport default Vue.extend({\n name: 'Snackbar',\n\n data() {\n return {\n color: '',\n text: '',\n timeout: null as number | null,\n undoMethod: null as (() => void) | null,\n undoText: this.$t('Undo') as string | null,\n visible: false\n }\n },\n\n computed: {\n smartTimeout(): number {\n return typeof this.timeout === 'number' ? this.timeout : 5000\n }\n },\n\n created() {\n eventHub.$on('triggerSnackbar', this.trigger)\n },\n\n methods: {\n trigger(e: SnackbarEvent) {\n Vue.set(this, 'color', this.$vuetify.theme.themes.light[e.color])\n Vue.set(this, 'text', e.text)\n Vue.set(this, 'timeout', e.timeout)\n Vue.set(this, 'undoMethod', e.undo)\n if(e.undoText)\n Vue.set(this, 'undoText', e.undoText)\n Vue.set(this, 'visible', true)\n },\n undo() {\n this.visible = false\n if (typeof this.undoMethod === 'function') this.undoMethod()\n }\n },\n\n watch: {\n visible(val) {\n if (val) setTimeout(() => { this.visible = false }, this.smartTimeout)\n }\n }\n})\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Snackbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Snackbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Snackbar.vue?vue&type=template&id=c87ab9fe&\"\nimport script from \"./Snackbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./Snackbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Snackbar.vue?vue&type=style&index=0&id=c87ab9fe&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\ninstallComponents(component, {VBtn,VSnackbar})\n","import Vue from 'vue'\n\ndeclare module 'vue/types/vue' {\n interface Vue {\n enter(el: HTMLElement, done: TimerHandler): void;\n leave(el: HTMLElement, done: TimerHandler): void;\n }\n}\n\nexport default Vue.mixin({\n name: 'Transitions',\n\n methods: {\n enter: function (el: HTMLElement, done: TimerHandler): void {\n el.style.transition = 'opacity 600ms linear'\n\t\t\tel.style.opacity = '1'\n\t\t\tsetTimeout(done, 600)\n },\n\t\tleave:function (el: HTMLElement, done: TimerHandler): void {\n el.style.transition = 'opacity 200ms linear'\n\t\t\tel.style.opacity = '0'\n\t\t\tsetTimeout(done, 200)\n }\n }\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"row logged-in-as\"},[_c('span',[_c('MainLink'),_vm._v(\" \"+_vm._s(_vm.$t('Modtools'))+\" v\"+_vm._s(_vm.version)+\" \")],1),_vm._v(\" \"+_vm._s(_vm.$t('You are logged in as'))+\" \"+_vm._s(_vm.user.username)+\" (\"+_vm._s(_vm.user.email)+\"). \"+_vm._s(_vm.$t('You are moderator of'))+\" \"+_vm._s(_vm.moderatedTowns.length)+\" \"+_vm._s(_vm.$t((\"town\" + (_vm.moderatedTowns.length > 1 ? 's' : ''))))+\". \")]),_c('div',{staticClass:\"horizontal_tabs large-up\",attrs:{\"id\":\"main_nav\"}},[_c('ul',{staticClass:\"tabs\"},[_c('v-menu',{attrs:{\"open-on-hover\":\"\",\"close-on-content-click\":false,\"max-height\":\"70vh\",\"offset-y\":\"\",\"attach\":\"#towns-menu\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('li',_vm._g({staticClass:\"tabs-title\",attrs:{\"id\":\"towns-menu\"}},on),[_c('router-link',{attrs:{\"to\":\"/\",\"aria-selected\":_vm.$route.path === '/' || _vm.$route.path.includes('/preferences')}},[_vm._v(\" \"+_vm._s(_vm.townsMenuLabel)+\" ↓ \")])],1)]}}])},[_c('v-list',[(Object.keys(_vm.towns).length > 15)?_c('v-text-field',{attrs:{\"background-color\":\"#fff\",\"clearable\":\"\",\"filled\":\"\",\"hide-details\":\"\",\"label\":\"Filter towns list\",\"placeholder\":\"Type to filter towns\"},model:{value:(_vm.townsSearchString),callback:function ($$v) {_vm.townsSearchString=$$v},expression:\"townsSearchString\"}}):_vm._e(),_vm._l((_vm.townsFiltered),function(town){return _c('v-list-item',{key:town.uniqueName,on:{\"click\":function($event){return _vm.$router.push((\"/towns/\" + (town.uniqueName) + \"/posts\"))}}},[_c('v-list-item-title',[_vm._v(_vm._s(town.name))])],1)}),(!_vm.townsFiltered.length)?_c('v-list-item',[_c('v-list-item-title',[_vm._v(\"— No towns found —\")])],1):_vm._e()],2)],1),(_vm.$route.path === '/')?[_c('v-tooltip',{attrs:{\"max-width\":\"175\",\"right\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('li',{staticClass:\"refresh-towns-icon-wrapper\"},[_c('v-icon',_vm._g({staticClass:\"refresh-towns-icon\",on:{\"click\":function($event){return _vm.refreshTowns()}}},on),[_vm._v(\"mdi-autorenew\")])],1)]}}],null,false,2475160435)},[_c('span',[_c('b',[_vm._v(_vm._s(_vm.$t('Click to refresh your list of towns.')))])])])]:_vm._e(),(_vm.$route.params.townName)?_vm._l((_vm.townLinks),function(link){return _c('li',{key:link.path,class:['tabs-title', {'is-active': _vm.$route.path === link.path}]},[_c('router-link',{attrs:{\"to\":(\"/towns/\" + (_vm.$route.params.townName) + \"/\" + (link.path)),\"aria-selected\":_vm.$route.path.includes(link.path)}},[_vm._v(\" \"+_vm._s(_vm.$t(link.text))+\" \")])],1)}):_vm._e()],2)]),_c('div',{staticClass:\"secondary_nav\"},[_c('div',{staticClass:\"horizontal_tabs\"},[_c('ul',{staticClass:\"tabs\"},[(_vm.$route.path === '/' || _vm.$route.path === '/preferences')?[_c('li',{staticClass:\"tabs-title\"},[_c('router-link',{attrs:{\"to\":\"/\",\"aria-selected\":_vm.$route.path === '/'}},[_vm._v(_vm._s(_vm.$t('Towns')))])],1),_c('li',{staticClass:\"tabs-title\"},[_c('router-link',{attrs:{\"to\":\"/preferences\",\"aria-selected\":_vm.$route.path === '/preferences'}},[_vm._v(\" \"+_vm._s(_vm.$t('Email Settings'))+\" \")])],1)]:_vm._e(),(_vm.$route.path.includes('/towns/'))?[_vm._l((_vm.townLinks),function(link,index){return [(_vm.$route.path.split('/')[3] === link.path)?[_vm._l((link.children),function(child,childIndex){return [_c('li',{key:index + '-' + childIndex,staticClass:\"tabs-title\"},[_c('router-link',{attrs:{\"to\":(\"/towns/\" + (_vm.$route.params.townName) + \"/\" + (link.path === child.pathEnding ? '' : ((link.path) + \"/\")) + (child.pathEnding)),\"aria-selected\":_vm.$route.path.endsWith((\"\" + (child.pathEnding)))}},[_vm._v(\" \"+_vm._s(_vm.$t(child.title))+\" \")])],1)]})]:_vm._e()]})]:_vm._e()],2)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue, { VueConstructor } from 'vue'\nimport { eventHub } from '@/store/eventHub'\nimport { mapState } from 'vuex'\nimport MainLink from '@/assets/main.svg'\nimport { vue_app_version } from '@/helpers/constants'\n\nexport default Vue.extend({\n name: 'SecondaryNav',\n props: ['towns'],\n components: { MainLink: MainLink as VueConstructor },\n computed: {\n ...mapState('auth', ['user']),\n townsMenuLabel(): string {\n // TODO - can get unique name easier via vuex like this, kinda: this.$store.getters['towns/townByName'](town.name));\n let names : {[key: string] : string} = {}\n this.towns.forEach((town: { uniqueName: string; name: string }) => { names[town.uniqueName] = town.name } )\n return (this.$route.params.townName && Object.keys(names).includes(this.$route.params.townName))\n ? `${this.$t('Moderating')}: ${names[this.$route.params.townName]}`\n : this.$t('Overview')\n },\n moderatedTowns(): number[] {\n return this.user.accesses\n .filter((access: { privilege: { id: number } }) => [3, 4].includes(access.privilege.id))\n .map((access: { to: number }) => access.to)\n .filter((value: number, index: number, self: number[]) => self.indexOf(value) === index)\n }\n },\n\n created() {\n if(Object.keys(this.towns).length) this.filterTowns()\n },\n\n data() {\n return {\n townLinks: [\n {\n path: 'posts',\n text: 'Posts',\n children: [\n {\n pathEnding: 'posts',\n title: 'Approve Posts'\n },\n {\n pathEnding: 'search',\n title: 'Search Posts'\n }\n ]\n },\n {\n path: 'members',\n text: 'Members',\n children: [\n {\n pathEnding: 'members',\n title: 'Approve Members'\n },\n {\n pathEnding: 'search',\n title: 'Search Members'\n },\n {\n pathEnding: 'invite',\n title: 'Invite Members'\n }\n ]\n },\n {\n path: 'settings',\n text: 'Town Settings',\n children: [\n {\n pathEnding: 'settings',\n title: 'General'\n },\n {\n pathEnding: 'activity',\n title: 'Town Activity'\n },\n {\n pathEnding: 'notices',\n title: 'Town Notices'\n },\n {\n pathEnding: 'hotwords',\n title: 'Hotwords'\n }\n ]\n }\n ],\n townsFiltered: [],\n townsSearchString: '',\n version: vue_app_version\n }\n },\n\n methods: {\n filterTowns(needle?: string) {\n const townsFiltered = {}\n if(!needle || needle === '') {\n for(let town of Object.keys(this.towns)) {\n if(town !== this.$route.params.townName) Object.assign(townsFiltered, {[town]: this.towns[town]})\n }\n } else {\n for(let town of Object.keys(this.towns)) {\n if(town.toLowerCase().includes(needle.toLowerCase()) && town !== this.$route.params.townName) Object.assign(townsFiltered, {[town]: this.towns[town]})\n }\n }\n Vue.set(this, 'townsFiltered', Object.values(townsFiltered))\n },\n refreshTowns() {\n eventHub.$emit('triggerSnackbar', {\n color: 'success', text: this.$t('Refreshing the list of towns you moderate.')\n })\n this.$store.dispatch('towns/fetchTowns')\n },\n updateFilteredTowns() {\n this.filterTowns(this.townsSearchString)\n }\n },\n\n watch: {\n townsSearchString(v) {\n this.filterTowns(v)\n },\n towns() {\n this.updateFilteredTowns()\n }\n }\n})\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecondaryNav.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecondaryNav.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SecondaryNav.vue?vue&type=template&id=537fe1ea&\"\nimport script from \"./SecondaryNav.vue?vue&type=script&lang=ts&\"\nexport * from \"./SecondaryNav.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SecondaryNav.vue?vue&type=style&index=0&id=537fe1ea&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VIcon,VList,VListItem,VListItemTitle,VMenu,VTextField,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',[_c('div',{staticClass:\"footer-inner column row\"},[_c('div',{staticClass:\"row footer-row\"},[_c('div',{staticClass:\"footer-image-row small-12 columns\"},[_vm._m(0),_c('div',{staticClass:\"footer-social-list-container\"},[_c('span',{staticClass:\"social-list-label\"},[_vm._v(_vm._s(_vm.$t('Follow Freecycle')))]),_c('ul',{staticClass:\"social-list\"},[_c('li',{staticClass:\"social-list-item\"},[_c('a',{attrs:{\"href\":\"https://www.facebook.com/freecycle/\",\"target\":\"_blank\"}},[_c('i',{staticClass:\"fa\"},[_c('FacebookIcon')],1)])]),_c('li',{staticClass:\"social-list-item\"},[_c('a',{attrs:{\"href\":\"https://twitter.com/freecycle\",\"target\":\"_blank\"}},[_c('i',{staticClass:\"fa-brands fa-twitter\"}),_c('i',{staticClass:\"fa\"},[_c('TwitterIcon')],1)])])])])])]),_c('div',{staticClass:\"row footer-row\"},[_c('div',{staticClass:\"row\",staticStyle:{\"max-width\":\"100%\"}},[_c('ul',_vm._l((_vm.footerMenuItems),function(link){return _c('li',{key:link.name,staticClass:\"columns small-6 large-3 footer-menu-item left\"},[_c('div',[(link.path === 'help')?[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.openHelp.apply(null, arguments)}}},[_vm._v(_vm._s(link.name))])]:[_c('a',{attrs:{\"href\":link.path,\"target\":\"_blank\"}},[_vm._v(_vm._s(link.name))])]],2)])}),0)])]),_c('div',{staticClass:\"row footer-row\"},[_c('div',{staticClass:\"small-12 columns\"},[_c('p',{staticClass:\"footer-lowlight\"},[_vm._v(\" \"+_vm._s(((_vm.$t('Copyright')) + \" ©\" + (_vm.date.getFullYear()) + \" \" + (_vm.$t('The Freecycle Network. All rights reserved')) + \". \"))+\" \"+_vm._s(_vm.$t('Freecycle and the Freecycle logo are trademarks of The Freecycle Network in various countries.'))+\" \")])])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"footer-image-container\"},[_c('a',{attrs:{\"href\":\"/\"}},[_c('img',{attrs:{\"src\":\"/images/logo.png\"}})])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue'\nimport FacebookIcon from '@/assets/facebook_f_brands.svg'\nimport TwitterIcon from '@/assets/twitter_brands.svg'\ndeclare global {\n interface Window {\n Beacon: (arg: string) => void\n }\n}\nexport default Vue.extend({\n name: 'Bottom',\n\n components:{\n FacebookIcon,\n TwitterIcon\n },\n\n data() {\n return {\n date: new Date(),\n footerMenuItems: [\n // Link names are translated here and not in the template above\n {\n path: '//www.freecycle.org/pages/guidelines',\n name: this.$t(\"Guidelines\"),\n },\n {\n path: 'https://freecycle.org/pages/ModManual/ModResources',\n name: this.$t('Moderator Manual')\n },\n {\n path: 'https://freecycle.org/pages/ModManual/modhelp',\n // path: 'help', // this would be to make the HS beacon pop up\n name: this.$t('Moderator Help')\n },\n {\n path: 'https://freecycle.org/pages/ModManual/ModTools',\n name: this.$t('Modtools Guide')\n },\n {\n path: '//www.freecycle.org/pages/volunteer',\n name: this.$t('Volunteer')\n },\n {\n path: '//www.freecycle.org/pages/privacy',\n name: this.$t('Privacy'),\n },\n {\n path: '//www.freecycle.org/pages/contact',\n name: this.$t('Contact')\n }\n ],\n path: { home: '/' }\n }\n },\n methods: {\n openHelp() { window.Beacon('open') }\n }\n})\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Bottom.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Bottom.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Bottom.vue?vue&type=template&id=d140a430&\"\nimport script from \"./Bottom.vue?vue&type=script&lang=ts&\"\nexport * from \"./Bottom.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Bottom.vue?vue&type=style&index=0&id=d140a430&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"header\"},[_c('div',{staticClass:\"header-outer\"},[_c('div',{staticClass:\"header-inner row\"},[_c('div',{staticClass:\"header-logo small-centered\"},[_c('a',{attrs:{\"href\":(\"https://\" + _vm.fc3MainHostname + \"/\")}},[_c('div',{attrs:{\"id\":\"fc-icon\"}},[_c('FreecycleLogo')],1)])]),_c('div',{staticClass:\"header-stretch row\",staticStyle:{\"flex-wrap\":\"wrap\",\"justify-content\":\"flex-end\",\"margin-right\":\"16px\"}},[_c('div',{staticClass:\"user-button-wrapper\"},[_c('div',{staticClass:\"header-user-buttons\"},[_c('ul',{staticClass:\"header-user-buttons-list header-user-buttons-list-left\"},[_c('li',{staticClass:\"header-user-button\"},[_c('ul',{staticClass:\"profile-options-dropdown custom-dropdown menu\",attrs:{\"data-custom-dropdown\":\"\"}},[_c('div',{staticClass:\"custom-dropdown-toggle\"},[_c('a',{staticClass:\"main-link\",attrs:{\"href\":\"javascript:void(0);\"}},[_c('MainLink')],1)]),_c('li',{staticClass:\"custom-dropdown-content\"},[_c('ul',{staticClass:\"menu\"},[_c('li',{staticClass:\"custom-dropdown-item\"},[_c('a',{attrs:{\"href\":\"https://moderator.freecycle.org/\"}},[_vm._v(\" \"+_vm._s(_vm.$t('Moderator Tools'))+\" \")])]),_vm._l((_vm.towns),function(town){return _c('li',{key:town.id,staticClass:\"custom-dropdown-item\"},[_c('router-link',{key:town.id,attrs:{\"to\":(\"/towns/\" + (town.uniqueName) + \"/posts\")}},[_vm._v(\" \"+_vm._s(town.name)+\" \")])],1)})],2)])])]),_c('li',{staticClass:\"header-user-button\"},[_c('ul',{staticClass:\"profile-options-dropdown custom-dropdown menu\",attrs:{\"data-custom-dropdown\":\"\"}},[_c('div',{staticClass:\"custom-dropdown-toggle\"},[_c('span',{staticClass:\"hide-for-small-only hide-for-medium-only hide-for-header-only\"},[_c('ProfileIcon')],1),_c('span',{staticClass:\"show-for-small-up hide-for-large\"},[_c('ProfileIcon')],1)]),_c('li',{staticClass:\"custom-dropdown-content\"},[_c('ul',{staticClass:\"menu\"},[_vm._l((_vm.menuItems),function(item){return [_c('li',{staticClass:\"custom-dropdown-item\"},[_c('a',{attrs:{\"href\":(\"https://\" + _vm.fc3MainHostname + (item.path))}},[_vm._v(\" \"+_vm._s(_vm.$t(item.name))+\" \")])])]}),_c('li',{staticClass:\"custom-dropdown-item\"},[_c('a',{attrs:{\"href\":(\"https://\" + _vm.fc3MainHostname + \"/logout\")},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.logout.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('Logout'))+\" \")])])],2)])])])]),_c('ul',{staticClass:\"header-user-buttons-list header-user-buttons-list-right\"},[_c('li',{staticClass:\"header-user-button\"},[_c('a',{attrs:{\"href\":(\"https://\" + _vm.fc3MainHostname + \"/home/alerts\")}},[_c('AlertsIcon')],1)]),_c('a',{attrs:{\"href\":(\"https://\" + _vm.fc3MainHostname + \"/home/alerts\")}}),_c('li',{staticClass:\"header-user-button\"},[_c('a',{attrs:{\"href\":(\"https://\" + _vm.fc3MainHostname + \"/home/alerts\")}}),_c('a',{attrs:{\"href\":(\"https://\" + _vm.fc3MainHostname + \"/home/my-replies\")}},[_c('MessagesIcon')],1)])])])])]),_c('div',{staticClass:\"header-links\"},[_c('a',{attrs:{\"href\":(\"https://\" + _vm.fc3MainHostname + \"/home/new-post\")}},[_c('button',{staticClass:\"btn-default header-button\"},[_vm._v(_vm._s(_vm.$t('Make A Post')))])])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue'\nimport { mapState } from 'vuex'\nimport { fc3MainHostname } from '@/helpers/constants'\n\n// svgs\nimport AlertsIcon from '@/assets/alerts.svg'\nimport FreecycleLogo from '@/assets/logo.svg'\nimport MainLink from '@/assets/main.svg'\nimport MessagesIcon from '@/assets/messages.svg'\nimport ProfileIcon from '@/assets/profile.svg'\nimport resetStore from '@/helpers/vuexReset'\nimport wsClient from '@/helpers/wsClient'\n\nexport default Vue.extend({\n name: 'Top',\n props: ['towns'],\n\n components: {\n AlertsIcon,\n FreecycleLogo,\n MainLink,\n MessagesIcon,\n ProfileIcon\n },\n\n mounted() {\n this.initDropdowns()\n },\n\n destroyed() {\n this.initDropdowns('remove')\n },\n\n data() {\n return {\n fc3MainHostname,\n menuItems: [\n {\n path: '/home/dashboard/',\n name: 'My Dashboard'\n },\n {\n path: '/home/my-replies/',\n name: 'My Messages'\n },\n {\n path: '/home/my-posts/',\n name: 'My Posts'\n },\n {\n path: '/home/my-towns/',\n name: 'My Towns'\n },\n {\n path: '/home/my-friends/',\n name: 'My Friends'\n },\n {\n path: '/home/settings/',\n name: 'My Settings'\n }\n ]\n }\n },\n\n methods: {\n initDropdowns(action = 'add') {\n const menus = document.querySelectorAll('.custom-dropdown.menu')\n for(const [_, menu] of menus.entries()) {\n\n let trigger = menu.querySelector('.custom-dropdown-toggle')\n if(trigger !== null) {\n if(action === 'add') {\n trigger.addEventListener('click', (e) => menu.classList.toggle('active'))\n } else {\n trigger.removeEventListener('click', (e) => menu.classList.toggle('active'))\n }\n }\n }\n },\n logout() {\n resetStore()\n wsClient.close()\n window.location.href = `https://${fc3MainHostname}${'/logout'}`\n }\n }\n})\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Top.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Top.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Top.vue?vue&type=template&id=62ca8736&\"\nimport script from \"./Top.vue?vue&type=script&lang=ts&\"\nexport * from \"./Top.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Top.vue?vue&type=style&index=0&id=62ca8736&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from 'vue'\nimport { mapState } from 'vuex'\nimport Snackbar from '@/components/Snackbar.vue'\nimport Transitions from '@/mixins/Transitions'\nimport SecondaryNav from '@/components/SecondaryNav.vue'\nimport Bottom from '@/components/Bottom.vue'\n// import IssueCollector from '@/components/IssueCollector.vue'\nimport Top from '@/components/Top.vue'\nimport { Town } from '@/store/towns/types'\nimport { eventHub } from '@/store/eventHub'\nimport i18nextConfig from '@/helpers/i18next-config'\nimport { vue_app_version } from '@/helpers/constants'\n\nexport default Vue.extend({\n name: 'App',\n components: {\n Bottom: Vue.extend(Bottom),\n // IssueCollector: Vue.extend(IssueCollector),\n SecondaryNav: Vue.extend(SecondaryNav),\n Snackbar: Vue.extend(Snackbar),\n Top: Vue.extend(Top)\n },\n mixins: [ Vue.mixin(Transitions) ],\n computed: {\n ...mapState('auth', ['user', 'authenticated']),\n ...mapState('towns', ['towns'])\n },\n created() {\n eventHub.$on('websocketHello',\n () => Vue.set(this, 'wssHelloReceived', true))\n if(i18nextConfig.lng) {\n this.$vuetify.lang.current = i18nextConfig.lng\n } else {\n console.log('not set')\n }\n this.addFavicon()\n this.addVersionMetaTag()\n this.setTownsAlpha(this.towns)\n },\n data() {\n return {\n townsAlpha: [],\n wssHelloReceived: false\n }\n },\n methods: {\n addFavicon() {\n const head = document.getElementsByTagName('head')[0]\n const tag = document.createElement('link')\n tag.setAttribute('rel', 'icon')\n tag.setAttribute('href', 'https://' + location.host + '/images/favicon.ico')\n head.appendChild(tag)\n },\n addVersionMetaTag() {\n if(typeof vue_app_version === 'string') {\n const head = document.getElementsByTagName('head')[0]\n const tag = document.createElement('meta')\n tag.setAttribute('name', 'tfn-version')\n tag.setAttribute('content', vue_app_version)\n head.appendChild(tag)\n }\n },\n alphaSort(a: Town, b: Town) {\n if (a.name < b.name) return -1\n if (a.name > b.name) return 1\n return 0\n },\n setTownsAlpha(v: Town[]) {\n const sorted = Object.values(v).sort(this.alphaSort as (a: unknown, b: unknown) => number)\n Vue.set(this, 'townsAlpha', sorted)\n }\n },\n watch: {\n towns(v) {\n this.setTownsAlpha(v)\n }\n }\n})\n","import mod from \"-!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??clonedRuleSet-41.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=14f90328&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\ninstallComponents(component, {VApp})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./RouterView.vue?vue&type=template&id=bcedca6c&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import RouterView from '@/views/RouterView.vue'\nimport i18next from 'i18next'\nimport i18nextConfig from '@/helpers/i18next-config'\nimport {RouteConfig} from \"vue-router\";\n\ni18next.init(i18nextConfig)\n\nexport const routes: RouteConfig[] = [\n {\n path: '/',\n component: RouterView,\n children: [\n {\n path: '/',\n name: i18next.t('Overview'),\n meta: { title: `ModTools - ${i18next.t('Overview')} | Freecycle` },\n component: (): Promise => import('@/views/home/Overview.vue')\n },\n {\n path: 'preferences',\n name: i18next.t('Preferences'),\n meta: { title: `ModTools - ${i18next.t('Preferences')} | Freecycle` },\n component: (): Promise => import('@/views/home/Preferences.vue')\n }\n ] as unknown as undefined\n },\n {\n path: '/towns',\n component: RouterView,\n children: [\n {\n path: ':townName',\n redirect: '/towns/:townName/posts',\n component: RouterView,\n children: [\n {\n path: 'members',\n component: RouterView,\n children: [\n {\n path: '/',\n name: i18next.t('Approve Members'),\n meta: { title: `ModTools - ${i18next.t('Approve Members')} | Freecycle` },\n component: (): Promise => import('@/views/town/members/ApproveMembers.vue')\n },\n {\n path: 'invite',\n name: i18next.t('Invite Members'),\n meta: { title: `ModTools - ${i18next.t('Invite Members')} | Freecycle` },\n component: (): Promise => import('@/views/town/members/InviteMembers.vue')\n },\n {\n path: 'search',\n name: i18next.t('Search Members'),\n meta: { title: `ModTools - ${i18next.t('Search Members')} | Freecycle` },\n component: (): Promise => import('@/views/town/members/SearchMembers.vue')\n },\n {\n path: ':userId',\n name: i18next.t('Member Profile'),\n meta: { title: `ModTools - ${i18next.t('Member Profile')} | Freecycle` },\n component: (): Promise => import('@/views/town/members/MemberProfile.vue'),\n children: [\n {\n path: 'posts/:postId/preview',\n name: i18next.t('Members Post Preview'),\n meta: { title: `ModTools - ${i18next.t('Members Post Preview')} | Freecycle` },\n component: (): Promise => import('@/components/PostPreview.vue')\n }\n ]\n }\n ]\n },\n {\n path: 'posts',\n component: RouterView,\n children: [\n {\n path: '/',\n name: i18next.t('Approve Posts'),\n meta: { title: `ModTools - ${i18next.t('Approve Posts')} | Freecycle` },\n component: (): Promise => import('@/views/town/posts/ApprovePosts.vue'),\n children: [\n {\n path: ':postId/preview',\n name: i18next.t('Posts Post Preview'),\n meta: { title: `ModTools - ${i18next.t('Posts Post Preview')} | Freecycle` },\n component: (): Promise => import('@/components/PostPreview.vue')\n }\n ]\n },\n {\n path: 'search',\n name: i18next.t('Search Posts'),\n meta: { title: `ModTools - ${i18next.t('Search Posts')} | Freecycle` },\n component: (): Promise => import('@/views/town/posts/SearchPosts.vue'),\n children: [\n {\n path: 'results/:postId/preview',\n name: i18next.t('Preview'),\n meta: { title: `ModTools - ${i18next.t('Post Preview')} | Freecycle` },\n component: (): Promise => import('@/components/PostPreview.vue')\n }\n ]\n },\n {\n path: ':postId/edit',\n name: i18next.t('Edit Post'),\n meta: { title: `ModTools - ${i18next.t('Edit Post')} | Freecycle` },\n component: (): Promise => import('@/views/town/posts/EditPost.vue')\n }\n ]\n },\n {\n path: 'settings',\n component: RouterView,\n children: [\n {\n path: '/',\n name: i18next.t('Town Settings'),\n meta: { title: `ModTools - ${i18next.t('Town Settings')} | Freecycle` },\n component: (): Promise => import('@/views/town/settings/General.vue')\n },\n {\n path: 'activity',\n name: i18next.t('Town Activity'),\n meta: { title: `ModTools - ${i18next.t('Town Activity')} | Freecycle` },\n component: (): Promise => import('@/views/town/settings/Activity.vue')\n },\n {\n path: 'notices',\n name: i18next.t('Town Notices'),\n meta: { title: `ModTools - ${i18next.t('Town Notices')} | Freecycle` },\n component: (): Promise => import('@/views/town/settings/Notices.vue'),\n children: [\n {\n path: 'automation',\n name: i18next.t('Automated Notices'),\n meta: { title: `ModTools - ${i18next.t('Automated Notices')} | Freecycle` },\n component: (): Promise => import('@/views/town/settings/NoticeAutomation.vue')\n }\n ]\n },\n {\n path: 'notices/add',\n name: i18next.t('Add Notice'),\n meta: { title: `ModTools - ${i18next.t('Add Notice')} | Freecycle` },\n component: (): Promise => import('@/views/town/settings/NoticeAdd.vue'),\n },\n {\n path: 'notices/:noticeId/edit',\n name: i18next.t('Edit Notice'),\n meta: { title: `ModTools - ${i18next.t('Edit Notice')} | Freecycle` },\n component: (): Promise => import('@/views/town/settings/NoticeEdit.vue'),\n },\n {\n path: 'hotwords',\n name: i18next.t('Hotwords'),\n meta: { title: `ModTools - ${i18next.t('Hotwords')} | Freecycle` },\n component: (): Promise => import('@/views/town/settings/Hotwords.vue')\n }\n ]\n }\n ]\n }\n ] as unknown as undefined // i don't like having to do this. but i don't understand\n },\n {\n path: '*',\n name: `${i18next.t('Not Found')}`, // wrap in template cuz typescripts wants this to be for sure a string.\n meta: { title: `ModTools - ${i18next.t('Not Found')} | Freecycle` },\n component: (): Promise => import('@/views/NotFound.vue')\n }\n]\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport { eventHub } from \"@/store/eventHub\";\nimport i18next from 'i18next'\nimport authcheck from '@/helpers/authcheck'\nimport { routes } from '@/router/routes'\nimport store from '@/store'\nimport wsClient from '@/helpers/wsClient'\n\nVue.use(VueRouter)\n\nimport { RouterOptions } from 'vue-router'\n\nconst routerOptions: RouterOptions = {\n mode: 'history',\n base: process.env.BASE_URL,\n routes,\n scrollBehavior () { return { x: 0, y: 0 } }\n}\n\nconst router = new VueRouter(routerOptions)\n\nrouter.beforeEach(async (to, _from, next) => {\n document.title = 'ModTools'\n\n let doNext = true\n let session = await store.getters['auth/session']\n // Authorization changes pushed to Vue by wss, so we make sure it's connected.\n if(!session || !session.authenticated || !session.wss) {\n await store.dispatch('auth/fetchSession')\n session = await store.getters['auth/session']\n } else {\n const wssAuth = await wsClient.wssAuth()\n if(wssAuth.data.status === 'authenticated') wsClient.initialize(session.user.id)\n }\n\n if(!session.wss && !session.authenticated) {\n doNext = false\n }\n\n if (doNext === true && typeof to === 'object' && to.params && typeof to.params.townName === 'string') {\n const townId = await store.getters['towns/townIdFromName'](to.params.townName)\n if(townId.length < 1) {\n doNext = false\n eventHub.$emit('triggerSnackbar', {\n color: 'warning',\n text: i18next.t('You are not a moderator of ') + to.params.townName + '. ' + i18next.t('Redirecting you to your dashboard in 4 seconds.'),\n timeout: 3000,\n undo: authcheck.loggedInRedirect,\n undoText: i18next.t('Go to dashboard')\n })\n setTimeout(() => { authcheck.loggedInRedirect() }, 3000)\n }\n }\n if(doNext)\n next()\n})\n\nconst defaultTitle = 'ModTools | Freecycle'\nrouter.afterEach((to) => {\n Vue.nextTick(() => {\n if (typeof to === 'object' && typeof to.meta === 'object')\n document.title = to.meta.title\n else document.title = defaultTitle\n })\n})\n\nexport default router\n","import Vue from 'vue'\nimport Vuetify from 'vuetify/lib/framework'\nimport '@mdi/font/css/materialdesignicons.css'\n\nVue.use(Vuetify)\n\nconst vuetify = new Vuetify({\n breakpoint: {\n thresholds: {\n xs: 0,\n sm: 340,\n md: 640,\n lg: 900\n },\n scrollBarWidth: 0\n },\n theme: {\n themes: {\n light: {\n primary: '#34b233',\n secondary: '#777',\n accent: '#ff5722',\n success: '#3adb76',\n warning: '#ffae00',\n alert: '#ec5840',\n primaryDarken: '#258025',\n wanted: '#00bcd4',\n wantedDarken: '#00838F',\n lend: '#ff9800',\n lendDarken: '#ef6c00',\n borrow: '#673AB7',\n borrowDarken: '#311B92',\n offer: '#ff5722',\n offerDarken: '#d84315',\n rejected: '#a16122',\n delete: '#dc143c',\n deleteDarken: '#800000',\n 'bg-light-gray': '#ede7de',\n 'bg-medium-gray': '#d4cfc7',\n 'bg-dark-gray': '#bab6af'\n }\n }\n }\n})\n\nexport default vuetify\n","/**\n * This module is now converted into a Vue Plugin.\n * https://vuejs.org/v2/guide/plugins.html\n */\n\n// deps\n// import lodash from 'lodash';\nimport moment from 'moment-timezone';\nimport Vue from 'vue';\n// import haversine from 'haversine';\n\ndeclare global {\n interface Window {\n language: string\n }\n}\n\nexport const FCVue = {\n install(): void {\n Vue.prototype.$bus = new Vue();\n // Vue.prototype.$lodash = lodash;\n Vue.prototype.$findOne = (haystack: string, arr: string[]) => {\n return arr.some(val => haystack.includes(val));\n };\n\n Vue.prototype.geoFormat = (lat: number, lng: number) => {\n return { lat : Number(lat), lng : Number(lng) };\n };\n\n // Vue.prototype.geoDistance = haversine;\n\n // filters\n Vue.filter('mreldate', function(date: string, time: string, timezone: string) {\n\n moment.locale(window.language); // language set in top-level fc3_components.js.\n\n if (!(time && timezone)) {\n // when no time given, fromNow sets time to 00:00:00 in machine's timezone, can result in odd relative times\n return moment.utc(date, 'YYYY-MM-DD').fromNow();\n }\n\n const dateToModify = time ? `${date} ${time}` : date;\n // We standardize to utc (how times are stored in db), as otherwise, moment will first convert the time to the server's local time\n const utc = moment.utc(dateToModify);\n\n // Then, convert to the given timezone (default_tz set on group post is on, most likely)\n return utc.tz(timezone).fromNow();\n });\n\n // this filter strips html tags from text and returns the raw text\n Vue.filter('stripTags', function(text: string) {\n const regex = /(<([^>]+)>)| |"/gim;\n return text.replace(regex, \"\");\n });\n\n // this filter is used to truncate a text and add ellipsis or a specified clamping mechanism.\n Vue.filter('truncate', function (text: string, length: number, clamp: string) {\n clamp = clamp || '...';\n length = length || 30;\n\n if (text.length <= length) return text;\n\n let tcText = text.slice(0, length - clamp.length);\n let last = tcText.length - 1;\n\n\n while (last > 0 && tcText[last] !== ' ' && tcText[last] !== clamp[0]) last -= 1;\n\n // Fix for case when text dont have any `space`\n last = last || length - clamp.length;\n\n tcText = tcText.slice(0, last);\n\n return tcText + clamp;\n });\n\n // convert a given string to lowerCase\n Vue.filter('lower', function(text: string) {\n return String(text).toLowerCase();\n });\n\n // convert string to first uppercase, rest lowercase\n Vue.filter('firstupper', function(text: string) {\n return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n });\n }\n};\n","import Vue from 'vue'\nimport App from './App.vue'\nimport router from '@/router'\nimport store from '@/store'\nimport vuetify from '@/plugins/vuetify'\nimport { FCVue } from '@/plugins/vue_init.ts'\nimport i18next, { TFunction } from 'i18next'\nimport i18nextConfig from '@/helpers/i18next-config'\nimport i18NextVue from 'i18next-vue'\nimport HttpApi from 'i18next-http-backend'\nrequire('./helpers/helpscout.js')\n\nimport '@/styles/scss/main.scss'\nimport '@/styles/scss/fonts.scss'\n\ntry {\n i18next.use(HttpApi)\n .init(i18nextConfig)\n .then(() => {\n\n Vue.prototype.t = Vue.prototype.$t as TFunction;\n\n interface VueTranslated extends Vue { t: TFunction }\n interface vmWindow extends Window {\n vm: VueTranslated\n }\n\n (window as vmWindow & typeof globalThis).vm = (new Vue({\n router,\n store,\n vuetify,\n render: h => h(App)\n }) as VueTranslated).$mount('#app')\n\n })\n} catch(e) {\n console.error('Unable to load translations service.', e)\n}\n\nVue.use(i18NextVue, {i18next})\n\n// FreeCycle global Vue filters from fc_common_assets\nVue.use(FCVue)\n","// Acts as a global event bus for message passing\n// between components, usage shown below:\n// import eventHub from './actual-path-here'\n// send events with eventHub.$emit('some_event', data)\n// watch for events with eventHub.$on('some_event', data => {})\n\nimport Vue from 'vue'\nexport const eventHub = new Vue()\n","import { GetterTree } from 'vuex'\nimport { UserSession } from './types'\nimport { RootState } from '@/types'\n\nexport const getters: GetterTree = {\n authenticated(state) { return state.authenticated },\n checkTimeout(state) { return state.checkTimeout },\n user(state) { return state.user },\n currentAccesses(state) { return (state.user) ? state.user.accesses.map(access => access.to) : [] },\n session(state) { return {\n authenticated: state.authenticated,\n checkTimeout: state.checkTimeout,\n language: state.language,\n user: state.user,\n wss: state.wss\n }}\n}\n","import { ActionTree } from 'vuex';\nimport { UserSession } from './types';\nimport { RootState } from '@/types';\nimport wsClient from '@/helpers/wsClient'\nimport store from '@/store'\n\nexport const actions: ActionTree = {\n async fetchSession({ commit }) {\n try {\n const response = await wsClient.authCheck()\n if (response && response.user)\n await store.dispatch('towns/fetchTowns')\n commit('sessionLoaded', response)\n } catch(error) {\n commit('sessionError', error)\n }\n }\n}\n","import { MutationTree } from 'vuex'\nimport { UserSession } from './types'\nimport { initialState } from './index'\nimport Timeout = NodeJS.Timeout;\n\nexport const mutations: MutationTree = {\n reset(state) { Object.assign(state, initialState) },\n sessionLoaded(state, payload: UserSession) {\n state.authenticated = payload.authenticated;\n state.error = false;\n state.user = payload.user;\n state.wss = payload.wss;\n },\n checkTimeout(state, payload: Timeout) {\n state.checkTimeout = payload;\n },\n sessionError(state) {\n state.authenticated = false;\n state.error = true;\n state.user = undefined;\n state.wss = false;\n }\n};\n","import { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { UserSession } from './types'\n\nexport const initialState: UserSession = {\n authenticated: false,\n checkTimeout: false,\n error: false,\n language: '',\n user: undefined,\n wss: false\n}\n\nexport const state = initialState\n\nconst namespaced = true\n\nexport default {\n namespaced,\n state,\n getters,\n actions,\n mutations\n}\n","import { GetterTree } from 'vuex'\nimport { ModuleState } from './types'\nimport { RootState } from '@/types'\n\nexport const getters: GetterTree = {\n items(state) { return state.items }\n}\n","export const basePath = 'api/moderator/preferences'\n\nexport interface Item {\n id: number;\n user_id: number;\n group_id: number;\n results_per_page: number;\n send_email_on_member_messages: boolean;\n send_email_on_pending_members: boolean;\n send_email_on_pending_posts: boolean;\n}\n\nexport interface ModuleState {\n items: Item[];\n}\n","import { ActionTree } from 'vuex';\nimport { basePath, Item, ModuleState } from './types';\nimport { RootState } from '@/types';\nimport { API, handleError } from '@/helpers/axios'\n\nexport const actions: ActionTree = {\n async create({ commit }, item: Item) {\n try {\n const response = await API.post(`${basePath}/create`, item)\n if (response.status === 200) commit('handleResponse', { items: response.data })\n }\n catch(error) { handleError(error) }\n },\n async delete({ dispatch }, itemId: number) {\n try {\n const response = await API.post(`${basePath}/delete`, itemId)\n if (response.status === 200) dispatch('fetch')\n }\n catch(error) { handleError(error) }\n },\n async fetch({ commit }) {\n try {\n const response = await API.get(`${basePath}`)\n if (response.status === 200) commit('handleResponse', { items: response.data })\n }\n catch(error) { handleError(error) }\n },\n async update({ dispatch }, item: Item) {\n try {\n const response = await API.post(`${basePath}/update`, item)\n if (response.status === 200) dispatch('fetch')\n }\n catch(error) { handleError(error) }\n }\n}\n","import { MutationTree } from 'vuex'\nimport { Item, ModuleState } from './types'\nimport { initialState } from './index'\n\nexport const mutations: MutationTree = {\n handleResponse(state, payload: { items: Item[] }) {\n state.items = payload.items;\n },\n reset(state) { Object.assign(state, initialState) },\n};\n","import { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { ModuleState } from './types'\n\nexport const initialState: ModuleState = {\n items: []\n}\n\nexport const state = initialState\n\nconst namespaced = true\n\nexport default {\n namespaced,\n state,\n getters,\n actions,\n mutations\n}\n","import { GetterTree } from 'vuex'\nimport { ModuleState, PostStatus } from './types'\nimport { RootState } from '@/types'\n\nexport const getters: GetterTree = {\n post(state) { return state.post },\n posts(state) { return state.posts },\n postsByTownByUserByStatus(state, status: PostStatus) { return state.postsByTownByUserByStatus[status] },\n postsByTownByUserPending(state) { return state.postsByTownByUserPending },\n postsByTownByUserActive(state) { return state.postsByTownByUserActive },\n postsByTownByUserInactive(state) { return state.postsByTownByUserInactive }\n}\n","export const basePath = 'api'\n\nexport interface Post {\n id: number | null;\n userId: number;\n subject: string;\n location: string;\n description: string;\n isApproved: boolean;\n isDeleted: boolean;\n isOpen: boolean;\n isRejected: boolean;\n rejectReason: string;\n date: string;\n time: string;\n type: {\n typeId: number;\n const: string;\n name: string;\n };\n group: {\n id: number;\n name: string;\n country: {\n id: number;\n name: string;\n };\n latitude: number;\n longitude: number;\n timezone: string;\n uniqueName?: string;\n };\n images: [];\n tags: [];\n shared: [];\n static: string | null;\n}\n\nexport interface SearchResult {\n \"@timestamp\": string;\n \"@version\": string;\n group_id: number;\n group_name: string;\n group_uniquename: string;\n has_image: number;\n index_id: string;\n is_approved: number;\n is_deleted: number;\n is_open: number;\n is_rejected: number;\n post_date: string;\n post_datetime: string;\n post_description: string;\n post_id: number;\n post_location: string;\n post_subject: string;\n post_type: number;\n post_type_name: string;\n type: string;\n user_id: number;\n username: string;\n}\n\nexport interface NewPost {\n userId: number;\n subject: string;\n location: string;\n description: string;\n type: number;\n lendDuration: string | null;\n town: number;\n tags: [];\n images: [];\n user: {\n user_id: number;\n username: string;\n };\n}\n\nexport interface ModuleState {\n post?: Post;\n posts: Post[];\n postsByTownByUserByStatus: {\n active?: Post[];\n inactive?: Post[];\n pending?: Post[];\n };\n postsByTownByUserPending: Post[];\n postsByTownByUserActive: Post[];\n postsByTownByUserInactive: Post[];\n postsByTownPending: Post[]; // Support multiple towns\n}\n\nexport type PostStatus = 'active'|'inactive'|'pending'\n","import { ActionTree } from 'vuex'\nimport { basePath, ModuleState } from './types'\nimport { RootState } from '@/types'\nimport { NewPost } from './types'\nimport { API, handleError } from '@/helpers/axios'\nimport { eventHub } from '@/store/eventHub'\nimport { Post } from '@/store/posts/types'\nimport i18next from 'i18next'\nimport i18nextConfig from '@/helpers/i18next-config'\n\ni18next.init(i18nextConfig)\n\ninterface PostTownUserIds {\n bulk: boolean | null;\n postId: number;\n townId: number;\n userId: number;\n}\n\ninterface PostsBulkDelete {\n townId: number;\n posts: {\n id: number;\n userId: number;\n }[];\n}\n\ninterface PostsBulk {\n townId: number;\n posts: {\n id: number;\n user: { id: number; };\n }[];\n}\n\ninterface Rejection {\n postId: number;\n userId: number;\n townId: number;\n reason: string;\n comment: string;\n}\n\nexport interface TownUserStatus {\n townId: number;\n userId: number;\n status: string;\n limit: number | null;\n townPreferred?: boolean;\n}\n\nexport const actions: ActionTree = {\n async fetchBy({ commit }, { id, townId }: { id: number; townId: number } ) {\n try {\n const response = await API.get(`${basePath}/group/${townId}/posts/${id}`)\n if (response.status === 200) {\n commit('handleResponseFetchBy', response.data)\n return response.data\n } else {\n console.error(response)\n throw new Error('Error fetching post.')\n }\n }\n catch(error) { handleError(error) }\n },\n async fetchTownUserByStatus({ commit }, { townId, userId, status, limit, townPreferred = false }: TownUserStatus) {\n try {\n const limitNumber = typeof limit === 'number' ? limit : 2\n const response = await API\n .get(`${basePath}/group/${townId}/members/${userId}/posts/${status}`,\n { params: { limit: limitNumber, townPreferred } })\n\n if (response.status === 200) {\n switch (status) {\n case 'pending':\n commit('handleResponseByTownByUserPending', response.data.posts)\n break\n case 'active':\n commit('handleResponseByTownByUserActive', response.data.posts)\n break\n case 'inactive':\n commit('handleResponseByTownByUserInactive', response.data.posts)\n break\n }\n return response.data.posts\n }\n }\n catch(error) { handleError(error) }\n\t},\n async fetchPendingByTown({ commit }, townId: number) {\n try {\n const response = await API.get(`${basePath}/group/${townId}/posts/pending`)\n if (response.status === 200) {\n commit('handleFetchPendingByTownResponse', response.data)\n return response.data\n }\n }\n catch(error) { handleError(error) }\n\t},\n async approve({ dispatch }, { postId, townId, userId }: PostTownUserIds) {\n try {\n const response = await API.post(`${basePath}/group/${townId}/posts/approve`, { postId, userId })\n\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: i18next.t(`Approved post.`),\n undo: () => dispatch('unApprove', { postId, userId, townId })\n })\n }\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async bulkApprove({ dispatch }, { townId, posts }: PostsBulk) {\n try {\n const response = await API.post(`${basePath}/group/${townId}/posts/bulk/approve`, { posts })\n\n if(response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: posts.length + i18next.t(` posts approved.`),\n undo: () => dispatch('bulkUnApprove', { townId, posts })\n })\n }\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async unApprove(_, { postId, townId, userId }: PostTownUserIds) {\n try {\n return await API.post(`${basePath}/group/${townId}/posts/unapprove`, { postId, userId })\n }\n catch(error) { handleError(error) }\n },\n async bulkUnApprove(_, { posts, townId }: PostsBulk) {\n try {\n return await API.post(`${basePath}/group/${townId}/posts/bulk/unapprove`, { posts })\n }\n catch(error) { handleError(error) }\n },\n async create({ dispatch }, { userId, subject, description, type, town, lendDuration, location, images }: NewPost) {\n try {\n const response = await API.post(`${basePath}/group/${town}/posts/create`,\n { userId, subject, description, type, town, lendDuration, location, images })\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: `${i18next.t('Created post')} ${subject}.`,\n undo: () => dispatch('unReject', { postId: response.data, userId, town })\n })\n }\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async reject({ dispatch }, { postId, userId, townId, reason, comment }: Rejection) {\n try {\n const response = await API\n .post(`${basePath}/group/${townId}/posts/${postId}/reject`, { reason, comment, userId })\n\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'warning',\n text: i18next.t(`Rejected post.`),\n undo: () => dispatch('unReject', { postId, userId, townId })\n })\n }\n }\n catch(error) { handleError(error) }\n },\n async unReject(_, {postId, townId, userId}: PostTownUserIds) {\n try {\n return await API.post(`${basePath}/group/${townId}/posts/${postId}/unreject`, { userId })\n }\n catch(error) { handleError(error) }\n },\n async delete({ dispatch }, { bulk, postId, townId, userId }: PostTownUserIds) {\n try {\n const response = await API\n .delete(`${basePath}/group/${townId}/posts/${postId}`, { params: { userId } })\n\n if (response.status === 200) {\n if (!bulk) {\n eventHub.$emit('triggerSnackbar', {\n color: 'warning',\n text: i18next.t(`Deleted post.`),\n undo: () => dispatch('unDelete', { postId, userId, townId })\n })\n }\n }\n return response.data\n }\n catch(error) { handleError(error) }\n },\n // TODO: Finish\n async bulkDelete({ dispatch }, { posts, townId }: PostsBulkDelete) {\n try {\n const response = await API\n .delete(`${basePath}/group/${townId}/posts/bulk`, { data: { posts } })\n\n if (response.status === 200) {\n // TODO: How to handl undo?\n // eventHub.$emit('triggerSnackbar', {\n // color: 'warning',\n // text: i18next.t(`Deleted posts.`),\n // undo: () => dispatch('unDelete', { postId, userId, townId })\n // })\n\n }\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async unDelete(_, { postId, townId, userId }: PostTownUserIds) {\n try {\n return await API.post(`${basePath}/group/${townId}/posts/${postId}/undelete`, { userId })\n }\n catch(error) { handleError(error) }\n },\n async update(_, { post }: { post: Post }) {\n try {\n const shimmedPost = Object.assign(post, {postType: post.type})\n return await API.post(`${basePath}/group/${post.group.id}/posts/${post.id}/update`, { post: shimmedPost })\n }\n catch (error) { handleError(error); return error }\n }\n}\n","import { MutationTree } from 'vuex';\nimport { Post, ModuleState, PostStatus } from './types'\nimport { initialState } from './index'\nimport Vue from 'vue'\n\nexport const mutations: MutationTree = {\n handleResponse(state, payload: { items: Post[] }) {\n state.posts = payload.items;\n },\n handleResponseFetchBy(state, payload: Post) {\n Vue.set(state, 'post', payload)\n },\n handleFetchPendingByTownResponse(state, payload: Post[]) {\n state.postsByTownPending = payload\n },\n handleResponseByTownByUserPending(state, payload: Post[]) {\n state.postsByTownByUserPending = payload\n },\n handleResponseByTownByUserActive(state, payload: Post[]) {\n state.postsByTownByUserActive = payload\n },\n handleResponseByTownByUserInactive(state, payload: Post[]) {\n state.postsByTownByUserInactive = payload\n },\n handleTownUserByStatusResponse(state, payload: { status: PostStatus; items: Post[] }) {\n state.postsByTownByUserByStatus[payload.status] = payload.items;\n },\n reset(state) { Object.assign(state, initialState) }\n};\n","import { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { ModuleState } from './types'\n\nexport const initialState: ModuleState = {\n posts: [],\n postsByTownByUserByStatus: {},\n postsByTownByUserPending: [],\n postsByTownByUserActive: [],\n postsByTownByUserInactive: [],\n postsByTownPending: []\n}\n\nexport const state = initialState\n\nconst namespaced = true\n\nexport default {\n namespaced,\n state,\n getters,\n actions,\n mutations\n}\n","import { GetterTree } from 'vuex'\nimport { ModuleState } from './types'\nimport { RootState } from '@/types'\n\nexport const getters: GetterTree = {\n items(state) { return state.items }\n}\n","export const basePath = 'api/tags'\n\nexport interface Item {\n id: number;\n name: string;\n system: number;\n}\n\nexport interface ModuleState {\n error: boolean;\n items: Item[];\n}","import { ActionTree } from 'vuex';\nimport { basePath, ModuleState } from './types';\nimport { RootState } from '@/types';\nimport { API } from '@/helpers/axios'\n\nexport const actions: ActionTree = {\n async fetchAll({ commit }) {\n const response = await API.get(`${basePath}/all`)\n if (response.status === 200) {\n commit('handleResponse', { items: response.data })\n return response.data\n } else {\n commit('handleError', response)\n return false\n }\n }\n}","import { MutationTree } from 'vuex';\nimport { initialState } from './index'\nimport { Item, ModuleState } from './types'\n\nexport const mutations: MutationTree = {\n handleResponse(state, payload: { items: Item[] }) {\n state.error = false;\n state.items = payload.items;\n },\n handleError(state) {\n state.error = true;\n state.items = [];\n },\n reset(state) { Object.assign(state, initialState) }\n};\n","import { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { ModuleState } from './types'\n\nexport const initialState: ModuleState = {\n error: false,\n items: []\n}\n\nexport const state = initialState\n\nconst namespaced = true\n\nexport default {\n namespaced,\n state,\n getters,\n actions,\n mutations\n}\n","import { GetterTree } from 'vuex'\nimport { ModuleState } from './types'\nimport { RootState } from '@/types'\n\nexport const getters: GetterTree = {\n towns(state) { return state.towns },\n townByName: (state) => (uniqueName: string) => {\n if(Object.keys(state.towns).includes(uniqueName))\n return state.towns[uniqueName]\n return {}\n },\n townById: (state) => (id: number) => {\n const maybeTown = Object.values(state.towns).find(town => town.id === id)\n return maybeTown ? maybeTown : {}\n },\n townIdFromName: (state) => (uniqueName: string) => {\n if(Object.keys(state.towns).includes(uniqueName))\n return state.towns[uniqueName].id\n return ''\n },\n townHotwords: (state) => (townId: number) => {\n if(Object.keys(state.hotwords).includes(townId.toString())) {\n return state.hotwords[townId]\n }\n return []\n },\n townNotices: (state) => (townId: number) => {\n if(Object.keys(state.notices).includes(townId.toString()))\n return state.notices[townId]\n return []\n }\n}\n","import { ActionTree } from 'vuex'\nimport { eventHub } from '@/store/eventHub'\nimport { ModuleState, Notice } from './types'\nimport { RootState } from '@/types'\nimport { API, handleError } from '@/helpers/axios'\nimport i18next from 'i18next'\nimport i18nextConfig from '@/helpers/i18next-config'\n\ni18next.init(i18nextConfig)\n\ninterface TownSettings {\n auto_mod_new_members: number;\n default_lang: string | null;\n description: string | null;\n emergency_moderation: string | null;\n members_require_approval: number;\n}\n\nexport const actions: ActionTree = {\n async addAutoNotice(_, { eventId, townId, noticeId }: { eventId: number; townId: number; noticeId: number }) {\n try {\n const response = await API.post(`api/group/${townId}/auto-notice/create`, { eventId, noticeId })\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async deleteAutoNotice(_, { eventId, noticeId, townId }: { eventId: number; noticeId: number; townId: number }) {\n try {\n const response = await API.delete(`api/group/${townId}/auto-notice/${noticeId}`, { data: { eventId } })\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'warning',\n text: i18next.t(`Removed notice.`),\n })\n }\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async fetchAutoNotices(_, townId: number) {\n try {\n const response = await API.get(`api/group/${townId}/auto-notices`)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async createNotice(_, { townId, payload }: {townId: number; payload: Notice}) {\n try {\n const response = await API.post(`api/group/${townId}/notice/create`, payload)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async deleteNotice(_, { noticeId, townId }: { noticeId: number; townId: number }) {\n try {\n const response = await API.get(`api/group/${townId}/notice/${noticeId}/delete`)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async fetchTowns({ commit }) {\n try {\n const response = await API.get('api/groups-by-moderator')\n if (response.status === 200) commit('handleFetchTowns', response.data)\n return\n }\n catch(error) { handleError(error) }\n },\n async fetchTownActivity(_, { itemsPerPage, page, townId }: {itemsPerPage: number; page: number; townId: number}) {\n try {\n const response = await API.get(`api/group/${townId}/activity`, { params: { itemsPerPage, page } })\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async fetchHotwords({ commit }, townId: number) {\n try {\n const response = await API.get(`api/group/${townId}/hotwords`)\n if(response.status === 200) {\n commit('handleFetchHotwords', { hotwords: response.data.hotwords_groups, townId })\n return response.data.hotwords_groups\n } else console.log('hotwords got only \"response\"', response)\n }\n catch (error) { handleError(error) }\n },\n async fetchTownInfo(_, townId: number) {\n try {\n const response = await API.get(`api/group/${townId}/info`)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async fetchTownSettings(_, townId: number) {\n try {\n const response = await API.get(`api/group/${townId}/settings`)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async resetTownSettings(_, townId: number) {\n try {\n const response = await API.post(`api/group/${townId}/settings/reset`)\n return response.status === 200 ? response.data : response\n }\n catch (error) { handleError(error) }\n },\n async bulkMailNotice(_, {noticeId, townId}: {noticeId: number; townId: number}) {\n try {\n const response = await API.get(`api/group/${townId}/notice/${noticeId}/bulk-send`)\n if (response.status > 299) {\n throw response\n }\n\n return response.data\n }\n catch(error) {\n handleError({ response: error, config: error.config})\n throw error;\n }\n },\n async fetchNotice(_, {noticeId, townId}: {noticeId: number; townId: number}) {\n try {\n const response = await API.get(`api/group/${townId}/notice/${noticeId}`)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async fetchNotices({ commit }, townId: number) {\n try {\n const response = await API.get(`api/group/${townId}/notices`)\n if (response.status === 200) {\n let notices = response.data.notices.map((notice: {id: number; description: string}) => {\n return {value: notice.id, text: notice.description}\n })\n notices = [{value: 0, text: 'Custom rejection message'}].concat(notices)\n commit('handleFetchNotices', { notices, townId })\n return notices\n }\n }\n catch(error) { handleError(error) }\n },\n async fetchNoticesFull({ commit }, townId: number) {\n try {\n const response = await API.get(`api/group/${townId}/notices-full`)\n if (response.status === 200) {\n const notices = response.data.notices\n commit('handleFetchNotices', { notices, townId })\n return notices\n }\n }\n catch(error) { handleError(error) }\n },\n async updateNoticesRanking(_, {noticesRanking, townId} : {noticesRanking: [number, number][], townId: number}) {\n try {\n const response = await API.post(`api/group/${townId}/update-notices-ranking`, {noticesRanking})\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async updateNotice(_, { townId, payload }: {townId: number; payload: Notice}) {\n try {\n const response = await API.post(`api/group/${townId}/notice/${payload.id}/edit`, payload)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async updateTown(_, { townId, payload }: {townId: number; payload: TownSettings}) {\n try {\n const response = await API.post(`api/group/${townId}/update`, payload)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n },\n async createHotwords(_, { hotwords, townId }: { hotwords: string[]; townId: number }) {\n try {\n const response = await API.post(`api/group/${townId}/hotwords`, { hotwords, group_id: townId })\n return response.status === 200 ? response.data : response\n }\n catch (error) { handleError(error) }\n },\n async deleteHotwords(_, { hotwords, townId }: { hotwords: number[]; townId: number }) {\n const response = await API.delete(`api/group/${townId}/hotwords/${hotwords.join(',')}`)\n return response.status === 200 ? response.data : response\n },\n async bulkUnmoderateAll(_, townId: number) {\n try {\n const response = await API.get(`api/group/${townId}/bulk-unmoderate-all`)\n return response.status === 200 ? response.data : response\n }\n catch(error) { handleError(error) }\n }\n}\n","import { MutationTree } from 'vuex';\nimport { Hotword, ModuleState, Town, TownNotice } from './types'\nimport { initialState } from './index'\n\nexport const mutations: MutationTree = {\n handleError(state) {\n state.error = true;\n state.towns = {};\n },\n handleFetchHotwords(state, payload: { hotwords: Hotword[], townId: number }) {\n state.hotwords[payload.townId] = payload.hotwords\n },\n handleFetchNotices(state, payload: { notices: TownNotice[]; townId: number}) {\n state.notices = { ...state.notices, [payload.townId]: payload.notices }\n },\n handleFetchTowns(state, payload: Town[]) {\n const updatedTowns = payload.reduce((towns, town: Town) => {\n towns[town.uniqueName] = town\n return towns\n }, {} as { [key: string]: Town });\n state.towns = updatedTowns;\n state.error = false;\n },\n reset(state) { Object.assign(state, initialState) }\n}\n","import { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { ModuleState } from './types'\n\nexport const initialState: ModuleState = {\n error: false,\n hotwords: {},\n notices: {},\n towns: {}\n}\n\nexport const state = initialState\n\nconst namespaced = true\n\nexport default {\n namespaced,\n state,\n getters,\n actions,\n mutations\n}\n","import { GetterTree } from 'vuex'\nimport { ModuleState } from './types'\nimport { RootState } from '@/types'\n\nexport const getters: GetterTree = {\n pending: (state) => (townId: number) => { return state.pending[townId] },\n}\n","import { ActionTree } from 'vuex'\nimport { ModuleState, TownMembership } from './types'\nimport { eventHub } from '@/store/eventHub'\nimport { handleError } from '@/helpers/axios'\nimport { RootState } from '@/types'\nimport { API } from '@/helpers/axios'\nimport i18next from 'i18next'\nimport i18nextConfig from '@/helpers/i18next-config'\n\ni18next.init(i18nextConfig)\n\nexport const actions: ActionTree = {\n async fetchPending({ commit }, townId: number) {\n try {\n const response = await API.get(`api/group/${townId}/members/pending`)\n if (response.status === 200) {\n commit('handleFetchPending', {memberships: response.data, townId})\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async approve({ dispatch },\n { townId, member }: { townId: number; member: TownMembership; }) {\n try {\n const response = await API.post(`api/group/${townId}/member/${member.user_id}/approve`)\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: (`${i18next.t('Approved')} ${member.username} ${i18next.t('to join the town')}.`),\n undo: () => dispatch('unApprove', { townId, userId: member.user_id })\n })\n return response.data\n }\n }\n catch(error) { handleError(error) }\n\t},\n async bulkApprove({ dispatch },\n { townId, members }: { townId: number; members: TownMembership[]; }) {\n try {\n const userIds = members.map(member => member.user_id).join(',')\n const response = await API.post(`api/group/${townId}/member/bulk/approve`, { userIds })\n if (response.status === 200) {\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async unApprove({ dispatch }, { townId, userId }: { townId: number; userId: number }) {\n try {\n return await dispatch('setPending', { townId, userId })\n }\n catch(error) { handleError(error) }\n },\n async reject({ dispatch },\n { townId, member, notice, comment }:\n { townId: number; member: TownMembership; notice: string; comment: string; }) {\n try {\n const response = await API.post(`api/group/${townId}/member/${member.user_id}/reject`, { notice, comment })\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'warning',\n text: (`${i18next.t('Rejected')} ${member.username} ${i18next.t('from joining the town')}.`),\n undo: () => dispatch('unReject', { townId, userId: member.user_id })\n })\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async bulkReject({ dispatch },\n { townId, members, notice, comment }:\n { townId: number; members: TownMembership[]; notice: string; comment: string; }) {\n try {\n const userIds = members.map(member => member.user_id).join(',')\n const response = await API.post(`api/group/${townId}/member/bulk/reject`, { notice, comment, userIds })\n if (response.status === 200) {\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async unReject({ dispatch }, { townId, userId }: { townId: number; userId: number }) {\n try {\n await dispatch('joinAndSetPending', { townId, userId })\n return await dispatch('fetchPending', townId)\n }\n catch(error) { handleError(error) }\n },\n async joinAndSetPending({ dispatch }, { townId, userId }: { townId: number; userId: number }) {\n try {\n const response = await API.get(`api/group/${townId}/members`)\n if (response.data.map((x: { user_id: number }) => x.user_id).includes(userId)) {\n const user = response.data.find((x: {user_id: number}) => x.user_id === userId)\n if (user !== undefined && !user.is_pending)\n return await dispatch('setPending', { townId, userId })\n else return\n } else {\n await API.post(`api/group/${townId}/join`, { userId })\n return dispatch('setPending', { townId, userId })\n }\n }\n catch(error) { handleError(error) }\n },\n async setPending(_, { townId, userId }: { townId: number; userId: number }) {\n try {\n const response = await API.post(`api/group/${townId}/member/${userId}/update`, { is_pending: 1, approved_by: 0 })\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: `${i18next.t('Set')} ${userId} ${i18next.t('to pending')}.`\n })\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async moderate({ dispatch },\n { townId, member }: { townId: number; member: TownMembership; }) {\n try {\n const response = await API.post(`api/group/${townId}/member/${member.user_id}/moderate`)\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: `${i18next.t('Set')} ${member.username} ${i18next.t('to moderated')}.`,\n undo: () => dispatch('unModerate', { townId, member })\n })\n return response.data\n }\n }\n catch(error) { handleError(error) }\n\t},\n async bulkModerate({ dispatch },\n { townId, members }: { townId: number; members: TownMembership[] }) {\n try {\n const userIds = members.map(member => member.user_id).join(',')\n const response = await API.post(`api/group/${townId}/member/bulk/moderate`, {userIds})\n if (response.status === 200) {\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async unModerate({ dispatch },\n { townId, member }: { townId: number; member: TownMembership; }) {\n try {\n const response = await API.post(`api/group/${townId}/member/${member.user_id}/unmoderate`)\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: `${i18next.t('Set')} ${member.username} ${i18next.t('to unmoderated')}.`,\n undo: () => dispatch('moderate', { townId, member })\n })\n return response.data\n }\n }\n catch(error) { handleError(error) }\n\t},\n async bulkUnmoderate({ dispatch },\n { townId, members }: { townId: number; members: TownMembership[] }) {\n try {\n const userIds = members.map(member => member.user_id).join(',')\n // we can't put all the IDs in the URL! that's why it's a post!\n const response = await API.post(`api/group/${townId}/member/bulk/unmoderate/`, { userIds })\n if (response.status === 200) {\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async tempModerate(_, { townId, member }: { townId: number; member: TownMembership; }) {\n try {\n const response = await API.post(`api/group/${townId}/member/${member.user_id}/temp-moderate`)\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: `${i18next.t('Set')} ${member.username} ${i18next.t('to temporarily moderated')}.`\n })\n return response.data\n }\n }\n catch(error) { handleError(error) }\n\t},\n async bulkTempModerate({ dispatch },\n { townId, members }: { townId: number; members: TownMembership[] }) {\n try {\n const userIds = members.map(member => member.user_id).join(',')\n const response = await API.post(`api/group/${townId}/member/bulk/temp-moderate/`, { userIds })\n if (response.status === 200) {\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async setEmailDeliveryPreference(_, {townId, member, deliveryPreference }: {\n townId: number;\n member: TownMembership;\n deliveryPreference: number;\n }) {\n try {\n const response = await API\n .post(`api/group/${townId}/member/${member.user_id}/set-email-delivery-preference`, { deliveryPreference })\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'success',\n text: `${i18next.t('Successfully updated email delivery preference for')} ${member.username}.`,\n timeout: 2000\n })\n return response.data\n }\n }\n catch(error) { handleError(error) }\n },\n async bulkSetEmailDeliveryPreference(_, {townId, members, deliveryPreference }: {\n townId: number;\n members: TownMembership[];\n deliveryPreference: number;\n }) {\n try {\n const userIds = members.map(member => member.user_id).join(',')\n const response = await API\n .post(`api/group/${townId}/member/bulk/set-email-delivery-preference`, { deliveryPreference, userIds })\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async remove(_,\n { townId, member }:\n { townId: number; member: TownMembership }) {\n try {\n const response = await API.post(`api/group/${townId}/member/${member.user_id}/remove`)\n if (response.status === 200) {\n eventHub.$emit('triggerSnackbar', {\n color: 'alert',\n text: `${i18next.t('Removed')} ${member.username} ${i18next.t('from the town')}.`\n })\n }\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async bulkRemove(_,\n { townId, members }:\n { townId: number; members: TownMembership[]; }) {\n try {\n const userIds = members.map(member => member.user_id).join(',')\n const response = await API.post(`api/group/${townId}/member/bulk/remove`, { userIds })\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async changeModeratorLevel(_,\n { currentLevel, targetLevel, townId, userId }:\n { currentLevel: number; targetLevel: number; townId: number; userId: number }) {\n try {\n const response = await API.post(`api/group/${townId}/member/${userId}/mod-level`,\n { currentLevel, targetLevel })\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async checkInvitees(_, invitees: string[]) {\n try {\n const response = await API.post(`api/member/check`, invitees)\n return response.data\n }\n catch(error) { handleError(error) }\n },\n async invite(_, { townId, member }: { townId: number; member: TownMembership; }) {\n try {\n const response = await API.post(`api/group/${townId}/access/invite`, {\n userId: member.user_id,\n groupId: townId\n })\n if (response.status === 200) return response.data\n }\n catch(error) { handleError(error) }\n\t}\n}\n","import { MutationTree } from 'vuex'\nimport { TownMembership, ModuleState } from './types'\nimport { initialState } from './index'\n\nexport const mutations: MutationTree = {\n handleFetchPending(state, { memberships, townId }: {memberships: TownMembership[]; townId: number}) {\n state.pending[townId] = memberships;\n },\n reset(state) { Object.assign(state, initialState) }\n}\n","import { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { ModuleState } from './types'\n\nexport const initialState: ModuleState = {\n pending: {}\n}\n\nexport const state = initialState\n\nconst namespaced = true\n\nexport default {\n namespaced,\n state,\n getters,\n actions,\n mutations\n}\n","import { GetterTree } from 'vuex'\nimport { ModuleState } from './types'\nimport { RootState } from '@/types'\n\nexport const getters: GetterTree = {\n items(state) { return state.items },\n item(state) { return state.item }\n}\n","export const basePath = 'api/users'\n\ninterface AccessRecord {\n to: number;\n privilege_type_id: number;\n}\n\nexport interface Item {\n user_id: number;\n username: string;\n email: string;\n first_name: string;\n image: string;\n last_name: string;\n home_group: number;\n languages_preferred: string;\n group_memberships: {\n group_id: number;\n group: {\n group_name: string;\n yahoo_group_name: string;\n group_status_id: number;\n region: {\n region_id: number;\n region_name: string;\n country: {\n country_id: number;\n country_name: string;\n };\n };\n };\n };\n user_info: {\n signup_date: string;\n reputation: number;\n };\n accesses?: AccessRecord[]\n}\n\nexport interface ModuleState {\n items: Item[];\n item: Item;\n}\n","import { ActionTree } from 'vuex';\nimport { basePath, ModuleState } from './types';\nimport { RootState } from '@/types';\nimport { API, handleError } from '@/helpers/axios'\n\nexport const actions: ActionTree = {\n async fetchBy({ commit }, { id, accesses = false }: { id: string; accesses: boolean } ) {\n try {\n const response = await API.get(`${basePath}/${id}`, {\n params: { accesses }\n })\n if (response.status === 200) {\n commit('handleResponseFetchBy', { item: response.data })\n return response.data\n }\n }\n catch(error) { handleError(error) }\n return false\n }\n}\n","import { MutationTree } from 'vuex';\nimport { Item, ModuleState } from './types'\nimport { initialState } from './index'\n\nexport const mutations: MutationTree = {\n handleResponse(state, payload: { items: Item[] }) {\n state.items = payload.items;\n },\n handleResponseFetchBy(state, payload: { item: Item }) {\n state.item = payload.item;\n },\n reset(state) { Object.assign(state, initialState) },\n}\n","import { getters } from './getters'\nimport { actions } from './actions'\nimport { mutations } from './mutations'\nimport { Item, ModuleState } from './types'\n\nexport const initialState: ModuleState = {\n items: [],\n item: {} as Item\n}\n\nexport const state = initialState\n\nconst namespaced = true\n\nexport default {\n namespaced,\n state,\n getters,\n actions,\n mutations\n}\n","import Vue from 'vue'\nimport Vuex, { StoreOptions } from 'vuex'\nimport { RootState } from '@/types'\nimport createPersistedState from 'vuex-persistedstate'\nimport auth from '@/store/auth'\nimport moderatorPreferences from '@/store/moderator-preferences'\nimport posts from '@/store/posts'\nimport tags from '@/store/tags'\nimport towns from '@/store/towns'\nimport townMemberships from '@/store/town-memberships'\nimport users from '@/store/users'\n\nVue.use(Vuex);\n\nconst store: StoreOptions = {\n modules: {\n auth,\n moderatorPreferences,\n posts,\n tags,\n towns,\n townMemberships,\n users\n },\n plugins: [\n createPersistedState({ storage: window.sessionStorage })\n ]\n};\n\nexport default new Vuex.Store(store);\n","/* Help Scout Beacon 2.0 - https://developer.helpscout.com/beacon-2/web/javascript-api/\n\nWe no longer need options here, all managed through GUI in version\n2.0 (unless of course we want to force any options):\nhttps://developer.helpscout.com/beacon-2/web/javascript-api/#beaconconfig-formobject\n*/\n\n!function(e,t,n){function a(){const e=t.getElementsByTagName(\"script\")[0],n=t.createElement(\"script\");n.type=\"text/javascript\",n.async=!0,n.src=\"https://beacon-v2.helpscout.net\",e.parentNode.insertBefore(n,e)}if(e.Beacon=n=function(t,n,a){e.Beacon.readyQueue.push({method:t,options:n,data:a})},n.readyQueue=[],\"complete\"===t.readyState)return a();e.attachEvent?e.attachEvent(\"onload\",a):e.addEventListener(\"load\",a,!1)}(window,document,window.Beacon||function(){return false;});\nwindow.Beacon('init', 'ced77731-709d-484c-85bf-5aa0833dcc0b');\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","\n module.exports = {\n functional: true,\n render(_h, _vm) {\n const { _c, _v, data, children = [] } = _vm;\n\n const {\n class: classNames,\n staticClass,\n style,\n staticStyle,\n attrs = {},\n ...rest\n } = data;\n\n return _c(\n 'svg',\n {\n class: [classNames,staticClass],\n style: [style,staticStyle],\n attrs: Object.assign({\"data-name\":\"Layer 1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\"}, attrs),\n ...rest,\n },\n children.concat([_c('path',{attrs:{\"d\":\"M14.43 8.66c-2.06-4.43-3.13-6.12-6.5-6-1.2 0-.91-.87-1.83-.53S6 2.91 5 3.68c-2.58 2.15-2.34 4.14-1.12 8.89.51 2-1.24 2.1-.54 4 .51 1.41 4.23 2 8.16.55s6.41-4.35 5.9-5.76c-.7-1.91-2.1-.84-2.97-2.7zM11.07 16c-3.51 1.3-6.39.54-6.51.2-.21-.59 1.13-2.55 5.14-4s6.25-.94 6.48-.28c.14.31-1.61 2.74-5.11 4.08zm-1.13-3.2A13.14 13.14 0 006 15a2.77 2.77 0 002.75.25c1.38-.51 2.23-1.69 1.89-2.63z\"}})])\n )\n }\n }\n ","\n module.exports = {\n functional: true,\n render(_h, _vm) {\n const { _c, _v, data, children = [] } = _vm;\n\n const {\n class: classNames,\n staticClass,\n style,\n staticStyle,\n attrs = {},\n ...rest\n } = data;\n\n return _c(\n 'svg',\n {\n class: [classNames,staticClass],\n style: [style,staticStyle],\n attrs: Object.assign({\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 320 512\"}, attrs),\n ...rest,\n },\n children.concat([_c('path',{attrs:{\"d\":\"M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z\"}})])\n )\n }\n }\n ","\n module.exports = {\n functional: true,\n render(_h, _vm) {\n const { _c, _v, data, children = [] } = _vm;\n\n const {\n class: classNames,\n staticClass,\n style,\n staticStyle,\n attrs = {},\n ...rest\n } = data;\n\n return _c(\n 'svg',\n {\n class: [\"fc-logo-svg\",classNames,staticClass],\n style: [style,staticStyle],\n attrs: Object.assign({\"data-name\":\"Layer 1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 184 86\"}, attrs),\n ...rest,\n },\n children.concat([_c('path',{staticClass:\"cls-1\",attrs:{\"d\":\"M0 0h52v20H0z\"}}),_c('path',{staticClass:\"cls-2\",attrs:{\"d\":\"M54.33 49.7c0 3.61 2.32 7.64 7.25 7.64a6.86 6.86 0 006.68-4.27L65.95 52a4.56 4.56 0 01-4.27 2.8c-2.56 0-4.33-2.08-4.33-5.11 0-2.86 1.69-4.81 4.21-4.81a3.56 3.56 0 013.76 3.22h2.53v-5.38h-2.54v1a6.1 6.1 0 00-4-1.38 7.18 7.18 0 00-6.98 7.36zM76.33 56.66l-1.71 4.18h-2.8v2.46h4.75l7.04-18.11h2.11v-2.47h-6.89v2.47h1.9l-3.01 7.85-3.07-7.85h1.68v-2.47h-7.04v2.47h2.38l4.66 11.47zM93.11 54.79c-2.56 0-4.33-2.08-4.33-5.11 0-2.86 1.69-4.81 4.21-4.81a3.56 3.56 0 013.76 3.22h2.53v-5.37h-2.53v1a6.1 6.1 0 00-4-1.38 7.18 7.18 0 00-7 7.4c0 3.61 2.32 7.64 7.25 7.64a6.86 6.86 0 006.68-4.27L97.39 52a4.56 4.56 0 01-4.28 2.79zM106.35 36.5H101v2.46h2.53v15.5h-2.59v2.46h7.61v-2.46h-2.2V36.5zM116.16 42.3a7.47 7.47 0 00-7.46 7.52c0 4.39 3.31 7.52 7.91 7.52a8.2 8.2 0 007.13-3.7l-2.47-1.08a5.54 5.54 0 01-4.6 2.32 4.68 4.68 0 01-4.87-4.36h11.94c0-5.21-3.64-8.22-7.58-8.22zm-4.27 6.17a4.37 4.37 0 014.33-3.91 4.84 4.84 0 014.66 3.91h-9zM86.77 77.24c-4.54 4.38-9.89 6.41-16.22 5.5a32.65 32.65 0 01-14.47-6.32c-3-2.15-5.76-4.59-8.63-6.89l.3-.48c.87.24 1.73.51 2.6.72 1.65.38 2.19-.77 2.65-1.93.53-1.38-.79-1.33-1.45-1.55-2.66-.89-5.33-1.74-8-2.42-1-.26-2.75-.42-3.15.13a5.66 5.66 0 00-.74 3.7 38.76 38.76 0 001.24 5.5c.53 2 1.09 4.08 1.71 6.4 3.52-2.5.38-5.52 1.26-8.15l1.13.94c2.73 2.25 5.37 4.63 8.22 6.73A37.51 37.51 0 0069.4 86h3.67c.65-.14 1.31-.31 2-.43 5.05-.92 11.22-5.4 12.73-9.4-.42.3-.68.73-1.03 1.07z\"}}),_c('path',{staticClass:\"cls-3\",attrs:{\"d\":\"M4.9 45.19h2.41v-2.47H4.9V39.9c0-1 .39-1.53 1.08-1.53s1 .45 1.08 1.38l2.47-.39a3.5 3.5 0 00-3.67-3.28c-2 0-3.79 1.26-3.79 4.09v2.56H0v2.47h2.08v9.27h-2v2.47h7.56v-2.48H4.9v-9.27z\"}}),_c('path',{staticClass:\"cls-3\",attrs:{\"d\":\"M13.94 45.91h-.06v-3.19H8.8v2.47h2.86v9.27h-2.8v2.47h8.7v-2.47h-3.08V50.4c0-3.25 1-5.09 4.27-5.09h1.5v-2.83h-1.83a4.81 4.81 0 00-4.48 3.43zM28.34 42.3a7.47 7.47 0 00-7.46 7.52c0 4.39 3.31 7.52 7.91 7.52a8.2 8.2 0 007.13-3.7l-2.47-1.08a5.54 5.54 0 01-4.6 2.32A4.68 4.68 0 0124 50.52h11.92c0-5.21-3.64-8.22-7.58-8.22zm-4.27 6.17a4.37 4.37 0 014.33-3.91 4.84 4.84 0 014.66 3.91h-9zM45.53 57.35a8.2 8.2 0 007.13-3.7l-2.47-1.08a5.54 5.54 0 01-4.6 2.32 4.68 4.68 0 01-4.87-4.36h11.94c0-5.21-3.64-8.21-7.58-8.21a7.47 7.47 0 00-7.46 7.52c-.01 4.38 3.3 7.51 7.91 7.51zm-.39-12.79a4.84 4.84 0 014.66 3.91h-9a4.37 4.37 0 014.34-3.91zM126.1 53.32h3.61v3.61h-3.61zM138.95 42.3a7.52 7.52 0 107.46 7.52 7.32 7.32 0 00-7.46-7.52zm0 12.34a4.53 4.53 0 01-4.45-4.81 4.48 4.48 0 118.94 0 4.54 4.54 0 01-4.52 4.81zM152.61 45.91h-.06v-3.19h-5.09v2.47h2.86v9.27h-2.8v2.47h8.7v-2.47h-3.07V50.4c0-3.25 1-5.09 4.27-5.09h1.5v-2.83h-1.84a4.81 4.81 0 00-4.47 3.43zM171.58 44.74a6.83 6.83 0 00-5-2.26c-4 0-7 3.28-7 7.55s2.92 7.31 6.92 7.31a6.69 6.69 0 005.02-2.34h.06v2.14c0 3.13-2.83 4-4.57 4a6.3 6.3 0 01-4-1.47l-1.81 2a8.58 8.58 0 005.6 1.9c3.19 0 7.61-1.5 7.61-6.59V45.19h2.56v-2.47h-5.36v2zM167 54.88c-2.62 0-4.45-2-4.45-4.9A4.58 4.58 0 01167 45.1a4.9 4.9 0 010 9.78zM10.81 22.47C15.34 18.09 20.7 16.06 27 17a32.65 32.65 0 0114.47 6.32c3 2.15 5.76 4.59 8.63 6.89l-.3.48c-.87-.24-1.73-.51-2.6-.72-1.61-.38-2.19.76-2.64 1.93-.53 1.38.79 1.33 1.45 1.55 2.66.89 5.33 1.74 8 2.42 1 .26 2.75.42 3.15-.13A5.66 5.66 0 0058 32a38.89 38.89 0 00-1.31-5.51c-.53-2-1.09-4.08-1.71-6.4-3.52 2.5-.38 5.52-1.26 8.15l-1.1-.93c-2.73-2.25-5.37-4.63-8.22-6.73a37.52 37.52 0 00-16.2-6.88h-3.69c-.65.14-1.31.31-2 .43-5.05.92-11.22 5.4-12.73 9.4a14.52 14.52 0 001.03-1.06z\"}}),_c('path',{staticClass:\"cls-4\",attrs:{\"d\":\"M16.71 8.31c.79-.31 1.08-3.52.63-4.66a2.29 2.29 0 10-4.27 1.68c.45 1.14 2.85 3.29 3.64 2.98zM9 14c.6-.6-.41-3.66-1.28-4.53a2.29 2.29 0 10-3.24 3.24C5.37 13.59 8.43 14.6 9 14zM35.65 8.31c.79.31 3.19-1.84 3.64-3A2.29 2.29 0 1035 3.65c-.43 1.14-.14 4.35.65 4.66zM47.85 12.72a2.29 2.29 0 10-3.25-3.24c-.87.87-1.88 3.93-1.28 4.53s3.68-.42 4.53-1.29zM26.18 6.42c.85 0 2.29-2.88 2.29-4.1a2.29 2.29 0 10-4.59 0c0 1.22 1.45 4.1 2.3 4.1z\"}}),_c('path',{staticClass:\"cls-3\",attrs:{\"d\":\"M182 37.25a1.1 1.1 0 00-1.28-1.07h-1.45v3.25h.73v-1h.57l.69 1h.84l-.79-1.17a1 1 0 00.69-1.01zm-1.28.52H180v-1h.7a.48.48 0 11-.02.99z\"}}),_c('path',{staticClass:\"cls-3\",attrs:{\"d\":\"M180.51 34.83a3.06 3.06 0 103.05 3.05 3.07 3.07 0 00-3.05-3.05zm0 5.78a2.72 2.72 0 112.71-2.73 2.67 2.67 0 01-2.72 2.73z\"}})])\n )\n }\n }\n ","\n module.exports = {\n functional: true,\n render(_h, _vm) {\n const { _c, _v, data, children = [] } = _vm;\n\n const {\n class: classNames,\n staticClass,\n style,\n staticStyle,\n attrs = {},\n ...rest\n } = data;\n\n return _c(\n 'svg',\n {\n class: [classNames,staticClass],\n style: [style,staticStyle],\n attrs: Object.assign({\"data-name\":\"Layer 1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\"}, attrs),\n ...rest,\n },\n children.concat([_c('path',{attrs:{\"d\":\"M10 0a10 10 0 1010 10A10 10 0 0010 0zm5 15h-2.19V8.47L10 12.74h-.06L7.16 8.51V15H5V5h2.37L10 9.23 12.63 5H15v10z\"}})])\n )\n }\n }\n ","\n module.exports = {\n functional: true,\n render(_h, _vm) {\n const { _c, _v, data, children = [] } = _vm;\n\n const {\n class: classNames,\n staticClass,\n style,\n staticStyle,\n attrs = {},\n ...rest\n } = data;\n\n return _c(\n 'svg',\n {\n class: [classNames,staticClass],\n style: [style,staticStyle],\n attrs: Object.assign({\"data-name\":\"Layer 1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\"}, attrs),\n ...rest,\n },\n children.concat([_c('path',{attrs:{\"d\":\"M2.53 5.65l6.66 3.59a1.91 1.91 0 001.61 0l6.67-3.58c.43-.23.85-1 0-1h-15c-.79.03-.38.76.06.99zm15.13 1.78L10.81 11a1.52 1.52 0 01-.81.18 1.52 1.52 0 01-.81-.18L2.34 7.43C2 7.25 2 7.46 2 7.63v6.52a1 1 0 00.88.85h14.24a1 1 0 00.88-.85V7.63c0-.17 0-.38-.34-.2z\"}})])\n )\n }\n }\n ","\n module.exports = {\n functional: true,\n render(_h, _vm) {\n const { _c, _v, data, children = [] } = _vm;\n\n const {\n class: classNames,\n staticClass,\n style,\n staticStyle,\n attrs = {},\n ...rest\n } = data;\n\n return _c(\n 'svg',\n {\n class: [classNames,staticClass],\n style: [style,staticStyle],\n attrs: Object.assign({\"data-name\":\"Layer 1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\"}, attrs),\n ...rest,\n },\n children.concat([_c('path',{attrs:{\"d\":\"M14.53 14.13c-2.1-.76-2.77-1.41-2.77-2.79 0-.83.64-.56.92-2.08.12-.63.68 0 .79-1.45a.73.73 0 00-.31-.72s.16-.85.22-1.5c.08-.81-.47-2.91-3.38-2.91s-3.46 2.1-3.38 2.91c.06.65.22 1.5.22 1.5a.73.73 0 00-.31.72c.11 1.44.67.82.79 1.45.28 1.52.92 1.25.92 2.08 0 1.38-.67 2-2.77 2.79S2 15.67 2 16.21V18h16v-1.79c0-.54-1.37-1.32-3.47-2.08z\"}})])\n )\n }\n }\n ","\n module.exports = {\n functional: true,\n render(_h, _vm) {\n const { _c, _v, data, children = [] } = _vm;\n\n const {\n class: classNames,\n staticClass,\n style,\n staticStyle,\n attrs = {},\n ...rest\n } = data;\n\n return _c(\n 'svg',\n {\n class: [classNames,staticClass],\n style: [style,staticStyle],\n attrs: Object.assign({\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}, attrs),\n ...rest,\n },\n children.concat([_c('path',{attrs:{\"d\":\"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"}})])\n )\n }\n }\n "],"names":["authAutoCheckTimeout","init","check","this","user","setupAutocheck","websocketSetup","checkTimeout","store","getters","clearTimeout","newTimeout","setTimeout","refresh","commit","wssAuthResp","wsClient","wssAuth","data","status","console","error","initialize","id","i18next","language","loginRedirect","authcheck","API","get","wss","httpCodeSwitch","debug","handleError","response","config","baseURL","vueDomain","url","e","errorMessage","eventHub","$emit","color","text","timeout","undo","undoText","loggedInRedirect","resetStore","code","log","location","href","pathname","fc3MainHostname","close","redirectTarget","document","URL","Cookies","set","domain","i18nextConfig","hapiDomain","window","host","imagesDomain","process","axios","withCredentials","validateStatus","toString","spamcontrolUserId","mainHost","offer","taken","wanted","received","vue_app_version","require","isDevMode","loadPathDomain","hostname","findSimpleLang","Array","isArray","navigator","languages","length","hyphenIndex","indexOf","substring","i18_DEBUG","lng","fallbackLng","fallbackNS","returnEmptyString","nsSeparator","keySeparator","backend","loadPath","parseMissingKeyHandler","key","async","replace","c","r","Math","random","v","socket","WebSocket","basePath","authCheck","reason","sessionStorage","setItem","token","authenticated","userId","websocketClientId","getItem","newWebsocketClientId","generateUuid","sendHello","onmessage","handleMessage","onerror","onopen","event","onclose","reopenSocket","send","type","version","subs","message","msgData","JSON","parse","eventName","statusCode","payload","subscribe","path","auth","stringify","statusCheck","setInterval","readyState","OPEN","clearInterval","render","_vm","_h","$createElement","_c","_self","attrs","townsAlpha","on","enter","leave","Object","keys","towns","wssHelloReceived","staticClass","_e","staticRenderFns","model","value","callback","$$v","visible","expression","_v","_s","undoMethod","Vue","extend","name","$t","computed","smartTimeout","created","$on","trigger","methods","$vuetify","theme","themes","light","watch","val","component","VBtn","mixin","el","done","style","transition","opacity","username","email","moderatedTowns","scopedSlots","_u","fn","ref","_g","$route","includes","townsMenuLabel","townsSearchString","_l","town","uniqueName","$event","$router","push","townsFiltered","refreshTowns","params","link","class","index","split","child","childIndex","pathEnding","endsWith","title","props","components","MainLink","mapState","names","forEach","townName","accesses","filter","access","privilege","map","to","self","filterTowns","townLinks","children","needle","toLowerCase","assign","values","$store","dispatch","updateFilteredTowns","VIcon","_m","staticStyle","stopPropagation","preventDefault","openHelp","apply","arguments","date","getFullYear","FacebookIcon","TwitterIcon","Date","footerMenuItems","home","Beacon","item","logout","AlertsIcon","FreecycleLogo","MessagesIcon","ProfileIcon","mounted","initDropdowns","destroyed","menuItems","action","menus","querySelectorAll","_","menu","entries","querySelector","addEventListener","classList","toggle","removeEventListener","Bottom","SecondaryNav","Snackbar","Top","mixins","Transitions","lang","current","addFavicon","addVersionMetaTag","setTownsAlpha","head","getElementsByTagName","tag","createElement","setAttribute","appendChild","alphaSort","a","b","sorted","sort","VApp","script","routes","RouterView","meta","redirect","use","VueRouter","routerOptions","mode","base","scrollBehavior","x","y","router","beforeEach","_from","next","doNext","session","townId","defaultTitle","afterEach","nextTick","Vuetify","vuetify","breakpoint","thresholds","xs","sm","md","lg","scrollBarWidth","primary","secondary","accent","success","warning","alert","primaryDarken","wantedDarken","lend","lendDarken","borrow","borrowDarken","offerDarken","rejected","delete","deleteDarken","FCVue","install","prototype","$bus","$findOne","haystack","arr","some","geoFormat","lat","Number","time","timezone","moment","fromNow","dateToModify","utc","tz","regex","clamp","tcText","slice","last","String","charAt","toUpperCase","HttpApi","then","t","vm","h","App","$mount","i18NextVue","state","currentAccesses","actions","fetchSession","mutations","reset","initialState","sessionLoaded","sessionError","undefined","namespaced","items","create","post","itemId","fetch","update","handleResponse","posts","postsByTownByUserByStatus","postsByTownByUserPending","postsByTownByUserActive","postsByTownByUserInactive","fetchBy","Error","fetchTownUserByStatus","limit","townPreferred","limitNumber","fetchPendingByTown","approve","postId","bulkApprove","unApprove","bulkUnApprove","subject","description","lendDuration","images","reject","comment","unReject","bulk","bulkDelete","unDelete","shimmedPost","postType","group","handleResponseFetchBy","handleFetchPendingByTownResponse","postsByTownPending","handleResponseByTownByUserPending","handleResponseByTownByUserActive","handleResponseByTownByUserInactive","handleTownUserByStatusResponse","fetchAll","townByName","townById","maybeTown","find","townIdFromName","townHotwords","hotwords","townNotices","notices","addAutoNotice","eventId","noticeId","deleteAutoNotice","fetchAutoNotices","createNotice","deleteNotice","fetchTowns","fetchTownActivity","itemsPerPage","page","fetchHotwords","hotwords_groups","fetchTownInfo","fetchTownSettings","resetTownSettings","bulkMailNotice","fetchNotice","fetchNotices","notice","concat","fetchNoticesFull","updateNoticesRanking","noticesRanking","updateNotice","updateTown","createHotwords","group_id","deleteHotwords","join","bulkUnmoderateAll","handleFetchHotwords","handleFetchNotices","handleFetchTowns","updatedTowns","reduce","pending","fetchPending","memberships","member","user_id","members","userIds","bulkReject","joinAndSetPending","is_pending","setPending","approved_by","moderate","bulkModerate","unModerate","bulkUnmoderate","tempModerate","bulkTempModerate","setEmailDeliveryPreference","deliveryPreference","bulkSetEmailDeliveryPreference","remove","bulkRemove","changeModeratorLevel","currentLevel","targetLevel","checkInvitees","invitees","invite","groupId","handleFetchPending","Vuex","modules","moderatorPreferences","tags","townMemberships","users","plugins","createPersistedState","storage","n","src","parentNode","insertBefore","readyQueue","method","options","attachEvent","webpackContext","req","webpackContextResolve","__webpack_require__","o","resolve","module","exports","functional","classNames","rest"],"sourceRoot":""}