From 7e71531f8f5fa4d41f47ecc88b38ab06d850567a Mon Sep 17 00:00:00 2001 From: Tyler Perkins Date: Thu, 16 Sep 2021 22:01:40 -0400 Subject: [PATCH] Add font and img --- DEVELOPMENT.md | 50 ++++++++++++++++++++++++++++++++++++++++ Makefile | 2 +- README.md | 7 ++++++ font/.gitkeep | 0 font/elianto-normal.ttf | Bin 0 -> 68588 bytes img/.gitkeep | 0 img/bmp_24.png | Bin 0 -> 1422 bytes 7 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 DEVELOPMENT.md create mode 100644 font/.gitkeep create mode 100644 font/elianto-normal.ttf create mode 100644 img/.gitkeep create mode 100644 img/bmp_24.png diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..4971431 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,50 @@ +Development +=========== + +All the boiler plate needed to show screens has been written. To develop your +own custom screens, however, you will need to know some SDL2. There is no real +drawing api, to allow you to have as much control over the display as possible. + +dashboard uses a few objects for displaying things to the screen however, to +interact with the memory management. + +First off, the default configuration is similar to web development "Carousels". +A series of **panels** are shown to the user by cycling through one by one. + +A **board** is a singleton, and represents the physical display board. +There is only one per instance of the program, and its has several **panels** + +A **panel** is an object representing a slide on screen. This is a page with +weather, a news feed, etc. It is one of the scrolling pages shown to the user. +This is what you will need to write. + +Each **panel** has a `draw()` function that you must implement. This will draw +everything to the screen using SDL2's API. If you want functions for getting +data, several threads, etc, **it is the panel's responsibility to implement +this**. The **board** provides a memory API, however you do not have to use +it. + +The provided memory api stores textures (SDL_Texture), fonts (TTF_Font), and +strings (SDL_Texture). Both static values can be added that will exist for the +lifetime of the program, as well as dynamic versions that will be stored in a +cache (As of writing, only dynamically cached strings are implemented). All +functions related to looking up memory stored in these containers is performed +in O(1) time. + +The SDL_Window and SDL_Renderer are provided as static globals, accessible via +the **board** object. + +Each **panel** is also recommended to add its own config.hpp file for +configuring possible settings. All static files that it needs should be placed +in the main config.hpp file + +Things you need to implement as a panel creator +----------------------------------------------- + +- `void mypanel::draw()` +- `mypanel::mypanel()` +- `mypanel::~mypanel()` +- `size_t mypanel::_time_on_screen` +- `const_resources` + +And be sure to inheret from dashboard::panel ! diff --git a/Makefile b/Makefile index 91d9750..3d31304 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ FLAGS = -pipe CFLAGS = -Wall CFLAGS += -Ofast -CFLAGS += -std=c++20 +CFLAGS += -std=c++17 #CFLAGS += -g #CFLAGS += -pg diff --git a/README.md b/README.md index 8d758a4..cbac9d3 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,13 @@ compile the test.cpp file provided in ./tests . There should be output on the screen as flashing. Feel free to change the desired graphics driver in the raspberry pi config +Developing your own pannels +=========================== + +Refer to the +[development] +(DEVELOPMENT.md) +documentation Usage ===== diff --git a/font/.gitkeep b/font/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/font/elianto-normal.ttf b/font/elianto-normal.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2dbbc962f9f5c30ddbb4aa78a9ec93167b7ce5b9 GIT binary patch literal 68588 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
    P^TDtjt`9+&d|FpF2 zRkh;Tqtk_{(}u3|@I{J{=X%+=H#4%iR2%BOo_oGvab0~-nq}E`-)Pt*du7#G)VMgI zPMyseo$0%PAUwui3!`%!^^6rt2Ag0Q|B)QU$t;n#@TM|Yk`*z*RAZ@QEL*&=wt}`z zza?4cDk)>l)HcSNt2Plzl$F>N>$o|xWO>)2Q&22qOF}cEHEM~7KDow`_?+!;^krcq zx#_$5s!JX`$1qe^Cmz&aVj1k@h;(sHy6m~G~dm=8^U1CRV&%kZ# z@2jK}@cMD}c0&&-sa4t;`_yV^*ek1{Z&$qx`n~p`-wO?T5tF@$$zF!nUWV6R2K`t7sVcI1>ZuvtqBER^kdbv$yvvHFp;Pvf^S@S=DFhREV^%Ub zq1~R0&0kRDi2Ls11@kdJtgvuFsk>S!lrC6^#&7H6IC-xp)!@AEP@)(J#{%V~KNQrq z6sA&J`U8RfEy?LZ_e65rKrlG4Eje+kuNo{w(adXn=fstbZB@G>;&am z1$#X_o#Z+qSQI0Ufx%@Oy0uK#mJgl#PmD+6A~52nYniMS9q-l>Su~KXC9)mnc$Zi9 z;{Xvhwz0^<@1a^*iX#FK8#xobvl;Cl58Vl{*!&OM(ZaeeHlMHmMvt6WlAS^J?iA(* z%k~CoKe+6yHyJdNb=L)GGP3!uqgN`nvT@$KQx?uOm)|AG&|;shbRiB z02AjlPSG=6HI8)@6HRv*I&7n|iWz!`XMnLg07s2XW!|Cflg7I;rwy)HjA_Mz3tZyR zY;PAh{if=ckA(G3f*m>CQ_E%WbhFR)rU+71>Fo91{NVi(rdNR8u0q)Kq<|2W^TUvCRH0#0yn%#okZeq# z|GBPWPiC^8(|+cS}b?Pg%@N!1<~v^NMsPFe1QSJ#u-C$=BQU+tN+%N({jq6$m#ZOO_A0CS}TK-tcr@CmR!3e4V<7Ko1AqV zyEP3NJ%Ht3oCRemU7W$pa|;-cDO6FYs5cs_nZ46ec2Ac0klk_ao^;G+T>9E$Y@2$; zZ|cqG^~|B$C`%_U7nQpIO=n$(sH8T_W#!T;&@$q7P9j8BvcnHmEJw@aFdLaT9N%s{ zag95ES(%{e#(ckhXdRok2M^y#^{_NvyX5$`Q|Xt2faWR3+*H+;m2zzIq2B9qWTYW0 zkFpoR+JVrR&AfT>k@#=whUdn!_y7(8jkVVr9N(6Qa_r;1raWwWn~4ncgHJ#B zG`-bj*Hl3e#V>{|lp~uAtSxf@S~huW51Ic}&ohQsm-g&(@3ZFHr1>x4gSN%$t0^k}3g)b`FcUm&tOP5F-!u+>d40jG6w4V=|T*v>OqnZ=~atlVx3CnN#>tw%H%x zjhg8B2t(QFcznJ{?V&&hiQ`wy?M?TlFZU2b$}n#qIo^T9aD$uG*BoOgdDr^s>Giur zTy^flJ>pp6;RLMCvE-X5lQppW2^-sOp9Ks3)&{g?TxM9O251fLRp3(2Hf1S6EO7Kf z(f7)>Msd`m*`L56TXsFlST3hlNFSE6j?b(738-lt5hW+y%_dCiRr?5v7<3(c_!uLPF8VSj-+mJW_|!S#>}BqYvvIoYl(M4?Lgr!0a%`C#nui(B;1xNU z+rf<6Q+v(g@GfbBF*tpb1IAC0!3QM(_FmJPS2M^`@@ZNI6}8oZNPI+MZFT$XL5`H0!cjy1^X!ZKet zPJLhIcHc4RR#FE{8>2CPK{3(y%V5zq6Pf!-ZGXT5xG?veR+i-CGAu7s39adKyDMA6 zB3)TX9kQggqTw3h$JJJI#dMyz+j*yDaqG&ph>hd!Bkf=)a$N>ix`9 z@27qHF;DJR_tQ=HsXaV(mrbp^pw?Yb>n<4nE}P-+g5mF?sQnl;_o%xJv68^ipu;_9 za(0!TkxkvE13|i^P1aWF9T~)VXSOOX0!v;2;v!J>3_9yWwLm3?I}c*-_rk zDONz&u?O^#Pdm0hsjxnDv4G9cIlO!?<|k|2*41X$wG0!&z?0{O{!9 z^~a$xaUy}C=bG!mLwIFy2E_y#V#P4y#WDJbZ?t?%!U>5D&%@J6l6^FmLxh6I6+Eus zaakglb52E*5{C#`AMbx^K~|C{;O7bWc>;ds1tvdFz|XkP@QmbK4Nr?jr|l@Q%%spQ zT-)6tTJl<%0zmjYxl zxm(Q|8bO_>m~5IV@GyO4n7%ShHvErG6?mAwB4$<6EY~)j7&b5h7Zm>AT*SgLH#x#)JS7J-#m%Y4Ncv&Q+()9olTm$ zp{a3` zWeutmLU)YbopcwsFZ0aJO|KSHepZeW`5EoxC=r*sh{!br>B({P7q*(3zr^`P zXleR^m@8P|m~w)YQ&^g7Szpg-&!nu*e+Wenr{fDdc*ttpoy$=7>BVK<90&IrD|9sN z5Lq~=)@ZW_gnY8{bx0qOyW+gFiH5B3tt68Z>pgrjl$;U~@>zW(>G%jk9IF-OqDnf$Wj81*ba2J8f;yc<`4 zc|i3->H1-mX2e5g9p9)YBiQ5;H!q_|uTZ47W8@l=grQ@RXb7|$78+TIFF~RbBq~87 zIe`?mTTf&wLDmsFx1@FonamN_7XNk`vezC#$zF!u7hZF;`_B(?tIK1*Tc?)}uz}b~ zg{A+9uP18?#Q3-ui+>WMXUV$FAPsptNe>gO{R|26Cm1Udj1>uH?Fl$8f&Wl~33`I* zb^`yQ1pY$_{D%_w4<+y)O5i_~z<&q}vALh&*oEM^^S|k4Dnp9cO5{3Y>Pc(q_iJIq zwRCilCp12p$QFY1`vN)FFLBv2b;x3>wh*;GQr6awIwb=`K5r93;Q1_W5QsE6@agzu z!hYDUs>Th?NZ9oFq{Du8zz-RRXJg|M4^jK0k29H$^QT?MK2KL$U7HAJO0ife6P~Cg zySkDDtxN3sw$M1j$(s5P$7}IoCKSpP8257UB^ z)QhxR_Nk4GjpA^I&oblLMrf0RnmI`&E=od#Yt6d8i0g}R3+{opUu2+7a!r$(1AS|3 z$-f4gtbqg8zyTzh9IyrsSOW*x_U~nOM~kj)$~Q#5G&%%M+cIgXOzqv|Rzmw+t^;yB zBJC88kYy>2N{U;6(;h9Hh$5qBBZ}~!Fh!9QQN&hjwBN88y=kI&M42&R@+bICy=8@4 zNq=5RR$~NN$q2HN5o9GJ$Vv*^&-A0HRvORuSTWNbL!4_@QlHbrxz;*L)NrtsQ-2RX zfmx0ivW_~hxehxFxYzn5i{rB9_vN(FQ!|Uzn@*eL*dh2w&b~2@$iZ$^J9koU-7h}) z!KK59%)^HCTgB_BWE@iZ)YOUfa(?w`)zX5sUL;dKjuAewRF#st^EVjYEB0|ll<<_C zTPkizXjO?YwJ_WYtLKP?jb#06z}Ej|1={i6%b|z>fn|!#w4u z{T*3rUuv5TJHMYG-|E1xjw4v)DvKfJ!lansWqHHH;)FQ$n!m{RdU|bsG5tp^e(8l@ zdf}H|_=RDcO33Nzqc(4j!keS8{wTZ&3!A(-3U7{5VWf_+=p)XRI948OiQm~%6HLvq8+vt9VmI_6(WF;5^y;QKIh!M9eK8?VS@Jz95#)SS z)*y$Rf78}tEaJ7Pxy&EC?FDDa5Q_nf0Y?tjHT=Uwd1*kEhVg$EXi=pBRm5pbs^wJ; zqY6UHlt~yfBTE+Ed9Vi`tVt7tIM5ghO3t^jtJ615G%TYyPIZ zBBRBEbn(BFZq8lvXM7b;##dR#{53R|Z>^qUOYddN?aNm0+FQdcytY4;iJ~Wa#WaTj zSJ)fIUS&tx`^L=eXh*4s^_Dh$mz_~&)wHcYST!XB;x2XWx;hx3l^{a`tDAL@~|p5b&W;c~(aggu1& z2oDh+Cw!LhG~tJYUlA;)?qe5XId%8o)XfQOICaZ`A?@ScmXWaSF(Hm{y37k1JY}xj z>Gmd?foSyB=AIHNEH~!noB7e7$Ml)Q(|*ZiOoGFHuvC4 zCpxc}NS4q?m?NA@*haX5u#<2*!FTQN_~ioarPIlo?(*C~E;le&?w(0rp6cz6M!RMB zGOlpkU-!n6@~h-ZCHk7Jj-QQe));4e2R(<>9+NR{91a*X<=r6ij(rrSrDza&H;B9& zMBWWr@=olDvboA$z3sxni1y&dY5XYO*A2yK1{)%iYl2yo~egVWhl3c#jMFTyE@(e*f z$SXTBEy-Dj>*doW`|&g}-yoW`8S9XNog$F&P9z|UiXsBd&m+_uT3Y|3$rbX&+H+6O z-*d*~%9WSiwqeVL{5=OhUFy=p$-#_#=Jpo?O8MsVgZlN8x1A~9!R_sR*#zHK-y^Z+ zJ;NJI+HS9xkK8t&kuTj2Z!9-o7Zuqf=jT1CU8H>NuFS6#fg17E=4;ETL?xkD#lQB=&3oiiiBB}&_=Nsze8?9L^4<8~H1E=`ryGlX ze7jLL>oErqU2+1D^lT5jC?~$j)n{Ere#x$dh@9B8REK50DsBF-gnRp-A@N2Rmlt`1 z9JL=dOpoH@=%ZZWeJ@w>Qx@lI^RsresH9am?zW(hv!!RcGFypNrnOH<+wM5{4ZYsn zsyVaGA7~Go&6}TZ{(SfL-TZ0M-7-drkM!9_8@=KWZ?upabhcrcCxq3g_Q23~jx}*? zy2G!PN<72oTm`Ye{hoZYTX@2-H{(DjG&892LzkUZ$_tt~yxLu6{zh&e4r$ zX^xxkH}8U%Z5biursPEO06mCZHRKKHV|WC1ucS1ig6YXX({@@N51G+89zbi=+nP2T*LPu2D-D&-)avZ{D#?t-EBF* z$K*|2b(2Hdakv~nP0EZ96<5+V80WS zRQv1oG6pWKJswpW82Z3bdp?8jF}_|ea>V)~;8LrXQK>B(IzL=5L@^|VjPM049I{P@ zI(dm?34Me)g3MTDSDAd7(dYn2og2{sK;z-gbeip%VeJ)ZbVv#brrN=V<_|AGeN)iO0`Q>D%CDksZ=VfO1rHpNo7lxykN^K zUrVUI8Susljqb9)t5|VU=xQP`qbC@)p^duRwK{BU1>ojyS z36L~Hrl)OrzW=`WRAtLX&YTnajHO@i`qo=+-TS|PyZ>Tw_zK;ta7VcVp>;}CRc~vh zc(eJQ-e(tZHdp188qP&BSKgst#k@-*!b%oI86rsz8KPLmL<%6dSEWysc;17B`&Im| zBw5gqmCWmX45ihg-);!K^0lidnnLY`5{AXw-CZb))a1y%nJOANC-z+^e{xz|+ zm`{ur@13QIrjN`v>p4m7c8Rrj!!v{`26?}HP(zWFV%9NXOH8xlu%znB6k5KQ6^Wx# z$3ya%Nm59;yBHlPy9YfKpJyo&EOJxjTf|SLjt8wT^ph(3SoumP(?|!>wx)mE`d+o# zT9eufW}IOjE8~9)HK8&(B{eOvMsz)LlRdY`?z3elr{E^ClevaXNd3cllhjQVgb>QP zh!*>nv;@;I0m=T#dK%l62?&bgr6Fz&9l#O*mMfan{528>xrepQ?WG}Q&N_f4fDpAh zR#e43%UeDhA2eqrD>1p#Tq?L?FWlMcN0L^c%ch=PihW23Q5mqrhc3hi(I*v4bZ3b` zI@Q+qRuuF{4<-)lcO6bV`29bDh=#WoM@NfW2mb^*YQ85|S!+oib#{1|Iw>Xob|3S>gHnnmh5X^t(1RKd161u84(C($?-cc&$+HvPF&lbFaxc;VA#43fC~$}U*7r-8!Bx2*Q5@cOJXP$WQc$v`1yL$k#! zDw=2c9za^&%4tY;X(X}&hFryLt9M$3LWZ;YjyYSaADLA#9sQ?dlh|z&O`B$#bJH&I za4JO2)Pm;mxf1J{xl15og-GV+O!5U8HU2yFNGyo#PuVdca+JCS1&*z=Ifmz$H>{K! zCryrQ-JZ#_Mw}wd0F(?Zd85sxl_E8Q)Uq9x;@HMfyb7%P)MuE|xT)AGekOXY?wvEa zx1OZq&Yj?DeOK8FMBlyGVa{`t)M^)nRP1&0W1KmkP0Xk5&myxZvb|uiMmr&2i*^HT ziNI-`t=VK@S>+wIruw9rJ=IGC`gMkxIlYI=OSjCKfMZ7$>#+HT`MvRP(KblkZt=9PUU2|~#fwNZs=b*vv z{|CNg;!3yn`ZW8CHlEmTOC@{kG^&kTV=L|~-k`Ig+3hTniYiys+1l%_yf>E9XQkt8 zUL=#)wA!4n75>u-?P*15urel$(bxG#k1(o#~0xVe_xf^{?s?*%=BljcikM66Fc9DX`|1vp7+m(_@B_eXWEr& zk!t*;>5+ZvT5H2s>`Y=&b@CbX7`EZ0N2+p2CI&B?!vWbwgM*uv6?u)t!Xmi~#Fx;l z3|M`JvQCM;dDcQTM;5KvVyD?hFq9HeUFac5pOhDqJ!aDYD?+XieEEL@#X|BthpFOO zCc{f^Ag5E>C>Jf12Hg6SlKc6#(Wa(R{T)L;)*HII?!V*`$NFQ}>QCv3OJ+Ve^FXJ* zVdk}=&Uf$ISFvMXNj%EU+WXNo-XbDuzwAov7w<8NgHl@B+Z`Pu#<6hrrMKU${+ktH zD)wiLAsVs-Guuuj>q5MT_BmZQliA(_VtpPYct6PSep5=DC;CI8eeP7U*!yW6qNOB` zd15{86V{jJ_3E2}ZBvcmT}XPkTQU`4)w@`}p5JIg3v|K>Jqk_;&Tl z9dC)D7QL!q=&gdGw^nVd-YgwA3q`Y(vfHHNHt9IZ!*5o(VvaIWvjtyzy9u5b(jL;o zp=dmG$J>u$`smEQy?Qpc7oU|sU*P0SLH`fXz2|0rWQ@&>KK>pm52ze4#!Iy7$!qY0 zS?f7w(z_V;Ah@QvYahcN6vG}A!>EH>DPBrWg&7OL72C7J_+(rZdQD!A=spy>WW!twaYx3q%%8-#fuS<`X+_@-O z^PVp6zMxpTaB^_wXA_b0^oN2Ge@#cMd-)TWN6vp@v+)moS3Ed5`GK*7-uFJe@A%j2 zIu`cDFTSd&{FV281&xvS$FvcfGIFc-byQp4j4Y62Fn^lFW=2gBRlrxuaZN^J!@ zYo_Ry&1crqE0tla*XML<`>Dd6+~3ZWc_xJ=o^z8bQ;J@c_23*q_s$RBbI*sxU_D3n z+x>?>*rsdo0ifoF{wt#%)5~|wn36_l3eJFn1$;9TKkRypBGrlQOH#`PI11yFw(Nh4 z8%`x^WR4q-wSQJ|X|nduDjgO^Rf>C5T$;{4cZrxwqsoS_n~A&fg-|Z359^_3a=S{o zH2qhZ#hVtjEo*$|cHM|(yBn#O7B=c_|h`U_<3`hKFXkWe+#T1=ekLtbuI z^0Jrwij8L8t_FGA9>R?Cq=eFlw~&`c66gSy0PBElz;0kaa5wNE@C5Kx;9I~?fL{au z0$3jM^WQ{L0c%XVNYOn^{pkgCvBwsaIN!}nZ~F0>3LKZsZuz{W@Qr51xMYWg-4RRV z7MEjcn1LgrrpHxF>;fsoZsh`}#BTOG2ju1MHB@3uDnE+DAH{C*EqCiLs`@K`R8shj zGrw+LJ>2f7Yf3H%`JAJn?4p*IzHEJCdod|;x#Pn#%}D0QFB=^V_Vf=XjBvC*;*ZzF zx?7{s*6vtpps%w*)~SZN4AaJ^)jHL($xzg>+?M#Rw(cUyADqesntn#y!4!7j=;CI@ z#4*~`X*}pOb+bJ}2?O*5XL~yM)?quDX&9m!#zr5;WD_RvBaE^d#_uhR-&+{Jw=e=_ z7{9kLes5v?-op63h4Fg}dXnA$R0N+?V3&cxKC_o?Iw_7xH z*+A_Ep)C(s4~+ys%275@#RK*z%&1T6<}TvBYU7JskCQLNU$BEBaHckfGFIgjnlB8L z)4JqNCDo*`gj_*#G8^j@qFih%YBPs>7RL&u^n%eyt*hVbZ%^dL($mYuJ>J}Ndx(W?!s{TbUkpAogJJWn z{y?^XZhu2t(I+}w<2AX7$7be$QLJttw=zxglP)f zKT}YN+P-w?kDM-UK z8HYkcrc4SQheAu5oH!IZ4noI4=r|NQ4uy_Gq2o~KI21Y#g^oj^<51{06gm!traG$` z!!-X*BnPrnnM+!DjYPnbba-i-Y^0g1G;d#;H$FX^zH=w-8-atsA>c4@1b7~J5qKGR z6R_N6=f8$|@^nb_0P!RZp~KGb<%-b?ncxsbW4J&lgka zVm=nj7t<}Boh{TWa5(vobVj3ea#HN2o|a5kSEi+h`?LA$xYD?fx2+z3-6aG~ZPTtr zTllEx!mHpLWuNa4%@Xz+Vgt4LpqYQ^XyOa+YEP2ad`ZJ=*CEoHCtBj-x8&K0tE z>Sta3tSjXs0XzJl-F|saj&vV`er^VK0yhE&fkVJy;0W+M@FMUs@FrkQ`207qCcMam z6GAU_H`X)W?SM7R5Of>_9k&s5{+oyhv4QvV5}6?poDP7J2SCXKpyUB_WUFb6 z0}@ekfOGG&XLE{kr#N?tbEiPxDQ0tu*_>iFrbBfuVVm7Dj z*_{6-)@)8On^OvXH-NrR2>Oy40J1H(aVxD)s+Mpy+4G;)-bd>O)e6z-QLV>l-9_st z$4_dvDo!U}n+{%0IgW4?&UX$+sgXU#QFf6waTF2ja*k3pdap7r#`RoVl`*<->YFo4 z{YT0clg;{t&al&f(|FjRWubF*{BePyV_WHT{4+1`4Kp+wC zXl`g|mXaarcus9?!Wplxk2{k|b^Lvu-&a@X^Ve~vDmr4HxyoNx=Xb?I^)Z*(st?6x z+;4H;+S-$DY}}zAKM^&%zwS)`Cxerg{x$R41wLfo&%XaFv*&oS3m0YG;V>i)VWf28F8wz2Wsf#wdJf^3qdcFb za-S7*frcvt(F}+Zy-bL>D72#Ixmo$PxOnm9D7(BnG4o~pyu`E5>iZqz`;R|-$}?7) znHnUp%9Nyhv)XjUFKL=#iQA)`BW`MjdY0%?9-f8iI#=Lv;!HE4g!aO!@v>XdEiChW#CP~;*Rs*#Cr4w9=*YS^dyg-B5uKdT0XqrH4n?P%uKx>;I7-@oFqzPta0tsva9yvio(*zMs6Ofe&BAO*;-r$>L$(nGTfgU?(ilO-j3l^f0%~;LvtWCvkIEcTMeNMMiphK6jZjjZ?)Hp#1q1BksS0F zZ1bE*5fTS3@`Q_Cam5sUOl&P)+9GxOur&F(GNgD^-E1prwal|(NC((aN>O*TG*F1+ z2wYyMyGzRqYI?cjZ#?(hwJj|l2~aUQGn`0occkl@6RSeTbT;dL@Z+ve?OxQG8kl%) zpk~qT=k`gUyHq669On}QDmfG`(2h?_iUXw-D$U@mavxZh?TSUWO(v{5w@M{u!kREE zh)>a0$!x$%Ks}|1lE;o3_dxgvK?cfz9`(McDjE}s-O6GRKrFZO{Kw+6`3t%XXVEGOq~e#Oc>R}$bxC5N zDvIjg>8$a)nmSwCyVgl2gZ1reGnuvRb|Q?*|6G@J-9K}py*1I)lvt3rO3Zxc;{QS_ zgC&{#g6?G4{k__#uMi2TdQ9_WbVd^RpqlBFFb6mq93& zPqi?!>=&K*gi$bV#GKQnebB5h=EWqztcrZg1mu|j(@+6E(vHw46Dr=|vM5Mfrly#I zWoKa78CW)*W-NOKc?uB);!=bZ;-godN8z-{Kyi&a#oA^CfO?U>?T!2 zFZSY5qYPrR1a8u-x`~Vo1$2E|ezak0de7?Z-5W)D*x0>&^`7+B@JRkU%S)x@+dVxk zjU$`9SMBpHTs6LM;rObBzI}T<7c6aT>GphX$<_vaO~W?kK-CvDcA*0#F&uGkd9?P<72_mXJG3=$~l0d;B$q^jxl3V}Yns-Ll+ycBavfS|lwcF#k zC~|Dko=Y#?v*;S9evNGNIImIbUeZ<|^Z%Hk1hv&BT{9yYWo;$NgREDb>|q6{7NUbG zGUSRTV5u*hD8x#_naTs%s6+f|7}@|O1xx4!hYl6)yRWdKP|$U09O5P?PLMyLTVG)8 zMPf;5O?r1~O^Q5)^e@so>A#l#H2s~ahf<&B0_v0)OSMlqm^{YHB!M-vb=XM@k#jBG z{=Oz-={LU#KI^xad%EAEw!d#gG=DjgrK z>iC3oe4?u3e(AWss^gQ=@yV)=N2KGCs*Wk?n5yb{R5~85>iCRwd`3EsBCiEiPUWLy zj5AvlagG&*@Wru0K6U8w@_!5i{-&$xj0xFEDr08r5GF5bBoBkY^Gthi!@6v z=Gk`4O{sKM^trkgw1|@Kw2_NaV|_M_vs|T!yGh|Aaj6R(PaCny?Id|~P?yT=QSKXa zaU1!CAJ})#uxmlr%hYI=y3bTyHYn%pq1Lj)>2i3qIu(-(63 zsD2$u%9c|l*{HAeQTp8BbF%j(pGduR`u(2z2siQi{a%;kP$uVcjX|YyzxiDG zAD!HdUPeILWk-$2RTtzzPL)ks9!!B|YC5ax&^0w4CtdPS#%{>ONA)#ETg5i zJ5{iQK{wyNo-f3?)N!w&Y&8k49V$h%u6x`*Up+OUU6O8^-)O*7&qR>k+RJQ8jcFN9 zC{>pTQ_b4#WMH#HlW(HFka@%f!%6;ZPuTB^`k5aGtH~*j8g4|EYCjdR9WHk;6W}T; zYs=T6huMwz-1IPbsrT)bZ)qmKHUb%HcRJjLOsmJ~qs~3|bGunLm*J24{0-iQT54u< zKl$Nyj0W-nEh}kn=>MosYI_i0Fe^eQRs(AQk>fW4LOUdsHw;8YmM=%-b+BHlW%{to zs&F2oT5E1tpZ!2Js?w92?}N%tjtNn{tx}RO$4{wC7h%MFe+0QpEI&2AqrpJLAFFfA z;xQ5Rfk4C)tn)c*NF46>ggp_ei@RgYwMz62qJc%Vb%AKOi3;d^QFo}8LgBSwXnn0r zhl}fK>LU$7E^~qYlB?WD@^FJ(;4wdS&skiiKJ005Nd%hlNT=u(e`_3|Yp@nVRH2Tb*(`ZZRjE` zUJqn~Zh1vz++6QbRK#%2QpsqjKA^@UkC$IH8X1X_Y87M?}X}fYc=v^{^e`w;f$+1phdt5s#n&ji3RI zpaEeAG&P_RG@ubvE#-X8^u=q&9!)iI(;nT7;?ay{xf#nc88*?CB>f(d^k`u1JV$)y zg&B;{7VS$U^CCydO)qhHC97|>*ezv{A{{G=)+2L(<%crd%pMow)bj#NmHx?^>|oJ?F2zdP9e6zaH!uD=%5o9@x5L z&AV5%M_i|Tw0KQ>Fx)j({IFx7c;SV`(V2sZvCjPFb&EQdo!1ukx3{M=9UZ<{A==u} zk@M#_ujPYt+Yu zC^@H@HBmK^KnJh{kTsONeC#;0hN3}>H=LA9k+kH*-j{s zS4griE6b>?cpob+Nrw5-9vTUt9as!hRy^M9pqf0Cw`>>3#NP|~13g}9B)hB9A;cG} z)y~BFdz!ayeYk$BGt`=HZVlD=V!32A*5BQ{ZR;mP^k(U8kluu`ORe!SFN$Wz%8k1l zy+Oar7i{o`kX?OVZ$!G!oow>f`&_ijM+SZo-f%E*X!fcd|`1x5VaPAh1O4t zSy)eFJ7BGBKP%hM#P+kYoWayA`)yiLw;Cog?h`yLC?wR%TVlEM`1pbtgv!ZyOrnDM)hzhh}9+dA}im;%1e;8TKO(k zzKfObV&x@_+q43d#ZJbO$KCmYZ5$gc=k3>=N|>>@SkD}eRyL-^l!i-}I@y_Ncs1MGn{DasZ4pl{Ec#gK)$wl~{tRo)1SRwrPXLg)8p+9=! zgoVw=U()rbx6f?Uw}YqTAv88Co>Rx7&l!Q0^`Wxf)!7y#v65RElO^$wq*Sm+;E)>f z(LP5|XZv=bFZ_raNciB)ek1>4*FpWxq2X(MH8e}k~`q4^#}a!S~N+g+vh@|K^Wu;H|L-X)>4ki(-@02 zdTQPLaylP~))P?kr+bVJ<06GqV#5+^l*y^Z5+(Sdd(?7R=pfgaxr!XdPkA4gON99f zE|LtyC@-2Onfs?Wi_HBFHW;O0*F+O5;sW`66W&$o^C{J^b03RcQ)0{IJc&ae08yZ9 za4K=ouT=CH5soraB|TK98(gZ>Tvut)_AQs*dd#$mdp;6$~WL>1Ctv=Zjc5f|4 z7eymYl%MisHgyh!Sf840uDWnw@h$6$z1>!jzj1Z@aBI5Mo^pAE!I1B<$Ch=3A|6ji zBAyBdy}3|>HyBAJe7;O~HdVhW5ogX>qrMZ*ApG9N_r21npJuvT+PR9O?4$)(fwy$h zGJPO5T4n-`7&BdX0mAwa9Zv$5n^y_$QQ{RV!97Y)-4ax{gqJ}HFM|?Z1|{^-65F;V zybMZs8Iz|8E9%0yhE& zfkVJy;0W+M@FMUs@Frkw@Xvn}YnOe5U3Mg4+>}Mo=u|95=HcQO)L?efxf7na6P~z} zQ+6_#o$BXC{vHGl0f&Jj!1KV1z{|j!fHj!;Z(+gyEIE0QMGBGy6&eD^v+j4n2Z?6!h1%ruBfw6ZO=F zTtRno*#diKdBL*ea<|`;4aFN5ZrU?4vS-smIW}bLI|s|_4@@jsGI3zN9B1xq>}d^$ zTYDNCyXDxew=6IFYyGKEq%*3c20Ch8^*s%}(PX-`S~jkmlhNLpPj~}HLpXO)k9}h~ zI-KQ@eOr#tN3uPQ$)0S4W3rK>@DixiHS8<8v^HCYnZrjaPD@tqTCc8OF`KOxmDkKy zD}+zw`MFZ%?VY`!b$NwLTMuAY5q_w$@s>|b!fU?IdWU|Kah3QBYX_?Qh1av>+W|`| zJlWOPjGqz;+5!#)!4cD~*OK#3_QXu4?QW&bAJBC6islt=ZwO#((Y4FX-=Ikf&TKh>edsTDHkoUNQNK)N>Mj z$7S*rm(5qCVM?&(hELMuD@mKLNJBE+$ah}~`6gn5mT;Cn?kJo_v{Tv7s_>OL@=JC3 zQ;}a3ZxNZ(0pSuh0;7>sn+c#DK>t)Sr);OI?9;-B{)8j}4(w1^gGL=AdQJtNh_G5v z>WN4ngQ{CNizuY}>Iz5c?OT7#;<`wkYg-N6J~Ys|DFaWbX^OyKid$RzLJL|Vh9_uz z*e~I5XyOj;Z!`);qgR59m^hjEZWrIO0}2Lp-fAbwIPS8 z_91i>*_V5d>>8T2bW!S=L%aT|%&+Vh`eyT$SfNxEnXvNyK(Lr60(DF|-p!nne$1Rx zN!I6PPTkBYo1SD~Ql)mQd~-_Mb^H4p?>hdM#$Q=q&DN(z7;6cIWVQCs(;`KP_6q{z zEGRcrs9Xbu75XXqt4TjuPZuZ0fIKiL7n(XyKW~MoUS=-+0N+t|U&R6<#}`3j z4onM-(%Dw>c0$PIYk6rTfev5^AnJ+GZi(xWt9v=h-OASgM`k1SvLf+ht0bO^Y%jTc zU0PO=d|~p^5&}=y5_)K_L+QHlfnMkAUbRChx&>veY=giL1RP;AuF)8YFIr!`vj4on zOwBHTV|T8!wwS7~X)M2E$(22;7d6%FLWylWzbCg~=3N8Jay^Z{pEl(pp6*`Vm0G@} z$2U}Vwe^prBc61o(e)`uG}W4I@;0v;?sk=jy!qmirieS))abe2n~ID)705X6cQv)7 zXTIr4r5atqCYPcCf@iO@ao7M2?tu!6aUv&zrD&9u44YO*C20ryysG@Ea4UG3(&%IH zxm|aAJ=qp7^0lL`KH1Qa+;z(T_trPm7uW*uB?8V^Kt#4vI~btJEAShWaVD%$o-)GI z4(P7=o~Gs?qm3cEjbn7n<7Q_jrjt$ZX=twwaTcVNSXB)~kzHr0azK%G2%Juj$nRo` zbI=x(j2Ufbw%zo}ez4?F5+oMCtw!3m8AuZGK+U+51dqxmV%U?TxK-Hku^H<;Pipq?vt=_Fsy6_!znSoXAs4gQqlL8Da8xpVH4@qzx2Wp*`}FKgb_ zJlX%(g-iNBm)n)g>nQ_h zSG5Ps)iiToiPqk%^bTDtS5&#dzgqe3yV^`6MVD@-;O;dDN!DM<4Rav_akh;UAK|nn$dou??{Jhh&MNLIAKB zkVlAfyv*ea;mOSiOwH(q&FF?=+2#ggG&Td0xTnoF5}8FG+`X`2+X_5buFjHbJXX3x zr7t&=CKR`2w^R}-Z^>TUnn>ixrQCW|QDsM$MCVIN+p>9;MRm)He7@yLJ9V-t|2P87 zxdBqm`ubZ8vw}ZXm3kz`ufoj4j^b5OY5G(pnJGTiUeK{ z<=PHdoay8s-U?n<$5qREo7g=kcDgdU3U))Am~)hHE)q-@OFneLjy=hS@X5EL=|e=) zUsQ>tuL`5Dj-e-dt`a~$(*&AU{hQRjq_5QC> z`epZxJ+7Yqo>zM(dq2PMQ;SwEy1j2l->aqT`#&=9=HUM+&n&)W$#p}i;d_=I9eH~6 z@aS)rbuaH;(Y|8qii0cu_sZhRW9RHS=YeyMt?FOhu=@7Z-(CIcSnJrmV=t^ZvbJ~a z*VgS@_uCD|hOceRZ~WT1cb)gfCeNl%T+n&J*Dw6oJ08F2Bjek*Ol|r8R?pVftz%pF zY=8ZoU%0sUl9o#z-I3a{eaFrn*X_7#$LDuEbLo#SJ9zn*-hKFrLpz_``I}w+yMDOq z)ye;S<@PIYzw+^`8n61NJ)>8ruHJX`BiHm_^YgtA?fu3+k>q`ZIf;Ly@JT8DYPQ82 zU4>=SBgPr*_;Lz39OQjA+b-HzS~R^z@~#E&?=;(Zvf}A!wk3b+yR5d9e*2KscG3Ra z>OH$JyXN}67hbXJhCP>Ew{QP-?-^>b`dX~cIUUyLJ=W)ljC(LjT&7*4U9aucF4V5T zb^QkVF4L}~4&{FSz6W>BmQ&7aIpxgx&p7!xJ*Qj`6;S_9d_{QNY5skSi8VM&I7kO< zuZ#1#q1L_l#V$gZDlwA-P-Lk>yMzG`BMpzBKSr?K$|g&KH?k3`kfKi4YUtk@%meG7 z)f=>pn2OHR&c{x70fTynb`hj}Gp2{Fkl5|oI|*sI1TTImfbnJRKjM#71HB5da$nJ& zMqW9>>NMbz>tj9q(47oChL7St f;nw~}`vy{X8{BV!R;W2|eB;KN)i+$XSJVD4_IQaV literal 0 HcmV?d00001 diff --git a/img/.gitkeep b/img/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/img/bmp_24.png b/img/bmp_24.png new file mode 100644 index 0000000000000000000000000000000000000000..215c311dbc767083337d934285879017f6f1fe04 GIT binary patch literal 1422 zcmWmEYfuwc6ae5P7!hKM#S#q;IHIdfvH=|h2dp}YykZO`VV49JO``J5f(7MK87PX+ z(&`vz(=ub~;G=^C!lDp5R&5@YX@-`Ts1VSAw1Wy5TSt%?D%jH>`<;8v***8(KYKPk zErlB#9?W1cxU$ql6~tfuf0nSosDyYogTcmSi4v@8*za?f{kid@=Y3m4Ts*w9Trqa9a-*%e*(}0m>oe%24SwzW zJF73B5fA(SX_=d!K0@{<=g$`P>4S)A+!0}q(l~i{g+I3E1k1fqcxz^J9YP}QdE7k_ zs9sb|i7YMfW{^eOKFE@LcjFI)eB5Zxuy4<*_yYwfs_!N1H>kO%5t2{7`=pZ(LoyVNH@60v=-g{rw^luO zgxXA7OQT+38s~uXSzn`>EB9u5rYG)m;3OA`P0OpfsNRs>u)Zw@PNFFAy<4E@6Kzf6 zdF;%6SV-CyS})AN;#FHFvKHbwemb%ZV)Rftk^!-yQHdBJK0|L9C2-wcJ(znvs<#NM zTMqI}H2$p&zqwTIP57-v$cJM_9Mn)R;bw8S+IC075wwkJBnCcLM`G>|QN6qbbFV;= z?(r1ri9?l5STXln6zLpSP?wx4A@Kq3jzN)*@eC@*rK%!IaQ8NpZ5z*`Saww^(T58b zqwHJbTFPlxtt8f9f>4xAhb2+R9YzCj3=>46@m*nZO6oLjBgQa+5RJbXrleRdBZrXS zf;g1l9j2z7E@KwagbM;terMQT%4jzVh#*W5g7Q14U6jh}MA+x7{k)bP0Rzd8Z0R%0X`6*U+0s_mMO+YL{za`<)5xZxojP-;frFoB zPTk=W%?TV$QjJ%NOYA~_yBMR`tzYhW`KC0Ko;wbGfum`FBoat@1zp8GAmbd6wGYrn1G#UZYv=(=O+aNHP!m_o z6iF8YsRJZal=eM`^+K040A(DY$^x}oIgs=QQu#$dxfxJDfZE=}z=7pJ z;Z>*|+69#V1!;9X$!s{~W$|PIuvi!vED}=mB3zK)$z(?g%J|5ki9|L*c_F`Y8MH_hXt5MCCYdg8e(Mt^EX+HdC N8M36bM5|PH{6CaZX&V3l literal 0 HcmV?d00001