From 61cbc80e80390e1b0030eca05e78ce6db714594f Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Sat, 2 Oct 2021 14:26:45 +0200 Subject: [PATCH 01/13] Create plugin.js Dear all, sharing my trial of Planets Overview plugin. In this times where time is against us... --- content/utilities/PlanetOverview/plugin.js | 283 +++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 content/utilities/PlanetOverview/plugin.js diff --git a/content/utilities/PlanetOverview/plugin.js b/content/utilities/PlanetOverview/plugin.js new file mode 100644 index 00000000..6e97a1bd --- /dev/null +++ b/content/utilities/PlanetOverview/plugin.js @@ -0,0 +1,283 @@ +// Overview of Planets by STX +// Start sort from homeplanet if is not pre-selected planet +// remixed from Palnet score plugin -> THX to Phated + +// Import game utils +import { + getSilver, +} from 'https://plugins.zkga.me/utils/utils.js'; + +// Import Skypack constants types +import { + PlanetType, + PlanetTypeNames, + PlanetLevel, + PlanetLevelNames, +} from "https://cdn.skypack.dev/@darkforest_eth/types"; + +// Constanst definitÃon +const planetType = []; +const minLevel = []; +const middle = []; +const { getPlanetName, getOwnerColor } = df.getProcgenUtils(); + +// Default refresh 30 seconds +let REFRESH_INTERVAL = 1000 * 30; + +// Plugin Overview Default +class Overview { + constructor() { + this.container = null; + this.loopId = null; + // PlanetType Default value + this.planetType = PlanetType.SILVER_MINE; + // PlanetLevel Default value + this.minLevel = PlanetLevel.TWO; + // Slider Default value + this.topX = 10; + // checkbox MyPlanets + this.table = document.createElement('table'); + this.table.style.width = '100%'; + this.table.style.borderCollapse = 'separate'; + this.table.style.borderSpacing = '10px 0'; + // default static text header of table + this.thead = document.createElement('thead'); + this.thead.innerHTML = `
Kw(XjhiV1|B_)&&jCPrJvmpeiJy<{*OEr=@GxZ7s z%@PCi2pAZ3`)TwZX`*C1c{s&^&^oIiisSb*$~JQEXV96Dhkh=HB9$#3pgh&LJ{}6G=JCaH#BXmGb@9>``C-p<@tk$t zP{1;;ECDbX6{&2{meZP{stU>_X(jgXr=9V@C!DZwUut>29g#Ha^5@qciomw!@r=j{ z4KR^zd5y?4j)~k+2d&h$c^QFp6`<4pt2GKx%o!Cy>L{O415h16`~djQY8y=xf5s%{ zgzcz9+Tovg_}N0_=@fhpSdML7hI)GPB;j@Xpd~lU1Ni5Hp>-N}1ENG5W)A+djh+qu z8a~F-Z3$pf0Cda+5CF Ntt`rHU|U9J%^IvCR}w~-66NCcOlBhrAl&ir zYF(fm#B;ok^?;jG1Qw3Du{_JD-Eh=rpsiCP>3)|>8c+x*kf~)a-PE^QU=hKzD)gp- zfsq2h-b3(fR%K;nZ0sKfu58h@kMSH90VV5*&IOX~ 8lfg0Z-d&SU_5ytmc)R5A2MYY2^J@Q&Tn}#3qdjJ% S?aT(VVenrwb39@2`oq6l zB*F#ljpOf!ZApJ34vYc;yq5D#sEPqbEpv*8?Ok)<`&&Fhw6XE=egT6fuiPF0N4HFi zwi{WN_OwZDiT(n^$cgM3-*|dR{pfp@twHCvnIH41@da?$H9^F4Km>A^CgMaIo|1^2 ze)ZZZd3?;kyr4e IYXJ-ae<}UB8I-L{ey4MqO3yVJ}HJr|er;J%?_uO=yfN zjl{}x;7|+)u=}F)J21KDPDmcooJD}OB+I?KVK0w`Dh}i*=zS@ad7$5q^nV!jw_9&Y zzsjesj8NY)Az(Ms(b1uk82wzAHhP95n=f@7@onRnqW1?@RL0lzJPaO_{TC51{5Jb_ ze1j$4sZL3N|Jbcg_3U{2j)C6?l$B`uR2qCkX^6=M< z1LM|F;=~;dYWV^+W?gxcdL7;;i+pva9a)oP4_tNcC&If4@$tDaBdE|3NW_3iII!Ca zK&}nv$b5qTm7@ONmgJKPAi=~X^V!x@7-prdAN{R}-ma@70?f)p4A+&up5xK2tlj^J zZ8`)1szC|1_-<5JT*~+ruk~ZqJa6OYJFj6kLJZR_+o9>b?YFhrPk0-klH i`*_PalYaYb9_ zU8^=+%}!8K?Ngqqbx@TaV_a>V 8AG|p-T^k$D={kbVCrh>o4V$dprEz1kSW6U?B}(a7V$Vb&q`P*x+X8@Ue!u zT^gCjjUOv(>2^I`!Hab0pTA*^5qY7z-@6Kh&rgOkZu9M$qDm>#9R))ZcsuN q+-h zRIQ5oOrx4c+KukdvzvOhIPbbv7Q~anA^Cf6V{X@3?#>4#_I7jbHfu_7Ik?M9{o-MD zKH6<#R7#R`ug@4kid%Nq3oCmvhQig3CneQ%`4%Ir2ZJJ1n$xiwjaS+kZQD--op6+S zSxZh-W(k_q(-35AIuW@*-3A}lzM1k=MA-TiJ;z<}eF}mTUWA {lA6v0qCdg5{i-p@rOqG{K#b z^5ZAuY~coVrx2!F|LB8a>Du)UnT>D+!f!?Ux$em-oAowVWx?xdEBvkxY8boKL~Tp< ze2$oj_S hjsDOh~^Zv zfePN>BUZM>3a*N3=3z#lQT$TFV;eK9kjf|FT9|R *O?3z!!jSNm*i`pSZgJFI)6$9c`40G&`A;XQxGu@8?(K(|Tnu2J2$}DRp(iV9 z{)hFyRkag5*Y4MrR6qS AftHUBv<| zo=%+^dUx8Y*y=^a4BUgYics(0Rd?~ zKAMQ>m-`?V3Z$d0S=fwE>O<4DS;1_&O1~V7q#yRu_j{oe(X7>>lh&BNhH5bPip|vF z1+uWw$f^<{2k0hjtra%8=gVmU?k-c9WVt~iAB=qRw`Mr==^CEj9slR5(tAg7*Ee4` z{rt#nuB*2w>i>d0WYs{QJEt`2Lj73T+|t(1#szB&B%9WYIj!*Xc7v;JJNWC+G=mT- z@6cBSRid*C=pKHLkAMGI+GoN_!riWv;L-VS(!Z4kN>5}d;7C`hn?{V$F-aFgB$T}r z3#v5^*?e6K9g|{5O~WsY&a6te3^M<0mnpd{R2k#f%RfPojGuXN-C`66ufJB-`FJ~3 zF13!}_n(18?Y*eOjJZ87o1Z;9tDB<{+ H}w+Q|v}$k_ZrZt*nuDktM!W_=0GImcKMWyuEbrchb;7u!7PXa5^8pHgSY zs5nQ(@wDW`g_J;PWIg*CvMt>jTSN981ZFx|;_@v|kNMQ|e*f-@sz00yC-Zeh?8%+P zNSV3Ek&t^b>*<0hGR-pAtj@AyixM|icJJgmQ-FKbBQN5?)Gtm-ohNmg1c$}+Fs9X_ zXAS3I#kuT*s7_$M7!Jpb-2p?i;Z8OglNtVe`les(;s#k {FD<9H zOC|8nbRHAFm9D?AUSChSvh(kNE3;fquN#XlX!@w#5Q6oE>z}Os@yOV~o8+b9Y~PD? zo}1vk;D=)6JZAv->0nIqYu!H3SCJehveDsw0wfrbJ&jtwC3EhIr&zSjDVZ_tP=e=q zYW01|R=(8@fItKSr#Z5)0Vc;;h87~<-ai`_5Te9((??rDeKOl38q7!uVjd+qRAP~} znnUk}QxUC;j{Ot0t$X5$72AoqTI{zt?O&<_S@W|sC?NhCi_kRV5I!yEfLlHYN=g4j z?#syJkuZ!;9BWGF1Esx2Ik6K1TP121VVdyiSxZ(mRsHC`b57a!~fOK7);sF z?KVA+JgYFVHgJ{+zR?A?Ak$`S(?k%)pP4YX{SRddnNW)XD&$i9^7P;BLbMmLRI%|2 z1?UOW3ee~Zj3$3c{Vtl49pe53h-s_ebn*+Y(3|G+huHp6c;F8h%G@BU0|dLrInsHQ z6n8zP4D=2nIa=3M#MI70O~^S$9cLA>x3K7_wEIhswj;4y?;a(0 *jvVh+phs%Y(KgM46(7 kX(}pSq!Qm0fog+_yj%GS>suVrlBRyE^!% zU )F7}#y?m;U&;COmi0*-!i&>m4_WC@Em9L#pak%kk+#UCoa zN|hEtN9d*vG(nVJdcsTfSUV~5jLbNFi94Q56?sD~Ocg~Ic?6_J_lY lB7;xcJ3e+isd^6cuxQ4hST>}j&+)cVvl zbb7(0^@%I^`Lh5c%0yw_b9t9Badk1XTLyB+zda)^4}a*w2zam)SRDV}M4BAQpWu)V zSe!~c;g^gLl9RlM2p9DCE^F3wrC}&lZ$w_mgWxp0ju@*M#=E)h1a@+BD6g1nof@EX z_grEf^?je!I!U`MuDCP}O%~acjMrU)iS$*B@D^IgO2CK#Sr`%(ZVT_80hvp0ep(jU zoS4#bFn`uUxiJbYG{q1}HL$SX37`=-HfWQ}Sn!0M4~rjIXKC8sQNKwL^>e$g^GoG? zmHT#G |sgqK*nXBJL$#+}ZWIxB7v2%pphH7|3 zEeENIw~#;bM~jS&!>Q_1nHZC%w^1kLK=;@C8MpG%&|#wK3lC_^1%w3$UIG%d8RJgv z?B$gV0)XK=N&Of9UHOujj8^+83hiz3=l1IkjnWG4hl}Z-o7!><$f?C@2DtrVtzvCC zsh0At`hlUz?^rkpHu~7pnCHgR7P !NjH$G6QE7qC#GMHUP65>JXQ%bEhG$TT=@xNsm1DMC bm+CUB_wzE z{o6!K-A!WQj3@+k18qw{BztQ rkDCfGofmS z#A@%;AKMbS+2S6!E)}sme`b~Muo>(6qy?r9<^t^H_j-*(2DFp^X#gySFZhw4t-dv% zXq`Va+z_jgsNP>>bhM63S}% xrzLwECWnn=PGH1hx`-%aR#X0X0N7IXL~unk z$zp{9pGQG(oC0g*ch)LzoN=8CJb@?Zh>^GcDZ}{|k0S za#1R?fI%>PuT^6MOV0T29FykOPCL*exGwg1=)@C+d{Nt7 z%+LldX*X$sM 6Ma{(wWVs#Zg>tSin%y+^>))sp1tlMg1rsNkGd@FEMJ&t zr3nkktLo7c6=~jWIvUSnIWKV=)+y)9AmO1PnWyBOXmCuf|1%E$*a 0K@Ke6Vq?iz#QVO*xFaWCM{~ X7k6XyyL8yI>yiZG;W{$`Me4qi5C#6H&^?a7qy8 zkl3?2C$Ci$kEShRMV^uG(TEPtj+adN0?`k-T;D-O$4mbW$cZx{VlLMU&A7L`*MN7R z^2p99{5q_EabJ4jboUO%ctgm}d<~_>Xv=UlnIc^)WVB;E6vOj~kvg~@e5Uig*luNi z0N8hbLKWU)2?ZC>2y*3^J5rBMsm@NKua5Rp|4z#SSqQqJkA2pLquq&55lZznoegba zWFu}t)xe(>SheDI)=0UBTj2~{tFIMChO{ZQl3et4o_U&> x0ubC~ubz>X3XYT6|8GF+UD51;y_7y70zizmJ>vQozzK zZ?Hu!8L^b<7WNyB-f-P+y4z~kj##vuw{ttrXOZ``bQg|3(cY4k!Mut#Dh?{l@jeQ8 z*w*M_E?}J0elU_jLYKjGAOwVObUI&ze =Col#bQn{jOGEQ!A742*b zo(s`Ad}ZQ@3i4UjKNqO3>@CenRJeDV@2C&^yK!FiE2Q+dFmxvfm6oVW>}RGGRCI zBxo~!h$jYX? zkem^1pG45|lz{6OSTgGV!{LbR-nInStHsDMq%kZhyx{D&q4}l-5dw_+JS9d^YG~ z#8c9x_EPApJ~3v#s76{9)edPvo@;rszodG!W5~0 8 T2>|< z#&H}1Eb$1H+D#rqeX#iQdrxCdf8qrGV1pr=E7|-X#-q=BlW&nf96shOUpp>MqMq#p zOIL~G_6wkcI^p&-e?dty?VJN%ZNshOtHm(zaC2i)Cdz9)`S0V6{|ApH{{MTA@)*ED z eQ6Uw%!=|Tuvq++^;GSJpF9xoifGX~`R2>29IrVg zV|G5gOh-be9+a8a^~LLh7SVrg0I|y%ShosSPQMPQBQmp#^aa(va_)z{R(sEYq--l9 zihYHBKsR)6ke&U0u6(+)mkTB-2_|g~1`Ou&cDJ?@s*{F7@TXv} _P8HQQxGs{^>E zObKvK? {`SJ{^Je@} zmU>>&0>~2^ZwSrg24G?@jPEdzJSjH V@UBD C&S zl7St+Adqmv52XKbW$Vxsdp`>j82BG|!GAV}eP 6NaI-TT+me53Oz8_Gc+F zPY?wlkpL23i^1KWe#MHzM?h=)hM-XFDKR_uBkS&BlcA@GsYSjSL?`Gli%Yfs%(Z8= zf~tE$W^7GyB8$n+Xk}}abEYqU_O-=$uZWYlMR`5Vv|~^z!#)s eq+k&z3K7&tDqlAi#_F3?M~!ogcfiXZMPHHN{S*6G@+3KoA65yfqXtT4kLfW zrcAgPj1p7Z2d%h(s3EG!R|9lLR~1Y+UIBpyPLI%kPDwO1n?^A} 84g5+^(G`0&q zEqGLLE$`Q@ySkD!X&6yp=z~y@-4}*St#{@%&TO cNvPJyB-Ru@E#!xtMhcDbpV%yK_zBIZSZ*$N~?w(9t% z6NjJe7gSfACkzAv6UDkQVvI}V;F8JPV@(;Hl35qc;0CCg+s&Zb`)gt#RXteGcFU{v z*ZfC>*MII|+IIE-JFu4=*6usGha=ser(`xhaKicj3F<#$@85wT%;i(JHjm%fIX$?X z6U1E9W-Rasad1s9oh^nFVRBb1r2p>(TEoHO$ )Wbq zFRIWQev5!z*%c6KfonTl0?H}*2 HdUbnpNE zEHBB%f6KQ(PG~o}YA^7)(6ss(O<0biaDvHgLX>7mc0kpaBR4`A-iz+%sNZ~bww+$y z+xEbDYwIJLY-@s**29!F@oaeEx%=tVd^ux}w_28^8TRvZ%gs|?{A80BTO%4g V6DNMKT(ub=1s!m>$0000sba4?+-sR%wQUccdN1_YDb!@j zds*OE5b^^yc5U(k@*Nln#lk2IoMO^9n2FH;R%XD`{l7{(%c!W@zuzmR+;k&Ich^V= zLk=*sl!V04jg)kVppw#!pa>{RgE*9QmtYV>C=8)=H=Jv@@B9Be&spciIqSTgHEUj6 zdtZBh >wYuzL}|mmC4T%_~Nb*!{8{))9wXS z@Q*0lY8DW`HVGQc+_$bPXVlF!E!>nXp$MUht@2(INz)H5M%cHPlfno7PW5HiYVIlQ z<>0u-;)!)W@FwYt5MDn{R}sAx*A3!I!kg=b>{(Wn<33u%U#Z*q>lD0Fn4^!1M-V&5 z(hfhZ>!BPS!?95g|0Meqosg^v4Y>7r_yjH%#-E2Lu{UArkAFq{Q-zLit3QmEe8_j| z@h%KZbA|yu(H<*U(|R-2ZkRdV%4U{)E{Du}`Gt``O5?wNCn %$=zWMC2qo@k+8|tujs9Nrsb=J@&iJ@X2LgTc2>g@dIIj(yW4Grk6H* z?e+^coDI)ojjkYTJa8LBCpP`3T(_)SYmx=3UQCv1b|va0ok1b&ok+pL=WYo$N YS{#ji{j 8cu(@@0 zu~_ib>j1PIm%0^LF^(au*dKL0xDnkAL^Xuut#w9A8NDi{SeG2)q&ug%vMvyIj7Z Kl|F8 zrSLC5;@=$3mLFl+6_9w*@NG5rTW5< >za-)$QZ_CQS|90nJGl?3CbD1_ z{P#je1Qk38^F1`17Kz3=Ku!qMwEEn8J)!eTc@i^{0MXO_)b@Ds(o;mnTGo^4+ekFz z2+@Y?+uYqdxoM4;tj&i-MRTz}cTquGApJjbf7`ZX_ Jb<}S)Y!Qh??=4=wD zsk5!Ha@3OSb|*>8CAN^N?ij_tr zrPWO1=5u_vQWfnuv@Rsl|>DMNBzN z%c)#W(^)5rPuhgw+8w{g>T-^iwUpHy(0*wTje>ujmZ1MFD*P#T`98-K6jE*TY&7-m zhBZY U%x~&S82#Eh|MTg!zREIi z8~gDxqIdBeTV!HC g^{igz};B zFVkV#Zg;9tD=tO(iS^J;W9d~MCV7Ix<$T~LN zbo;Ir!wj2T_>BbQ2=RL$<`RZHqKlDBYIu;iJC1U8MI2j$KkYC^$o@EjZ9ypJGHc>( z?rr-&D6Z?ZPN07qOiMl`ObQr#{9q9ApE9C9dN3Ae@9#FE mwX@4E^DQ?g%@2BC zp%D%7ku6cA&h3Ro**^o1-v(J7-Q8pc^oqni*Wk@QwuX37Un-y(F5j<}0ryrKbkB5Y zuQN|$lh>Wlnp==hV+^Pmcikn10O39!Pif5?tTA70U!fK90U=~SWGvq |PQ>`s{~CE5{l_l<(4gj7(aMi5-oCwT zoF)0VIg_69=DN>8w?Md>9r62w@{@(ypRcbiK|j@{WYpmH2HLHRL~@Cibw0>qsDX?9 z=59v!Xxxq&Sn*b?v0lKndGv->kx-HG^jIATsgF$Bee$>IE(3oW;PP(ty4wuvgdPGv zPMZNEqGdgmDqv(aDb>$=<_n_sMV?Ud8&(w6s&C_bBI%-T_pxuW$o+c9^|C6&hrI2J zNobsmlVACG{M1t=_BPIijjxs>!~6#JS+}*NERKp9zEAN@CU%~fyEgs>K%o2(ywUTg zeV=aWSbC6>=g*geNELMAZk9H3WeK=;G~yFAPK?$GZ8l@H9-y8e%dw9Z$Spt;l8te1 zit6vg`E(*Q6R`Shox~)=yKqnkv?#ldarFzpW98BB=)qC&2dG_WQl3DmfBO|4 8GGk#Kv6N z(J_dmkMBC665IBZ<32X`bRjv8+C2dgKriVLeun_PTVA+s{Zg#K*YT_F80_gzuY0(E zPh^lW;rL=FkRzOwtSO%c16{N;m(#guZ2AXx)? _b$9Mh%9Y%R*z=8Qn!g2$F@$^8+Dr2p8HMVQT(R}n82f%hL+bu?(J@Pauq&h z$%iMrvDNAR$3blIAcyU5N&e;7ofR#SSsZfgu)+@oPD#PH`5k{!Olp!jzfxf3PZ>69 zW6esp1gKy;{|m>Z$4~!l1hOacLIe^AMCfX@;vzp}u5>O7m}5O~LEP<)uIr(aobkEQ zu93WrCmx<98*Ha8`j*1Ba^|j~&k&c+FZ?3pAa#fhM~WboC?gSraSgNYZw44F z `Pzm*ZheaTlfpG$rS`x7lE}rwv~7!t=~+^k!~& z?BYS{AXWuv2F91x !}NQ>n1+;^s8PQ6zc`?V zKOC7Z%4{kUlOjw)!TJY7B9%g98SM3LFP2z?C%CHhCM-w{eO!Bk5Ca=_zgJ!|B1+ zspK@VC-d&)rKW>YWe~ZeEupn*7cOC}dkuc9_&;0EZ;NzojG8v+Nx%Te@O{s%I6w2W z^Z&fxP`kdwz=b`10)mbvYyz=7OqidZ`sF#CTB7G)4yfmXp9tGSE>KhboMm$j7oc?c zk*=aKr`kol&Ieh3&EGKopqliE-acV~#|t~+IF0(r+93PPV5^J3Z9M@ezmM7@*~{K8 zgbR6|Tp?d=X$WeeR(+L*QSNY*M{Lm*2-IaWP`1ztEngSF#&;F?VlX9DjdGNV3$KSY zCEE_flMX2#RqEtUyq&I{%zNq|y^y2-v&JCZ }+MeLCZ0*@dbs#!9i4Wfcjc%%aPJ)f=i@-*$?NIId8}6pLyinj1c7 zOV7gKW=z*Z$5RJ=4@83w*2C6EC6S>ov;39rYID9|)%&uEdBSKAy^SfavWllHxuH4k zR_`{3C?4rHG(#!V+LpSmQDhx@r?^KO0l?1d^35G~BE9KW5XSeeN`?EQL5vp3HQ1ba zaiZG@a?`zm$vM)1KD3A%Ob~DidC5&0FJQsBvC@?t(AEJYwnJ-^Z24I{K2;Yp`Va@n zI?kb`4VdG~*DiMX$s T|ndah})hpQ;p>=-)wH4*}cA zujVWqxnSD{w?={>Dottd+TkJa1z8vvsq580IFM%7;6rz`Wn`c2M>y~Xt^kpPtOeY_ zut4dnz%;?xE5Wqzx!R(fK1-t@R`9X!JJ?~ek_Z5u%$}(9{}wkcIg{Hc+Zjo^Z4&XX zOMvuA-Z^M2B~X*VUReWxxm~gC`Fyq~^X;iiLenoU$-%ZRpB-q72R}l6BSH3A?a^5! zPm9@;@sy~%V}l$Kk;{ZwE}CV;;kRW0j<3&ArZQ)s-H5L7pZpB{a?s8#n2f$yj@9uD z5mW@>{I#myz`eQrU@p lH{6DxXa??tg1Yf{ z5F3 Cgz1(B} _j7+TKpq3k=-!Z!Ls*C9uFK4?Nwm!AJ5iU5 z{xyMF1)19)8H>|J(Goo_8nV_u$S;Q6X#%*P(vB^QT{4fPdxSCNuAt@Hq{>4b{s;{{ z?9o}%zwrI7gB7;^vgTkppW_vN=_PE`P(;QeIbvNzVaH{252B~~;lGpoQaWTJ7%ts( z@@+1+&O+kzzu=2tR={+sPT~?mV=h^kjkT(}F0NCo9tXs-^It9@Eu2j7pD|m%d{ahk z&?R#hMWHlUlOSmeyT2cFIF4Q>GOe~*^W1D@sSKSHRxc*maj=E%{*IfQYT?`*w)dZo zZFr*)YF20En&1Nl2gLrKJQ(xblr%dBaf!9uj^rBvBP|3@KhpmMRq1e0
^akwi&zS}S!*S~%o0gVTQ{=0zdmvK#;IjW (TTyB! zKtiu+ ``lBRfUbrnLRZ6K1qx}_d8xNBfiWT58L&FzMd>k7m}2yPdRjhXTz)`JLA z*RI718Ju|9Wq_>JbGt1le)9#eGI4;~DQ^Bec|~Q-Cjo2%(DhtHNovd7{YCC(V_5lo zA+fG1jz_E-MO)5ILJdi%p6B&RvG(B&AM$JZqIxpVz)n(2y4xiY&_gDi0IXZG@RB=a z#-}aoB)tTgVY;<6*UHtyA>2~>j~be>?=dh?n)k`;?TVBRo*sg^IO;oMbmV`v{;j@~ z3)_qd#59C5MX3Xth=;ol4Ls_|tk ?N)SD&+OS(e{Rt%DeI~RKemxF_O?b%_NU4=un~_o0CXl^ zD-aJTtc!>8!E8%!l+3MtC*`egMEy _nv#ONNSP-UqTKK5JHj`~R-(DrSFpVahq*kEJ5i$HO& zD{urE-dS{F(wH*Af*UdSYKeo4 De>A+9uU0r7ww0X`*>+Vv{Zty8^T zxz1vHo>cwlF3rQUaaY$7ahAJJ)2lwT#d!Rl*E5^8a*bM_jMOvpMLFo>SkZ< zD`k83Wpnw4N-4LogM6Pq8e++7e^9l&V5-R;YB^hNBI8p8z5WEscM!e8xBo^5w7_T^ zT@~R2Et|$`VRjZpp%%&VyR3HSAGgcZ2)tqno$%tfq2#wnb@?M+Sn`HivhouqF%KIk zWATab^4YWeF6_X|4mrL!tC@!--=reP?-Q`ZF7EmU7gh)dWmwxN>8~uE#i8|>0sW1< z93KtQ@cqXNyTq&$`zhU#g#@ri)sNCWAKZ0)q &QgeFDnfp4z><`+`aKP1Nv0EY^z6;zC_@>omjA=m>`$_Dm%(u z0O=S`!V>hoe$n5ge%{2+lBLJoG!NVifbz+V>i6SKG=zdVoTM6^#jJ61B0F~O+qCi{ zQmZ#LSu^j{FpDFYyRApnvrSSAwV0h`-GxbotIpGE-L#*zo`jFG<>UN48PGBq>D~v0 zf5d?n8@oo)EE5G )+Q%#kNCXV_IHzUJnt8}nqPMo zXX@Q8udoLP<$%fE`xUOA6|ii{ed*C(W*3UDmBTwUTavMMtKGi|ZZczy;;pLAt4fMq z6bzE}N@|#9=H1b`kM+u#Q~eGSaO5x782z5aSHm6+GItFB>kGK#cBDMxq=VX%tv(1N z)V%wD^*R_lkwgM4mY6!%L3*Q3SmyJ{n8$6eQ^B*CO3y}~V?x{o;eUiZj!JLn1{jGW z9DZ41DGTgN7G(zQ)e1rUob1J}V^)Z)TO2O`Y8{`bR1R&vn7E&kcvSH>KV+j_<-}Nb zV^lM0>fKjq|I}712&D6%J;a;WyTPp5TO|X4!4!pX**s-gZz60hN{JXQMdc_WeCI*p zXMrnu&>q+2EEesmSl#ZmKh(q}zBi`wj!IvRcxs6u)jOyTH)< eB;YXqy?}x zPn-{i1PKs;=S?nFg^Y0vQt6fb#y$4+=r=^B7t-ql7OAmY 5nN_I)oMA#CS}aF+3>o`T&_mGl-Kk{7$v<&OBDC_e#zZ*SY$X{ z>|Od(gkU^LJB1pZ<1Em=!eUtJ{h6D=9C+(hsu3#PA6Z?o8r6v6 (;#qz$gSU8~k(px*)cLn9OI)JK{ej18V$vY5pF_;%-~V=e}@m5Thk}?>tt=HNn|= zllD?A^ $@-WcsXLjj}M;Zld(d(k<= z^t)0V&*t?aj>F8xC{qH`OfsC7gs!u_CM8;^FlKq`H0EH~vJ9)&c_FxQ%TLc*gq$@c zldc^Mf_U# sfbIcYI0HYj63lMKks$iPtSJbAqwG3ZjFK)9Z2c(5b%GR)?~ids ze}X*XXuc7z9bUaIb{f=9(5>EXXd!A{oUoJ=Sjx(()!l!wk!M0B{`uq<6D$3&_1y_i z(P7)_P+A9P8^U<;Wt9uuEX^h5n0it&Jt?A^^+XK>9!`|k&H1123V#KewYpbX2=;SZ zjU?Z)SB4jpe9DQ#uup2;bF PX`ws)E70z+6W0-j?q?Hu zTGM`MR1puW( ?it7%m;`OXqK6~bvD+Cl<}2z>!AO8GXMX0 gx;R9(%=G-yIri(`POA~-4>qo;DQm;Z6%kMV7tr$;$N&HU literal 0 HcmV?d00001 From 41677a630598b45da451b7aaa7fbcb8e68b7c782 Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Sat, 2 Oct 2021 14:37:15 +0200 Subject: [PATCH 03/13] Add files via upload --- content/utilities/PlanetOverview/index.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/utilities/PlanetOverview/index.md diff --git a/content/utilities/PlanetOverview/index.md b/content/utilities/PlanetOverview/index.md new file mode 100644 index 00000000..35b2c116 --- /dev/null +++ b/content/utilities/PlanetOverview/index.md @@ -0,0 +1,6 @@ +--- +title: Planets Overview +date: 2021-10-2T16:35:06-02:00 +subtitle: Planets Overview on your map. +version: 0.6.0 +--- From d000d8b2c7199d6842da7ebb1f9e0e70fef4661c Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Sun, 3 Oct 2021 22:47:37 +0200 Subject: [PATCH 04/13] Update plugin.js Reformating form of code. --- content/utilities/PlanetOverview/plugin.js | 282 +++++++++++---------- 1 file changed, 150 insertions(+), 132 deletions(-) diff --git a/content/utilities/PlanetOverview/plugin.js b/content/utilities/PlanetOverview/plugin.js index 6e97a1bd..d2b41678 100644 --- a/content/utilities/PlanetOverview/plugin.js +++ b/content/utilities/PlanetOverview/plugin.js @@ -3,16 +3,14 @@ // remixed from Palnet score plugin -> THX to Phated // Import game utils -import { - getSilver, -} from 'https://plugins.zkga.me/utils/utils.js'; +import { getSilver } from "https://plugins.zkga.me/utils/utils.js"; // Import Skypack constants types import { - PlanetType, - PlanetTypeNames, - PlanetLevel, - PlanetLevelNames, + PlanetType, + PlanetTypeNames, + PlanetLevel, + PlanetLevelNames, } from "https://cdn.skypack.dev/@darkforest_eth/types"; // Constanst definitÃon @@ -36,41 +34,39 @@ class Overview { // Slider Default value this.topX = 10; // checkbox MyPlanets - this.table = document.createElement('table'); - this.table.style.width = '100%'; - this.table.style.borderCollapse = 'separate'; - this.table.style.borderSpacing = '10px 0'; + this.table = document.createElement("table"); + this.table.style.width = "100%"; + this.table.style.borderCollapse = "separate"; + this.table.style.borderSpacing = "10px 0"; // default static text header of table - this.thead = document.createElement('thead'); + this.thead = document.createElement("thead"); this.thead.innerHTML = ` Name Level Silver SilverTime Energy EnergyTime `; this.table.appendChild(this.thead); // default dynamic table body - this.tbody = document.createElement('tbody'); + this.tbody = document.createElement("tbody"); this.table.appendChild(this.tbody); } - // Function to renderPlanets with sorting from home planet of preselected planet - renderPlanets(minLevel,planetType,middle,MyPlanets) { - + // Function to renderPlanets with sorting from home planet of preselected planet + renderPlanets(minLevel, planetType, middle, MyPlanets) { // clean table body this.tbody.innerHTML = null; const selectedPlanetCoords = ui.selectedPlanet?.location?.coords; const knownPlanets = []; for (const planet of df.getAllPlanets()) { if (planet.planetType != this.planetType) continue; - if (planet.planetLevel < this.minLevel ) continue; + if (planet.planetLevel < this.minLevel) continue; if (!planet?.location?.coords) continue; if (myPlanets.checked && planet.owner != df.account) continue; if (!selectedPlanetCoords) { - middle = df.getHomeCoords(); - } - else { - middle = selectedPlanetCoords; + middle = df.getHomeCoords(); + } else { + middle = selectedPlanetCoords; } knownPlanets.push({ locationId: planet.locationId, - distance: Math.floor(df.getDistCoords(planet.location.coords, middle )) + distance: Math.floor(df.getDistCoords(planet.location.coords, middle)), }); } @@ -83,21 +79,43 @@ class Overview { console.log(`Where is planet: ${p.locationId}`); continue; } - const row = document.createElement('tr'); + const row = document.createElement("tr"); row.style.color = getOwnerColor(planet); row.onclick = () => { ui.centerLocationId(planet.locationId); - } + }; // Create a Row per one planet - const silverPercent = Math.round(100/(planet.silverCap/Math.round(getSilver(planet)))); - const fullSilverDate = new Date(df.getSilverCurveAtPercent(planet,99) * 1000).toString() ; - const fullSilverTime = [fullSilverDate.substr(4,6),fullSilverDate.substr(16,8)]; - - const energyPercent = Math.round(100/(planet.energyCap/Math.round(planet.energy))); - const fullEnergyDate = new Date(df.getEnergyCurveAtPercent(planet,99) * 1000).toString(); - const fullEnergyTime = [fullEnergyDate.substr(4,6),fullEnergyDate.substr(16,8)]; - - row.innerHTML = `${idx + 1}. ${getPlanetName(planet)} ${planet.planetLevel} ${getSilver(planet)}/${planet.silverCap}=${silverPercent}% ${fullSilverTime} ${Math.round(planet.energy)}/${planet.energyCap}=${energyPercent}% ${fullEnergyTime} ` + const silverPercent = Math.round( + 100 / (planet.silverCap / Math.round(getSilver(planet))) + ); + const fullSilverDate = new Date( + df.getSilverCurveAtPercent(planet, 99) * 1000 + ).toString(); + const fullSilverTime = [ + fullSilverDate.substr(4, 6), + fullSilverDate.substr(16, 8), + ]; + + const energyPercent = Math.round( + 100 / (planet.energyCap / Math.round(planet.energy)) + ); + const fullEnergyDate = new Date( + df.getEnergyCurveAtPercent(planet, 99) * 1000 + ).toString(); + const fullEnergyTime = [ + fullEnergyDate.substr(4, 6), + fullEnergyDate.substr(16, 8), + ]; + + row.innerHTML = `${idx + 1}. ${getPlanetName( + planet + )} ${ + planet.planetLevel + } ${getSilver(planet)}/${ + planet.silverCap + }=${silverPercent}% ${fullSilverTime} ${Math.round( + planet.energy + )}/${planet.energyCap}=${energyPercent}% ${fullEnergyTime} `; this.tbody.appendChild(row); } } @@ -105,96 +123,95 @@ class Overview { // async ? render(container) { // Setup size for main plugin window - container.style.width = '800px'; - - // Select from list PLanetType , with text loaded from client - const planetType = document.createElement('select'); - planetType.style.background = 'rgb(8,8,8)'; - planetType.style.width = '22%'; - planetType.style.marginTop = '10px'; - planetType.style.marginBottom = '10px'; + container.style.width = "800px"; + + // Select from list PLanetType , with text loaded from client + const planetType = document.createElement("select"); + planetType.style.background = "rgb(8,8,8)"; + planetType.style.width = "22%"; + planetType.style.marginTop = "10px"; + planetType.style.marginBottom = "10px"; planetType.style.marginRight = "10px"; Object.entries(PlanetType).forEach(([name, key]) => { - let opt = document.createElement('option'); - opt.value = `${key}`; - opt.innerText = `${PlanetTypeNames[key]}`; - planetType.appendChild(opt); + let opt = document.createElement("option"); + opt.value = `${key}`; + opt.innerText = `${PlanetTypeNames[key]}`; + planetType.appendChild(opt); }); - planetType.value = `${this.planetType}`; - planetType.onchange = (evt) => { - try { - this.planetType = parseInt(evt.target.value, 10); - } catch (e) { - console.error('could not parse planet level', e); - } - try { - dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; - this.renderPlanets(); - } catch (err) { - console.error('could not parse planet planet type', err); - } - } - - // Select from list planeLevel , with text loaded from client - const minPlanetLevel = document.createElement('select'); - minPlanetLevel.style.background = 'rgb(8,8,8)'; - minPlanetLevel.style.width = '15%'; - minPlanetLevel.style.marginTop = '10px'; - minPlanetLevel.style.marginBottom = '10px'; - minPlanetLevel.style.marginRight = "10px"; - Object.entries(PlanetLevel).forEach(([name, lvl]) => { - let opt = document.createElement('option'); + planetType.value = `${this.planetType}`; + planetType.onchange = (evt) => { + try { + this.planetType = parseInt(evt.target.value, 10); + } catch (e) { + console.error("could not parse planet level", e); + } + try { + dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; + this.renderPlanets(); + } catch (err) { + console.error("could not parse planet planet type", err); + } + }; + + // Select from list planeLevel , with text loaded from client + const minPlanetLevel = document.createElement("select"); + minPlanetLevel.style.background = "rgb(8,8,8)"; + minPlanetLevel.style.width = "15%"; + minPlanetLevel.style.marginTop = "10px"; + minPlanetLevel.style.marginBottom = "10px"; + minPlanetLevel.style.marginRight = "10px"; + Object.entries(PlanetLevel).forEach(([name, lvl]) => { + let opt = document.createElement("option"); opt.value = `${lvl}`; opt.innerText = `${PlanetLevelNames[lvl]}`; minPlanetLevel.appendChild(opt); - }); - minPlanetLevel.value = `${this.minLevel}`; - minPlanetLevel.onchange = (evt) => { + }); + minPlanetLevel.value = `${this.minLevel}`; + minPlanetLevel.onchange = (evt) => { try { - this.minLevel = parseInt(evt.target.value, 10); + this.minLevel = parseInt(evt.target.value, 10); } catch (e) { - console.error('could not parse planet level', e); + console.error("could not parse planet level", e); } try { dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; this.renderPlanets(); } catch (err) { - console.error('Unable to parse number', err); + console.error("Unable to parse number", err); } - } - - // Button "Update" for label info status of the transactions - const updateButton = document.createElement('button'); - updateButton.innerText = 'Update'; - updateButton.style.marginRight = "10px"; - updateButton.addEventListener('click', () => { - try { - dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; - this.renderPlanets(); - } catch (err) { - console.error('Unable to update', err); - } - }); + }; + // Button "Update" for label info status of the transactions + const updateButton = document.createElement("button"); + updateButton.innerText = "Update"; + updateButton.style.marginRight = "10px"; + updateButton.addEventListener("click", () => { + try { + dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; + this.renderPlanets(); + } catch (err) { + console.error("Unable to update", err); + } + }); - // Button "Un.Trans" - const unconfirmedButton = document.createElement('button'); - unconfirmedButton.innerText = 'Un.Trans'; - unconfirmedButton.style.marginRight = "10px"; - unconfirmedButton.addEventListener('click', () => { - updateTxStatus(); - unconfirmed(); - updateTx(); - this.renderPlanets(); - }); + // Button "Un.Trans" + const unconfirmedButton = document.createElement("button"); + unconfirmedButton.innerText = "Un.Trans"; + unconfirmedButton.style.marginRight = "10px"; + unconfirmedButton.addEventListener("click", () => { + updateTxStatus(); + unconfirmed(); + updateTx(); + this.renderPlanets(); + }); // Slider for count of total list lines - const topSlider = document.createElement('input'); - topSlider.style.marginTop = '13px'; - topSlider.style.width = '37%'; - topSlider.type = 'range'; + const topSlider = document.createElement("input"); + topSlider.style.marginTop = "13px"; + topSlider.style.width = "37%"; + topSlider.type = "range"; topSlider.value = `${this.topX}`; - topSlider.min = 1 + topSlider.min = 1; topSlider.max = 100; topSlider.onchange = (evt) => { try { @@ -202,24 +219,24 @@ class Overview { dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; this.renderPlanets(); } catch (err) { - console.error('Unable to parse number', err); + console.error("Unable to parse number", err); } - } + }; // label for dynamic information - const dynamicLabel = document.createElement('label'); - dynamicLabel.style.width = '50%'; - dynamicLabel.style.padding = '5px 0'; + const dynamicLabel = document.createElement("label"); + dynamicLabel.style.width = "50%"; + dynamicLabel.style.padding = "5px 0"; dynamicLabel.style.marginRight = "170px"; dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; // label for my planets - const myPLanetsLabel = document.createElement('label'); + const myPLanetsLabel = document.createElement("label"); myPLanetsLabel.innerText = `only my planets?`; myPLanetsLabel.style.marginRight = "20px"; // Checkbox for my planets ? - let MyPlanets = document.createElement('input'); + let MyPlanets = document.createElement("input"); MyPlanets.type = "Checkbox"; MyPlanets.checked = true; MyPlanets.id = "myPlanets"; @@ -228,32 +245,34 @@ class Overview { try { dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; this.renderPlanets(); + } catch (err) { + console.error("Unable to change checkbox", err); } - catch (err) { - console.error('Unable to change checkbox', err); - } - } - + }; // This is the fuction for button upgrade that show current unconfirmed tx - function updateTx(){ - dynamicLabel.innerText = 'Moves : ' + df.getUnconfirmedMoves().length + ' Upgrades : ' + df.getUnconfirmedUpgrades().length + ' Wormhole : ' + df.getUnconfirmedWormholeActivations().length; + function updateTx() { + dynamicLabel.innerText = + "Moves : " + + df.getUnconfirmedMoves().length + + " Upgrades : " + + df.getUnconfirmedUpgrades().length + + " Wormhole : " + + df.getUnconfirmedWormholeActivations().length; } // This is the fuction that updates the transactions - change client response - function updateTxStatus(){ - df.contractsAPI.contractCaller.queue.invocationIntervalMs=100; + function updateTxStatus() { + df.contractsAPI.contractCaller.queue.invocationIntervalMs = 100; } // This is the function that shows the transactions in the console - function unconfirmed(){ - console.log('Moves : ' , df.getUnconfirmedMoves()) - console.log('Upgrades : ' , df.getUnconfirmedUpgrades()) - console.log('Wormhole : ' , df.getUnconfirmedWormholeActivations().length) + function unconfirmed() { + console.log("Moves : ", df.getUnconfirmedMoves()); + console.log("Upgrades : ", df.getUnconfirmedUpgrades()); + console.log("Wormhole : ", df.getUnconfirmedWormholeActivations().length); } - - // Grafic append container.appendChild(planetType); container.appendChild(minPlanetLevel); @@ -270,14 +289,13 @@ class Overview { // Refresh for rendered container (table function renderPlanets) this.loopId = setInterval(this.renderPlanets.bind(this), REFRESH_INTERVAL); - } - destroy() { - if (this.loopId) { - clearInterval(this.loopId)} - } - + destroy() { + if (this.loopId) { + clearInterval(this.loopId); + } + } } export default Overview; From 8a95767b316ef2a525d83ec39e2379209294c0d1 Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Mon, 4 Oct 2021 11:52:55 +0200 Subject: [PATCH 05/13] Update plugin.js Updated according feedback! --- content/utilities/PlanetOverview/plugin.js | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/content/utilities/PlanetOverview/plugin.js b/content/utilities/PlanetOverview/plugin.js index d2b41678..571fe9a4 100644 --- a/content/utilities/PlanetOverview/plugin.js +++ b/content/utilities/PlanetOverview/plugin.js @@ -91,25 +91,33 @@ class Overview { const fullSilverDate = new Date( df.getSilverCurveAtPercent(planet, 99) * 1000 ).toString(); - const fullSilverTime = [ - fullSilverDate.substr(4, 6), - fullSilverDate.substr(16, 8), - ]; + + let fullSilverTime = ""; + if (fullSilverDate != "Invalid Date") + fullSilverTime = [ + fullSilverDate.substr(4, 6), + fullSilverDate.substr(16, 8), + ]; const energyPercent = Math.round( 100 / (planet.energyCap / Math.round(planet.energy)) ); + const fullEnergyDate = new Date( df.getEnergyCurveAtPercent(planet, 99) * 1000 ).toString(); - const fullEnergyTime = [ - fullEnergyDate.substr(4, 6), - fullEnergyDate.substr(16, 8), - ]; - row.innerHTML = `${idx + 1}. ${getPlanetName( - planet - )} ${ + let fullEnergyTime = ""; + if (fullEnergyDate != "Invalid Date") + fullEnergyTime = [ + fullEnergyDate.substr(4, 6), + fullEnergyDate.substr(16, 8), + ]; + + let planetName = getPlanetName(planet).substr(0, 10); + row.innerHTML = ` ${ + idx + 1 + }. ${planetName} ${ planet.planetLevel } ${getSilver(planet)}/${ planet.silverCap @@ -199,7 +207,6 @@ class Overview { unconfirmedButton.innerText = "Un.Trans"; unconfirmedButton.style.marginRight = "10px"; unconfirmedButton.addEventListener("click", () => { - updateTxStatus(); unconfirmed(); updateTx(); this.renderPlanets(); @@ -208,7 +215,7 @@ class Overview { // Slider for count of total list lines const topSlider = document.createElement("input"); topSlider.style.marginTop = "13px"; - topSlider.style.width = "37%"; + topSlider.style.width = "40%"; topSlider.type = "range"; topSlider.value = `${this.topX}`; topSlider.min = 1; @@ -261,11 +268,6 @@ class Overview { df.getUnconfirmedWormholeActivations().length; } - // This is the fuction that updates the transactions - change client response - function updateTxStatus() { - df.contractsAPI.contractCaller.queue.invocationIntervalMs = 100; - } - // This is the function that shows the transactions in the console function unconfirmed() { console.log("Moves : ", df.getUnconfirmedMoves()); From a84da2bb849714ee3c55393e7a00d1ed1bf66f9f Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Mon, 4 Oct 2021 20:46:07 +0200 Subject: [PATCH 06/13] Update content/utilities/PlanetOverview/index.md ehmmm old copy from local storage.... Co-authored-by: Jacob Rosenthal --- content/utilities/PlanetOverview/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/utilities/PlanetOverview/index.md b/content/utilities/PlanetOverview/index.md index 35b2c116..d603b722 100644 --- a/content/utilities/PlanetOverview/index.md +++ b/content/utilities/PlanetOverview/index.md @@ -2,5 +2,6 @@ title: Planets Overview date: 2021-10-2T16:35:06-02:00 subtitle: Planets Overview on your map. -version: 0.6.0 +version: 0.6.4 + --- From 5e2be0ce12afbfb414fda29abed55818deecc175 Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Mon, 4 Oct 2021 23:55:39 +0200 Subject: [PATCH 07/13] Update plugin.js Update of description done. Please review grama... Next will the format conversion 000 000 000 = K/M/G. --- content/utilities/PlanetOverview/plugin.js | 39 ++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/content/utilities/PlanetOverview/plugin.js b/content/utilities/PlanetOverview/plugin.js index 571fe9a4..e53207f9 100644 --- a/content/utilities/PlanetOverview/plugin.js +++ b/content/utilities/PlanetOverview/plugin.js @@ -1,6 +1,24 @@ // Overview of Planets by STX -// Start sort from homeplanet if is not pre-selected planet -// remixed from Palnet score plugin -> THX to Phated +// How to use: +// 1. Select your preffered planet type, level and set count of top lines. = Will be refreshed according preselected level is equal or higher. (scroll able) +// 2. Default sorting according distance from homeplanet if is not pre-selected any object on map. Or if is selected some object on map it sorting distance from here. +// 3. By clic on line of table will centered map on it. +// 4. Checkbox is to show only your or all planets on your map. (spy mode) +// === feel free to see overview of silver & energy budget status and estimated time to have full stock of it. +// +// Optional function: +// Is implemented default refresh 30 seconds if you need immediately refresh push button 'Update' +// If you are interested about current status of your unconfirmed transaction push button 'Un.Trans'. At console reveal detailed information. +// +// remixed from Planet score plugin R3 -> THX to @Phated , +// was used for base frame and advanced html table coding. Whole complex coding inside from original. +// removed all connected with score +// remixed sorting of distance +// added auto-refresh +// added checkbox owner/all +// added timestamp of filled stocks silver/energy +// +// THX to @Modukon + @jacobrosenthal for main audit and recommended optimalization. // Import game utils import { getSilver } from "https://plugins.zkga.me/utils/utils.js"; @@ -274,6 +292,23 @@ class Overview { console.log("Upgrades : ", df.getUnconfirmedUpgrades()); console.log("Wormhole : ", df.getUnconfirmedWormholeActivations().length); } + // Formating of big numbers silver + energy + + function roundToDecimal(num, decimalCount = 1) { + if (decimalCount < 1) return Math.round(num); + let p = Math.pow(10, decimalCount); + num = num * p; + num = Math.round(num) / p; + return num; + } + + function formatNumberForDisplay(num, decimalCount = 1) { + if (num < 1e3) return roundToDecimal(num, decimalCount); + if (num < 1e6) return roundToDecimal(num / 1e3, decimalCount) + "k"; + if (num < 1e9) return roundToDecimal(num / 1e6, decimalCount) + "m"; + if (num < 1e12) return roundToDecimal(num / 1e9, decimalCount) + "b"; + return roundToDecimal(num / 1e12, decimalCount) + "t"; + } // Grafic append container.appendChild(planetType); From 0cd8cd648ba00fac970acb66e385af12dbdcdf52 Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Tue, 5 Oct 2021 00:24:13 +0200 Subject: [PATCH 08/13] Update content/utilities/PlanetOverview/plugin.js Co-authored-by: Jacob Rosenthal --- content/utilities/PlanetOverview/plugin.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/utilities/PlanetOverview/plugin.js b/content/utilities/PlanetOverview/plugin.js index e53207f9..cd187698 100644 --- a/content/utilities/PlanetOverview/plugin.js +++ b/content/utilities/PlanetOverview/plugin.js @@ -1,4 +1,6 @@ // Overview of Planets by STX +// Manage your empire. Sort your planets by level or name, quick view when they will reach max energy and silver. +// // How to use: // 1. Select your preffered planet type, level and set count of top lines. = Will be refreshed according preselected level is equal or higher. (scroll able) // 2. Default sorting according distance from homeplanet if is not pre-selected any object on map. Or if is selected some object on map it sorting distance from here. From 47aaa5332307489810a815cc9f8c88180eb4c026 Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Tue, 5 Oct 2021 02:04:21 +0200 Subject: [PATCH 09/13] Update plugin.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updated coments , nbrs formating k/m/b , final edit... I hope 👯 --- content/utilities/PlanetOverview/plugin.js | 63 ++++++++++++---------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/content/utilities/PlanetOverview/plugin.js b/content/utilities/PlanetOverview/plugin.js index cd187698..8bd666ad 100644 --- a/content/utilities/PlanetOverview/plugin.js +++ b/content/utilities/PlanetOverview/plugin.js @@ -19,6 +19,7 @@ // added auto-refresh // added checkbox owner/all // added timestamp of filled stocks silver/energy +// added button for unconfirmed Txs // // THX to @Modukon + @jacobrosenthal for main audit and recommended optimalization. @@ -139,13 +140,35 @@ class Overview { idx + 1 }. ${planetName} ${ planet.planetLevel - } ${getSilver(planet)}/${ + } ${formatNumberForDisplay( + getSilver(planet) + )} / ${formatNumberForDisplay( planet.silverCap - }=${silverPercent}% ${fullSilverTime} ${Math.round( - planet.energy - )}/${planet.energyCap}=${energyPercent}% ${fullEnergyTime} `; + )}=${silverPercent}%${fullSilverTime} ${formatNumberForDisplay( + Math.round(planet.energy) + )} / ${formatNumberForDisplay( + planet.energyCap + )}=${energyPercent}% ${fullEnergyTime} `; this.tbody.appendChild(row); } + + // Formating for big numbers k/m/b + + function roundToDecimal(num, decimalCount = 1) { + if (decimalCount < 1) return Math.round(num); + let p = Math.pow(10, decimalCount); + num = num * p; + num = Math.round(num) / p; + return num; + } + + function formatNumberForDisplay(num, decimalCount = 1) { + if (num < 1e3) return roundToDecimal(num, decimalCount); + if (num < 1e6) return roundToDecimal(num / 1e3, decimalCount) + "k"; + if (num < 1e9) return roundToDecimal(num / 1e6, decimalCount) + "m"; + if (num < 1e12) return roundToDecimal(num / 1e9, decimalCount) + "b"; + return roundToDecimal(num / 1e12, decimalCount) + "t"; + } } // Render function // async ? @@ -209,7 +232,7 @@ class Overview { } }; - // Button "Update" for label info status of the transactions + // Button "Update" for table const updateButton = document.createElement("button"); updateButton.innerText = "Update"; updateButton.style.marginRight = "10px"; @@ -222,13 +245,13 @@ class Overview { } }); - // Button "Un.Trans" + // Button "Un.Trans" for label info status of the transactions const unconfirmedButton = document.createElement("button"); unconfirmedButton.innerText = "Un.Trans"; unconfirmedButton.style.marginRight = "10px"; unconfirmedButton.addEventListener("click", () => { - unconfirmed(); - updateTx(); + unconfirmedLabel(); + unconfirmedConsole(); this.renderPlanets(); }); @@ -254,6 +277,7 @@ class Overview { const dynamicLabel = document.createElement("label"); dynamicLabel.style.width = "50%"; dynamicLabel.style.padding = "5px 0"; + dynamicLabel.style.marginLeft = "20px"; dynamicLabel.style.marginRight = "170px"; dynamicLabel.innerText = `Top ${this.topX} of PlanetType: ${this.planetType} up Lvl: ${this.minLevel}`; @@ -277,8 +301,8 @@ class Overview { } }; - // This is the fuction for button upgrade that show current unconfirmed tx - function updateTx() { + // This is the function that shows the status of transactions in dynamicLabel + function unconfirmedLabel() { dynamicLabel.innerText = "Moves : " + df.getUnconfirmedMoves().length + @@ -289,28 +313,11 @@ class Overview { } // This is the function that shows the transactions in the console - function unconfirmed() { + function unconfirmedConsole() { console.log("Moves : ", df.getUnconfirmedMoves()); console.log("Upgrades : ", df.getUnconfirmedUpgrades()); console.log("Wormhole : ", df.getUnconfirmedWormholeActivations().length); } - // Formating of big numbers silver + energy - - function roundToDecimal(num, decimalCount = 1) { - if (decimalCount < 1) return Math.round(num); - let p = Math.pow(10, decimalCount); - num = num * p; - num = Math.round(num) / p; - return num; - } - - function formatNumberForDisplay(num, decimalCount = 1) { - if (num < 1e3) return roundToDecimal(num, decimalCount); - if (num < 1e6) return roundToDecimal(num / 1e3, decimalCount) + "k"; - if (num < 1e9) return roundToDecimal(num / 1e6, decimalCount) + "m"; - if (num < 1e12) return roundToDecimal(num / 1e9, decimalCount) + "b"; - return roundToDecimal(num / 1e12, decimalCount) + "t"; - } // Grafic append container.appendChild(planetType); From 718b2ef958058cb6be7422164e9b055b2d29d283 Mon Sep 17 00:00:00 2001 From: Stx69 <32230998+Stx69@users.noreply.github.com> Date: Tue, 5 Oct 2021 02:12:29 +0200 Subject: [PATCH 10/13] Delete screenshot.png --- content/utilities/PlanetOverview/screenshot.png | Bin 25486 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 content/utilities/PlanetOverview/screenshot.png diff --git a/content/utilities/PlanetOverview/screenshot.png b/content/utilities/PlanetOverview/screenshot.png deleted file mode 100644 index f17ae663c6f5c938675cbf1aca18aa40e06b783f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25486 zcmbUIWmFtt7bc1ZcY?dSyK8WV;O-u@f#4F{-7O?&2rhxf-5Usy;I1K9u*TsO-#2s5 zUH6_@Yv%ljbVF5ly|wpa`>ojb>IxXBB&cuRyunaXl+}9k1~vfr|2#4*@Hd0X+!F8) zjHi}@^qbl#vP0knyuFl~)SEXA$!L$32*7I;cSS?bH*YWpUjM+1xP7w$-o){eGw{-O zv-9$?^ss%S;9+a)>gnL-Wu}V^9Ab^2BrB!kYj)D*=dPpw`D{u2soh+(ynI}j|9wml zQuw>$cz8vsP^@sU@63tc(@)<;zCV3u z`Ch@YdY0^`$;~~7d&%I>u%DcleBmQ3vFgeDkvCIWYxWG6IL=e!bHJ%#@WIVfVSZ(2 z$Zus$JULC0bOD!Tuao5;3MB7%9TFC*hn;iIq{CQhi<#nP!KJaQsC>gtdbEO&?vyWa zRZMZkd>o(Q%P`EENO~;SZ7GWX=X=kkz +0(6+0sY& 0kG`+@DlPrl_f`%oTL|+$lG~6mq=Surrd}bN{z$t;6SF5CT#4^Lc)}b9PaBKd{tf zzw}N;;_7hDe)_Zcui;p9;_IHPS(WvG8Y2vH5wFQS{{OB3-}!%5K-YXArDa&lgbyb& z-3vHEc=zo7`bbmCquuMU@#B%62LXo((?#sn>1rFUE<<8Dg|LULt8Bb9r(vUPT;Fga zY4lr4j>Fm6+22+ADkO@@ `kIO3` OruD9P4lUwDZ^a(SQ)JcXu-cYA?ibgWSCM34@sZ51fqG8QVk!?}v- z pdf~aD1?0{Nyvh%5g!hHQC`DGvoFp!Pyw0 z&QNba)!JEg658Qm`YX}&&sUk~MVs_73i6K!(hj!j>PZ>!XFP9Fp2>V}|7{&h(02tt z`G2q}iaWiBf}`4De04yUV`=oxv%)hRl-9|tSX4hxf%c;5GRb@2A0YGk9rA$h@KqC^ z@Q2mS*nSG%>_BYGPm)eM@%E9m?x2pk`pTuX9c3lVHu#Q%zkmOZr86q1`@eqXogQeZ z-*vHG%Jl_@Hpfj)tx)7gdAZ$8v7ARtlElm7W!mXtLrF$*!Y6ak(sLuJJb%{?a?3WX zi>(5yW9mB4*t7~sKSS>>4~oS6W&@vI!N#!|_%bl9Zmb-l($D}#^@1Gn0D&`-ubJ@Q zW4HftgkTGg!Q&Kz3x4>Vtpk;)`8E 9weRv;9U} q*$e5|6_H1fSx2%N+wxMP=~cU&XqUWPj_F>8`H^}R~DEG z4}m#O$}!s7+K}E-?5?8VGEjBx=g s}HIaM0P;{{;CDKm2%54_l zcP7y_LS_-`48Mb458xg656or#7hxek4|Y)h`-7d?a rOj !E(bpDIPOqK8O^?^^*)C&F2$%;#1|NHSu2qF9$uRq8bR=9cn z(6}_z|JSGb&zJi@JHhO>ko#tD(aYmOkC>jro5_D9c#&QX_KN*p3YvJjCS|svT&o>E zZU9rPpIe6^{!AcZ$z(V|SL#~R#6!>lWo99CH1MTzzb*t^^p&H%qLmLL-3BS&Q3zyX zEIuN;jA;`2^)%<%J&!{wWiZ?%>3YE7GRp~r&y(9BcU8YbxH&O(eKPHaTjL&Xlu35f z(!y_Awl^_S!dYB*Qr+`4^^BcPvg2xJ3luqrT;|FraW%xY$PGFH2*+hm{fF6qzMHP` zyon_F4>OF3iAl)o&rhH=9OE$Q=AcX{?PzFCF&C%&;^EQt%pPv>E0|24`pu10QJow(Ec?-a*Q8?#~?k?>L z^)z!my%yhdE2WW7Jd-jYVoLcjQAHdbB4g0Q&Dkq`4Me{!5&{*QIVo|kzY)IGu>|PL z^I$6T>gQJ(fF0=%i3asdSWKE7QhnZ2Zs7}tdZPj)N#h|B06jK#>yonqm};@*#;h^6 z2E0Q+N!firm+<@LKKyq`i}}mk-;m47>a&l~^q1=ppeE0+7tBL$x1y_srrpz(b%uhr zA_=j$&ZtlmxAx#-zk>1c@y}gDTqruWISlH*yh;QqcuYo(&&T9qgZXqwXD1_H!5dGf zKIi)Y-7-#^R}Z;r?9B9HUsm=vVbc}j4gFxP&i)tYq)(c?jmno}7l4!~?>scQa`9H9 z_IV@l1Ihl6!|;$7Nj&<<$MfWnPS8%2Jy?m}03>YE>beH7z-)=a+c8T)PcGPiJVNup z^H|2u2Hk bF5&U?Y z$M5tx@IomLgF?*rY`u$+(~R$)k@1zS1?oV|watm+T{|(_ )XZlFf19s;i5iloKK9 zB<(zO-2jND^{#-|D;-d%Hlw#zz3m8j3HFYl5|t+C?+$vXH&|lODwm1IL}!?np4y+x z7q+qBCUqtn<>S8S^t%+oCZdT`D*yRzXzwfzpY_`vB$t<-p8mp>N@A!C(XJrrr@A_& zfOF0Yd0g8yFNp^MJu_vuXiC%lXANbU?)k2YxT?~;oArQc-qli^YB1YqnM$^vo}PLx zkDSM`sog@YDZSKGv0OYI#;t^`5ngk3wKKp*bnZ(4v@@}>(Iw6YABb)c^V*@un@iN0 zg59^89p@C0t1U}HrX^n 8-uVD z5=jM>9~{M8 RkonV7(0J}{cah71*32X?A-u(n@818eGneG}JC)aa zNR3a}(4g?+{L2pvvIefWfV+!5sc^(pZ5^G#&6IDowG1S*Qh#E k5{O!Bpm*FLG#^6Jlw(?V?-*P-o1)@0uG=*=gRZ(s-NKKfWd0}l59@-p=X&K>_| zwav3R(Mw()aT4t~$+%|?ognFI0?QcmF}aElU#n}RP}GNmB5*W?df(bekBXE^+DI7B zV0f-V;|BBj`3$6ioKtF;$fk({b`}7)?8r|f&e`wLdZZz$V?ULMI};jgr6n)KmxE_c zSyoVG#edn|JJiCqY!^QX$tum&lZ$#QwrloH5~IX2P+;X2zv*lZ#}lkyu 9U*#OXY^!DEHN^p(> zB|=hCuKXQw@sxrjho0y1XhHT%6}QMG;9q0igHH1$=Jk#E3#UnSmWgqxDGu8(>vY1t zZb;0o7InEM_mQg- pN%FfZPR!dL&wCC6s05vxQE~LL2w @am_I}Np_9TY uzkmP!TEKZZ*=o}OlX1JQg3kgEM0a!4a2z{3yXgB-^6J*#8wiNk zZbv Lihk6}cwOjfgvk>Q35s=;MkKO&$%7vr<2n8R+B`e0^|m zkYDwa!ie6H+HwdXLpQ`z*%1oQRJ-)_1{1c+d7*X =%mir6W;RSRA$OoQMmX&FKH2>wI$NYxTP9BP? `zREyAgUJQ!+YJN2(8lw&ZozIjg zOcw~x=>+2``E{1Y_LX)M*BG}3AC_e&QA!4H560@72kBBY5fKJuuRR^{Z%7C%b_Rpb zH$rlB_wlvzkT+OP0TETMUdVEIe0+Se(yAgtJ~}p5Sy|a R EQcfl3 zJe^S^iBxcELN`w+(Vh#GI%xMQz-}Pcl;MaNK!2uP0d^Y5ALz*`^j$^Iz6Ycd)$gm+ zrOe9S>VZJ3@K(k4-#E?8E+|F$P?`XB!F7nws+UvWI|7KGHD^2@fLMWuf>u*UN4A+d zSHjG93t@S#O1} SF2WsWnCcnf09lIShTsL3@yF7B_) z{{|bT5B7e18DlNw!v>6s342_;{m2Ng7;ZPGYc`m~JiChx*1Ju=bGR&}vpG!b>jAnG zj&v!Da2^^O!n3Aq33+)2OmWJ<22j~4;T~=)E$pEI%!tdEf2-=!EH(zB+y !XOTWNzBeNn~L0Q1w+VMX7%|};f58B zi;gnQ(Ddn!jIX6a5kLvgeQw F$E=M7Oi}+#fMT605Z=wvRi-rjyZe*Vk%h|WTauSli?$2x z=oVl&g;JXw5XoV_;~+^T5mU;>S1nFDSd2LKTv`46BE^?U#Pr^mh_W=b&oT@Z6}2=K z0CpZVueiVuRFi>QxMfOL@yjjFOa0UmG=hTqM(Xw;_dzneURx|v5C?zGU6~zD*h$+z zAwW)Lj%TwQ3pmZQjcK5Zs81#^nht10Zg{gYBcfP_*{mCyG_L++aSn%vhU4cN y+wgeJW@4If;MopURF!HbE;t94|-ixAeLTZqAkZj@UaD_A( z)IVfNz2jFC)HJ^k&L*LY7GZX7cMjkv=4(S8%}`n{TTcq-i>0u1>$YQcjEp_$6+$YO zx$~NHu-Sc5Ku0t%!O6A!*r?!@sy$e&>VlV*lKl>sHZ@H`2*EMK>)4K}nAZ;Sh5Of- z7R|^)u;HPEhBWL(j6UCQ>E^xZwuqYH?BU4K8f5msd(O|Rz?#WD#>LwLxgoqKUiOIj z*-1147YPrufGF%8*paU3bXX1ElT}My(&v<{O4 O_wMb77I8usp#W&LAb~=%{7Pd) zM3sf9R&3ppvXSL9=5X&|DpouV_JGBkE!nSz3&t(ZvE}j}an(ZFq> V~ERNO$E_*TvA{a!UR19iK_H-0cpxF@Jb4KBj6_^?B~)xn}i3 zYskgp7GHnXif@!9WKuaroC76HN_KQrz2OGTaU2ajT{C|Fev^FU?ZjrH;5ydtuP`&{ z3j~PjQeO>Gju$5Nl7|jgzLOk#BFs0 qd?NYO3Y z2V>$1Ig?s65QOD+=V}u_p(_mT6)W*qj7kt0kQBUvsBm+>l#YFEl6|jA%D*2Qtt0%m z{`PbK_T0Gc ^`= CBA7hVDL&NsK`HXF)d#v{*ze$2d{0L>o<0Akt`QfdXkZKsnhI zv5UWcUtpDhy&eGrn2>PSiAqFf2tk&44PO)5`G+^?yvhDCUkB?GJJfsw!petTG= ?*2!1@x)*Ri61w7;du(^sqe2%FqEYc;0hPVvY z& {1(b=qZowh=$703`k%&99y5NW$&`+y^a?(@6ifqYL#MI9+{Kf zGQ2t;-FJFcSe$z9IfJHONfTHH6hK+-nXXa_w_I%P0YTzqR6@`8d4+0jKQmr *X~WMM9|LgT{rq+KfM{i6LB->yD3&V5~#8Yqrw4DHVhd&LtmQ2-hNypYAf1Y z*vLbnS{opHADl@*zt;YI@ATors3n*wDuPnPD@G!1`ZqIf_YNQkJABUpv4h*SL*>Ad z%A;S(4T;P?qAK!9>)ng3h=H2g@(#UI@|Tr I2EI${)o zK~Ne+GuseCm|EETZ4+~>?@Y=pmNH``e3Xij(Lo>7)G!W~Uk;CesZ%NSq~U+l(V+kB zRP=u(I2~f+R)A;&h;>K9WtUrA@{5Wjofo z*DS2|pM?hymAsb@lWFCX2yfFc9T+@&gKD`R8MlY1G2eNwXs`cuIb{N+JlG z#!*&QwtB>|*K#mwS-`;u @2teUbtx0l!y z&@SqQB12sMZIzJ%WMaPmrV2$>nL_ld4XDkMnY;b3S)yqKWTMb>`JLv0VHRNimT^{T zqPjl(W 11!NYpMSr?Fx1Hq^5 zq9cm6dNu7^L LVuHEf_D`Hw!^tapD&whdaEh+AFcLv v0QHA|;n6ktGK_(wH zmmk+~_YMT&xfl$l1lqMEe9+H>3C{MxICKE;Zd{liOeN8C!>&L+<`6ZZ(BDE>L!2l( zv9^O#G~UE62Lfry-a8{>?c@u(ZFdX0t^ygO_;&eQiQ7;8@IW%C3&AihTftW3t67-| zjXOHR-uYB9Y_4Jx*TZ0HXh^(xK2i&|wY5FA#WtEx+pP} IxK!;;Ma?fcD_Vd+-38e+2c~)&TrXAkE&FH>o&fSM+ z;h-J1i#PkpDdG!^T0KlkP|3vMKc$Wg*Bf5|sM%#dO|c*8ZoVHwW-K;Kpbt7c14fTF z?V+xX4N?-o^hb^1ISYe36^Wkvtw%i;v5bG>l7(g|F|K@+r(wTa=Q-ko(YPnOYW$xF zFRPa5;EqWL9iwmCJQ$ awy2m g1Vh LU~JQVi2OSH5Q9P!Un3tc+HS zPgC1-t-uiPZ~94lDFy`ss4b&r2W-UYZpw-%og9pB;%vV3d~hStDT?CKM0L>{bnevl zK-#NAgZ7i3U0B>D71RMBoh!*@@4xqI!zrhuH*{Di{>r5kc31Trc>3#k!2A(TTJ}{6 zv8CUmp`lgA1u_@xe*urO2U!}t=O;<#u0Q3H_NOBVGrZskZ45+B>KQs}#F4|BF{(t} zkph7X0cxcCVrdYgNwkt}9-KQfAnRhS(hKEsn-5z-7w$@RXp4Ken$yt8<%t|UI$i5f zrG^cBy8oz?728KLRU~=F!f~hi0-$w{uLrV4?#HG& Kw(XjhiV1|B_)&&jCPrJvmpeiJy<{*OEr=@GxZ7s z%@PCi2pAZ3`)TwZX`*C1c{s&^&^oIiisSb*$~JQEXV96Dhkh=HB9$#3pgh&LJ{}6G=JCaH#BXmGb@9>``C-p<@tk$t zP{1;;ECDbX6{&2{meZP{stU>_X(jgXr=9V@C!DZwUut>29g#Ha^5@qciomw!@r=j{ z4KR^zd5y?4j)~k+2d&h$c^QFp6`<4pt2GKx%o!Cy>L{O415h16`~djQY8y=xf5s%{ zgzcz9+Tovg_}N0_=@fhpSdML7hI)GPB;j@Xpd~lU1Ni5Hp>-N}1ENG5W)A+djh+qu z8a~F-Z3$pf0Cda+5CF Ntt`rHU|U9J%^IvCR}w~-66NCcOlBhrAl&ir zYF(fm#B;ok^?;jG1Qw3Du{_JD-Eh=rpsiCP>3)|>8c+x*kf~)a-PE^QU=hKzD)gp- zfsq2h-b3(fR%K;nZ0sKfu58h@kMSH90VV5*&IOX~ 8lfg0Z-d&SU_5ytmc)R5A2MYY2^J@Q&Tn}#3qdjJ% S?aT(VVenrwb39@2`oq6l zB*F#ljpOf!ZApJ34vYc;yq5D#sEPqbEpv*8?Ok)<`&&Fhw6XE=egT6fuiPF0N4HFi zwi{WN_OwZDiT(n^$cgM3-*|dR{pfp@twHCvnIH41@da?$H9^F4Km>A^CgMaIo|1^2 ze)ZZZd3?;kyr4e IYXJ-ae<}UB8I-L{ey4MqO3yVJ}HJr|er;J%?_uO=yfN zjl{}x;7|+)u=}F)J21KDPDmcooJD}OB+I?KVK0w`Dh}i*=zS@ad7$5q^nV!jw_9&Y zzsjesj8NY)Az(Ms(b1uk82wzAHhP95n=f@7@onRnqW1?@RL0lzJPaO_{TC51{5Jb_ ze1j$4sZL3N|Jbcg_3U{2j)C6?l$B`uR2qCkX^6=M< z1LM|F;=~;dYWV^+W?gxcdL7;;i+pva9a)oP4_tNcC&If4@$tDaBdE|3NW_3iII!Ca zK&}nv$b5qTm7@ONmgJKPAi=~X^V!x@7-prdAN{R}-ma@70?f)p4A+&up5xK2tlj^J zZ8`)1szC|1_-<5JT*~+ruk~ZqJa6OYJFj6kLJZR_+o9>b?YFhrPk0-klH i`*_PalYaYb9_ zU8^=+%}!8K?Ngqqbx@TaV_a>V 8AG|p-T^k$D={kbVCrh>o4V$dprEz1kSW6U?B}(a7V$Vb&q`P*x+X8@Ue!u zT^gCjjUOv(>2^I`!Hab0pTA*^5qY7z-@6Kh&rgOkZu9M$qDm>#9R))ZcsuN q+-h zRIQ5oOrx4c+KukdvzvOhIPbbv7Q~anA^Cf6V{X@3?#>4#_I7jbHfu_7Ik?M9{o-MD zKH6<#R7#R`ug@4kid%Nq3oCmvhQig3CneQ%`4%Ir2ZJJ1n$xiwjaS+kZQD--op6+S zSxZh-W(k_q(-35AIuW@*-3A}lzM1k=MA-TiJ;z<}eF}mTUWA {lA6v0qCdg5{i-p@rOqG{K#b z^5ZAuY~coVrx2!F|LB8a>Du)UnT>D+!f!?Ux$em-oAowVWx?xdEBvkxY8boKL~Tp< ze2$oj_S hjsDOh~^Zv zfePN>BUZM>3a*N3=3z#lQT$TFV;eK9kjf|FT9|R *O?3z!!jSNm*i`pSZgJFI)6$9c`40G&`A;XQxGu@8?(K(|Tnu2J2$}DRp(iV9 z{)hFyRkag5*Y4MrR6qS AftHUBv<| zo=%+^dUx8Y*y=^a4BUgYics(0Rd?~ zKAMQ>m-`?V3Z$d0S=fwE>O<4DS;1_&O1~V7q#yRu_j{oe(X7>>lh&BNhH5bPip|vF z1+uWw$f^<{2k0hjtra%8=gVmU?k-c9WVt~iAB=qRw`Mr==^CEj9slR5(tAg7*Ee4` z{rt#nuB*2w>i>d0WYs{QJEt`2Lj73T+|t(1#szB&B%9WYIj!*Xc7v;JJNWC+G=mT- z@6cBSRid*C=pKHLkAMGI+GoN_!riWv;L-VS(!Z4kN>5}d;7C`hn?{V$F-aFgB$T}r z3#v5^*?e6K9g|{5O~WsY&a6te3^M<0mnpd{R2k#f%RfPojGuXN-C`66ufJB-`FJ~3 zF13!}_n(18?Y*eOjJZ87o1Z;9tDB<{+ H}w+Q|v}$k_ZrZt*nuDktM!W_=0GImcKMWyuEbrchb;7u!7PXa5^8pHgSY zs5nQ(@wDW`g_J;PWIg*CvMt>jTSN981ZFx|;_@v|kNMQ|e*f-@sz00yC-Zeh?8%+P zNSV3Ek&t^b>*<0hGR-pAtj@AyixM|icJJgmQ-FKbBQN5?)Gtm-ohNmg1c$}+Fs9X_ zXAS3I#kuT*s7_$M7!Jpb-2p?i;Z8OglNtVe`les(;s#k {FD<9H zOC|8nbRHAFm9D?AUSChSvh(kNE3;fquN#XlX!@w#5Q6oE>z}Os@yOV~o8+b9Y~PD? zo}1vk;D=)6JZAv->0nIqYu!H3SCJehveDsw0wfrbJ&jtwC3EhIr&zSjDVZ_tP=e=q zYW01|R=(8@fItKSr#Z5)0Vc;;h87~<-ai`_5Te9((??rDeKOl38q7!uVjd+qRAP~} znnUk}QxUC;j{Ot0t$X5$72AoqTI{zt?O&<_S@W|sC?NhCi_kRV5I!yEfLlHYN=g4j z?#syJkuZ!;9BWGF1Esx2Ik6K1TP121VVdyiSxZ(mRsHC`b57a!~fOK7);sF z?KVA+JgYFVHgJ{+zR?A?Ak$`S(?k%)pP4YX{SRddnNW)XD&$i9^7P;BLbMmLRI%|2 z1?UOW3ee~Zj3$3c{Vtl49pe53h-s_ebn*+Y(3|G+huHp6c;F8h%G@BU0|dLrInsHQ z6n8zP4D=2nIa=3M#MI70O~^S$9cLA>x3K7_wEIhswj;4y?;a(0 *jvVh+phs%Y(KgM46(7 kX(}pSq!Qm0fog+_yj%GS>suVrlBRyE^!% zU )F7}#y?m;U&;COmi0*-!i&>m4_WC@Em9L#pak%kk+#UCoa zN|hEtN9d*vG(nVJdcsTfSUV~5jLbNFi94Q56?sD~Ocg~Ic?6_J_lY lB7;xcJ3e+isd^6cuxQ4hST>}j&+)cVvl zbb7(0^@%I^`Lh5c%0yw_b9t9Badk1XTLyB+zda)^4}a*w2zam)SRDV}M4BAQpWu)V zSe!~c;g^gLl9RlM2p9DCE^F3wrC}&lZ$w_mgWxp0ju@*M#=E)h1a@+BD6g1nof@EX z_grEf^?je!I!U`MuDCP}O%~acjMrU)iS$*B@D^IgO2CK#Sr`%(ZVT_80hvp0ep(jU zoS4#bFn`uUxiJbYG{q1}HL$SX37`=-HfWQ}Sn!0M4~rjIXKC8sQNKwL^>e$g^GoG? zmHT#G |sgqK*nXBJL$#+}ZWIxB7v2%pphH7|3 zEeENIw~#;bM~jS&!>Q_1nHZC%w^1kLK=;@C8MpG%&|#wK3lC_^1%w3$UIG%d8RJgv z?B$gV0)XK=N&Of9UHOujj8^+83hiz3=l1IkjnWG4hl}Z-o7!><$f?C@2DtrVtzvCC zsh0At`hlUz?^rkpHu~7pnCHgR7P !NjH$G6QE7qC#GMHUP65>JXQ%bEhG$TT=@xNsm1DMC bm+CUB_wzE z{o6!K-A!WQj3@+k18qw{BztQ rkDCfGofmS z#A@%;AKMbS+2S6!E)}sme`b~Muo>(6qy?r9<^t^H_j-*(2DFp^X#gySFZhw4t-dv% zXq`Va+z_jgsNP>>bhM63S}% xrzLwECWnn=PGH1hx`-%aR#X0X0N7IXL~unk z$zp{9pGQG(oC0g*ch)LzoN=8CJb@?Zh>^GcDZ}{|k0S za#1R?fI%>PuT^6MOV0T29FykOPCL*exGwg1=)@C+d{Nt7 z%+LldX*X$sM 6Ma{(wWVs#Zg>tSin%y+^>))sp1tlMg1rsNkGd@FEMJ&t zr3nkktLo7c6=~jWIvUSnIWKV=)+y)9AmO1PnWyBOXmCuf|1%E$*a 0K@Ke6Vq?iz#QVO*xFaWCM{~ X7k6XyyL8yI>yiZG;W{$`Me4qi5C#6H&^?a7qy8 zkl3?2C$Ci$kEShRMV^uG(TEPtj+adN0?`k-T;D-O$4mbW$cZx{VlLMU&A7L`*MN7R z^2p99{5q_EabJ4jboUO%ctgm}d<~_>Xv=UlnIc^)WVB;E6vOj~kvg~@e5Uig*luNi z0N8hbLKWU)2?ZC>2y*3^J5rBMsm@NKua5Rp|4z#SSqQqJkA2pLquq&55lZznoegba zWFu}t)xe(>SheDI)=0UBTj2~{tFIMChO{ZQl3et4o_U&> x0ubC~ubz>X3XYT6|8GF+UD51;y_7y70zizmJ>vQozzK zZ?Hu!8L^b<7WNyB-f-P+y4z~kj##vuw{ttrXOZ``bQg|3(cY4k!Mut#Dh?{l@jeQ8 z*w*M_E?}J0elU_jLYKjGAOwVObUI&ze =Col#bQn{jOGEQ!A742*b zo(s`Ad}ZQ@3i4UjKNqO3>@CenRJeDV@2C&^yK!FiE2Q+dFmxvfm6oVW>}RGGRCI zBxo~!h$jYX? zkem^1pG45|lz{6OSTgGV!{LbR-nInStHsDMq%kZhyx{D&q4}l-5dw_+JS9d^YG~ z#8c9x_EPApJ~3v#s76{9)edPvo@;rszodG!W5~0 8 T2>|< z#&H}1Eb$1H+D#rqeX#iQdrxCdf8qrGV1pr=E7|-X#-q=BlW&nf96shOUpp>MqMq#p zOIL~G_6wkcI^p&-e?dty?VJN%ZNshOtHm(zaC2i)Cdz9)`S0V6{|ApH{{MTA@)*ED z eQ6Uw%!=|Tuvq++^;GSJpF9xoifGX~`R2>29IrVg zV|G5gOh-be9+a8a^~LLh7SVrg0I|y%ShosSPQMPQBQmp#^aa(va_)z{R(sEYq--l9 zihYHBKsR)6ke&U0u6(+)mkTB-2_|g~1`Ou&cDJ?@s*{F7@TXv} _P8HQQxGs{^>E zObKvK? {`SJ{^Je@} zmU>>&0>~2^ZwSrg24G?@jPEdzJSjH V@UBD C&S zl7St+Adqmv52XKbW$Vxsdp`>j82BG|!GAV}eP 6NaI-TT+me53Oz8_Gc+F zPY?wlkpL23i^1KWe#MHzM?h=)hM-XFDKR_uBkS&BlcA@GsYSjSL?`Gli%Yfs%(Z8= zf~tE$W^7GyB8$n+Xk}}abEYqU_O-=$uZWYlMR`5Vv|~^z!#)s eq+k&z3K7&tDqlAi#_F3?M~!ogcfiXZMPHHN{S*6G@+3KoA65yfqXtT4kLfW zrcAgPj1p7Z2d%h(s3EG!R|9lLR~1Y+UIBpyPLI%kPDwO1n?^A} 84g5+^(G`0&q zEqGLLE$`Q@ySkD!X&6yp=z~y@-4}*St#{@%&TO cNvPJyB-Ru@E#!xtMhcDbpV%yK_zBIZSZ*$N~?w(9t% z6NjJe7gSfACkzAv6UDkQVvI}V;F8JPV@(;Hl35qc;0CCg+s&Zb`)gt#RXteGcFU{v z*ZfC>*MII|+IIE-JFu4=*6usGha=ser(`xhaKicj3F<#$@85wT%;i(JHjm%fIX$?X z6U1E9W-Rasad1s9oh^nFVRBb1r2p>(TEoHO$ )Wbq zFRIWQev5!z*%c6KfonTl0?H}*2 HdUbnpNE zEHBB%f6KQ(PG~o}YA^7)(6ss(O<0biaDvHgLX>7mc0kpaBR4`A-iz+%sNZ~bww+$y z+xEbDYwIJLY-@s**29!F@oaeEx%=tVd^ux}w_28^8TRvZ%gs|?{A80BTO%4g V6DNMKT(ub=1s!m>$0000sba4?+-sR%wQUccdN1_YDb!@j zds*OE5b^^yc5U(k@*Nln#lk2IoMO^9n2FH;R%XD`{l7{(%c!W@zuzmR+;k&Ich^V= zLk=*sl!V04jg)kVppw#!pa>{RgE*9QmtYV>C=8)=H=Jv@@B9Be&spciIqSTgHEUj6 zdtZBh >wYuzL}|mmC4T%_~Nb*!{8{))9wXS z@Q*0lY8DW`HVGQc+_$bPXVlF!E!>nXp$MUht@2(INz)H5M%cHPlfno7PW5HiYVIlQ z<>0u-;)!)W@FwYt5MDn{R}sAx*A3!I!kg=b>{(Wn<33u%U#Z*q>lD0Fn4^!1M-V&5 z(hfhZ>!BPS!?95g|0Meqosg^v4Y>7r_yjH%#-E2Lu{UArkAFq{Q-zLit3QmEe8_j| z@h%KZbA|yu(H<*U(|R-2ZkRdV%4U{)E{Du}`Gt``O5?wNCn %$=zWMC2qo@k+8|tujs9Nrsb=J@&iJ@X2LgTc2>g@dIIj(yW4Grk6H* z?e+^coDI)ojjkYTJa8LBCpP`3T(_)SYmx=3UQCv1b|va0ok1b&ok+pL=WYo$N YS{#ji{j 8cu(@@0 zu~_ib>j1PIm%0^LF^(au*dKL0xDnkAL^Xuut#w9A8NDi{SeG2)q&ug%vMvyIj7Z Kl|F8 zrSLC5;@=$3mLFl+6_9w*@NG5rTW5< >za-)$QZ_CQS|90nJGl?3CbD1_ z{P#je1Qk38^F1`17Kz3=Ku!qMwEEn8J)!eTc@i^{0MXO_)b@Ds(o;mnTGo^4+ekFz z2+@Y?+uYqdxoM4;tj&i-MRTz}cTquGApJjbf7`ZX_ Jb<}S)Y!Qh??=4=wD zsk5!Ha@3OSb|*>8CAN^N?ij_tr zrPWO1=5u_vQWfnuv@Rsl|>DMNBzN z%c)#W(^)5rPuhgw+8w{g>T-^iwUpHy(0*wTje>ujmZ1MFD*P#T`98-K6jE*TY&7-m zhBZY U%x~&S82#Eh|MTg!zREIi z8~gDxqIdBeTV!HC g^{igz};B zFVkV#Zg;9tD=tO(iS^J;W9d~MCV7Ix<$T~LN zbo;Ir!wj2T_>BbQ2=RL$<`RZHqKlDBYIu;iJC1U8MI2j$KkYC^$o@EjZ9ypJGHc>( z?rr-&D6Z?ZPN07qOiMl`ObQr#{9q9ApE9C9dN3Ae@9#FE mwX@4E^DQ?g%@2BC zp%D%7ku6cA&h3Ro**^o1-v(J7-Q8pc^oqni*Wk@QwuX37Un-y(F5j<}0ryrKbkB5Y zuQN|$lh>Wlnp==hV+^Pmcikn10O39!Pif5?tTA70U!fK90U=~SWGvq |PQ>`s{~CE5{l_l<(4gj7(aMi5-oCwT zoF)0VIg_69=DN>8w?Md>9r62w@{@(ypRcbiK|j@{WYpmH2HLHRL~@Cibw0>qsDX?9 z=59v!Xxxq&Sn*b?v0lKndGv->kx-HG^jIATsgF$Bee$>IE(3oW;PP(ty4wuvgdPGv zPMZNEqGdgmDqv(aDb>$=<_n_sMV?Ud8&(w6s&C_bBI%-T_pxuW$o+c9^|C6&hrI2J zNobsmlVACG{M1t=_BPIijjxs>!~6#JS+}*NERKp9zEAN@CU%~fyEgs>K%o2(ywUTg zeV=aWSbC6>=g*geNELMAZk9H3WeK=;G~yFAPK?$GZ8l@H9-y8e%dw9Z$Spt;l8te1 zit6vg`E(*Q6R`Shox~)=yKqnkv?#ldarFzpW98BB=)qC&2dG_WQl3DmfBO|4 8GGk#Kv6N z(J_dmkMBC665IBZ<32X`bRjv8+C2dgKriVLeun_PTVA+s{Zg#K*YT_F80_gzuY0(E zPh^lW;rL=FkRzOwtSO%c16{N;m(#guZ2AXx)? _b$9Mh%9Y%R*z=8Qn!g2$F@$^8+Dr2p8HMVQT(R}n82f%hL+bu?(J@Pauq&h z$%iMrvDNAR$3blIAcyU5N&e;7ofR#SSsZfgu)+@oPD#PH`5k{!Olp!jzfxf3PZ>69 zW6esp1gKy;{|m>Z$4~!l1hOacLIe^AMCfX@;vzp}u5>O7m}5O~LEP<)uIr(aobkEQ zu93WrCmx<98*Ha8`j*1Ba^|j~&k&c+FZ?3pAa#fhM~WboC?gSraSgNYZw44F z `Pzm*ZheaTlfpG$rS`x7lE}rwv~7!t=~+^k!~& z?BYS{AXWuv2F91x !}NQ>n1+;^s8PQ6zc`?V zKOC7Z%4{kUlOjw)!TJY7B9%g98SM3LFP2z?C%CHhCM-w{eO!Bk5Ca=_zgJ!|B1+ zspK@VC-d&)rKW>YWe~ZeEupn*7cOC}dkuc9_&;0EZ;NzojG8v+Nx%Te@O{s%I6w2W z^Z&fxP`kdwz=b`10)mbvYyz=7OqidZ`sF#CTB7G)4yfmXp9tGSE>KhboMm$j7oc?c zk*=aKr`kol&Ieh3&EGKopqliE-acV~#|t~+IF0(r+93PPV5^J3Z9M@ezmM7@*~{K8 zgbR6|Tp?d=X$WeeR(+L*QSNY*M{Lm*2-IaWP`1ztEngSF#&;F?VlX9DjdGNV3$KSY zCEE_flMX2#RqEtUyq&I{%zNq|y^y2-v&JCZ }+MeLCZ0*@dbs#!9i4Wfcjc%%aPJ)f=i@-*$?NIId8}6pLyinj1c7 zOV7gKW=z*Z$5RJ=4@83w*2C6EC6S>ov;39rYID9|)%&uEdBSKAy^SfavWllHxuH4k zR_`{3C?4rHG(#!V+LpSmQDhx@r?^KO0l?1d^35G~BE9KW5XSeeN`?EQL5vp3HQ1ba zaiZG@a?`zm$vM)1KD3A%Ob~DidC5&0FJQsBvC@?t(AEJYwnJ-^Z24I{K2;Yp`Va@n zI?kb`4VdG~*DiMX$s T|ndah})hpQ;p>=-)wH4*}cA zujVWqxnSD{w?={>Dottd+TkJa1z8vvsq580IFM%7;6rz`Wn`c2M>y~Xt^kpPtOeY_ zut4dnz%;?xE5Wqzx!R(fK1-t@R`9X!JJ?~ek_Z5u%$}(9{}wkcIg{Hc+Zjo^Z4&XX zOMvuA-Z^M2B~X*VUReWxxm~gC`Fyq~^X;iiLenoU$-%ZRpB-q72R}l6BSH3A?a^5! zPm9@;@sy~%V}l$Kk;{ZwE}CV;;kRW0j<3&ArZQ)s-H5L7pZpB{a?s8#n2f$yj@9uD z5mW@>{I#myz`eQrU@p lH{6DxXa??tg1Yf{ z5F3 Cgz1(B} _j7+TKpq3k=-!Z!Ls*C9uFK4?Nwm!AJ5iU5 z{xyMF1)19)8H>|J(Goo_8nV_u$S;Q6X#%*P(vB^QT{4fPdxSCNuAt@Hq{>4b{s;{{ z?9o}%zwrI7gB7;^vgTkppW_vN=_PE`P(;QeIbvNzVaH{252B~~;lGpoQaWTJ7%ts( z@@+1+&O+kzzu=2tR={+sPT~?mV=h^kjkT(}F0NCo9tXs-^It9@Eu2j7pD|m%d{ahk z&?R#hMWHlUlOSmeyT2cFIF4Q>GOe~*^W1D@sSKSHRxc*maj=E%{*IfQYT?`*w)dZo zZFr*)YF20En&1Nl2gLrKJQ(xblr%dBaf!9uj^rBvBP|3@KhpmMRq1e0