{"version":3,"file":"static/chunks/app/page-fafed4ef42909518.js","mappings":"+EAAA,uCAAiG,wFCAjG,MAAe,CAAC,yGAAiH,8NAAkO,CCAnW,EAAe,CAAC,8GAAsH,kOAAsO,CCA5W,EAAe,CAAC,8FAAsG,sTAA0T,CCAhb,EAAe,CAAC,2FAAmG,kNAAsN,CCAzU,EAAe,CAAC,gGAAwG,kNAAsN,CCA9U,EAAe,CAAC,0FAAkG,0PAA8P,CCAhX,EAAe,CAAC,+FAAuG,8OAAkP,CCAzW,EAAe,CAAC,0FAAkG,kQAAsQ,CCAxX,EAAe,CAAC,+FAAuG,kRAAsR,CCA7Y,EAAe,CAAC,0FAAkG,kNAAsN,CCAxU,EAAe,CAAC,+FAAuG,sMAA0M,qCCO1T,IAAMA,EAA8BC,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CAGnD,GAAoCC,QAAnC,OAAEC,CAAK,CAAEC,IAAE,WAAEC,CAAS,CAAE,GAAGC,EAAM,GAClC,MACE,WAACC,MAAAA,CAAIF,UAAU,4BACb,UAACG,QAAAA,CACCN,IAAKA,EACLE,GAAIA,EACJC,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,+YACAJ,GAEFK,YAAY,WACX,GAAGJ,CAAI,GAGV,UAACH,QAAAA,CACCQ,QAASP,EACTC,UAAU,2lBAETF,MAIT,GAAG,EAEGS,WAAW,CAAG,iCCxBb,IAAMC,EAAwB,OAAC,SAAEC,CAAO,CAAEC,KAAG,CAAE,GAAGT,EAAM,GACvD,CAAEU,eAAa,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,GAC5B,CAACC,EAASC,EAAW,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,SAGvC,CAFAC,CAAAA,EAEI,EAFJA,SAAAA,CAASA,CAAC,IAAMF,GAAW,GAAO,EAAE,EAE/BD,GAIE,MAJO,EAIP,EAACI,EAAAA,OAASA,CAAAA,CAACP,IAFoB,CAEfQ,QAFHP,GAA4BF,EAAUA,EAAUC,EAE/B,GAAGT,CAAI,GAJvB,IAKvB,EAAE,0BCKK,IAAMkB,EAAO,KAClB,IAAMC,EAAgBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAACC,sCAA+B,EAC1DC,EAD8D,CAAE,EACzDC,EAAAA,EAAAA,CAAOA,CAAuB,CACzCC,cAAe,CACbC,MAAO,EACT,CACF,GAaA,MACE,UAACC,UAAAA,CACCC,kBAAgB,eAChB5B,UAAU,6CAEV,UAACE,MAAAA,CAAIF,UAAU,6BACb,WAACE,MAAAA,CAAIF,UAAU,+CACb,WAAC6B,SAAAA,CAAO7B,UAAU,8CAChB,UAAC8B,EAAAA,EAAGA,CAAAA,CAACC,QAAQ,UAAUC,GAAG,aAAI,uBAG9B,WAACC,EAAAA,EAAKA,CAAAA,CACJC,MAAM,SACNF,GAAG,KACHjC,GAAG,eACHoC,MAAM,YACNnC,UAAU,+GAEV,UAACoC,SAAAA,CAAOpC,UAAU,wBAAe,aAAiB,iCAElD,UAACQ,EAAKA,CACJR,EADIQ,QACM,gDACVE,IAAK2B,EACLC,GADUD,CACN,GACJE,cAAY,OACZC,WAAS,iBACTC,iBAAe,WAGnB,UAACR,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACHU,QAAQ,KACRR,MAAM,SACNlC,UAAU,oGACVmC,MAAM,oBACP,mIAMH,WAACjC,MAAAA,CAAIF,UAAU,uDACb,WAACuB,OAAAA,CACCvB,UAAU,sCACV2C,SAAUpB,EAAKqB,YAAY,CAACD,IAtDtC,GAAIE,EAAOnB,KAAK,CAAE,CAChB,IAAMoB,EAAM,IAAIC,IAAI3B,EAAe4B,OAAOC,QAAQ,CAACC,MAAM,EACzDJ,EAAIK,YAAY,CAACC,GAAG,CAAC,QAASP,EAAOnB,KAAK,EAC1CsB,OAAOC,QAAQ,CAACI,IAAI,CAAGP,EAAIQ,QAAQ,GACnC,MACF,CAEAN,OAAOC,QAAQ,CAACI,IAAI,CAAGjC,CACzB,aAgDY,UAACmC,EAAAA,EAAUA,CAAAA,CACTC,KAAK,QACLC,QAASlC,EAAKkC,OAAO,CACrBC,aAAa,GACbC,OAAQ,OAAC,OAAEC,CAAK,CAAE,SAChB,UAACjE,EAAKA,CACJG,EADIH,IACE,SACNK,UAAU,OACV6D,aAAa,QACb9D,GAAG,aACH+D,KAAK,QACJ,GAAGF,CAAK,MAKf,UAACG,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,SACLhE,UAAU,SACV8D,KAAK,SACLG,aAAW,yCACXC,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,YACPC,MAAO,oBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAGtB,oBAKH,WAACC,KAAAA,CACCvE,UAAU,mEACViE,aAAW,2BAEX,WAACO,KAAAA,CAAGxE,UAAU,yEACZ,UAACyE,EAAAA,EAAIA,CAAAA,CAACC,KAAK,YAAY1E,UAAU,0BACjC,UAAC2E,IAAAA,CAAE3E,UAAU,mEAA0D,2BAIzE,WAACwE,KAAAA,CAAGxE,UAAU,yEACZ,UAACyE,EAAAA,EAAIA,CAAAA,CAACC,KAAK,YAAY1E,UAAU,0BACjC,UAAC2E,IAAAA,CAAE3E,UAAU,mEAA0D,qCAIzE,WAACwE,KAAAA,CAAGxE,UAAU,yEACZ,UAACyE,EAAAA,EAAIA,CAAAA,CAACC,KAAK,YAAY1E,UAAU,0BACjC,UAAC2E,IAAAA,CAAE3E,UAAU,mEAA0D,uCAO7E,WAACE,MAAAA,CAAIF,UAAU,oHACb,UAACQ,EAAKA,CACJE,EADIF,EACCoE,EAASA,QACLC,EACT7E,KADsB6E,KACZ,sGACVvC,IAAI,GACJC,cAAY,OACZC,WAAS,UACTC,iBAAe,OAEjB,UAACjC,EAAKA,CACJE,EADIF,EACCsE,EAASA,QACLC,EACT/E,KADsB+E,KACZ,+FACVzC,IAAI,GACJC,cAAY,OACZC,WAAS,YAEX,UAAChC,EAAKA,CACJE,EADIF,EACCwE,EAAWA,QACPC,EACTjF,KADwBiF,KACd,oGACV3C,IAAI,GACJC,cAAY,OACZC,WAAS,UACTC,iBAAe,QAEjB,UAACjC,EAAKA,CACJE,EADIF,EACC0E,EAAUA,QACNC,EACTnF,KADuBmF,KACb,mGACV7C,IAAI,GACJC,cAAY,OACZC,WAAS,YAIX,UAAChC,EAAKA,CACJR,EADIQ,QACM,kIACVE,IAAK0E,EACL3E,QAAS4E,EACTC,EAFkBF,EAEd,IACJG,QAAQ,CAFkBF,CAElB,EACRG,QAAS,IACTnF,YAAY,OACZiC,IAAI,0GAOlB,EAAE,0DElJF,MAxCO,SAASmD,CAUE,GA8BHA,EAxCY,OACzBC,CAuCuBD,CAvCf,CAuCgB,CAvCd,QACVE,EAAS,EAAE,GACXC,EAAI,CAAC,GACLC,EAAI,CAAC,IACLC,EAAK,CAAC,IACNC,EAAK,CAAC,IACNC,EAAK,CAAC,WACNhG,CAAS,CACT,GAAGiG,EACa,CAVS,EAWnBlG,EAAKmG,CAAAA,EAAAA,EAAAA,KAAAA,CAAKA,GAEhB,MACE,WAACC,MAAAA,CACC5D,cAAY,OACZvC,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,yEACAJ,GAED,GAAGiG,CAAK,WAET,UAACG,OAAAA,UACC,UAACC,UAAAA,CACCtG,GAAIA,EACJ2F,MAAOA,EACPC,OAAQA,EACRW,aAAa,iBACbC,oBAAoB,iBACpBX,EAAGA,EACHC,EAAGA,WAEH,UAACW,SAAAA,CAAOzG,GAAG,iBAAiB+F,GAAIA,EAAIC,GAAIA,EAAIU,EAAGT,QAGnD,UAACU,OAAAA,CAAKhB,MAAM,OAAOC,OAAO,OAAOgB,YAAa,EAAGrB,KAAM,QAAW,OAAHvF,EAAG,SAGxE,yBC7CO,IAAM6G,EAAgC,OAAC,UAAEC,CAAQ,SAAEC,CAAO,CAAE,GACjE,MACE,UAAC5G,MAAAA,CAAIF,UAAW+G,IAAW,CAAC,eAAFA,KAAuB,CAAE,WAAYD,CAAQ,EAAE,WACtED,GAGP,EAAE,ECIgC,OAAC,MACjCnC,CAAI,CACJsC,OAAK,UACLH,CAAQ,CACRI,MAAI,CACJC,MAAI,WACJlH,CAAS,WACTmH,CAAS,CACT,GAAGlH,EACJ,GACC,MACE,WAACuE,KAAAA,CACCxE,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CAAC,2CAA4CJ,GACzD,GAAGC,CAAI,WAER,WAACmH,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVnF,MAAM,QACNlC,UAAU,mCAET0E,GACC,UAACD,EAAAA,CAAIA,CAAAA,CACHC,KAAMA,EACNT,aAAYkD,EACZnH,UAAU,sCAGd,UAAC8B,EAAAA,EAAGA,CAAAA,CACFkC,KAAK,KACLhC,GAAG,IACHhC,UAAU,6GAETiH,OAGL,WAACG,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,eACb,UAACrF,EAAAA,EAAKA,CAAAA,CAACD,GAAG,KAAKU,QAAQ,KAAK1C,UAAU,qCACnCgH,IAEH,UAACrC,IAAAA,CAAE3E,UAAU,mFACV6G,OAGJ,CAACK,GACA,UAACnD,EAAAA,EAAMA,CAAAA,CACLwD,SAAS,IACTvH,UAAU,yIACVuC,cAAY,OACZiF,SAAU,CAAC,WAEX,UAAC/C,EAAAA,CAAIA,CAAAA,CAACC,KAAK,aAAa1E,UAAU,SAASuC,cAAY,aAKjE,EAEakF,EAAa,IAEtB,WAAC9F,UAAAA,CACC3B,UAAU,iHACVD,GAAG,eACH6B,kBAAgB,iCAEhB,UAAC1B,MAAAA,CAAIF,UAAU,yEACb,UAACyF,EAAUA,CACTC,MAAO,EADED,CAETE,OAAQ,GACRK,GAAI,EACJD,GAAI,EACJD,GAAI,EACJ9F,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,yEACA,wBAIN,UAACwG,EAASA,OAAAA,GACR,WAACQ,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,WAAWkC,MAAM,SAASoF,QAAQ,gBACjD,WAACzF,SAAAA,CAAO7B,UAAU,8CAChB,UAAC8B,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKhE,UAAU,2CAAkC,sBAG3D,UAACiC,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACHU,QAAQ,KACR3C,GAAG,uBACHC,UAAU,uCACVkC,MAAM,kBACP,kBAGD,UAACD,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACH8B,KAAK,WACL3B,MAAM,QACNnC,UAAU,oHACX,4MAOH,UAAC0H,EAAAA,WAAWA,CAAAA,CAACC,UAAU,iBACrB,WAACC,KAAAA,CAAG5H,UAAU,2MACZ,WAAC6H,EAAAA,CACCZ,KAAK,SACLD,MAAM,yBACNtC,KAAK,WACLyC,UAAU,gBACV3E,WAAS,oBACV,6BAC2B,UAACJ,SAAAA,UAAO,aAAiB,6MAKrD,UAACyF,EAAAA,CACCZ,KAAK,SACLD,MAAM,uBACNtC,KAAK,OACLyC,UAAU,YACV3E,WAAS,UACTC,iBAAe,eAChB,uMAMD,UAACoF,EAAAA,CACCZ,KAAK,SACLD,MAAM,sBACNtC,KAAK,YACLyC,UAAU,iBACVD,IAAI,IACJ1E,WAAS,UACTC,iBAAe,MACfzC,UAAU,uCACX,+NC9Jf,EAAe,CAAC,kGAA0G,sOAA0O,CCApW,EAAe,CAAC,uGAA+G,0OAA8O,CCA7W,EAAe,CAAC,kGAA0G,sSAA0S,CCApa,EAAe,CAAC,uGAA+G,0RAA8R,CCA7Z,EAAe,CAAC,kGAA0G,sRAA0R,CCApZ,EAAe,CAAC,uGAA+G,kSAAsS,2DC6Bra,IAAM8H,EAAkC,OAAC,UAAEjB,CAAQ,CAAE,GACnD,MACE,WAACrC,KAAAA,CAAGxE,UAAU,gFACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACLV,KAAK,SACLhE,UAAU,iBACVuC,cAAY,SAEd,UAACwF,OAAAA,UAAMlB,MAGb,EA0BMmB,EAAoC,OAAC,OACzChB,CAAK,UACLiB,CAAQ,MACRC,CAAI,SACJC,CAAO,YACPC,CAAU,WACVC,CAAS,OACTC,CAAK,WACLC,CAAS,UACTC,CAAQ,iBACRC,CAAe,CACfC,YAAU,CACX,GACO7I,EAAM8I,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAwB,MACpC,iBAAEC,CAAe,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAAC,CACpCC,OAAQjJ,EACRkJ,OAAQ,CAAC,YAAa,YAAY,GAE9BC,EAAU3H,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAACqH,GAErBO,EAAcP,EAAWQ,UAAU,CAAC,QAAUF,EAAUN,EAExDS,EAAUC,SA9CTA,CAC6B,CACpCC,CAAgB,MAChBC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAY,IACZC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAU,GAEJ1D,EAAI2D,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAACZ,EAAiB,CAAC,EAAG,EAAE,CAAE,CAAC,CAACS,EAAUA,EAAS,EACrE,MAAOI,CAAAA,EAAAA,EAAAA,CAAAA,CAASA,CAAC5D,EAAG,WAAEyD,UAAWC,CAAQ,EAC3C,EAsC8BX,EAAiB,CAAC,IACxCc,EAAqBC,CAAAA,EAAAA,EAAAA,CAAAA,CAAgBA,GAErCC,EAAmBJ,CAAAA,EAAAA,EAAAA,CAAAA,CAAYA,CAACZ,EAAiB,CAAC,EAAG,EAAE,CAAE,CAAC,GAAK,EAAE,EAEvE,MACE,WAACiB,UAAAA,CACC7J,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,gGACA,CACE,sBAAuBiI,CACzB,GAEF7F,WAAS,UACTZ,kBAAiB,GAA4C,OAAzCoF,EAAM8C,OAAO,CAAC,OAAQ,KAAKC,WAAW,GAAG,sBAE7D,UAAC3C,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVrH,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CAAC,4BAA6B,CACzC,8BAA+BiI,CACjC,YAEA,WAACjB,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,MAAMtH,UAAU,kDAC7B,WAAC6B,SAAAA,CAAO7B,UAAU,6CAChB,UAAC8B,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKjC,QAAQ,UAAUC,GAAG,aACjCmG,IAEH,UAAClG,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACHjC,GAAI,GAA4C,OAAzCiH,EAAM8C,OAAO,CAAC,OAAQ,KAAKC,WAAW,GAAG,YAChDrH,QAAQ,cAEPsE,IAEH,UAAC/E,EAAAA,EAAKA,CAAAA,CAAC6B,KAAK,WAAW9B,GAAG,KAAKG,MAAM,oBAClC8F,OAGL,UAAC1D,KAAAA,CAAGvE,UAAU,8DACXkI,IAGH,UAACnE,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,SACLC,aAAYwE,EACZzG,GAAG,OACHqB,KAAM4F,EACN/E,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,YACPC,MAAO,YAAuD,OAA3C8D,EAAQ4B,WAAW,GAAGD,OAAO,CAAC,OAAQ,MACzD,GAAGxF,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAIpB8D,SAIP,UAAClI,MAAAA,CACCF,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CAAC,+BAAgC,CAC3C,YAAY,CAAGiI,CAClB,YAEA,WAACnI,MAAAA,CAAIF,UAAU,6CAA6CH,IAAKA,YAC/D,UAACW,EAAKA,CACJE,EADIF,EACC8H,EACL7H,QAAS8H,EACTjG,IAAKkG,EACLwB,QAAQ,OACRhK,UAAU,iIAEX,CAAC0J,GACA,UAACO,EAAAA,CAAMA,CAAC/J,GAAG,EACTgK,MAAO,CACLrE,EAAGsD,EACHgB,QAASP,CACX,EACA5J,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,+FACA,CACE,0BAA2BiI,EAC3B,2BAA4B,CAACA,CAC/B,GAEF9F,cAAY,gBAO1B,EAEa6H,EAAW,IAEpB,WAACzI,UAAAA,CACC3B,UAAU,0BACVD,GAAG,WACH6B,kBAAgB,mBAChByI,KAAK,mBAEL,UAACC,KAAAA,CAAGvK,GAAG,mBAAmBC,UAAU,mBAAU,aAG9C,UAAC4G,EAASA,OAAAA,GACR,WAACQ,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,QAAQtH,UAAU,kCAC/B,UAACgI,EAAAA,CACCG,QAAQ,sBACRnB,MAAM,0CACNiB,SAAS,mGACTO,SAAS,wEACTN,KACE,iCACE,UAACJ,EAAAA,UAAW,oBACZ,UAACA,EAAAA,UAAW,iBACZ,UAACA,EAAAA,UAAW,iBACZ,UAACA,EAAAA,UAAW,sBACZ,UAACA,EAAAA,UAAW,8BAGhBY,WAAYpH,sCAA+B,CAC3C8G,GAD+C,CAAE,OACtC,eACXK,gBAAgB,8CAChBH,MAAOiC,EACPhC,OADiBgC,GACNC,IAEb,UAF2BA,EAE1BxC,CACCK,SAAS,IACTF,QAAQ,sBACRnB,MAAM,wBACNiB,SAAS,mHACTO,SAAS,yGACTN,KACE,iCACE,UAACJ,EAAAA,UAAW,gBACZ,UAACA,EAAAA,UAAW,iBACZ,UAACA,EAAAA,UAAW,kBACZ,UAACA,EAAAA,UAAW,2BACZ,UAACA,EAAAA,UAAW,uBACZ,UAACA,EAAAA,UAAW,kBACZ,UAACA,EAAAA,UAAW,0BAGhBM,WAAW,qBACXM,WAAW,sBACXD,gBAAgB,gEAChBH,MAAOmC,EACPlC,OADiBkC,GACNC,IAEb,UAAC1C,EAAAA,CACCG,QAAQ,wBACRnB,MAAM,iCACNiB,SAAS,4FACTO,SAAS,iFACTN,KACE,iCACE,UAACJ,EAAAA,UAAW,kBACZ,UAACA,EAAAA,UAAW,cACZ,UAACA,EAAAA,UAAW,iBACZ,UAACA,EAAAA,UAAW,6BACZ,UAACA,EAAAA,UAAW,qBACZ,UAACA,EAAAA,UAAW,qBAGhBY,WAAYpH,sCAA+B,CAC3C8G,GAD+C,CAAE,OACtC,cACXK,gBAAgB,qCAChBH,MAAOqC,EACPpC,OADmBoC,GACRC,cAAgBA,uBO5OvC,IAAMC,EAAgC,CACpC,CACEvC,MLzBW,CAAC,MKyBCQ,wCLzBD,iDAAuG,kXAAsX,CK0BzeN,SAAU,oDACVxB,MAAO,2BACP8D,YACE,4FACJ,EACA,CACExC,MNhCW,CAAC,6FAAqG,kXAAsX,CMiCveE,SAAU,6CACVxB,MAAO,sBACP8D,YACE,gGACJ,EACA,CACExC,MDvCW,CAAC,KCuCAyC,wCDvCA,iDAAsG,8TAAkU,CCwCpbvC,SAAU,8CACVxB,MAAO,sBACP8D,YACE,gGACJ,EACD,CAEKE,EAAiC,CACrC,CACE1C,MJjDW,CAAC,KIiDA2C,wCJjDA,iDAAsG,kaAAsa,CIkDxhBzC,SAAU,wCACVxB,MAAO,gBACP8D,YACE,wEACJ,EACA,CACExC,MHxDW,CAAC,6FAAqG,0YAA8Y,CGyD/fE,SAAU,uCACVxB,MAAO,gBACP8D,YACE,8FACJ,EACA,CACExC,MF/DW,CAAC,GE+DF4C,CF/DE,wFAAoG,8TAAkU,CEgElb1C,SAAU,oCACVxB,MAAO,cACP8D,YACE,kGACJ,EACD,CAEKK,EAAoD,OAAC,OACzD7C,CAAK,UACLE,CAAQ,OACRxB,CAAK,aACL8D,CAAW,IACX/K,CAAE,CACH,GACC,MACE,WAAC8J,UAAAA,CACC7J,UAAU,+HACV4B,kBAAiB,cAA0D7B,MAAAA,CAA5CiH,EAAM+C,WAAW,GAAGqB,KAAK,CAAC,KAAKC,IAAI,CAAC,KAAK,KAAM,OAAHtL,aAE3E,UAACS,EAAAA,OAAKA,CAAAA,CACJE,IAAK4H,EACLtI,UAAU,oCACVsC,IAAKkG,EACLwB,QAAQ,SAEV,UAAC/H,EAAAA,EAAKA,CAAAA,CACJS,QAAQ,KACRV,GAAG,KACHhC,UAAU,+CACVD,GAAI,cAA0DA,MAAAA,CAA5CiH,EAAM+C,WAAW,GAAGqB,KAAK,CAAC,KAAKC,IAAI,CAAC,KAAK,KAAM,OAAHtL,YAE7DiH,IAEH,UAACrC,IAAAA,CAAE3E,UAAU,sDACV8K,MAIT,EAEaQ,GAAgB,KAC3B,IAAMlK,EAAgBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAACC,sCAA+B,EAEhE,EAFoE,CAAE,GAGpE,UAACK,UAAAA,CACCC,kBAAgB,+BAChB5B,UAAU,0GAEV,UAAC4G,EAASA,OAAAA,GACR,WAAC1G,MAAAA,CAAIF,UAAU,6EACb,WAACoH,EAAAA,CAAKA,CAAAA,CACJE,QAAQ,KACRtH,UAAU,qDAEV,WAAC6B,SAAAA,CACC7B,UAAU,mCACVwC,WAAS,oBAET,UAACV,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKjC,QAAQ,UAAU/B,UAAU,+BAAsB,mBAGjE,UAACiC,EAAAA,EAAKA,CAAAA,CAACS,QAAQ,KAAKV,GAAG,KAAKjC,GAAG,wCAA+B,sBAG9D,UAACkC,EAAAA,EAAKA,CAAAA,CAAC6B,KAAK,WAAWpB,QAAQ,KAAKV,GAAG,KAAKG,MAAM,oBAAW,mJAM/D,UAAC4B,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,SACLxB,WAAS,UACTC,iBAAe,MACfwB,aAAW,uCACXjC,GAAG,OACHqB,KAAMjC,EACN8C,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,YACPC,MAAO,iBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EACjB,YAEH,oBAIH,WAACpE,MAAAA,CAAIF,UAAU,iFAEb,WAACE,MAAAA,CACCF,UAAU,sFACViE,aAAW,oGAEX,UAACsH,EAAAA,EAAMA,CAAAA,CACLC,cAAc,OACdnE,UAAU,aACVrH,UAAU,aACVyL,IAAI,IACJC,aAAc,KACdC,UAAU,IACVC,QAAS,CAACC,EAAAA,EAAQA,CAAC,CACnBC,SAAU,CACRC,MAAO,IACPC,sBAAsB,EACtBC,mBAAmB,CACrB,EACAC,YAAa,CACX,KAAM,CAAE7E,UAAW,WAAY8E,eAAgB,EAAK,CACtD,WAEC,IAAItB,KAAqBA,EAAiB,CAACuB,GAAG,CAAC,CAACC,EAAGC,IAClD,UAACC,EAAAA,EAAWA,CAAAA,CACVvM,UAAU,0BAGV,UAACmL,EAAAA,CAAkBpL,GAAI,YAAkB,OAANuM,GAAU,GAAGD,CAAC,IAF5C,kBAA6BC,MAAAA,CAAXD,EAAErF,KAAK,CAAC,KAAS,OAANsF,OAOxC,UAACpM,MAAAA,CAAIF,UAAU,mJACf,UAACE,MAAAA,CAAIF,UAAU,yJAGjB,WAACE,MAAAA,CACCF,UAAU,sFACViE,aAAW,oFAEX,UAACsH,EAAAA,EAAMA,CAAAA,CACLC,cAAc,OACdnE,UAAU,aACVrH,UAAU,aACVyL,IAAI,IACJC,aAAc,KACdC,UAAU,IACVC,QAAS,CAACC,EAAAA,EAAQA,CAAC,CACnBC,SAAU,CACRC,MAAO,IACPC,sBAAsB,EACtBC,mBAAmB,EACnBO,kBAAkB,CACpB,EACAN,YAAa,CACX,KAAM,CAAE7E,UAAW,WAAY8E,eAAgB,EAAK,CACtD,WAEC,IAAInB,KAAsBA,EAAkB,CAACoB,GAAG,CAC/C,CAACC,EAAGC,IACF,UAACC,EAAAA,EAAWA,CAAAA,CACVvM,UAAU,0BAGV,UAACmL,EAAAA,CAAkBpL,GAAI,YAAkB,OAANuM,GAAU,GAAGD,CAAC,IAF5C,kBAA6BC,MAAAA,CAAXD,EAAErF,KAAK,CAAC,KAAS,OAANsF,OAQ1C,UAACpM,MAAAA,CAAIF,UAAU,mJACf,UAACE,MAAAA,CAAIF,UAAU,kKAO7B,EC1NMyM,GAAQC,CAAAA,EAAAA,SAAAA,OAAAA,CAAOA,CAAC,IAAM,wEAA4C,0CACtEC,KAAK,GAIP,OAAMC,WAAsBC,EAAAA,SAAe,CASzC,OAAOC,0BAA2B,CAChC,MAAO,CAAEC,UAAU,CAAK,CAC1B,CAEAC,kBAAkBC,CAAY,CAAEC,CAA0B,CAAE,CAC1DC,QAAQF,KAAK,CAAC,oCAAqCA,EAAOC,EAC5D,CAEAvJ,QAAS,QACH,IAAI,CAACyJ,KAAK,CAACL,QAAQ,CAEd,CAFgB,IAIlB,IAAI,CAAC9G,KAAK,CAACY,QAAQ,CAlB5BwG,YAAYpH,CAAoC,CAAE,CAChD,KAAK,CAACA,GACN,IAAI,CAACmH,KAAK,CAAG,CAAEL,UAAU,CAAM,CACjC,CAiBF,CAEA,IAAMO,GAAS,CACbC,MAAO,CACL,CAAE7M,IAAK,OAFC4M,8BAEqChL,IAAK,qBAAsB,EACxE,CAAE5B,IAAK,6BAA8B4B,IAAK,cAAe,EACzD,CAAE5B,IAAK,iCAAkC4B,IAAK,iBAAkB,EAChE,CAAE5B,IAAK,8BAA+B4B,IAAK,qBAAsB,EACjE,CAAE5B,IAAK,8BAA+B4B,IAAK,oBAAqB,EAChE,CACE5B,IAAK,uCACL4B,IAAK,4BACP,EACA,CACE5B,IAAK,qCACL4B,IAAK,0BACP,EACA,CAAE5B,IAAK,mCAAoC4B,IAAK,mBAAoB,EACpE,CAAE5B,IAAK,gCAAiC4B,IAAK,qBAAsB,EACnE,CAAE5B,IAAK,0BAA2B4B,IAAK,UAAW,EACnD,CACDkL,KAAM,CACJ,CACE9M,IAAK,0CACL4B,IAAK,qBACP,EACA,CAAE5B,IAAK,6BAA8B4B,IAAK,cAAe,EACzD,CAAE5B,IAAK,sCAAuC4B,IAAK,iBAAkB,EACrE,CAAE5B,IAAK,mCAAoC4B,IAAK,qBAAsB,EACtE,CAAE5B,IAAK,8BAA+B4B,IAAK,oBAAqB,EAChE,CACE5B,IAAK,4CACL4B,IAAK,4BACP,EACA,CACE5B,IAAK,qCACL4B,IAAK,0BACP,EACA,CAAE5B,IAAK,mCAAoC4B,IAAK,mBAAoB,EACpE,CAAE5B,IAAK,qCAAsC4B,IAAK,qBAAsB,EACxE,CAAE5B,IAAK,0BAA2B4B,IAAK,UAAW,EACnD,EAGUmL,GAAmB,KAC9B,GAAM,eAAE9M,CAAa,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,GAC5B,CAACC,EAASC,EAAW,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACjCK,EAAgBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAACC,sCAA+B,IAAI,CAAE,GAMtE,CAJAN,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACRF,GAAW,EACb,EAAG,EAAE,EAED,QAA0D4M,IAA9CJ,EAAM,CAAC3M,EAAkC,EAAgB,CAKvE,SAACgB,UAAAA,CACC3B,UAAU,kDACV4B,kBAAgB,qCAEhB,UAACgF,EAASA,OAAAA,GACR,WAAC1G,MAAAA,CAAIF,UAAU,kEACb,UAAC4M,GAAAA,UACC,UAACxF,EAAAA,CAAKA,CAAAA,CAAClF,MAAM,SAASlC,UAAU,iBAC9B,WAACE,MAAAA,CACCF,UAAU,oDACVwC,WAAS,oBAET,UAACiD,EAAUA,CACTC,MAAO,EADED,CAETE,OAAQ,GACRK,GAAI,EACJD,GAAI,EACJD,GAAI,EACJ9F,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,yEACA,sBAGJ,UAACqM,GAAAA,CAAMa,OAAQA,EAAM,CAAC3M,EAAkC,UAI9D,WAACyG,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,MAAM9E,WAAS,oBAC5B,WAACX,SAAAA,CAAO7B,UAAU,sDAChB,UAAC8B,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKjC,QAAQ,UAAUC,GAAG,aAAI,sBAGxC,UAACC,EAAAA,EAAKA,CAAAA,CAACS,QAAQ,KAAKV,GAAG,KAAKjC,GAAG,qCAA4B,qCAG3D,UAACkC,EAAAA,EAAKA,CAAAA,CAAC6B,KAAK,WAAW9B,GAAG,KAAKG,MAAM,oBAAW,8FAKlD,UAAC4B,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,SACLxB,WAAS,UACTC,iBAAe,MACfwB,aAAW,iCACXjC,GAAG,OACHqB,KAAMjC,EACNoG,SAAU,EACVtD,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,YACPC,MAAO,oBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAGtB,4BA5DF,IAoEX,EAAE,0BK/IF,IAAMqJ,GAAgB,CACpB,CACEC,IFxBW,CAAC,MEwBDC,wCFxBC,iDAAuG,kYAAsY,CEyBzfvL,IAAK,uCACLwL,IAAK,KACLC,OAAQ,IACRjO,MAAO,mBACPiM,MAAO,CACT,EACA,CACE6B,IDhCW,CAAC,GCgCJI,CDhCI,wFAAoG,8TAAkU,CCiClb1L,IAAK,wCACLwL,IAAK,KACLC,OAAQ,IACRjO,MAAO,oBACPiM,MAAO,GACT,EACA,CACE6B,IHxCW,CGwCNK,GAAGA,CHxCI,wFAAoG,kWAAsW,CGyCtd3L,IAAK,sCACLwL,IAAK,IACLC,OAAQ,IACRjO,MAAO,eACPiM,MAAO,GACT,EACA,CACE6B,IJhDW,CIgDNM,IJhDO,EIgDDA,wCJhDC,iDAAuG,sVAA0V,CIiD7c5L,IAAK,6CACLwL,IAAK,IACLC,OAAQ,KACRjO,MAAO,oBACPiM,MAAO,GACT,EACD,CAEKoC,GAAqB,OAAC,CAAEP,KAAG,KAAEtL,CAAG,KAAEwL,CAAG,QAAEC,CAAM,OAAEjO,CAAK,OAAEiM,CAAK,CAAE,SACjE,WAAC3E,EAAAA,CAAKA,CAAAA,CACJpH,UAAU,8FACVqH,UAAU,aACVnF,MAAM,SACNM,WAAS,UACTC,iBAAgBsJ,YAEhB,UAACvL,EAAAA,OAAKA,CAAAA,CACJE,IAAKkN,EACLtL,IAAKA,EACLtC,UAAU,yBACVgK,QAAQ,SAEV,WAAC5C,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,iBACb,UAACrF,EAAAA,EAAKA,CAAAA,CAACS,QAAQ,KAAKV,GAAG,cACrB,UAACoM,GAAAA,EAAOA,CAAAA,CAACN,IAAKA,EAAKC,OAAQA,EAAQM,SAAU,MAE/C,UAAC1J,IAAAA,CAAE3E,UAAU,iCAAyBF,WAK/BwO,GAAe,KAC1B,IAAMC,EAASC,CAAAA,EAAAA,GAAAA,CAAAA,CAAaA,GAE5B,MACE,WAAC7M,UAAAA,CACC3B,UAAU,0FACV4B,kBAAgB,kCAEhB,UAAC0I,KAAAA,CAAGvK,GAAG,wBAAwBC,UAAU,mBAAU,sBAGnD,UAACE,MAAAA,CAAIF,UAAU,2CACb,UAACE,MAAAA,CAAIF,UAAU,iEACZ2N,GAAMvB,GAAG,CAAC,GACT,UAAC+B,GAAAA,CAEE,GAAGM,CAAI,CACP,GAAe,YAAXF,EAAuB,CAAExC,MAAO,CAAE,EAAI,CAAC,CAAC,EAFxC0C,EAAK3O,KAAK,SAS7B,EAAE,4BUjFF,IAAM4O,GAAsC,OAAC,OAAEC,CAAK,QAAE5F,CAAM,MAAErC,CAAI,CAAE,GAC5D,CACJkI,GAAI,OAAEC,CAAK,CAAE,CACd,CAAGC,CAAAA,EAAAA,GAAAA,EAAAA,CAAgBA,GAEd,cAAEC,CAAY,CAAE,CAAGC,CAAAA,EAAAA,GAAAA,EAAAA,CAAgBA,GAEzC,GAAI,CAACL,EAAMhJ,MAAM,EAAI,CAACgJ,EAAMjJ,KAAK,CAAE,OAAO,KAC1C,GAAI,CAhBN,SAAuBiJ,CAAY,EACjC,MACEM,CAAAA,EAAAA,GAAAA,EAAAA,CAAYA,CAACN,IACU,UAAvB,OAAOA,EAAMjJ,KAAK,EACM,iBAAjBiJ,EAAMhJ,MAAM,EAYFgJ,GAAQ,OAAOjB,IAG5BhI,EAAQwJ,KAAKC,GAAG,CAACR,EAAMjJ,KAAK,CAAEgB,EAAKhB,KAAK,EACxCC,EAASuJ,KAAKC,GAAG,CAACR,EAAMhJ,MAAM,CAAEe,EAAKf,MAAM,EAEjD,MACE,UAACzF,MAAAA,CACCgK,MAAO,CACLkF,SAAU,iBACV1J,SACAC,EACA0J,OAAQ,MACV,WAEA,UAAC7O,EAAAA,OAAKA,CAAAA,CACJE,IAAKiO,EACLrM,IAAI,GACJgD,IAAI,IACJ0E,QAAQ,QACRhK,UAAU,aACVsP,WAAW,EACXpF,MAAO,CACLqF,UAAW,UACXC,OAAQX,EAAQ,eAAYnB,CAC9B,EACA+B,MAAO,GAAgD,OAA7CP,KAAKQ,IAAI,CAAC,EAAS1M,OAAO2M,UAAU,CAAI,KAAK,MACvDzL,QACa,IAAX6E,EAAe,UAAM8F,EAAAA,KAAAA,EAAAA,EAAQ,CAAEvC,MAAOyC,CAAa,GAAKrB,UAKlE,EAQakC,GAA8B,QAGjBtC,KAHkB,QAAEA,CAAM,YAAEuC,CAAU,KAAEvN,CAAG,CAAE,GAC/D,CAACwN,EAAMC,EAAQ,CAAGhP,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAC,IAE3BiP,EAAiB,CAAe,QAAd1C,QAAAA,EAAAA,KAAAA,EAAAA,EAAQ2C,MAAAA,EAAR3C,CAAAA,KAAAA,IAAAA,EAAAA,GAAkB,EAAK,EAE/C,CAFkD,KAGhD,WAACvF,OAAAA,CAAK/H,OAHyE,GAG/D,qBACZsN,CAAAA,OAAAA,EAAAA,KAAAA,EAAAA,EAAQ2C,MAAAA,EAAR3C,EAAkB,EAAK,GACvB,UAACvF,OAAAA,CACC/H,UAAU,+LACVkE,QAAS,IAAM6L,GAAQ,kBAEtBzC,EAAAA,KAAAA,EAAAA,EAAQ2C,MAAM,EAAd3C,CAGJ,CAAC,QAACA,EAAAA,KAAAA,EAAAA,EAAQ2C,MAAAA,EAAR3C,CACD,UAAC9M,EAAAA,OAAKA,CAAAA,CACJE,IAAK4M,CAAM,CAAC,EAAE,CACdhL,IAAKA,EACL4B,QAAS,IAAM6L,GAAQ,GACvB/P,UAAW6P,EACXnK,MAAO,GACPC,OAAQ,KAGZ,UAACuK,GAAAA,EAAQA,CAAAA,CACPC,SAAU,CACRC,SAAU,UACVC,OAAQ,CAACL,CACX,EACAM,KAAM,CACJC,kBAAmB,EACnBC,iBAAkB,IACpB,EACAC,QAAS,CAACC,GAAAA,CAAIA,CAAC,CACfZ,KAAMA,EACNa,MAAO,IAAMZ,GAAQ,GACrBa,OAAQtD,EACR3J,OAAQ,CAAEgL,MAAOD,EAAc,EAC/BmC,OAAQ,CACNC,UAAW,CACTC,WAAY,qBACZC,eAAgB,WAClB,EACAC,OAAQ,CACNC,OAAQ,MACV,CACF,MAIR,EAAE,GCpG0C,OAAC,OAAEC,CAAK,CAAE,GACpD,MACE,UAACjR,MAAAA,CAAIF,UAAU,sBACZoR,MAAMC,IAAI,CAAC,CAAEpB,OAAQ,CAAE,GAAG7D,GAAG,CAAC,CAACkF,EAAGhF,IACjC,UAAC7H,EAAAA,EAAIA,CAAAA,CAEHC,KAAK,OACL6M,OAAQjF,EAAQ6E,EAAQ,OAAS,UACjCnR,UAAW+G,IACTuF,EAAQ6E,EACJ,YAFepK,MAGf,sCACJ,WAPG,QAAc,OAANuF,MAavB,EASMkF,GAA4D,CAChEC,SRnDa,CAAC,QQmDQC,wCRnDR,iDAAyG,kYAAsY,CQoD7fC,SVpDa,CAAC,QUoDQC,yCVpDR,kDAA2G,kQAAsQ,CUqD/XC,QPrDa,COqDJC,IPrDK,EOqDMA,wCPrDN,mDAAyG,kUAAsU,COsD7bC,OTtDa,CAAC,mBSsDIC,2BTtDJ,iDAAuG,kdAAsd,CSuD3kBC,UNvDa,CMuDFC,INvDG,KMuDUA,wCNvDV,iDAA0G,0ZAA8Z,EM0DlhBC,GAAmD,CACvDV,SAAU,WACVE,SAAU,WACVE,QAAS,UACTE,OAAQ,SACRE,UAAW,WACb,EAWMG,GAA4C,OAAC,MACjD5O,CAAI,MACJ6O,CAAI,MACJvO,CAAI,CACJwO,QAAM,QACNhF,CAAM,CACP,GACO,CAACiF,EAAUC,EAAY,CAAGzR,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAEnC,CAAC0R,EAAYC,EAAc,CAAG3R,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACvC,CAAC4R,EAAeC,EAAiB,CAAG7R,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAC7C8R,EAAUlK,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAuB,MAc7C,MAZA3H,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACR,IAAM8R,EAAKD,EAAQE,OAAO,CACtBD,GAEFF,CAFM,CACoBE,EAAGE,YAAY,CAAGF,EAAGG,YAAY,CAG/D,EAAG,EAAE,CAFoC,CAIzCjS,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACRwR,GAAY,EACd,EAAG,EAAE,EAGH,CATyE,EASzE,OAACU,aAAAA,CAAWlT,UAAU,gBAAgBmT,KAAK,YACzC,WAAC/L,EAAAA,CAAKA,CAAAA,CACJE,QAAQ,KACRtH,UAAU,iHAEV,WAACoH,EAAAA,CAAKA,CAAAA,WACJ,UAACgM,GAAAA,CAAajC,MAAOmB,IACrB,WAACpS,MAAAA,CAAIF,UAAU,8CACb,WAAC2E,IAAAA,CACC5E,GAAI,oBAA0CsS,MAAAA,CAAtB7O,EAAKuG,WAAW,GAAG,KAAoC,OAAjCsI,EAAKjH,KAAK,CAAC,IAAI,CAAC,EAAE,CAACrB,WAAW,IAC5ElK,IAAKgT,EACL7S,UAAW+G,IAAW,gBAADA,sBAAwC,CAC3D,eAAgB,CAAC0L,CACnB,aAEEnF,CAAAA,SAAAA,KAAAA,EAAAA,EAAQ2C,CAAR3C,KAAQ2C,GAAU,GAAK,GACvB,UAACL,GAAQA,CACPtC,IADOsC,GACCtC,EACRhL,IAAK,mBAAwB,OAALkB,GACxBqM,WAAW,+DAGdwC,KAEFE,GAAY,CAACE,GAAcE,GAC1B,UAAC1B,SAAAA,CACC/M,QAAS,IAAMwO,GAAc,GAC7B1S,UAAU,gBACVqT,gBAAeZ,EACfa,gBAAe,oBAA0CjB,MAAAA,CAAtB7O,EAAKuG,WAAW,GAAG,KAAoC,OAAjCsI,EAAKjH,KAAK,CAAC,IAAI,CAAC,EAAE,CAACrB,WAAW,aACxF,eAMP,WAACwJ,SAAAA,CAAOvT,UAAU,6CAChB,UAACQ,EAAAA,OAAKA,CAAAA,CACJR,UAAU,SACVU,IAAK8Q,EAAa,CAAC1N,EAAK,CACxBxB,IAAK,GAAQ,OAALwB,EAAK,WAEf,WAACsD,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,iBACb,WAAC6L,OAAAA,CAAKnT,UAAU,iEAAuD,KAClEwD,KAEL,UAACmB,IAAAA,CAAE3E,UAAU,oEACVmS,EAAa,CAACrO,EAAK,aAOlC,EAEM0P,GAAuC,CAC3C,CACEhQ,KAAM,YACN6O,KAAM,0KACNvO,KAAM,WACNwO,OAAQ,EACRhF,OAAQ,CLnKG,CAAC,kGAA0G,8dAAke,CKmKxkB,EAElB,CACE9J,KAAM,eACN6O,KAAM,yOACNvO,KAAM,WACNwO,OAAQ,CACV,EACA,CACE9O,KAAM,kBACN6O,KAAM,4NACNc,KAAM,2BACNrP,KAAM,SACNwO,OAAQ,CACV,EACA,CACE9O,KAAM,YACN6O,KAAM,0JACNvO,KAAM,WACNwO,OAAQ,CACV,EACA,CACE9O,KAAM,aACN6O,KAAM,oFACNvO,KAAM,WACNwO,OAAQ,CACV,EACA,CACE9O,KAAM,gBACN6O,KAAM,iKACNvO,KAAM,SACNqP,KAAM,2BACNb,OAAQ,CACV,EACA,CACE9O,KAAM,YACN6O,KAAM,sNACNvO,KAAM,WACNwO,OAAQ,CACV,EACA,CACE9O,KAAM,iBACN6O,KAAM,8BACNvO,KAAM,YACNwO,OAAQ,CACV,EACA,CACE9O,KAAM,cACN6O,KAAM,sCACNvO,KAAM,WACNwO,OAAQ,EACRhF,OAAQ,CJtNG,CAAC,qGAA6G,seAA0e,CCAxlB,CAAC,oGAA4G,0dAA8d,CCA3kB,CAAC,qGAA6G,8dAAke,CEsNxjB,EAErC,CACE9J,KAAM,UACN6O,KAAM,6FACNvO,KAAM,SACNqP,KAAM,2BACNb,OAAQ,CACV,EACD,CAEYmB,GAAe,KAC1B,IAAMC,EAAiB/K,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAY,MACnCgL,EAAoB9G,EAAAA,MAAY,CAAoB,MACpD+G,EAAoB/G,EAAAA,MAAY,CAAoB,MAE1D,MACE,UAAClL,UAAAA,CACC3B,UAAU,uDACV4B,kBAAgB,gCAEhB,UAACgF,EAASA,OAAAA,GACR,WAACQ,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,gBACb,WAACzF,SAAAA,CACC7B,UAAU,2DACVwC,WAAS,oBAET,UAACV,EAAAA,EAAGA,CAAAA,CACFkC,KAAK,KACLjC,QAAQ,UACR/B,UAAU,4BACVgC,GAAG,aACJ,qBAGD,UAACC,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACHU,QAAQ,KACR1C,UAAU,wBACVD,GAAG,gCACJ,+BAGD,UAACkC,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACH8B,KAAK,WACL3B,MAAM,WACNnC,UAAU,6EACX,8GAKH,WAACE,MAAAA,CACCF,UAAU,oGACVwC,WAAS,oBAET,WAACuB,EAAAA,EAAMA,CAAAA,CACL/D,UAAU,qPACVkE,QAAS,SACPwP,QAAAA,GAAAA,QAAAA,EAAAA,EAAgBX,OAAAA,GAAhBW,EAAAA,GAAAA,IAAAA,GAAAA,EAAyBG,MAAM,CAACC,SAAS,EAC3C,EACA7P,aAAW,wBACXuD,SAAU,YAEV,UAAC/C,EAAAA,EAAIA,CAAAA,CAACC,KAAK,YAAY1E,UAAU,WACjC,UAAC+H,OAAAA,CAAK/H,UAAU,mBAAU,6BAE5B,UAACE,MAAAA,CAAIF,UAAU,8GACf,UAACuL,EAAAA,EAAMA,CAAAA,CACLC,cAAc,OACd3L,IAAK6T,EACLjI,MAAM,EACNsI,aAAc,IACRJ,EAAkBZ,OAAO,EAAIa,EAAkBb,OAAO,EAAE,CAC1Dc,EAAOG,UAAU,CAACC,MAAM,CAAGN,EAAkBZ,OAAO,CACpDc,EAAOG,UAAU,CAACE,MAAM,CAAGN,EAAkBb,OAAO,CAExD,EACA7G,YAAa,CACX,IAAK,CACHV,cAAe,CACjB,EACA,KAAM,CACJA,cAAe,CACjB,CACF,WAECgI,GAAapH,GAAG,CAAC,CAAC+H,EAAa7H,IAC9B,UAACC,EAAAA,EAAWA,CAAAA,CAEVvM,UAAU,yCAEV,UAACoS,GAAAA,CAAiB,GAAG+B,CAAW,IAH3B,eAAqB,OAAN7H,OAO1B,UAACpM,MAAAA,CAAIF,UAAU,gHACf,WAAC+D,EAAAA,EAAMA,CAAAA,CACL/D,UAAU,sPACVkE,QAAS,SACPwP,QAAAA,GAAAA,QAAAA,EAAAA,EAAgBX,OAAAA,GAAhBW,EAAAA,GAAAA,IAAAA,GAAAA,EAAyBG,MAAM,CAACO,SAAS,EAC3C,EACAnQ,aAAW,oBACXuD,SAAU,YAEV,UAAC/C,EAAAA,EAAIA,CAAAA,CAACC,KAAK,aAAa1E,UAAU,WAClC,UAAC+H,OAAAA,CAAK/H,UAAU,mBAAU,kCAOxC,EAAE,GCxUa,CAAC,iGAAyG,8UAAkV,CCW9bqU,GAAmB,KAC9B,IAAMC,EAAa9F,CAAAA,EAAAA,GAAAA,CAAAA,CAAaA,GAEhC,MACE,WAAC7M,UAAAA,CACC3B,UAAU,2DACV4B,kBAAgB,sCAGhB,UAAC1B,MAAAA,CAAIF,UAAU,4BACb,WAACE,MAAAA,CAAIF,UAAU,kDACb,UAACE,MAAAA,CAAIF,UAAU,qFACf,UAACE,MAAAA,CAAIF,UAAU,sFACf,UAACE,MAAAA,CAAIF,UAAU,8FAInB,UAAC4G,EAASA,OAAAA,GACR,WAAC1G,MAAAA,CAAIF,UAAU,iHAEb,WAACoH,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVC,QAAQ,KACRpF,MAAM,SACNM,WAAyB,YAAf8R,EAA2B,aAAe,UACpDtU,UAAU,kFAEV,UAACQ,EAAAA,OAAKA,CAAAA,CACJE,IAAK+Q,GACLnP,IAAI,OACJtC,UAAU,CAFGyR,oBAGbzH,QAAQ,SAEV,UAAC5C,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,KAAKtH,UAAU,iCAC5B,WAACE,MAAAA,CAAIF,UAAU,iCACb,UAACiC,EAAAA,EAAKA,CAAAA,CAACD,GAAG,KAAKU,QAAQ,KAAK3C,GAAG,qCAA4B,gCAG3D,UAACkC,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACHU,QAAQ,KACRoB,KAAK,WACL3B,MAAM,WACNnC,UAAU,kGACX,0JASP,UAACoH,EAAAA,CAAKA,CAAAA,CACJ5E,WAAyB,YAAf8R,EAA2B,YAAc,UACnDtU,UAAU,yCAEV,UAAC+D,EAAAA,EAAMA,CAAAA,CACLC,KAAK,QACLhE,UAAU,qLACVwH,SAAU,EACVvD,aAAW,8CACXjC,GAAG,OACHqB,KAAK,iCACLyF,OAAO,SACP5E,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,aACPC,MAAO,qBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAIrB,WAAC8C,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVnF,MAAM,SACNlC,UAAU,2BAEV,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,eACL1E,UAAU,eACVuR,OAAO,YAET,UAACxJ,OAAAA,UAAK,oCAQtB,EAAE,gBC3FK,IAAMwM,GAAe,KAC1B,GAAM,CAACC,EAAcC,EAAgB,CAAG1T,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAe,WACzDK,EAAgBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAACC,sCAA+B,EAMhE,EANoE,CAAE,GAOpE,WAACK,UAAAA,CACC3B,UAAU,yDACVD,GAAG,UACH6B,kBAAgB,4BAEhB,WAACC,SAAAA,CAAO7B,UAAU,qEAChB,UAAC8B,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKjC,QAAQ,mBAAU,iBAGjC,UAACE,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACHU,QAAQ,KACRR,MAAM,SACNlC,UAAU,SACVD,GAAG,2BACJ,wBAGD,UAACkC,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACH8B,KAAK,WACL3B,MAAM,WACNnC,UAAU,0EACX,2GAMH,WAACE,MAAAA,CAAIF,UAAU,mDACb,WAACoH,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACV7E,WAAS,UACTN,MAAM,SACNlC,UAAU,6BACVqK,KAAK,QACLpG,aAAW,iCAEX,UAACgN,SAAAA,CACCnN,KAAK,SACL9D,UAAW+G,IAAW,gBAADA,uBAAyC,CAC5D,sCAAwD,WAAjByN,EACvC,gBAAkC,YAAjBA,CACnB,GACAtQ,QAAS,IAAMuQ,EAAgB,UAC/BC,eAA+B,WAAjBF,WACf,WAKD,WAAC1U,QAAAA,CACCQ,QAAQ,iBACRN,UAAU,6DAEV,UAACG,QAAAA,CACC2D,KAAK,WACL/D,GAAG,iBACHC,UAAU,eACV2U,QAA0B,YAAjBH,EACTI,SAjEe,CAiELC,IAhEpBJ,EAAiC,YAAjBD,EAA6B,SAAW,UAC1D,EAgEYvQ,aAAW,yBAEb,UAAC/D,MAAAA,CAAIF,UAAU,8eAGjB,UAACiR,SAAAA,CACCnN,KAAK,SACL9D,UAAW+G,IAAW,gBAADA,uBAAyC,CAC5D,sCAAwD,YAAjByN,EACvC,gBAAkC,WAAjBA,CACnB,GACAtQ,QAAS,IAAMuQ,EAAgB,WAC/BC,eAA+B,YAAjBF,WACf,eAKH,WAACtU,MAAAA,CAAIF,UAAU,2GAEb,WAAC6J,UAAAA,CACC7J,UAAU,oHACVwC,WAAS,UACTC,iBAAe,gBAEf,UAACqS,KAAAA,CAAG9U,UAAU,6EAAoE,SAGlF,UAAC2E,IAAAA,CAAE3E,UAAU,wFAA+E,OAG5F,UAAC2E,IAAAA,CAAE3E,UAAU,uEAA8D,sDAG3E,WAACuE,KAAAA,CAAGvE,UAAU,kCACZ,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,2DACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,2DAAkD,2BAIpE,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,2DACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,2DAAkD,+BAIpE,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,2DACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,2DAAkD,wBAKtE,UAACE,MAAAA,CAAIF,UAAU,gBACb,UAAC+D,EAAAA,EAAMA,CAAAA,CACLC,KAAK,SACL7B,MAAM,UACNnC,UAAU,SACViE,aAAW,6BACXjC,GAAG,OACHqB,KAAMjC,EACN8C,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,aACPC,MAAO,eACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAGtB,qBAOL,UAACuF,UAAAA,CAAQ7J,UAAU,mFACjB,WAACE,MAAAA,CACCF,UAAU,oSACVwC,WAAS,oBAET,WAAC4E,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVrH,UAAU,kBACVkC,MAAM,mBAEN,UAAC4S,KAAAA,CAAG9U,UAAU,uDAA8C,aAG5D,UAAC+U,GAAAA,CAAeA,CAAAA,CAACC,KAAK,OAAOC,SAAS,WAClB,YAAjBT,GACC,UAACvK,EAAAA,CAAMA,CAAC/J,GAAG,EAET+U,QAAS,CACP9K,QAAS,EACT+K,UAAW,kBACb,EACAC,QAAS,CACPhL,QAAS,EACT+K,UAAW,eACb,EACAE,KAAM,CACJjL,QAAS,EACT+K,UAAW,kBACb,EACAG,WAAY,CAAEhH,SAAU,EAAI,WAE5B,WAACvM,EAAAA,EAAGA,CAAAA,CACFkC,KAAK,KACLhE,UAAU,qFACViE,aAAW,iCAEX,UAACQ,EAAAA,EAAIA,CAAAA,CACHC,KAAK,SACL1E,UAAU,eACVuR,OAAO,OACPtN,aAAW,oDAEb,UAAC8D,OAAAA,CAAK/H,UAAU,gCAAuB,wBA1BrC,4BAkCZ,UAAC+U,GAAAA,CAAeA,CAAAA,CAACC,KAAK,OAAOC,QAAS,YACpC,WAAChL,EAAAA,CAAMA,CAACtF,CAAC,EAEPsQ,QAAS,CAAE9K,QAAS,EAAGtE,EAAG,CAAC,EAAG,EAC9BsP,QAAS,CAAEhL,QAAS,EAAGtE,EAAG,CAAE,EAC5BuP,KAAM,CAAEjL,QAAS,EAAGtE,EAAG,EAAG,EAC1BwP,WAAY,CAAEhH,SAAU,EAAI,EAC5BrO,UAAU,qDACX,KACqB,YAAjBwU,EAA6B,KAAO,IACvC,WAACzM,OAAAA,CAAK/H,UAAU,4CAAkC,IAC7B,YAAjBwU,EAA6B,QAAU,YATtCA,KAaT,UAAC7P,IAAAA,CAAE3E,UAAU,uEAA8D,mEAG3E,WAACuE,KAAAA,CAAGvE,UAAU,kCACZ,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,uBACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,qCAA4B,sBAI9C,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,uBACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,qCAA4B,2BAI9C,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,uBACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,qCAA4B,2BAI9C,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,uBACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,qCAA4B,iCAI9C,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,uBACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,qCAA4B,0BAKhD,UAACE,MAAAA,CAAIF,UAAU,gBACb,UAAC+D,EAAAA,EAAMA,CAAAA,CACLC,KAAK,QACL7B,MAAM,UACNnC,UAAU,SACViE,aAAW,iCACXjC,GAAG,OACHqB,KAAMjC,EACN8C,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,aACPC,MAAO,mBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAGtB,uBAQP,WAACuF,UAAAA,CACC7J,UAAU,oHACVwC,WAAS,UACTC,iBAAe,gBAEf,UAACqS,KAAAA,CAAG9U,UAAU,6EAAoE,eAGlF,UAAC2E,IAAAA,CAAE3E,UAAU,uEAA8D,uFAI3E,WAACuE,KAAAA,CAAGvE,UAAU,kCACZ,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,2DACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,2DAAkD,mCAIpE,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,2DACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,2DAAkD,4BAIpE,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,2DACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,2DAAkD,2BAKpE,WAACwE,KAAAA,CAAGxE,UAAU,8BACZ,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL6M,OAAO,OACPvR,UAAU,2DACVuC,cAAY,SAEd,UAACwF,OAAAA,CAAK/H,UAAU,2DAAkD,yCAKtE,UAACE,MAAAA,CAAIF,UAAU,gBACb,UAAC+D,EAAAA,EAAMA,CAAAA,CACLC,KAAK,SACL7B,MAAM,UACNnC,UAAU,SACVgC,GAAG,OACHqB,KAAK,WACLY,aAAW,iCAAiC,QACnC,IACPE,CAAAA,EAAAA,EAAAA,QAFmE,IAEnEA,CAAYA,CAAC,CACXC,MAAO,aACPC,MAAO,qBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAGtB,4BASf,EAAE,sCC2uCK,IA2tDMgR,EA3tDAC,CA2tDqB,CAChCC,EACAC,IAEOC,GAAAA,CAAKA,CAACC,CA/tDY,CACzBH,CA8tDgB,CACb,MA9tDHC,kEA+tDE,CACE,GAAGA,CAAO,CACVD,OAAQ,CAAE,GAAGA,CAAM,UAAKC,EAAAA,KAAAA,EAAAA,EAASD,MAAM,CACzC,EAD0BC,CAKjBG,GAAgC,GAGpC,CACJ,2EACGJ,EAAS,CAACA,EAAO,CAAG,EAAE,CAC3B,CAGUK,GAAoC,CAI/CL,EACAC,SAcEK,EAHF,GAAM,CAAEC,MAAOD,CAAY,CAAEJ,MAAOM,CAAY,CAAE,OAAGP,EAAAA,EAAW,CAAC,EASjE,MAAO,CAAEQ,MAT4CR,GAGnDK,QAAAA,QAAAA,EAAAA,KAAAA,EAAAA,EAAcG,QAAAA,GAAdH,GAAAA,EAAAA,MAAAA,EAA0BF,GAA8BJ,GAMvCU,QAFf,OAAC,QAAEC,CAAM,CAAE,UAAKb,GAAmBE,EAAQ,QAAEW,EAAQ,GAAGH,CAAY,IAE5C,GAAGF,CAAY,CAK7C,EAAE,GAqnE8B,CAC9B/V,EACA0V,IAEOC,GAAAA,CAAKA,CAACC,GAAG,CACd,iEAAoE,OAAH5V,GACjE0V,GAISW,GAA8B,GAClC,CACJ,iEAAmE,OAAHrW,GAClE,CAGUsW,GAAkC,CAI7CtW,EACA0V,SAaiBK,EAFjB,GAAM,CAAEC,MAAOD,CAAY,CAAEJ,MAAOM,CAAY,CAAE,OAAGP,EAAAA,EAAW,CAAC,EAQjE,MAAO,CACLQ,MATmDR,GAEpCK,QAAAA,QAAAA,EAAAA,KAAAA,EAAAA,EAAcG,QAAAA,GAAdH,GAAAA,EAAAA,IAAAA,EAAAA,EAA0BM,GAA4BrW,GAQrEmW,QAJE,OAAC,QAAEC,CAAM,CAAE,UAAKG,GAAiBvW,EAAI,CAAEoW,SAAQ,GAAGH,CAAY,IAKhEO,QAAS,CAAC,CAACxW,EACX,GAAG+V,CAAY,CAMnB,EAAE,GAyqCqB,CACrBU,EACAf,IAEOC,GAAAA,CAAKA,CAACe,IAAI,CACd,8EACDD,EACAf,GAISiB,GAA4B,IAiBvC,GAAM,CAAEC,SAAUC,CAAe,CAAElB,MAAOM,CAAY,CAAE,OAAGP,EAAAA,EAAW,CAAC,EAWvE,MAAO,CAAEoB,MAXkDpB,KAKtDxP,IACH,GAAM,MAAE6Q,CAAI,CAAE,OAAG7Q,EAAAA,EAAS,CAAC,EAE3B,OAAO8Q,GAAQD,CAFE7Q,CAEI+P,EACvB,EAEqB,GAAGY,CAAe,CACzC,EAAE,GAQwB,IAiBxB,IAAMA,EAAkBF,GAA0BjB,GAElD,MAAOuB,CAAAA,EAAAA,GAAAA,CAAAA,CAAWA,CAACJ,EACrB,EAAE,2BC1tNF,OAxDO,SAASK,CASG,GA+CJA,EAxDa,OAC1BvR,EAAQ,EAAE,QACVC,EAAS,EAAE,GACXC,EAAI,CAAC,CAAC,GACNC,EAAI,CAAC,CAAC,iBACNqR,EAAkB,GAAG,CACrBC,SAAO,WACPnX,CAAS,CACT,GAAGiG,EACc,CATS,EAUpBlG,EAAKmG,CAAAA,EAAAA,EAAAA,KAAAA,CAAKA,GAEhB,MACE,WAACC,MAAAA,CACC5D,cAAY,OACZvC,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,yFACAJ,GAED,GAAGiG,CAAK,WAET,UAACG,OAAAA,UACC,UAACC,UAAAA,CACCtG,GAAIA,EACJ2F,MAAOA,EACPC,OAAQA,EACRW,aAAa,iBACbV,EAAGA,EACHC,EAAGA,WAEH,UAACuR,OAAAA,CACCC,EAAG,OAAoB3R,MAAAA,CAAbC,EAAO,QAAY,OAAND,GACvBJ,KAAK,OACL4R,gBAAiBA,QAIvB,UAACxQ,OAAAA,CAAKhB,MAAM,OAAOC,OAAO,OAAOgB,YAAa,EAAGrB,KAAM,QAAW,OAAHvF,EAAG,OACjEoX,GACC,UAAChR,MAAAA,CAAIP,EAAGA,EAAGC,EAAGA,EAAG7F,UAAU,4BACxBmX,EAAQ/K,GAAG,CAAC,OAAC,CAACxG,EAAGC,EAAE,SAClB,UAACa,OAAAA,CACCC,YAAY,IAEZjB,MAAOA,EAAQ,EACfC,OAAQA,EAAS,EACjBC,EAAGA,EAAIF,EAAQ,EACfG,EAAGA,EAAIF,EAAS,GAJX,GAAQE,MAAAA,CAALD,EAAE,KAAK,OAAFC,UAW3B,ECtCayR,GAAoB,OAAC,OAChCjT,CAAK,UACLuQ,CAAQ,OACR2C,CAAK,OACLC,EAAQ,aAAa,iBACrBC,CAAe,CACfC,cAAY,YACZC,CAAU,CACX,GACOC,EAAcL,EAAMM,KAAK,GAAGC,IAAI,CAAC,CAACC,EAAGC,IACzC,EAAMC,WAAW,GAAKD,EAAEC,WAAW,CAAS,CAAP,CAC9BF,EAAEE,WAAW,CAAG,EAAI,CAAC,GAExBC,EAAUvP,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAiB,MAEjCwP,EAAY9T,GAASuT,CAAW,CAAC,EAAE,CAACpU,IAAI,CAExC4U,EAAe,UACnBxD,GAAAA,EAAWyD,EACb,EAGMC,EAAiBV,EAAYW,QAJjC3D,CAI0C,CAAC,GAAS4D,EAAIhV,IAAI,GAAK2U,GAC7DM,EAjDR,SAASC,CAAuB,EAC9B,IAAM7Y,EAAM8I,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,MAAI+E,GAItB,MAHA1M,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KACRnB,EAAIkT,OAAO,CAAG1O,CAChB,GACOxE,EAAIkT,OACb,EA2C6CuF,GAGvCjR,EAAY,CACeqG,UAA3B+K,CAAsC,GAEtCpR,EADEiR,EAAiBG,EACP,EACHH,CADM,CACWG,EACd,CAAC,EAED,CAFI,EAED,EAJW,EAQxBE,EAAW,CACf1D,GAV6C,CAGd,GAEA,CAKtB,CAR2C,EAQnB,EAAE9K,OAAF,CAAW,EAAGtE,EAAG,GAAKwB,EAAU,EACjE8N,QAAS,CAAEhL,QAAS,EAAGtE,EAAG,CAAE,EAC5BuP,KAAM,GAAwB,EAAEjL,OAAF,CAAW,EAAGtE,EAAG,CAAC,GAAKwB,EAAU,CACjE,EAEMuR,EAAchB,EAAY1G,MAAM,CAAC,GAAU,CAAC2H,EAAKZ,WAAW,EAC5Da,EAAmBlB,EAAY1G,MAAM,CAAC,GAAU2H,EAAKZ,WAAW,EAEhEc,EAAiB,CAAC9H,EAA2BuH,KAEjD,GADAJ,EAAaI,EAAIhV,IAAI,EACjB,CAAC0U,EAAQnF,OAAO,CAAE,OAEtB,IAAMiG,EAAa/H,EAAOgI,qBAAqB,GACzCC,EAAWhB,EAAQnF,OAAO,CAACkG,qBAAqB,GAEhDlQ,EAASiQ,EAAWG,IAAI,CAAGD,EAASC,IAAI,CAAGjB,EAAQnF,OAAO,CAACqG,UAAU,CAE3ElB,EAAQnF,OAAO,CAACsG,QAAQ,CAAC,CACvBF,KAAMpQ,EACNuQ,SAAU,QACZ,GAEAC,WAAW,WACT9B,GAAAA,GACF,EACF,EAEM+B,EAAkB,IACtB,IAAMC,EAAWtB,IAAcK,EAAIhV,IAAI,CACjCkW,EAAc,GAAgBlB,MAAAA,CAAbhB,EAAM,SAAgB,OAATgB,EAAIhV,IAAI,EACtCmW,EAAa,GAAkBnB,MAAAA,CAAfhB,EAAM,WAAkB,OAATgB,EAAIhV,IAAI,EAE7C,MACE,WAACyN,SAAAA,CAEClR,GAAI2Z,EACJrP,KAAK,MACLuP,gBAAeH,EACfnG,gBAAeqG,EACfnS,SAAUiS,EAAW,EAAI,CAAC,EAC1BvV,QAAS,GACP6U,EAAe3U,EAAMyV,aAAa,CAAuBrB,GAE3DxY,UAAY,oKAEXwY,EAAI9T,IAAI,EACP,UAACD,EAAAA,EAAIA,CAAAA,CACH8M,OAAO,UACP7M,KAAM8T,EAAI9T,IAAI,CACd1E,UAAU,uBACVuC,cAAY,SAGhB,UAACwF,OAAAA,CAAK/H,UAAU,uDACbwY,EAAI1Y,KAAK,GAEX2Z,GACC,UAACxP,EAAAA,CAAMA,CAAC/J,GAAG,EACT4Z,SAAU,sBAA4B,OAANtC,GAChCxX,UAAU,8DACVkK,MAAO,CAAE6P,OAAQ,CAAE,EACnBxX,cAAY,WA3BX,GAAY,OAATiW,EAAIhV,IAAI,CAAC,cAgCvB,EAEA,MACE,WAACtD,MAAAA,CAAIF,UAAU,oDACb,WAACE,MAAAA,CACCF,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CAAC,wCAAyCuX,GACvD9X,IAAKqY,EACL7N,KAAK,UACL2P,mBAAiB,uBAEhBpB,EAAYxM,GAAG,CAACoN,GAChBV,EAAiB7I,MAAM,CAAG,GACzB,UAAC/P,MAAAA,CACCF,UAAU,0FACVuC,cAAY,SAIfuW,EAAiB1M,GAAG,CAACoN,MAGxB,UAACtZ,MAAAA,CAAIF,UAAU,kBAEZ4X,EAAYxL,GAAG,CAAC,IACf,IAAMqN,EAAWjB,EAAIhV,IAAI,GAAK2U,EAC9B,MACE,UAAClO,EAAAA,CAAMA,CAAC/J,GAAG,EAET+U,UAASwE,GAAW,UACpBtE,EADgC,MACvBsE,EAAW,UAAY,OAChCd,SAAUA,EACVsB,OAAQ5S,EACRgO,WAAY,CAAEhH,SAAU,EAAI,EAC5BrO,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,gDACA,CAAE8Z,MAAOT,EAAU,UAAW,CAACA,CAAS,EACxC/B,GAEFrN,KAAK,WACLtK,GAAI,GAAkByY,MAAAA,CAAfhB,EAAM,WAAkB,OAATgB,EAAIhV,IAAI,EAC9B5B,kBAAiB,GAAgB4W,MAAAA,CAAbhB,EAAM,SAAgB,OAATgB,EAAIhV,IAAI,EACzCgE,SAAU,WAEV,UAACtH,MAAAA,UAAKsY,EAAI2B,OAAO,IAhBZ3B,EAAIhV,IAAI,CAmBnB,OAIR,EAAE,GC3J+C,OAAC,OAChDa,CAAK,cACL+V,CAAY,OACZta,CAAK,OACLqC,EAAQ,SAAS,WACjBkY,EAAY,SAAS,WACrBra,CAAS,WACTqI,CAAS,CACT,GAAGpC,EACJ,GACOqU,EAAaC,EAAAA,EAAkB,CAACpY,EAAM,CACtCqY,EAAiBD,EAAAA,EAAkB,CAACF,EAAU,CAEpD,MACE,WAACna,MAAAA,CACCF,UAAW+G,IACT,gBADmBA,6GAEnB/G,EACA,CAAE,mBAAoBqI,CAAU,GAElCpE,aAAYgC,CAAK,CAAC,aAAa,WAE/B,WAAC/F,MAAAA,CACCF,UAAW+G,IACT,gBADmBA,+CAEnBuT,EAAWG,EAAE,CACbH,EAAWjI,IAAI,YAGhB,SAAUpM,GACT,UAACxB,EAAAA,EAAIA,CAAAA,CACHC,KAAMuB,EAAMvB,IAAI,CAChB1E,UAAU,SACVuR,OAAO,UACN,GAAI,YAAatL,GAAS,CAAE,aAAcA,EAAMyU,OAAO,CAAE,GAG7D,UAAWzU,GACV,WAAC0U,SAAAA,WACC,UAACna,EAAAA,OAAKA,CAAAA,CACJR,UAAU,wBACV0F,MAAO,GACPC,OAAQ,GACRjF,IAAKuF,EAAMqC,KAAK,CAChBhG,IAAK2D,EAAMuC,QAAQ,GAErB,UAACoS,aAAAA,CAAW5a,UAAU,mBAAWF,UAIvC,WAACI,MAAAA,CAAIF,UAAU,2BACb,WAACE,MAAAA,CACCF,UAAW+G,IAAW,gBAADA,kBAAoC,CACvD,cAAesB,CACjB,aAEA,UAAC1D,IAAAA,CACC3E,UAAW+G,IACT,gBADmBA,4BAEnByT,YAGgB,UAAjB,OAAOnW,EACN,UAAC+J,GAAAA,EAAOA,CAAAA,CAACN,IAAKzJ,EAAOgK,SAAU,MAE/BhK,IAGH+V,GACC,UAACzV,IAAAA,CAAE3E,UAAU,gEACVoa,OAIP,UAACzV,IAAAA,CACC3E,UAAW+G,IACT,gBADmBA,uCAEnB,CACE,aAAcsB,CAChB,YAGDvI,SAKX,EAAE,gBC7GK,IAAM+a,GAAwC,OAAC,SACpDV,CAAO,WACPna,CAAS,CACT,GAAGC,EACJ,UACC,EAGE,EAHE,CAGF,IAHY,CAGZ,EAACC,MAAAA,CACCF,UAAWA,EACX8a,wBAAyB,CAAEC,OAAQC,GAAAA,EAAMA,CAACC,KAAK,CAACd,EAAS,EACxD,GAAGla,CAAI,GANS,IASvB,EAAE,GCZqBib,CAAAA,EAAAA,EAAAA,aAAAA,CAAaA,CAAqB,CACvDC,OAAQ,CAAC,EACTC,QAAS,CAAC,CACZ,GAEaC,GAAoB,KAC/B,IAAMC,EAAUC,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CAACC,IAC3B,GAAI,CAACF,EACH,MAAM,CADM,KACI,qDAElB,OAAOA,CACT,EAAE,GAE6BE,GAAeC,QAAQ,CAAC,GCF3B,KAC1B,GAAM,CACJN,OAAQ,MAAErE,CAAI,CAAE,CACjB,CAAGuE,KAEJ,MACE,MAHmBA,GAGnB,EAACjU,EAAAA,CAAKA,CAAAA,WACJ,UAACsU,KAAAA,CAAG1b,UAAU,mBAAU,kBACxB,WAACoH,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVnF,MAAM,SACNoF,QAAQ,KACRtH,UAAU,mBAEV,UAAC2b,GAAQA,CACPjX,IADOiX,CACF,SACLjB,QAAQ,0CACRrW,KAAK,OAAEyS,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC8E,CAAX9E,MAAkB,CAAC+E,cAAc,CACxCzB,aAAa,MACbta,MAAM,iBACNqC,MAAO2Z,SAnCfD,CAAuB,SAElBA,EAIDA,EAJA,CAIkB,EACb,CADgB,QAEdA,GAAkB,EACpB,CADuB,SAGvB,eARP,CAUJ,MAVWnO,EAgC+BoJ,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC8E,CAAX9E,MAAkB,CAAC+E,cAAc,EACjE7b,UAAU,kBAEZ,UAAC2b,GAAQA,CACPjX,IADOiX,CACD7E,OAAAA,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC8E,CAAX9E,MAAkB,CAACiF,gBAAAA,EAAmB,cAAgB,IAC5DrB,QACE5D,CAAAA,QAAAA,KAAAA,EAAAA,EAAAA,IAAU,CAAC8E,OAAO,CAACG,gBAAgB,EAC/B,oCACA,8DAEN1X,MAAOyS,CAAAA,QAAAA,KAAAA,EAAAA,EAAAA,IAAU,CAAC8E,OAAO,CAACG,gBAAAA,EAAmB,MAAQ,KACrDjc,MAAM,mBACNqC,MAAO2U,SAAAA,KAAAA,EAAAA,CAAAA,CAAMA,IAAI,CAAC8E,OAAO,CAACG,gBAAAA,EAAmB,UAAY,UACzD/b,UAAU,qBAGd,UAAC6a,GAAaA,CACZ7a,SADY6a,CACF,+CACVV,OAAO,CAAErD,QAAAA,KAAAA,EAAAA,EAAAA,IAAU,CAACkF,aAAa,KAIzC,EAAE,GCxD0B,SAMNlF,EALpB,GAAM,CACJqE,OAAQ,MAAErE,CAAI,CAAE,CAChBsE,SAAO,CACR,CAAGC,KAEEY,EAAcnF,OAAAA,EAAAA,CAFCuE,IAEDvE,EAAAA,QAAAA,EAAAA,EAAMA,IAAI,CAACoF,aAAAA,GAAXpF,KAAAA,MAAAA,KAAAA,EAAAA,EAA0B1L,KAAK,CAAC,UAAW,OAC7D0L,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAACoF,CAAXpF,YAAwB,CACzB,CACKqF,EAAQf,EAAQe,KAAK,CAACC,QAAQ,CAEpC,MACE,WAAChV,EAAAA,CAAKA,CAAAA,WACJ,UAACsU,KAAAA,CAAG1b,UAAU,mBAAU,6BACxB,UAACoH,EAAAA,CAAKA,CAAAA,CAACC,UAAU,sBACd4U,EAAY7P,GAAG,CAAC,CAACiQ,EAAYC,KAC5B,GAAM,CAACC,EAAMC,EAAK,CAAGH,OAAAA,EAAAA,KAAAA,EAAAA,EAAYjR,KAAK,CAAC,MAAlBiR,CAA0B,EAAE,CAE3CI,EACJF,IAASG,OAAOP,EAAMI,IAAI,GAAKC,IAASE,OAAOP,EAAMK,IAAI,EAE3D,MACE,WAAC1a,EAAAA,EAAGA,CAAAA,CACFE,GAAG,IACHhC,UAAW+G,IAAW,cAAe,CACnC,CADmBA,yHAEjB0V,EACF,iGACE,CAACA,CACL,GACApS,KAAK,SACLqK,eAAc+H,EACdxY,aAAY,cAAwBuY,MAAAA,CAAVD,EAAK,OAAaE,MAAAA,CAARD,EAAK,KAA8C,OAA3CC,EAAW,aAAe,4BAGrEA,GACC,UAAC1U,OAAAA,CACC/H,UAAU,iCACVuC,cAAY,gBAEZ,UAACkC,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL1E,UAAU,SACVuR,OAAO,cAIb,UAACxJ,OAAAA,UACC,WAAC3F,SAAAA,CAAOpC,UAAU,wBACfuc,EAAK,MAAIC,SAhBT,cAAmBH,MAAAA,CAALC,EAAE,KAAc,OAAXD,GAqB9B,KAEF,UAACxB,GAAaA,CACZ7a,SADY6a,CACF,+CACVV,OAAO,OAAErD,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC6F,CAAX7F,sBAAkC,KAInD,EAAE,GCrD+C,OAAC,CAChDjU,QAAM,WACN+Z,CAAS,QACT7O,CAAM,OACNjO,CAAK,WACL+c,CAAS,YACTC,CAAU,CACV,GAAG7c,EACJ,GACO,CAAC8c,EAAWC,EAAW,CAAGna,EAE1Boa,EAAa,CAAC,IAAM,EAAG,IAAM,EAAE,CAErC,MACE,WAAC7V,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,SAASsH,QAAQ,MAAM+C,KAAK,QAAS,GAAGpK,CAAI,WAC3D,WAACmH,EAAAA,CAAKA,CAAAA,CAACC,UAAU,aAAarH,UAAU,SAASkC,MAAM,mBACrD,WAACyC,IAAAA,CAAE3E,UAAU,gDACX,UAAC+H,OAAAA,CAAK/H,UAAU,mBAAW6c,IAC3B,UAACzO,GAAAA,EAAOA,CAAAA,CAACN,IAAKiP,EAAW1O,SAAU,MAClCN,GACC,UAAChG,OAAAA,CAAK/H,UAAU,6CAAqC+N,OAGzD,UAACpJ,IAAAA,CAAE3E,UAAU,4DACVF,IAEH,WAACsH,EAAAA,CAAKA,CAAAA,CACJlF,MAAM,WACNmF,UAAU,aACVC,QAAQ,OACRtH,UAAU,kCAEV,WAAC2E,IAAAA,CAAE3E,UAAU,0BACX,UAAC+H,OAAAA,CAAK/H,UAAU,mBAAW8c,IAC3B,UAAC1O,GAAAA,EAAOA,CAAAA,CAACN,IAAKkP,EAAY3O,SAAU,SAErCN,GAAU,UAACpJ,IAAAA,CAAE3E,UAAU,iCAAyB+N,UAGrD,WAAC3G,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVC,QAAQ,KACRtH,UAAU,eACVkC,MAAM,oBAEN,UAAChC,MAAAA,CAAIF,UAAU,4GACb,UAACiK,EAAAA,CAAMA,CAAC/J,GAAG,EACTF,UAAW+G,IACT,gBADmBA,sCAEnBwT,EAAAA,EAAkB,CAACqC,EAAUG,GAAW,CAACG,GAAG,EAE9C7S,KAAK,cACL8S,gBAAeJ,EACfK,gBAAe,EACfC,gBAAe,GACfpZ,aAAY,GAAiB8Y,MAAAA,CAAdF,EAAU,MAAc,OAAVE,EAAU,cACvC9H,QAAS,CAAEvP,MAAO,EAAGyE,QAAS,EAAI,EAClCgL,QAAS,CAAEzP,MAAO,GAAkB,OAAH,GAAZqX,EAAe,KAAI5S,QAAS,CAAE,EACnDkL,WAAY,CACVhH,SAAU,GACViP,KAAML,CACR,MAGJ,UAAC/c,MAAAA,CAAIF,UAAU,4GACb,UAACiK,EAAAA,CAAMA,CAAC/J,GAAG,EACTF,UAAW+G,IACT,gBADmBA,qCAEnBwT,EAAAA,EAAkB,CAACqC,EAAUI,GAAY,CAACE,GAAG,EAE/C7S,KAAK,cACL8S,gBAAeH,EACfI,gBAAe,EACfC,gBAAe,GACfpZ,aAAY,GAAkB+Y,MAAAA,CAAfF,EAAW,MAAe,OAAXE,EAAW,cACzC/H,QAAS,CAAEvP,MAAO,EAAGyE,QAAS,EAAI,EAClCgL,QAAS,CAAEzP,MAAO,GAAmB,OAAH,GAAbsX,EAAgB,KAAI7S,QAAS,CAAE,EACpDkL,WAAY,CACVhH,SAAU,GACViP,KAAML,CACR,WAMZ,EAAE,SC/FOM,SAAkBjR,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAQ,SACjC,GAAa,EACJ,CADO,QAELA,GAAS,EACX,CADc,SAGhB,SACT,CAEA,SAASkR,SAAyBlR,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAQ,SACxC,GAAa,EACJ,CADO,SAELA,GAAS,EACX,CADc,SAGhB,QACT,CAEO,IAAMmR,GAAiB,KAC5B,GAAM,CACJtC,OAAQ,MAAErE,CAAI,CAAE,SAChBsE,CAAO,CACR,CAAGC,WAEJ,IAAI,EAFiBA,CAEhBvE,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAAW4G,EAKd,CAL+B,EAK/B,QAACtW,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,eACb,UAACoU,KAAAA,CAAG1b,UAAU,mBAAU,oBACxB,WAACoH,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVnF,MAAM,SACNoF,QAAQ,KACRtH,UAAU,SACVqK,KAAK,kBAEL,UAACsR,GAAQA,CACPrT,IADOqT,EACAP,EAAQuC,KAAK,CAACpB,IAAI,CAACqB,IAAI,CAC9BpV,SAAU,GAA2B,OAAxB4S,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,CAAC,SACrCa,KAAK,OAAEyS,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAAC+G,SAAS,CAACC,iBAAiB,CAC7D1D,aAAa,MACbta,MAAOsb,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,CAC9B6W,UAAWkD,SACTzG,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAAC+G,SAAS,CAACC,iBAAiB,EAExD7Z,aAAY,GAA2B,OAAxBmX,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,CAAC,sBACvCxD,UAAU,qBAEZ,UAAC2b,GAAQA,CACPrT,IADOqT,EACAP,EAAQuC,KAAK,CAACnB,IAAI,CAACoB,IAAI,CAC9BpV,SAAU,GAA2B,OAAxB4S,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,CAAC,SACrCa,KAAK,OAAEyS,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAACiH,SAAS,CAACD,iBAAiB,CAC7D1D,aAAa,MACbta,MAAOsb,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,CAC9B6W,UAAWkD,SACTzG,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAACiH,SAAS,CAACD,iBAAiB,EAExD7Z,aAAY,GAA2B,OAAxBmX,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,CAAC,sBACvCxD,UAAU,wBAId,WAACoH,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,mBACf,UAACge,GAAWA,CACVnb,OADUmb,CAERlH,QAAAA,KAAAA,EAAAA,EAAAA,IAAU,CAAC4G,eAAe,CAACG,SAAS,CAACI,WAAW,OAChDnH,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAACiH,SAAS,CAACE,WAAW,CACjD,CACDne,MAAM,cACN+c,UAAW,GAA2B,OAAxBzB,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,CAAC,qBACtCsZ,WAAY,GAA2B,OAAxB1B,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,CAAC,qBACvCuK,OAAO,MACP6O,UAAWW,GACXtZ,aAAW,2BAEb,UAAC+Z,GAAWA,CACVnb,OAAQ,OACNiU,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAAC+G,SAAS,CAACK,aAAa,OAClDpH,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAACiH,SAAS,CAACG,aAAa,CACnD,CACDpe,MAAM,gBACN+c,UAAW,GAA2B,OAAxBzB,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,CAAC,wBACtCsZ,WAAY,GAA2B,OAAxB1B,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,CAAC,wBACvCuK,OAAO,MACP6O,UAAWY,GACXvZ,aAAW,6BAEb,UAAC+Z,GAAWA,CACVnb,OAAQ,OACNiU,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAAC+G,SAAS,CAACM,kBAAkB,OACvDrH,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAACiH,SAAS,CAACI,kBAAkB,CACxD,CACDre,MAAM,qBACN+c,UAAW,GAA2B,OAAxBzB,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,CAAC,6BACtCsZ,WAAY,GAA2B,OAAxB1B,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,CAAC,6BACvCuK,OAAO,MACP6O,UAAWW,GACXtZ,aAAW,kCAEb,UAAC+Z,GAAWA,CACVnb,OADUmb,OAERlH,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAAC+G,SAAS,CAACO,WAAW,OAChDtH,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAACiH,SAAS,CAACK,WAAW,CACjD,CACDvB,UAAW,GAA2B,OAAxBzB,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,CAAC,sBACtCsZ,WAAY,GAA2B,OAAxB1B,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,CAAC,sBACvC1D,MAAM,cACNiO,OAAO,MACP6O,UAAWW,GACXtZ,aAAW,8BAIf,UAAC4W,GAAaA,CACZ7a,SADY6a,CACF,+CACV5W,aAAW,4BACXkW,OAAO,OAAErD,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAAC4G,CAAX5G,cAA0B,CAACuH,SAAS,MA7F1C,IAiGX,EAAE,GC7HoB,KACpB,GAAM,CACJlD,OAAQ,MAAErE,CAAI,CAAE,SAChBsE,CAAO,CACR,CAAGC,KAEJ,MACE,MAHmBA,GAGnB,EAACjU,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,eACb,UAACoU,KAAAA,CAAG1b,UAAU,mBAAU,iCACxB,WAACoH,EAAAA,CAAKA,CAAAA,WACJ,WAACA,EAAAA,CAAKA,CAAAA,CAACC,UAAU,aAAaC,QAAQ,eACpC,UAAC7C,EAAAA,EAAIA,CAAAA,CACHC,KAAK,WACL6M,OAAO,UACPvR,UAAU,0BAEZ,UAAC0b,KAAAA,CAAG1b,UAAU,2DAAkD,gBAIjE8W,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAACwH,CAAXxH,cAA0B,CAACyH,uBAAuB,CAACnS,GAAG,CAAC,GACtD,WAAChF,EAAAA,CAAKA,CAAAA,CAA6CE,QAAQ,gBACzD,WAACF,EAAAA,CAAKA,CAAAA,CAACC,UAAU,aAAanF,MAAM,SAASoF,QAAQ,eACnD,UAACpH,MAAAA,CAAIF,UAAU,gFACb,UAACE,MAAAA,CAAIF,UAAU,uCAEjB,UAACwe,KAAAA,CAAGxe,UAAU,uDACX6Y,EAAK7R,KAAK,MAGf,UAACrC,IAAAA,CAAE3E,UAAU,uEACV6Y,EAAK4F,eAAe,KAVb,GAAiBrD,MAAAA,CAAdvC,EAAK7R,KAAK,CAAC,KAAsB,OAAnBoU,EAAQA,OAAO,CAACrb,EAAE,OAenD,WAACqH,EAAAA,CAAKA,CAAAA,WACJ,WAACA,EAAAA,CAAKA,CAAAA,CAACC,UAAU,aAAaC,QAAQ,eACpC,UAAC7C,EAAAA,EAAIA,CAAAA,CACHC,KAAK,aACL6M,OAAO,UACPvR,UAAU,wBAEZ,UAAC0b,KAAAA,CAAG1b,UAAU,2DAAkD,mBAIjE8W,EAAAA,KAAAA,EAAAA,EAAMA,IAAI,CAACwH,CAAXxH,cAA0B,CAAC4H,eAAe,CAACtS,GAAG,CAAC,GAC9C,WAAChF,EAAAA,CAAKA,CAAAA,CAA6CE,QAAQ,gBACzD,WAACF,EAAAA,CAAKA,CAAAA,CAACC,UAAU,aAAanF,MAAM,SAASoF,QAAQ,eACnD,UAACpH,MAAAA,CAAIF,UAAU,8EACb,UAACE,MAAAA,CAAIF,UAAU,qCAEjB,UAACwe,KAAAA,CAAGxe,UAAU,uDACX6Y,EAAK7R,KAAK,MAGf,UAACrC,IAAAA,CAAE3E,UAAU,uEACV6Y,EAAK4F,eAAe,KAVb,GAAiBrD,MAAAA,CAAdvC,EAAK7R,KAAK,CAAC,KAAsB,OAAnBoU,EAAQA,OAAO,CAACrb,EAAE,SAiBzD,EAAE,gECUF,IAAM4e,GAAiB9R,EAAAA,aAAmB,CAAc,MAE3C+R,GAAoB,KAC/B,IAAMtD,EAAUzO,EAAAA,UAAgB,CAAC8R,IAEjC,GAAe,MAAXrD,EACF,MAAM,MAAU,qDAGlB,OAAOA,CACT,EAAE,SAEcuD,GAAQ,CAGyB,KAHzB,UACtBhY,CAAQ,CACR,GAAG4O,EAC4C,CAHzB,EAIhBqJ,EAAUC,SAtEFA,KAAW,aACzBC,GAAc,CAAK,WACnBC,EAAY,KAAK,CACjBnP,KAAMoP,CAAc,CACpBC,aAAcC,CAAiB,CAChB,CALU,uDAKP,CAAC,EACb,CAACC,EAAkBC,EAAoB,CAAGzS,EAAAA,QAAc,CAACmS,GAEzDlP,QAAOoP,EAAAA,EAAkBG,EACzBtP,EAAUqP,QAAAA,EAAqBE,EAE/BxI,EAAOyI,CAAAA,EAAAA,EAHAL,CAGAK,EAAAA,CAAWA,CAAC,MAFTH,KAGdH,OACAnP,EACAqP,aAAcpP,EACdyP,qBAAsBC,GAAAA,EAAUA,CAChCC,WAAY,CACV3W,CAAAA,EAAAA,GAAAA,EAAAA,CAAMA,CAAC,IACP4W,CAAAA,EAAAA,GAAAA,EAAAA,CAAIA,CAAC,CACHC,UAAWX,EAAUY,QAAQ,CAAC,KAC9BC,0BAA2B,QAC3BC,QAAS,CACX,GACAC,CAAAA,EAAAA,GAAAA,EAAAA,CAAKA,CAAC,CAAED,QAAS,CAAE,GACpB,GAGGzE,EAAUxE,EAAKwE,OAAO,CAEtB2E,EAAQC,CAAAA,EAAAA,GAAAA,EAAAA,CAAQA,CAAC5E,EAAS,CAC9B6E,MAAM,EACN5J,QAA2B,MAAlB2I,CACX,GACMkB,EAAQC,CAAAA,EAAAA,GAAAA,EAAAA,CAAQA,CAAC/E,EAAS,CAC9B/E,QAA2B,MAAlB2I,CACX,GACMoB,EAAUC,CAAAA,EAAAA,GAAAA,EAAAA,CAAUA,CAACjF,GACrBjR,EAAOmW,CAAAA,EAAAA,GAAAA,EAAAA,CAAOA,CAAClF,EAAS,CAAEjR,KAAM,SAAU,GAE1CoW,EAAeC,CAAAA,EAAAA,GAAAA,EAAAA,CAAeA,CAAC,CAACT,EAAOG,EAAOE,EAASjW,EAAK,EAElE,OAAOwC,EAAAA,OAAa,CAClB,IAAO,OACLiD,UACAC,EACA,GAAG0Q,CAAY,CACf,GAAG3J,CAAI,CACT,EACA,CAAChH,EAAMC,EAAS0Q,EAAc3J,EAAK,CAEvC,EAoB6BrB,GAC3B,MACE,UAACkJ,GAAelD,QAAQ,EAACpX,MAAOya,WAC7BjY,GAGP,CAEO,IAAM8Z,GAAiB9T,EAAAA,UAAgB,CAG5C,SAAS8T,CAAsD,CAAEC,CAAO,KAAhD,UAAE/Z,CAAQ,SAAEga,EAAU,EAAK,CAAE,GAAG5a,EAAO,CAAvC,EAClBqV,EAAUsD,KAEVkC,EAAc,EAA6BjhB,GAAG,CAC9CA,EAAMkhB,CAAAA,EAAAA,GAAAA,EAAAA,CAAYA,CAAC,CAACzF,EAAQ0F,IAAI,CAACC,YAAY,CAAEL,EAASE,EAAY,SAG1E,GAAejU,EAAAA,cAAoB,CAAChG,GAC3BgG,EAAAA,MADsC,MACpB,CACvBhG,EACAyU,EAAQ4F,iBAAiB,CAAC,KACxBrhB,EACA,GAAGoG,CAAK,CACR,mBAAoBqV,EAAQxL,IAAI,CAAG,uBAAoBpC,CACzD,IAKF,UAAC3F,OAAAA,CACClI,IAAKA,EACLshB,mBAAkB7F,EAAQxL,IAAI,CAAG,uBAAoBpC,EACpD,GAAG4N,EAAQ4F,iBAAiB,CAACjb,EAAM,UAEnCY,GAGP,GAAG,GAE2BgG,EAAAA,UAAgB,CAI5C,SAASuU,CAAsC,CAAER,CAAO,KAAhC,CAAE1W,OAAK,CAAEnK,IAAE,CAAE,GAAGkG,EAAO,CAAvB,EAClBqV,EAAUsD,KACV/e,EAAMkhB,CAAAA,EAAAA,GAAAA,EAAAA,CAAYA,CAAC,CAACzF,EAAQ0F,IAAI,CAACK,WAAW,CAAET,EAAQ,SAEvDtF,EAAQxL,EAAT,EAAa,CAGf,CAHiB,EAGjB,OAACwR,GAAAA,EAAcA,CAAAA,UACb,UAACphB,MAAAA,CACCL,IAAKA,EACLE,GAAIA,EACJsK,KAAK,UACLH,MAAO,CACL,GAAGoR,EAAQiG,cAAc,CACzB,GAAGrX,CAAK,EAET,GAAGoR,EAAQkG,gBAAgB,CAACvb,EAAM,KAZf,IAgB5B,GAAG,GC5I8C,CAC/Cwb,KAAM,UACN,aAAc,UACdpd,MAAO,OACPqd,MAAO,QACT,EA6KA,GAvK0C,OAAC,GAuK5BC,GAvK8B7K,CAAI,CAAE,GAC3C8K,EAAU/U,EAAAA,OAAa,CAC3B,IAAM,CACJ,CACEgV,WAAY,GAASC,EAAIC,UAAU,CACnChiB,GAAI,YACJ8B,OAAQ,GACRmgB,KAAM,IACJ,IAAMF,EAAMG,EAAKH,GAAG,CAACI,QAAQ,CAE7B,MACE,WAACrD,GAAOA,CAACI,GAADJ,OAAW,yBACjB,UAAC8B,GAAcA,UACb,UAAC5c,EAAAA,EAAMA,CAAAA,CACLC,KAAK,SACLhE,UAAU,oJACViE,aAAY,sBAAsC6d,MAAAA,CAAhBA,EAAIK,QAAQ,CAAC,KAAY,OAATL,EAAIte,IAAI,WAE1D,UAACiB,EAAAA,EAAIA,CAAAA,CAACC,KAAK,YAAY1E,UAAU,eAGrC,UAACohB,GAAcA,CAACphB,UAAU,uJACxB,UAAC2E,IAAAA,UAAGmd,EAAIzD,SAAS,OAIzB,CACF,EACA,CACE+D,YAAa,OACbvgB,OAAQ,GACRmgB,KAAM,IACJ,IAAMF,EAAMG,EAAKH,GAAG,CAACI,QAAQ,CAE7B,MACE,WAAC9a,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,iBACb,UAAC3C,IAAAA,UAAGmd,EAAIte,IAAI,GACZ,UAACmB,IAAAA,CAAE3E,UAAU,qFACV8hB,EAAIK,QAAQ,KAIrB,CACF,EACA,CACEN,WAAY,GAASC,EAAIO,IAAI,CAC7BtiB,GAAI,OACJ8B,OAAQ,OACRmgB,KAAOC,GAGE5d,EAFYie,QAAQ,GAEdC,OAAO,CAAC,EAEzB,EACA,CACEV,WAAY,GAASC,EAAIU,WAAW,CACpCziB,GAAI,cACJ8B,OAAQ,cACRmgB,KAAOC,IACL,IAAM5d,EAAQ4d,EAAKK,QAAQ,GACrBR,EAAMG,EAAKH,GAAG,CAACI,QAAQ,CAE7B,MACE,WAACpgB,EAAAA,EAAGA,CAAAA,CACFkC,KAAK,KACLhE,UAAU,gBACV+B,QAAS0gB,EAAU,CAACX,EAAIxP,MAAM,CAAC,WAE9BjO,EAAMke,OAAO,GAAG,MAGvB,CACF,EACA,CACEV,WAAY,GAASC,EAAIC,UAAU,CACnChiB,GAAI,aACJ8B,OAAQ,QACRmgB,KAAM,IACJ,IAAM3d,EAAQ4d,EAAKK,QAAQ,GAE3B,MAAO,GAAmB,OAAhBje,EAAMke,OAAO,GAAG,IAC5B,CACF,EACA,CACExiB,GAAI,SACJ8B,OAAQ,cACRmgB,KAAM,IACJ,IAAMF,EAAMG,EAAKH,GAAG,CAACI,QAAQ,CAE7B,MACE,UAACvd,IAAAA,CACC3E,UAAW+G,IAAW,gBAADA,CACnB,iBAAkB+a,EAAIY,MAAM,CAC5B,eAAgB,CAACZ,EAAIY,MAAM,YAG5BZ,EAAIY,MAAM,CACP,IAAiD,OAA7C,CAACZ,EAAIC,UAAU,CAAID,EAAAA,CAAIO,IAAI,EAAG,EAAC,CAAGE,OAAO,CAAC,GAAG,KACjD,IAA8B,OAA1BT,EAAIC,UAAU,CAACQ,OAAO,CAAC,GAAG,MAGxC,CACF,EACD,CACD,EAAE,EAIEI,EAAoBC,CAAAA,EAAAA,GAAAA,EAAAA,CAAaA,CAAC,MACtC9L,UACA8K,EACAiB,gBAAiBA,CAAAA,EAAAA,GAAAA,EAAAA,CAAeA,EAClC,GAEMC,EAAmB,GACvB,QAAyB,GAChB,QAGF,QAGT,MACE,UAAC5iB,MAAAA,CAAIF,UAAU,6CACb,WAAC2iB,QAAAA,CAAM3iB,UAAU,uBACf,UAAC+iB,QAAAA,UACEJ,EAAMK,eAAe,GAAG5W,GAAG,CAAE6W,GAC5B,UAACC,KAAAA,UACED,EAAYE,OAAO,CAAC/W,GAAG,CAAEvK,GACxB,UAACuhB,KAAAA,CAECpjB,UAAU,mEAETqjB,CAAAA,EAAAA,GAAAA,EAAAA,CAAUA,CACTxhB,EAAOyhB,MAAM,CAACC,SAAS,CAAC1hB,MAAM,CAC9BA,EAAO2hB,UAAU,KALd3hB,EAAO9B,EAAE,IAHXkjB,EAAYljB,EAAE,KAe3B,UAAC0jB,QAAAA,UACEd,EAAMe,WAAW,GAAGC,IAAI,CAACvX,GAAG,CAAC,GAC5B,UAAC8W,KAAAA,CAECljB,UAAU,0HAET8hB,EAAI8B,eAAe,GAAGxX,GAAG,CAAC,GACzB,UAACyX,KAAAA,CAEC7jB,UAAW+G,IACT,gBADmBA,0CAEnB+b,EAAiBd,EAAKsB,MAAM,CAACvjB,EAAE,YAGhCsjB,CAAAA,EAAAA,GAAAA,EAAAA,CAAUA,CAACrB,EAAKsB,MAAM,CAACC,SAAS,CAACvB,IAAI,CAAEA,EAAKwB,UAAU,KANlDxB,EAAKjiB,EAAE,IALX+hB,EAAI/hB,EAAE,SAoBzB,EC7Ka+jB,GAAoC,OAAC,CAChDhN,KAAM,SAAEsE,CAAO,MAAE2I,CAAI,CAAE,aACvBC,CAAW,CACZ,GACO,CAAC7L,EAAWC,EAAa,CAAGrX,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAS,iBAC7CkjB,EAAatb,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAc,MAEjCwS,EbimLD,SAILpb,CAAU,EAUT,EAED,IAAM+V,CajnL4BoO,CbinLb7N,GAAgCtW,IAAI0V,GAXzDA,GAaMM,EAAQoO,CAAAA,EAAAA,GAAAA,CAAAA,CAAQA,CAACrO,GAMvB,OAFAC,EAAME,QAAQ,CAAGH,EAAaG,QAAQ,CAE/BF,CACT,Ea1nLqC2G,OAAOtB,EAAQA,OAAO,CAACrb,EAAE,GAM5D,MACE,UAACqkB,GAAeA,CAAC/f,MAAO,KAAR+f,GAAUjJ,UAAQC,CAAQ,WACxC,WAACvR,UAAAA,CAEChK,IAAKokB,EACLjkB,UAAU,gKAEV,WAAC6B,SAAAA,CAAO7B,UAAU,4DAChB,WAACE,MAAAA,CAAIF,UAAU,8EACb,WAACE,MAAAA,CAAIF,UAAU,iBACb,WAAC2a,SAAAA,CAAO3a,UAAU,sKAChB,UAACQ,EAAAA,OAAKA,CAAAA,CACJ8B,IAAK,WAAmC,OAAxB8Y,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,EACvCkC,MAAO,GACPC,OAAQ,GACRjF,IAAK0a,EAAQuC,KAAK,CAACpB,IAAI,CAACqB,IAAI,CAC5B5T,QAAQ,SAEV,WAAC4Q,aAAAA,CAAW5a,UAAU,oBAAU,WACrBob,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,OAGpC,WAACmX,SAAAA,CAAO3a,UAAU,4KAChB,UAACQ,EAAAA,OAAKA,CAAAA,CACJ8B,IAAK,WAAmC,OAAxB8Y,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,EACvCkC,MAAO,GACPC,OAAQ,GACRjF,IAAK0a,EAAQuC,KAAK,CAACnB,IAAI,CAACoB,IAAI,CAC5B5T,QAAQ,SAEV,WAAC4Q,aAAAA,CAAW5a,UAAU,oBAAU,WACrBob,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,UAKtC,WAACtD,MAAAA,CAAIF,UAAU,2CACb,WAAC2E,IAAAA,CAAE3E,UAAU,yDACVob,EAAQuC,KAAK,CAACpB,IAAI,CAAC/Y,IAAI,CAAC,OAAK4X,EAAQuC,KAAK,CAACnB,IAAI,CAAChZ,IAAI,IAEvD,WAAC4D,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVnF,MAAM,SACNoF,QAAQ,KACRtH,UAAU,oCAEV,WAACE,MAAAA,CAAIF,UAAU,4DACb,UAACyE,EAAAA,EAAIA,CAAAA,CAACC,KAAK,gBAAgB1E,UAAU,WACrC,UAACqkB,OAAAA,CACCC,SAAUC,KAAMnJ,EAAQA,OAAO,CAACoJ,IAAjBD,EAAuBE,MAAM,CAAC,cAC7CzkB,UAAU,uDAETukB,KAAMnJ,EAAQA,OAAO,CAACoJ,IAAjBD,EAAuBE,MAAM,CAAC,gBAGxC,WAACvkB,MAAAA,CAAIF,UAAU,4DACb,UAACyE,EAAAA,EAAIA,CAAAA,CAACC,KAAK,SAAS1E,UAAU,WAC9B,UAAC+H,OAAAA,CAAK/H,UAAU,yCACbob,EAAQsJ,MAAM,CAAClhB,IAAI,eAO9B,UAACtD,MAAAA,CAAIF,UAAU,yBACb,WAAC8B,EAAAA,EAAGA,CAAAA,CAACC,QAAQ,UAAU/B,UAAU,wBAC9Bob,EAAQe,KAAK,CAACC,QAAQ,CAACG,IAAI,CAAC,MAAInB,EAAQe,KAAK,CAACC,QAAQ,CAACI,IAAI,SAclE,UAAClF,GAAGA,CACFjT,MAAO8T,EACPvD,SAvFiB4D,CAuFPmM,GAtFhBvM,EAAaI,EACf,EAsFQf,gBAAiB,WACfuM,GAAAA,GACF,EACAxM,MAAO,UAFLwM,MAEwC,OAAnB5I,EAAQA,OAAO,CAACrb,EAAE,EACzCwX,MAAO,CACL,CACE/T,KAAM,gBACN1D,MAAO,gBACP4E,KAAM,YACNyV,QAAS,UAACyK,GAAYA,CAAAA,EACxB,EACA,CACEphB,GAHsBohB,EAGhB,gBACN9kB,MAAO,gBACP4E,KAAM,SACNyV,QAAS,UAAC0K,GAAYA,CAAAA,EACxB,EACA,CACErhB,GAHsBqhB,EAGhB,kBACN/kB,MAAO,kBACP4E,KAAM,kBACNyV,QAAS,UAACsD,GAAcA,CAAAA,EAC1B,EACA,CACEja,KAHwBia,UAIxB3d,MAAO,gBACP4E,KAAM,WACNyV,QAAS,UAAC2K,GAAMA,CAAAA,EAAAA,EAElB,CACEthB,KAAM,OACN1D,MAAO,eACP4E,KAAM,QACNuT,YAAa,GACbkC,QAAS,UAACwH,GAAQA,CAAC7K,KAAD6K,GACpB,EACD,KArHE,kBAAqC,OAAnBvG,EAAQA,OAAO,CAACrb,EAAE,IA0HjD,EAAE,GC7I4B,KAC5B,IAAM2T,EAAiB/K,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAY,MACnCgL,EAAoBhL,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAoB,MAC9CiL,EAAoBjL,CAAAA,EAAAA,EAAAA,MAAAA,CAAMA,CAAoB,MAC9CvH,EAAgBC,CAAAA,EAAAA,EAAAA,EAAAA,CAAUA,CAACC,sCAA+B,EAE1D,CAACyjB,CAF6D,CAAE,EAEf,CAAGhkB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAS7D,CAAE+V,KAAMkO,CAAQ,CAAE,Cdq7GnB,SAILxP,CAAgC,EAU/B,EAED,IAAMM,EAAeD,Ccr8G2BoP,CAAClP,Cdq8GMP,OAXvDC,CAW+DA,EAEzDM,EAAQoO,CAAAA,EAAAA,GAAAA,CAAAA,CAAQA,CAACrO,GAMvB,OAFAC,EAAME,QAAQ,CAAGH,EAAaG,QAAQ,CAE/BF,CACT,Ecr9G0C,CACtCjS,KAAM,iBACNgU,KAAM,OACNoN,KAAM,EACNC,SAAU,EACV9T,KAAMkT,OAAQa,QAAQ,CAAC,GAAI,QAAQX,MAAM,CAAC,aAC5C,GAEMnQ,EAAa9F,CAAAA,EAAAA,GAAAA,CAAAA,CAAaA,GAE1BmW,EAAkBU,CAAAA,EAAAA,EAAAA,WAAAA,CAAWA,CAAC,SAC9B3R,GAAAA,QAAAA,KAAAA,EAAAA,QAAAA,EAAAA,EAAgBX,OAAAA,GAAhBW,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAyBG,MAAAA,EAAQ,CACnCH,EAAeX,OAAO,CAACc,MAAM,CAACyR,gBAAgB,CAC7B,YAAfhR,EAA2B,IAAM,EAGvC,EAAG,CAACZ,EAAgBY,EAAW,EAO/B,MALAtT,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KAERukB,GAAyB,EAC3B,EAAG,EAAE,EAGH,WAACne,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,+BAA+BD,GAAG,+BACjD,UAACG,MAAAA,CAAIF,UAAU,iGACf,UAACE,MAAAA,CAAIF,UAAU,oGACf,UAACiX,GAAWA,CACVvR,MAAO,EADGuR,CAEVtR,OAAQ,GACRC,EAAG,CAAC,EACJC,EAAG,CAAC,EACJqR,gBAAiB,MACjBlX,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,4EAIJ,UAACwG,EAASA,OAAAA,GACR,WAAC1G,MAAAA,CAAIF,UAAU,qFACb,WAACoH,EAAAA,CAAKA,CAAAA,CACJpH,UAAU,wBACVsH,QAAQ,KACR9E,WAAS,oBAET,UAACV,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKjC,QAAQ,mBAAU,mBAGjC,WAACqF,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,gBACb,WAACF,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,eACb,UAACrF,EAAAA,EAAKA,CAAAA,CAACD,GAAG,KAAKU,QAAQ,cAAK,uBAG5B,UAACT,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACH8B,KAAK,WACL3B,MAAM,WACNnC,UAAU,oDACX,2IAOH,UAAC+D,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,SACLhE,UAAU,iBACVgC,GAAG,OACHQ,WAAS,UACTa,KAAM/B,sCAA+B,CACrCkG,GADyC,CAAE,KACjC,EACVvD,aAAW,6DACXC,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,YACPC,MAAO,qBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAGtB,wBAKL,WAAC8C,EAAAA,CAAKA,CAAAA,CACJlF,MAAM,SACNlC,UAAU,qEAEV,WAACwlB,MAAAA,CACCvhB,aAAW,uCACXjE,UAAU,8DAEV,WAAC+D,EAAAA,EAAMA,CAAAA,CACLlE,IAAK8T,EACL1P,aAAW,mBACXjE,UAAW+G,IACT,gBADmBA,4KAIrB,UAACtC,EAAAA,EAAIA,CAAAA,CAACC,KAAK,YAAY1E,UAAU,WACjC,UAAC+H,OAAAA,CAAK/H,UAAU,mBAAU,wBAE5B,WAAC+D,EAAAA,EAAMA,CAAAA,CACLlE,IAAK+T,EACL3P,aAAW,eACXjE,UAAW+G,IACT,gBADmBA,4KAIrB,UAACtC,EAAAA,EAAIA,CAAAA,CAACC,KAAK,aAAa1E,UAAU,WAClC,UAAC+H,OAAAA,CAAK/H,UAAU,mBAAU,uBAG9B,UAACuL,EAAAA,EAAMA,CAAAA,CACLG,aAAc,GACdE,QAAS,CAAC6Z,EAAAA,EAAUA,CAAC,CACrBzR,aACE+Q,GACI,CACE7Q,OAAQN,EAAkBb,OAAO,CACjCkB,OAAQN,EAAkBZ,OAAO,EAIzC2S,EAFM,GAEA,CACJC,iBAAkB,mBAClBC,iBAAkB,eAClBC,kBAAmB,8BACrB,EACAC,SAAU,IACR,GACEnS,EAAkBZ,OAAO,EACzBa,EAAkBb,OAAO,EACzB,CAACgS,EACD,KACWlR,CAA8B,UAAU,CAA/C,eAAOA,EAAAA,EAAO2B,MAAAA,GAAP3B,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAeG,UAAAA,IACxBH,EAAO2B,MAAM,CAACxB,UAAU,CAACC,MAAM,CAAGN,EAAkBZ,OAAO,CAC3Dc,EAAO2B,MAAM,CAACxB,UAAU,CAACE,MAAM,CAAGN,EAAkBb,OAAO,EAE7Dc,EAAOG,UAAU,CAAC+R,IAAI,GACtBlS,EAAOG,UAAU,CAACgS,MAAM,GACxBT,GAAyB,EAC3B,CACF,EACA1lB,IAAK6T,EACLlI,cAAe,EACfC,KAAM,GACNwa,eAA+B,YAAf3R,EAChB4R,YAAY,EACZlmB,UAAU,wBAETglB,EAAAA,KAAAA,EAAAA,EAAUlO,IAAI,CAACA,IAAI,CAAnBkO,GAAuB,CAAC,GACvB,UAACzY,EAAAA,EAAWA,CAAAA,UACV,UAACrM,MAAAA,CAAIF,UAAU,gCACb,UAAC8jB,GAAWA,CAAChN,KAAMqP,EAAPrC,YAA2Ba,OAFzB,kBAA2C,OAAzBwB,EAAM/K,OAAO,CAACA,OAAO,CAACrb,EAAE,MAOhE,UAACG,MAAAA,CAAIF,UAAU,kDACb,UAAC+D,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,SACLhC,GAAG,OACHqB,KAAMjC,EACNoG,SAAU,EACVvD,aAAW,6DACXC,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,YACPC,MAAO,qBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAGtB,8BASf,EAAE,GEpNa,CAAC,+FAAuG,8TAAkU,CCAzb,GAAe,CAAC,4FAAoG,8TAAkU,CCAtb,GAAe,CAAC,oGAA4G,8XAAkY,CCqBxf8hB,GAA4B,OAAC,CACjC1hB,MAAI,KACJpC,CAAG,OACH0E,CAAK,aACL8D,CAAW,cACXub,CAAY,CACZC,aAAW,WACXtmB,CAAS,CACT,GAAGC,EACJ,GACC,MACE,WAAC4J,UAAAA,CACC7J,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,oIACAJ,GAED,GAAGC,CAAI,WAGR,WAACC,MAAAA,CAAIF,UAAU,qCAAqCuC,cAAY,iBAC9D,UAACrC,MAAAA,CACCF,UAAU,4JACVkK,MAAO,CACLqc,gBAAiBD,CACnB,IAEF,UAACpmB,MAAAA,CACCF,UAAU,6KACVkK,MAAO,CACLqc,gBAAiBD,CACnB,OAGJ,WAACpmB,MAAAA,CAAIF,UAAU,+BAA+BuC,cAAY,iBACxD,UAACrC,MAAAA,CACCF,UAAU,4JACVkK,MAAO,CACLqc,gBAAiBF,CACnB,IAEF,UAACnmB,MAAAA,CACCF,UAAU,6KACVkK,MAAO,CACLqc,gBAAiBF,CACnB,OAIJ,WAACnmB,MAAAA,CAAIF,UAAU,0DACb,UAACQ,EAAAA,OAAKA,CAAAA,CACJE,IAAKgE,EACL1E,UAAU,qBACVsC,IAAKA,EACL0H,QAAQ,SAEV,UAAC0R,KAAAA,CAAG1b,UAAU,mFACXgH,IAEH,UAACrC,IAAAA,CAAE3E,UAAU,uGACV8K,SAKX,EAEa0b,GAAoB,IAE7B,UAAC7kB,UAAAA,CACC3B,UAAU,uDACV4B,kBAAgB,4BAEhB,UAACgF,EAASA,OAAAA,GACR,WAACQ,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,OAAOtH,UAAU,mBAC9B,WAAC6B,SAAAA,CACCW,WAAS,UACTxC,UAAU,oDAEV,UAAC8B,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKjC,QAAQ,UAAUC,GAAG,aAAI,aAGxC,UAACoF,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,MAAMtH,UAAU,kBAC7B,WAACoH,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,KAAKtH,UAAU,6CAC5B,WAACiC,EAAAA,EAAKA,CAAAA,CAACD,GAAG,KAAKU,QAAQ,KAAK3C,GAAG,6BAAmB,+BACnB,IAC7B,UAACqC,SAAAA,CAAOpC,UAAU,wBAAe,yBAEnC,UAACiC,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACH8B,KAAK,WACL3B,MAAM,WACNnC,UAAU,oDACX,wIAQP,WAACE,MAAAA,CAAIF,UAAU,8EACb,UAAComB,GAAAA,CACC1hB,KAAM+hB,GACNnkB,GADYmkB,CACR,sEACJzf,MAAM,iBACN8D,YAAY,uHACZub,aAAa,yBACbC,YAAY,2BAEd,UAACF,GAAAA,CACC1hB,KAAMsJ,GACN1L,IAAI,IADK0L,yEAEThH,MAAM,wBACN8D,YAAY,6HACZub,aAAa,yBACbC,YAAY,2BAEd,UAACF,GAAAA,CACC1hB,KAAMgiB,GACNpkB,IAAI,IADYokB,uEAEhB1f,MAAM,mBACN8D,YAAY,8HACZub,aAAa,0BACbC,YAAY,0BACZtmB,UAAU,mCAGd,UAAC+D,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,SACLX,KAAK,WACLrB,GAAG,OACHiC,aAAW,uBACXC,QAAS,IACPC,CAAAA,EAAAA,EAAAA,YAAAA,CAAYA,CAAC,CACXC,MAAO,aACPC,MAAO,mBACP,GAAGC,CAAAA,EAAAA,EAAAA,EAAAA,CAAYA,EAAE,YAGtB,wBCjKX,GAAe,CAAC,mGAA2G,8fAAkgB,iBCQtnB,IAAMqiB,GAAW/mB,CAAAA,EAAAA,EAAAA,UAAAA,CAAUA,CAChC,GAA2CC,QAA1C,OAAEC,CAAK,IAAEC,CAAE,CAAEC,WAAS,OAAEqE,CAAK,CAAE,GAAGpE,EAAM,GACvC,MACE,WAACC,MAAAA,CAAIF,UAAU,4BACb,UAAC4mB,GAAAA,CAAgBA,CAAAA,CACf7mB,GAAIA,EACJsE,MAAOA,EACPrE,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,2aACAJ,GAEFK,YAAY,WACZR,IAAKA,EACJ,GAAGI,CAAI,GAGV,UAACH,QAAAA,CACCQ,QAASP,EACTC,UAAU,2lBAETF,MAIT,GACA,GAEOS,WAAW,CAAG,2BC3BhB,IAAMsmB,GAA8C,OAAC,WAC1D7mB,CAAS,OACT8mB,CAAK,CACL,GAAG7mB,EACJ,GACC,MACE,WAAC4B,SAAAA,CACC7B,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CAAC,0CAA2CJ,GACxD,GAAGC,CAAI,WAER,UAAC6B,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKjC,QAAQ,mBAAU,eAGjC,WAACE,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACHU,QAAQ,KACR1C,UAAU,YACT,GAAI8mB,EAAQ,CAAE/mB,GAAI,iBAAkB,EAAI,CAAC,CAAC,WAE3C,UAACgI,OAAAA,CAAK/H,UAAU,mBAAU,sDAEnB,mBAGT,UAACiC,EAAAA,EAAKA,CAAAA,CAACD,GAAG,KAAK8B,KAAK,WAAW3B,MAAM,WAAWnC,UAAU,oBAAW,0EAK3E,EAAE,GCjByB,KACzB,GAAM,eAAEW,CAAa,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,CAAAA,CAAQA,GAC5B,CACJ6C,SAAO,CACPb,cAAY,CACZmkB,UAAW,QAAEC,CAAM,CAAE,OACrBC,CAAK,CACN,CAAGzlB,CAAAA,EAAAA,EAAAA,EAAAA,CAAOA,GACL,CACJ0lB,YAAaC,CAAW,CACxBC,UAAWC,CAAkB,CAC7BC,SAAO,CACPra,OAAK,CACN,CAAGsa,KACEC,EAAe7e,CAAAA,EADP4e,EACO5e,MAAAA,CAAMA,CAAY,MACjC,CAAC8e,EAAaC,EAAe,CAAG3mB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GAEzC4mB,EAAeC,CAAAA,EAAAA,EAAAA,OAAAA,CAAOA,CAAC,IAC3B,QAA8B,CAA1BjnB,EACK,OAGa,SAAS,CAA3BA,EACK,eAIR,CAACA,EAAc,EAEZgC,EAAW,MAAOmU,QACO0Q,EAE7BA,EAFA,IAAMK,EAAiB,eAAML,EAAAA,EAAazU,OAAAA,GAAbyU,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAsBM,YAAY,GAE3C,SAApBN,EAAAA,EAAazU,OAAAA,GAAbyU,KAAAA,IAAAA,GAAAA,EAAsBP,KAAK,GAE3BnQ,EAAK+Q,cAAc,CAAGA,GAAkB,GAExC,IAAME,EAAcC,OAAOC,OAAO,CAACnR,GAAMoR,MAAM,CAAC,CAACC,EAAAA,QAAK,CAACC,EAAK/jB,EAAM,GAIhE,OAHIA,IACF8jB,CAAG,CAACC,CADK,CACiB,CAAG/jB,CAAAA,EAExB8jB,CACT,EAAG,CAAC,EAEJ,OAAMhB,EAAY,CAAErQ,KAAMiR,CAAY,GAEtCL,EAAe,IAEfnO,WAAW,KACTmO,GAAe,EACjB,EAAG,KAEHT,GACF,EAEA,MACE,WAAC7f,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,+BAA+BsH,QAAQ,gBACtD,UAACuf,GAAgBA,CAAC7mB,UAAU,EAAX6mB,iBACjB,UAACtlB,OAAAA,CAAKoB,SAAUC,EAAaD,GAAW3C,UAAU,kBAChD,WAACoH,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,eACb,WAACF,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,SAASsH,QAAQ,eAChC,WAACF,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,SAASsH,QAAQ,eAChC,UAAC/D,EAAAA,EAAUA,CAAAA,CACTC,KAAK,OACLC,QAASA,EACTC,aAAa,GACb2kB,MAAO,CAAEC,SAAU,kBAAmB,EACtC3kB,OAAQ,OAAC,OAAEC,CAAK,CAAE,SAChB,UAACjE,EAAKA,CACJG,EADIH,IACE,OACNmE,KAAK,OACL/D,GAAG,OACH8D,aAAa,OACb0kB,eAAcvB,EAAOxjB,IAAI,CAAG,OAAS,QACpC,GAAGI,CAAK,MAIdojB,EAAOxjB,IAAI,EACV,UAACuE,OAAAA,CAAKsC,KAAK,QAAQrK,UAAU,gCAC1BgnB,EAAOxjB,IAAI,CAACglB,OAAO,MAK1B,WAACphB,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,SAASsH,QAAQ,eAChC,UAAC/D,EAAAA,EAAUA,CAAAA,CACTC,KAAK,QACLC,QAASA,EACTC,aAAa,GACb2kB,MAAO,CACLC,SAAU,oBACVjiB,QAAS,CACPhC,MAAO,aACPmkB,QAAS,uBACX,CACF,EACA7kB,OAAQ,OAAC,OAAEC,CAAK,CAAE,SAChB,UAACjE,EAAKA,CACJG,EADIH,IACE,SACNmE,KAAK,QACL/D,GAAG,QACH8D,aAAa,QACb0kB,eAAcvB,EAAOtlB,KAAK,CAAG,OAAS,QACrC,GAAGkC,CAAK,MAIdojB,EAAOtlB,KAAK,EACX,UAACqG,OAAAA,CAAKsC,KAAK,QAAQrK,UAAU,gCAC1BgnB,EAAOtlB,KAAK,CAAC8mB,OAAO,MAK3B,WAACphB,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,SAASsH,QAAQ,eAChC,UAAC/D,EAAAA,EAAUA,CAAAA,CACTC,KAAK,UACLC,QAASA,EACTC,aAAa,GACb2kB,MAAO,CAAEC,SAAU,qBAAsB,EACzC3kB,OAAQ,OAAC,OAAEC,CAAK,CAAE,SAChB,UAAC+iB,GAAQA,CACP7mB,IADO6mB,EACD,UACNhD,KAAM,EACN5jB,GAAG,UACHwoB,eAAcvB,EAAOwB,OAAO,CAAG,OAAS,QACvC,GAAG5kB,CAAK,MAIdojB,EAAOwB,OAAO,EACb,UAACzgB,OAAAA,CAAKsC,KAAK,QAAQrK,UAAU,gCAC1BgnB,EAAOwB,OAAO,CAACA,OAAO,MAK7B,UAACC,GAAAA,CAASA,CAAAA,CACRC,QAASpnB,0CAA0C,CACnD0C,GADuD,CAAE,CACpD,YACL2kB,MAAM,aAENC,MAAOjB,EACP9nB,IAAK2nB,GAFA,WAAwB,OAAbG,OAKpB,WAACvgB,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,KAAKtH,UAAU,mBAC3BsnB,GACC,UAACpnB,MAAAA,CACCF,UAAU,oDACVqK,KAAK,QACLwe,YAAU,qBAEV,WAACzhB,EAAAA,CAAKA,CAAAA,WACJ,WAACA,EAAAA,CAAKA,CAAAA,CAACC,UAAU,aAAanF,MAAM,SAASoF,QAAQ,eACnD,UAAC7C,EAAAA,EAAIA,CAAAA,CAACC,KAAK,UAAU1E,UAAU,wBAC/B,UAAC2E,IAAAA,CAAE3E,UAAU,sCACViN,SAAAA,KAAAA,EAAAA,EAAOub,OAAAA,GAAW,wBAGvB,WAAC7jB,IAAAA,CAAE3E,UAAU,sDAA4C,iFAEhC,IACvB,UAAC+H,OAAAA,CAAK/H,UAAU,qBAAY,4BAA8B,YAKjEynB,GACC,UAACvnB,MAAAA,CACCF,UAAU,2EACVqK,KAAK,SACLwe,YAAU,kBAEV,WAACzhB,EAAAA,CAAKA,CAAAA,WACJ,WAACA,EAAAA,CAAKA,CAAAA,CAACC,UAAU,aAAanF,MAAM,SAASoF,QAAQ,eACnD,UAAC7C,EAAAA,EAAIA,CAAAA,CACHC,KAAK,cACL1E,UAAU,0BAEZ,UAAC2E,IAAAA,CAAE3E,UAAU,wCAA+B,mCAI9C,WAAC2E,IAAAA,CAAE3E,UAAU,wDAA8C,+BAEzD,UAAC8oB,KAAAA,CAAAA,GAAK,uDAMd,WAAC1hB,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVrH,UAAU,yBACVkC,MAAM,mBAEN,WAACyC,IAAAA,CAAE3E,UAAU,iFAAuE,qCAC/C,IACnC,UAAC+X,IAAAA,CACC1U,KAAK,wBACLyF,OAAO,SACP9I,UAAU,kCACX,uBAEI,IAAI,MACL,IACJ,UAAC+X,IAAAA,CACC1U,KAAK,kBACLyF,OAAO,SACP9I,UAAU,kCACX,mBAEG,OAGN,UAAC+D,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,QACLhE,UAAU,OACV8D,KAAK,SACLilB,UAAW1B,EACXpjB,aAAW,6BAEX,UAAC8D,OAAAA,UAAK,wBAQtB,EAAE,GCjPqB,KACrB,GAAM,CAACihB,EAAaC,EAAe,CAAGloB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACzCW,EAAQ,0BAERwnB,EAAwB,UAC5B,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,CAAmBA,CAACznB,GAC1BunB,EAAe,IAEf1P,WAAW,KACT0P,GAAe,EACjB,EAAG,IACL,EAEA,MACE,WAACtnB,UAAAA,CACC3B,UAAU,qBACVD,GAAG,UACH6B,kBAAgB,4BAEhB,UAACgF,EAASA,OAAAA,GACR,WAAC1G,MAAAA,CAAIF,UAAU,4FACb,WAACE,MAAAA,CAAIF,UAAU,iCACb,UAAC6mB,GAAgBA,CACf7mB,UAAU,EADK6mB,gCAEfC,OAAO,IAET,WAAC5mB,MAAAA,CAAIF,UAAU,kEACb,WAAC6J,UAAAA,CAAQ7J,UAAU,qIACjB,WAAC6B,SAAAA,CAAO7B,UAAU,4CAChB,UAACQ,EAAAA,OAAKA,CAAAA,CACJE,IAAK0oB,GACLppB,IADYopB,MACF,6CACV9mB,IAAI,mFACJoD,MAAO,GACPC,OAAQ,KAEV,WAACzF,MAAAA,CAAIF,UAAU,qEACb,WAACoH,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,OAAOtH,UAAU,uBAC9B,UAAC0b,KAAAA,CAAG1b,UAAU,+EAAsE,wBAGpF,UAAC2E,IAAAA,CAAE3E,UAAU,wFAA+E,kCAI9F,WAACoH,EAAAA,CAAKA,CAAAA,CAACC,UAAU,uBACf,UAACtD,EAAAA,EAAMA,CAAAA,CACL/D,UAAU,gKACVgE,KAAK,SACLhC,GAAG,OACHqB,KAAK,6CACLyF,OAAO,SACPugB,IAAI,sBACJplB,aAAW,2CAEX,UAACQ,EAAAA,EAAIA,CAAAA,CAACC,KAAK,eAAe1E,UAAU,aAEtC,UAAC+D,EAAAA,EAAMA,CAAAA,CACL/D,UAAU,gKACVgE,KAAK,SACLhC,GAAG,OACHqB,KAAK,2CACLyF,OAAO,SACPugB,IAAI,sBACJplB,aAAW,4CAEX,UAACQ,EAAAA,EAAIA,CAAAA,CAACC,KAAK,gBAAgB1E,UAAU,aAEvC,UAAC+D,EAAAA,EAAMA,CAAAA,CACL/D,UAAU,gKACVgE,KAAK,SACLhC,GAAG,OACHqB,KAAK,0BACLyF,OAAO,SACPugB,IAAI,sBACJplB,aAAW,2CAEX,UAACQ,EAAAA,EAAIA,CAAAA,CAACC,KAAK,eAAe1E,UAAU,sBAK5C,WAACE,MAAAA,CAAIF,UAAU,gGACb,UAAC2E,IAAAA,UAAE,+DACH,WAACA,IAAAA,WAAE,gIAGI,UAACvC,SAAAA,UAAO,mBAAuB,2CAGtC,UAACuC,IAAAA,UAAE,2CAGP,WAACyC,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,SAASsH,QAAQ,eAChC,WAACF,EAAAA,CAAKA,CAAAA,CACJpH,UAAU,oGACVqH,UAAU,aACVnF,MAAM,SACNoF,QAAQ,eAER,WAACpH,MAAAA,CAAIF,UAAU,sDACb,UAACE,MAAAA,CAAIF,UAAU,8CACb,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,iBACL1E,UAAU,gCACViE,aAAW,+CAGf,WAACmD,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,iBACb,UAAC3C,IAAAA,CAAE3E,UAAU,+CAAsC,WAGnD,UAAC2E,IAAAA,CAAE3E,UAAU,oEACV0B,UAIP,WAACqC,EAAAA,EAAMA,CAAAA,CACL/D,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,iKACA,CACE,uJACE4oB,CACJ,GAEFhlB,KAAK,SACLF,KAAK,SACLI,QAASglB,EACTjlB,aAAW,4CAEX,UAACQ,EAAAA,EAAIA,CAAAA,CACHC,KAAK,OACL1E,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,8IACA,CACE,iBAAkB4oB,CACpB,GAEF/kB,aAAW,iDAEb,UAACQ,EAAAA,EAAIA,CAAAA,CACHC,KAAK,QACL1E,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,8IACA,CACE,kBAAmB,CAAC4oB,CACtB,GAEF/kB,aAAW,yCAEb,UAAC8D,OAAAA,CAAK/H,UAAU,mBACbgpB,EAAc,eAAiB,qBAItC,UAACjR,IAAAA,CACC1U,KAAK,uCACLyF,OAAO,SACPugB,IAAI,sBACJrpB,UAAU,eACViE,aAAW,+CAEX,WAAC/D,MAAAA,CAAIF,UAAU,iJACb,UAACE,MAAAA,CAAIF,UAAU,0HACb,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,gBACL1E,UAAU,gCACViE,aAAW,qDAGf,WAACmD,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,iBACb,UAAC3C,IAAAA,CAAE3E,UAAU,+CAAsC,cAGnD,UAAC2E,IAAAA,CAAE3E,UAAU,oEAA2D,uBAM9E,WAACspB,UAAAA,CAAQtpB,UAAU,iJACjB,UAACE,MAAAA,CAAIF,UAAU,8CACb,UAACyE,EAAAA,EAAIA,CAAAA,CACHC,KAAK,YACL1E,UAAU,gCACVuC,cAAY,OACZ0B,aAAW,0CAGf,WAACmD,EAAAA,CAAKA,CAAAA,CAACE,QAAQ,iBACb,UAAC3C,IAAAA,CAAE3E,UAAU,+CAAsC,YAGnD,UAAC2E,IAAAA,CAAE3E,UAAU,oEAA2D,2DAQlF,UAACoH,EAAAA,CAAKA,CAAAA,CACJC,UAAU,aACVrH,UAAU,wCAEV,UAACupB,GAAWA,CAAAA,OAAAA,GAIlB,UAACrpB,MAAAA,CAAI2oB,YAAU,SAAS7oB,UAAU,mBAC/BgpB,GAAe,yCAIxB,EAAE,GC9NiC,CACjC,CACEQ,SAAU,wCACV1lB,KAAM,UACN2lB,OAAS,8sBASTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,uFAIH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,sBACR,WAACuC,IAAAA,WAAE,2CACwC,IACzC,UAACvC,SAAAA,UAAO,2BAA+B,gLAKzC,UAAC8Q,aAAAA,UAAW,8FAKd,WAAC1O,KAAAA,WACC,UAACpC,SAAAA,UAAO,uCACR,WAACuC,IAAAA,WAAE,qDACkD,IACnD,UAACvC,SAAAA,UAAO,mBAAuB,uIAIjC,UAAC8Q,aAAAA,UAAW,kEAOtB,EACA,CACEsW,SAAU,qCACV1lB,KAAM,UACN2lB,OAAS,gaAGTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,kMAKH,WAACA,IAAAA,WAAE,wFAEgB,IACjB,UAACvC,SAAAA,UAAO,kDAAsD,iGAMtE,EACA,CACEonB,SAAU,mCACV1lB,KAAM,UACN2lB,OAAS,wYAGTtP,QACE,iCACE,WAACxV,IAAAA,WAAE,6DAC0D,IAC3D,UAACvC,SAAAA,UAAO,kBAAsB,uMAKhC,UAACuC,IAAAA,UAAE,+HAMT,EACA,CACE6kB,SAAU,8BACV1lB,KAAM,UACN2lB,OAAS,2TAMTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,uCACH,WAACJ,KAAAA,WACC,UAACC,KAAAA,UACC,WAACG,IAAAA,WACC,UAACvC,SAAAA,UAAO,sBAA0B,+DAItC,UAACoC,KAAAA,UACC,WAACG,IAAAA,WACC,UAACvC,SAAAA,UAAO,+BAAmC,gGAKjD,UAACuC,IAAAA,UAAE,4FAMT,EACA,CACE6kB,SAAU,8CACV1lB,KAAM,UACN2lB,OAAS,gcAOTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,6CACH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,gBAAoB,oFAG9B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,wBAA4B,iDAGtC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,sBAA0B,4GAItC,UAACuC,IAAAA,UAAE,qIAMT,EACA,CACE6kB,SAAU,6DACV1lB,KAAM,UACN2lB,OAAS,6TACTtP,QACE,+BACE,WAACxV,IAAAA,WAAE,6FAE4B,UAACvC,SAAAA,UAAO,sBAA0B,MAAI,IACnE,UAACA,SAAAA,UAAO,4BAAgC,2LAOhD,EACA,CACEonB,SAAU,kEACV1lB,KAAM,UACN2lB,OAAS,kQACTtP,QACE,+BACE,UAACxV,IAAAA,UAAE,qQAQT,EACA,CACE6kB,SAAU,sCACV1lB,KAAM,OACN2lB,OAAS,yOACTtP,QACE,+BACE,WAACxV,IAAAA,WAAE,oCACgC,UAACvC,SAAAA,UAAO,cAAkB,mMAOnE,EACA,CACEonB,SACE,sEACF1lB,KAAM,OACN2lB,OAAS,o6BAOTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,uGAIH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,sBAA0B,gWAOpC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,0BAA8B,yPAO1C,UAACuC,IAAAA,UAAE,0MAOT,EACA,CACE6kB,SAAU,mDACV1lB,KAAM,OACN2lB,OAAS,k/BAWTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,qFAIH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,qBAAyB,iMAKnC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,eAAmB,iJAI7B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,gBAAoB,gPAK9B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,gBAAoB,2LAMhC,UAACuC,IAAAA,UAAE,gIAMT,EACA,CACE6kB,SAAU,8DACV1lB,KAAM,OACN2lB,OAAS,2dAGTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,kRAMH,WAACA,IAAAA,WAAE,iFAES,IACV,UAACoT,IAAAA,CAAE1U,KAAM,GAAmC,OAAhC/B,sCAA+B,CAAC,4BAAkB,mBAEzD,IAAI,iHAMjB,EACA,CACEkoB,SAAU,gCACV1lB,KAAM,OACN2lB,OAAS,6LACTtP,QACE,+BACE,UAACxV,IAAAA,UAAE,gMAOT,EACA,CACE6kB,SACE,0EACF1lB,KAAM,OACN2lB,OAAS,yeAOTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,4EAIH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,uCAA2C,sHAIrD,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,qCAAyC,gIAKrD,UAACuC,IAAAA,UAAE,iHAMT,EACA,CACE6kB,SACE,4EACF1lB,KAAM,OACN2lB,OAAS,+UAGTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,gNAOH,WAACuO,aAAAA,WAAW,gBACP,UAAC9Q,SAAAA,UAAO,UAAc,oHAKjC,EACA,CACEonB,SAAU,uDACV1lB,KAAM,OACN2lB,OAAS,2oBAKTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,mQAMH,UAACA,IAAAA,UAAE,4RAOH,UAACA,IAAAA,UAAE,iHAMT,EACA,CACE6kB,SAAU,yCACV1lB,KAAM,OACN2lB,OAAS,qOAGTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,oLAKH,UAACA,IAAAA,UAAE,sDAGT,EACA,CACE6kB,SAAU,uCACV1lB,KAAM,OACN2lB,OAAS,+aAGTtP,QACE,iCACE,WAACxV,IAAAA,WAAE,OACG,UAACvC,SAAAA,UAAO,mBAAuB,QAAK,UAACA,SAAAA,UAAO,eAAoB,IAAI,+LAK1E,WAACuC,IAAAA,WAAE,0GAEgC,IACjC,UAACoT,IAAAA,CAAE1U,KAAM,GAAmC,OAAhC/B,sCAA+B,CAAC,4BAAkB,mBAEzD,IAAI,8FAMjB,EACA,CACEkoB,SAAU,iCACV1lB,KAAM,aACN2lB,OAAS,sUACTtP,QACE,+BACE,UAACxV,IAAAA,UAAE,yUAST,EACA,CACE6kB,SAAU,0DACV1lB,KAAM,aACN2lB,OAAS,shBAMTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,sFAIH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,kBAAsB,2EAGhC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,kCAAsC,oHAIhD,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,0BAA8B,sFAGxC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,qBAAyB,iHAM3C,EACA,CACEonB,SAAU,wDACV1lB,KAAM,aACN2lB,OAAS,mnCA0BTtP,QACE,iCACE,WAACxV,IAAAA,WAAE,kRAIkE,IACnE,UAACvC,SAAAA,UAAO,wBAA4B,8EAGtC,UAACuC,IAAAA,UAAE,qCACH,UAACA,IAAAA,UACC,UAACvC,SAAAA,UAAO,sFAKV,UAACuC,IAAAA,UAAE,mCACH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,4BAAgC,gBAE1C,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,kBAAsB,aAGlC,UAACuC,IAAAA,UAAE,uBACH,UAAC+kB,MAAAA,UACC,UAACC,OAAAA,UAAK,oEAER,UAAChlB,IAAAA,UAAE,iBACH,UAAC+kB,MAAAA,UACC,UAACC,OAAAA,UAAK,kDAER,UAACD,MAAAA,UACC,UAACC,OAAAA,UAAK,wCAER,UAACD,MAAAA,UACC,UAACC,OAAAA,UAAK,gCAER,UAACD,MAAAA,UACC,UAACC,OAAAA,UAAK,iCAER,WAAChlB,IAAAA,WAAE,iCAC6B,UAACvC,SAAAA,UAAO,wBAA4B,2BAGpE,UAACsnB,MAAAA,UACC,UAACC,OAAAA,UAAK,+BAER,UAAChlB,IAAAA,UAAE,mEACH,WAACuO,aAAAA,WACC,UAAC9Q,SAAAA,UAAO,UAAc,yKAM9B,EACA,CACEonB,SAAU,kDACV1lB,KAAM,aACN2lB,OAAS,w9CAqBTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,gPAMH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,gBAAoB,0FAG9B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,YAAgB,gEAG1B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,kBAAsB,8EAGhC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,UAAc,4EAGxB,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,UAAc,wGAGxB,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,WAAe,0DAGzB,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,iBAAqB,qEAG/B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,oBAAwB,4EAGlC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,iBAAqB,mEAG/B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,sBAA0B,kDAGpC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,sBAA0B,+EAItC,WAACuC,IAAAA,WACC,UAACvC,SAAAA,UAAO,wBAA4B,+CACxB,UAACwnB,KAAAA,UAAG,eAAe,oEAGjC,WAACrlB,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,iBAAqB,cAE/B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,gBAAoB,yBAE9B,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,YAAgB,+BAG5B,UAACuC,IAAAA,UAAE,+IAMT,EACA,CACE6kB,SACE,sFACF1lB,KAAM,aACN2lB,OAAS,ybACTtP,QACE,+BACE,UAACxV,IAAAA,UAAE,4bAWT,EACA,CACE6kB,SAAU,oDACV1lB,KAAM,aACN2lB,OAAS,unBAQTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,6EAIH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,oBAAwB,iGAGlC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,sBAA0B,4FAGpC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,uBAA2B,4FAGrC,WAACoC,KAAAA,WACC,UAACpC,SAAAA,UAAO,sBAA0B,iGAItC,UAACuC,IAAAA,UAAE,mIAMT,EACA,CACE6kB,SAAU,gCACV1lB,KAAM,eACN2lB,OAAS,+LACTtP,QACE,+BACE,UAACxV,IAAAA,UAAE,kMAOT,EACA,CACE6kB,SAAU,yCACV1lB,KAAM,eACN2lB,OAAS,0rBAkBTtP,QACE,iCACE,UAACxV,IAAAA,UAAE,sEACH,WAACJ,KAAAA,WACC,WAACC,KAAAA,WACC,UAACpC,SAAAA,UAAO,cAAkB,wDAE1B,WAACmC,KAAAA,WACC,UAACC,KAAAA,UAAG,qCACJ,UAACA,KAAAA,UAAG,4BACJ,UAACA,KAAAA,UAAG,iCAGR,WAACA,KAAAA,WACC,UAACpC,SAAAA,UAAO,kBAAsB,iIAG9B,WAACmC,KAAAA,WACC,UAACC,KAAAA,UAAG,mBACJ,UAACA,KAAAA,UAAG,iBACJ,UAACA,KAAAA,UAAG,wBACJ,UAACA,KAAAA,UAAG,8BACJ,UAACA,KAAAA,UAAG,0BAGR,WAACA,KAAAA,WACC,UAACpC,SAAAA,UAAO,oBAAwB,kIAGhC,WAACmC,KAAAA,WACC,UAACC,KAAAA,UAAG,yBACJ,UAACA,KAAAA,UAAG,wBACJ,UAACA,KAAAA,UAAG,8CAMhB,EACA,CACEglB,SACE,sEACF1lB,KAAM,eACN2lB,OAAS,6MACTtP,QACE,+BACE,UAACxV,IAAAA,UAAE,gNAOT,EACA,CACE6kB,SAAU,kCACV1lB,KAAM,eACN2lB,OAAS,qKACTtP,QACE,+BACE,WAACxV,IAAAA,WAAE,2FAE8B,IAC/B,UAACoT,IAAAA,CAAE1U,KAAK,0CAAiC,uBAAsB,8DAKvE,EACA,CACEmmB,SAAU,mCACV1lB,KAAM,UACN2lB,OAAS,8MACTtP,QACE,+BACE,UAACxV,IAAAA,UAAE,iNAOT,EACA,CACE6kB,SAAU,mCACV1lB,KAAM,UACN2lB,OAAS,uKACTtP,QACE,+BACE,WAACxV,IAAAA,WAAE,yEACsE,IACvE,UAACoT,IAAAA,CACC1U,KAAK,mDACLyF,OAAO,kBACR,0BAEG,+EAMZ,EACA,CACE0gB,SAAU,wCACV1lB,KAAM,UACN2lB,OAAS,+LACTtP,QACE,+BACE,UAACxV,IAAAA,UAAE,kMAOT,EACA,CACE6kB,SAAU,sCACV1lB,KAAM,UACN2lB,OAAS,sNAGTtP,QACE,iCACE,WAACxV,IAAAA,WAAE,qEACkE,IACnE,UAACoT,IAAAA,CAAE1U,KAAK,0CAAiC,4BAA4B,IAAI,uBACpD,IACrB,UAAC0U,IAAAA,CAAE1U,KAAK,8BAA8ByF,OAAO,kBAAS,qBAElD,OAGN,WAACnE,IAAAA,WAAE,mBACe,UAACoT,IAAAA,CAAE1U,KAAK,oBAAW,iBAAgB,0DAK3D,EACA,CACEmmB,SAAU,qDACV1lB,KAAM,UACN2lB,OAAS,8QACTtP,QACE,+BACE,WAACxV,IAAAA,WAAE,yIAEsE,IACvE,UAACoT,IAAAA,CAAE1U,KAAK,0CAAiC,4BAA2B,oHAM5E,EACA,CACEmmB,SAAU,+CACV1lB,KAAM,UACN2lB,OAAS,2QACTtP,QACE,+BACE,WAACxV,IAAAA,WAAE,mDACgD,IACjD,UAACvC,SAAAA,UAAO,iBAAqB,yBAAuB,IACpD,UAACA,SAAAA,UAAO,WAAe,qLAM/B,EACD,CAAC,GCp8BgC,OAAC,UACjConB,CAAQ,QACRK,CAAM,UACNhjB,CAAQ,UACR+N,CAAQ,CACT,GACO,CAACkV,EAAiBC,EAAmB,CAAGhpB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,EAAC,GACjDuT,EAAa9F,CAAAA,EAAAA,GAAAA,CAAAA,CAAaA,GAIhC,MACE,WAAC3E,UAAAA,CAAQ7J,UAAU,gHACjB,WAACoH,EAAAA,CAAKA,CAAAA,CACJpH,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CACX,6NACA,CACE,kEACEypB,CACJ,GAEFxf,KAAK,SACLhD,UAAU,aACVgM,gBAAewW,EACfvW,gBAAe,eAAwB,OAATkW,GAC9BtnB,MAAM,SACNgC,QAAS,KACP6lB,GAAmB,SACnBnV,GAAAA,GACF,YAEA,UAAC8G,KAAAA,CACC1b,UAAU,8EACVD,GAAI,eAAwB,OAATypB,YAElBA,IAEH,UAACvf,EAAAA,CAAMA,CAAC/J,GAAG,EACTF,UAAU,2EACVmV,QAAS,CAAE6U,OAAQH,EAAS,GAAK,CAAE,EACnCxU,WAAY,CAAEhH,SAAU,EAAI,EAC5BpK,aAAY4lB,EAAS,kBAAoB,yBAEzC,UAACplB,EAAAA,EAAIA,CAAAA,CAACC,KAAK,OAAO1E,UAAU,0BAIhC,UAACiK,EAAAA,CAAMA,CAAC/J,GAAG,EACT+U,QAAS,CAAEgV,UAAW,EAAG9f,QAAS,CAAE,EACpCE,KAAK,SACLzI,kBAAiB,eAAwB,OAAT4nB,GAChCzpB,GAAI,eAAwB,OAATypB,GACnBrU,QAAS,CACP8U,UAAWJ,EA5Cc,OA4CLI,KA5CV3V,EAA2B,IAAM,KA4CX,EAChCnK,QAAS0f,EAAS,EAAI,CACxB,EACAxU,WAAY,CAAEhH,SAAU,GAAKiP,KAAM,CAAC,GAAK,EAAG,GAAK,EAAE,EACnDtd,UAAWI,CAAAA,EAAAA,EAAAA,EAAAA,CAAEA,CAAC,aAAc,CAC1B,gBAAiB0pB,GAAmBD,EACpC,kBAAmB,CAACC,GAAmB,CAACD,CAC1C,GACAK,oBAAqB,KACfL,GACFE,GAAmB,EADT,EAId7f,MAAO,CAAEigB,WAAY,qBAAsB,WAE3C,UAACjqB,MAAAA,CAAIF,UAAU,yFACZ6G,QAKX,EAQMujB,GAA8B,OAAC,OACnC7S,CAAK,gBACL8S,CAAc,mBACdC,CAAiB,CAClB,GACC,MACE,UAACpqB,MAAAA,CAAIF,UAAU,gCACZuX,EAAMnL,GAAG,CAAEyM,GACV,UAAC0R,GAAAA,CAECV,OAAQQ,IAAmBxR,EAAK2Q,QAAQ,CACxC5U,SAAU,IACR0V,EACED,IAAmBxR,EAAK2Q,QAAQ,CAAG,GAAK3Q,EAAK2Q,QAAQ,EAGzDA,SAAU3Q,EAAK2Q,QAAQ,UAEtB3Q,EAAKsB,OAAO,EATR,YAA0B,OAAdtB,EAAK2Q,QAAQ,KAcxC,EAEagB,GAAM,KACjB,GAAM,CAACH,EAAgBC,EAAkB,CAAGvpB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAClD,uBAEI,CAACoX,EAAWC,EAAa,CAAGrX,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAC,uBAE3C,MACE,UAACY,UAAAA,CACC3B,UAAU,gHACV4B,kBAAgB,cAChB7B,GAAG,eAEH,UAAC6G,EAASA,OAAAA,GACR,WAAC1G,MAAAA,CAAIF,UAAU,qDACb,WAAC6B,SAAAA,CAAO7B,UAAU,6CAChB,UAAC8B,EAAAA,EAAGA,CAAAA,CAACkC,KAAK,KAAKjC,QAAQ,mBAAU,gBAGjC,WAACE,EAAAA,EAAKA,CAAAA,CAACD,GAAG,KAAKU,QAAQ,KAAK3C,GAAG,wBAC7B,UAACgI,OAAAA,CAAK/H,UAAU,mBAAU,+BAAiC,WACnD,UAACoC,SAAAA,CAAOpC,UAAU,wBAAe,kBAE3C,UAACiC,EAAAA,EAAKA,CAAAA,CACJD,GAAG,KACH8B,KAAK,WACL3B,MAAM,WACNnC,UAAU,8DACX,wFAKH,WAACoH,EAAAA,CAAKA,CAAAA,CAACpH,UAAU,gBAAgBsH,QAAQ,gBACvC,UAACpH,MAAAA,CAAIF,UAAU,uCACb,UAACsX,GAAGA,CACFjT,MAAO8T,EACPvD,SAAUwD,EACVZ,MAAQ,UACRG,WAAW,gDACXD,aAAa,qFACbH,MAAO,CACL,CACE/T,KAAM,sBACN1D,MAAO,sBACP4E,KAAM,OACNyV,QACE,UAACiQ,GAAAA,CACCC,eAAgBA,EAChBC,kBAAmBA,EACnB/S,MAAOkT,GAASvZ,KAADuZ,CAAO,CAAC,GAAkB,YAAXpe,EAAEvI,IAAI,GAG1C,EACA,CACEN,KAAM,uBACN1D,MAAO,uBACP4E,KAAM,YACNyV,QACE,UAACiQ,GAAAA,CACCC,eAAgBA,EAChBC,kBAAmBA,EACnB/S,MAAOkT,GAASvZ,KAADuZ,CAAO,CAAC,GAAOpe,WAAEvI,IAAI,GAG1C,EACA,CACEN,KAAM,oBACN1D,MAAO,gCACP4E,KAAM,WACNyV,QACE,UAACiQ,GAAAA,CACCC,eAAgBA,EAChBC,kBAAmBA,EACnB/S,MAAOkT,GAASvZ,KAADuZ,CAAO,CAAC,GAAkB,eAAXpe,EAAEvI,IAAI,GAG1C,EACA,CACEN,KAAM,wBACN1D,MAAO,0BACP4E,KAAM,aACNyV,QACE,UAACiQ,GAAAA,CACCC,eAAgBA,EAChBC,kBAAmBA,EACnB/S,MAAOkT,GAASvZ,KAADuZ,CAAO,CACpB,GAAkB,iBAAXpe,EAAEvI,IAAI,GAIrB,EACA,CACEN,KAAM,oBACN1D,MAAO,sBACP4E,KAAM,OACNyV,QACE,UAACiQ,GAAAA,CACCC,eAAgBA,EAChBC,kBAAmBA,EACnB/S,MAAOkT,GAASvZ,KAADuZ,CAAO,CAAC,GAAkB,YAAXpe,EAAEvI,IAAI,GAG1C,EACD,KAGL,UAACC,EAAAA,EAAMA,CAAAA,CACL5B,MAAM,UACN6B,KAAK,SACLxB,WAAS,UACTxC,UAAU,YACVgC,GAAG,OACHqB,KAAK,oBACN,wBAQb,EAAE,GC7OF,KAoBeqnB,IApBNA,EACP,MACE,iCACE,UAACvpB,EAAIA,CAAAA,CAAAA,EACL,UAACsG,EAAUA,CAAAA,GACX,IADWA,CACX,KAAC6G,GAAYA,CAAAA,GACb,KADaA,GACb,EAAClE,EAAQA,CAAAA,GACT,EADSA,CACT,OAACqD,GAAgBA,CAAAA,GACjB,SADiBA,CAChBnC,GAAaA,CAAAA,GACd,MADcA,EACd,EAACmI,GAAYA,CAAAA,GACb,KADaA,GACb,EAACY,GAAgBA,CAAAA,GACjB,SADiBA,CAChBsW,GAAcA,CAAAA,GACf,OADeA,CACf,EAACnE,GAAOA,CAAAA,GACR,UAACgE,GAAGA,CAAAA,GACJ,UAACjW,GAAYA,CAAAA,GACb,UAACqW,GAAOA,CAAAA,GAAAA,EAGd,+DC3BO,SAASpc,IACd,GAAM,CAAC8F,EAAYuW,EAAc,CAAG9pB,CAAAA,EAAAA,EAAAA,QAAAA,CAAQA,CAAa,UAuBzD,MArBAC,CAAAA,EAAAA,EAAAA,SAAAA,CAASA,CAAC,KAGR,IAAM8pB,EAAe,KACnB,IAAMplB,EAAQ1C,OAAO2M,UAAU,CAC3BjK,GAXS,IAYXmlB,EADWE,UAEFrlB,EAFc,CAVZ,KAaXmlB,CADkBG,CACJ,UAEdH,CAH8B,CAGhB,UAElB,EAMA,OAJAC,IAEA9nB,OAAOioB,gBAAgB,CAAC,SAAUH,GAE3B,IAAM9nB,OAAOkoB,mBAAmB,CAAC,SAAUJ,EACpD,EAAG,EAAE,EAEExW,CACT","sources":["webpack://_N_E/?763e","webpack://_N_E/./src/components/Hero/app-screenshot.png","webpack://_N_E/./src/components/Hero/app-screenshot@dark.png","webpack://_N_E/./src/components/Hero/decor.png","webpack://_N_E/./src/components/Hero/bubbles/1.png","webpack://_N_E/./src/components/Hero/bubbles/1@dark.png","webpack://_N_E/./src/components/Hero/bubbles/2.png","webpack://_N_E/./src/components/Hero/bubbles/2@dark.png","webpack://_N_E/./src/components/Hero/bubbles/3.png","webpack://_N_E/./src/components/Hero/bubbles/3@dark.png","webpack://_N_E/./src/components/Hero/bubbles/4.png","webpack://_N_E/./src/components/Hero/bubbles/4@dark.png","webpack://_N_E/./src/components/forms/Input/Input.tsx","webpack://_N_E/./src/components/Image/Image.tsx","webpack://_N_E/./src/components/Hero/Hero.tsx","webpack://_N_E/./src/components/index.ts","webpack://_N_E/./src/components/ui/dot-pattern.tsx","webpack://_N_E/./src/components/Container/Container.tsx","webpack://_N_E/./src/components/HowItWorks/HowItWorks.tsx","webpack://_N_E/./src/components/Features/feature-1.png","webpack://_N_E/./src/components/Features/feature-1@dark.png","webpack://_N_E/./src/components/Features/feature-2.png","webpack://_N_E/./src/components/Features/feature-2@dark.png","webpack://_N_E/./src/components/Features/feature-3.png","webpack://_N_E/./src/components/Features/feature-3@dark.png","webpack://_N_E/./src/components/Features/Features.tsx","webpack://_N_E/./src/components/MatchAnalysis/fire.png","webpack://_N_E/./src/components/MatchAnalysis/target.png","webpack://_N_E/./src/components/MatchAnalysis/heart.png","webpack://_N_E/./src/components/MatchAnalysis/bulb.png","webpack://_N_E/./src/components/MatchAnalysis/gym.png","webpack://_N_E/./src/components/MatchAnalysis/chess.png","webpack://_N_E/./src/components/MatchAnalysis/MatchAnalysis.tsx","webpack://_N_E/./src/components/SupportedLeagues/SupportedLeagues.tsx","webpack://_N_E/./src/components/TrustBooster/dollar.png","webpack://_N_E/./src/components/TrustBooster/boy.png","webpack://_N_E/./src/components/TrustBooster/trophy.png","webpack://_N_E/./src/components/TrustBooster/lab.png","webpack://_N_E/./src/components/TrustBooster/TrustBooster.tsx","webpack://_N_E/./src/components/Testimonials/facebook.webp","webpack://_N_E/./src/components/Testimonials/google.png","webpack://_N_E/./src/components/Testimonials/telegram.png","webpack://_N_E/./src/components/Testimonials/x-logo.png","webpack://_N_E/./src/components/Testimonials/instagram.png","webpack://_N_E/./src/assets/reviews/borsik_g.jpg","webpack://_N_E/./src/assets/reviews/boncz_a_1.jpeg","webpack://_N_E/./src/assets/reviews/boncz_a_2.jpeg","webpack://_N_E/./src/assets/reviews/boncz_a_3.jpeg","webpack://_N_E/./src/components/LightBox/LightBox.tsx","webpack://_N_E/./src/components/Testimonials/Testimonials.tsx","webpack://_N_E/./src/components/CommunityChannel/telegram.png","webpack://_N_E/./src/components/CommunityChannel/CommunityChannel.tsx","webpack://_N_E/./src/components/Pricing/Pricing.tsx","webpack://_N_E/./src/api/index.ts","webpack://_N_E/./src/components/ui/grid-pattern.tsx","webpack://_N_E/./src/components/Tab/Tab.tsx","webpack://_N_E/./src/components/IconCard/IconCard.tsx","webpack://_N_E/./src/components/ReadmeContent/ReadmeContent.tsx","webpack://_N_E/./src/components/FixtureCard/context.tsx","webpack://_N_E/./src/components/FixtureCard/Tabs/MatchPreview.tsx","webpack://_N_E/./src/components/FixtureCard/Tabs/CorrectScore.tsx","webpack://_N_E/./src/components/ProgressBar/ProgressBar.tsx","webpack://_N_E/./src/components/FixtureCard/Tabs/TeamComparison.tsx","webpack://_N_E/./src/components/FixtureCard/Tabs/DoDont.tsx","webpack://_N_E/./src/components/Tooltip/Tooltip.tsx","webpack://_N_E/./src/components/TipsTable/TipsTable.tsx","webpack://_N_E/./src/components/FixtureCard/FixtureCard.tsx","webpack://_N_E/./src/components/RecentFixtures/RecentFixtures.tsx","webpack://_N_E/./src/components/RecentFixtures/index.tsx","webpack://_N_E/./src/components/AboutUs/rocket.png","webpack://_N_E/./src/components/AboutUs/lab.png","webpack://_N_E/./src/components/AboutUs/chat-bubble.png","webpack://_N_E/./src/components/AboutUs/AboutUs.tsx","webpack://_N_E/./src/components/Contact/founder.jpg","webpack://_N_E/./src/components/forms/TextArea/TextArea.tsx","webpack://_N_E/./src/components/Contact/GetInTouchHeader.tsx","webpack://_N_E/./src/components/Contact/ContactForm.tsx","webpack://_N_E/./src/components/Contact/Contact.tsx","webpack://_N_E/./src/components/FAQ/faq-items.tsx","webpack://_N_E/./src/components/FAQ/FAQ.tsx","webpack://_N_E/./src/app/page.tsx","webpack://_N_E/./src/hooks/useDeviceType.ts"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/codebuild/output/src2846124456/src/landing/src/app/page.tsx\");\n","export default {\"src\":\"/_next/static/media/app-screenshot.57ba60af.png\",\"height\":1356,\"width\":2160,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAMAAABPT11nAAAAD1BMVEX+/v76+/v39/Xv7+3Z7ujwJWSNAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAJElEQVR4nB3KwQ0AIACEMODcf2aj36YkoKFbK3DS6bvbC2B5AQT5ADZVvvckAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":5};","export default {\"src\":\"/_next/static/media/app-screenshot@dark.19d97a99.png\",\"height\":1356,\"width\":2160,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAMAAABPT11nAAAAFVBMVEUlJiVCQUEzMzFCSUcVFRVRU00bGhrd5OAmAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAIElEQVR4nGNggAE2BmZGRkZmJgYWJAYzIysriMEEAgwABRkARoFPUQUAAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":5};","export default {\"src\":\"/_next/static/media/decor.b2cf9e2c.png\",\"height\":108,\"width\":106,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAJ1BMVEVMaXEFlWkFnm8AkGAEmWsElWgElmgFlWkEmWoEmmsFk2kElmgFnG0Xglg8AAAADXRSTlMAWf4KvnUdPYaYL+TrIn8pTAAAAAlwSFlzAAALEwAACxMBAJqcGAAAADVJREFUeJwVxscRwDAQA7ElLym4/3o9wgtQi+AM8S0Yb+RG3pCJvACdcvH0FTENhPJaL5nV/CCmANhNJvt0AAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/1.a49ae25a.png\",\"height\":1065,\"width\":571,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAICAMAAADp7a43AAAACVBMVEVNU166vsfNzti/x56zAAAAA3RSTlMBHcnmYLjhAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAEUlEQVR4nGNgYmRgYABh/AAAAL4ABfWLghgAAAAASUVORK5CYII=\",\"blurWidth\":4,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/1@dark.caf5d60a.png\",\"height\":1065,\"width\":571,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAICAMAAADp7a43AAAACVBMVEWqqqpWVlZKSkpIzxA+AAAAA3RSTlMBHcnmYLjhAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAEUlEQVR4nGNgYmRgYABh/AAAAL4ABfWLghgAAAAASUVORK5CYII=\",\"blurWidth\":4,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/2.29220e14.png\",\"height\":477,\"width\":162,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAMAAAALMbVOAAAAG1BMVEVlZWU7Slnqxsbe5+pttsjdysrsycnv4+P/paDz5NOjAAAACHRSTlMBDPyMHHrf8SUYokEAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAYSURBVHicY2DjYGdgZWJmYGRhYGBkwMAABEEAKsOb8uAAAAAASUVORK5CYII=\",\"blurWidth\":3,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/2@dark.33e5850a.png\",\"height\":477,\"width\":162,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAMAAAALMbVOAAAAFVBMVEWJlZeJiYlVODcxOTlWPz9sPTysODSb9e8EAAAABnRSTlMOAfaKfOAF40z+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGElEQVR4nGNgZWNiYGFiZmBgYGRgYMTAAAMIACLo9ew4AAAAAElFTkSuQmCC\",\"blurWidth\":3,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/3.453ba4b4.png\",\"height\":334,\"width\":469,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAMAAADJ2y/JAAAAGFBMVEVMaXE4O0yq0uzdx7j/qn/bysWPtd6Jt+cdFnw5AAAACHRSTlMACdgtDDry/WPvsOUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAiSURBVHicY2AAARYmJhDFyMjMxg6iGBgYmFkhNFgcSsMZAAXPACmR2cMlAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":6};","export default {\"src\":\"/_next/static/media/3@dark.0082244d.png\",\"height\":334,\"width\":469,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAMAAADJ2y/JAAAAG1BMVEVMaXGQeniqqqrE2dlgRjAlTXosWHFKOSsvUmoeAyR9AAAACXRSTlMACgwGLfjhOs54i1CkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAKElEQVR4nC2JQQ4AMAiD6NRt/3+xsZFLaYBB/3oiq0AHyIfkCPNNrDQHrwA3S0kPHQAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":6};","export default {\"src\":\"/_next/static/media/4.ef955929.png\",\"height\":611,\"width\":201,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAMAAAALMbVOAAAACVBMVEVveXkyQk+mm7N/iM0nAAAAA3RSTlMCCq9FdEZDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAEklEQVR4nGNgYmKAAkZMzMgAAADdAAspLy0QAAAAAElFTkSuQmCC\",\"blurWidth\":3,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/4@dark.e485cd8c.png\",\"height\":611,\"width\":201,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAMAAAALMbVOAAAABlBMVEWjo6NNTU1nTpvUAAAAAnRSTlMFr02NhwQAAAAJcEhZcwAACxMAAAsTAQCanBgAAAANSURBVHicY2BkZMAHAABdAAOqX+dEAAAAAElFTkSuQmCC\",\"blurWidth\":3,\"blurHeight\":8};","import React, { forwardRef } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\ntype InputProps = {\n label: string;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const Input: React.FC<InputProps> = forwardRef<\n HTMLInputElement,\n InputProps\n>(({ label, id, className, ...rest }, ref) => {\n return (\n <div className=\"relative w-full\">\n <input\n ref={ref}\n id={id}\n className={cn(\n \"peer block w-full rounded-lg border-gray-200 bg-gray-100 p-4 text-sm placeholder:text-transparent autofill:pb-2 autofill:pt-6 focus:border-primary focus:pb-2 focus:pt-6 focus:ring-primary disabled:pointer-events-none disabled:opacity-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-200 dark:focus:ring-neutral-600 [&:not(:placeholder-shown)]:pb-2 [&:not(:placeholder-shown)]:pt-6\",\n className,\n )}\n placeholder=\"********\"\n {...rest}\n />\n\n <label\n htmlFor={id}\n className=\"pointer-events-none absolute start-0 top-0 h-full origin-[0_0] truncate border border-transparent p-4 text-sm transition duration-100 ease-in-out peer-focus:-translate-y-1.5 peer-focus:translate-x-0.5 peer-focus:scale-90 peer-focus:text-gray-400 peer-disabled:pointer-events-none peer-disabled:opacity-50 peer-[:not(:placeholder-shown)]:-translate-y-1.5 peer-[:not(:placeholder-shown)]:translate-x-0.5 peer-[:not(:placeholder-shown)]:scale-90 peer-[:not(:placeholder-shown)]:text-gray-400 dark:text-neutral-400 dark:peer-focus:text-gray-500 dark:peer-[:not(:placeholder-shown)]:text-gray-400\"\n >\n {label}\n </label>\n </div>\n );\n});\n\nInput.displayName = \"Input\";\n","\"use client\";\n\nimport NextImage, { ImageProps as NextImageProps } from \"next/image\";\nimport { FC, useEffect, useState } from \"react\";\nimport { useTheme } from \"next-themes\";\n\ntype ImageProps = NextImageProps & {\n darkSrc?: NextImageProps[\"src\"];\n};\n\nexport const Image: FC<ImageProps> = ({ darkSrc, src, ...rest }) => {\n const { resolvedTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n if (!mounted) return null;\n\n const resolvedSrc = resolvedTheme === \"dark\" && darkSrc ? darkSrc : src;\n\n return <NextImage src={resolvedSrc} {...rest} />;\n};\n","import { Button, Icon, Tag, Title } from \"@ui/elements\";\nimport appScreenshot from \"./app-screenshot.png\";\n\nimport appScreenshotDark from \"./app-screenshot@dark.png\";\nimport decor from \"./decor.png\";\nimport bubbleOne from \"./bubbles/1.png\";\nimport bubbleOneDark from \"./bubbles/1@dark.png\";\nimport bubbleTwo from \"./bubbles/2.png\";\nimport bubbleTwoDark from \"./bubbles/2@dark.png\";\nimport bubbleThree from \"./bubbles/3.png\";\nimport bubbleThreeDark from \"./bubbles/3@dark.png\";\nimport bubbleFour from \"./bubbles/4.png\";\nimport bubbleFourDark from \"./bubbles/4@dark.png\";\nimport { sendGTMEvent } from \"@next/third-parties/google\";\n\nimport { Input } from \"@components/forms/Input/Input\";\nimport { Image } from \"@components/Image/Image\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport React from \"react\";\nimport { getUtmParams, useUtmLink } from \"@utils\";\n\ntype GetStartedFormValues = {\n email?: string;\n};\n\nexport const Hero = () => {\n const dashboardLink = useUtmLink(process.env.NEXT_PUBLIC_APP_URL || \"\");\n const form = useForm<GetStartedFormValues>({\n defaultValues: {\n email: \"\",\n },\n });\n\n const onSubmit = (values: GetStartedFormValues) => {\n if (values.email) {\n const url = new URL(dashboardLink, window.location.origin);\n url.searchParams.set(\"email\", values.email);\n window.location.href = url.toString();\n return;\n }\n\n window.location.href = dashboardLink;\n };\n\n return (\n <section\n aria-labelledby=\"hero-heading\"\n className=\"bg-white px-3 dark:bg-neutral-900\"\n >\n <div className=\"container mx-auto\">\n <div className=\"flex flex-col items-center gap-xxl\">\n <header className=\"flex flex-col items-center gap-md\">\n <Tag variant=\"neutral\" as=\"p\">\n Powered by ChatGPT\n </Tag>\n <Title\n align=\"center\"\n as=\"h1\"\n id=\"hero-heading\"\n color=\"secondary\"\n className=\"relative max-w-4xl text-4xl leading-tight tracking-wide md:text-5xl lg:text-6xl dark:text-gray-200\"\n >\n <strong className=\"text-primary\">Win More</strong> with AI-Powered\n Football Tips\n <Image\n className=\"absolute -right-7 -top-7 hidden w-12 md:block\"\n src={decor}\n alt=\"\"\n aria-hidden=\"true\"\n data-aos=\"fade-down-left\"\n data-aos-delay=\"250\"\n />\n </Title>\n <Title\n as=\"h2\"\n styleAs=\"h3\"\n align=\"center\"\n className=\"max-w-4xl text-lg font-light leading-snug tracking-wide md:text-xl lg:text-2xl dark:text-gray-400\"\n color=\"tertiary\"\n >\n Leverage advanced AI analysis, betting strategies, and expert\n insights to outsmart the odds and boost your betting profits.\n </Title>\n </header>\n\n <div className=\"relative z-10 flex w-full flex-col gap-xxl\">\n <form\n className=\"mx-auto flex w-full max-w-md gap-md\"\n onSubmit={form.handleSubmit(onSubmit)}\n >\n <Controller\n name=\"email\"\n control={form.control}\n defaultValue=\"\"\n render={({ field }) => (\n <Input\n label=\"E-mail\"\n className=\"grow\"\n autoComplete=\"email\"\n id=\"hero-email\"\n type=\"email\"\n {...field}\n />\n )}\n />\n\n <Button\n color=\"primary\"\n size=\"medium\"\n className=\"py-3.5\"\n type=\"submit\"\n aria-label=\"Get started with free AI football tips\"\n onClick={() =>\n sendGTMEvent({\n event: \"cta_click\",\n value: \"hero_try_for_free\",\n ...getUtmParams(),\n })\n }\n >\n Try for Free\n </Button>\n </form>\n\n <ul\n className=\"flex w-full flex-wrap items-center justify-center gap-md gap-y-3\"\n aria-label=\"Key Highlights\"\n >\n <li className=\"flex items-center gap-xs bg-white py-0.5 dark:bg-neutral-900\">\n <Icon icon=\"SealCheck\" className=\"size-5 text-green-500\" />\n <p className=\"text-nowrap text-sm text-gray-500 dark:text-neutral-400\">\n Free Plan Available\n </p>\n </li>\n <li className=\"flex items-center gap-xs bg-white py-0.5 dark:bg-neutral-900\">\n <Icon icon=\"SealCheck\" className=\"size-5 text-green-500\" />\n <p className=\"text-nowrap text-sm text-gray-500 dark:text-neutral-400\">\n 200+ Active Users and Growing\n </p>\n </li>\n <li className=\"flex items-center gap-xs bg-white py-0.5 dark:bg-neutral-900\">\n <Icon icon=\"SealCheck\" className=\"size-5 text-green-500\" />\n <p className=\"text-nowrap text-sm text-gray-500 dark:text-neutral-400\">\n Secure & Trusted Payments\n </p>\n </li>\n </ul>\n </div>\n\n <div className=\"relative -mb-[30%] mt-16 aspect-[1400/879] w-full max-w-[90rem] md:mt-24 lg:-mb-96 lg:aspect-[1400/879]\">\n <Image\n src={bubbleOne}\n darkSrc={bubbleOneDark}\n className=\"absolute -top-[135px] w-[150px] md:bottom-[80%] md:left-[3%] md:top-auto md:w-[23%] lg:bottom-[75%]\"\n alt=\"\"\n aria-hidden=\"true\"\n data-aos=\"fade-up\"\n data-aos-delay=\"50\"\n />\n <Image\n src={bubbleTwo}\n darkSrc={bubbleTwoDark}\n className=\"absolute -top-[75px] left-[10px] w-[30px] md:bottom-[97%] md:left-[2%] md:top-auto md:w-[6%]\"\n alt=\"\"\n aria-hidden=\"true\"\n data-aos=\"fade-up\"\n />\n <Image\n src={bubbleThree}\n darkSrc={bubbleThreeDark}\n className=\"absolute -top-[75px] right-[55px] w-[110px] md:bottom-[95%] md:right-[16%] md:top-auto md:w-[18%]\"\n alt=\"\"\n aria-hidden=\"true\"\n data-aos=\"fade-up\"\n data-aos-delay=\"150\"\n />\n <Image\n src={bubbleFour}\n darkSrc={bubbleFourDark}\n className=\"absolute -top-[130px] right-[10px] w-[70px] md:bottom-[90%] md:right-[1%] md:top-auto md:w-[11%]\"\n alt=\"\"\n aria-hidden=\"true\"\n data-aos=\"fade-up\"\n />\n\n {/* Main App Screenshot Image */}\n <Image\n className=\"relative z-10 h-full w-full rounded-lg border border-gray-200 object-cover md:rounded-xl lg:rounded-2xl dark:border-neutral-700\"\n src={appScreenshot}\n darkSrc={appScreenshotDark}\n fill\n priority\n quality={100}\n placeholder=\"blur\"\n alt=\"Screenshot of the AI-driven dashboard, showcasing AI-driven betting predictions and results.\"\n />\n </div>\n </div>\n </div>\n </section>\n );\n};\n","export * from \"./AOSWrapper/AOSWrapper\";\nexport * from \"./Navigation/Navigation\";\nexport * from \"./GlowCapture/GlowCapture\";\n","import { useId } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\ninterface DotPatternProps {\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n cx?: number;\n cy?: number;\n cr?: number;\n className?: string;\n}\n\nexport function DotPattern({\n width = 16,\n height = 16,\n x = 0,\n y = 0,\n cx = 1,\n cy = 1,\n cr = 1,\n className,\n ...props\n}: DotPatternProps) {\n const id = useId();\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn(\n \"pointer-events-none absolute inset-0 h-full w-full fill-neutral-400/80\",\n className,\n )}\n {...props}\n >\n <defs>\n <pattern\n id={id}\n width={width}\n height={height}\n patternUnits=\"userSpaceOnUse\"\n patternContentUnits=\"userSpaceOnUse\"\n x={x}\n y={y}\n >\n <circle id=\"pattern-circle\" cx={cx} cy={cy} r={cr} />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n </svg>\n );\n}\n\nexport default DotPattern;\n","import React, { FC, PropsWithChildren } from \"react\";\n\nimport classNames from \"classnames\";\n\ntype ContainerProps = PropsWithChildren<{\n isFluid?: boolean;\n}>;\n\nexport const Container: FC<ContainerProps> = ({ children, isFluid }) => {\n return (\n <div className={classNames([\"container mx-auto\", { \"is-fluid\": isFluid }])}>\n {children}\n </div>\n );\n};\n","import { Stack } from \"@ui/layout\";\nimport { Button, Tag, Title } from \"@ui/elements\";\nimport { Icon, Icons } from \"@ui/elements/Icon/Icon\";\nimport React, { FC, HTMLAttributes, PropsWithChildren } from \"react\";\nimport { GlowCapture } from \"@/components\";\nimport { cn } from \"@/lib/utils\";\nimport DotPattern from \"@components/ui/dot-pattern\";\nimport { Container } from \"@components/Container/Container\";\n\ntype StepBoxProps = PropsWithChildren<{\n icon?: Icons;\n iconLabel?: string;\n title: string;\n step: string;\n last?: boolean;\n}> &\n HTMLAttributes<HTMLLIElement>;\n\nconst StepBox: FC<StepBoxProps> = ({\n icon,\n title,\n children,\n step,\n last,\n className,\n iconLabel,\n ...rest\n}) => {\n return (\n <li\n className={cn(\"relative flex flex-col gap-md text-white\", className)}\n {...rest}\n >\n <Stack\n direction=\"horizontal\"\n align=\"start\"\n className=\"w-full justify-between\"\n >\n {icon && (\n <Icon\n icon={icon}\n aria-label={iconLabel}\n className=\"size-12 glow:text-glow md:size-16\"\n />\n )}\n <Tag\n size=\"md\"\n as=\"p\"\n className=\"border-1 border-white/10 bg-white/10 glow:border-glow glow:bg-white/50 glow:ring-1 glow:ring-glow\"\n >\n {step}\n </Tag>\n </Stack>\n <Stack spacing=\"sm\">\n <Title as=\"h3\" styleAs=\"h4\" className=\"tracking-wider text-white\">\n {title}\n </Title>\n <p className=\"text-sm leading-relaxed text-gray-200 glow:text-glow/[.15] md:text-base\">\n {children}\n </p>\n </Stack>\n {!last && (\n <Button\n isRounded\n className=\"pointer-events-none absolute -right-[4.5rem] top-1/2 hidden size-14 -translate-y-1/2 bg-white/10 text-white glow:bg-primary/10 lg:flex\"\n aria-hidden=\"true\"\n tabIndex={-1}\n >\n <Icon icon=\"ArrowRight\" className=\"size-6\" aria-hidden=\"true\" />\n </Button>\n )}\n </li>\n );\n};\n\nexport const HowItWorks = () => {\n return (\n <section\n className=\"relative overflow-hidden bg-primary-900 px-6 pb-24 pt-[35%] sm:pt-52 md:pt-72 lg:pt-114 dark:bg-primary-900/60\"\n id=\"how-it-works\"\n aria-labelledby=\"how-it-works-heading\"\n >\n <div className=\"absolute left-0 right-0 top-0 mx-auto h-full w-full max-w-2xl\">\n <DotPattern\n width={16}\n height={16}\n cr={2}\n cy={2}\n cx={2}\n className={cn(\n \"[mask-image:radial-gradient(300px_circle_at_center,white,transparent)]\",\n \"fill-gray-400/40\",\n )}\n />\n </div>\n <Container>\n <Stack className=\"relative\" align=\"center\" spacing=\"xxl\">\n <header className=\"flex flex-col items-center gap-md\">\n <Tag size=\"md\" className=\"bg-gray-200 dark:bg-neutral-800\">\n Learn Our Process\n </Tag>\n <Title\n as=\"h2\"\n styleAs=\"h1\"\n id=\"how-it-works-heading\"\n className=\"w-full text-white dark:text-gray-100\"\n align=\"center\"\n >\n How it Works?\n </Title>\n <Title\n as=\"h3\"\n type=\"subtitle\"\n color=\"light\"\n className=\"max-w-4xl text-center text-lg font-light leading-relaxed tracking-wide md:text-2xl dark:text-neutral-300\"\n >\n We use an effective process to deliver accurate football betting\n tips and match analysis. By combining historical data, with\n contextual factors, we help you make more profitable betting\n decisions.\n </Title>\n </header>\n <GlowCapture glowColor=\"white\">\n <ol className=\"glow grid grid-cols-1 gap-10 rounded-lg border-4 border-white/5 bg-white/10 p-7 glow:border-glow glow:bg-glow/[.15] glow:ring-1 glow:ring-glow md:grid-cols-2 md:p-10 lg:grid-cols-3 lg:gap-24\">\n <StepBox\n step=\"Step 1\"\n title=\"Statistical Prediction\"\n icon=\"Database\"\n iconLabel=\"Database icon\"\n data-aos=\"fade-in\"\n >\n Our system processes over <strong>10 years</strong> of football\n data to uncover betting patterns and trends, focusing on metrics\n like goals, possession, and shots. This data-driven foundation\n enhances the accuracy of our football betting predictions.\n </StepBox>\n <StepBox\n step=\"Step 2\"\n title=\"Recent Form Analysis\"\n icon=\"Fire\"\n iconLabel=\"Fire icon\"\n data-aos=\"fade-in\"\n data-aos-delay=\"100\"\n >\n We assess current team and player form, analyzing recent matches\n to determine momentum and performance trends. This ensures our\n predictions reflect the latest dynamics in the football\n landscape.\n </StepBox>\n <StepBox\n step=\"Step 3\"\n title=\"Contextual Insights\"\n icon=\"Newspaper\"\n iconLabel=\"Newspaper icon\"\n last\n data-aos=\"fade-in\"\n data-aos-delay=\"200\"\n className=\"md:col-span-2 lg:col-span-1\"\n >\n We refine our predictions by considering non-statistical\n factors, such as injuries, suspensions, and team morale. By\n blending quantitative and qualitative insights, we provide\n highly accurate betting tips.\n </StepBox>\n </ol>\n </GlowCapture>\n </Stack>\n </Container>\n </section>\n );\n};\n","export default {\"src\":\"/_next/static/media/feature-1.2b2fe189.png\",\"height\":834,\"width\":834,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAD1BMVEX+/v74+fnx8/LP6uLj7+tMsUC9AAAACXBIWXMAABCcAAAQnAEmzTo0AAAAKElEQVR4nE3JsREAIAyAQCDuP7OnjVLytBKUNTMQL6nOUBN/yrRLim4JvwA8Q4f+SQAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature-1@dark.a85bc3e1.png\",\"height\":834,\"width\":834,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAD1BMVEUlJSUpKyowOTYvMDBCREO7rt+FAAAACXBIWXMAABCcAAAQnAEmzTo0AAAALUlEQVR4nDXJwQ3DABCEQFiu/5otWwmvkaApKG37IL9kdzfRF9d/wNZqUmb5AAxZAGNhiNYOAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature-2.044284b0.png\",\"height\":834,\"width\":834,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAJFBMVEX5+/v29vfu8/Dz8fL9/v7u5d3s6uve7eX28OfB49iIzbiU1MGy2+Z4AAAAAXRSTlP+GuMHfQAAAAlwSFlzAAAQnAAAEJwBJs06NAAAADdJREFUeJwdyckNwDAQAzGNtIed9N9vgPBLTROQRJj3uSWlqlMljOcve/uA4HQfo8z07koZO0EfHuUA3oMzgvQAAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature-2@dark.6a7d4aa9.png\",\"height\":834,\"width\":834,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAJ1BMVEU1MjJJUUxGREU6OjopKilVUVE9PD1NSj5ZUkVLSElCSkQgY04nST9wGKijAAAACXBIWXMAABCcAAAQnAEmzTo0AAAAOElEQVR4nBXFSRLAMAwCMDDGS9L/v7cTXQQAyMx8494vUeaOLRQPN7agczgdgqJnuoWyTVIQ48EPJxIBD0Y+wTMAAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature-3.081d8411.png\",\"height\":834,\"width\":834,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAJ1BMVEX6+/v+/v7y8/T4+Pbu7e/s9fPd7ur29Ozq6eab0cCi2MfL3dmm28ttTp79AAAACXBIWXMAABCcAAAQnAEmzTo0AAAANklEQVR4nBXGyRHAMAwDsaWoy0n6rzdjvEAkqhI44DkWHiPZzI65vBkRWTg3I7vo895Afy0kfh2aAOTwo2XDAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature-3@dark.a52608ed.png\",\"height\":834,\"width\":834,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAIVBMVEUvLzA+PTwpKys3NjZCQkIuPTlHRkMjWkk9TUhVUEI0YlSM8103AAAAAXRSTlP9g+pWxwAAAAlwSFlzAAAQnAAAEJwBJs06NAAAADZJREFUeJwtyMkNACEMBMG5bAP5B4xYbb9KDVhfEKQZCW6SjMG9O2nDnXcKzo86K8wyasq2cQEcSADec9F6oQAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","\"use client\";\n\nimport { Stack } from \"@ui/layout\";\nimport { Tag, Title, Icon, Button } from \"@ui/elements\";\nimport featureOne from \"./feature-1.png\";\nimport featureOneDark from \"./feature-1@dark.png\";\nimport featureTwo from \"./feature-2.png\";\nimport featureTwoDark from \"./feature-2@dark.png\";\nimport featureThree from \"./feature-3.png\";\nimport featureThreeDark from \"./feature-3@dark.png\";\nimport { StaticImageData } from \"next/image\";\nimport { Image } from \"@components/Image/Image\";\n\nimport { FC, PropsWithChildren, ReactElement, useRef } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport {\n motion,\n useTransform,\n useScroll,\n MotionValue,\n useSpring,\n useReducedMotion,\n} from \"framer-motion\";\nimport { Container } from \"@components/Container/Container\";\nimport { sendGTMEvent } from \"@next/third-parties/google\";\nimport { getUtmParams, useUtmLink } from \"@utils\";\n\ntype FeatureTagProps = PropsWithChildren;\n\nconst FeatureTag: FC<FeatureTagProps> = ({ children }) => {\n return (\n <li className=\"flex items-center gap-xs text-sm md:text-base dark:text-neutral-300\">\n <Icon\n icon=\"CheckCircle\"\n size=\"1.3rem\"\n className=\"text-green-700\"\n aria-hidden=\"true\"\n />\n <span>{children}</span>\n </li>\n );\n};\n\nfunction useParallax(\n scrollYProgress: MotionValue<number>,\n distance: number,\n stiffness = 100,\n damping = 20,\n) {\n const y = useTransform(scrollYProgress, [0, 1], [-distance, distance]);\n return useSpring(y, { stiffness, damping });\n}\n\ntype FeatureItemProps = {\n tagText: string;\n title: string;\n subtitle: string;\n tags: ReactElement[] | ReactElement;\n buttonText: string;\n buttonAriaLabel: string;\n isReverse?: boolean;\n image: StaticImageData;\n imageDark?: StaticImageData;\n imageAlt: string;\n buttonLink: string;\n};\n\nconst FeatureItem: FC<FeatureItemProps> = ({\n title,\n subtitle,\n tags,\n tagText,\n buttonText,\n isReverse,\n image,\n imageDark,\n imageAlt,\n buttonAriaLabel,\n buttonLink,\n}) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const { scrollYProgress } = useScroll({\n target: ref,\n offset: [\"start end\", \"end start\"],\n });\n const utmLink = useUtmLink(buttonLink);\n\n const featuerLink = buttonLink.startsWith(\"http\") ? utmLink : buttonLink;\n\n const yLayer1 = useParallax(scrollYProgress, -50);\n const shouldReduceMotion = useReducedMotion();\n\n const opacityTransform = useTransform(scrollYProgress, [0, 1], [0.5, 1]);\n\n return (\n <article\n className={cn(\n \"relative flex w-full flex-col items-center justify-start gap-10 md:flex-row lg:justify-center\",\n {\n \"lg:flex-row-reverse\": isReverse,\n },\n )}\n data-aos=\"fade-up\"\n aria-labelledby={`${title.replace(/\\s+/g, \"-\").toLowerCase()}-heading`}\n >\n <Stack\n direction=\"horizontal\"\n className={cn(\"flex flex-col md:flex-row\", {\n \"lg:flex-1 lg:justify-center\": isReverse,\n })}\n >\n <Stack spacing=\"xxl\" className=\"w-full md:w-114 lg:w-auto lg:max-w-xl\">\n <header className=\"flex flex-col items-start gap-md\">\n <Tag size=\"md\" variant=\"neutral\" as=\"p\">\n {tagText}\n </Tag>\n <Title\n as=\"h2\"\n id={`${title.replace(/\\s+/g, \"-\").toLowerCase()}-heading`}\n styleAs=\"h1\"\n >\n {title}\n </Title>\n <Title type=\"subtitle\" as=\"h3\" color=\"tertiary\">\n {subtitle}\n </Title>\n </header>\n <ul className=\"grid w-full max-w-md grid-cols-[auto,auto] gap-y-3\">\n {tags}\n </ul>\n\n <Button\n color=\"primary\"\n size=\"medium\"\n aria-label={buttonAriaLabel}\n as=\"link\"\n href={featuerLink}\n onClick={() =>\n sendGTMEvent({\n event: \"cta_click\",\n value: `features_${tagText.toLowerCase().replace(/\\s+/g, \"_\")}`,\n ...getUtmParams(),\n })\n }\n >\n {buttonText}\n </Button>\n </Stack>\n </Stack>\n <div\n className={cn(\"relative flex justify-center\", {\n [\"lg:flex-1\"]: !isReverse,\n })}\n >\n <div className=\"relative -mx-2 md:mx-none md:min-w-[30rem]\" ref={ref}>\n <Image\n src={image}\n darkSrc={imageDark}\n alt={imageAlt}\n loading=\"lazy\"\n className=\"relative z-10 w-full rounded-xl border border-gray-200 md:max-w-md lg:w-128 xl:w-[50rem] xl:max-w-xl dark:border-neutral-700\"\n />\n {!shouldReduceMotion && (\n <motion.div\n style={{\n y: yLayer1,\n opacity: opacityTransform,\n }}\n className={cn(\n \"absolute -bottom-7 -left-7 h-full w-full rounded-xl bg-primary-500/20 dark:bg-primary-500/30\",\n {\n \"lg:-bottom-9 lg:-left-9\": isReverse,\n \"lg:-bottom-9 lg:-right-9\": !isReverse,\n },\n )}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n </article>\n );\n};\n\nexport const Features = () => {\n return (\n <section\n className=\"relative py-28 md:py-44\"\n id=\"features\"\n aria-labelledby=\"features-heading\"\n role=\"region\"\n >\n <h2 id=\"features-heading\" className=\"sr-only\">\n Features\n </h2>\n <Container>\n <Stack spacing=\"unset\" className=\"gap-36 px-6 md:gap-48\">\n <FeatureItem\n tagText=\"Bankroll Management\"\n title=\"Maximize Your Profits with our Strategy\"\n subtitle=\"Implement scientifically-backed betting strategies to enhance your sports betting profitability.\"\n imageAlt=\"Screenshot of the AI predictions and betting tips' results over time.\"\n tags={\n <>\n <FeatureTag>Kelly Criterion</FeatureTag>\n <FeatureTag>Bet Tracking</FeatureTag>\n <FeatureTag>Flat Betting</FeatureTag>\n <FeatureTag>Custom Strategies</FeatureTag>\n <FeatureTag>Personalized Interface</FeatureTag>\n </>\n }\n buttonLink={process.env.NEXT_PUBLIC_APP_URL || \"\"}\n buttonText=\"Try for Free\"\n buttonAriaLabel=\"Get Started with Football Genie AI for Free\"\n image={featureOne}\n imageDark={featureOneDark}\n />\n <FeatureItem\n isReverse\n tagText=\"Contextual Analysis\"\n title=\"Football Beyond Stats\"\n subtitle=\"We know football is not played by numbers. Genie considers all contextual factors to tip the odds in your favor.\"\n imageAlt=\"Screenshot of the AI Croatia and Portugal match analysis showcasing the accuracy of Football Genie AI.\"\n tags={\n <>\n <FeatureTag>Motivations</FeatureTag>\n <FeatureTag>Team Records</FeatureTag>\n <FeatureTag>Style of Play</FeatureTag>\n <FeatureTag>Strengths & Weaknesses</FeatureTag>\n <FeatureTag>Sentiment Analysis</FeatureTag>\n <FeatureTag>Injury Impact</FeatureTag>\n <FeatureTag>Managerial Changes</FeatureTag>\n </>\n }\n buttonText=\"Latest Predictions\"\n buttonLink=\"#latest-predictions\"\n buttonAriaLabel=\"See the Latest Football Predictions made by Football Genie AI\"\n image={featureTwo}\n imageDark={featureTwoDark}\n />\n <FeatureItem\n tagText=\"Personalized Insights\"\n title=\"Tailored to Your Betting Style\"\n subtitle=\"Experience a personalized platform designed around your preferences and betting strategy.\"\n imageAlt=\"Screenshot of the Football Genie AI's strategy and bankroll management screen.\"\n tags={\n <>\n <FeatureTag>+80% Hit-Rate</FeatureTag>\n <FeatureTag>High Odds</FeatureTag>\n <FeatureTag>Europe Top 5</FeatureTag>\n <FeatureTag>Correct Score Prediction</FeatureTag>\n <FeatureTag>Goals Over/Under</FeatureTag>\n <FeatureTag>Match Outcome</FeatureTag>\n </>\n }\n buttonLink={process.env.NEXT_PUBLIC_APP_URL || \"\"}\n buttonText=\"Get Started\"\n buttonAriaLabel=\"Get Started with Football Genie AI\"\n image={featureThree}\n imageDark={featureThreeDark}\n />\n </Stack>\n </Container>\n </section>\n );\n};\n","export default {\"src\":\"/_next/static/media/fire.fa3efdaf.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAASFBMVEVMaXHXtHfunjXMuYbScSPWdirdpk3dplu1WRHQcCPfoErBYBvTcCS4dj/QrHvJbx+zSgrcnEXnrE/ajTXvu2nRahzXzqfkpEdCQdnHAAAAE3RSTlMA1F9GnP5FDCJZQZ7p/fswsvyuOw0M4wAAAAlwSFlzAAALEwAACxMBAJqcGAAAADpJREFUeJxjYGBgYGeAAhZOCM3Pw8oGEWAVFgLRHNzCguJcDAwMnKLCfCJMID0CvGKMHGBFHMzsDAwAKdwBa+bLDJgAAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/target.9c40908c.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAARVBMVEVMaXGlOEWkMEOWRE+/cXrkmxy+fjewYwCrMyWZXGOqUFufRU+cBBiuXGWWWR6hYSOyRFOaIS+wM0SqRlKVKzaBSU7DZnAyLnNmAAAAFnRSTlMAeWzI/BNNBSH+xP05/r+9ocbK/pr6Wxxz4AAAAAlwSFlzAAALEwAACxMBAJqcGAAAADtJREFUeJw9ykkSgCAMAMERAkkE3ED+/1QPlva54WfHuiigl8gMmqi9ucc9U0u5PW4ZPZvMkAxsvPnzADmuAZlTUoGgAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/heart.585a881a.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAXVBMVEVMaXGOMDnOV2C/Nz6qKhzQNzXTVU+7Ky+uLDZ8HwyeKjS9TleaHx25PSO3NiPMSTKqKiGdKzDePz+WOEDINzDKaGvBPUmfMj2+ZW3Cc3q4ZWy3cHWhPUTcSTfdcXJTrXhcAAAAHHRSTlMAOf78CTn9/f4U+/6JiO2j7qRdX/z4a2u9brxvtQ5TmAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAEBJREFUeJw9y0cSgCAQAMEhL6Bijuj/n2mVB/ve8NvO49pXUEly1tox1SRmeUZUlWC8dzCEMN8FsE3ftfZ7MQIvVSMCP6jgBO0AAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/bulb.87293ec7.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAUVBMVEVMaXH2pKj3yIT32KMmHSL/wFz2yXEyMj0/Oz7+tjb0to/3mqH0s2toW3b2rYCjdJdXW1fmVf/2t3vxkN31w1b4eOTca/GWbZlobGXzeeH5ibJb/QMSAAAAGHRSTlMA/PRGPh70DWgH+m31OJ/4QxXd558mb/rCn8HnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAPklEQVR4nGNgYOBkZuZkAAE+JjYREC3KyMPExsrAwCAozMglBGIwiElKcYPV8Irzs4AZAhISEAY7Bwc7AwMAOBABpWd3qAoAAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/gym.4506ff4e.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAMFBMVEVMaXGzQjqpRktVVVWlO0MkMjJYamaSNCa/UF+7TVqfOB6VMxmWMxnSTVS1OTG9LkPozip1AAAADXRSTlMAFTYDw1VXvrttum1uFO6LQwAAAAlwSFlzAAALEwAACxMBAJqcGAAAADJJREFUeJxNyrcNACAQwEB/IKf9t0UUCK5wZfiYnUouULKgy2P0oej0ENJQJHVoVd58bRs8AMNuMH3BAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/chess.756b916b.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAALVBMVEVMaXFqOzttPSpqPy2UcGFrPStdJRFLOzRaMSFiNSNwZmIAAACRfndyPiiNXEddRwe7AAAADnRSTlMAAciwKvwyeMDHaAOH96+dLJ0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAA0SURBVHicNYpbDgAgCMMKqPi+/3ENGpd+LN1ASAkhUCUi1F/MwgNN36fkVa6yvO82uk8XDg4OAJlWzr+ZAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","import { Stack } from \"@ui/layout\";\nimport { Button, Tag, Title } from \"@ui/elements\";\nimport Image, { StaticImageData } from \"next/image\";\nimport fire from \"./fire.png\";\nimport target from \"./target.png\";\nimport heart from \"./heart.png\";\nimport bulb from \"./bulb.png\";\nimport gym from \"./gym.png\";\nimport chess from \"./chess.png\";\nimport { FC } from \"react\";\nimport { Swiper, SwiperSlide } from \"swiper/react\";\nimport { Autoplay } from \"swiper/modules\";\nimport { Container } from \"@components/Container/Container\";\nimport { sendGTMEvent } from \"@next/third-parties/google\";\nimport { getUtmParams, useUtmLink } from \"@utils\";\n\ntype CardProps = {\n image: StaticImageData;\n imageAlt: string;\n title: string;\n description: string;\n};\n\nconst firstColumnCards: CardProps[] = [\n {\n image: target,\n imageAlt: \"Target icon representing Correct Score Prediction\",\n title: \"Correct Score Prediction\",\n description:\n \"Receive precise score forecasts for every football match to enhance your betting strategy.\",\n },\n {\n image: fire,\n imageAlt: \"Fire icon representing Motivation Analysis\",\n title: \"Motivation Analysis\",\n description:\n \"Analyze team motivations to understand their drive and potential performance before the match.\",\n },\n {\n image: chess,\n imageAlt: \"Chess icon representing Strategy Comparison\",\n title: \"Strategy Comparison\",\n description:\n \"Compare team strategies in-depth to predict match dynamics and identify betting opportunities.\",\n },\n];\n\nconst secondColumnCards: CardProps[] = [\n {\n image: heart,\n imageAlt: \"Heart icon representing Injury Impact\",\n title: \"Injury Impact\",\n description:\n \"Assess how player injuries affect team performance and match outcomes.\",\n },\n {\n image: bulb,\n imageAlt: \"Bulb icon representing Match Preview\",\n title: \"Match Preview\",\n description:\n \"Get comprehensive previews of upcoming matches, including key factors and expected dynamics.\",\n },\n {\n image: gym,\n imageAlt: \"Gym icon representing Recent Form\",\n title: \"Recent Form\",\n description:\n \"Evaluate the recent performance of teams to gauge their current form and predict future results.\",\n },\n];\n\nconst MatchAnalysisCard: FC<CardProps & { id: string }> = ({\n image,\n imageAlt,\n title,\n description,\n id,\n}) => {\n return (\n <article\n className=\"flex h-full w-80 flex-none flex-col gap-md rounded-2xl bg-white p-7 shadow-sm md:w-96 md:p-xxl lg:h-auto dark:bg-neutral-700\"\n aria-labelledby={`card-title-${title.toLowerCase().split(\" \").join(\"-\")}-${id}`}\n >\n <Image\n src={image}\n className=\"size-20 drop-shadow-lg md:size-24\"\n alt={imageAlt}\n loading=\"lazy\"\n />\n <Title\n styleAs=\"h3\"\n as=\"h4\"\n className=\"whitespace-break-spaces lg:whitespace-nowrap\"\n id={`card-title-${title.toLowerCase().split(\" \").join(\"-\")}-${id}`}\n >\n {title}\n </Title>\n <p className=\"text-sm md:text-base dark:text-neutral-300\">\n {description}\n </p>\n </article>\n );\n};\n\nexport const MatchAnalysis = () => {\n const dashboardLink = useUtmLink(process.env.NEXT_PUBLIC_APP_URL || \"\");\n\n return (\n <section\n aria-labelledby=\"match-analysis-section-title\"\n className=\"flex max-w-[100vw] flex-col gap-xxl overflow-hidden bg-gray-100 px-6 py-24 dark:bg-neutral-800\"\n >\n <Container>\n <div className=\"max-w-8xl mx-auto flex flex-col items-center gap-xxl lg:flex-row\">\n <Stack\n spacing=\"xl\"\n className=\"flex-none lg:w-128 xl:w-auto xl:max-w-lg\"\n >\n <header\n className=\"flex flex-col items-start gap-md\"\n data-aos=\"fade-up\"\n >\n <Tag size=\"md\" variant=\"neutral\" className=\"dark:bg-neutral-700\">\n Match Analysis\n </Tag>\n <Title styleAs=\"h1\" as=\"h2\" id=\"match-analysis-section-title\">\n Advanced Analysis\n </Title>\n <Title type=\"subtitle\" styleAs=\"h4\" as=\"h3\" color=\"tertiary\">\n Unlock in-depth analysis with AI predictions, team motivations,\n injury impacts, and match dynamics to maximize your sports\n betting profits.\n </Title>\n </header>\n <Button\n color=\"primary\"\n size=\"medium\"\n data-aos=\"zoom-in\"\n data-aos-delay=\"200\"\n aria-label=\"Get Started with Expert Betting Tips\"\n as=\"link\"\n href={dashboardLink}\n onClick={() =>\n sendGTMEvent({\n event: \"cta_click\",\n value: \"match_analysis\",\n ...getUtmParams(),\n })\n }\n >\n Try for Free\n </Button>\n </Stack>\n <div className=\"flex max-w-full flex-col justify-center gap-lg lg:flex-1 lg:flex-row\">\n {/* First Column */}\n <div\n className=\"relative -mr-6 flex flex-col gap-lg overflow-hidden lg:mr-none lg:mt-8 lg:h-[40rem]\"\n aria-label=\"Accurate Score Predictions, Team Motivation Insights, Comprehensive Strategy Comparison\"\n >\n <Swiper\n slidesPerView=\"auto\"\n direction=\"horizontal\"\n className=\"max-w-full\"\n loop\n spaceBetween={17.5}\n grabCursor\n modules={[Autoplay]}\n autoplay={{\n delay: 3000,\n disableOnInteraction: true,\n pauseOnMouseEnter: true,\n }}\n breakpoints={{\n 1024: { direction: \"vertical\", centeredSlides: true },\n }}\n >\n {[...firstColumnCards, ...firstColumnCards].map((e, index) => (\n <SwiperSlide\n className=\"!h-auto !w-fit\"\n key={`match-analysis-${e.title}-${index}`}\n >\n <MatchAnalysisCard id={`column-1-${index}`} {...e} />\n </SwiperSlide>\n ))}\n </Swiper>\n {/* Desktop Overlays */}\n <div className=\"pointer-events-none absolute left-0 top-0 z-10 hidden h-24 w-full bg-gradient-to-b from-gray-100 to-transparent lg:block dark:from-neutral-800\"></div>\n <div className=\"pointer-events-none absolute bottom-0 left-0 z-10 hidden h-24 w-full bg-gradient-to-t from-gray-100 to-transparent lg:block dark:from-neutral-800\"></div>\n </div>\n {/* Second Column */}\n <div\n className=\"relative -mr-6 flex flex-col gap-lg overflow-hidden lg:mr-none lg:mt-8 lg:h-[40rem]\"\n aria-label=\"Injury Impact Analysis, Detailed Match Previews, Recent Form Evaluation\"\n >\n <Swiper\n slidesPerView=\"auto\"\n direction=\"horizontal\"\n className=\"max-w-full\"\n loop\n spaceBetween={17.5}\n grabCursor\n modules={[Autoplay]}\n autoplay={{\n delay: 3000,\n disableOnInteraction: true,\n pauseOnMouseEnter: true,\n reverseDirection: true,\n }}\n breakpoints={{\n 1024: { direction: \"vertical\", centeredSlides: true },\n }}\n >\n {[...secondColumnCards, ...secondColumnCards].map(\n (e, index) => (\n <SwiperSlide\n className=\"!h-auto !w-fit\"\n key={`match-analysis-${e.title}-${index}`}\n >\n <MatchAnalysisCard id={`column-2-${index}`} {...e} />\n </SwiperSlide>\n ),\n )}\n </Swiper>\n {/* Desktop Overlays */}\n <div className=\"pointer-events-none absolute left-0 top-0 z-10 hidden h-24 w-full bg-gradient-to-b from-gray-100 to-transparent lg:block dark:from-neutral-800\"></div>\n <div className=\"pointer-events-none absolute bottom-0 left-0 z-10 hidden h-24 w-full bg-gradient-to-t from-gray-100 to-transparent lg:block dark:from-neutral-800\"></div>\n </div>\n </div>\n </div>\n </Container>\n </section>\n );\n};\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport dynamic from \"next/dynamic\";\nimport { useTheme } from \"next-themes\";\nimport { Button, Tag, Title } from \"@ui/elements\";\nimport { Stack } from \"@ui/layout\";\nimport DotPattern from \"@components/ui/dot-pattern\";\nimport { cn } from \"@/lib/utils\";\nimport { Container } from \"@components/Container/Container\";\nimport { sendGTMEvent } from \"@next/third-parties/google\";\nimport { getUtmParams, useUtmLink } from \"@utils\";\n\n// Dynamic import for Globe\nconst Globe = dynamic(() => import(\"@components/SupportedLeagues/Globe\"), {\n ssr: false,\n});\n\n// ErrorBoundary to gracefully handle render errors\nclass ErrorBoundary extends React.Component<\n { children: React.ReactNode },\n { hasError: boolean }\n> {\n constructor(props: { children: React.ReactNode }) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(\"Error rendering SupportedLeagues:\", error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n // If there's an error, return null to not render the section\n return null;\n }\n return this.props.children;\n }\n}\n\nconst images = {\n light: [\n { src: \"/images/leagues/premier-league.png\", alt: \"Premier League Logo\" },\n { src: \"/images/leagues/laliga.png\", alt: \"La Liga Logo\" },\n { src: \"/images/leagues/bundesliga.png\", alt: \"Bundesliga Logo\" },\n { src: \"/images/leagues/ligue-1.png\", alt: \"French Ligue 1 Logo\" },\n { src: \"/images/leagues/serie-a.png\", alt: \"Italy Serie A Logo\" },\n {\n src: \"/images/leagues/champions-league.png\",\n alt: \"UEFA Champions League Logo\",\n },\n {\n src: \"/images/leagues/nations-league.png\",\n alt: \"UEFA Nations League Logo\",\n },\n { src: \"/images/leagues/copa-america.png\", alt: \"Copa America Logo\" },\n { src: \"/images/leagues/super-cup.png\", alt: \"UEFA Super Cup Logo\" },\n { src: \"/images/leagues/mls.png\", alt: \"MLS Logo\" },\n ],\n dark: [\n {\n src: \"/images/leagues/premier-league@dark.png\",\n alt: \"Premier League Logo\",\n },\n { src: \"/images/leagues/laliga.png\", alt: \"La Liga Logo\" },\n { src: \"/images/leagues/bundesliga@dark.png\", alt: \"Bundesliga Logo\" },\n { src: \"/images/leagues/ligue-1@dark.png\", alt: \"French Ligue 1 Logo\" },\n { src: \"/images/leagues/serie-a.png\", alt: \"Italy Serie A Logo\" },\n {\n src: \"/images/leagues/champions-league@dark.png\",\n alt: \"UEFA Champions League Logo\",\n },\n {\n src: \"/images/leagues/nations-league.png\",\n alt: \"UEFA Nations League Logo\",\n },\n { src: \"/images/leagues/copa-america.png\", alt: \"Copa America Logo\" },\n { src: \"/images/leagues/super-cup@dark.png\", alt: \"UEFA Super Cup Logo\" },\n { src: \"/images/leagues/mls.png\", alt: \"MLS Logo\" },\n ],\n};\n\nexport const SupportedLeagues = () => {\n const { resolvedTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n const dashboardLink = useUtmLink(process.env.NEXT_PUBLIC_APP_URL || \"\");\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted || images[resolvedTheme as \"light\" | \"dark\"] === undefined) {\n return null;\n }\n\n return (\n <section\n className=\"flex flex-col gap-md overflow-hidden px-6 py-24\"\n aria-labelledby=\"supported-leagues-heading\"\n >\n <Container>\n <div className=\"flex flex-col-reverse items-center gap-md md:flex-row\">\n <ErrorBoundary>\n <Stack align=\"center\" className=\"w-1/2\">\n <div\n className=\"relative size-128 md:-ml-48 md:mt-none lg:mx-auto\"\n data-aos=\"fade-up\"\n >\n <DotPattern\n width={16}\n height={16}\n cr={2}\n cy={2}\n cx={2}\n className={cn(\n \"[mask-image:radial-gradient(300px_circle_at_center,white,transparent)]\",\n \"fill-gray-400/40\",\n )}\n />\n <Globe images={images[resolvedTheme as \"light\" | \"dark\"]} />\n </div>\n </Stack>\n </ErrorBoundary>\n <Stack spacing=\"xxl\" data-aos=\"fade-up\">\n <header className=\"flex max-w-xl flex-col items-start gap-md\">\n <Tag size=\"md\" variant=\"neutral\" as=\"p\">\n Supported Leagues\n </Tag>\n <Title styleAs=\"h1\" as=\"h2\" id=\"supported-leagues-heading\">\n Explore Soccer on a Global Scale\n </Title>\n <Title type=\"subtitle\" as=\"h3\" color=\"tertiary\">\n Gain access to comprehensive predictions for all your favorite\n competitions and teams.\n </Title>\n </header>\n <Button\n color=\"primary\"\n size=\"medium\"\n data-aos=\"zoom-in\"\n data-aos-delay=\"200\"\n aria-label=\"View and explore upcoming tips\"\n as=\"link\"\n href={dashboardLink}\n tabIndex={0}\n onClick={() =>\n sendGTMEvent({\n event: \"cta_click\",\n value: \"supported_leagues\",\n ...getUtmParams(),\n })\n }\n >\n Upcoming Tips\n </Button>\n </Stack>\n </div>\n </Container>\n </section>\n );\n};\n","export default {\"src\":\"/_next/static/media/dollar.e1460cc7.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAANlBMVEVMaXHdqFjeoE7Rgz/YkErcnk7WoW3JnVzakUbYmk3SqYTQsJPmtGLiq1bZnFHdkkHqoUrnkkMGauXzAAAAD3RSTlMAPtP9Pv79CNQx/v4+zzubrDZTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAOklEQVR4nC2LUQ6AIAzFOtx4G2jQ+1/WEP1r0haQmQAq12oFyqf3+xK+jjkizg1jRtivmr44a29yF7w8IwGt5CjaaQAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/boy.af70734d.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAP1BMVEVMaXHVazOQChPQgCqgPhzpl2TAgWuama6HHR2jWEqVamXHSj3KhWapNyzJbyDSfSfWlnLor5bZmn/FRTu3MSRXCdjUAAAAEXRSTlMA+zt+HvlLCAcd1q+gsOTknhUcBEgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAA4SURBVHicJcpXDgAgDAJQnLV1j/uf1Vj54SUAAETQeBFWxDWjIpXxN9e6e83GhOCf6tn5f6xNwAUllQEZ0H/JygAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/trophy.14c46f9c.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAS1BMVEVMaXFpLCMbGxtyX1u3YFW1h3mOSD3Ly8uHh4eKioqrq6t7e3u5ubmvS0OfT0uutLiirK5qamqioqKioqLX19eOjYzy8vJxbGyVlZXLw3ISAAAAFXRSTlMAICrphLoeCF9w7A3uQEB4fM3NVW8YBy+qAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAQElEQVR4nB3JWQ6AIAwA0WGzLaC4gd7/pAa/5iUD5bJbC4jVd2QTRGsfWQXc+fRjAfAh+Flhb8iUS+k/bDGu8AFSYQHTWM7apgAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/lab.8aa17ff0.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAALVBMVEVMaXFaJjNBJjZWPjZIREQIAAgpFi2lKVNsEkjGHkMkCy+qGVmjFlImCzDSF1GEc2GyAAAADnRSTlMAOyOyNBFJZPRthvz9hGESZLgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAA0SURBVHicLctJEgAgCAPBgCzi9v/nWgq5TF8CAETItVYQKTBn1Uw/du/jleY56/3YI5xxAQ3vAKvZ2K6uAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","\"use client\";\nimport { Stack } from \"@ui/layout\";\nimport Image, { StaticImageData } from \"next/image\";\nimport { Title } from \"@ui/elements\";\nimport CountUp from \"react-countup\";\n\nimport dollar from \"./dollar.png\";\nimport boy from \"./boy.png\";\nimport trophy from \"./trophy.png\";\nimport lab from \"./lab.png\";\nimport { FC } from \"react\";\nimport { useDeviceType } from \"@hooks/useDeviceType\";\n\ntype Stat = {\n img: StaticImageData;\n alt: string;\n end: number;\n prefix: string;\n label: string;\n delay: number;\n};\n\nconst stats: Stat[] = [\n {\n img: trophy,\n alt: \"Trophy representing matches analyzed\",\n end: 1800,\n prefix: \"+\",\n label: \"Matches Analyzed\",\n delay: 0,\n },\n {\n img: lab,\n alt: \"Magic icon symbolizing tips generated\",\n end: 24000,\n prefix: \"+\",\n label: \"AI Tips Generated\",\n delay: 100,\n },\n {\n img: boy,\n alt: \"User icon representing active users\",\n end: 200,\n prefix: \"+\",\n label: \"Active Users\",\n delay: 200,\n },\n {\n img: dollar,\n alt: \"Dollar sign illustrating profits generated\",\n end: 10000,\n prefix: \"+$\",\n label: \"Profits Generated\",\n delay: 300,\n },\n];\n\nconst StatCard: FC<Stat> = ({ img, alt, end, prefix, label, delay }) => (\n <Stack\n className=\"flex-1 rounded-xl bg-white px-sm py-lg pr-xl shadow-sm dark:bg-neutral-700 dark:shadow-none\"\n direction=\"horizontal\"\n align=\"center\"\n data-aos=\"fade-up\"\n data-aos-delay={delay}\n >\n <Image\n src={img}\n alt={alt}\n className=\"size-20 drop-shadow-lg\"\n loading=\"lazy\"\n />\n <Stack spacing=\"none\">\n <Title styleAs=\"h2\" as=\"h3\">\n <CountUp end={end} prefix={prefix} duration={3} />\n </Title>\n <p className=\"dark:text-neutral-400\">{label}</p>\n </Stack>\n </Stack>\n);\n\nexport const TrustBooster = () => {\n const device = useDeviceType();\n\n return (\n <section\n className=\"flex flex-col gap-md overflow-hidden bg-gray-100 px-6 py-6 md:py-12 dark:bg-neutral-800\"\n aria-labelledby=\"trust-booster-heading\"\n >\n <h2 id=\"trust-booster-heading\" className=\"sr-only\">\n AI Key Statistics\n </h2>\n <div className=\"mx-auto w-full max-w-screen-2xl\">\n <div className=\"grid grid-cols-1 gap-lg md:grid-cols-2 xl:grid-cols-4\">\n {stats.map((stat) => (\n <StatCard\n key={stat.label}\n {...stat}\n {...(device !== \"desktop\" ? { delay: 0 } : {})}\n />\n ))}\n </div>\n </div>\n </section>\n );\n};\n","export default {\"src\":\"/_next/static/media/facebook.a251298b.webp\",\"height\":512,\"width\":512,\"blurDataURL\":\"data:image/webp;base64,UklGRp4AAABXRUJQVlA4WAoAAAAQAAAABwAABwAAQUxQSEEAAAABcFTbttNc5CAAB703G8yrgM4Q0oZZ0RBzLI6NiAjJbAZLUn0Bk8yLvwt2A2kAxwDjB94W7F+oNHLf/AzJPt6VIQBWUDggNgAAAPABAJ0BKggACAACQDgloAJ0ugADCQb2YAD+69A9OHfyJLPeqmyu6P/ggtqPTDpQ+vgCniQAAA==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/google.4a3e368d.png\",\"height\":512,\"width\":512,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAYFBMVEVMaXH50QP9RCcPgOwPpETWPSMVfucXgPEMqkXsOhT+2gAVf+nbQCH/TSb/2gAOnTTbQCMRskgPskf8SyX/KgD92gD/SyYXfuQUf+UXifkUlqTlQyWC0iwSwk3/USr/mBaJymvtAAAAGXRSTlMAUKWsTFRonJsG4VKuVp/j2uR12CSiacyKrPVcpgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA+SURBVHicBcEHAoAgDACxY7c4cCvO///SBOhsGxSw7zxcAcy3oYvCmuFwLtJnSHtNmHuCWBuQZyxnAvAiHn5WeAJZ+wXcpwAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/telegram.d19f62a5.png\",\"height\":512,\"width\":512,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAANlBMVEUDmeYHouwEmeUGpvQCnupMaXEBoOwDnOVuxfADmuXB5/mV1fQAn/Ivrer///+Z1vVavO0apOdXR1L9AAAACnRSTlP3sP//6wCwLvy0Wg4U1gAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA7SURBVHicNctbDoAwDMRAs0mbNC2v+18WIcS3x7QYMKIRbtLyoBva0zoozyoBd85jijddlWv7sHnw7w8zIgFtV+JvAQAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/x-logo.cf6cd407.png\",\"height\":1800,\"width\":1800,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAALVBMVEUAAAAAAABSUlIFBQVMaXENDQ0AAAAAAAB9fX0AAAAREREAAABra2shISE0NDT8NJcXAAAACnRSTlOx8fz7AOwtL/ky3GAXBAAAAAlwSFlzAAALEwAACxMBAJqcGAAAADlJREFUeJwFwYcBwDAIBLGjuTw4+48biVxEsJJVn1p1QcefN1i/mWjDWjOvDcLlR7BLra8uuTFj5w86BQGYbRb/TAAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/instagram.fd7d41b7.png\",\"height\":512,\"width\":512,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAP1BMVEXBM2eGIKvIN1/HRFLGJ3PJTE/EHnLbjD9MaXF5IrqxHIrTfT7TckTSa0fDNF+VH6KyHImjHZOjHJG2GoChHZV60xqkAAAAFXRSTlMbO8FpEMa+xADBxjVHxL6/vJg0acUxCbWNAAAACXBIWXMAAAzcAAAM3AFsrtPzAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAADpJREFUeJwdwYkRwCAIAMFDgRB/Tf+9ZsZd5L2EKYGePSnxlbXPwnFVxxkk1cTAIpvlMHoLiNapz1V/SMsB7ad6AQ0AAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/borsik_g.c7793601.jpg\",\"height\":282,\"width\":284,\"blurDataURL\":\"data:image/jpeg;base64,/9j/2wBDAAoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/2wBDAQoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/wgARCAAIAAgDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAUAQEAAAAAAAAAAAAAAAAAAAAD/9oADAMBAAIQAxAAAACDCF//xAAaEAAABwAAAAAAAAAAAAAAAAAAAQIDBCEi/9oACAEBAAE/AHDjrvA//8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAgBAgEBPwB//8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAgBAwEBPwB//9k=\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/boncz_a_1.908aafd6.jpeg\",\"height\":1054,\"width\":828,\"blurDataURL\":\"data:image/jpeg;base64,/9j/2wBDAAoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/2wBDAQoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/wgARCAAIAAYDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAACdBj//xAAaEAACAgMAAAAAAAAAAAAAAAABAgMRABMy/9oACAEBAAE/AGmNFtsRtuqOf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Af//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/AI//2Q==\",\"blurWidth\":6,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/boncz_a_2.916e161b.jpeg\",\"height\":765,\"width\":828,\"blurDataURL\":\"data:image/jpeg;base64,/9j/2wBDAAoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/2wBDAQoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/wgARCAAHAAgDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAUAQEAAAAAAAAAAAAAAAAAAAAD/9oADAMBAAIQAxAAAACGCj//xAAZEAABBQAAAAAAAAAAAAAAAAACAAEDEjH/2gAIAQEAAT8AkEb4y//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Af//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQMBAT8Af//Z\",\"blurWidth\":8,\"blurHeight\":7};","export default {\"src\":\"/_next/static/media/boncz_a_3.39e7ffc8.jpeg\",\"height\":1193,\"width\":828,\"blurDataURL\":\"data:image/jpeg;base64,/9j/2wBDAAoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/2wBDAQoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/wgARCAAIAAYDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAUAQEAAAAAAAAAAAAAAAAAAAAD/9oADAMBAAIQAxAAAACFCj//xAAZEAABBQAAAAAAAAAAAAAAAAACABIhMXL/2gAIAQEAAT8AITdcZX//xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oACAECAQE/AH//xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oACAEDAQE/AH//2Q==\",\"blurWidth\":6,\"blurHeight\":8};","\"use client\";\nimport Image, { StaticImageData } from \"next/image\";\nimport {\n isImageSlide,\n Lightbox,\n RenderSlideProps,\n Slide,\n useLightboxProps,\n useLightboxState,\n} from \"yet-another-react-lightbox\";\nimport { Zoom } from \"yet-another-react-lightbox/plugins\";\n\nimport { FC, useState } from \"react\";\nimport { StaticImport } from \"next/dist/shared/lib/get-img-props\";\n\nfunction isNextJsImage(slide: Slide) {\n return (\n isImageSlide(slide) &&\n typeof slide.width === \"number\" &&\n typeof slide.height === \"number\"\n );\n}\n\nconst LightBoxSlide: FC<RenderSlideProps> = ({ slide, offset, rect }) => {\n const {\n on: { click },\n } = useLightboxProps();\n\n const { currentIndex } = useLightboxState();\n\n if (!slide.height || !slide.width) return null;\n if (!isNextJsImage(slide)) return undefined;\n\n // Calculate dimensions based on the container and image's natural size\n const width = Math.min(slide.width, rect.width);\n const height = Math.min(slide.height, rect.height);\n\n return (\n <div\n style={{\n position: \"relative\",\n width,\n height,\n margin: \"auto\",\n }}\n >\n <Image\n src={slide as StaticImport}\n alt=\"\"\n fill\n loading=\"eager\"\n className=\"rounded-xl\"\n draggable={false}\n style={{\n objectFit: \"contain\", // Preserve aspect ratio\n cursor: click ? \"pointer\" : undefined,\n }}\n sizes={`${Math.ceil((width / window.innerWidth) * 100)}vw`}\n onClick={\n offset === 0 ? () => click?.({ index: currentIndex }) : undefined\n }\n />\n </div>\n );\n};\n\ntype LightBoxProps = {\n images?: StaticImageData[];\n imageClass?: string;\n alt: string;\n};\n\nexport const LightBox: FC<LightBoxProps> = ({ images, imageClass, alt }) => {\n const [open, setOpen] = useState(false);\n\n const showNavigation = (images?.length ?? 0) > 1; // Check if more than one image\n\n return (\n <span className=\"relative\">\n {(images?.length || 0) > 1 && (\n <span\n className=\"absolute right-1 top-[2px] flex size-5 cursor-pointer items-center justify-center rounded-full bg-gray-100 p-2 text-xs leading-none ring-2 ring-white dark:bg-neutral-700 dark:ring-gray-800\"\n onClick={() => setOpen(true)}\n >\n {images?.length}\n </span>\n )}\n {!!images?.length && (\n <Image\n src={images[0]}\n alt={alt}\n onClick={() => setOpen(true)}\n className={imageClass}\n width={60}\n height={60}\n />\n )}\n <Lightbox\n carousel={{\n imageFit: \"contain\",\n finite: !showNavigation, // Disable infinite scrolling if only one image\n }}\n zoom={{\n maxZoomPixelRatio: 2,\n zoomInMultiplier: 1.25,\n }}\n plugins={[Zoom]}\n open={open}\n close={() => setOpen(false)}\n slides={images}\n render={{ slide: LightBoxSlide }}\n styles={{\n container: {\n background: \"rgba(0, 0, 0, 0.4)\",\n backdropFilter: \"blur(5px)\",\n },\n button: {\n filter: \"none\",\n },\n }}\n />\n </span>\n );\n};\n","import { Stack } from \"@ui/layout\";\nimport React, { FC, useEffect, useRef, useState } from \"react\";\nimport { Button, Icon, Tag, Title } from \"@ui/elements\";\nimport Image, { StaticImageData } from \"next/image\";\n\nimport facebookLogo from \"./facebook.webp\";\nimport googleLogo from \"./google.png\";\nimport telegramLogo from \"./telegram.png\";\nimport twitterLogo from \"./x-logo.png\";\nimport instagramLogo from \"./instagram.png\";\n\n// Reviews\nimport borsik from \"../../assets/reviews/borsik_g.jpg\";\nimport boncz_1 from \"../../assets/reviews/boncz_a_1.jpeg\";\nimport boncz_2 from \"../../assets/reviews/boncz_a_2.jpeg\";\nimport boncz_3 from \"../../assets/reviews/boncz_a_3.jpeg\";\n\nimport classNames from \"classnames\";\n\nimport { Swiper, SwiperRef, SwiperSlide } from \"swiper/react\";\nimport { Container } from \"@components/Container/Container\";\nimport { LightBox } from \"@components/LightBox/LightBox\";\n\nconst StarFeedback: FC<{ stars: number }> = ({ stars }) => {\n return (\n <div className=\"flex gap-1\">\n {Array.from({ length: 5 }).map((_, index) => (\n <Icon\n key={`star-${index}`}\n icon=\"Star\"\n weight={index < stars ? \"fill\" : \"regular\"}\n className={classNames(\n index < stars\n ? \"text-yellow-400\"\n : \"text-gray-300 dark:text-neutral-400\",\n \"size-4\",\n )}\n />\n ))}\n </div>\n );\n};\n\ntype TestimonialSource =\n | \"telegram\"\n | \"facebook\"\n | \"twitter\"\n | \"google\"\n | \"instagram\";\n\nconst LogoSourceMap: Record<TestimonialSource, StaticImageData> = {\n telegram: telegramLogo,\n facebook: facebookLogo,\n twitter: twitterLogo,\n google: googleLogo,\n instagram: instagramLogo,\n};\n\nconst SourceNameMap: Record<TestimonialSource, string> = {\n telegram: \"Telegram\",\n facebook: \"Facebook\",\n twitter: \"Twitter\",\n google: \"Google\",\n instagram: \"Instagram\",\n};\n\ntype TestimonialItemProps = {\n name: string;\n text: string;\n type: TestimonialSource;\n rating: number;\n images?: StaticImageData[];\n cite?: string;\n};\n\nconst TestimonialItem: FC<TestimonialItemProps> = ({\n name,\n text,\n type,\n rating,\n images,\n}) => {\n const [hydrated, setHydrated] = useState(false);\n\n const [isExpanded, setIsExpanded] = useState(false);\n const [isOverflowing, setIsOverflowing] = useState(false);\n const textRef = useRef<HTMLParagraphElement>(null);\n\n useEffect(() => {\n const el = textRef.current;\n if (el) {\n const isTextOverflowing = el.scrollHeight > el.clientHeight;\n setIsOverflowing(isTextOverflowing); // Potentially triggers re-renders\n }\n }, []);\n\n useEffect(() => {\n setHydrated(true);\n }, []);\n\n return (\n <blockquote className=\"p-2 md:w-full\" cite=\"\">\n <Stack\n spacing=\"lg\"\n className=\"min-h-60 rounded-lg border border-gray-200 bg-white p-xl dark:border-neutral-700 dark:bg-neutral-800\"\n >\n <Stack>\n <StarFeedback stars={rating} />\n <div className=\"flex flex-col items-start gap-xxs\">\n <p\n id={`testimonial-text-${name.toLowerCase()}-${text.split(\" \")[0].toLowerCase()}`}\n ref={textRef}\n className={classNames(\"text-gray-500 dark:text-neutral-300\", {\n \"line-clamp-3\": !isExpanded,\n })}\n >\n {(images?.length || 0) > 0 && (\n <LightBox\n images={images}\n alt={`Review image by ${name}`}\n imageClass=\"float-left mr-2 mt-1 inline size-10 rounded cursor-pointer\"\n />\n )}\n {text}\n </p>\n {hydrated && !isExpanded && isOverflowing && (\n <button\n onClick={() => setIsExpanded(true)}\n className=\"text-blue-500\"\n aria-expanded={isExpanded}\n aria-controls={`testimonial-text-${name.toLowerCase()}-${text.split(\" \")[0].toLowerCase()}`}\n >\n more\n </button>\n )}\n </div>\n </Stack>\n <footer className=\"mt-auto flex items-center gap-md\">\n <Image\n className=\"size-9\"\n src={LogoSourceMap[type]}\n alt={`${type} logo`}\n />\n <Stack spacing=\"none\">\n <cite className=\"text-lg font-medium not-italic dark:text-neutral-200\">\n - {name}\n </cite>\n <p className=\"text-sm leading-snug text-gray-400 dark:text-neutral-400\">\n {SourceNameMap[type]}\n </p>\n </Stack>\n </footer>\n </Stack>\n </blockquote>\n );\n};\n\nconst testimonials: TestimonialItemProps[] = [\n {\n name: \"Borsik G.\",\n text: \"Great potential in the Genie bot, great hit-rate, evolving community, and most importantly the developer as well as the operation of the bot is completely transparent.\",\n type: \"telegram\",\n rating: 5,\n images: [borsik],\n },\n {\n name: \"Tamás Sz.\",\n text: \"It is a very valid concept, finding divergence between the real odds and the odds of the betting sites. It looks like Football Genie can estimate closer to the real odds. Also the responsivity and help of the creator is fantastic.\",\n type: \"telegram\",\n rating: 5,\n },\n {\n name: \"László V.\",\n text: \"It's a very useful platform for selecting your own tips, with excellent and numerous filtering parameters. The owner is open to development suggestions and is happy to implement them, so feel free to share your ideas.\",\n cite: \"https://g.co/kgs/Jznss8R\",\n type: \"google\",\n rating: 5,\n },\n {\n name: \"Róbert\",\n text: \"Team communication is excellent. Tips are backed up with data. They provide the right strategy for the most profitable experience. Excellent community.\",\n type: \"telegram\",\n rating: 4,\n },\n {\n name: \"Demeter D.\",\n text: \"Pretty good succes rate. Easily understandable helps. Transparency from the team.\",\n type: \"telegram\",\n rating: 5,\n },\n {\n name: \"Balázs Sz.\",\n text: \"Very exciting start-up, transparent communication, fast response from the development side.\\n\\nIt's worth watching, because its performance so far stands out.\",\n type: \"google\",\n cite: \"https://g.co/kgs/EXDs9zm\",\n rating: 5,\n },\n {\n name: \"Róbert\",\n text: \"I played a littlebit higher bets. I can reach 50% per day. If we have a red day Its pain much more but after a red day always follow few 100% day. Thank you for the work. U have a great community and great tips.\",\n type: \"telegram\",\n rating: 5,\n },\n {\n name: \"Kormány Zs.\",\n text: \"I think better than my tips\",\n type: \"instagram\",\n rating: 5,\n },\n {\n name: \"Boncz Ã.\",\n text: \"Authentic, evolving, and in demand.\",\n type: \"telegram\",\n rating: 5,\n images: [boncz_1, boncz_2, boncz_3],\n },\n {\n name: \"Muhi M.\",\n text: \"Amazing tips and top tier information source! This is a must have, absolutely recommended!\",\n type: \"google\",\n cite: \"https://g.co/kgs/7kEXipp\",\n rating: 5,\n },\n];\n\nexport const Testimonials = () => {\n const swiperInstance = useRef<SwiperRef>(null);\n const navigationPrevRef = React.useRef<HTMLButtonElement>(null);\n const navigationNextRef = React.useRef<HTMLButtonElement>(null);\n\n return (\n <section\n className=\"flex flex-col items-start gap-md px-6 py-14 lg:py-24\"\n aria-labelledby=\"testimonials-heading\"\n >\n <Container>\n <Stack spacing=\"xxl\">\n <header\n className=\"mx-auto flex flex-col items-center justify-center gap-md\"\n data-aos=\"fade-up\"\n >\n <Tag\n size=\"md\"\n variant=\"neutral\"\n className=\"self-start md:self-center\"\n as=\"p\"\n >\n Real Experiences\n </Tag>\n <Title\n as=\"h2\"\n styleAs=\"h1\"\n className=\"w-full md:text-center\"\n id=\"testimonials-heading\"\n >\n Trusted by Fans Everywhere\n </Title>\n <Title\n as=\"h3\"\n type=\"subtitle\"\n color=\"tertiary\"\n className=\"max-w-3xl font-light leading-relaxed tracking-wide md:text-center\"\n >\n Find out why users rely on our AI for soccer insights and how\n they've elevated their game predictions.\n </Title>\n </header>\n <div\n className=\"group relative -mx-6 flex max-w-[100vw] items-center gap-lg md:mx-auto md:max-w-full xl:max-w-7xl\"\n data-aos=\"fade-up\"\n >\n <Button\n className=\"hidden h-8 ring-1 ring-gray-200 group-hover:pointer-events-auto group-hover:translate-x-0 group-hover:opacity-100 md:block xl:pointer-events-none xl:translate-x-full xl:opacity-0 dark:bg-neutral-800 dark:text-neutral-300 dark:ring-neutral-700\"\n onClick={() => {\n swiperInstance?.current?.swiper.slidePrev();\n }}\n aria-label=\"Previous testimonials\"\n tabIndex={0}\n >\n <Icon icon=\"CaretLeft\" className=\"size-6\" />\n <span className=\"sr-only\">Previous testimonials</span>\n </Button>\n <div className=\"absolute left-0 z-10 h-full w-9 bg-gradient-to-l from-transparent to-white md:left-16 dark:to-neutral-900\" />\n <Swiper\n slidesPerView=\"auto\"\n ref={swiperInstance}\n loop={true}\n onBeforeInit={(swiper) => {\n if (navigationPrevRef.current && navigationNextRef.current) {\n swiper.navigation.prevEl = navigationPrevRef.current;\n swiper.navigation.nextEl = navigationNextRef.current;\n }\n }}\n breakpoints={{\n 768: {\n slidesPerView: 2,\n },\n 1280: {\n slidesPerView: 3,\n },\n }}\n >\n {testimonials.map((testimonial, index) => (\n <SwiperSlide\n key={`testimonial-${index}`}\n className=\"w-[calc(100%-3rem)] md:w-auto\"\n >\n <TestimonialItem {...testimonial} />\n </SwiperSlide>\n ))}\n </Swiper>\n <div className=\"absolute right-0 z-10 h-full w-9 bg-gradient-to-r from-transparent to-white md:right-16 dark:to-neutral-900\" />\n <Button\n className=\"hidden h-8 ring-1 ring-gray-200 group-hover:pointer-events-auto group-hover:translate-x-0 group-hover:opacity-100 md:block xl:pointer-events-none xl:-translate-x-full xl:opacity-0 dark:bg-neutral-800 dark:text-neutral-300 dark:ring-neutral-700\"\n onClick={() => {\n swiperInstance?.current?.swiper.slideNext();\n }}\n aria-label=\"Next testimonials\"\n tabIndex={0}\n >\n <Icon icon=\"CaretRight\" className=\"size-6\" />\n <span className=\"sr-only\">Next testimonials</span>\n </Button>\n </div>\n </Stack>\n </Container>\n </section>\n );\n};\n","export default {\"src\":\"/_next/static/media/telegram.7eb663a1.png\",\"height\":512,\"width\":512,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAIVBMVEUbitscitsShdocjeF5uuoxld+02fSj0PD4/P5drObv9/2kvwm3AAAAAXRSTlPA24Ia1gAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAzSURBVHicRYu5EQAgEISW9R61/4IdA8cIApAGwNClfQ07V4XlrKq5LDJ67kTgiIYfv/0AGrIAuhZMBrsAAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":8};","\"use client\";\nimport { Stack } from \"@ui/layout\";\nimport { Button, Icon, Title } from \"@ui/elements\";\nimport Image from \"next/image\";\n\nimport telegram from \"./telegram.png\";\nimport { useDeviceType } from \"@hooks/useDeviceType\";\nimport { Container } from \"@components/Container/Container\";\nimport { sendGTMEvent } from \"@next/third-parties/google\";\nimport { getUtmParams } from \"@utils\";\n\nexport const CommunityChannel = () => {\n const deviceType = useDeviceType();\n\n return (\n <section\n className=\"relative flex flex-col gap-md overflow-hidden px-6 py-10\"\n aria-labelledby=\"community-channel-heading\"\n >\n {/* Background with blurred bubbles */}\n <div className=\"absolute inset-0\">\n <div className=\"relative h-full w-full bg-[#1c8adb1a]\">\n <div className=\"absolute left-1/4 top-10 h-40 w-40 rounded-full bg-[#0088cc] opacity-50 blur-3xl\"></div>\n <div className=\"absolute left-3/4 top-1/2 h-40 w-40 rounded-full bg-[#005f99] opacity-50 blur-2xl\"></div>\n <div className=\"absolute bottom-10 right-1/4 h-32 w-32 rounded-full bg-[#007bb5] opacity-40 blur-3xl\"></div>\n </div>\n </div>\n\n <Container>\n <div className=\"relative mx-auto flex max-w-7xl flex-col items-center justify-between gap-md md:flex-row md:gap-xxxl\">\n {/* Left content with AOS animation */}\n <Stack\n direction=\"horizontal\"\n spacing=\"xl\"\n align=\"center\"\n data-aos={deviceType === \"desktop\" ? \"fade-right\" : \"fade-up\"}\n className=\"w-full items-start text-center md:w-auto md:text-left lg:items-center\"\n >\n <Image\n src={telegram}\n alt=\"Chat\"\n className=\"size-20 md:size-24\"\n loading=\"lazy\"\n />\n <Stack spacing=\"md\" className=\"w-full justify-center\">\n <div className=\"flex flex-col gap-sm\">\n <Title as=\"h2\" styleAs=\"h2\" id=\"community-channel-heading\">\n Join our Telegram Community\n </Title>\n <Title\n as=\"h3\"\n styleAs=\"h5\"\n type=\"subtitle\"\n color=\"tertiary\"\n className=\"max-w-3xl font-light leading-relaxed tracking-wide text-gray-700 dark:text-neutral-200\"\n >\n Connect with fellow bettors on Telegram and receive exclusive\n match predictions, real-time updates, and expert betting\n strategies every week!\n </Title>\n </div>\n </Stack>\n </Stack>\n\n <Stack\n data-aos={deviceType === \"desktop\" ? \"fade-left\" : \"fade-up\"}\n className=\"mt-6 w-full md:mt-0 md:w-auto\"\n >\n <Button\n size=\"large\"\n className=\"w-full bg-transparent pr-6 text-[#0088cc] shadow-sm ring-1 ring-[#0088cc] hover:bg-[#0088cc] hover:text-white hover:ring-[#007bb5] active:bg-[#005f99] active:text-white md:w-auto\"\n tabIndex={0}\n aria-label=\"Join Football Genie AI's Telegram Community\"\n as=\"link\"\n href=\"https://t.me/+vMSyhj7q38xkZDRk\"\n target=\"_blank\"\n onClick={() =>\n sendGTMEvent({\n event: \"link_click\",\n value: \"telegram_community\",\n ...getUtmParams(),\n })\n }\n >\n <Stack\n direction=\"horizontal\"\n align=\"center\"\n className=\"justify-center\"\n >\n <Icon\n icon=\"TelegramLogo\"\n className=\"-ml-4 size-6\"\n weight=\"duotone\"\n />\n <span>Join Telegram Now</span>\n </Stack>\n </Button>\n </Stack>\n </div>\n </Container>\n </section>\n );\n};\n","\"use client\";\nimport { useState } from \"react\";\nimport { Button, Icon, Tag, Title } from \"@ui/elements\";\nimport { Stack } from \"@ui/layout\";\nimport classNames from \"classnames\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { sendGTMEvent } from \"@next/third-parties/google\";\nimport { getUtmParams, useUtmLink } from \"@utils\";\n\ntype BillingCycle = \"weekly\" | \"monthly\";\n\nexport const PricingTable = () => {\n const [billingCycle, setBillingCycle] = useState<BillingCycle>(\"monthly\");\n const dashboardLink = useUtmLink(process.env.NEXT_PUBLIC_APP_URL || \"\");\n\n const toggleBillingCycle = () => {\n setBillingCycle(billingCycle === \"monthly\" ? \"weekly\" : \"monthly\");\n };\n\n return (\n <section\n className=\"flex flex-col items-start gap-xxxl px-6 py-14 lg:py-24\"\n id=\"pricing\"\n aria-labelledby=\"pricing-heading\"\n >\n <header className=\"mx-auto flex flex-col items-center justify-center gap-md\">\n <Tag size=\"md\" variant=\"neutral\">\n Pricing Plan\n </Tag>\n <Title\n as=\"h2\"\n styleAs=\"h1\"\n align=\"center\"\n className=\"w-full\"\n id=\"pricing-heading\"\n >\n Pricing Made Simple\n </Title>\n <Title\n as=\"h3\"\n type=\"subtitle\"\n color=\"tertiary\"\n className=\"max-w-2xl text-center font-light leading-relaxed tracking-wide\"\n >\n Find the perfect plan for your betting goals—whether you’re just\n starting out or a seasoned expert.\n </Title>\n </header>\n\n <div className=\"flex w-full flex-col gap-md md:gap-xxl\">\n <Stack\n direction=\"horizontal\"\n data-aos=\"fade-up\"\n align=\"center\"\n className=\"w-full justify-center pb-6\"\n role=\"group\"\n aria-label=\"Billing Cycle Toggle\"\n >\n <button\n type=\"button\"\n className={classNames(\"cursor-pointer text-lg tracking-wide\", {\n \"font-semibold dark:text-neutral-200\": billingCycle === \"weekly\",\n \"text-gray-400\": billingCycle === \"monthly\",\n })}\n onClick={() => setBillingCycle(\"weekly\")}\n aria-pressed={billingCycle === \"weekly\"}\n >\n Weekly\n </button>\n\n {/* Toggle Switch */}\n <label\n htmlFor=\"billing-toggle\"\n className=\"relative inline-flex cursor-pointer items-center\"\n >\n <input\n type=\"checkbox\"\n id=\"billing-toggle\"\n className=\"peer sr-only\"\n checked={billingCycle === \"monthly\"}\n onChange={toggleBillingCycle}\n aria-label=\"Toggle Billing Cycle\"\n />\n <div className=\"peer-focus:ring-primary-purple peer h-6 w-11 rounded-full bg-gray-300 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-neutral-700 after:bg-neutral-700 after:transition-all after:content-[''] peer-checked:bg-gradient-to-r peer-checked:from-[#80EE98] peer-checked:via-[#46DFB1] peer-checked:to-[#09D1C7] peer-checked:after:translate-x-full peer-checked:after:border-neutral-700 dark:bg-neutral-700 dark:after:bg-neutral-800\"></div>\n </label>\n\n <button\n type=\"button\"\n className={classNames(\"cursor-pointer text-lg tracking-wide\", {\n \"font-semibold dark:text-neutral-200\": billingCycle === \"monthly\",\n \"text-gray-400\": billingCycle === \"weekly\",\n })}\n onClick={() => setBillingCycle(\"monthly\")}\n aria-pressed={billingCycle === \"monthly\"}\n >\n Monthly\n </button>\n </Stack>\n\n <div className=\"mx-auto grid max-w-md grid-cols-1 gap-lg md:max-w-7xl md:grid-cols-2 lg:grid-cols-3 lg:gap-xxl\">\n {/* Free Pricing Card */}\n <article\n className=\"flex flex-col rounded-lg border border-gray-200 p-7 shadow-sm sm:p-10 dark:border-neutral-700 dark:bg-neutral-800\"\n data-aos=\"fade-up\"\n data-aos-delay=\"100\"\n >\n <h3 className=\"text-xl font-bold text-gray-800 xl:text-2xl dark:text-neutral-200\">\n Free\n </h3>\n <p className=\"mt-4 text-4xl font-extrabold text-gray-800 xl:text-5xl dark:text-neutral-200\">\n €0\n </p>\n <p className=\"text-md mt-2 text-gray-500 xl:text-lg dark:text-neutral-400\">\n Perfect package for beginners and casual bettors.\n </p>\n <ul className=\"mt-6 flex-1 space-y-4\">\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0 text-gray-800 dark:text-neutral-200\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base dark:text-neutral-200\">\n Up to 3 matches/day\n </span>\n </li>\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0 text-gray-800 dark:text-neutral-200\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base dark:text-neutral-200\">\n In-depth Match Analysis\n </span>\n </li>\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0 text-gray-800 dark:text-neutral-200\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base dark:text-neutral-200\">\n No Commitment\n </span>\n </li>\n </ul>\n <div className=\"mt-8\">\n <Button\n size=\"medium\"\n color=\"neutral\"\n className=\"w-full\"\n aria-label=\"Get started with Free Plan\"\n as=\"link\"\n href={dashboardLink}\n onClick={() =>\n sendGTMEvent({\n event: \"plan_click\",\n value: \"pricing_free\",\n ...getUtmParams(),\n })\n }\n >\n Get Started\n </Button>\n </div>\n </article>\n\n {/* Standard Pricing Card */}\n <article className=\"order-first md:col-span-2 lg:order-none lg:col-span-1 lg:-mx-4 lg:-my-6\">\n <div\n className=\"mx-auto flex flex-col overflow-hidden rounded-lg bg-[linear-gradient(to_right,rgba(128,238,152,0.7),rgba(70,223,177,0.7),rgba(9,209,199,0.7))] p-7 text-gray-800 shadow-sm md:max-w-lg md:p-10 dark:bg-[linear-gradient(to_right,rgba(128,238,152,0.8),rgba(70,223,177,0.8),rgba(9,209,199,0.8))]\"\n data-aos=\"fade-up\"\n >\n <Stack\n direction=\"horizontal\"\n className=\"justify-between\"\n align=\"center\"\n >\n <h3 className=\"text-xl font-bold text-gray-800 xl:text-2xl\">\n Standard\n </h3>\n <AnimatePresence mode=\"wait\" initial={false}>\n {billingCycle === \"monthly\" && (\n <motion.div\n key=\"most-affordable-tag\"\n initial={{\n opacity: 0,\n transform: \"translateX(100%)\",\n }}\n animate={{\n opacity: 1,\n transform: \"translateX(0)\",\n }}\n exit={{\n opacity: 0,\n transform: \"translateX(100%)\",\n }}\n transition={{ duration: 0.1 }}\n >\n <Tag\n size=\"md\"\n className=\"flex gap-xs truncate border border-none bg-white/30 text-gray-800 backdrop-blur-md\"\n aria-label=\"Most Affordable Plan\"\n >\n <Icon\n icon=\"Wallet\"\n className=\"-ml-1 size-5\"\n weight=\"fill\"\n aria-label=\"Wallet Icon representing most affordable choice\"\n />\n <span className=\"text-sm xl:text-base\">\n Most Affordable\n </span>\n </Tag>\n </motion.div>\n )}\n </AnimatePresence>\n </Stack>\n <AnimatePresence mode=\"wait\" initial={false}>\n <motion.p\n key={billingCycle}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 10 }}\n transition={{ duration: 0.1 }}\n className=\"mt-4 text-4xl font-extrabold xl:text-5xl\"\n >\n € {billingCycle === \"monthly\" ? 14.9 : 4.5}\n <span className=\"text-xl font-medium xl:text-2xl\">\n /{billingCycle === \"monthly\" ? \"Month\" : \"Week\"}\n </span>\n </motion.p>\n </AnimatePresence>\n <p className=\"text-md mt-2 text-gray-600 xl:text-lg dark:text-neutral-700\">\n Ideal for bettors who treat betting as an investment strategy.\n </p>\n <ul className=\"mt-6 flex-1 space-y-4\">\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base\">\n Unlimited tips\n </span>\n </li>\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base\">\n 24/7 expert support\n </span>\n </li>\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base\">\n Bankroll Management\n </span>\n </li>\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base\">\n Custom Betting Strategies\n </span>\n </li>\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base\">\n Personalisation\n </span>\n </li>\n </ul>\n <div className=\"mt-8\">\n <Button\n size=\"large\"\n color=\"primary\"\n className=\"w-full\"\n aria-label=\"Get Started with Standard Plan\"\n as=\"link\"\n href={dashboardLink}\n onClick={() =>\n sendGTMEvent({\n event: \"plan_click\",\n value: \"pricing_standard\",\n ...getUtmParams(),\n })\n }\n >\n Get Started\n </Button>\n </div>\n </div>\n </article>\n\n {/* Enterprise Pricing Card */}\n <article\n className=\"flex flex-col rounded-lg border border-gray-200 p-7 shadow-sm md:p-10 dark:border-neutral-700 dark:bg-neutral-800\"\n data-aos=\"fade-up\"\n data-aos-delay=\"100\"\n >\n <h3 className=\"text-xl font-bold text-gray-800 xl:text-2xl dark:text-neutral-200\">\n Enterprise\n </h3>\n <p className=\"text-md mt-2 text-gray-500 xl:text-lg dark:text-neutral-400\">\n For professionals and businesses seeking to integrate AI-driven\n betting solutions.\n </p>\n <ul className=\"mt-6 flex-1 space-y-4\">\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0 text-gray-800 dark:text-neutral-200\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base dark:text-neutral-200\">\n Everything in Standard Plan\n </span>\n </li>\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0 text-gray-800 dark:text-neutral-200\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base dark:text-neutral-200\">\n Developer API Access\n </span>\n </li>\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0 text-gray-800 dark:text-neutral-200\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base dark:text-neutral-200\">\n Custom Integrations\n </span>\n </li>\n\n <li className=\"flex items-center\">\n <Icon\n icon=\"CheckCircle\"\n weight=\"fill\"\n className=\"size-5 flex-shrink-0 text-gray-800 dark:text-neutral-200\"\n aria-hidden=\"true\"\n />\n <span className=\"ml-2 text-sm xl:text-base dark:text-neutral-200\">\n Marketing and Automation Tools\n </span>\n </li>\n </ul>\n <div className=\"mt-8\">\n <Button\n size=\"medium\"\n color=\"neutral\"\n className=\"w-full\"\n as=\"link\"\n href=\"#contact\"\n aria-label=\"Contact Us for Enterprise Plan\" // ARIA label for clarity\n onClick={() =>\n sendGTMEvent({\n event: \"plan_click\",\n value: \"pricing_enterprise\",\n ...getUtmParams(),\n })\n }\n >\n Contact Us\n </Button>\n </div>\n </article>\n </div>\n </div>\n </section>\n );\n};\n","/**\n * Generated by orval v7.3.0 ðŸº\n * Do not edit manually.\n */\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport type {\n DataTag,\n DefinedInitialDataOptions,\n DefinedUseQueryResult,\n MutationFunction,\n QueryFunction,\n QueryKey,\n UndefinedInitialDataOptions,\n UseMutationOptions,\n UseMutationResult,\n UseQueryOptions,\n UseQueryResult,\n} from \"@tanstack/react-query\";\nimport axios from \"axios\";\nimport type { AxiosError, AxiosRequestConfig, AxiosResponse } from \"axios\";\nexport type GetDailyTopPicksParams = {\n safe_to_bet?: boolean;\n min_predictability?: number;\n max_predictability?: number;\n min_match_importance?: number;\n max_match_importance?: number;\n min_odds?: number;\n max_odds?: number;\n season?: number;\n min_probability?: number;\n max_probability?: number;\n min_edge?: number;\n max_edge?: number;\n min_stake?: number;\n max_stake?: number;\n include_ratings?: Ratings[];\n include_categories?: Category[];\n include_tip_status?: TipStatus[];\n include_leagues?: number[];\n best_choice?: boolean;\n from?: string;\n to?: string;\n sort?: SortOrder;\n};\n\nexport type GetFixturesParams = {\n ids: number[];\n};\n\nexport type SearchLeaguesParams = {\n q: string;\n};\n\nexport type InitialFiltersGetParams = {\n from?: string;\n to?: string;\n type: TipType;\n};\n\nexport type GetTopPerformersParams = {\n from?: string;\n to?: string;\n type: TipType;\n};\n\nexport type GetTipsSummaryParams = {\n type: TipType;\n safe_to_bet?: boolean;\n min_predictability?: number;\n max_predictability?: number;\n min_match_importance?: number;\n max_match_importance?: number;\n min_odds?: number;\n max_odds?: number;\n season?: number;\n min_probability?: number;\n max_probability?: number;\n min_edge?: number;\n max_edge?: number;\n min_stake?: number;\n max_stake?: number;\n include_ratings?: Ratings[];\n include_categories?: Category[];\n include_leagues?: number[];\n best_choice?: boolean;\n from?: string;\n to?: string;\n sort?: SortOrder;\n kellyFraction?: number;\n initialBankroll?: number;\n};\n\nexport type GetUpcomingTipsParams = {\n type: TipType;\n safe_to_bet?: boolean;\n min_predictability?: number;\n max_predictability?: number;\n min_match_importance?: number;\n max_match_importance?: number;\n min_odds?: number;\n max_odds?: number;\n season?: number;\n min_probability?: number;\n max_probability?: number;\n min_edge?: number;\n max_edge?: number;\n min_stake?: number;\n max_stake?: number;\n include_ratings?: Ratings[];\n include_categories?: Category[];\n include_leagues?: number[];\n best_choice?: boolean;\n from?: string;\n to?: string;\n sort?: SortOrder;\n page?: number;\n pageSize?: number;\n};\n\nexport type GetTipsPerformanceParams = {\n type: TipType;\n safe_to_bet?: boolean;\n min_predictability?: number;\n max_predictability?: number;\n min_match_importance?: number;\n max_match_importance?: number;\n min_odds?: number;\n max_odds?: number;\n season?: number;\n min_probability?: number;\n max_probability?: number;\n min_edge?: number;\n max_edge?: number;\n min_stake?: number;\n max_stake?: number;\n include_ratings?: Ratings[];\n include_categories?: Category[];\n include_leagues?: number[];\n best_choice?: boolean;\n from?: string;\n to?: string;\n sort?: SortOrder;\n page?: number;\n pageSize?: number;\n};\n\nexport type GetTipsParams = {\n safe_to_bet?: boolean;\n min_predictability?: number;\n max_predictability?: number;\n min_match_importance?: number;\n max_match_importance?: number;\n type: TipType;\n sort?: SortOrder;\n to?: string;\n from?: string;\n best_choice?: boolean;\n include_leagues?: number[];\n include_tip_status?: TipStatus[];\n include_categories?: Category[];\n include_ratings?: Ratings[];\n max_stake?: number;\n min_stake?: number;\n max_edge?: number;\n min_edge?: number;\n max_probability?: number;\n min_probability?: number;\n season?: number;\n max_odds?: number;\n min_odds?: number;\n page?: number;\n pageSize?: number;\n include_match_status?: MatchStatus[];\n};\n\nexport type DeleteUserTip200 = {\n id: string;\n};\n\nexport type GetUserTipsSummaryParams = {\n safe_to_bet?: boolean;\n min_predictability?: number;\n max_predictability?: number;\n min_match_importance?: number;\n max_match_importance?: number;\n min_odds?: number;\n max_odds?: number;\n season?: number;\n min_probability?: number;\n max_probability?: number;\n min_edge?: number;\n max_edge?: number;\n min_stake?: number;\n max_stake?: number;\n include_ratings?: Ratings[];\n include_categories?: Category[];\n include_tip_status?: TipStatus[];\n include_leagues?: number[];\n best_choice?: boolean;\n from?: string;\n to?: string;\n sort?: SortOrder;\n type?: TipType;\n};\n\nexport type GetUserTipsParams = {\n safe_to_bet?: boolean;\n min_predictability?: number;\n max_predictability?: number;\n min_match_importance?: number;\n max_match_importance?: number;\n type: TipType;\n sort?: SortOrder;\n to?: string;\n from?: string;\n best_choice?: boolean;\n include_leagues?: number[];\n include_tip_status?: TipStatus[];\n include_categories?: Category[];\n include_ratings?: Ratings[];\n max_stake?: number;\n min_stake?: number;\n max_edge?: number;\n min_edge?: number;\n max_probability?: number;\n min_probability?: number;\n season?: number;\n max_odds?: number;\n min_odds?: number;\n page?: number;\n pageSize?: number;\n include_match_status?: MatchStatus[];\n};\n\nexport interface ContactBody {\n email: string;\n message: string;\n name: string;\n recaptchaToken: string;\n}\n\nexport interface ContactResponse {\n email: string;\n message: string;\n name: string;\n}\n\nexport interface GetDailyTopPicksQueryParams {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_ratings?: Ratings[];\n include_tip_status?: TipStatus[];\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n}\n\nexport type DailyTopPicksResponseMeta = {\n total: number;\n total_safe: number;\n total_value: number;\n};\n\nexport interface DailyTipWithFixture {\n fixture: FixtureItem;\n tip: DailyTopPick;\n}\n\nexport interface DailyTopPicksResponse {\n data: DailyTipWithFixture[];\n meta: DailyTopPicksResponseMeta;\n}\n\nexport type DailyTopPickType =\n (typeof DailyTopPickType)[keyof typeof DailyTopPickType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const DailyTopPickType = {\n safe: \"safe\",\n value: \"value\",\n} as const;\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickDailyTopPickRecordExcludeKeyofDailyTopPickRecordReasoning {\n fixture_id: string;\n id: string;\n league_id: number;\n rank: number;\n season: number;\n start_date: string;\n type: DailyTopPickType;\n winner?: boolean;\n}\n\nexport type DailyTopPick =\n PickDailyTopPickRecordExcludeKeyofDailyTopPickRecordReasoning & Tip;\n\n/**\n * Construct a type with the properties of T except for those in type K.\n */\nexport type OmitDailyTopPickRecordReasoning =\n PickDailyTopPickRecordExcludeKeyofDailyTopPickRecordReasoning;\n\nexport type FixtureRecordAllOfLeagueId = string | number;\n\nexport type FixtureRecordAllOfId = string | number;\n\nexport type FixtureRecordAllOf = {\n awayTeamId: number;\n date: string;\n homeTeamId: number;\n id: FixtureRecordAllOfId;\n lastFetchedAt: number;\n leagueId: FixtureRecordAllOfLeagueId;\n};\n\nexport type FixtureRecord = FixtureItem & FixtureRecordAllOf;\n\nexport interface BetValue {\n odd: string;\n value: string;\n}\n\nexport interface BetItem {\n id: number;\n name: string;\n values: BetValue[];\n}\n\nexport interface FreeAnalysisBalanceResponse {\n can_unlock: boolean;\n max_free_analysis: number;\n next_unlock_date: string;\n unlocked_analysis: number;\n}\n\nexport type UnlockFailReason =\n (typeof UnlockFailReason)[keyof typeof UnlockFailReason];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const UnlockFailReason = {\n error: \"error\",\n max_analysis: \"max_analysis\",\n already_unlocked: \"already_unlocked\",\n success: \"success\",\n} as const;\n\nexport interface UnlockMatchResponse {\n message: string;\n reason: UnlockFailReason;\n success: boolean;\n}\n\nexport type MatchAnalysisItemTeamComparison = {\n away_team: MatchAnalysisTeamStats;\n home_team: MatchAnalysisTeamStats;\n reasoning: string;\n};\n\nexport type MatchAnalysisItemSummary = {\n match_importance: number;\n predictability: number;\n safe_for_betting: boolean;\n};\n\nexport interface MatchAnalysisItem {\n correct_score: string;\n correct_score_reasoning: string;\n id: string;\n match_preview: string;\n recommendations: MatchAnalysisItemRecommendations;\n summary: MatchAnalysisItemSummary;\n team_comparison: MatchAnalysisItemTeamComparison;\n}\n\nexport type MatchAnalysisItemRecommendationsThingsToAvoidItem = {\n short_reasoning: string;\n title: string;\n};\n\nexport type MatchAnalysisItemRecommendationsBettingRecommendationsItem = {\n short_reasoning: string;\n title: string;\n};\n\nexport type MatchAnalysisItemRecommendations = {\n betting_recommendations: MatchAnalysisItemRecommendationsBettingRecommendationsItem[];\n things_to_avoid: MatchAnalysisItemRecommendationsThingsToAvoidItem[];\n};\n\nexport interface MatchAnalysisTeamStats {\n injury_impact: number;\n motivations: number;\n recent_form: number;\n tactical_advantage: number;\n team_health_index: number;\n}\n\nexport interface CognitoSettings {\n cognitoDomain: string;\n identityPoolId: string;\n redirectSignIn: string[];\n redirectSignOut: string[];\n userPoolClientId: string;\n userPoolId: string;\n}\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickPartnerExcludeKeyofPartnerStripeSettings {\n cognitoSettings: CognitoSettings;\n frontendUrl: string;\n id: string;\n name: string;\n}\n\n/**\n * Construct a type with the properties of T except for those in type K.\n */\nexport type OmitPartnerStripeSettings =\n PickPartnerExcludeKeyofPartnerStripeSettings;\n\nexport interface LeagueItem {\n country: Country;\n league: League;\n seasons: LeagueSeason[];\n}\n\nexport interface Settings {\n id: string;\n leagues: LeagueItem[];\n}\n\nexport type LeagueSeasonYear = string | number;\n\nexport type LeagueSeasonCoverageFixtures = {\n events: boolean;\n lineups: boolean;\n statistics_fixtures: boolean;\n statistics_players: boolean;\n};\n\nexport type LeagueSeasonCoverage = {\n fixtures: LeagueSeasonCoverageFixtures;\n injuries: boolean;\n odds: boolean;\n players: boolean;\n predictions: boolean;\n standings: boolean;\n top_assists: boolean;\n top_cards: boolean;\n top_scorers: boolean;\n};\n\nexport interface LeagueSeason {\n coverage: LeagueSeasonCoverage;\n current: boolean;\n end: string;\n start: string;\n year: LeagueSeasonYear;\n}\n\nexport interface Country {\n /** @nullable */\n code: string | null;\n /** @nullable */\n flag: string | null;\n name: string;\n}\n\nexport interface TopPlayersRecord {\n away: PlayerRecord[];\n home: PlayerRecord[];\n}\n\nexport interface OddValue {\n odd: number;\n value: string;\n}\n\nexport interface OddItem {\n id: number;\n name: string;\n values: OddValue[];\n}\n\nexport interface StatisticsObject {\n away_fixtures: RecentFixtureRecord[];\n h2h_fixtures: RecentFixtureRecord[];\n home_fixtures: RecentFixtureRecord[];\n injuries: InjuredPlayersRecord;\n lineups: LineupsPlayerRecord;\n odds: OddItem[];\n rankings: StatisticsRanking;\n standings: StatisticsStandingsRecord;\n summary: StatisticsSummary;\n top_players: TopPlayersRecord;\n}\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport interface RecordPlayerStatisticsKeysNumberOrNull {\n assists: number;\n blocks: number;\n dribbles: number;\n dribbles_past: number;\n dribbles_success: number;\n duels: number;\n duels_won: number;\n fouls_committed: number;\n fouls_drawn: number;\n goals_conceded: number;\n goals_total: number;\n interceptions: number;\n minutes: number;\n offsides: number;\n pass_accuracy: number;\n passes_key: number;\n passes_total: number;\n rating: number;\n red_cards: number;\n saves: number;\n shots_on_goal: number;\n shots_total: number;\n tackles: number;\n yellow_cards: number;\n}\n\nexport interface PlayerRecord {\n player: Player;\n statistics: RecordPlayerStatisticsKeysNumberOrNull;\n}\n\nexport interface InjuredPlayersRecord {\n away: PlayerRecord[];\n home: PlayerRecord[];\n}\n\nexport interface LineupsPlayers {\n starting_xi: PlayerRecord[];\n substitutes: PlayerRecord[];\n}\n\nexport interface LineupsPlayerRecord {\n away: LineupsPlayers;\n home: LineupsPlayers;\n}\n\nexport type PlayerPosition =\n (typeof PlayerPosition)[keyof typeof PlayerPosition];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const PlayerPosition = {\n G: \"G\",\n D: \"D\",\n M: \"M\",\n F: \"F\",\n} as const;\n\nexport interface Player {\n id: number;\n name: string;\n played_times: number;\n position: PlayerPosition;\n team_id: number;\n}\n\nexport type RecentFixtureRecordTeams = {\n away: RecentFixtureTeam;\n home: RecentFixtureTeam;\n};\n\nexport type RecentFixtureRecordScore = {\n extratime: RecentFixtureGoals;\n fulltime: RecentFixtureGoals;\n halftime: RecentFixtureGoals;\n penalty: RecentFixtureGoals;\n};\n\nexport type StatisticsRecordTeam = {\n id: number;\n logo: string;\n name: string;\n};\n\nexport interface StatisticsRecord {\n statistics: RecordStatisticsKeysNumber;\n team: StatisticsRecordTeam;\n}\n\nexport interface RecentFixtureGoals {\n /** @nullable */\n away: number | null;\n /** @nullable */\n home: number | null;\n}\n\nexport interface RecentFixtureTeam {\n id: number;\n logo: string;\n name: string;\n ranking: number;\n winner: boolean;\n}\n\nexport interface RecentFixtureLeague {\n country: string;\n flag: string;\n id: number;\n logo: string;\n name: string;\n round: string;\n season: number;\n}\n\nexport interface RecentFixtureInfo {\n date: string;\n id: number;\n referee: string;\n timestamp: number;\n timezone: string;\n}\n\nexport interface RecentFixtureRecord {\n fixture: RecentFixtureInfo;\n goals: RecentFixtureGoals;\n league: RecentFixtureLeague;\n score: RecentFixtureRecordScore;\n statistics: StatisticsRecord[];\n teams: RecentFixtureRecordTeams;\n}\n\nexport type StatisticsStandingBreakdownGoals = {\n against: number;\n goals_for: number;\n};\n\nexport interface StatisticsStandingBreakdown {\n draw: number;\n goals: StatisticsStandingBreakdownGoals;\n lose: number;\n played: number;\n win: number;\n}\n\nexport interface StatisticsStanding {\n all: StatisticsStandingBreakdown;\n away: StatisticsStandingBreakdown;\n form: string;\n goalsDiff: number;\n group: string;\n home: StatisticsStandingBreakdown;\n points: number;\n rank: number;\n}\n\nexport interface StatisticsStandingsRecord {\n away: StatisticsStanding;\n home: StatisticsStanding;\n}\n\nexport interface StatisticsRanking {\n away: number;\n home: number;\n}\n\nexport interface StatisticsSummary {\n average_statistics: StatisticsSummaryAverageStatistics;\n missing_statistics: StatisticsSummaryMissingStatistics;\n}\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport interface RecordStatisticsKeysNumber {\n ball_possessions: number;\n blocked_shots: number;\n corners: number;\n expected_goals: number;\n first_half_goals: number;\n fouls: number;\n goalkeeper_saves: number;\n offsides: number;\n passes_accurate: number;\n passes_percentage: number;\n red_cards: number;\n second_half_goals: number;\n shot_accuracy: number;\n shots_insidebox: number;\n shots_off_target: number;\n shots_on_target: number;\n shots_outsidebox: number;\n total_passes: number;\n total_shots: number;\n yellow_cards: number;\n}\n\nexport type StatisticsSummaryAverageStatisticsHome = {\n played_away: RecordStatisticsKeysNumber;\n played_home: RecordStatisticsKeysNumber;\n total: RecordStatisticsKeysNumber;\n};\n\nexport type StatisticsSummaryAverageStatisticsH2h = {\n away: RecordStatisticsKeysNumber;\n home: RecordStatisticsKeysNumber;\n};\n\nexport type StatisticsSummaryAverageStatisticsAway = {\n played_away: RecordStatisticsKeysNumber;\n played_home: RecordStatisticsKeysNumber;\n total: RecordStatisticsKeysNumber;\n};\n\nexport type StatisticsSummaryAverageStatistics = {\n away: StatisticsSummaryAverageStatisticsAway;\n h2h: StatisticsSummaryAverageStatisticsH2h;\n home: StatisticsSummaryAverageStatisticsHome;\n};\n\nexport type StatisticsAverage = RecordStatisticsKeysNumber;\n\nexport interface MissingStatisticsBreakdown {\n missing: number;\n total: number;\n}\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport interface RecordStatisticsKeysMissingStatisticsBreakdown {\n ball_possessions: MissingStatisticsBreakdown;\n blocked_shots: MissingStatisticsBreakdown;\n corners: MissingStatisticsBreakdown;\n expected_goals: MissingStatisticsBreakdown;\n first_half_goals: MissingStatisticsBreakdown;\n fouls: MissingStatisticsBreakdown;\n goalkeeper_saves: MissingStatisticsBreakdown;\n offsides: MissingStatisticsBreakdown;\n passes_accurate: MissingStatisticsBreakdown;\n passes_percentage: MissingStatisticsBreakdown;\n red_cards: MissingStatisticsBreakdown;\n second_half_goals: MissingStatisticsBreakdown;\n shot_accuracy: MissingStatisticsBreakdown;\n shots_insidebox: MissingStatisticsBreakdown;\n shots_off_target: MissingStatisticsBreakdown;\n shots_on_target: MissingStatisticsBreakdown;\n shots_outsidebox: MissingStatisticsBreakdown;\n total_passes: MissingStatisticsBreakdown;\n total_shots: MissingStatisticsBreakdown;\n yellow_cards: MissingStatisticsBreakdown;\n}\n\nexport type StatisticsSummaryMissingStatistics = {\n breakdown: RecordStatisticsKeysMissingStatisticsBreakdown;\n total: MissingStatisticsBreakdown;\n};\n\nexport interface Strategy {\n created_at: string;\n filters: StrategyFilter[];\n id: string;\n name: string;\n updated_at: string;\n user_id: string;\n}\n\nexport interface UpdateStrategyBody {\n filters: StrategyFilter[];\n id: string;\n name: string;\n}\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickStrategyExcludeKeyofStrategyUserIdOrCreatedAtOrUpdatedAt {\n filters: StrategyFilter[];\n id: string;\n name: string;\n}\n\nexport interface UpdateStrategyResponse {\n created_at: string;\n filters: StrategyFilter[];\n id: string;\n name: string;\n updated_at: string;\n user_id: string;\n}\n\nexport interface CreateStrategyBody {\n filters: StrategyFilter[];\n name: string;\n}\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickStrategyExcludeKeyofStrategyIdOrUserIdOrCreatedAtOrUpdatedAt {\n filters: StrategyFilter[];\n name: string;\n}\n\nexport interface CreateStrategyResponse {\n created_at: string;\n filters: StrategyFilter[];\n id: string;\n name: string;\n updated_at: string;\n user_id: string;\n}\n\nexport type StrategyFilterTypes =\n (typeof StrategyFilterTypes)[keyof typeof StrategyFilterTypes];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const StrategyFilterTypes = {\n ratings: \"ratings\",\n leagues: \"leagues\",\n categories: \"categories\",\n odds: \"odds\",\n edge: \"edge\",\n stake: \"stake\",\n probability: \"probability\",\n predictability: \"predictability\",\n best_choice: \"best_choice\",\n safe_to_bet: \"safe_to_bet\",\n match_importance: \"match_importance\",\n} as const;\n\nexport type StrategyFilterAllOf = {\n id: StrategyFilterTypes;\n};\n\nexport type MultiSelectFilterValueValueItem = string | number;\n\nexport type MultiSelectFilterValueType =\n (typeof MultiSelectFilterValueType)[keyof typeof MultiSelectFilterValueType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MultiSelectFilterValueType = {\n \"multi-select-colored\": \"multi-select-colored\",\n \"multi-select-image\": \"multi-select-image\",\n \"multi-select\": \"multi-select\",\n} as const;\n\nexport interface MultiSelectFilterValue {\n type: MultiSelectFilterValueType;\n value: MultiSelectFilterValueValueItem[];\n}\n\nexport type StrategyFilterValue =\n | SwitchFilterValue\n | RangeFilterValue\n | MultiSelectFilterValue;\n\nexport type StrategyFilter = StrategyFilterValue & StrategyFilterAllOf;\n\nexport type RangeFilterValueValue = {\n /** @nullable */\n max: number | null;\n /** @nullable */\n min: number | null;\n};\n\n/**\n */\nexport type RangeFilterValueType =\n (typeof RangeFilterValueType)[keyof typeof RangeFilterValueType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const RangeFilterValueType = {\n range: \"range\",\n} as const;\n\nexport interface RangeFilterValue {\n /** */\n type: RangeFilterValueType;\n value: RangeFilterValueValue;\n}\n\n/**\n */\nexport type SwitchFilterValueType =\n (typeof SwitchFilterValueType)[keyof typeof SwitchFilterValueType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const SwitchFilterValueType = {\n switch: \"switch\",\n} as const;\n\nexport interface SwitchFilterValue {\n /** */\n type: SwitchFilterValueType;\n value: boolean;\n}\n\nexport interface Subscription {\n active_subscription: boolean;\n /** @nullable */\n cancels_at_date: string | null;\n currency: string;\n id: string;\n interval: string;\n payment_link: string;\n price: number;\n}\n\nexport interface GetSubscriptionsResponse {\n has_active_subscription: boolean;\n manage_subscription_link: string;\n renew_subscription_link: string;\n subscriptions: Subscription[];\n update_subscription_link: string;\n}\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt {\n alias: string;\n id: string;\n team_name: string;\n}\n\nexport type UpdateTeamNameAliasBody =\n PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt;\n\n/**\n * Construct a type with the properties of T except for those in type K.\n */\nexport type OmitTeamNameAliasCreatedAtOrUpdatedAt =\n PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt;\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt {\n alias: string;\n team_name: string;\n}\n\nexport type CreateTeamNameAliasBody =\n PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt;\n\n/**\n * Construct a type with the properties of T except for those in type K.\n */\nexport type OmitTeamNameAliasIdOrCreatedAtOrUpdatedAt =\n PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt;\n\nexport interface TeamNameAlias {\n alias: string;\n created_at: string;\n id: string;\n team_name: string;\n updated_at: string;\n}\n\nexport type TipAnalysisRiskLevel =\n (typeof TipAnalysisRiskLevel)[keyof typeof TipAnalysisRiskLevel];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TipAnalysisRiskLevel = {\n High: \"High\",\n Moderate: \"Moderate\",\n Low: \"Low\",\n} as const;\n\nexport interface TipAnalysisRiskItem {\n level: TipAnalysisRiskLevel;\n reasoning: string;\n title: string;\n}\n\nexport interface TipAnalysisItem {\n id: string;\n reasoning: string;\n risks: TipAnalysisRiskItem[];\n}\n\nexport interface GetInitialFiltersQueryParams {\n from?: string;\n to?: string;\n type: TipType;\n}\n\n/**\n * Construct a type with the properties of T except for those in type K.\n */\nexport type OmitGetTipsQueryParamsType =\n PickGetTipsQueryParamsExcludeKeyofGetTipsQueryParamsType;\n\nexport interface GetTopPerformersQueryParams {\n from?: string;\n to?: string;\n type: TipType;\n}\n\nexport interface PerformerPropsRatings {\n avg_odds: number;\n hit_rate: number;\n key: Ratings;\n profit_loss: number;\n roi: number;\n total_tips: number;\n}\n\nexport interface PerformerPropsCategory {\n avg_odds: number;\n hit_rate: number;\n key: Category;\n profit_loss: number;\n roi: number;\n total_tips: number;\n}\n\nexport interface PerformerPropsLeague {\n avg_odds: number;\n hit_rate: number;\n key: League;\n profit_loss: number;\n roi: number;\n total_tips: number;\n}\n\nexport interface TopPerformers {\n by_category: PerformerPropsCategory[];\n by_league: PerformerPropsLeague[];\n by_rating: PerformerPropsRatings[];\n}\n\nexport interface GetTipsSummaryQueryParams {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_ratings?: Ratings[];\n initialBankroll?: number;\n kellyFraction?: number;\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n type: TipType;\n}\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickGetTipsQueryParamsExcludeKeyofGetTipsQueryParamsIncludeTipStatus {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_ratings?: Ratings[];\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n type: TipType;\n}\n\nexport type TipSummaryBankrollOverTime = {\n default: BankrollStrategySummaryRecord;\n flat_betting: BankrollStrategySummaryRecord;\n kelly_criterion: BankrollStrategySummaryRecord;\n};\n\nexport interface TipSummary {\n avg_bet_amount: number;\n avg_odds: number;\n avg_probability: number;\n bankrollOverTime: TipSummaryBankrollOverTime;\n hit_rate: number;\n profit_loss: number;\n roi: number;\n total_lost: number;\n total_matches: number;\n total_push: number;\n total_staked: number;\n total_tips: number;\n total_unsettled: number;\n total_won: number;\n}\n\nexport interface GetUpcomingTipsQueryParams {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_ratings?: Ratings[];\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n page?: number;\n pageSize?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n type: TipType;\n}\n\nexport interface GetTipsPerformanceQueryParams {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_ratings?: Ratings[];\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n page?: number;\n pageSize?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n type: TipType;\n}\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickGetTipsMatchesQueryParamsExcludeKeyofGetTipsMatchesQueryParamsIncludeMatchStatusOrIncludeTipStatus {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_ratings?: Ratings[];\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n page?: number;\n pageSize?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n type: TipType;\n}\n\nexport interface TipsWithFixture {\n fixture: FixtureItem;\n tips: Tip[];\n}\n\nexport interface TipsWithFixtureResponse {\n currentPage: number;\n data: TipsWithFixture[];\n totalItems: number;\n totalPages: number;\n totalTips: number;\n}\n\nexport interface EmailPreferences {\n feedbackSurvey: boolean;\n marketingEmails: boolean;\n newsLetters: boolean;\n platformUpdates: boolean;\n}\n\nexport interface ValidateRecaptchaBody {\n token: string;\n}\n\nexport interface ValidateRecaptchaResponse {\n /** @nullable */\n error: string | null;\n /** @nullable */\n message: string | null;\n success: boolean;\n}\n\nexport interface CheckEmailResponse {\n error?: string;\n family_name: string;\n given_name: string;\n hasUser: boolean;\n name: string;\n user_status: string;\n}\n\nexport type UpdateUserPreferencesInputAllOf = {\n currency?: string;\n force?: boolean;\n};\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickPartialUserPreferencesExcludeKeyofPartialUserPreferencesIdOrCurrency {\n allowResultOrientedV2?: boolean;\n allowValueBasedV2?: boolean;\n dismissedTelegramPermanently?: boolean;\n hasActiveSubscription?: boolean;\n kellyFraction?: number;\n telegramDismissedAt?: number;\n telegramJoined?: boolean;\n telegramStale?: boolean;\n}\n\nexport type UpdateUserPreferencesInput =\n PickPartialUserPreferencesExcludeKeyofPartialUserPreferencesIdOrCurrency &\n UpdateUserPreferencesInputAllOf;\n\n/**\n * Construct a type with the properties of T except for those in type K.\n */\nexport type OmitPartialUserPreferencesIdOrCurrency =\n PickPartialUserPreferencesExcludeKeyofPartialUserPreferencesIdOrCurrency;\n\nexport interface UpdateUserPreferencesResponse {\n error?: string;\n message: string;\n success?: boolean;\n}\n\nexport interface Currency {\n code: string;\n locale: string;\n name: string;\n symbol: string;\n}\n\nexport interface UserPreferences {\n allowResultOrientedV2?: boolean;\n allowValueBasedV2?: boolean;\n currency: Currency;\n dismissedTelegramPermanently: boolean;\n hasActiveSubscription: boolean;\n id: string;\n kellyFraction: number;\n telegramDismissedAt?: number;\n telegramJoined: boolean;\n telegramStale?: boolean;\n}\n\nexport interface UpdateTelegramBody {\n dismissedTelegramPermanently: boolean;\n telegramJoined: boolean;\n}\n\nexport interface UpdateTelegramPreferencesResponse {\n error?: string;\n success: boolean;\n}\n\nexport interface CreateUserSourceBody {\n referrer?: string;\n source: string;\n utm_source: string;\n}\n\nexport interface UserSource {\n created_at?: string;\n id: string;\n referrer?: string;\n source: string;\n utm_source: string;\n}\n\nexport interface UserTipBody {\n bet_amount: number;\n id: string;\n odds: number;\n}\n\nexport interface GetUserTipsQueryParams {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_ratings?: Ratings[];\n include_tip_status?: TipStatus[];\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n type?: TipType;\n}\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\nexport interface PickGetTipsQueryParamsExcludeKeyofGetTipsQueryParamsType {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_ratings?: Ratings[];\n include_tip_status?: TipStatus[];\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n}\n\nexport interface GetUserTipsSummaryResponse {\n avg_bet_amount: number;\n avg_odds: number;\n avg_probability: number;\n bankrollOverTime: GetUserTipsSummaryResponseBankrollOverTime;\n hit_rate: number;\n profit_loss: number;\n roi: number;\n total_lost: number;\n total_matches: number;\n total_push: number;\n total_staked: number;\n total_tips: number;\n total_unsettled: number;\n total_won: number;\n}\n\nexport interface BankrollStrategySummaryDataItem {\n bankroll: number;\n date: string;\n tip_id: string;\n}\n\nexport interface BankrollStrategySummaryRecord {\n bankroll: number;\n data: BankrollStrategySummaryDataItem[];\n hit_rate: number;\n name: string;\n profit_loss: number;\n roi_percent: number;\n total_evaluated_bets: number;\n total_lost: number;\n total_push: number;\n total_staked: number;\n total_unsettled: number;\n total_won: number;\n}\n\nexport type GetUserTipsSummaryResponseBankrollOverTime = {\n default: BankrollStrategySummaryRecord;\n flat_betting: BankrollStrategySummaryRecord;\n kelly_criterion: BankrollStrategySummaryRecord;\n};\n\nexport type SortOrder = (typeof SortOrder)[keyof typeof SortOrder];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const SortOrder = {\n asc: \"asc\",\n desc: \"desc\",\n} as const;\n\nexport type TipStatus = (typeof TipStatus)[keyof typeof TipStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TipStatus = {\n won: \"won\",\n lost: \"lost\",\n push: \"push\",\n unsettled: \"unsettled\",\n} as const;\n\nexport type MatchStatus = (typeof MatchStatus)[keyof typeof MatchStatus];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const MatchStatus = {\n live: \"live\",\n \"not-started\": \"not-started\",\n finished: \"finished\",\n} as const;\n\nexport interface UserTipsWithFixture {\n fixture: FixtureItem;\n tips: UserTip[];\n}\n\nexport interface UserTipsWithFixtureResponse {\n currentPage: number;\n data: UserTipsWithFixture[];\n totalItems: number;\n totalPages: number;\n totalTips: number;\n}\n\nexport type TipType = (typeof TipType)[keyof typeof TipType];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const TipType = {\n value: \"value\",\n resultOriented: \"resultOriented\",\n \"value-v2\": \"value-v2\",\n} as const;\n\nexport type UserTipAllOf = {\n currency: string;\n type: TipType;\n user_id: string;\n};\n\nexport type Category = (typeof Category)[keyof typeof Category];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const Category = {\n Match_Winner: \"Match Winner\",\n \"First-Half_Result\": \"First-Half Result\",\n \"Second-Half_Result\": \"Second-Half Result\",\n \"Total_Goals_Over/Under\": \"Total Goals Over/Under\",\n \"Home_Goals_Over/Under\": \"Home Goals Over/Under\",\n \"Away_Goals_Over/Under\": \"Away Goals Over/Under\",\n Both_Teams_to_Score: \"Both Teams to Score\",\n Player_to_Score: \"Player to Score\",\n Player_to_Score_or_Assist: \"Player to Score or Assist\",\n \"Total_Corners_Over/Under\": \"Total Corners Over/Under\",\n \"Home_Corners_Over/Under\": \"Home Corners Over/Under\",\n \"Away_Corners_Over/Under\": \"Away Corners Over/Under\",\n \"Total_Cards_Over/Under\": \"Total Cards Over/Under\",\n \"Home_Cards_Over/Under\": \"Home Cards Over/Under\",\n \"Away_Cards_Over/Under\": \"Away Cards Over/Under\",\n Asian_Handicap: \"Asian Handicap\",\n Draw_No_Bet: \"Draw No Bet\",\n Double_Chance: \"Double Chance\",\n Correct_Score: \"Correct Score\",\n Team_to_Score_First: \"Team to Score First\",\n Both_Teams_to_Score_in_Both_Halves: \"Both Teams to Score in Both Halves\",\n Team_to_Score_in_Both_Halves: \"Team to Score in Both Halves\",\n Clean_Sheet: \"Clean Sheet\",\n Win_to_Nil: \"Win to Nil\",\n Penalty_Awarded: \"Penalty Awarded\",\n Red_Card_Shown: \"Red Card Shown\",\n} as const;\n\nexport type Ratings = (typeof Ratings)[keyof typeof Ratings];\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const Ratings = {\n super_safe: \"super safe\",\n safe: \"safe\",\n value: \"value\",\n risky: \"risky\",\n} as const;\n\nexport interface GetTipsMatchesQueryParams {\n best_choice?: boolean;\n from?: string;\n include_categories?: Category[];\n include_leagues?: number[];\n include_match_status?: MatchStatus[];\n include_ratings?: Ratings[];\n include_tip_status?: TipStatus[];\n max_edge?: number;\n max_match_importance?: number;\n max_odds?: number;\n max_predictability?: number;\n max_probability?: number;\n max_stake?: number;\n min_edge?: number;\n min_match_importance?: number;\n min_odds?: number;\n min_predictability?: number;\n min_probability?: number;\n min_stake?: number;\n page?: number;\n pageSize?: number;\n safe_to_bet?: boolean;\n season?: number;\n sort?: SortOrder;\n to?: string;\n type: TipType;\n}\n\nexport interface Tip {\n best_choice: boolean;\n bet_amount: number;\n category: Category;\n edge: number;\n fixture_id: string;\n id: string;\n league_id: number;\n name: string;\n odds: number;\n probability: number;\n rating: Ratings;\n reasoning: string;\n season: number;\n start_date: string;\n /** @nullable */\n winner?: boolean | null;\n}\n\nexport type UserTip = Tip & UserTipAllOf;\n\nexport interface Score {\n /** @nullable */\n away: number | null;\n /** @nullable */\n home: number | null;\n}\n\nexport interface ScoreRecord {\n extratime: Score;\n fulltime: Score;\n halftime: Score;\n penalty: Score;\n}\n\nexport interface Team {\n id: number;\n logo: string;\n name: string;\n /** @nullable */\n winner: boolean | null;\n}\n\nexport interface TeamsRecord {\n away: Team;\n home: Team;\n}\n\nexport type LeagueId = number | string;\n\nexport interface League {\n country?: string;\n flag?: string;\n id: LeagueId;\n logo: string;\n name: string;\n round?: string;\n season?: number;\n type?: string;\n}\n\nexport interface FixtureItem {\n fixture: Fixture;\n goals: Score;\n league: League;\n score: ScoreRecord;\n teams: TeamsRecord;\n}\n\nexport type FixtureVenue = {\n city: string;\n /** @nullable */\n id: number | null;\n name: string;\n};\n\nexport type FixturePeriods = {\n first: number;\n second: number;\n};\n\nexport interface FixtureStatusResponse {\n elapsed: number;\n long: string;\n short: string;\n}\n\nexport interface Fixture {\n date: string;\n id: number;\n periods: FixturePeriods;\n referee: string;\n status: FixtureStatusResponse;\n timestamp: number;\n timezone: string;\n venue: FixtureVenue;\n}\n\nexport const getUserTips = (\n params: GetUserTipsParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UserTipsWithFixtureResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/user-tips`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetUserTipsQueryKey = (params: GetUserTipsParams) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/user-tips`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetUserTipsQueryOptions = <\n TData = Awaited<ReturnType<typeof getUserTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUserTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTips>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetUserTipsQueryKey(params);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getUserTips>>> = ({\n signal,\n }) => getUserTips(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getUserTips>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetUserTipsQueryResult = NonNullable<\n Awaited<ReturnType<typeof getUserTips>>\n>;\nexport type GetUserTipsQueryError = AxiosError<unknown>;\n\nexport function useGetUserTips<\n TData = Awaited<ReturnType<typeof getUserTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUserTipsParams,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTips>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserTips>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetUserTips<\n TData = Awaited<ReturnType<typeof getUserTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUserTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTips>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserTips>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetUserTips<\n TData = Awaited<ReturnType<typeof getUserTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUserTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTips>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetUserTips<\n TData = Awaited<ReturnType<typeof getUserTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUserTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTips>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetUserTipsQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const createUserTip = (\n userTipBody: UserTipBody,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<void>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/user-tips`,\n userTipBody,\n options,\n );\n};\n\nexport const getCreateUserTipMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof createUserTip>>,\n TError,\n { data: UserTipBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof createUserTip>>,\n TError,\n { data: UserTipBody },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof createUserTip>>,\n { data: UserTipBody }\n > = (props) => {\n const { data } = props ?? {};\n\n return createUserTip(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type CreateUserTipMutationResult = NonNullable<\n Awaited<ReturnType<typeof createUserTip>>\n>;\nexport type CreateUserTipMutationBody = UserTipBody;\nexport type CreateUserTipMutationError = AxiosError<unknown>;\n\nexport const useCreateUserTip = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof createUserTip>>,\n TError,\n { data: UserTipBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof createUserTip>>,\n TError,\n { data: UserTipBody },\n TContext\n> => {\n const mutationOptions = getCreateUserTipMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const deleteUserTips = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<void>> => {\n return axios.delete(\n `https://api.football-genie.com/o1-typescript-service/user-tips`,\n options,\n );\n};\n\nexport const getDeleteUserTipsMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteUserTips>>,\n TError,\n void,\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof deleteUserTips>>,\n TError,\n void,\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof deleteUserTips>>,\n void\n > = () => {\n return deleteUserTips(axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type DeleteUserTipsMutationResult = NonNullable<\n Awaited<ReturnType<typeof deleteUserTips>>\n>;\n\nexport type DeleteUserTipsMutationError = AxiosError<unknown>;\n\nexport const useDeleteUserTips = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteUserTips>>,\n TError,\n void,\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof deleteUserTips>>,\n TError,\n void,\n TContext\n> => {\n const mutationOptions = getDeleteUserTipsMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getUserTipsSummary = (\n params?: GetUserTipsSummaryParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<GetUserTipsSummaryResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/user-tips/summary`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetUserTipsSummaryQueryKey = (\n params?: GetUserTipsSummaryParams,\n) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/user-tips/summary`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetUserTipsSummaryQueryOptions = <\n TData = Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params?: GetUserTipsSummaryParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey =\n queryOptions?.queryKey ?? getGetUserTipsSummaryQueryKey(params);\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getUserTipsSummary>>\n > = ({ signal }) => getUserTipsSummary(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetUserTipsSummaryQueryResult = NonNullable<\n Awaited<ReturnType<typeof getUserTipsSummary>>\n>;\nexport type GetUserTipsSummaryQueryError = AxiosError<unknown>;\n\nexport function useGetUserTipsSummary<\n TData = Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params: undefined | GetUserTipsSummaryParams,\n options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetUserTipsSummary<\n TData = Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params?: GetUserTipsSummaryParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetUserTipsSummary<\n TData = Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params?: GetUserTipsSummaryParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetUserTipsSummary<\n TData = Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params?: GetUserTipsSummaryParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserTipsSummary>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetUserTipsSummaryQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getUserTip = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UserTip>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/user-tips/${id}`,\n options,\n );\n};\n\nexport const getGetUserTipQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/user-tips/${id}`,\n ] as const;\n};\n\nexport const getGetUserTipQueryOptions = <\n TData = Awaited<ReturnType<typeof getUserTip>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTip>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetUserTipQueryKey(id);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getUserTip>>> = ({\n signal,\n }) => getUserTip(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof getUserTip>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetUserTipQueryResult = NonNullable<\n Awaited<ReturnType<typeof getUserTip>>\n>;\nexport type GetUserTipQueryError = AxiosError<unknown>;\n\nexport function useGetUserTip<\n TData = Awaited<ReturnType<typeof getUserTip>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTip>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserTip>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetUserTip<\n TData = Awaited<ReturnType<typeof getUserTip>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTip>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserTip>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetUserTip<\n TData = Awaited<ReturnType<typeof getUserTip>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTip>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetUserTip<\n TData = Awaited<ReturnType<typeof getUserTip>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserTip>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetUserTipQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const deleteUserTip = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<DeleteUserTip200>> => {\n return axios.delete(\n `https://api.football-genie.com/o1-typescript-service/user-tips/${id}`,\n options,\n );\n};\n\nexport const getDeleteUserTipMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteUserTip>>,\n TError,\n { id: string },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof deleteUserTip>>,\n TError,\n { id: string },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof deleteUserTip>>,\n { id: string }\n > = (props) => {\n const { id } = props ?? {};\n\n return deleteUserTip(id, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type DeleteUserTipMutationResult = NonNullable<\n Awaited<ReturnType<typeof deleteUserTip>>\n>;\n\nexport type DeleteUserTipMutationError = AxiosError<unknown>;\n\nexport const useDeleteUserTip = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteUserTip>>,\n TError,\n { id: string },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof deleteUserTip>>,\n TError,\n { id: string },\n TContext\n> => {\n const mutationOptions = getDeleteUserTipMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getUserSource = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UserSource>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/user-source`,\n options,\n );\n};\n\nexport const getGetUserSourceQueryKey = () => {\n return [\n `https://api.football-genie.com/o1-typescript-service/user-source`,\n ] as const;\n};\n\nexport const getGetUserSourceQueryOptions = <\n TData = Awaited<ReturnType<typeof getUserSource>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserSource>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetUserSourceQueryKey();\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getUserSource>>> = ({\n signal,\n }) => getUserSource({ signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getUserSource>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetUserSourceQueryResult = NonNullable<\n Awaited<ReturnType<typeof getUserSource>>\n>;\nexport type GetUserSourceQueryError = AxiosError<unknown>;\n\nexport function useGetUserSource<\n TData = Awaited<ReturnType<typeof getUserSource>>,\n TError = AxiosError<unknown>,\n>(options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserSource>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserSource>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetUserSource<\n TData = Awaited<ReturnType<typeof getUserSource>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserSource>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserSource>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetUserSource<\n TData = Awaited<ReturnType<typeof getUserSource>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserSource>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetUserSource<\n TData = Awaited<ReturnType<typeof getUserSource>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getUserSource>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetUserSourceQueryOptions(options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const createUserSource = (\n createUserSourceBody: CreateUserSourceBody,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UserSource>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/user-source`,\n createUserSourceBody,\n options,\n );\n};\n\nexport const getCreateUserSourceMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof createUserSource>>,\n TError,\n { data: CreateUserSourceBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof createUserSource>>,\n TError,\n { data: CreateUserSourceBody },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof createUserSource>>,\n { data: CreateUserSourceBody }\n > = (props) => {\n const { data } = props ?? {};\n\n return createUserSource(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type CreateUserSourceMutationResult = NonNullable<\n Awaited<ReturnType<typeof createUserSource>>\n>;\nexport type CreateUserSourceMutationBody = CreateUserSourceBody;\nexport type CreateUserSourceMutationError = AxiosError<unknown>;\n\nexport const useCreateUserSource = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof createUserSource>>,\n TError,\n { data: CreateUserSourceBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof createUserSource>>,\n TError,\n { data: CreateUserSourceBody },\n TContext\n> => {\n const mutationOptions = getCreateUserSourceMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const updateTelegramPreferences = (\n updateTelegramBody: UpdateTelegramBody,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UpdateTelegramPreferencesResponse>> => {\n return axios.put(\n `https://api.football-genie.com/o1-typescript-service/user-preferences/telegram-preferences`,\n updateTelegramBody,\n options,\n );\n};\n\nexport const getUpdateTelegramPreferencesMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateTelegramPreferences>>,\n TError,\n { data: UpdateTelegramBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof updateTelegramPreferences>>,\n TError,\n { data: UpdateTelegramBody },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof updateTelegramPreferences>>,\n { data: UpdateTelegramBody }\n > = (props) => {\n const { data } = props ?? {};\n\n return updateTelegramPreferences(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type UpdateTelegramPreferencesMutationResult = NonNullable<\n Awaited<ReturnType<typeof updateTelegramPreferences>>\n>;\nexport type UpdateTelegramPreferencesMutationBody = UpdateTelegramBody;\nexport type UpdateTelegramPreferencesMutationError = AxiosError<unknown>;\n\nexport const useUpdateTelegramPreferences = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateTelegramPreferences>>,\n TError,\n { data: UpdateTelegramBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof updateTelegramPreferences>>,\n TError,\n { data: UpdateTelegramBody },\n TContext\n> => {\n const mutationOptions = getUpdateTelegramPreferencesMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getUserPreferences = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UserPreferences>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/user-preferences`,\n options,\n );\n};\n\nexport const getGetUserPreferencesQueryKey = () => {\n return [\n `https://api.football-genie.com/o1-typescript-service/user-preferences`,\n ] as const;\n};\n\nexport const getGetUserPreferencesQueryOptions = <\n TData = Awaited<ReturnType<typeof getUserPreferences>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserPreferences>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n}) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetUserPreferencesQueryKey();\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getUserPreferences>>\n > = ({ signal }) => getUserPreferences({ signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getUserPreferences>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetUserPreferencesQueryResult = NonNullable<\n Awaited<ReturnType<typeof getUserPreferences>>\n>;\nexport type GetUserPreferencesQueryError = AxiosError<unknown>;\n\nexport function useGetUserPreferences<\n TData = Awaited<ReturnType<typeof getUserPreferences>>,\n TError = AxiosError<unknown>,\n>(options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserPreferences>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserPreferences>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetUserPreferences<\n TData = Awaited<ReturnType<typeof getUserPreferences>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserPreferences>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUserPreferences>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetUserPreferences<\n TData = Awaited<ReturnType<typeof getUserPreferences>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserPreferences>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetUserPreferences<\n TData = Awaited<ReturnType<typeof getUserPreferences>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUserPreferences>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetUserPreferencesQueryOptions(options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const updateUserPreferences = (\n updateUserPreferencesInput: UpdateUserPreferencesInput,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UpdateUserPreferencesResponse>> => {\n return axios.put(\n `https://api.football-genie.com/o1-typescript-service/user-preferences`,\n updateUserPreferencesInput,\n options,\n );\n};\n\nexport const getUpdateUserPreferencesMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateUserPreferences>>,\n TError,\n { data: UpdateUserPreferencesInput },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof updateUserPreferences>>,\n TError,\n { data: UpdateUserPreferencesInput },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof updateUserPreferences>>,\n { data: UpdateUserPreferencesInput }\n > = (props) => {\n const { data } = props ?? {};\n\n return updateUserPreferences(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type UpdateUserPreferencesMutationResult = NonNullable<\n Awaited<ReturnType<typeof updateUserPreferences>>\n>;\nexport type UpdateUserPreferencesMutationBody = UpdateUserPreferencesInput;\nexport type UpdateUserPreferencesMutationError = AxiosError<unknown>;\n\nexport const useUpdateUserPreferences = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateUserPreferences>>,\n TError,\n { data: UpdateUserPreferencesInput },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof updateUserPreferences>>,\n TError,\n { data: UpdateUserPreferencesInput },\n TContext\n> => {\n const mutationOptions = getUpdateUserPreferencesMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const checkEmail = (\n email: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<CheckEmailResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/user-pool/check-email/${email}`,\n options,\n );\n};\n\nexport const getCheckEmailQueryKey = (email: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/user-pool/check-email/${email}`,\n ] as const;\n};\n\nexport const getCheckEmailQueryOptions = <\n TData = Awaited<ReturnType<typeof checkEmail>>,\n TError = AxiosError<unknown>,\n>(\n email: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof checkEmail>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getCheckEmailQueryKey(email);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof checkEmail>>> = ({\n signal,\n }) => checkEmail(email, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!email,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof checkEmail>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type CheckEmailQueryResult = NonNullable<\n Awaited<ReturnType<typeof checkEmail>>\n>;\nexport type CheckEmailQueryError = AxiosError<unknown>;\n\nexport function useCheckEmail<\n TData = Awaited<ReturnType<typeof checkEmail>>,\n TError = AxiosError<unknown>,\n>(\n email: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof checkEmail>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof checkEmail>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useCheckEmail<\n TData = Awaited<ReturnType<typeof checkEmail>>,\n TError = AxiosError<unknown>,\n>(\n email: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof checkEmail>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof checkEmail>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useCheckEmail<\n TData = Awaited<ReturnType<typeof checkEmail>>,\n TError = AxiosError<unknown>,\n>(\n email: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof checkEmail>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useCheckEmail<\n TData = Awaited<ReturnType<typeof checkEmail>>,\n TError = AxiosError<unknown>,\n>(\n email: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof checkEmail>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getCheckEmailQueryOptions(email, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const validateRecaptcha = (\n validateRecaptchaBody: ValidateRecaptchaBody,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<ValidateRecaptchaResponse>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/user-pool/validate-recaptcha`,\n validateRecaptchaBody,\n options,\n );\n};\n\nexport const getValidateRecaptchaMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof validateRecaptcha>>,\n TError,\n { data: ValidateRecaptchaBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof validateRecaptcha>>,\n TError,\n { data: ValidateRecaptchaBody },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof validateRecaptcha>>,\n { data: ValidateRecaptchaBody }\n > = (props) => {\n const { data } = props ?? {};\n\n return validateRecaptcha(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type ValidateRecaptchaMutationResult = NonNullable<\n Awaited<ReturnType<typeof validateRecaptcha>>\n>;\nexport type ValidateRecaptchaMutationBody = ValidateRecaptchaBody;\nexport type ValidateRecaptchaMutationError = AxiosError<unknown>;\n\nexport const useValidateRecaptcha = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof validateRecaptcha>>,\n TError,\n { data: ValidateRecaptchaBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof validateRecaptcha>>,\n TError,\n { data: ValidateRecaptchaBody },\n TContext\n> => {\n const mutationOptions = getValidateRecaptchaMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const deleteUser = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<void>> => {\n return axios.delete(\n `https://api.football-genie.com/o1-typescript-service/user-pool/delete-user`,\n options,\n );\n};\n\nexport const getDeleteUserMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteUser>>,\n TError,\n void,\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof deleteUser>>,\n TError,\n void,\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof deleteUser>>,\n void\n > = () => {\n return deleteUser(axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type DeleteUserMutationResult = NonNullable<\n Awaited<ReturnType<typeof deleteUser>>\n>;\n\nexport type DeleteUserMutationError = AxiosError<unknown>;\n\nexport const useDeleteUser = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteUser>>,\n TError,\n void,\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof deleteUser>>,\n TError,\n void,\n TContext\n> => {\n const mutationOptions = getDeleteUserMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getEmailPreferences = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<EmailPreferences>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/user-pool/email-preferences/${id}`,\n options,\n );\n};\n\nexport const getGetEmailPreferencesQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/user-pool/email-preferences/${id}`,\n ] as const;\n};\n\nexport const getGetEmailPreferencesQueryOptions = <\n TData = Awaited<ReturnType<typeof getEmailPreferences>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getEmailPreferences>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetEmailPreferencesQueryKey(id);\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getEmailPreferences>>\n > = ({ signal }) => getEmailPreferences(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof getEmailPreferences>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetEmailPreferencesQueryResult = NonNullable<\n Awaited<ReturnType<typeof getEmailPreferences>>\n>;\nexport type GetEmailPreferencesQueryError = AxiosError<unknown>;\n\nexport function useGetEmailPreferences<\n TData = Awaited<ReturnType<typeof getEmailPreferences>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getEmailPreferences>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getEmailPreferences>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetEmailPreferences<\n TData = Awaited<ReturnType<typeof getEmailPreferences>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getEmailPreferences>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getEmailPreferences>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetEmailPreferences<\n TData = Awaited<ReturnType<typeof getEmailPreferences>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getEmailPreferences>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetEmailPreferences<\n TData = Awaited<ReturnType<typeof getEmailPreferences>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getEmailPreferences>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetEmailPreferencesQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const updateEmailPreferences = (\n id: string,\n emailPreferences: EmailPreferences,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<void>> => {\n return axios.put(\n `https://api.football-genie.com/o1-typescript-service/user-pool/email-preferences/${id}`,\n emailPreferences,\n options,\n );\n};\n\nexport const getUpdateEmailPreferencesMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateEmailPreferences>>,\n TError,\n { id: string; data: EmailPreferences },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof updateEmailPreferences>>,\n TError,\n { id: string; data: EmailPreferences },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof updateEmailPreferences>>,\n { id: string; data: EmailPreferences }\n > = (props) => {\n const { id, data } = props ?? {};\n\n return updateEmailPreferences(id, data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type UpdateEmailPreferencesMutationResult = NonNullable<\n Awaited<ReturnType<typeof updateEmailPreferences>>\n>;\nexport type UpdateEmailPreferencesMutationBody = EmailPreferences;\nexport type UpdateEmailPreferencesMutationError = AxiosError<unknown>;\n\nexport const useUpdateEmailPreferences = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateEmailPreferences>>,\n TError,\n { id: string; data: EmailPreferences },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof updateEmailPreferences>>,\n TError,\n { id: string; data: EmailPreferences },\n TContext\n> => {\n const mutationOptions = getUpdateEmailPreferencesMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const welcome = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<void>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/user-pool/welcome`,\n undefined,\n options,\n );\n};\n\nexport const getWelcomeMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof welcome>>,\n TError,\n void,\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof welcome>>,\n TError,\n void,\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof welcome>>,\n void\n > = () => {\n return welcome(axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type WelcomeMutationResult = NonNullable<\n Awaited<ReturnType<typeof welcome>>\n>;\n\nexport type WelcomeMutationError = AxiosError<unknown>;\n\nexport const useWelcome = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof welcome>>,\n TError,\n void,\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof welcome>>,\n TError,\n void,\n TContext\n> => {\n const mutationOptions = getWelcomeMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getTips = (\n params: GetTipsParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TipsWithFixtureResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/tips`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetTipsQueryKey = (params: GetTipsParams) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/tips`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetTipsQueryOptions = <\n TData = Awaited<ReturnType<typeof getTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTips>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetTipsQueryKey(params);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getTips>>> = ({\n signal,\n }) => getTips(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getTips>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetTipsQueryResult = NonNullable<\n Awaited<ReturnType<typeof getTips>>\n>;\nexport type GetTipsQueryError = AxiosError<unknown>;\n\nexport function useGetTips<\n TData = Awaited<ReturnType<typeof getTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsParams,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTips>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTips>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetTips<\n TData = Awaited<ReturnType<typeof getTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTips>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTips>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetTips<\n TData = Awaited<ReturnType<typeof getTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTips>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetTips<\n TData = Awaited<ReturnType<typeof getTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTips>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetTipsQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getTipsPerformance = (\n params: GetTipsPerformanceParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TipsWithFixtureResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/tips/performance`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetTipsPerformanceQueryKey = (\n params: GetTipsPerformanceParams,\n) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/tips/performance`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetTipsPerformanceQueryOptions = <\n TData = Awaited<ReturnType<typeof getTipsPerformance>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsPerformanceParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTipsPerformance>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey =\n queryOptions?.queryKey ?? getGetTipsPerformanceQueryKey(params);\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getTipsPerformance>>\n > = ({ signal }) => getTipsPerformance(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getTipsPerformance>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetTipsPerformanceQueryResult = NonNullable<\n Awaited<ReturnType<typeof getTipsPerformance>>\n>;\nexport type GetTipsPerformanceQueryError = AxiosError<unknown>;\n\nexport function useGetTipsPerformance<\n TData = Awaited<ReturnType<typeof getTipsPerformance>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsPerformanceParams,\n options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTipsPerformance>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTipsPerformance>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetTipsPerformance<\n TData = Awaited<ReturnType<typeof getTipsPerformance>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsPerformanceParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTipsPerformance>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTipsPerformance>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetTipsPerformance<\n TData = Awaited<ReturnType<typeof getTipsPerformance>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsPerformanceParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTipsPerformance>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetTipsPerformance<\n TData = Awaited<ReturnType<typeof getTipsPerformance>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsPerformanceParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTipsPerformance>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetTipsPerformanceQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getUpcomingTips = (\n params: GetUpcomingTipsParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TipsWithFixtureResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/tips/upcoming-tips`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetUpcomingTipsQueryKey = (params: GetUpcomingTipsParams) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/tips/upcoming-tips`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetUpcomingTipsQueryOptions = <\n TData = Awaited<ReturnType<typeof getUpcomingTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUpcomingTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUpcomingTips>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetUpcomingTipsQueryKey(params);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getUpcomingTips>>> = ({\n signal,\n }) => getUpcomingTips(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getUpcomingTips>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetUpcomingTipsQueryResult = NonNullable<\n Awaited<ReturnType<typeof getUpcomingTips>>\n>;\nexport type GetUpcomingTipsQueryError = AxiosError<unknown>;\n\nexport function useGetUpcomingTips<\n TData = Awaited<ReturnType<typeof getUpcomingTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUpcomingTipsParams,\n options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUpcomingTips>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUpcomingTips>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetUpcomingTips<\n TData = Awaited<ReturnType<typeof getUpcomingTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUpcomingTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUpcomingTips>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getUpcomingTips>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetUpcomingTips<\n TData = Awaited<ReturnType<typeof getUpcomingTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUpcomingTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUpcomingTips>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetUpcomingTips<\n TData = Awaited<ReturnType<typeof getUpcomingTips>>,\n TError = AxiosError<unknown>,\n>(\n params: GetUpcomingTipsParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getUpcomingTips>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetUpcomingTipsQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getTipsSummary = (\n params: GetTipsSummaryParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TipSummary>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/tips/summary`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetTipsSummaryQueryKey = (params: GetTipsSummaryParams) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/tips/summary`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetTipsSummaryQueryOptions = <\n TData = Awaited<ReturnType<typeof getTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsSummaryParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipsSummary>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetTipsSummaryQueryKey(params);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getTipsSummary>>> = ({\n signal,\n }) => getTipsSummary(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getTipsSummary>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetTipsSummaryQueryResult = NonNullable<\n Awaited<ReturnType<typeof getTipsSummary>>\n>;\nexport type GetTipsSummaryQueryError = AxiosError<unknown>;\n\nexport function useGetTipsSummary<\n TData = Awaited<ReturnType<typeof getTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsSummaryParams,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipsSummary>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTipsSummary>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetTipsSummary<\n TData = Awaited<ReturnType<typeof getTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsSummaryParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipsSummary>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTipsSummary>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetTipsSummary<\n TData = Awaited<ReturnType<typeof getTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsSummaryParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipsSummary>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetTipsSummary<\n TData = Awaited<ReturnType<typeof getTipsSummary>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTipsSummaryParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipsSummary>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetTipsSummaryQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getTopPerformers = (\n params: GetTopPerformersParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TopPerformers>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/tips/top-performers`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetTopPerformersQueryKey = (params: GetTopPerformersParams) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/tips/top-performers`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetTopPerformersQueryOptions = <\n TData = Awaited<ReturnType<typeof getTopPerformers>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTopPerformersParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTopPerformers>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey =\n queryOptions?.queryKey ?? getGetTopPerformersQueryKey(params);\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getTopPerformers>>\n > = ({ signal }) => getTopPerformers(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getTopPerformers>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetTopPerformersQueryResult = NonNullable<\n Awaited<ReturnType<typeof getTopPerformers>>\n>;\nexport type GetTopPerformersQueryError = AxiosError<unknown>;\n\nexport function useGetTopPerformers<\n TData = Awaited<ReturnType<typeof getTopPerformers>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTopPerformersParams,\n options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTopPerformers>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTopPerformers>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetTopPerformers<\n TData = Awaited<ReturnType<typeof getTopPerformers>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTopPerformersParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTopPerformers>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTopPerformers>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetTopPerformers<\n TData = Awaited<ReturnType<typeof getTopPerformers>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTopPerformersParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTopPerformers>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetTopPerformers<\n TData = Awaited<ReturnType<typeof getTopPerformers>>,\n TError = AxiosError<unknown>,\n>(\n params: GetTopPerformersParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTopPerformers>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetTopPerformersQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const initialFiltersGet = (\n params: InitialFiltersGetParams,\n options?: AxiosRequestConfig,\n): Promise<\n AxiosResponse<PickGetTipsQueryParamsExcludeKeyofGetTipsQueryParamsType>\n> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/tips/initial-filters`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getInitialFiltersGetQueryKey = (\n params: InitialFiltersGetParams,\n) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/tips/initial-filters`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getInitialFiltersGetQueryOptions = <\n TData = Awaited<ReturnType<typeof initialFiltersGet>>,\n TError = AxiosError<unknown>,\n>(\n params: InitialFiltersGetParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof initialFiltersGet>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey =\n queryOptions?.queryKey ?? getInitialFiltersGetQueryKey(params);\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof initialFiltersGet>>\n > = ({ signal }) => initialFiltersGet(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof initialFiltersGet>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type InitialFiltersGetQueryResult = NonNullable<\n Awaited<ReturnType<typeof initialFiltersGet>>\n>;\nexport type InitialFiltersGetQueryError = AxiosError<unknown>;\n\nexport function useInitialFiltersGet<\n TData = Awaited<ReturnType<typeof initialFiltersGet>>,\n TError = AxiosError<unknown>,\n>(\n params: InitialFiltersGetParams,\n options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof initialFiltersGet>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof initialFiltersGet>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useInitialFiltersGet<\n TData = Awaited<ReturnType<typeof initialFiltersGet>>,\n TError = AxiosError<unknown>,\n>(\n params: InitialFiltersGetParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof initialFiltersGet>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof initialFiltersGet>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useInitialFiltersGet<\n TData = Awaited<ReturnType<typeof initialFiltersGet>>,\n TError = AxiosError<unknown>,\n>(\n params: InitialFiltersGetParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof initialFiltersGet>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useInitialFiltersGet<\n TData = Awaited<ReturnType<typeof initialFiltersGet>>,\n TError = AxiosError<unknown>,\n>(\n params: InitialFiltersGetParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof initialFiltersGet>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getInitialFiltersGetQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getTipAnalysis = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TipAnalysisItem>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/tip-analysis/${id}`,\n options,\n );\n};\n\nexport const getGetTipAnalysisQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/tip-analysis/${id}`,\n ] as const;\n};\n\nexport const getGetTipAnalysisQueryOptions = <\n TData = Awaited<ReturnType<typeof getTipAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipAnalysis>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetTipAnalysisQueryKey(id);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getTipAnalysis>>> = ({\n signal,\n }) => getTipAnalysis(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof getTipAnalysis>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetTipAnalysisQueryResult = NonNullable<\n Awaited<ReturnType<typeof getTipAnalysis>>\n>;\nexport type GetTipAnalysisQueryError = AxiosError<unknown>;\n\nexport function useGetTipAnalysis<\n TData = Awaited<ReturnType<typeof getTipAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipAnalysis>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTipAnalysis>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetTipAnalysis<\n TData = Awaited<ReturnType<typeof getTipAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipAnalysis>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTipAnalysis>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetTipAnalysis<\n TData = Awaited<ReturnType<typeof getTipAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipAnalysis>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetTipAnalysis<\n TData = Awaited<ReturnType<typeof getTipAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getTipAnalysis>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetTipAnalysisQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getTeamNameAliases = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TeamNameAlias[]>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/team-name-aliases`,\n options,\n );\n};\n\nexport const getGetTeamNameAliasesQueryKey = () => {\n return [\n `https://api.football-genie.com/o1-typescript-service/team-name-aliases`,\n ] as const;\n};\n\nexport const getGetTeamNameAliasesQueryOptions = <\n TData = Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n}) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetTeamNameAliasesQueryKey();\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getTeamNameAliases>>\n > = ({ signal }) => getTeamNameAliases({ signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetTeamNameAliasesQueryResult = NonNullable<\n Awaited<ReturnType<typeof getTeamNameAliases>>\n>;\nexport type GetTeamNameAliasesQueryError = AxiosError<unknown>;\n\nexport function useGetTeamNameAliases<\n TData = Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError = AxiosError<unknown>,\n>(options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetTeamNameAliases<\n TData = Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetTeamNameAliases<\n TData = Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetTeamNameAliases<\n TData = Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getTeamNameAliases>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetTeamNameAliasesQueryOptions(options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const createTeamNameAlias = (\n pickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt: PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TeamNameAlias>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/team-name-aliases`,\n pickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt,\n options,\n );\n};\n\nexport const getCreateTeamNameAliasMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof createTeamNameAlias>>,\n TError,\n {\n data: PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt;\n },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof createTeamNameAlias>>,\n TError,\n { data: PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof createTeamNameAlias>>,\n { data: PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt }\n > = (props) => {\n const { data } = props ?? {};\n\n return createTeamNameAlias(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type CreateTeamNameAliasMutationResult = NonNullable<\n Awaited<ReturnType<typeof createTeamNameAlias>>\n>;\nexport type CreateTeamNameAliasMutationBody =\n PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt;\nexport type CreateTeamNameAliasMutationError = AxiosError<unknown>;\n\nexport const useCreateTeamNameAlias = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof createTeamNameAlias>>,\n TError,\n {\n data: PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt;\n },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof createTeamNameAlias>>,\n TError,\n { data: PickTeamNameAliasExcludeKeyofTeamNameAliasIdOrCreatedAtOrUpdatedAt },\n TContext\n> => {\n const mutationOptions = getCreateTeamNameAliasMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const updateTeamNameAlias = (\n pickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt: PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TeamNameAlias>> => {\n return axios.put(\n `https://api.football-genie.com/o1-typescript-service/team-name-aliases`,\n pickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt,\n options,\n );\n};\n\nexport const getUpdateTeamNameAliasMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateTeamNameAlias>>,\n TError,\n { data: PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof updateTeamNameAlias>>,\n TError,\n { data: PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof updateTeamNameAlias>>,\n { data: PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt }\n > = (props) => {\n const { data } = props ?? {};\n\n return updateTeamNameAlias(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type UpdateTeamNameAliasMutationResult = NonNullable<\n Awaited<ReturnType<typeof updateTeamNameAlias>>\n>;\nexport type UpdateTeamNameAliasMutationBody =\n PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt;\nexport type UpdateTeamNameAliasMutationError = AxiosError<unknown>;\n\nexport const useUpdateTeamNameAlias = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateTeamNameAlias>>,\n TError,\n { data: PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof updateTeamNameAlias>>,\n TError,\n { data: PickTeamNameAliasExcludeKeyofTeamNameAliasCreatedAtOrUpdatedAt },\n TContext\n> => {\n const mutationOptions = getUpdateTeamNameAliasMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const deleteTeamNameAlias = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<TeamNameAlias>> => {\n return axios.delete(\n `https://api.football-genie.com/o1-typescript-service/team-name-aliases/${id}`,\n options,\n );\n};\n\nexport const getDeleteTeamNameAliasMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteTeamNameAlias>>,\n TError,\n { id: string },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof deleteTeamNameAlias>>,\n TError,\n { id: string },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof deleteTeamNameAlias>>,\n { id: string }\n > = (props) => {\n const { id } = props ?? {};\n\n return deleteTeamNameAlias(id, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type DeleteTeamNameAliasMutationResult = NonNullable<\n Awaited<ReturnType<typeof deleteTeamNameAlias>>\n>;\n\nexport type DeleteTeamNameAliasMutationError = AxiosError<unknown>;\n\nexport const useDeleteTeamNameAlias = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteTeamNameAlias>>,\n TError,\n { id: string },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof deleteTeamNameAlias>>,\n TError,\n { id: string },\n TContext\n> => {\n const mutationOptions = getDeleteTeamNameAliasMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getSubscriptions = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<GetSubscriptionsResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/subscriptions`,\n options,\n );\n};\n\nexport const getGetSubscriptionsQueryKey = () => {\n return [\n `https://api.football-genie.com/o1-typescript-service/subscriptions`,\n ] as const;\n};\n\nexport const getGetSubscriptionsQueryOptions = <\n TData = Awaited<ReturnType<typeof getSubscriptions>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSubscriptions>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetSubscriptionsQueryKey();\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getSubscriptions>>\n > = ({ signal }) => getSubscriptions({ signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getSubscriptions>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetSubscriptionsQueryResult = NonNullable<\n Awaited<ReturnType<typeof getSubscriptions>>\n>;\nexport type GetSubscriptionsQueryError = AxiosError<unknown>;\n\nexport function useGetSubscriptions<\n TData = Awaited<ReturnType<typeof getSubscriptions>>,\n TError = AxiosError<unknown>,\n>(options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSubscriptions>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getSubscriptions>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetSubscriptions<\n TData = Awaited<ReturnType<typeof getSubscriptions>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSubscriptions>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getSubscriptions>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetSubscriptions<\n TData = Awaited<ReturnType<typeof getSubscriptions>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSubscriptions>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetSubscriptions<\n TData = Awaited<ReturnType<typeof getSubscriptions>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSubscriptions>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetSubscriptionsQueryOptions(options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const createStrategy = (\n createStrategyBody: CreateStrategyBody,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<CreateStrategyResponse>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/strategy/create`,\n createStrategyBody,\n options,\n );\n};\n\nexport const getCreateStrategyMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof createStrategy>>,\n TError,\n { data: CreateStrategyBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof createStrategy>>,\n TError,\n { data: CreateStrategyBody },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof createStrategy>>,\n { data: CreateStrategyBody }\n > = (props) => {\n const { data } = props ?? {};\n\n return createStrategy(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type CreateStrategyMutationResult = NonNullable<\n Awaited<ReturnType<typeof createStrategy>>\n>;\nexport type CreateStrategyMutationBody = CreateStrategyBody;\nexport type CreateStrategyMutationError = AxiosError<unknown>;\n\nexport const useCreateStrategy = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof createStrategy>>,\n TError,\n { data: CreateStrategyBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof createStrategy>>,\n TError,\n { data: CreateStrategyBody },\n TContext\n> => {\n const mutationOptions = getCreateStrategyMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const updateStrategy = (\n updateStrategyBody: UpdateStrategyBody,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UpdateStrategyResponse>> => {\n return axios.put(\n `https://api.football-genie.com/o1-typescript-service/strategy/update`,\n updateStrategyBody,\n options,\n );\n};\n\nexport const getUpdateStrategyMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateStrategy>>,\n TError,\n { data: UpdateStrategyBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof updateStrategy>>,\n TError,\n { data: UpdateStrategyBody },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof updateStrategy>>,\n { data: UpdateStrategyBody }\n > = (props) => {\n const { data } = props ?? {};\n\n return updateStrategy(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type UpdateStrategyMutationResult = NonNullable<\n Awaited<ReturnType<typeof updateStrategy>>\n>;\nexport type UpdateStrategyMutationBody = UpdateStrategyBody;\nexport type UpdateStrategyMutationError = AxiosError<unknown>;\n\nexport const useUpdateStrategy = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateStrategy>>,\n TError,\n { data: UpdateStrategyBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof updateStrategy>>,\n TError,\n { data: UpdateStrategyBody },\n TContext\n> => {\n const mutationOptions = getUpdateStrategyMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getStrategies = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<Strategy[]>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/strategy/strategies`,\n options,\n );\n};\n\nexport const getGetStrategiesQueryKey = () => {\n return [\n `https://api.football-genie.com/o1-typescript-service/strategy/strategies`,\n ] as const;\n};\n\nexport const getGetStrategiesQueryOptions = <\n TData = Awaited<ReturnType<typeof getStrategies>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategies>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetStrategiesQueryKey();\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getStrategies>>> = ({\n signal,\n }) => getStrategies({ signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getStrategies>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetStrategiesQueryResult = NonNullable<\n Awaited<ReturnType<typeof getStrategies>>\n>;\nexport type GetStrategiesQueryError = AxiosError<unknown>;\n\nexport function useGetStrategies<\n TData = Awaited<ReturnType<typeof getStrategies>>,\n TError = AxiosError<unknown>,\n>(options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategies>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getStrategies>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetStrategies<\n TData = Awaited<ReturnType<typeof getStrategies>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategies>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getStrategies>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetStrategies<\n TData = Awaited<ReturnType<typeof getStrategies>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategies>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetStrategies<\n TData = Awaited<ReturnType<typeof getStrategies>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategies>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetStrategiesQueryOptions(options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const deleteStrategy = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<Strategy>> => {\n return axios.delete(\n `https://api.football-genie.com/o1-typescript-service/strategy/delete/${id}`,\n options,\n );\n};\n\nexport const getDeleteStrategyMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteStrategy>>,\n TError,\n { id: string },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof deleteStrategy>>,\n TError,\n { id: string },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof deleteStrategy>>,\n { id: string }\n > = (props) => {\n const { id } = props ?? {};\n\n return deleteStrategy(id, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type DeleteStrategyMutationResult = NonNullable<\n Awaited<ReturnType<typeof deleteStrategy>>\n>;\n\nexport type DeleteStrategyMutationError = AxiosError<unknown>;\n\nexport const useDeleteStrategy = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof deleteStrategy>>,\n TError,\n { id: string },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof deleteStrategy>>,\n TError,\n { id: string },\n TContext\n> => {\n const mutationOptions = getDeleteStrategyMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getStrategy = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<Strategy>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/strategy/${id}`,\n options,\n );\n};\n\nexport const getGetStrategyQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/strategy/${id}`,\n ] as const;\n};\n\nexport const getGetStrategyQueryOptions = <\n TData = Awaited<ReturnType<typeof getStrategy>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategy>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetStrategyQueryKey(id);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getStrategy>>> = ({\n signal,\n }) => getStrategy(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof getStrategy>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetStrategyQueryResult = NonNullable<\n Awaited<ReturnType<typeof getStrategy>>\n>;\nexport type GetStrategyQueryError = AxiosError<unknown>;\n\nexport function useGetStrategy<\n TData = Awaited<ReturnType<typeof getStrategy>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategy>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getStrategy>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetStrategy<\n TData = Awaited<ReturnType<typeof getStrategy>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategy>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getStrategy>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetStrategy<\n TData = Awaited<ReturnType<typeof getStrategy>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategy>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetStrategy<\n TData = Awaited<ReturnType<typeof getStrategy>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStrategy>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetStrategyQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getStatistics = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<StatisticsObject>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/statistics/${id}`,\n options,\n );\n};\n\nexport const getGetStatisticsQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/statistics/${id}`,\n ] as const;\n};\n\nexport const getGetStatisticsQueryOptions = <\n TData = Awaited<ReturnType<typeof getStatistics>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStatistics>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetStatisticsQueryKey(id);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getStatistics>>> = ({\n signal,\n }) => getStatistics(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof getStatistics>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetStatisticsQueryResult = NonNullable<\n Awaited<ReturnType<typeof getStatistics>>\n>;\nexport type GetStatisticsQueryError = AxiosError<unknown>;\n\nexport function useGetStatistics<\n TData = Awaited<ReturnType<typeof getStatistics>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStatistics>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getStatistics>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetStatistics<\n TData = Awaited<ReturnType<typeof getStatistics>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStatistics>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getStatistics>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetStatistics<\n TData = Awaited<ReturnType<typeof getStatistics>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStatistics>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetStatistics<\n TData = Awaited<ReturnType<typeof getStatistics>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getStatistics>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetStatisticsQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getSettings = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<Settings>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/settings`,\n options,\n );\n};\n\nexport const getGetSettingsQueryKey = () => {\n return [\n `https://api.football-genie.com/o1-typescript-service/settings`,\n ] as const;\n};\n\nexport const getGetSettingsQueryOptions = <\n TData = Awaited<ReturnType<typeof getSettings>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSettings>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetSettingsQueryKey();\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getSettings>>> = ({\n signal,\n }) => getSettings({ signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getSettings>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetSettingsQueryResult = NonNullable<\n Awaited<ReturnType<typeof getSettings>>\n>;\nexport type GetSettingsQueryError = AxiosError<unknown>;\n\nexport function useGetSettings<\n TData = Awaited<ReturnType<typeof getSettings>>,\n TError = AxiosError<unknown>,\n>(options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSettings>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getSettings>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetSettings<\n TData = Awaited<ReturnType<typeof getSettings>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSettings>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getSettings>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetSettings<\n TData = Awaited<ReturnType<typeof getSettings>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSettings>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetSettings<\n TData = Awaited<ReturnType<typeof getSettings>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getSettings>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetSettingsQueryOptions(options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const updateLeagues = (\n leagueItem: LeagueItem[],\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<LeagueItem[]>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/settings/update-leagues`,\n leagueItem,\n options,\n );\n};\n\nexport const getUpdateLeaguesMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateLeagues>>,\n TError,\n { data: LeagueItem[] },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof updateLeagues>>,\n TError,\n { data: LeagueItem[] },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof updateLeagues>>,\n { data: LeagueItem[] }\n > = (props) => {\n const { data } = props ?? {};\n\n return updateLeagues(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type UpdateLeaguesMutationResult = NonNullable<\n Awaited<ReturnType<typeof updateLeagues>>\n>;\nexport type UpdateLeaguesMutationBody = LeagueItem[];\nexport type UpdateLeaguesMutationError = AxiosError<unknown>;\n\nexport const useUpdateLeagues = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof updateLeagues>>,\n TError,\n { data: LeagueItem[] },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof updateLeagues>>,\n TError,\n { data: LeagueItem[] },\n TContext\n> => {\n const mutationOptions = getUpdateLeaguesMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const getPartner = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<PickPartnerExcludeKeyofPartnerStripeSettings>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/partners/${id}`,\n options,\n );\n};\n\nexport const getGetPartnerQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/partners/${id}`,\n ] as const;\n};\n\nexport const getGetPartnerQueryOptions = <\n TData = Awaited<ReturnType<typeof getPartner>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getPartner>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetPartnerQueryKey(id);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getPartner>>> = ({\n signal,\n }) => getPartner(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof getPartner>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetPartnerQueryResult = NonNullable<\n Awaited<ReturnType<typeof getPartner>>\n>;\nexport type GetPartnerQueryError = AxiosError<unknown>;\n\nexport function useGetPartner<\n TData = Awaited<ReturnType<typeof getPartner>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getPartner>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getPartner>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetPartner<\n TData = Awaited<ReturnType<typeof getPartner>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getPartner>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getPartner>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetPartner<\n TData = Awaited<ReturnType<typeof getPartner>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getPartner>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetPartner<\n TData = Awaited<ReturnType<typeof getPartner>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getPartner>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetPartnerQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getMatchAnalysis = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<MatchAnalysisItem>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/analysis/${id}`,\n options,\n );\n};\n\nexport const getGetMatchAnalysisQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/analysis/${id}`,\n ] as const;\n};\n\nexport const getGetMatchAnalysisQueryOptions = <\n TData = Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetMatchAnalysisQueryKey(id);\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getMatchAnalysis>>\n > = ({ signal }) => getMatchAnalysis(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetMatchAnalysisQueryResult = NonNullable<\n Awaited<ReturnType<typeof getMatchAnalysis>>\n>;\nexport type GetMatchAnalysisQueryError = AxiosError<unknown>;\n\nexport function useGetMatchAnalysis<\n TData = Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetMatchAnalysis<\n TData = Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetMatchAnalysis<\n TData = Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetMatchAnalysis<\n TData = Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getMatchAnalysis>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetMatchAnalysisQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const unlock = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<UnlockMatchResponse>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/free-tier/unlock/${id}`,\n undefined,\n options,\n );\n};\n\nexport const getUnlockMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof unlock>>,\n TError,\n { id: string },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof unlock>>,\n TError,\n { id: string },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof unlock>>,\n { id: string }\n > = (props) => {\n const { id } = props ?? {};\n\n return unlock(id, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type UnlockMutationResult = NonNullable<\n Awaited<ReturnType<typeof unlock>>\n>;\n\nexport type UnlockMutationError = AxiosError<unknown>;\n\nexport const useUnlock = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof unlock>>,\n TError,\n { id: string },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof unlock>>,\n TError,\n { id: string },\n TContext\n> => {\n const mutationOptions = getUnlockMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n\nexport const balance = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<FreeAnalysisBalanceResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/free-tier/balance`,\n options,\n );\n};\n\nexport const getBalanceQueryKey = () => {\n return [\n `https://api.football-genie.com/o1-typescript-service/free-tier/balance`,\n ] as const;\n};\n\nexport const getBalanceQueryOptions = <\n TData = Awaited<ReturnType<typeof balance>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof balance>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getBalanceQueryKey();\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof balance>>> = ({\n signal,\n }) => balance({ signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof balance>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type BalanceQueryResult = NonNullable<\n Awaited<ReturnType<typeof balance>>\n>;\nexport type BalanceQueryError = AxiosError<unknown>;\n\nexport function useBalance<\n TData = Awaited<ReturnType<typeof balance>>,\n TError = AxiosError<unknown>,\n>(options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof balance>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof balance>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useBalance<\n TData = Awaited<ReturnType<typeof balance>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof balance>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof balance>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useBalance<\n TData = Awaited<ReturnType<typeof balance>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof balance>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useBalance<\n TData = Awaited<ReturnType<typeof balance>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof balance>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getBalanceQueryOptions(options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const searchLeagues = (\n params: SearchLeaguesParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<LeagueItem[]>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/football/search-leagues`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getSearchLeaguesQueryKey = (params: SearchLeaguesParams) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/football/search-leagues`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getSearchLeaguesQueryOptions = <\n TData = Awaited<ReturnType<typeof searchLeagues>>,\n TError = AxiosError<unknown>,\n>(\n params: SearchLeaguesParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof searchLeagues>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getSearchLeaguesQueryKey(params);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof searchLeagues>>> = ({\n signal,\n }) => searchLeagues(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof searchLeagues>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type SearchLeaguesQueryResult = NonNullable<\n Awaited<ReturnType<typeof searchLeagues>>\n>;\nexport type SearchLeaguesQueryError = AxiosError<unknown>;\n\nexport function useSearchLeagues<\n TData = Awaited<ReturnType<typeof searchLeagues>>,\n TError = AxiosError<unknown>,\n>(\n params: SearchLeaguesParams,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof searchLeagues>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof searchLeagues>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useSearchLeagues<\n TData = Awaited<ReturnType<typeof searchLeagues>>,\n TError = AxiosError<unknown>,\n>(\n params: SearchLeaguesParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof searchLeagues>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof searchLeagues>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useSearchLeagues<\n TData = Awaited<ReturnType<typeof searchLeagues>>,\n TError = AxiosError<unknown>,\n>(\n params: SearchLeaguesParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof searchLeagues>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useSearchLeagues<\n TData = Awaited<ReturnType<typeof searchLeagues>>,\n TError = AxiosError<unknown>,\n>(\n params: SearchLeaguesParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof searchLeagues>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getSearchLeaguesQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getLeague = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<LeagueItem>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/football/league/${id}`,\n options,\n );\n};\n\nexport const getGetLeagueQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/football/league/${id}`,\n ] as const;\n};\n\nexport const getGetLeagueQueryOptions = <\n TData = Awaited<ReturnType<typeof getLeague>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getLeague>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetLeagueQueryKey(id);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getLeague>>> = ({\n signal,\n }) => getLeague(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<Awaited<ReturnType<typeof getLeague>>, TError, TData> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n};\n\nexport type GetLeagueQueryResult = NonNullable<\n Awaited<ReturnType<typeof getLeague>>\n>;\nexport type GetLeagueQueryError = AxiosError<unknown>;\n\nexport function useGetLeague<\n TData = Awaited<ReturnType<typeof getLeague>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getLeague>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getLeague>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetLeague<\n TData = Awaited<ReturnType<typeof getLeague>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getLeague>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getLeague>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetLeague<\n TData = Awaited<ReturnType<typeof getLeague>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getLeague>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetLeague<\n TData = Awaited<ReturnType<typeof getLeague>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getLeague>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetLeagueQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getOdds = (\n fixtureId: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<BetItem[]>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/football/odds/${fixtureId}`,\n options,\n );\n};\n\nexport const getGetOddsQueryKey = (fixtureId: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/football/odds/${fixtureId}`,\n ] as const;\n};\n\nexport const getGetOddsQueryOptions = <\n TData = Awaited<ReturnType<typeof getOdds>>,\n TError = AxiosError<unknown>,\n>(\n fixtureId: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getOdds>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetOddsQueryKey(fixtureId);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getOdds>>> = ({\n signal,\n }) => getOdds(fixtureId, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!fixtureId,\n ...queryOptions,\n } as UseQueryOptions<Awaited<ReturnType<typeof getOdds>>, TError, TData> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n};\n\nexport type GetOddsQueryResult = NonNullable<\n Awaited<ReturnType<typeof getOdds>>\n>;\nexport type GetOddsQueryError = AxiosError<unknown>;\n\nexport function useGetOdds<\n TData = Awaited<ReturnType<typeof getOdds>>,\n TError = AxiosError<unknown>,\n>(\n fixtureId: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getOdds>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getOdds>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetOdds<\n TData = Awaited<ReturnType<typeof getOdds>>,\n TError = AxiosError<unknown>,\n>(\n fixtureId: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getOdds>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getOdds>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetOdds<\n TData = Awaited<ReturnType<typeof getOdds>>,\n TError = AxiosError<unknown>,\n>(\n fixtureId: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getOdds>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetOdds<\n TData = Awaited<ReturnType<typeof getOdds>>,\n TError = AxiosError<unknown>,\n>(\n fixtureId: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getOdds>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetOddsQueryOptions(fixtureId, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getFixture = (\n id: string,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<FixtureRecord>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/fixtures/${id}`,\n options,\n );\n};\n\nexport const getGetFixtureQueryKey = (id: string) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/fixtures/${id}`,\n ] as const;\n};\n\nexport const getGetFixtureQueryOptions = <\n TData = Awaited<ReturnType<typeof getFixture>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixture>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetFixtureQueryKey(id);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getFixture>>> = ({\n signal,\n }) => getFixture(id, { signal, ...axiosOptions });\n\n return {\n queryKey,\n queryFn,\n enabled: !!id,\n ...queryOptions,\n } as UseQueryOptions<\n Awaited<ReturnType<typeof getFixture>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetFixtureQueryResult = NonNullable<\n Awaited<ReturnType<typeof getFixture>>\n>;\nexport type GetFixtureQueryError = AxiosError<unknown>;\n\nexport function useGetFixture<\n TData = Awaited<ReturnType<typeof getFixture>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixture>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getFixture>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetFixture<\n TData = Awaited<ReturnType<typeof getFixture>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixture>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getFixture>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetFixture<\n TData = Awaited<ReturnType<typeof getFixture>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixture>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetFixture<\n TData = Awaited<ReturnType<typeof getFixture>>,\n TError = AxiosError<unknown>,\n>(\n id: string,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixture>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetFixtureQueryOptions(id, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getFixtures = (\n params: GetFixturesParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<FixtureRecord[]>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/fixtures`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetFixturesQueryKey = (params: GetFixturesParams) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/fixtures`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetFixturesQueryOptions = <\n TData = Awaited<ReturnType<typeof getFixtures>>,\n TError = AxiosError<unknown>,\n>(\n params: GetFixturesParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixtures>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetFixturesQueryKey(params);\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getFixtures>>> = ({\n signal,\n }) => getFixtures(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getFixtures>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetFixturesQueryResult = NonNullable<\n Awaited<ReturnType<typeof getFixtures>>\n>;\nexport type GetFixturesQueryError = AxiosError<unknown>;\n\nexport function useGetFixtures<\n TData = Awaited<ReturnType<typeof getFixtures>>,\n TError = AxiosError<unknown>,\n>(\n params: GetFixturesParams,\n options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixtures>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getFixtures>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetFixtures<\n TData = Awaited<ReturnType<typeof getFixtures>>,\n TError = AxiosError<unknown>,\n>(\n params: GetFixturesParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixtures>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getFixtures>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetFixtures<\n TData = Awaited<ReturnType<typeof getFixtures>>,\n TError = AxiosError<unknown>,\n>(\n params: GetFixturesParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixtures>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetFixtures<\n TData = Awaited<ReturnType<typeof getFixtures>>,\n TError = AxiosError<unknown>,\n>(\n params: GetFixturesParams,\n options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getFixtures>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetFixturesQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getDailyTopPicks = (\n params?: GetDailyTopPicksParams,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<DailyTopPicksResponse>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/daily-top-picks/get-picks`,\n {\n ...options,\n params: { ...params, ...options?.params },\n },\n );\n};\n\nexport const getGetDailyTopPicksQueryKey = (\n params?: GetDailyTopPicksParams,\n) => {\n return [\n `https://api.football-genie.com/o1-typescript-service/daily-top-picks/get-picks`,\n ...(params ? [params] : []),\n ] as const;\n};\n\nexport const getGetDailyTopPicksQueryOptions = <\n TData = Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError = AxiosError<unknown>,\n>(\n params?: GetDailyTopPicksParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey =\n queryOptions?.queryKey ?? getGetDailyTopPicksQueryKey(params);\n\n const queryFn: QueryFunction<\n Awaited<ReturnType<typeof getDailyTopPicks>>\n > = ({ signal }) => getDailyTopPicks(params, { signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetDailyTopPicksQueryResult = NonNullable<\n Awaited<ReturnType<typeof getDailyTopPicks>>\n>;\nexport type GetDailyTopPicksQueryError = AxiosError<unknown>;\n\nexport function useGetDailyTopPicks<\n TData = Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError = AxiosError<unknown>,\n>(\n params: undefined | GetDailyTopPicksParams,\n options: {\n query: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError,\n TData\n >\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetDailyTopPicks<\n TData = Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError = AxiosError<unknown>,\n>(\n params?: GetDailyTopPicksParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError,\n TData\n >\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetDailyTopPicks<\n TData = Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError = AxiosError<unknown>,\n>(\n params?: GetDailyTopPicksParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetDailyTopPicks<\n TData = Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError = AxiosError<unknown>,\n>(\n params?: GetDailyTopPicksParams,\n options?: {\n query?: Partial<\n UseQueryOptions<\n Awaited<ReturnType<typeof getDailyTopPicks>>,\n TError,\n TData\n >\n >;\n axios?: AxiosRequestConfig;\n },\n): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetDailyTopPicksQueryOptions(params, options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const getCurrencies = (\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<Currency[]>> => {\n return axios.get(\n `https://api.football-genie.com/o1-typescript-service/currency`,\n options,\n );\n};\n\nexport const getGetCurrenciesQueryKey = () => {\n return [\n `https://api.football-genie.com/o1-typescript-service/currency`,\n ] as const;\n};\n\nexport const getGetCurrenciesQueryOptions = <\n TData = Awaited<ReturnType<typeof getCurrencies>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getCurrencies>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}) => {\n const { query: queryOptions, axios: axiosOptions } = options ?? {};\n\n const queryKey = queryOptions?.queryKey ?? getGetCurrenciesQueryKey();\n\n const queryFn: QueryFunction<Awaited<ReturnType<typeof getCurrencies>>> = ({\n signal,\n }) => getCurrencies({ signal, ...axiosOptions });\n\n return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<\n Awaited<ReturnType<typeof getCurrencies>>,\n TError,\n TData\n > & { queryKey: DataTag<QueryKey, TData> };\n};\n\nexport type GetCurrenciesQueryResult = NonNullable<\n Awaited<ReturnType<typeof getCurrencies>>\n>;\nexport type GetCurrenciesQueryError = AxiosError<unknown>;\n\nexport function useGetCurrencies<\n TData = Awaited<ReturnType<typeof getCurrencies>>,\n TError = AxiosError<unknown>,\n>(options: {\n query: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getCurrencies>>, TError, TData>\n > &\n Pick<\n DefinedInitialDataOptions<\n Awaited<ReturnType<typeof getCurrencies>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): DefinedUseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n};\nexport function useGetCurrencies<\n TData = Awaited<ReturnType<typeof getCurrencies>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getCurrencies>>, TError, TData>\n > &\n Pick<\n UndefinedInitialDataOptions<\n Awaited<ReturnType<typeof getCurrencies>>,\n TError,\n TData\n >,\n \"initialData\"\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\nexport function useGetCurrencies<\n TData = Awaited<ReturnType<typeof getCurrencies>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getCurrencies>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> };\n\nexport function useGetCurrencies<\n TData = Awaited<ReturnType<typeof getCurrencies>>,\n TError = AxiosError<unknown>,\n>(options?: {\n query?: Partial<\n UseQueryOptions<Awaited<ReturnType<typeof getCurrencies>>, TError, TData>\n >;\n axios?: AxiosRequestConfig;\n}): UseQueryResult<TData, TError> & { queryKey: DataTag<QueryKey, TData> } {\n const queryOptions = getGetCurrenciesQueryOptions(options);\n\n const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {\n queryKey: DataTag<QueryKey, TData>;\n };\n\n query.queryKey = queryOptions.queryKey;\n\n return query;\n}\n\nexport const contact = (\n contactBody: ContactBody,\n options?: AxiosRequestConfig,\n): Promise<AxiosResponse<ContactResponse>> => {\n return axios.post(\n `https://api.football-genie.com/o1-typescript-service/communications/contact`,\n contactBody,\n options,\n );\n};\n\nexport const getContactMutationOptions = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof contact>>,\n TError,\n { data: ContactBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationOptions<\n Awaited<ReturnType<typeof contact>>,\n TError,\n { data: ContactBody },\n TContext\n> => {\n const { mutation: mutationOptions, axios: axiosOptions } = options ?? {};\n\n const mutationFn: MutationFunction<\n Awaited<ReturnType<typeof contact>>,\n { data: ContactBody }\n > = (props) => {\n const { data } = props ?? {};\n\n return contact(data, axiosOptions);\n };\n\n return { mutationFn, ...mutationOptions };\n};\n\nexport type ContactMutationResult = NonNullable<\n Awaited<ReturnType<typeof contact>>\n>;\nexport type ContactMutationBody = ContactBody;\nexport type ContactMutationError = AxiosError<unknown>;\n\nexport const useContact = <\n TError = AxiosError<unknown>,\n TContext = unknown,\n>(options?: {\n mutation?: UseMutationOptions<\n Awaited<ReturnType<typeof contact>>,\n TError,\n { data: ContactBody },\n TContext\n >;\n axios?: AxiosRequestConfig;\n}): UseMutationResult<\n Awaited<ReturnType<typeof contact>>,\n TError,\n { data: ContactBody },\n TContext\n> => {\n const mutationOptions = getContactMutationOptions(options);\n\n return useMutation(mutationOptions);\n};\n","import { useId } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\ninterface GridPatternProps {\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n squares?: Array<[x: number, y: number]>;\n strokeDasharray?: string;\n className?: string;\n [key: string]: unknown;\n}\n\nexport function GridPattern({\n width = 40,\n height = 40,\n x = -1,\n y = -1,\n strokeDasharray = \"0\",\n squares,\n className,\n ...props\n}: GridPatternProps) {\n const id = useId();\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn(\n \"pointer-events-none absolute inset-0 h-full w-full fill-gray-400/30 stroke-gray-400/30\",\n className,\n )}\n {...props}\n >\n <defs>\n <pattern\n id={id}\n width={width}\n height={height}\n patternUnits=\"userSpaceOnUse\"\n x={x}\n y={y}\n >\n <path\n d={`M.5 ${height}V.5H${width}`}\n fill=\"none\"\n strokeDasharray={strokeDasharray}\n />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n {squares && (\n <svg x={x} y={y} className=\"overflow-visible\">\n {squares.map(([x, y]) => (\n <rect\n strokeWidth=\"0\"\n key={`${x}-${y}`}\n width={width - 1}\n height={height - 1}\n x={x * width + 1}\n y={y * height + 1}\n />\n ))}\n </svg>\n )}\n </svg>\n );\n}\n\nexport default GridPattern;\n","import { FC, ReactNode, useRef, useEffect } from \"react\";\nimport { Icon, Icons } from \"@ui/elements\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\n\nfunction usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T>(undefined);\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n\ntype TabItem = {\n name: string;\n label: string;\n icon?: Icons;\n content: ReactNode | ReactNode[];\n highlighted?: boolean;\n};\n\ntype TabProps = {\n items: TabItem[];\n value?: string;\n onChange?: (tab: string) => void;\n onContentUpdate?: () => void;\n tabId?: string;\n contentClass?: string;\n asideClass?: string;\n};\n\nexport const Tab: FC<TabProps> = ({\n value,\n onChange,\n items,\n tabId = \"default-tab\",\n onContentUpdate,\n contentClass,\n asideClass,\n}) => {\n const sortedItems = items.slice().sort((a, b) => {\n if (a.highlighted === b.highlighted) return 0;\n return a.highlighted ? 1 : -1;\n });\n const tabMenu = useRef<HTMLDivElement>(null);\n\n const activeTab = value || sortedItems[0].name;\n\n const setActiveTab = (tabName: string) => {\n onChange?.(tabName);\n };\n\n // Get the current and previous tab indices\n const activeTabIndex = sortedItems.findIndex((tab) => tab.name === activeTab);\n const previousActiveTabIndex = usePrevious(activeTabIndex);\n\n // Determine the direction of the animation\n let direction = 1;\n if (previousActiveTabIndex !== undefined) {\n if (activeTabIndex > previousActiveTabIndex) {\n direction = 1; // Slide up\n } else if (activeTabIndex < previousActiveTabIndex) {\n direction = -1; // Slide down\n } else {\n direction = 0; // No movement\n }\n }\n\n const variants = {\n initial: (direction: number) => ({ opacity: 0, y: 20 * direction }),\n animate: { opacity: 1, y: 0 },\n exit: (direction: number) => ({ opacity: 0, y: -20 * direction }),\n };\n\n const normalItems = sortedItems.filter((item) => !item.highlighted);\n const highlightedItems = sortedItems.filter((item) => item.highlighted);\n\n const handleTabClick = (button: HTMLButtonElement, tab: TabItem) => {\n setActiveTab(tab.name);\n if (!tabMenu.current) return;\n\n const buttonRect = button.getBoundingClientRect();\n const menuRect = tabMenu.current.getBoundingClientRect();\n\n const offset = buttonRect.left - menuRect.left + tabMenu.current.scrollLeft;\n\n tabMenu.current.scrollTo({\n left: offset,\n behavior: \"smooth\",\n });\n\n setTimeout(() => {\n onContentUpdate?.();\n });\n };\n\n const renderTabButton = (tab: TabItem) => {\n const isActive = activeTab === tab.name;\n const tabButtonId = `${tabId}-tab-${tab.name}`;\n const tabPanelId = `${tabId}-panel-${tab.name}`;\n\n return (\n <button\n key={`${tab.name}-menu-item`}\n id={tabButtonId}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={tabPanelId}\n tabIndex={isActive ? 0 : -1}\n onClick={(event) =>\n handleTabClick(event.currentTarget as HTMLButtonElement, tab)\n }\n className={`relative flex items-center gap-xs whitespace-nowrap text-nowrap rounded-md px-3 py-2 text-left text-sm transition-all md:min-w-44 dark:text-neutral-300`}\n >\n {tab.icon && (\n <Icon\n weight=\"regular\"\n icon={tab.icon}\n className=\"relative z-10 size-5\"\n aria-hidden=\"true\"\n />\n )}\n <span className=\"relative z-10 whitespace-nowrap text-nowrap\">\n {tab.label}\n </span>\n {isActive && (\n <motion.div\n layoutId={`activeTabIndicator-${tabId}`}\n className=\"absolute inset-0 rounded-md bg-gray-200 dark:bg-neutral-800\"\n style={{ zIndex: 0 }}\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n };\n\n return (\n <div className=\"flex w-full flex-col gap-md md:flex-row\">\n <div\n className={cn(\"flex gap-md overflow-auto md:flex-col\", asideClass)}\n ref={tabMenu}\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n >\n {normalItems.map(renderTabButton)}\n {highlightedItems.length > 0 && (\n <div\n className=\"hidden h-full min-h-20 w-full border-b border-gray-200 md:block dark:border-neutral-700\"\n aria-hidden=\"true\"\n />\n )}\n {/* Spacer */}\n {highlightedItems.map(renderTabButton)}\n </div>\n\n <div className=\"flex-1\">\n {/* Render all tab panels, but hide inactive ones */}\n {sortedItems.map((tab) => {\n const isActive = tab.name === activeTab;\n return (\n <motion.div\n key={tab.name}\n initial={isActive ? \"initial\" : false}\n animate={isActive ? \"animate\" : \"exit\"}\n variants={variants}\n custom={direction}\n transition={{ duration: 0.2 }}\n className={cn(\n \"rounded-lg bg-gray-50 p-4 dark:bg-neutral-800\",\n { block: isActive, \"sr-only\": !isActive },\n contentClass,\n )}\n role=\"tabpanel\"\n id={`${tabId}-panel-${tab.name}`}\n aria-labelledby={`${tabId}-tab-${tab.name}`}\n tabIndex={0}\n >\n <div>{tab.content}</div>\n </motion.div>\n );\n })}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { Icon, Icons } from \"@ui/elements\";\nimport Image from \"next/image\";\nimport classNames from \"classnames\";\nimport { statusColorClasses } from \"@utils\";\nimport CountUp from \"react-countup\";\n\ntype InfoIconCardCommonProps = {\n value?: string | number;\n valueSubtext?: string;\n label: string;\n color?: \"success\" | \"warning\" | \"info\" | \"neutral\" | \"danger\";\n textColor?: \"success\" | \"warning\" | \"info\" | \"neutral\" | \"danger\";\n className?: string;\n [\"aria-label\"]?: string;\n isReverse?: boolean;\n};\n\ntype InfoIconCardProps = {\n icon: Icons;\n iconAlt: string;\n} & InfoIconCardCommonProps;\n\ntype InfoImageCardProps = {\n image: string;\n imageAlt: string;\n} & InfoIconCardCommonProps;\n\ntype InfoCardProps = InfoIconCardProps | InfoImageCardProps;\n\nexport const InfoCard: React.FC<InfoCardProps> = ({\n value,\n valueSubtext,\n label,\n color = \"neutral\",\n textColor = \"neutral\",\n className,\n isReverse,\n ...props\n}) => {\n const colorClass = statusColorClasses[color];\n const textColorClass = statusColorClasses[textColor];\n\n return (\n <div\n className={classNames(\n \"flex flex-1 items-center gap-xs rounded-lg border border-gray-200 bg-white p-3 dark:border-neutral-700 dark:bg-neutral-700\",\n className,\n { \"flex-row-reverse\": isReverse },\n )}\n aria-label={props[\"aria-label\"]}\n >\n <div\n className={classNames(\n \"flex size-12 min-w-12 items-center justify-center rounded-md\",\n colorClass.bg,\n colorClass.text,\n )}\n >\n {\"icon\" in props && (\n <Icon\n icon={props.icon}\n className=\"size-6\"\n weight=\"regular\"\n {...(\"iconAlt\" in props && { \"aria-label\": props.iconAlt })}\n />\n )}\n {\"image\" in props && (\n <figure>\n <Image\n className=\"size-6 object-contain\"\n width={48}\n height={48}\n src={props.image}\n alt={props.imageAlt}\n />\n <figcaption className=\"sr-only\">{label}</figcaption>\n </figure>\n )}\n </div>\n <div className=\"w-full min-w-0\">\n <div\n className={classNames(\"flex items-baseline space-x-0.5\", {\n \"justify-end\": isReverse,\n })}\n >\n <p\n className={classNames(\n \"truncate font-semibold dark:text-gray-100\",\n textColorClass,\n )}\n >\n {typeof value === \"number\" ? (\n <CountUp end={value} duration={1.5} />\n ) : (\n value\n )}\n </p>\n {valueSubtext && (\n <p className=\"truncate text-xs text-gray-500 dark:text-neutral-200\">\n {valueSubtext}\n </p>\n )}\n </div>\n <p\n className={classNames(\n \"truncate text-xs text-gray-500 dark:text-neutral-300\",\n {\n \"text-right\": isReverse,\n },\n )}\n >\n {label}\n </p>\n </div>\n </div>\n );\n};\n","import { marked } from \"marked\";\nimport { FC } from \"react\";\n\ntype ReadmeContentProps = {\n content?: string;\n className?: string;\n};\n\nexport const ReadmeContent: FC<ReadmeContentProps> = ({\n content,\n className,\n ...rest\n}) => {\n if (!content) return null;\n\n return (\n <div\n className={className}\n dangerouslySetInnerHTML={{ __html: marked.parse(content) }}\n {...rest}\n />\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { FixtureItem, MatchAnalysisItem } from \"@api\";\nimport { UseQueryResult } from \"@tanstack/react-query\";\nimport { AxiosResponse } from \"axios\";\n\ntype FixtureContextType = {\n source: UseQueryResult<AxiosResponse<MatchAnalysisItem>, Error>;\n fixture: FixtureItem;\n};\n\nconst FixtureContext = createContext<FixtureContextType>({\n source: {} as UseQueryResult<AxiosResponse<MatchAnalysisItem>, Error>,\n fixture: {} as FixtureItem,\n});\n\nexport const useFixtureContext = () => {\n const context = useContext(FixtureContext);\n if (!context) {\n throw new Error(\"useFixture must be used within a Fixture provider\");\n }\n return context;\n};\n\nexport const FixtureProvider = FixtureContext.Provider;\n","import { Stack } from \"@ui/layout\";\nimport { InfoCard } from \"@components/IconCard/IconCard\";\nimport { ReadmeContent } from \"@components/ReadmeContent/ReadmeContent\";\nimport { useFixtureContext } from \"@components/FixtureCard/context\";\n\nfunction getColorByPredictability(\n predictability?: number,\n): \"danger\" | \"warning\" | \"success\" | undefined {\n if (!predictability) {\n return undefined;\n }\n\n if (predictability <= 5) {\n return \"danger\";\n } else if (predictability <= 7) {\n return \"warning\";\n } else {\n return \"success\";\n }\n}\n\nexport const MatchPreview = () => {\n const {\n source: { data },\n } = useFixtureContext();\n\n return (\n <Stack>\n <h4 className=\"sr-only\">Match Preview</h4>\n <Stack\n direction=\"horizontal\"\n align=\"center\"\n spacing=\"xs\"\n className=\"w-full\"\n >\n <InfoCard\n icon=\"Target\"\n iconAlt=\"Target icon representing predictability\"\n value={data?.data.summary.predictability}\n valueSubtext=\"/10\"\n label=\"Predictability\"\n color={getColorByPredictability(data?.data.summary.predictability)}\n className=\"w-1/2 min-w-0\"\n />\n <InfoCard\n icon={data?.data.summary.safe_for_betting ? \"ShieldCheck\" : \"X\"}\n iconAlt={\n data?.data.summary.safe_for_betting\n ? \"Shield icon representing safeness\"\n : \"X icon representing risk of the fixture in terms of betting\"\n }\n value={data?.data.summary.safe_for_betting ? \"Yes\" : \"No\"}\n label=\"Safe for Betting\"\n color={data?.data.summary.safe_for_betting ? \"success\" : \"warning\"}\n className=\"w-1/2 min-w-0\"\n />\n </Stack>\n <ReadmeContent\n className=\"prose prose-sm prose-slate dark:prose-invert\"\n content={data?.data.match_preview}\n />\n </Stack>\n );\n};\n","import { Stack } from \"@ui/layout\";\nimport { ReadmeContent } from \"@components/ReadmeContent/ReadmeContent\";\nimport { Icon, Tag } from \"@ui/elements\";\nimport classNames from \"classnames\";\nimport { useFixtureContext } from \"@components/FixtureCard/context\";\nimport React from \"react\";\n\nexport const CorrectScore = () => {\n const {\n source: { data },\n fixture,\n } = useFixtureContext();\n\n const predictions = data?.data.correct_score?.split(\" or \") || [\n data?.data.correct_score,\n ];\n const score = fixture.score.fulltime;\n\n return (\n <Stack>\n <h4 className=\"sr-only\">Correct Score Prediction</h4>\n <Stack direction=\"horizontal\">\n {predictions.map((prediction, i) => {\n const [home, away] = prediction?.split(\"-\") || [];\n\n const isWinner =\n home === String(score.home) && away === String(score.away);\n\n return (\n <Tag\n as=\"p\"\n className={classNames(\"flex gap-xs\", {\n \"text-semibold border-green-600 bg-green-600 text-white dark:border-green-700/40 dark:bg-green-500/20 dark:text-gray-100\":\n isWinner,\n \"border border-gray-200 bg-white dark:border-gray-800 dark:bg-neutral-700 dark:text-neutral-200\":\n !isWinner,\n })}\n role=\"button\"\n aria-pressed={isWinner}\n aria-label={`Prediction ${home} - ${away} ${isWinner ? \"is correct\" : \"is not correct\"}`}\n key={`prediction-${i}-${prediction}`}\n >\n {isWinner && (\n <span\n className=\"-ml-2 flex items-center gap-xs\"\n aria-hidden=\"true\"\n >\n <Icon\n icon=\"CheckCircle\"\n className=\"size-5\"\n weight=\"duotone\"\n />\n </span>\n )}\n <span>\n <strong className=\"font-normal\">\n {home} - {away}\n </strong>\n </span>\n </Tag>\n );\n })}\n </Stack>\n <ReadmeContent\n className=\"prose prose-sm prose-slate dark:prose-invert\"\n content={data?.data.correct_score_reasoning}\n />\n </Stack>\n );\n};\n","import { Stack } from \"@ui/layout\";\nimport { StatusColor, statusColorClasses } from \"@utils\";\nimport { FC } from \"react\";\nimport classNames from \"classnames\";\nimport { motion } from \"framer-motion\";\nimport CountUp from \"react-countup\";\n\ntype ProgressBarProps = {\n values: number[];\n colorRule: (value: number) => StatusColor;\n prefix?: string;\n label: string;\n leftLabel?: string;\n rightLabel?: string;\n};\n\nexport const ProgressBar: FC<ProgressBarProps> = ({\n values,\n colorRule,\n prefix,\n label,\n leftLabel,\n rightLabel,\n ...rest\n}) => {\n const [leftValue, rightValue] = values;\n\n const customEase = [0.42, 0, 0.58, 1];\n\n return (\n <Stack className=\"w-full\" spacing=\"xxs\" role=\"group\" {...rest}>\n <Stack direction=\"horizontal\" className=\"w-full\" align=\"center\">\n <p className=\"font-semibold dark:text-neutral-200\">\n <span className=\"sr-only\">{leftLabel}</span>\n <CountUp end={leftValue} duration={1.5} />\n {prefix && (\n <span className=\"text-xs font-normal text-gray-400\">{prefix}</span>\n )}\n </p>\n <p className=\"w-full text-center text-sm dark:text-neutral-200\">\n {label}\n </p>\n <Stack\n align=\"baseline\"\n direction=\"horizontal\"\n spacing=\"none\"\n className=\"dark:text-neutral-200\"\n >\n <p className=\"font-semibold\">\n <span className=\"sr-only\">{rightLabel}</span>\n <CountUp end={rightValue} duration={1.5} />\n </p>\n {prefix && <p className=\"text-xs text-gray-400\">{prefix}</p>}\n </Stack>\n </Stack>\n <Stack\n direction=\"horizontal\"\n spacing=\"xs\"\n className=\"h-2.5 w-full\"\n align=\"stretch\"\n >\n <div className=\"relative flex w-full overflow-hidden rounded-bl-lg rounded-tl-lg bg-gray-200 dark:bg-neutral-700\">\n <motion.div\n className={classNames(\n \"absolute right-0 h-full rounded-bl-lg rounded-tl-lg\",\n statusColorClasses[colorRule(leftValue)].mid,\n )}\n role=\"progressbar\"\n aria-valuenow={leftValue}\n aria-valuemin={0}\n aria-valuemax={10}\n aria-label={`${leftLabel}: ${leftValue} out of 10`}\n initial={{ width: 0, opacity: 0.3 }}\n animate={{ width: `${leftValue * 10}%`, opacity: 1 }}\n transition={{\n duration: 0.5,\n ease: customEase, // Use the custom easing curve\n }}\n />\n </div>\n <div className=\"relative flex w-full overflow-hidden rounded-br-lg rounded-tr-lg bg-gray-200 dark:bg-neutral-700\">\n <motion.div\n className={classNames(\n \"absolute left-0 h-full rounded-br-lg rounded-tr-lg\",\n statusColorClasses[colorRule(rightValue)].mid,\n )}\n role=\"progressbar\"\n aria-valuenow={rightValue}\n aria-valuemin={0}\n aria-valuemax={10}\n aria-label={`${rightLabel}: ${rightValue} out of 10`}\n initial={{ width: 0, opacity: 0.3 }}\n animate={{ width: `${rightValue * 10}%`, opacity: 1 }}\n transition={{\n duration: 0.5,\n ease: customEase,\n }}\n />\n </div>\n </Stack>\n </Stack>\n );\n};\n","import { Stack } from \"@ui/layout\";\nimport { ReadmeContent } from \"@components/ReadmeContent/ReadmeContent\";\nimport { useFixtureContext } from \"@components/FixtureCard/context\";\nimport { InfoCard } from \"@components/IconCard/IconCard\";\nimport { ProgressBar } from \"@components/ProgressBar/ProgressBar\";\nimport { StatusColor } from \"@utils\";\n\nfunction getStatusByNumber(index = 0): StatusColor {\n if (index <= 5) {\n return \"danger\";\n } else if (index <= 7) {\n return \"warning\";\n }\n return \"success\";\n}\n\nfunction getStatusByNumberReverse(index = 0): StatusColor {\n if (index <= 3) {\n return \"success\";\n } else if (index <= 6) {\n return \"warning\";\n }\n return \"danger\";\n}\n\nexport const TeamComparison = () => {\n const {\n source: { data },\n fixture,\n } = useFixtureContext();\n\n if (!data?.data.team_comparison) {\n return null;\n }\n\n return (\n <Stack spacing=\"xl\">\n <h4 className=\"sr-only\">Team Comparison</h4>\n <Stack\n direction=\"horizontal\"\n align=\"center\"\n spacing=\"xs\"\n className=\"w-full\"\n role=\"group\"\n >\n <InfoCard\n image={fixture.teams.home.logo}\n imageAlt={`${fixture.teams.home.name} Logo`}\n value={data?.data.team_comparison.home_team.team_health_index}\n valueSubtext=\"/10\"\n label={fixture.teams.home.name}\n textColor={getStatusByNumber(\n data?.data.team_comparison.home_team.team_health_index,\n )}\n aria-label={`${fixture.teams.home.name} Team Health Index`}\n className=\"w-1/2 flex-[50%]\"\n />\n <InfoCard\n image={fixture.teams.away.logo}\n imageAlt={`${fixture.teams.away.name} Logo`}\n value={data?.data.team_comparison.away_team.team_health_index}\n valueSubtext=\"/10\"\n label={fixture.teams.away.name}\n textColor={getStatusByNumber(\n data?.data.team_comparison.away_team.team_health_index,\n )}\n aria-label={`${fixture.teams.away.name} Team Health Index`}\n className=\"w-1/2 flex-[50%]\"\n />\n </Stack>\n\n <Stack className=\"w-full\">\n <ProgressBar\n values={[\n data?.data.team_comparison.home_team.motivations,\n data?.data.team_comparison.away_team.motivations,\n ]}\n label=\"Motivations\"\n leftLabel={`${fixture.teams.home.name} motivation score`}\n rightLabel={`${fixture.teams.away.name} motivation score`}\n prefix=\"/10\"\n colorRule={getStatusByNumber}\n aria-label=\"Motivations Comparison\"\n />\n <ProgressBar\n values={[\n data?.data.team_comparison.home_team.injury_impact,\n data?.data.team_comparison.away_team.injury_impact,\n ]}\n label=\"Injury Impact\"\n leftLabel={`${fixture.teams.home.name} injury impact score`}\n rightLabel={`${fixture.teams.away.name} injury impact score`}\n prefix=\"/10\"\n colorRule={getStatusByNumberReverse}\n aria-label=\"Injury Impact Comparison\"\n />\n <ProgressBar\n values={[\n data?.data.team_comparison.home_team.tactical_advantage,\n data?.data.team_comparison.away_team.tactical_advantage,\n ]}\n label=\"Tactical Advantage\"\n leftLabel={`${fixture.teams.home.name} tactical advantage score`}\n rightLabel={`${fixture.teams.away.name} tactical advantage score`}\n prefix=\"/10\"\n colorRule={getStatusByNumber}\n aria-label=\"Tactical Advantage Comparison\"\n />\n <ProgressBar\n values={[\n data?.data.team_comparison.home_team.recent_form,\n data?.data.team_comparison.away_team.recent_form,\n ]}\n leftLabel={`${fixture.teams.home.name} recent form score`}\n rightLabel={`${fixture.teams.away.name} recent form score`}\n label=\"Recent Form\"\n prefix=\"/10\"\n colorRule={getStatusByNumber}\n aria-label=\"Recent Form Comparison\"\n />\n </Stack>\n\n <ReadmeContent\n className=\"prose prose-sm prose-slate dark:prose-invert\"\n aria-label=\"Team Comparison Reasoning\"\n content={data?.data.team_comparison.reasoning}\n />\n </Stack>\n );\n};\n","import { Stack } from \"@ui/layout\";\nimport { useFixtureContext } from \"@components/FixtureCard/context\";\nimport { Icon } from \"@ui/elements\";\n\nexport const DoDont = () => {\n const {\n source: { data },\n fixture,\n } = useFixtureContext();\n\n return (\n <Stack spacing=\"xl\">\n <h4 className=\"sr-only\">Do and Don't Recommendations</h4>\n <Stack>\n <Stack direction=\"horizontal\" spacing=\"xs\">\n <Icon\n icon=\"ThumbsUp\"\n weight=\"duotone\"\n className=\"size-6 text-green-500\"\n />\n <h4 className=\"bg mid text font-semibold dark:text-neutral-300\">\n Do\n </h4>\n </Stack>\n {data?.data.recommendations.betting_recommendations.map((item) => (\n <Stack key={`${item.title}-${fixture.fixture.id}`} spacing=\"xxs\">\n <Stack direction=\"horizontal\" align=\"center\" spacing=\"xs\">\n <div className=\"flex size-4 items-center justify-center rounded-full bg-green-400/30\">\n <div className=\"size-2 rounded-full bg-green-400\" />\n </div>\n <h5 className=\"text-sm font-semibold dark:text-neutral-300\">\n {item.title}\n </h5>\n </Stack>\n <p className=\"text-sm leading-relaxed text-gray-500 dark:text-neutral-400\">\n {item.short_reasoning}\n </p>\n </Stack>\n ))}\n </Stack>\n <Stack>\n <Stack direction=\"horizontal\" spacing=\"xs\">\n <Icon\n icon=\"ThumbsDown\"\n weight=\"duotone\"\n className=\"size-6 text-red-500\"\n />\n <h4 className=\"bg mid text font-semibold dark:text-neutral-300\">\n Don't\n </h4>\n </Stack>\n {data?.data.recommendations.things_to_avoid.map((item) => (\n <Stack key={`${item.title}-${fixture.fixture.id}`} spacing=\"xxs\">\n <Stack direction=\"horizontal\" align=\"center\" spacing=\"xs\">\n <div className=\"flex size-4 items-center justify-center rounded-full bg-red-400/30\">\n <div className=\"size-2 rounded-full bg-red-400\" />\n </div>\n <h5 className=\"text-sm font-semibold dark:text-neutral-300\">\n {item.title}\n </h5>\n </Stack>\n <p className=\"text-sm leading-relaxed text-gray-500 dark:text-neutral-400\">\n {item.short_reasoning}\n </p>\n </Stack>\n ))}\n </Stack>\n </Stack>\n );\n};\n","import * as React from \"react\";\n\nimport {\n useFloating,\n autoUpdate,\n offset,\n flip,\n shift,\n useHover,\n useFocus,\n useDismiss,\n useRole,\n useInteractions,\n useMergeRefs,\n FloatingPortal,\n} from \"@floating-ui/react\";\nimport type { Placement } from \"@floating-ui/react\";\n\ninterface TooltipOptions {\n initialOpen?: boolean;\n placement?: Placement;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function useTooltip({\n initialOpen = false,\n placement = \"top\",\n open: controlledOpen,\n onOpenChange: setControlledOpen,\n}: TooltipOptions = {}) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(initialOpen);\n\n const open = controlledOpen ?? uncontrolledOpen;\n const setOpen = setControlledOpen ?? setUncontrolledOpen;\n\n const data = useFloating({\n placement,\n open,\n onOpenChange: setOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(10),\n flip({\n crossAxis: placement.includes(\"-\"),\n fallbackAxisSideDirection: \"start\",\n padding: 5,\n }),\n shift({ padding: 5 }),\n ],\n });\n\n const context = data.context;\n\n const hover = useHover(context, {\n move: false,\n enabled: controlledOpen == null,\n });\n const focus = useFocus(context, {\n enabled: controlledOpen == null,\n });\n const dismiss = useDismiss(context);\n const role = useRole(context, { role: \"tooltip\" });\n\n const interactions = useInteractions([hover, focus, dismiss, role]);\n\n return React.useMemo(\n () => ({\n open,\n setOpen,\n ...interactions,\n ...data,\n }),\n [open, setOpen, interactions, data],\n );\n}\n\ntype ContextType = ReturnType<typeof useTooltip> | null;\n\nconst TooltipContext = React.createContext<ContextType>(null);\n\nexport const useTooltipContext = () => {\n const context = React.useContext(TooltipContext);\n\n if (context == null) {\n throw new Error(\"Tooltip components must be wrapped in <Tooltip />\");\n }\n\n return context;\n};\n\nexport function Tooltip({\n children,\n ...options\n}: { children: React.ReactNode } & TooltipOptions) {\n const tooltip = useTooltip(options);\n return (\n <TooltipContext.Provider value={tooltip}>\n {children}\n </TooltipContext.Provider>\n );\n}\n\nexport const TooltipTrigger = React.forwardRef<\n HTMLElement,\n React.HTMLProps<HTMLElement> & { asChild?: boolean }\n>(function TooltipTrigger({ children, asChild = false, ...props }, propRef) {\n const context = useTooltipContext();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const childrenRef = (children as unknown as any).ref;\n const ref = useMergeRefs([context.refs.setReference, propRef, childrenRef]);\n\n // `asChild` allows the user to pass any element as the anchor\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n children,\n context.getReferenceProps({\n ref,\n ...props,\n \"aria-describedby\": context.open ? \"tooltip-content\" : undefined,\n }),\n );\n }\n\n return (\n <span\n ref={ref}\n aria-describedby={context.open ? \"tooltip-content\" : undefined}\n {...context.getReferenceProps(props)}\n >\n {children}\n </span>\n );\n});\n\nexport const TooltipContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLProps<HTMLDivElement>\n // eslint-disable-next-line react/prop-types\n>(function TooltipContent({ style, id, ...props }, propRef) {\n const context = useTooltipContext();\n const ref = useMergeRefs([context.refs.setFloating, propRef]);\n\n if (!context.open) return null;\n\n return (\n <FloatingPortal>\n <div\n ref={ref}\n id={id}\n role=\"tooltip\"\n style={{\n ...context.floatingStyles,\n ...style,\n }}\n {...context.getFloatingProps(props)}\n />\n </FloatingPortal>\n );\n});\n","import React from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n ColumnDef,\n flexRender,\n Table,\n} from \"@tanstack/react-table\";\nimport { Tip, Ratings } from \"@api\";\nimport { Stack } from \"@ui/layout\";\nimport classNames from \"classnames\";\nimport { Button, Icon, Tag } from \"@ui/elements\";\nimport { StatusColor } from \"@utils\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@components/Tooltip/Tooltip\";\n\nconst TagVariant: Record<Ratings, StatusColor> = {\n safe: \"success\",\n \"super safe\": \"success\",\n value: \"info\",\n risky: \"danger\",\n};\n\ninterface TipTableProps {\n data: Tip[];\n}\n\nconst TipTable: React.FC<TipTableProps> = ({ data }) => {\n const columns = React.useMemo<ColumnDef<Tip, string | number>[]>(\n () => [\n {\n accessorFn: (row) => row.bet_amount,\n id: \"reasoning\",\n header: \"\",\n cell: (info) => {\n const row = info.row.original;\n\n return (\n <Tooltip placement=\"bottom-start\">\n <TooltipTrigger>\n <Button\n size=\"custom\"\n className=\"-ml-1 -mr-3 size-9 w-9 max-w-9 bg-gray-100 p-0 hover:bg-gray-200 active:scale-95 active:bg-gray-300 dark:bg-neutral-700 dark:hover:bg-neutral-600\"\n aria-label={`View reasoning for ${row.category} ${row.name}`}\n >\n <Icon icon=\"Lightbulb\" className=\"size-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent className=\"prose z-20 max-w-sm rounded border border-gray-300 bg-white px-4 py-3 text-sm dark:prose-invert dark:border-neutral-800 dark:bg-neutral-900\">\n <p>{row.reasoning}</p>\n </TooltipContent>\n </Tooltip>\n );\n },\n },\n {\n accessorKey: \"name\",\n header: \"\",\n cell: (info) => {\n const row = info.row.original;\n\n return (\n <Stack spacing=\"none\">\n <p>{row.name}</p>\n <p className=\"max-w-28 truncate text-xs text-gray-500 lg:max-w-36 dark:text-neutral-400\">\n {row.category}\n </p>\n </Stack>\n );\n },\n },\n {\n accessorFn: (row) => row.odds,\n id: \"odds\",\n header: \"Odds\",\n cell: (info) => {\n const value = info.getValue() as number;\n\n return value.toFixed(2);\n },\n },\n {\n accessorFn: (row) => row.probability,\n id: \"probability\",\n header: \"Probability\",\n cell: (info) => {\n const value = info.getValue() as number;\n const row = info.row.original;\n\n return (\n <Tag\n size=\"sm\"\n className=\"px-2.5 py-1.5\"\n variant={TagVariant[row.rating]}\n >\n {value.toFixed()}%\n </Tag>\n );\n },\n },\n {\n accessorFn: (row) => row.bet_amount,\n id: \"bet_amount\",\n header: \"Stake\",\n cell: (info) => {\n const value = info.getValue() as number;\n\n return `${value.toFixed()}%`;\n },\n },\n {\n id: \"winner\",\n header: \"Profit/Loss\",\n cell: (info) => {\n const row = info.row.original;\n\n return (\n <p\n className={classNames(\"font-semibold\", {\n \"text-green-500\": row.winner,\n \"text-red-500\": !row.winner,\n })}\n >\n {row.winner\n ? `+${(row.bet_amount * (row.odds - 1)).toFixed(2)}%`\n : `-${row.bet_amount.toFixed(2)}%`}\n </p>\n );\n },\n },\n ],\n [],\n );\n\n // Create the table instance\n const table: Table<Tip> = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n const getColumnClasses = (columnId: keyof Tip) => {\n if (columnId === \"name\") {\n return \"w-2/3\";\n }\n\n return \"w-1/6\";\n };\n\n return (\n <div className=\"w-full overflow-x-auto rounded-lg\">\n <table className=\"min-w-full\">\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <th\n key={header.id}\n className=\"px-2.5 py-2 text-left text-xs font-normal text-gray-400\"\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map((row) => (\n <tr\n key={row.id}\n className=\"border-t border-gray-200 transition-colors hover:bg-gray-100 dark:border-neutral-700 dark:hover:bg-neutral-700\"\n >\n {row.getVisibleCells().map((cell) => (\n <td\n key={cell.id}\n className={classNames(\n \"px-2.5 py-2 text-sm text-gray-800 dark:text-neutral-300\",\n getColumnClasses(cell.column.id as keyof Tip),\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default TipTable;\n","\"use client\";\n\nimport React, { FC, useRef, useState } from \"react\";\nimport { Stack } from \"@ui/layout\";\nimport Image from \"next/image\";\nimport { Icon, Tag } from \"@ui/elements\";\nimport dayjs from \"dayjs\";\nimport { Tab } from \"@components/Tab/Tab\";\nimport { TipsWithFixture, useGetMatchAnalysis } from \"@api\";\nimport { MatchPreview } from \"@components/FixtureCard/Tabs/MatchPreview\";\nimport { FixtureProvider } from \"@components/FixtureCard/context\";\nimport { CorrectScore } from \"@components/FixtureCard/Tabs/CorrectScore\";\nimport { TeamComparison } from \"@components/FixtureCard/Tabs/TeamComparison\";\nimport { DoDont } from \"@components/FixtureCard/Tabs/DoDont\";\nimport TipTable from \"@components/TipsTable/TipsTable\";\n// import { ScreenshotButton } from \"@components/ScreenshotButton/ScreenshotButton\";\n\ntype FixtureCardProps = {\n data: TipsWithFixture;\n onTabChange?: () => void;\n};\n\nexport const FixtureCard: FC<FixtureCardProps> = ({\n data: { fixture, tips },\n onTabChange,\n}) => {\n const [activeTab, setActiveTab] = useState<string>(\"match-preview\");\n const elementRef = useRef<HTMLElement>(null);\n\n const source = useGetMatchAnalysis(String(fixture.fixture.id));\n\n const handleTabChange = (tab: string) => {\n setActiveTab(tab);\n };\n\n return (\n <FixtureProvider value={{ source, fixture }}>\n <article\n key={`recent-fixture-${fixture.fixture.id}`}\n ref={elementRef}\n className=\"flex w-full flex-col items-start gap-xl rounded-lg border border-gray-200 bg-white p-4 dark:border-neutral-700 dark:bg-neutral-900 dark:shadow-none\"\n >\n <header className=\"flex w-full items-center justify-between gap-md\">\n <div className=\"flex min-w-0 flex-1 items-center gap-xs overflow-hidden md:gap-md\">\n <div className=\"flex\">\n <figure className=\"flex size-14 items-center justify-center rounded-full border-4 border-white bg-gray-100 p-3 md:size-16 md:p-4 dark:border-neutral-900 dark:bg-neutral-800\">\n <Image\n alt={`Logo of ${fixture.teams.home.name}`}\n width={48}\n height={48}\n src={fixture.teams.home.logo}\n loading=\"lazy\"\n />\n <figcaption className=\"sr-only\">\n Logo of {fixture.teams.home.name}\n </figcaption>\n </figure>\n <figure className=\"-ml-4 flex size-14 items-center justify-center rounded-full border-4 border-white bg-gray-100 p-3 md:size-16 md:p-4 dark:border-neutral-900 dark:bg-neutral-800\">\n <Image\n alt={`Logo of ${fixture.teams.away.name}`}\n width={48}\n height={48}\n src={fixture.teams.away.logo}\n loading=\"lazy\"\n />\n <figcaption className=\"sr-only\">\n Logo of {fixture.teams.away.name}\n </figcaption>\n </figure>\n </div>\n\n <div className=\"min-w-0 flex-1 overflow-hidden\">\n <p className=\"truncate font-semibold dark:text-neutral-300\">\n {fixture.teams.home.name} vs {fixture.teams.away.name}\n </p>\n <Stack\n direction=\"horizontal\"\n align=\"center\"\n spacing=\"xs\"\n className=\"min-w-0 overflow-hidden\"\n >\n <div className=\"flex min-w-0 items-center gap-xxs text-gray-400\">\n <Icon icon=\"CalendarBlank\" className=\"size-4\" />\n <time\n dateTime={dayjs(fixture.fixture.date).format(\"YYYY-MM-DD\")}\n className=\"font-regular truncate text-xs text-gray-400\"\n >\n {dayjs(fixture.fixture.date).format(\"DD MMMM\")}\n </time>\n </div>\n <div className=\"flex min-w-0 items-center gap-xxs text-gray-400\">\n <Icon icon=\"Trophy\" className=\"size-4\" />\n <span className=\"font-regular truncate text-xs\">\n {fixture.league.name}\n </span>\n </div>\n </Stack>\n </div>\n </div>\n\n <div className=\"flex-shrink-0\">\n <Tag variant=\"neutral\" className=\"text-nowrap\">\n {fixture.score.fulltime.home} - {fixture.score.fulltime.away}\n </Tag>\n </div>\n {/*{elementRef && (*/}\n {/* <ScreenshotButton*/}\n {/* elementRef={elementRef}*/}\n {/* className=\"print-hidden\"*/}\n {/* filename={`${fixture.teams.home.name.toLowerCase().split(\" \").join(\"_\")}_vs_${fixture.teams.away.name.toLowerCase().split(\" \").join(\"_\")}.png`}*/}\n {/* >*/}\n {/* <Icon icon=\"Database\" />*/}\n {/* </ScreenshotButton>*/}\n {/*)}*/}\n </header>\n\n <Tab\n value={activeTab}\n onChange={handleTabChange}\n onContentUpdate={() => {\n onTabChange?.();\n }}\n tabId={`fixture-card-${fixture.fixture.id}`}\n items={[\n {\n name: \"match-preview\",\n label: \"Match Preview\",\n icon: \"Newspaper\",\n content: <MatchPreview />,\n },\n {\n name: \"correct-score\",\n label: \"Correct Score\",\n icon: \"Target\",\n content: <CorrectScore />,\n },\n {\n name: \"team-comparison\",\n label: \"Team Comparison\",\n icon: \"ArrowsLeftRight\",\n content: <TeamComparison />,\n },\n {\n name: \"do-dont\",\n label: \"Do’s & Don’ts\",\n icon: \"ThumbsUp\",\n content: <DoDont />,\n },\n {\n name: \"tips\",\n label: \"Betting Tips\",\n icon: \"Coins\",\n highlighted: true,\n content: <TipTable data={tips} />,\n },\n ]}\n />\n </article>\n </FixtureProvider>\n );\n};\n","\"use client\";\n\nimport { Stack } from \"@ui/layout\";\nimport { Button, Icon, Tag, Title } from \"@ui/elements\";\nimport { GetTipsPerformanceParams, useGetTipsPerformance } from \"@api\";\nimport dayjs from \"dayjs\";\nimport React, { useCallback, useRef, useState, useEffect } from \"react\";\nimport classNames from \"classnames\";\n\nimport GridPattern from \"@components/ui/grid-pattern\";\nimport { cn } from \"@/lib/utils\";\nimport { Swiper, SwiperRef, SwiperSlide } from \"swiper/react\";\nimport { Navigation } from \"swiper/modules\";\nimport { useDeviceType } from \"@hooks/useDeviceType\";\nimport { FixtureCard } from \"@components/FixtureCard/FixtureCard\";\nimport { Container } from \"@components/Container/Container\";\nimport { sendGTMEvent } from \"@next/third-parties/google\";\nimport { getUtmParams, useUtmLink } from \"@utils\";\n\nexport const RecentFixtures = () => {\n const swiperInstance = useRef<SwiperRef>(null);\n const navigationPrevRef = useRef<HTMLButtonElement>(null);\n const navigationNextRef = useRef<HTMLButtonElement>(null);\n const dashboardLink = useUtmLink(process.env.NEXT_PUBLIC_APP_URL || \"\");\n\n const [navigationInitialized, setNavigationInitialized] = useState(false);\n\n const query: GetTipsPerformanceParams = {\n type: \"resultOriented\",\n sort: \"desc\",\n page: 1,\n pageSize: 5,\n from: dayjs().subtract(30, \"days\").format(\"YYYY-MM-DD\"),\n };\n const { data: tipsData } = useGetTipsPerformance(query);\n const deviceType = useDeviceType();\n\n const handleTabChange = useCallback(() => {\n if (swiperInstance?.current?.swiper) {\n swiperInstance.current.swiper.updateAutoHeight(\n deviceType === \"desktop\" ? 150 : 0,\n );\n }\n }, [swiperInstance, deviceType]);\n\n useEffect(() => {\n // Trigger re-render to pass navigation elements once refs are set\n setNavigationInitialized(true);\n }, []);\n\n return (\n <Stack className=\"relative px-6 py-20 md:py-32\" id=\"latest-predictions\">\n <div className=\"absolute left-0 top-0 z-10 h-20 w-full bg-gradient-to-b to-transparent dark:from-neutral-900\" />\n <div className=\"absolute bottom-0 left-0 z-10 h-20 w-full bg-gradient-to-t to-transparent dark:from-neutral-900\" />\n <GridPattern\n width={30}\n height={30}\n x={-1}\n y={-1}\n strokeDasharray={\"4 2\"}\n className={cn(\n \"[mask-image:radial-gradient(50rem_circle_at_center,white,transparent)]\",\n )}\n />\n\n <Container>\n <div className=\"mx-auto flex flex-col items-center gap-lg xl:flex-row-reverse xl:gap-xxl\">\n <Stack\n className=\"max-w-3xl xl:max-w-xl\"\n spacing=\"md\"\n data-aos=\"fade-up\"\n >\n <Tag size=\"md\" variant=\"neutral\">\n AI Performance\n </Tag>\n <Stack spacing=\"xxl\">\n <Stack spacing=\"xs\">\n <Title as=\"h2\" styleAs=\"h1\">\n Latest Predictions\n </Title>\n <Title\n as=\"h3\"\n type=\"subtitle\"\n color=\"tertiary\"\n className=\"font-light leading-relaxed tracking-wide\"\n >\n Get a taste of what Football Genie delivers. Accurate\n predictions, reliable insights, and a proven track betting\n record awaits you.\n </Title>\n </Stack>\n\n <Button\n color=\"primary\"\n size=\"medium\"\n className=\"hidden xl:flex\"\n as=\"link\"\n data-aos=\"fade-up\"\n href={process.env.NEXT_PUBLIC_APP_URL || \"\"}\n tabIndex={0}\n aria-label=\"View and explore upcoming AI football tips and predictions\"\n onClick={() =>\n sendGTMEvent({\n event: \"cta_click\",\n value: \"latest_predictions\",\n ...getUtmParams(),\n })\n }\n >\n Upcoming Tips\n </Button>\n </Stack>\n </Stack>\n <Stack\n align=\"center\"\n className=\"relative max-w-[100vw] flex-1 md:max-w-full lg:max-w-3xl\"\n >\n <nav\n aria-label=\"Latest Predictions slider navigation\"\n className=\"relative z-10 flex w-full justify-end gap-md pr-2\"\n >\n <Button\n ref={navigationPrevRef}\n aria-label=\"Previous fixture\"\n className={classNames(\n \"h-8 bg-white ring-1 ring-gray-200 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 dark:bg-neutral-800 dark:text-neutral-300 dark:ring-neutral-700\",\n )}\n >\n <Icon icon=\"CaretLeft\" className=\"size-6\" />\n <span className=\"sr-only\">Previous fixture</span>\n </Button>\n <Button\n ref={navigationNextRef}\n aria-label=\"Next fixture\"\n className={classNames(\n \"h-8 bg-white ring-1 ring-gray-200 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 dark:bg-neutral-800 dark:text-neutral-300 dark:ring-neutral-700\",\n )}\n >\n <Icon icon=\"CaretRight\" className=\"size-6\" />\n <span className=\"sr-only\">Next fixture</span>\n </Button>\n </nav>\n <Swiper\n spaceBetween={50}\n modules={[Navigation]}\n navigation={\n navigationInitialized\n ? {\n nextEl: navigationNextRef.current,\n prevEl: navigationPrevRef.current,\n }\n : false\n }\n a11y={{\n prevSlideMessage: \"Previous fixture\",\n nextSlideMessage: \"Next fixture\",\n slideLabelMessage: \"{{index}} / {{slidesLength}}\",\n }}\n onSwiper={(swiper) => {\n if (\n navigationPrevRef.current &&\n navigationNextRef.current &&\n !navigationInitialized\n ) {\n if (typeof swiper.params?.navigation === \"object\") {\n swiper.params.navigation.prevEl = navigationPrevRef.current;\n swiper.params.navigation.nextEl = navigationNextRef.current;\n }\n swiper.navigation.init();\n swiper.navigation.update();\n setNavigationInitialized(true);\n }\n }}\n ref={swiperInstance}\n slidesPerView={1}\n loop={false}\n allowTouchMove={deviceType === \"desktop\"}\n autoHeight={true}\n className=\"w-full\"\n >\n {tipsData?.data.data.map((match) => (\n <SwiperSlide key={`recent-fixture-${match.fixture.fixture.id}`}>\n <div className=\"w-full flex-none p-2\">\n <FixtureCard data={match} onTabChange={handleTabChange} />\n </div>\n </SwiperSlide>\n ))}\n </Swiper>\n <div className=\"flex w-full justify-end px-2 xl:hidden\">\n <Button\n color=\"primary\"\n size=\"medium\"\n as=\"link\"\n href={dashboardLink}\n tabIndex={0}\n aria-label=\"View and explore upcoming AI football tips and predictions\"\n onClick={() =>\n sendGTMEvent({\n event: \"cta_click\",\n value: \"latest_predictions\",\n ...getUtmParams(),\n })\n }\n >\n Upcoming Tips\n </Button>\n </div>\n </Stack>\n </div>\n </Container>\n </Stack>\n );\n};\n","export * from \"./RecentFixtures\";\n","export default {\"src\":\"/_next/static/media/rocket.e045eed2.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAMFBMVEVRLm3hq3qTJjEQVLOpcURlSXG5IyPLcmqAI0NkKz9dNUd5S2JHLEliKE2VP0uzXGlRPGY/AAAADHRSTlMBFVZMjilKx/n83N+iClr1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAMUlEQVR4nGNgYGBgZGSAAHZ2CM3Ex88EZrDx8LKBGaycHKxgBjMXNzNEEQsLVBdYOwAWZACXIIRozQAAAABJRU5ErkJggg==\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/lab.8aa17ff0.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAALVBMVEVMaXFaJjNBJjZWPjZIREQIAAgpFi2lKVNsEkjGHkMkCy+qGVmjFlImCzDSF1GEc2GyAAAADnRSTlMAOyOyNBFJZPRthvz9hGESZLgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAA0SURBVHicLctJEgAgCAPBgCzi9v/nWgq5TF8CAETItVYQKTBn1Uw/du/jleY56/3YI5xxAQ3vAKvZ2K6uAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/chat-bubble.6ff30b76.png\",\"height\":500,\"width\":500,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAUVBMVEVMaXE2MZLRPUnVTnMRDnEuJpEMCluBLmJVE1PdaoXcfongqJ4AADTwsZStq5+jdYEmHYZHUKvfZ3U6crgVEIBdhr8nJZUPC2/prZF/M2gxSKn5fgg5AAAAFnRSTlMAcZI3tU56EyYl5IcxVvr9/az8+va9D8lTUwAAAAlwSFlzAAALEwAACxMBAJqcGAAAADhJREFUeJxVy1sCgBAUQMGjyKtQcan9L7TfzP/A3xE9YM6WRvAYkffO14qSWuRZwOretbOA2/ZpfkVOAdofTX/2AAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","import { Stack } from \"@ui/layout\";\nimport { Button, Tag, Title } from \"@ui/elements\";\nimport React, { HTMLAttributes } from \"react\";\nimport Image, { StaticImageData } from \"next/image\";\nimport rocket from \"./rocket.png\";\nimport lab from \"./lab.png\";\nimport chatBubble from \"./chat-bubble.png\";\nimport { cn } from \"@/lib/utils\";\nimport { Container } from \"@components/Container/Container\";\nimport { sendGTMEvent } from \"@next/third-parties/google\";\nimport { getUtmParams } from \"@utils\";\n\ninterface CardProps extends HTMLAttributes<HTMLDivElement> {\n icon: StaticImageData;\n alt: string;\n title: string;\n description: string;\n bgColorLight: string;\n bgColorDark: string;\n}\n\nconst Card: React.FC<CardProps> = ({\n icon,\n alt,\n title,\n description,\n bgColorLight,\n bgColorDark,\n className,\n ...rest\n}) => {\n return (\n <article\n className={cn(\n \"group relative overflow-hidden rounded-lg border border-gray-200 p-7 md:p-10 2xl:p-14 dark:border-neutral-700 dark:bg-neutral-800\",\n className,\n )}\n {...rest}\n >\n {/* Background Circles */}\n <div className=\"absolute inset-0 hidden dark:block\" aria-hidden=\"true\">\n <div\n className=\"absolute size-40 -translate-x-1/2 rounded-full opacity-60 blur-3xl filter transition-transform duration-500 xl:group-hover:translate-y-96 dark:opacity-80\"\n style={{\n backgroundColor: bgColorDark,\n }}\n />\n <div\n className=\"absolute bottom-0 right-0 size-40 translate-x-1/2 rounded-full opacity-60 blur-3xl filter transition-transform duration-500 xl:group-hover:-translate-y-96 dark:opacity-80\"\n style={{\n backgroundColor: bgColorDark,\n }}\n />\n </div>\n <div className=\"absolute inset-0 dark:hidden\" aria-hidden=\"true\">\n <div\n className=\"absolute size-40 -translate-x-1/2 rounded-full opacity-60 blur-3xl filter transition-transform duration-500 xl:group-hover:translate-y-96 dark:opacity-80\"\n style={{\n backgroundColor: bgColorLight,\n }}\n />\n <div\n className=\"absolute bottom-0 right-0 size-40 translate-x-1/2 rounded-full opacity-60 blur-3xl filter transition-transform duration-500 xl:group-hover:-translate-y-96 dark:opacity-80\"\n style={{\n backgroundColor: bgColorLight,\n }}\n />\n </div>\n {/* Content */}\n <div className=\"relative z-10 flex flex-col gap-xxs md:gap-md\">\n <Image\n src={icon}\n className=\"size-32 md:size-40\"\n alt={alt}\n loading=\"lazy\"\n />\n <h4 className=\"mt-4 text-xl font-semibold text-gray-800 md:text-2xl dark:text-gray-100\">\n {title}\n </h4>\n <p className=\"mt-2 text-sm leading-relaxed tracking-wide text-gray-600 md:text-base dark:text-neutral-300\">\n {description}\n </p>\n </div>\n </article>\n );\n};\n\nexport const AboutUs: React.FC = () => {\n return (\n <section\n className=\"flex flex-col items-start gap-md px-6 py-14 md:py-24\"\n aria-labelledby=\"about-us-heading\"\n >\n <Container>\n <Stack spacing=\"xxxl\" className=\"w-full\">\n <header\n data-aos=\"fade-up\"\n className=\"flex w-full flex-col items-start gap-md\"\n >\n <Tag size=\"md\" variant=\"neutral\" as=\"p\">\n About Us\n </Tag>\n <Stack spacing=\"xxl\" className=\"w-full\">\n <Stack spacing=\"xs\" className=\"w-full max-w-4xl justify-between\">\n <Title as=\"h2\" styleAs=\"h1\" id=\"about-us-heading\">\n We are shaping the future of{\" \"}\n <strong className=\"text-primary\">Football Analysis</strong>\n </Title>\n <Title\n as=\"h3\"\n type=\"subtitle\"\n color=\"tertiary\"\n className=\"font-light leading-relaxed tracking-wide\"\n >\n Our passion for football and cutting-edge technology fuels\n every feature we create. Discover the core values that drive\n us.\n </Title>\n </Stack>\n </Stack>\n </header>\n <div className=\"grid grid-cols-1 gap-xl md:grid-cols-2 xl:grid-cols-3 2xl:gap-xxl\">\n <Card\n icon={rocket}\n alt=\"Rocket icon symbolizing startup spirit in football betting analysis\"\n title=\"Startup Spirit\"\n description=\"As a small, independent startup, we focus entirely on what matters: delivering exceptional insights straight to you.\"\n bgColorLight=\"rgba(255, 99, 71, 0.3)\"\n bgColorDark=\"rgba(255, 99, 71, 0.8)\"\n />\n <Card\n icon={lab}\n alt=\"Laboratory icon representing expertise in technology for football analysis\"\n title=\"Experts in Technology\"\n description=\"We harness the power of AI to revolutionize football analysis, offering fans and bettors unparalleled tools to stay ahead.\"\n bgColorLight=\"rgba(249, 20, 78, 0.3)\"\n bgColorDark=\"rgba(249, 20, 78, 0.8)\"\n />\n <Card\n icon={chatBubble}\n alt=\"Chat bubbles illustrating community-driven approach in football analysis\"\n title=\"Community-Driven\"\n description=\"Our platform evolves with your feedback at its heart. Join us, and let’s innovate the future of football analysis together.\"\n bgColorLight=\"rgba(70, 130, 180, 0.3)\"\n bgColorDark=\"rgba(70, 130, 180, 0.8)\"\n className=\"md:col-span-2 xl:col-span-1\"\n />\n </div>\n <Button\n color=\"primary\"\n size=\"medium\"\n href=\"#contact\"\n as=\"link\"\n aria-label=\"Get in touch with us\"\n onClick={() =>\n sendGTMEvent({\n event: \"link_click\",\n value: \"about_us_contact\",\n ...getUtmParams(),\n })\n }\n >\n Get in Touch\n </Button>\n </Stack>\n </Container>\n </section>\n );\n};\n","export default {\"src\":\"/_next/static/media/founder.2af0a630.jpg\",\"height\":1447,\"width\":1447,\"blurDataURL\":\"data:image/jpeg;base64,/9j/2wBDAAoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/2wBDAQoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/wgARCAAIAAgDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAACsB//EAB0QAAEEAgMAAAAAAAAAAAAAAAECAwQSAAURUVL/2gAIAQEAAT8AaOxMqxk2QpsIHm3PWf/EABkRAAEFAAAAAAAAAAAAAAAAAAIAARFCkf/aAAgBAgEBPwB4Gg4v/8QAGREAAQUAAAAAAAAAAAAAAAAAAAECIUKR/9oACAEDAQE/AJWztP/Z\",\"blurWidth\":8,\"blurHeight\":8};","import React, { forwardRef, TextareaHTMLAttributes } from \"react\";\nimport TextareaAutosize from \"react-textarea-autosize\";\nimport { cn } from \"@/lib/utils\";\n\ntype TextAreaProps = {\n label: string;\n} & Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"style\">;\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n ({ label, id, className, value, ...rest }, ref) => {\n return (\n <div className=\"relative w-full\">\n <TextareaAutosize\n id={id}\n value={value}\n className={cn(\n \"peer block w-full resize-none overflow-hidden rounded-lg border-gray-200 bg-gray-100 p-4 text-sm placeholder:text-transparent autofill:pb-2 autofill:pt-6 focus:border-primary focus:pb-2 focus:pt-6 focus:ring-primary disabled:pointer-events-none disabled:opacity-50 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-200 dark:focus:ring-neutral-600 [&:not(:placeholder-shown)]:pb-2 [&:not(:placeholder-shown)]:pt-7\",\n className,\n )}\n placeholder=\"********\"\n ref={ref}\n {...rest}\n />\n\n <label\n htmlFor={id}\n className=\"pointer-events-none absolute start-0 top-0 h-full origin-[0_0] truncate border border-transparent p-4 text-sm transition duration-100 ease-in-out peer-focus:-translate-y-1.5 peer-focus:translate-x-0.5 peer-focus:scale-90 peer-focus:text-gray-400 peer-disabled:pointer-events-none peer-disabled:opacity-50 peer-[:not(:placeholder-shown)]:-translate-y-1.5 peer-[:not(:placeholder-shown)]:translate-x-0.5 peer-[:not(:placeholder-shown)]:scale-90 peer-[:not(:placeholder-shown)]:text-gray-400 dark:text-neutral-400 dark:peer-focus:text-gray-500 dark:peer-[:not(:placeholder-shown)]:text-gray-400\"\n >\n {label}\n </label>\n </div>\n );\n },\n);\n\nTextArea.displayName = \"TextArea\";\n","import { Tag, Title } from \"@ui/elements\";\nimport React, { FC, HTMLAttributes } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\ntype GetInTouchHeaderProps = HTMLAttributes<HTMLDivElement> & {\n hasId?: boolean;\n};\n\nexport const GetInTouchHeader: FC<GetInTouchHeaderProps> = ({\n className,\n hasId,\n ...rest\n}) => {\n return (\n <header\n className={cn(\"flex w-full flex-col items-start gap-md\", className)}\n {...rest}\n >\n <Tag size=\"md\" variant=\"neutral\">\n Contact us\n </Tag>\n <Title\n as=\"h2\"\n styleAs=\"h1\"\n className=\"max-w-2xl\"\n {...(hasId ? { id: \"contact-heading\" } : {})}\n >\n <span className=\"sr-only\">\n Get in Touch with us! We'd love to hear from you!\n </span>\n Get in Touch!\n </Title>\n <Title as=\"h3\" type=\"subtitle\" color=\"tertiary\" className=\"max-w-md\">\n Have a question or just want to say hi? We’d love to hear from you!\n </Title>\n </header>\n );\n};\n","\"use client\";\n\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { Stack } from \"@ui/layout\";\nimport { Button, Icon } from \"@ui/elements\";\nimport { Input } from \"@components/forms/Input/Input\";\nimport { TextArea } from \"@components/forms/TextArea/TextArea\";\nimport { useForm, Controller } from \"react-hook-form\";\nimport { useContact } from \"@api\";\nimport ReCAPTCHA from \"react-google-recaptcha\";\nimport { useTheme } from \"next-themes\";\nimport { GetInTouchHeader } from \"@components/Contact/GetInTouchHeader\";\n\ntype FormData = {\n name: string;\n email: string;\n message: string;\n recaptchaToken: string;\n};\n\nexport const ContactForm = () => {\n const { resolvedTheme } = useTheme();\n const {\n control,\n handleSubmit,\n formState: { errors },\n reset,\n } = useForm<FormData>();\n const {\n mutateAsync: sendContact,\n isPending: sendContactLoading,\n isError,\n error,\n } = useContact();\n const recaptchaRef = useRef<ReCAPTCHA>(null);\n const [showSuccess, setShowSuccess] = useState(false);\n\n const captchaTheme = useMemo(() => {\n if (resolvedTheme === \"dark\") {\n return \"dark\";\n }\n\n if (resolvedTheme === \"light\") {\n return \"light\";\n }\n\n return undefined;\n }, [resolvedTheme]);\n\n const onSubmit = async (data: FormData) => {\n const recaptchaToken = await recaptchaRef.current?.executeAsync();\n\n recaptchaRef.current?.reset();\n\n data.recaptchaToken = recaptchaToken || \"\";\n\n const cleanedData = Object.entries(data).reduce((acc, [key, value]) => {\n if (value) {\n acc[key as keyof FormData] = value;\n }\n return acc;\n }, {} as FormData);\n\n await sendContact({ data: cleanedData });\n\n setShowSuccess(true);\n\n setTimeout(() => {\n setShowSuccess(false);\n }, 5000);\n\n reset();\n };\n\n return (\n <Stack className=\"w-full max-w-3xl xl:max-w-xl\" spacing=\"xxl\">\n <GetInTouchHeader className=\"hidden xl:flex\" />\n <form onSubmit={handleSubmit(onSubmit)} className=\"w-full\">\n <Stack spacing=\"xl\">\n <Stack className=\"w-full\" spacing=\"lg\">\n <Stack className=\"w-full\" spacing=\"xs\">\n <Controller\n name=\"name\"\n control={control}\n defaultValue=\"\"\n rules={{ required: \"Name is required\" }}\n render={({ field }) => (\n <Input\n label=\"Name\"\n type=\"text\"\n id=\"name\"\n autoComplete=\"name\"\n aria-invalid={errors.name ? \"true\" : \"false\"}\n {...field}\n />\n )}\n />\n {errors.name && (\n <span role=\"alert\" className=\"text-sm text-red-400\">\n {errors.name.message}\n </span>\n )}\n </Stack>\n\n <Stack className=\"w-full\" spacing=\"xs\">\n <Controller\n name=\"email\"\n control={control}\n defaultValue=\"\"\n rules={{\n required: \"Email is required\",\n pattern: {\n value: /^\\S+@\\S+$/i,\n message: \"Invalid email address\",\n },\n }}\n render={({ field }) => (\n <Input\n label=\"E-mail\"\n type=\"email\"\n id=\"email\"\n autoComplete=\"email\"\n aria-invalid={errors.email ? \"true\" : \"false\"}\n {...field}\n />\n )}\n />\n {errors.email && (\n <span role=\"alert\" className=\"text-sm text-red-400\">\n {errors.email.message}\n </span>\n )}\n </Stack>\n\n <Stack className=\"w-full\" spacing=\"xs\">\n <Controller\n name=\"message\"\n control={control}\n defaultValue=\"\"\n rules={{ required: \"Message is required\" }}\n render={({ field }) => (\n <TextArea\n label=\"Message\"\n rows={5}\n id=\"message\"\n aria-invalid={errors.message ? \"true\" : \"false\"}\n {...field}\n />\n )}\n />\n {errors.message && (\n <span role=\"alert\" className=\"text-sm text-red-400\">\n {errors.message.message}\n </span>\n )}\n </Stack>\n\n <ReCAPTCHA\n sitekey={process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY || \"\"}\n size=\"invisible\"\n badge=\"bottomleft\"\n key={`captcha-${captchaTheme}`}\n theme={captchaTheme}\n ref={recaptchaRef}\n />\n </Stack>\n <Stack spacing=\"xl\" className=\"w-full\">\n {isError && (\n <div\n className=\"w-full max-w-xl rounded-lg bg-red-500/5 px-4 py-4\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n <Stack>\n <Stack direction=\"horizontal\" align=\"center\" spacing=\"sm\">\n <Icon icon=\"Warning\" className=\"size-6 text-red-500\" />\n <p className=\"font-semibold text-red-500\">\n {error?.message || \"Unexpected error\"}\n </p>\n </Stack>\n <p className=\"pl-9 text-sm leading-relaxed text-red-500\">\n An unexpected error occurred. Please try again later or\n contact us directly at{\" \"}\n <span className=\"underline\">info@football-genie.com</span>.\n </p>\n </Stack>\n </div>\n )}\n {showSuccess && (\n <div\n className=\"w-full max-w-xl rounded-lg bg-green-500/10 px-4 py-4 dark:bg-green-500/5\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <Stack>\n <Stack direction=\"horizontal\" align=\"center\" spacing=\"sm\">\n <Icon\n icon=\"CheckCircle\"\n className=\"size-6 text-green-500\"\n />\n <p className=\"font-semibold text-green-500\">\n Your message has been sent!\n </p>\n </Stack>\n <p className=\"pl-9 text-sm leading-relaxed text-green-500\">\n Thank you for contacting us!\n <br />\n We will get back to you as soon as possible.\n </p>\n </Stack>\n </div>\n )}\n <Stack\n direction=\"horizontal\"\n className=\"w-full justify-between\"\n align=\"center\"\n >\n <p className=\"max-w-80 text-sm leading-relaxed text-gray-500 dark:text-neutral-400\">\n By contacting us, you agree to our{\" \"}\n <a\n href=\"/terms-and-conditions\"\n target=\"_blank\"\n className=\"text-primary underline\"\n >\n Terms & Conditions\n </a>{\" \"}\n and{\" \"}\n <a\n href=\"/privacy-policy\"\n target=\"_blank\"\n className=\"text-primary underline\"\n >\n Privacy Policy\n </a>\n .\n </p>\n <Button\n color=\"primary\"\n size=\"large\"\n className=\"w-40\"\n type=\"submit\"\n isLoading={sendContactLoading}\n aria-label=\"Send contact form\"\n >\n <span>Send</span>\n </Button>\n </Stack>\n </Stack>\n </Stack>\n </form>\n </Stack>\n );\n};\n","import { Stack } from \"@ui/layout\";\nimport { Button, Icon } from \"@ui/elements\";\nimport React, { useState } from \"react\";\nimport Image from \"next/image\";\nimport founder from \"./founder.jpg\";\nimport { ContactForm } from \"@components/Contact/ContactForm\";\nimport { GetInTouchHeader } from \"@components/Contact/GetInTouchHeader\";\nimport { copyTextToClipboard } from \"@utils\";\nimport { cn } from \"@/lib/utils\";\nimport { Container } from \"@components/Container/Container\";\n\nexport const Contact = () => {\n const [emailCopied, setEmailCopied] = useState(false);\n const email = \"info@football-genie.com\";\n\n const handleCopyToClipboard = async () => {\n await copyTextToClipboard(email);\n setEmailCopied(true);\n\n setTimeout(() => {\n setEmailCopied(false);\n }, 1000);\n };\n\n return (\n <section\n className=\"px-6 py-9 md:py-24\"\n id=\"contact\"\n aria-labelledby=\"contact-heading\"\n >\n <Container>\n <div className=\"flex w-full flex-col items-center justify-between gap-16 xl:flex-row xl:gap-xxl\">\n <div className=\"flex flex-col gap-xl\">\n <GetInTouchHeader\n className=\"max-w-3xl xl:hidden xl:max-w-xl\"\n hasId={true}\n />\n <div className=\"flex max-w-3xl flex-col gap-16 xl:max-w-xl xl:gap-xxl\">\n <article className=\"flex flex-col gap-xl rounded-xl border border-gray-200 p-7 md:gap-xxl md:p-9 dark:border-neutral-700 dark:bg-neutral-800\">\n <header className=\"flex w-full items-center gap-md\">\n <Image\n src={founder}\n className=\"size-20 rounded-full sm:size-20 md:size-24\"\n alt=\"Portrait of András Vágner, Founder and Software Engineer at Football Genie\"\n width={80}\n height={80}\n />\n <div className=\"flex w-full min-w-0 max-w-full flex-col gap-xs md:gap-sm\">\n <Stack spacing=\"none\" className=\"max-w-full\">\n <h4 className=\"max-w-full text-base font-semibold md:text-lg dark:text-neutral-200\">\n András Vágner\n </h4>\n <p className=\"max-w-full truncate text-sm text-gray-500 md:text-base dark:text-neutral-400\">\n Founder, Software Engineer\n </p>\n </Stack>\n <Stack direction=\"horizontal\">\n <Button\n className=\"size-9 bg-gray-100 p-none hover:bg-gray-200 active:bg-gray-300 dark:bg-neutral-700 dark:text-neutral-200 dark:hover:bg-neutral-600 dark:active:bg-neutral-500\"\n size=\"custom\"\n as=\"link\"\n href=\"https://www.linkedin.com/in/andras-vagner/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"András Vágner on LinkedIn\"\n >\n <Icon icon=\"LinkedinLogo\" className=\"size-5\" />\n </Button>\n <Button\n className=\"size-9 bg-gray-100 p-none hover:bg-gray-200 active:bg-gray-300 dark:bg-neutral-700 dark:text-neutral-200 dark:hover:bg-neutral-600 dark:active:bg-neutral-500\"\n size=\"custom\"\n as=\"link\"\n href=\"https://www.instagram.com/balazs.andras/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"András Vágner on Instagram\"\n >\n <Icon icon=\"InstagramLogo\" className=\"size-5\" />\n </Button>\n <Button\n className=\"size-9 bg-gray-100 p-none hover:bg-gray-200 active:bg-gray-300 dark:bg-neutral-700 dark:text-neutral-200 dark:hover:bg-neutral-600 dark:active:bg-neutral-500\"\n size=\"custom\"\n as=\"link\"\n href=\"https://t.me/slimtiexxx\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"András Vágner on Telegram\"\n >\n <Icon icon=\"TelegramLogo\" className=\"size-5\" />\n </Button>\n </Stack>\n </div>\n </header>\n <div className=\"prose prose-stone max-w-none text-sm leading-relaxed dark:prose-invert md:text-base\">\n <p>Hi! I’m András, creator of Football Genie. 👋</p>\n <p>\n I’m hopeless at playing football, but I know my way around\n tech! After 11 years as software engineer, I’ve built a tool\n that <strong>actually helps</strong> you make smarter\n football decisions.\n </p>\n <p>Let’s win together! 🚀</p>\n </div>\n </article>\n <Stack className=\"w-full\" spacing=\"lg\">\n <Stack\n className=\"w-full rounded-lg border border-gray-200 p-3.5 md:p-5 dark:border-neutral-700 dark:bg-neutral-800\"\n direction=\"horizontal\"\n align=\"center\"\n spacing=\"md\"\n >\n <div className=\"flex w-full items-center gap-sm md:gap-md\">\n <div className=\"rounded-full bg-primary-500/10 p-4\">\n <Icon\n icon=\"EnvelopeSimple\"\n className=\"size-5 text-primary md:size-6\"\n aria-label=\"Envelope icon representing email address\"\n />\n </div>\n <Stack spacing=\"none\">\n <p className=\"font-semibold dark:text-neutral-200\">\n E-mail\n </p>\n <p className=\"text-sm text-gray-500 md:text-base dark:text-neutral-400\">\n {email}\n </p>\n </Stack>\n </div>\n <Button\n className={cn(\n \"relative size-12 flex-none will-change-transform hover:bg-gray-100 active:bg-gray-200 dark:bg-neutral-800 dark:hover:bg-neutral-700 dark:active:bg-neutral-600\",\n {\n \"bg-primary-500/10 hover:bg-primary-500/10 active:bg-primary-500/10 dark:bg-primary-500/10 dark:hover:bg-primary-500/10 dark:active:bg-primary-500/10\":\n emailCopied,\n },\n )}\n size=\"custom\"\n type=\"button\"\n onClick={handleCopyToClipboard}\n aria-label=\"Copy email address to clipboard\"\n >\n <Icon\n icon=\"Copy\"\n className={cn(\n \"absolute left-1/2 top-1/2 size-6 -translate-x-1/2 -translate-y-1/2 text-gray-500 transition-all will-change-transform dark:text-neutral-400\",\n {\n \"translate-x-14\": emailCopied,\n },\n )}\n aria-label=\"Copy icon representing copying email address\"\n />\n <Icon\n icon=\"Check\"\n className={cn(\n \"absolute left-1/2 top-1/2 size-6 -translate-x-1/2 -translate-y-1/2 text-gray-500 transition-all will-change-transform dark:text-neutral-400\",\n {\n \"-translate-x-14\": !emailCopied,\n },\n )}\n aria-label=\"Check icon representing email copied\"\n />\n <span className=\"sr-only\">\n {emailCopied ? \"Email copied\" : \"Copy email\"}\n </span>\n </Button>\n </Stack>\n <a\n href=\"https://www.instagram.com/geniebets/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group w-full\"\n aria-label=\"Visit our Instagram page @geniebets\"\n >\n <div className=\"flex w-full items-center gap-sm rounded-lg border border-gray-200 p-3.5 md:gap-md md:p-5 dark:border-neutral-700 dark:bg-neutral-800\">\n <div className=\"rounded-full bg-primary-500/10 p-4 transition-all group-hover:bg-primary-500/20 group-active:bg-primary-500/30\">\n <Icon\n icon=\"InstagramLogo\"\n className=\"size-5 text-primary md:size-6\"\n aria-label=\"Instagram logo representing our Instagram page\"\n />\n </div>\n <Stack spacing=\"none\">\n <p className=\"font-semibold dark:text-neutral-200\">\n Instagram\n </p>\n <p className=\"text-sm text-gray-500 md:text-base dark:text-neutral-400\">\n @geniebets\n </p>\n </Stack>\n </div>\n </a>\n <address className=\"flex w-full items-center gap-sm rounded-lg border border-gray-200 p-3.5 md:gap-md md:p-5 dark:border-neutral-700 dark:bg-neutral-800\">\n <div className=\"rounded-full bg-primary-500/10 p-4\">\n <Icon\n icon=\"Buildings\"\n className=\"size-5 text-primary md:size-6\"\n aria-hidden=\"true\"\n aria-label=\"Buildings icon representing address\"\n />\n </div>\n <Stack spacing=\"none\">\n <p className=\"font-semibold dark:text-neutral-200\">\n Address\n </p>\n <p className=\"text-sm text-gray-500 md:text-base dark:text-neutral-400\">\n Hungary, 2621, VerÅ‘ce, Szeles utca 7380\n </p>\n </Stack>\n </address>\n </Stack>\n </div>\n </div>\n <Stack\n direction=\"horizontal\"\n className=\"w-full flex-1 justify-center\"\n >\n <ContactForm />\n </Stack>\n </div>\n </Container>\n <div aria-live=\"polite\" className=\"sr-only\">\n {emailCopied && \"Email address copied to clipboard.\"}\n </div>\n </section>\n );\n};\n","import { FAQItem } from \"@components/FAQ/FAQ\";\nimport React from \"react\";\n\nexport const faqItems: FAQItem[] = [\n {\n question: \"When is it the best time for betting?\",\n type: \"general\",\n answer: `The best time for betting depends on the leagues and their predictability periods:\n\nEuropean Leagues:\nThe most consistent period is mid-season (December to February) when teams are in form and lineups stabilize. However, avoid betting immediately after international breaks or during transfer windows when results can be unpredictable.\nLook for high-confidence bets, particularly in matches involving top-performing teams.\n\nAmerican & South American Leagues:\nFor the MLS and Copa Libertadores, the period from June to August often sees steady performance as teams are in mid-season. Keep an eye on knockout stages where strategies can shift drastically.\nBack in-form teams with depth, especially in the MLS.`,\n content: (\n <>\n <p>\n The best time for betting depends on the leagues and their\n predictability periods:\n </p>\n <ul>\n <li>\n <strong>European Leagues:</strong>\n <p>\n The most consistent period is mid-season{\" \"}\n <strong>(December to February)</strong> when teams are in form and\n lineups stabilize. However, avoid betting immediately after\n international breaks or during transfer windows when results can\n be unpredictable.\n </p>\n <blockquote>\n Look for high-confidence bets, particularly in matches involving\n top-performing teams.\n </blockquote>\n </li>\n <li>\n <strong>American & South American Leagues:</strong>\n <p>\n For the MLS and Copa Libertadores, the period from{\" \"}\n <strong>June to August</strong> often sees steady performance as\n teams are in mid-season. Keep an eye on knockout stages where\n strategies can shift drastically.\n </p>\n <blockquote>\n Back in-form teams with depth, especially in the MLS.\n </blockquote>\n </li>\n </ul>\n </>\n ),\n },\n {\n question: \"How reliable is Football Genie AI?\",\n type: \"general\",\n answer: `Football Genie AI is built to deliver precise and data-driven predictions. Each tip comes with a rating (Safe, Value, Risky) and a probability percentage to help you assess its reliability.\n\nWhile our AI delivers impressive accuracy, it’s essential to use its predictions as a guide rather than blindly following every tip. Remember, football remains an unpredictable sport, and informed decision-making is key!`,\n content: (\n <>\n <p>\n Football Genie AI is built to deliver precise and data-driven\n predictions. Each tip comes with a rating (Safe, Value, Risky) and a\n probability percentage to help you assess its reliability.\n </p>\n <p>\n While our AI delivers impressive accuracy, it’s essential to use its\n predictions as a{\" \"}\n <strong>guide rather than blindly following every tip</strong>.\n Remember, football remains an unpredictable sport, and informed\n decision-making is key!\n </p>\n </>\n ),\n },\n {\n question: \"How does Football Genie AI work?\",\n type: \"general\",\n answer: `Football Genie AI combines advanced statistical models and Generative AI technology (like ChatGPT) to evaluate matches comprehensively. It analyzes historical data, recent performance, team news, injuries, and fan sentiment to create unbiased, accurate predictions.\n\nThis hybrid approach ensures that both quantitative and qualitative factors are taken into account for every prediction.`,\n content: (\n <>\n <p>\n Football Genie AI combines advanced statistical models and{\" \"}\n <strong>Generative AI</strong> technology (like ChatGPT) to evaluate\n matches comprehensively. It analyzes historical data, recent\n performance, team news, injuries, and fan sentiment to create\n unbiased, accurate predictions.\n </p>\n <p>\n This hybrid approach ensures that both quantitative and qualitative\n factors are taken into account for every prediction.\n </p>\n </>\n ),\n },\n {\n question: \"What leagues are supported?\",\n type: \"general\",\n answer: `Football Genie currently supports:\n\nEuropean Leagues: Premier League, La Liga, Serie A, Bundesliga, Ligue 1.\nInternational Tournaments: UEFA Champions League, Europa League, Euro Championship, Copa América, Super Cup.\n\nWe’re actively expanding our coverage to include more leagues—stay tuned for updates!`,\n content: (\n <>\n <p>Football Genie currently supports:</p>\n <ul>\n <li>\n <p>\n <strong>European Leagues:</strong> Premier League, La Liga, Serie\n A, Bundesliga, Ligue 1.\n </p>\n </li>\n <li>\n <p>\n <strong>International Tournaments:</strong> UEFA Champions League,\n Europa League, Euro Championship, Copa América, Super Cup.\n </p>\n </li>\n </ul>\n <p>\n We’re actively expanding our coverage to include more leagues—stay\n tuned for updates!\n </p>\n </>\n ),\n },\n {\n question: \"How does the AI evaluate teams and players?\",\n type: \"general\",\n answer: `Our AI analyzes vast metrics, including:\n\nTeam Stats: Possession, xG, recent form, momentum, motivations, and other key statistics.\nPlayer Performance: Shots, assists, saves, dribbles, and more.\nExternal Factors: Managerial changes, injuries, fan sentiment, team strengths and weaknesses, and tactical matchups.\n\nBy merging statistical and contextual data, Football Genie fully (if not better) replicates the analysis of an expert analyst.`,\n content: (\n <>\n <p>Our AI analyzes vast metrics, including:</p>\n <ul>\n <li>\n <strong>Team Stats:</strong> Possession, xG, recent form, momentum,\n motivations, and other key statistics.\n </li>\n <li>\n <strong>Player Performance:</strong> Shots, assists, saves,\n dribbles, and more.\n </li>\n <li>\n <strong>External Factors:</strong> Managerial changes, injuries, fan\n sentiment, team strengths and weaknesses, and tactical matchups.\n </li>\n </ul>\n <p>\n By merging statistical and contextual data, Football Genie fully (if\n not better) replicates the analysis of an expert analyst.\n </p>\n </>\n ),\n },\n {\n question: \"What is the Predictability Score, and how should I use it?\",\n type: \"general\",\n answer: `The Predictability Score rates how likely a match outcome is predictable, on a scale from 1 (unpredictable) to 10 (highly predictable). Use this score to decide whether to bet on match results, rather than focusing on less predictable markets like goals or corners. High scores suggest a safer betting environment.`,\n content: (\n <>\n <p>\n The Predictability Score rates how likely a match outcome is\n predictable, on a scale from <strong>1 (unpredictable)</strong> to{\" \"}\n <strong>10 (highly predictable)</strong>. Use this score to decide\n whether to bet on match results, rather than focusing on less\n predictable markets like goals or corners. High scores suggest a safer\n betting environment.\n </p>\n </>\n ),\n },\n {\n question: \"Why is there a difference between cup matches and league games?\",\n type: \"general\",\n answer: `Cup matches often involve unfamiliar team matchups and rotated lineups, creating more variability. In contrast, league games follow established dynamics, offering more consistent data for reliable predictions. Always approach cup games with extra caution.`,\n content: (\n <>\n <p>\n Cup matches often involve unfamiliar team matchups and rotated\n lineups, creating more variability. In contrast, league games follow\n established dynamics, offering more consistent data for reliable\n predictions. Always approach cup games with extra caution.\n </p>\n </>\n ),\n },\n {\n question: \"How many tips are provided per day?\",\n type: \"tips\",\n answer: `Every day, Football Genie offers around 30 carefully selected tips, covering approximately 7-8 football matches. This steady stream of tips ensures you have plenty of opportunities to make informed bets and stay ahead in the game.`,\n content: (\n <>\n <p>\n Every day, Football Genie offers <strong>around 30</strong> carefully\n selected tips, covering approximately 7-8 football matches. This\n steady stream of tips ensures you have plenty of opportunities to make\n informed bets and stay ahead in the game.\n </p>\n </>\n ),\n },\n {\n question:\n \"What’s the difference between Value-Based and Result-Oriented tips?\",\n type: \"tips\",\n answer: `At Football Genie, we provide two distinct types of tips tailored to different betting strategies:\n\nValue-Based Tips: These tips focus on finding bets with higher odds than the actual probability of the outcome, ensuring more consistent and reliable returns. We offer fewer Value-Based tips, concentrated on Markets like Goals Over/Under, Match Winner, and Double Chance. This approach helps you maximize your potential returns over time with greater consistency.\n\nResult-Oriented Tips: These tips aim to predict a wider range of match outcomes, providing more tips but with lower accuracy. Result-Oriented tips cover a broader spectrum of markets, allowing for more betting opportunities and the potential for higher rewards.\n\nWhether you prefer the steady consistency of Value-Based tips or the expansive opportunities of Result-Oriented tips, Football Genie has the perfect options to match your betting style and goals.`,\n content: (\n <>\n <p>\n At Football Genie, we provide two distinct types of tips tailored to\n different betting strategies:\n </p>\n <ul>\n <li>\n <strong>Value-Based Tips:</strong> These tips focus on finding bets\n with higher odds than the actual probability of the outcome,\n ensuring more consistent and reliable returns. We offer fewer\n Value-Based tips, concentrated on Markets like Goals Over/Under,\n Match Winner, and Double Chance. This approach helps you maximize\n your potential returns over time with greater consistency.\n </li>\n <li>\n <strong>Result-Oriented Tips:</strong> These tips aim to predict a\n wider range of match outcomes, providing more tips but with lower\n accuracy. Result-Oriented tips cover a broader spectrum of markets,\n allowing for more betting opportunities and the potential for higher\n rewards.\n </li>\n </ul>\n <p>\n Whether you prefer the steady consistency of Value-Based tips or the\n expansive opportunities of Result-Oriented tips, Football Genie has\n the perfect options to match your betting style and goals.\n </p>\n </>\n ),\n },\n {\n question: 'What does it mean if a tip is \"risky\" or \"safe\"?',\n type: \"tips\",\n answer: `Our tips come with a risk indicator to help you make informed betting decisions:\n\nSuper Safe Tips: These tips have the highest probability of success based on comprehensive analysis and historical data. They are designed for bettors who prioritize maximum reliability and minimal risk.\n\nSafe Tips: These tips have a high probability of success, making them great for bettors who prefer lower risk and more lower, but consistent returns.\n\nValue Tips: These tips offer a balanced approach, focusing on finding value where the odds are favorable. They provide a good mix of risk and reward, ideal for bettors looking to maximize their potential returns without taking on excessive risk.\n\nRisky Tips: These tips offer higher potential rewards but come with increased uncertainty. They are perfect for those looking to maximize their winnings with a bit more adventurous betting.\n\nChoose the type of tip that aligns with your betting style and risk tolerance to enhance your overall betting experience.`,\n content: (\n <>\n <p>\n Our tips come with a risk indicator to help you make informed betting\n decisions:\n </p>\n <ul>\n <li>\n <strong>Super Safe Tips:</strong> These tips have the highest\n probability of success based on comprehensive analysis and\n historical data. They are designed for bettors who prioritize\n maximum reliability and minimal risk.\n </li>\n <li>\n <strong>Safe Tips:</strong> These tips have a high probability of\n success, making them great for bettors who prefer lower risk and\n more lower, but consistent returns.\n </li>\n <li>\n <strong>Value Tips:</strong> These tips offer a balanced approach,\n focusing on finding value where the odds are favorable. They provide\n a good mix of risk and reward, ideal for bettors looking to maximize\n their potential returns without taking on excessive risk.\n </li>\n <li>\n <strong>Risky Tips:</strong> These tips offer higher potential\n rewards but come with increased uncertainty. They are perfect for\n those looking to maximize their winnings with a bit more adventurous\n betting.\n </li>\n </ul>\n <p>\n Choose the type of tip that aligns with your betting style and risk\n tolerance to enhance your overall betting experience.\n </p>\n </>\n ),\n },\n {\n question: \"How accurate are past tips, and where can I find this data?\",\n type: \"tips\",\n answer: `Our probability percentages are highly accurate. For instance, when you filter tips with an 80%-100% probability, you can expect a hit rate of approximately 80%. This demonstrates the reliability and precision of our advanced analysis and expertise in football betting.\n\nFor the most up-to-date performance statistics and detailed reports, visit our AI Performance page. Here, you can explore the latest data that showcases the effectiveness and reliability of our tips.`,\n content: (\n <>\n <p>\n Our probability percentages are highly accurate. For instance, when\n you filter tips with an 80%-100% probability, you can expect a hit\n rate of approximately 80%. This demonstrates the reliability and\n precision of our advanced analysis and expertise in football betting.\n </p>\n <p>\n For the most up-to-date performance statistics and detailed reports,\n visit our{\" \"}\n <a href={`${process.env.NEXT_PUBLIC_APP_URL}/ai-performance`}>\n AI Performance\n </a>{\" \"}\n page. Here, you can explore the latest data that showcases the\n effectiveness and reliability of our tips.\n </p>\n </>\n ),\n },\n {\n question: \"When are tips made available?\",\n type: \"tips\",\n answer: `Tips are generated daily at 5 AM CET for matches happening the following day, ensuring you have access to two days’ worth of tips in advance. This gives you plenty of time to strategize!`,\n content: (\n <>\n <p>\n Tips are generated daily at 5 AM CET for matches happening the\n following day, ensuring you have access to two days’ worth of tips in\n advance. This gives you plenty of time to strategize!\n </p>\n </>\n ),\n },\n {\n question:\n \"How should I interpret recommendations with high or low predictability?\",\n type: \"tips\",\n answer: `The probability percentage indicates the likelihood of a tip’s success:\n\nHigh Probability (e.g., 85%-100%): These tips are more likely to succeed and are safer choices for consistent returns, but likely with lower odds.\n\nLow Probability (e.g., 50%-70%): These tips carry more risk but may offer higher potential rewards. Use them with caution based on your risk tolerance.\n\nUnderstanding the probability percentages can help you make more informed and strategic betting decisions.`,\n content: (\n <>\n <p>\n The probability percentage indicates the likelihood of a tip’s\n success:\n </p>\n <ul>\n <li>\n <strong>High Probability (e.g., 85%-100%):</strong> These tips are\n more likely to succeed and are safer choices for consistent returns,\n but likely with lower odds.\n </li>\n <li>\n <strong>Low Probability (e.g., 50%-70%):</strong> These tips carry\n more risk but may offer higher potential rewards. Use them with\n caution based on your risk tolerance.\n </li>\n </ul>\n <p>\n Understanding the probability percentages can help you make more\n informed and strategic betting decisions.\n </p>\n </>\n ),\n },\n {\n question:\n \"What happens if a player is unexpectedly injured after a tip is released?\",\n type: \"tips\",\n answer: `Football Genie cannot modify tips after release. We recommend reviewing late-breaking news and adjusting your bets accordingly when significant changes, such as key injuries, occur. Always stay informed!\n\n👉 Tip: Significant odds changes can indicate important news or developments. Monitor odds movements to stay ahead.`,\n content: (\n <>\n <p>\n Football Genie cannot modify tips after release. We recommend\n reviewing late-breaking news and adjusting your bets accordingly when\n significant changes, such as key injuries, occur. Always stay\n informed!\n </p>\n\n <blockquote>\n 👉 <strong>Tip: </strong> Significant odds changes can indicate\n important news or developments. Monitor odds movements to stay ahead.\n </blockquote>\n </>\n ),\n },\n {\n question: \"How should beginners approach Football Genie’s tips?\",\n type: \"tips\",\n answer: `Our AI is primarily designed for bettors with a mid-level understanding of football trends and betting strategies. Our platform provides detailed match analyses and AI-driven insights, which require some basic football knowledge to interpret effectively.\n\nIf you're a beginner, we recommend taking time to familiarize yourself with football betting concepts, such as match dynamics, season periods, and the types of bets available. Reviewing our match analyses thoroughly before placing any bets is essential to make informed decisions.\n\nFootball Genie is best suited for those ready to leverage advanced tools to refine their betting strategy!`,\n content: (\n <>\n <p>\n Our AI is primarily designed for bettors with a mid-level\n understanding of football trends and betting strategies. Our platform\n provides detailed match analyses and AI-driven insights, which require\n some basic football knowledge to interpret effectively.\n </p>\n <p>\n If you're a beginner, we recommend taking time to familiarize\n yourself with football betting concepts, such as match dynamics,\n season periods and the types of bets available. Reviewing our match\n analyses thoroughly before placing any bets is essential to make\n informed decisions.\n </p>\n <p>\n Football Genie is best suited for those ready to leverage advanced\n tools to refine their betting strategy!\n </p>\n </>\n ),\n },\n {\n question: \"How many tips should I bet on at once?\",\n type: \"tips\",\n answer: `We recommend selecting a manageable number of tips (maximum 3-5 per day) that align with your strategy and bankroll. Avoid overloading your bets to maintain focus and control.\n\nQuality over quantity always wins! ðŸ†`,\n content: (\n <>\n <p>\n We recommend selecting a manageable number of tips (maximum 3-5 per\n day) that align with your strategy and bankroll. Avoid overloading\n your bets to maintain focus and control.\n </p>\n <p>Quality over quantity always wins! ðŸ†</p>\n </>\n ),\n },\n {\n question: \"What are the best leagues to bet on?\",\n type: \"tips\",\n answer: `The Premier League and Bundesliga consistently stand out as the best leagues to bet on with Football Genie. These leagues provide stable data and high accuracy in our predictions, making them ideal for informed betting.\n\nFor the latest performance metrics, including hit rates and ROI across all supported leagues, visit our AI Performance page. Stay updated on the top-performing leagues and adjust your strategy accordingly.`,\n content: (\n <>\n <p>\n The <strong>Premier League</strong> and <strong>Bundesliga</strong>{\" \"}\n consistently stand out as the best leagues to bet on with Football\n Genie. These leagues provide stable data and high accuracy in our\n predictions, making them ideal for informed betting.\n </p>\n <p>\n For the latest performance metrics, including hit rates and ROI across\n all supported leagues, visit our{\" \"}\n <a href={`${process.env.NEXT_PUBLIC_APP_URL}/ai-performance`}>\n AI Performance\n </a>{\" \"}\n page. Stay updated on the top-performing leagues and adjust your\n strategy accordingly.\n </p>\n </>\n ),\n },\n {\n question: \"Is automatic betting possible?\",\n type: \"strategies\",\n answer: `Currently, Football Genie AI does not support automatic betting. While our platform provides highly accurate predictions and personalized tips, all bet placements must be done manually by users on their chosen betting platforms. This ensures users maintain full control over their betting decisions and bankroll management.`,\n content: (\n <>\n <p>\n Currently, Football Genie AI does not support automatic betting. While\n our platform provides highly accurate predictions and personalized\n tips, all bet placements must be done manually by users on their\n chosen betting platforms. This ensures users maintain full control\n over their betting decisions and bankroll management.\n </p>\n </>\n ),\n },\n {\n question: \"What are the recommended bankroll management practices?\",\n type: \"strategies\",\n answer: `Effective bankroll management is essential for sustainable betting. We recommend:\n\nSet a Budget: Allocate a specific amount of money for betting and never exceed it.\nUse a Percentage-Based Stake: Bet a small, fixed percentage (e.g., 1-5%) of your bankroll per bet to mitigate losses during losing streaks.\nAvoid Chasing Losses: Stick to your strategy, and do not increase bet sizes impulsively after losses.\nTrack Your Bets: Keep a record of all your bets to analyze performance and make informed adjustments to your strategy.`,\n content: (\n <>\n <p>\n Effective bankroll management is essential for sustainable betting. We\n recommend:\n </p>\n <ul>\n <li>\n <strong>Set a Budget:</strong> Allocate a specific amount of money\n for betting and never exceed it.\n </li>\n <li>\n <strong>Use a Percentage-Based Stake:</strong> Bet a small, fixed\n percentage (e.g., 1-5%) of your bankroll per bet to mitigate losses\n during losing streaks.\n </li>\n <li>\n <strong>Avoid Chasing Losses:</strong> Stick to your strategy, and\n do not increase bet sizes impulsively after losses.\n </li>\n <li>\n <strong>Track Your Bets:</strong> Keep a record of all your bets to\n analyze performance and make informed adjustments to your strategy.\n </li>\n </ul>\n </>\n ),\n },\n {\n question: \"What is the Kelly Criterion, and why is it important?\",\n type: \"strategies\",\n answer: `The Kelly Criterion is a mathematical formula used to calculate the optimal stake size for a bet based on the probability of winning and the odds offered. It helps bettors maximize profits over time while minimizing the risk of ruin. Football Genie applies a conservative 0.25 Kelly fraction by default, which is adjustable in the app to suit your risk tolerance.\n\nThe Kelly formula is as follows:\n\nStake (%) = [(Probability × (Odds - 1)) - (1 - Probability)] ÷ (Odds - 1)\n\nHere’s an example calculation:\n\nProbability of Winning: 70% (0.7)\nOdds Offered: 1.8\n\nUsing the formula:\n\nStake (%) = [(0.7 × (1.8 - 1)) - (1 - 0.7)] ÷ (1.8 - 1)\nStake (%) = [(0.7 × 0.8) - 0.3] ÷ 0.8\nStake (%) = (0.56 - 0.3) ÷ 0.8\nStake (%) = 0.26 ÷ 0.8\nStake (%) = 0.325 or 32.5%\n\nWith Football Genie’s default 0.25 Kelly fraction, the stake would be:\n\n32.5% × 0.25 = 8.125%\n\nThis means you should bet approximately 8.1% of your bankroll.\n\n**Note:** The Kelly fraction can be configured in the app’s settings, allowing you to choose a more aggressive or conservative staking approach based on your preferences.`,\n content: (\n <>\n <p>\n The Kelly Criterion is a mathematical formula used to calculate the\n optimal stake size for a bet based on the probability of winning and\n the odds offered. It helps bettors maximize profits over time while\n minimizing the risk of ruin. Football Genie applies a conservative{\" \"}\n <strong>0.25 Kelly fraction</strong> by default, which is adjustable\n in the app to suit your risk tolerance.\n </p>\n <p>The Kelly formula is as follows:</p>\n <p>\n <strong>\n Stake (%) = [(Probability × (Odds - 1)) - (1 - Probability)] ÷ (Odds\n - 1)\n </strong>\n </p>\n <p>Here’s an example calculation:</p>\n <ul>\n <li>\n <strong>Probability of Winning:</strong> 70% (0.7)\n </li>\n <li>\n <strong>Odds Offered:</strong> 1.8\n </li>\n </ul>\n <p>Using the formula:</p>\n <pre>\n <code>Stake (%) = [(0.7 × (1.8 - 1)) - (1 - 0.7)] ÷ (1.8 - 1)</code>\n </pre>\n <p>Calculation:</p>\n <pre>\n <code>Stake (%) = [(0.7 × 0.8) - 0.3] ÷ 0.8</code>\n </pre>\n <pre>\n <code>Stake (%) = (0.56 - 0.3) ÷ 0.8</code>\n </pre>\n <pre>\n <code>Stake (%) = 0.26 ÷ 0.8</code>\n </pre>\n <pre>\n <code>Stake (%) = 0.325 or 32.5%</code>\n </pre>\n <p>\n With Football Genie’s default <strong>0.25 Kelly fraction</strong>,\n the stake would be:\n </p>\n <pre>\n <code>32.5% × 0.25 = 8.125%</code>\n </pre>\n <p>This means you should bet approximately 8.1% of your bankroll.</p>\n <blockquote>\n <strong>Note:</strong> The Kelly fraction can be configured in the\n app’s settings, allowing you to choose a more aggressive or\n conservative staking approach based on your preferences.\n </blockquote>\n </>\n ),\n },\n {\n question: \"Can I apply custom settings in the tip filters?\",\n type: \"strategies\",\n answer: `Yes, Football Genie provides an extensive range of filtering options to help you tailor your betting strategy. You can apply multiple filters to find tips that perfectly align with your preferences. Available filtering options include:\n\nTip Rating: Choose from Safe, Super Safe, or Value-based tips depending on your risk tolerance.\nLeague: Focus on specific competitions or regions of your choice.\nTip Category: Filter by categories such as match winners, over/under goals, and more.\nOdds: Set a range for minimum and maximum odds to match your betting style.\nEdge: View tips with specific value margins (the difference between AI probability and bookmaker odds).\nStake: Filter tips based on recommended stake percentages.\nProbability: Find tips with high AI-predicted probabilities, e.g., 85-100%.\nPredictability: Assess the stability and consistency of a match based on AI insights.\nBest Choice: Highlight the most promising tips based on combined factors.\nSafe for Betting: Identify tips with minimal risk indicators.\nMatch Importance: Focus on high-stakes games (e.g., title races or relegation battles).\n\n**Save Your Strategy:** You can create and save filter sets—called *Strategies*—for quick reuse. For example, you can save a filter set with:\n\nProbability: 85-100%\nTip Rating: Safe or Super Safe\nLeague: Your preferred league\n\nThis feature allows you to instantly apply your favorite filters and consistently find the most relevant tips for your betting approach.`,\n content: (\n <>\n <p>\n Yes, Football Genie provides an extensive range of filtering options\n to help you tailor your betting strategy. You can apply multiple\n filters to find tips that perfectly align with your preferences.\n Available filtering options include:\n </p>\n <ul>\n <li>\n <strong>Tip Rating:</strong> Choose from Safe, Super Safe, or\n Value-based tips depending on your risk tolerance.\n </li>\n <li>\n <strong>League:</strong> Focus on specific competitions or regions\n of your choice.\n </li>\n <li>\n <strong>Tip Category:</strong> Filter by categories such as match\n winners, over/under goals, and more.\n </li>\n <li>\n <strong>Odds:</strong> Set a range for minimum and maximum odds to\n match your betting style.\n </li>\n <li>\n <strong>Edge:</strong> View tips with specific value margins (the\n difference between AI probability and bookmaker odds).\n </li>\n <li>\n <strong>Stake:</strong> Filter tips based on recommended stake\n percentages.\n </li>\n <li>\n <strong>Probability:</strong> Find tips with high AI-predicted\n probabilities, e.g., 85-100%.\n </li>\n <li>\n <strong>Predictability:</strong> Assess the stability and\n consistency of a match based on AI insights.\n </li>\n <li>\n <strong>Best Choice:</strong> Highlight the most promising tips\n based on combined factors.\n </li>\n <li>\n <strong>Safe for Betting:</strong> Identify tips with minimal risk\n indicators.\n </li>\n <li>\n <strong>Match Importance:</strong> Focus on high-stakes games (e.g.,\n title races or relegation battles).\n </li>\n </ul>\n <p>\n <strong>Save Your Strategy:</strong> You can create and save filter\n sets—called <em>Strategies</em>—for quick reuse. For example, you can\n save a filter set with:\n </p>\n <ul>\n <li>\n <strong>Probability:</strong> 85-100%\n </li>\n <li>\n <strong>Tip Rating:</strong> Safe or Super Safe\n </li>\n <li>\n <strong>League:</strong> Your preferred league\n </li>\n </ul>\n <p>\n This feature allows you to instantly apply your favorite filters and\n consistently find the most relevant tips for your betting approach.\n </p>\n </>\n ),\n },\n {\n question:\n \"How does the AI perform during unpredictable periods, like the start of the season?\",\n type: \"strategies\",\n answer: `Unpredictable periods, such as the start of the season, bring unique challenges like new player signings, evolving tactics, and varying team form. Football Genie accounts for these factors through its non-statistical model, which evaluates news, sentiment, and contextual insights. While accuracy may dip during such times, we advise focusing on safer betting strategies and closely monitoring team performance updates provided by our AI.`,\n content: (\n <>\n <p>\n Unpredictable periods, such as the start of the season, bring unique\n challenges like new player signings, evolving tactics, and varying\n team form. Football Genie accounts for these factors through its\n non-statistical model, which evaluates news, sentiment, and contextual\n insights. While accuracy may dip during such times, we advise focusing\n on safer betting strategies and closely monitoring team performance\n updates provided by our AI.\n </p>\n </>\n ),\n },\n {\n question: \"What are the most common risks in sports betting?\",\n type: \"strategies\",\n answer: `Sports betting comes with inherent risks. Here are the most common ones:\n\nOverconfidence: Betting large sums based on limited data or past successes can lead to significant losses.\nLack of Research: Ignoring key factors like injuries, form, and team news can result in poor decisions.\nEmotional Betting: Placing bets based on personal bias or frustration can derail a disciplined approach.\nUnpredictability: External factors like weather, referee decisions, or player errors can affect outcomes.\n\nFootball Genie helps mitigate these risks by providing well-researched tips, detailed analysis, and personalized strategies.`,\n content: (\n <>\n <p>\n Sports betting comes with inherent risks. Here are the most common\n ones:\n </p>\n <ul>\n <li>\n <strong>Overconfidence:</strong> Betting large sums based on limited\n data or past successes can lead to significant losses.\n </li>\n <li>\n <strong>Lack of Research:</strong> Ignoring key factors like\n injuries, form, and team news can result in poor decisions.\n </li>\n <li>\n <strong>Emotional Betting:</strong> Placing bets based on personal\n bias or frustration can derail a disciplined approach.\n </li>\n <li>\n <strong>Unpredictability:</strong> External factors like weather,\n referee decisions, or player errors can affect outcomes.\n </li>\n </ul>\n <p>\n Football Genie helps mitigate these risks by providing well-researched\n tips, detailed analysis, and personalized strategies.\n </p>\n </>\n ),\n },\n {\n question: \"Are there free trial options?\",\n type: \"subscription\",\n answer: `Yes! We offer a free plan without any commitment. With this plan, users can unlock tips for up to 3 matches daily, giving everyone the chance to explore Football Genie AI without any cost.`,\n content: (\n <>\n <p>\n Yes! We offer a free plan without any commitment. With this plan,\n users can unlock tips for up to 3 matches daily, giving everyone the\n chance to explore Football Genie AI without any cost.\n </p>\n </>\n ),\n },\n {\n question: \"What subscription plans are available?\",\n type: \"subscription\",\n answer: `We provide three distinct plans to suit different betting styles:\n\nFree Plan: Perfect for beginners and casual bettors. Includes:\n- Tips for up to 3 matches per day\n- In-depth match analysis\n- No commitment required\n\nStandard Plan: Ideal for bettors treating betting as an investment strategy. Available at €4.5 weekly or €14.9 monthly, this plan includes:\n- Unlimited tips\n- 24/7 support\n- Bankroll management\n- Custom betting strategies\n- Personalization\n\nEnterprise Plan: Designed for professionals and businesses seeking AI-driven betting solutions. Includes everything in the Standard Plan plus:\n- Developer API access\n- Custom integrations\n- Marketing and automation tools`,\n content: (\n <>\n <p>We provide three distinct plans to suit different betting styles:</p>\n <ul>\n <li>\n <strong>Free Plan</strong>: Perfect for beginners and casual\n bettors. Includes:\n <ul>\n <li>Tips for up to 3 matches per day</li>\n <li>In-depth match analysis</li>\n <li>No commitment required</li>\n </ul>\n </li>\n <li>\n <strong>Standard Plan</strong>: Ideal for bettors treating betting\n as an investment strategy. Available at €4.5 weekly or €14.9\n monthly, this plan includes:\n <ul>\n <li>Unlimited tips</li>\n <li>24/7 support</li>\n <li>Bankroll management</li>\n <li>Custom betting strategies</li>\n <li>Personalization</li>\n </ul>\n </li>\n <li>\n <strong>Enterprise Plan</strong>: Designed for professionals and\n businesses seeking AI-driven betting solutions. Includes everything\n in the Standard Plan plus:\n <ul>\n <li>Developer API access</li>\n <li>Custom integrations</li>\n <li>Marketing and automation tools</li>\n </ul>\n </li>\n </ul>\n </>\n ),\n },\n {\n question:\n \"How are payments processed, and what payment methods do you accept?\",\n type: \"subscription\",\n answer: `All payments are securely processed through Stripe, ensuring maximum safety and reliability. We support various payment methods, including Apple Pay, Google Pay, PayPal, and major credit or debit cards.`,\n content: (\n <>\n <p>\n All payments are securely processed through Stripe, ensuring maximum\n safety and reliability. We support various payment methods, including\n Apple Pay, Google Pay, PayPal, and major credit or debit cards.\n </p>\n </>\n ),\n },\n {\n question: \"Are there occasional free tips?\",\n type: \"subscription\",\n answer: `Yes! You can enjoy daily free tips through our Free Plan. Additionally, join our vibrant Telegram Community for more free tips shared by our community of bettors.`,\n content: (\n <>\n <p>\n Yes! You can enjoy daily free tips through our Free Plan.\n Additionally, join our vibrant{\" \"}\n <a href=\"https://t.me/+vMSyhj7q38xkZDRk\">Telegram Community</a> for\n more free tips shared by our community of bettors.\n </p>\n </>\n ),\n },\n {\n question: \"Is the platform mobile-friendly?\",\n type: \"support\",\n answer: `Yes, Football Genie is fully mobile-friendly! You can easily access all features and insights on your smartphone or tablet, ensuring you never miss an update or tip, no matter where you are. 🚀`,\n content: (\n <>\n <p>\n Yes, Football Genie is fully mobile-friendly! You can easily access\n all features and insights on your smartphone or tablet, ensuring you\n never miss an update or tip, no matter where you are. 🚀\n </p>\n </>\n ),\n },\n {\n question: \"How can i request a new feature?\",\n type: \"support\",\n answer: `We love hearing your ideas! To request a new feature, simply visit our Feature Requests page. Share your thoughts, and our team will review them for future updates.`,\n content: (\n <>\n <p>\n We love hearing your ideas! To request a new feature, simply visit our{\" \"}\n <a\n href=\"https://football-genie.canny.io/feature-requests\"\n target=\"_blank\"\n >\n Feature Requests page\n </a>\n . Share your thoughts, and our team will review them for future\n updates.\n </p>\n </>\n ),\n },\n {\n question: \"Is there a Football Genie mobile app?\",\n type: \"support\",\n answer: `Not yet, but it's in our plans! We're working to deliver a seamless mobile app experience in the future. For now, you can enjoy our fully optimized mobile website. Stay tuned! 📱`,\n content: (\n <>\n <p>\n Not yet, but it's in our plans! We're working to deliver a\n seamless mobile app experience in the future. For now, you can enjoy\n our fully optimized mobile website. Stay tuned! 📱\n </p>\n </>\n ),\n },\n {\n question: \"How can I contact the support team?\",\n type: \"support\",\n answer: `Need help? Our support team is here for you! Reach us via email at info@football-genie.com or message us on our Telegram channel.\n\nYou can use the Contact Form found on this page. We're always ready to assist.`,\n content: (\n <>\n <p>\n Need help? Our support team is here for you! Reach us via email at{\" \"}\n <a href=\"mailto:info@football-genie.com\">info@football-genie.com</a>{\" \"}\n or message us on our{\" \"}\n <a href=\"https://t.me/football_genie\" target=\"_blank\">\n Telegram channel\n </a>\n .\n </p>\n <p>\n You can use the <a href=\"#contact\">Contact Form</a> found in this\n page. We're always ready to assist.\n </p>\n </>\n ),\n },\n {\n question: \"What should I do if I encounter a technical issue?\",\n type: \"support\",\n answer: `If you face a technical issue, don’t worry! Try refreshing your browser or clearing your cache. If the problem persists, contact us at info@football-genie.com. Provide details like the error message and steps to reproduce it so we can resolve it quickly. 🔧`,\n content: (\n <>\n <p>\n If you face a technical issue, don’t worry! Try refreshing your\n browser or clearing your cache. If the problem persists, contact us at{\" \"}\n <a href=\"mailto:info@football-genie.com\">info@football-genie.com</a>.\n Provide details like the error message and steps to reproduce it so we\n can resolve it quickly. 🔧\n </p>\n </>\n ),\n },\n {\n question: \"How do you ensure data and payment security?\",\n type: \"support\",\n answer: `Your safety is our priority. Football Genie uses AWS Services for data security and Stripe for secure payments. We adhere to strict privacy policies and ensure all transactions are encrypted and compliant with industry standards. Your trust means everything to us.`,\n content: (\n <>\n <p>\n Your safety is our priority. Football Genie uses{\" \"}\n <strong>AWS Services</strong> for data security and{\" \"}\n <strong>Stripe</strong> for secure payments. We adhere to strict\n privacy policies and ensure all transactions are encrypted and\n compliant with industry standards. Your trust means everything to us.\n </p>\n </>\n ),\n },\n];\n","\"use client\";\n\nimport { motion } from \"framer-motion\";\nimport { Stack } from \"@ui/layout\";\nimport { Button, Icon, Tag, Title } from \"@ui/elements\";\nimport React, { FC, PropsWithChildren, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useDeviceType } from \"@hooks/useDeviceType\";\nimport { Tab } from \"@components/Tab/Tab\";\nimport { faqItems } from \"@components/FAQ/faq-items\";\nimport { Container } from \"@components/Container/Container\";\n\nexport type FAQItem = {\n question: string;\n content: React.ReactNode;\n type: \"general\" | \"tips\" | \"strategies\" | \"subscription\" | \"support\";\n answer: string;\n};\n\ntype FAQItemProps = PropsWithChildren<{\n question: string;\n active?: boolean;\n onChange?: () => void;\n}>;\n\nconst FAQItem: FC<FAQItemProps> = ({\n question,\n active,\n children,\n onChange,\n}) => {\n const [enableScrolling, setEnableScrolling] = useState(false);\n const deviceType = useDeviceType();\n\n const maxHeight = deviceType === \"desktop\" ? 800 : 1500;\n\n return (\n <article className=\"flex w-full flex-col items-start gap-none rounded-lg border border-gray-200 dark:border-neutral-700\">\n <Stack\n className={cn(\n \"group w-full max-w-full cursor-pointer justify-between rounded-lg bg-white p-4 pl-5 pr-2.5 transition-colors hover:bg-gray-100 active:bg-gray-200 dark:bg-neutral-900 dark:hover:bg-neutral-800 dark:active:bg-neutral-700\",\n {\n \"rounded-bl-none rounded-br-none bg-gray-100 dark:bg-neutral-800\":\n active,\n },\n )}\n role=\"button\"\n direction=\"horizontal\"\n aria-expanded={active}\n aria-controls={`faq-content-${question}`}\n align=\"center\"\n onClick={() => {\n setEnableScrolling(false);\n onChange?.();\n }}\n >\n <h4\n className=\"flex-1 select-none text-sm text-gray-800 lg:text-base dark:text-neutral-200\"\n id={`faq-heading-${question}`}\n >\n {question}\n </h4>\n <motion.div\n className=\"flex size-5 flex-none items-center justify-center bg-transparent lg:mr-2\"\n animate={{ rotate: active ? 45 : 0 }}\n transition={{ duration: 0.2 }}\n aria-label={active ? \"Collapse answer\" : \"Expand answer\"}\n >\n <Icon icon=\"Plus\" className=\"size-4 lg:size-5\" />\n </motion.div>\n </Stack>\n\n <motion.div\n initial={{ maxHeight: 0, opacity: 0 }}\n role=\"region\"\n aria-labelledby={`faq-heading-${question}`}\n id={`faq-content-${question}`}\n animate={{\n maxHeight: active ? maxHeight : 0,\n opacity: active ? 1 : 0,\n }}\n transition={{ duration: 0.3, ease: [0.4, 0, 0.2, 1] }}\n className={cn(\"max-w-full\", {\n \"overflow-auto\": enableScrolling && active,\n \"overflow-hidden\": !enableScrolling || !active,\n })}\n onAnimationComplete={() => {\n if (active) {\n setEnableScrolling(true);\n }\n }}\n style={{ willChange: \"max-height, opacity\" }}\n >\n <div className=\"prose prose-sm prose-gray max-w-none p-5 dark:prose-neutral dark:prose-invert\">\n {children}\n </div>\n </motion.div>\n </article>\n );\n};\n\ntype FAQGroupProps = {\n items: FAQItem[];\n activeQuestion: string;\n setActiveQuestion: (q: string) => void;\n};\n\nconst FAQGroup: FC<FAQGroupProps> = ({\n items,\n activeQuestion,\n setActiveQuestion,\n}) => {\n return (\n <div className=\"flex flex-col gap-md\">\n {items.map((item) => (\n <FAQItem\n key={`faq-item-${item.question}`}\n active={activeQuestion === item.question}\n onChange={() =>\n setActiveQuestion(\n activeQuestion === item.question ? \"\" : item.question,\n )\n }\n question={item.question}\n >\n {item.content}\n </FAQItem>\n ))}\n </div>\n );\n};\n\nexport const FAQ = () => {\n const [activeQuestion, setActiveQuestion] = useState<string>(\n \"general-information\",\n );\n const [activeTab, setActiveTab] = useState(\"general-information\");\n\n return (\n <section\n className=\"relative flex max-w-[100vw] flex-col items-center gap-md overflow-hidden px-6 py-14 md:overflow-auto lg:py-32\"\n aria-labelledby=\"faq-heading\"\n id=\"faq\"\n >\n <Container>\n <div className=\"mx-auto flex max-w-5xl flex-col gap-xxxl\">\n <header className=\"flex flex-col items-start gap-md\">\n <Tag size=\"md\" variant=\"neutral\">\n Help Center\n </Tag>\n <Title as=\"h2\" styleAs=\"h1\" id=\"faq-heading\">\n <span className=\"sr-only\">Frequently Asked Questions</span>\n Got any <strong className=\"text-primary\">Questions?</strong>\n </Title>\n <Title\n as=\"h3\"\n type=\"subtitle\"\n color=\"tertiary\"\n className=\"max-w-2xl font-light leading-relaxed tracking-wide\"\n >\n We got you covered. Check out Frequently Asked Questions or\n contact us directly.\n </Title>\n </header>\n <Stack className=\"w-full flex-1\" spacing=\"xxl\">\n <div className=\"mx-auto flex w-full gap-xxl\">\n <Tab\n value={activeTab}\n onChange={setActiveTab}\n tabId={`faq-tab`}\n asideClass=\"md:sticky md:top-28 lg:top-40 h-fit flex-none\"\n contentClass=\"p-none bg-transparent dark:bg-transparent w-full max-w-2xl ml-auto md:mt-none mt-2\"\n items={[\n {\n name: \"general-information\",\n label: \"General Information\",\n icon: \"Info\",\n content: (\n <FAQGroup\n activeQuestion={activeQuestion}\n setActiveQuestion={setActiveQuestion}\n items={faqItems.filter((e) => e.type === \"general\")}\n />\n ),\n },\n {\n name: \"tips-and-predictions\",\n label: \"Tips and Predictions\",\n icon: \"Lightbulb\",\n content: (\n <FAQGroup\n activeQuestion={activeQuestion}\n setActiveQuestion={setActiveQuestion}\n items={faqItems.filter((e) => e.type === \"tips\")}\n />\n ),\n },\n {\n name: \"strategy-bankroll\",\n label: \"Betting Strategies & Bankroll\",\n icon: \"Strategy\",\n content: (\n <FAQGroup\n activeQuestion={activeQuestion}\n setActiveQuestion={setActiveQuestion}\n items={faqItems.filter((e) => e.type === \"strategies\")}\n />\n ),\n },\n {\n name: \"subscription-payments\",\n label: \"Subscription & Payments\",\n icon: \"CreditCard\",\n content: (\n <FAQGroup\n activeQuestion={activeQuestion}\n setActiveQuestion={setActiveQuestion}\n items={faqItems.filter(\n (e) => e.type === \"subscription\",\n )}\n />\n ),\n },\n {\n name: \"technical-support\",\n label: \"Technical & Support\",\n icon: \"Gear\",\n content: (\n <FAQGroup\n activeQuestion={activeQuestion}\n setActiveQuestion={setActiveQuestion}\n items={faqItems.filter((e) => e.type === \"support\")}\n />\n ),\n },\n ]}\n />\n </div>\n <Button\n color=\"primary\"\n size=\"medium\"\n data-aos=\"fade-up\"\n className=\"lg:hidden\"\n as=\"link\"\n href=\"#contact\"\n >\n Contact Us\n </Button>\n </Stack>\n </div>\n </Container>\n </section>\n );\n};\n","\"use client\";\n\nimport { Hero } from \"@components/Hero/Hero\";\nimport { HowItWorks } from \"@components/HowItWorks/HowItWorks\";\nimport { Features } from \"@components/Features/Features\";\nimport { MatchAnalysis } from \"@components/MatchAnalysis/MatchAnalysis\";\nimport { SupportedLeagues } from \"@components/SupportedLeagues/SupportedLeagues\";\nimport { TrustBooster } from \"@components/TrustBooster/TrustBooster\";\nimport { Testimonials } from \"@components/Testimonials/Testimonials\";\nimport { CommunityChannel } from \"@components/CommunityChannel/CommunityChannel\";\nimport { PricingTable } from \"@components/Pricing/Pricing\";\nimport { RecentFixtures } from \"@components/RecentFixtures\";\nimport { AboutUs } from \"@components/AboutUs/AboutUs\";\nimport { Contact } from \"@components/Contact/Contact\";\nimport { FAQ } from \"@components/FAQ/FAQ\";\n\nfunction Home() {\n return (\n <>\n <Hero />\n <HowItWorks />\n <TrustBooster />\n <Features />\n <SupportedLeagues />\n <MatchAnalysis />\n <Testimonials />\n <CommunityChannel />\n <RecentFixtures />\n <AboutUs />\n <FAQ />\n <PricingTable />\n <Contact />\n </>\n );\n}\n\nexport default Home;\n","import { useState, useEffect } from \"react\";\n\ntype DeviceType = \"mobile\" | \"tablet\" | \"desktop\";\n\nconst MOBILE_MAX = 639;\nconst TABLET_MAX = 1023;\n\nexport function useDeviceType(): DeviceType {\n const [deviceType, setDeviceType] = useState<DeviceType>(\"mobile\");\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const handleResize = () => {\n const width = window.innerWidth;\n if (width <= MOBILE_MAX) {\n setDeviceType(\"mobile\");\n } else if (width <= TABLET_MAX) {\n setDeviceType(\"tablet\");\n } else {\n setDeviceType(\"desktop\");\n }\n };\n\n handleResize();\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return deviceType;\n}\n"],"names":["Input","forwardRef","ref","label","id","className","rest","div","input","cn","placeholder","htmlFor","displayName","Image","darkSrc","src","resolvedTheme","useTheme","mounted","setMounted","useState","useEffect","NextImage","resolvedSrc","Hero","dashboardLink","useUtmLink","process","form","useForm","defaultValues","email","section","aria-labelledby","header","Tag","variant","as","Title","align","color","strong","decor","alt","aria-hidden","data-aos","data-aos-delay","styleAs","onSubmit","handleSubmit","values","url","URL","window","location","origin","searchParams","set","href","toString","Controller","name","control","defaultValue","render","field","autoComplete","type","Button","size","aria-label","onClick","sendGTMEvent","event","value","getUtmParams","ul","li","Icon","icon","p","bubbleOne","bubbleOneDark","bubbleTwo","bubbleTwoDark","bubbleThree","bubbleThreeDark","bubbleFour","bubbleFourDark","appScreenshot","appScreenshotDark","fill","priority","quality","DotPattern","width","height","x","y","cx","cy","cr","props","useId","svg","defs","pattern","patternUnits","patternContentUnits","circle","r","rect","strokeWidth","Container","children","isFluid","classNames","title","step","last","iconLabel","Stack","direction","spacing","isRounded","tabIndex","HowItWorks","GlowCapture","glowColor","ol","StepBox","FeatureTag","span","FeatureItem","subtitle","tags","tagText","buttonText","isReverse","image","imageDark","imageAlt","buttonAriaLabel","buttonLink","useRef","scrollYProgress","useScroll","target","offset","utmLink","featuerLink","startsWith","yLayer1","useParallax","distance","stiffness","damping","useTransform","useSpring","shouldReduceMotion","useReducedMotion","opacityTransform","article","replace","toLowerCase","loading","motion","style","opacity","Features","role","h2","featureOne","featureOneDark","featureTwo","featureTwoDark","featureThree","featureThreeDark","firstColumnCards","description","chess","secondColumnCards","heart","gym","MatchAnalysisCard","split","join","MatchAnalysis","Swiper","slidesPerView","loop","spaceBetween","grabCursor","modules","Autoplay","autoplay","delay","disableOnInteraction","pauseOnMouseEnter","breakpoints","centeredSlides","map","e","index","SwiperSlide","reverseDirection","Globe","dynamic","ssr","ErrorBoundary","React","getDerivedStateFromError","hasError","componentDidCatch","error","errorInfo","console","state","constructor","images","light","dark","SupportedLeagues","undefined","stats","img","trophy","end","prefix","lab","boy","dollar","StatCard","CountUp","duration","TrustBooster","device","useDeviceType","stat","LightBoxSlide","slide","on","click","useLightboxProps","currentIndex","useLightboxState","isImageSlide","Math","min","position","margin","draggable","objectFit","cursor","sizes","ceil","innerWidth","LightBox","imageClass","open","setOpen","showNavigation","length","Lightbox","carousel","imageFit","finite","zoom","maxZoomPixelRatio","zoomInMultiplier","plugins","Zoom","close","slides","styles","container","background","backdropFilter","button","filter","stars","Array","from","_","weight","LogoSourceMap","telegram","telegramLogo","facebook","facebookLogo","twitter","twitterLogo","google","googleLogo","instagram","instagramLogo","SourceNameMap","TestimonialItem","text","rating","hydrated","setHydrated","isExpanded","setIsExpanded","isOverflowing","setIsOverflowing","textRef","el","current","scrollHeight","clientHeight","blockquote","cite","StarFeedback","aria-expanded","aria-controls","footer","testimonials","Testimonials","swiperInstance","navigationPrevRef","navigationNextRef","swiper","slidePrev","onBeforeInit","navigation","prevEl","nextEl","testimonial","slideNext","CommunityChannel","deviceType","PricingTable","billingCycle","setBillingCycle","aria-pressed","checked","onChange","toggleBillingCycle","h3","AnimatePresence","mode","initial","transform","animate","exit","transition","getTipsPerformance","getUserTips","params","options","axios","get","getGetTipsPerformanceQueryKey","getGetTipsPerformanceQueryOptions","queryOptions","query","axiosOptions","queryKey","queryFn","signal","getGetMatchAnalysisQueryKey","getGetMatchAnalysisQueryOptions","getMatchAnalysis","enabled","contactBody","post","getContactMutationOptions","mutation","mutationOptions","mutationFn","data","contact","useMutation","GridPattern","strokeDasharray","squares","path","d","Tab","items","tabId","onContentUpdate","contentClass","asideClass","sortedItems","slice","sort","a","b","highlighted","tabMenu","activeTab","setActiveTab","tabName","activeTabIndex","findIndex","tab","previousActiveTabIndex","usePrevious","variants","normalItems","item","highlightedItems","handleTabClick","buttonRect","getBoundingClientRect","menuRect","left","scrollLeft","scrollTo","behavior","setTimeout","renderTabButton","isActive","tabButtonId","tabPanelId","aria-selected","currentTarget","layoutId","zIndex","aria-orientation","custom","block","content","valueSubtext","textColor","colorClass","statusColorClasses","textColorClass","bg","iconAlt","figure","figcaption","ReadmeContent","dangerouslySetInnerHTML","__html","marked","parse","createContext","source","fixture","useFixtureContext","context","useContext","FixtureContext","Provider","h4","InfoCard","summary","predictability","getColorByPredictability","safe_for_betting","match_preview","predictions","correct_score","score","fulltime","prediction","i","home","away","isWinner","String","correct_score_reasoning","colorRule","leftLabel","rightLabel","leftValue","rightValue","customEase","mid","aria-valuenow","aria-valuemin","aria-valuemax","ease","getStatusByNumber","getStatusByNumberReverse","TeamComparison","team_comparison","teams","logo","home_team","team_health_index","away_team","ProgressBar","motivations","injury_impact","tactical_advantage","recent_form","reasoning","recommendations","betting_recommendations","h5","short_reasoning","things_to_avoid","TooltipContext","useTooltipContext","Tooltip","tooltip","useTooltip","initialOpen","placement","controlledOpen","onOpenChange","setControlledOpen","uncontrolledOpen","setUncontrolledOpen","useFloating","whileElementsMounted","autoUpdate","middleware","flip","crossAxis","includes","fallbackAxisSideDirection","padding","shift","hover","useHover","move","focus","useFocus","dismiss","useDismiss","useRole","interactions","useInteractions","TooltipTrigger","propRef","asChild","childrenRef","useMergeRefs","refs","setReference","getReferenceProps","aria-describedby","TooltipContent","setFloating","FloatingPortal","floatingStyles","getFloatingProps","safe","risky","TipTable","columns","accessorFn","row","bet_amount","cell","info","original","category","accessorKey","odds","getValue","toFixed","probability","TagVariant","winner","table","useReactTable","getCoreRowModel","getColumnClasses","thead","getHeaderGroups","headerGroup","tr","headers","th","flexRender","column","columnDef","getContext","tbody","getRowModel","rows","getVisibleCells","td","FixtureCard","tips","onTabChange","elementRef","useGetMatchAnalysis","useQuery","FixtureProvider","time","dateTime","dayjs","date","format","league","handleTabChange","MatchPreview","CorrectScore","DoDont","navigationInitialized","tipsData","useGetTipsPerformance","page","pageSize","subtract","useCallback","updateAutoHeight","setNavigationInitialized","nav","Navigation","a11y","prevSlideMessage","nextSlideMessage","slideLabelMessage","onSwiper","init","update","allowTouchMove","autoHeight","match","Card","bgColorLight","bgColorDark","backgroundColor","AboutUs","rocket","chatBubble","TextArea","TextareaAutosize","GetInTouchHeader","hasId","formState","errors","reset","mutateAsync","sendContact","isPending","sendContactLoading","isError","useContact","recaptchaRef","showSuccess","setShowSuccess","captchaTheme","useMemo","recaptchaToken","executeAsync","cleanedData","Object","entries","reduce","acc","key","rules","required","aria-invalid","message","ReCAPTCHA","sitekey","badge","theme","aria-live","br","isLoading","emailCopied","setEmailCopied","handleCopyToClipboard","copyTextToClipboard","founder","rel","address","ContactForm","question","answer","pre","code","em","active","enableScrolling","setEnableScrolling","rotate","maxHeight","onAnimationComplete","willChange","FAQGroup","activeQuestion","setActiveQuestion","FAQItem","FAQ","faqItems","Home","RecentFixtures","Contact","setDeviceType","handleResize","MOBILE_MAX","TABLET_MAX","addEventListener","removeEventListener"],"sourceRoot":"","ignoreList":[]}