From 9ef31916c9f5c5f28211eb0090f7bbbc105dd733 Mon Sep 17 00:00:00 2001 From: Ben Date: Fri, 30 Nov 2018 16:20:12 +0000 Subject: [PATCH] Logger and console colour classes working, moved math.h and started a little bit more on entitymanager and entitybase --- .vscode/settings.json | 55 +++++++++++++++++ CMakeFiles/CMakeDirectoryInformation.cmake | 6 +- CMakeFiles/Makefile.cmake | 47 ++++++++------- CMakeFiles/Makefile2 | 17 ++++-- CMakeFiles/TargetDirectories.txt | 6 +- bin/crumpet-engine | Bin 111528 -> 129040 bytes include/colour.h | 57 ++++++++++++++++++ include/logger.h | 55 +++++++++++++++++ {src/crumpet-engine => include}/math.h | 0 .../entitymanager/entitybase.cpp | 3 +- src/crumpet-engine/entitymanager/entitybase.h | 9 ++- .../entitymanager/entitymanager.h | 5 +- src/crumpet-engine/renderengine/renderer.cpp | 10 +-- src/crumpet-engine/renderengine/renderer.h | 2 +- .../resourcemanager/texturemanager.cpp | 8 ++- .../resourcemanager/texturemanager.h | 2 +- 16 files changed, 234 insertions(+), 48 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 include/colour.h create mode 100644 include/logger.h rename {src/crumpet-engine => include}/math.h (100%) diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0d534e8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,55 @@ +{ + "files.associations": { + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "csignal": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "array": "cpp", + "atomic": "cpp", + "strstream": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "chrono": "cpp", + "complex": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "list": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "fstream": "cpp", + "functional": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "memory": "cpp", + "new": "cpp", + "optional": "cpp", + "ostream": "cpp", + "ratio": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "typeindex": "cpp", + "typeinfo": "cpp", + "utility": "cpp", + "variant": "cpp" + } +} \ No newline at end of file diff --git a/CMakeFiles/CMakeDirectoryInformation.cmake b/CMakeFiles/CMakeDirectoryInformation.cmake index e5c6f51..6637aa0 100644 --- a/CMakeFiles/CMakeDirectoryInformation.cmake +++ b/CMakeFiles/CMakeDirectoryInformation.cmake @@ -1,9 +1,9 @@ # CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.7 +# Generated by "Unix Makefiles" Generator, CMake Version 3.12 # Relative path conversion top directories. -set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/ben/Desktop/crumpet-engine") -set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/ben/Desktop/crumpet-engine") +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/ben/Programming/crumpet-engine") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/ben/Programming/crumpet-engine") # Force unix paths in dependencies. set(CMAKE_FORCE_UNIX_PATHS 1) diff --git a/CMakeFiles/Makefile.cmake b/CMakeFiles/Makefile.cmake index 83160fc..6a829d5 100644 --- a/CMakeFiles/Makefile.cmake +++ b/CMakeFiles/Makefile.cmake @@ -1,5 +1,5 @@ # CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.7 +# Generated by "Unix Makefiles" Generator, CMake Version 3.12 # The generator used is: set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") @@ -7,30 +7,31 @@ set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") # The top level Makefile was generated from the following files: set(CMAKE_MAKEFILE_DEPENDS "CMakeCache.txt" - "CMakeFiles/3.7.2/CMakeCCompiler.cmake" - "CMakeFiles/3.7.2/CMakeCXXCompiler.cmake" - "CMakeFiles/3.7.2/CMakeSystem.cmake" + "CMakeFiles/3.12.3/CMakeCCompiler.cmake" + "CMakeFiles/3.12.3/CMakeCXXCompiler.cmake" + "CMakeFiles/3.12.3/CMakeSystem.cmake" "CMakeFiles/FindSDL2_image.cmake" "CMakeLists.txt" - "/usr/lib/i386-linux-gnu/cmake/SDL2/sdl2-config.cmake" - "/usr/share/cmake-3.7/Modules/CMakeCInformation.cmake" - "/usr/share/cmake-3.7/Modules/CMakeCXXInformation.cmake" - "/usr/share/cmake-3.7/Modules/CMakeCommonLanguageInclude.cmake" - "/usr/share/cmake-3.7/Modules/CMakeGenericSystem.cmake" - "/usr/share/cmake-3.7/Modules/CMakeLanguageInformation.cmake" - "/usr/share/cmake-3.7/Modules/CMakeParseArguments.cmake" - "/usr/share/cmake-3.7/Modules/CMakeSystemSpecificInformation.cmake" - "/usr/share/cmake-3.7/Modules/CMakeSystemSpecificInitialize.cmake" - "/usr/share/cmake-3.7/Modules/Compiler/GNU-C.cmake" - "/usr/share/cmake-3.7/Modules/Compiler/GNU-CXX.cmake" - "/usr/share/cmake-3.7/Modules/Compiler/GNU.cmake" - "/usr/share/cmake-3.7/Modules/FindPackageHandleStandardArgs.cmake" - "/usr/share/cmake-3.7/Modules/FindPackageMessage.cmake" - "/usr/share/cmake-3.7/Modules/Platform/Linux-GNU-C.cmake" - "/usr/share/cmake-3.7/Modules/Platform/Linux-GNU-CXX.cmake" - "/usr/share/cmake-3.7/Modules/Platform/Linux-GNU.cmake" - "/usr/share/cmake-3.7/Modules/Platform/Linux.cmake" - "/usr/share/cmake-3.7/Modules/Platform/UnixPaths.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake" + "/usr/share/cmake-3.12/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.12/Modules/CMakeCXXInformation.cmake" + "/usr/share/cmake-3.12/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.12/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.12/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.12/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.12/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.12/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.12/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.12/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.12/Modules/Compiler/GNU-CXX.cmake" + "/usr/share/cmake-3.12/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.12/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.12/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.12/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.12/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/share/cmake-3.12/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.12/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.12/Modules/Platform/UnixPaths.cmake" ) # The corresponding makefile is: diff --git a/CMakeFiles/Makefile2 b/CMakeFiles/Makefile2 index d533362..f596e61 100644 --- a/CMakeFiles/Makefile2 +++ b/CMakeFiles/Makefile2 @@ -1,5 +1,5 @@ # CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.7 +# Generated by "Unix Makefiles" Generator, CMake Version 3.12 # Default target executed when no arguments are given to make. default_target: all @@ -16,6 +16,11 @@ preinstall: .PHONY : preinstall +# The main recursive clean target +clean: + +.PHONY : clean + #============================================================================= # Special targets provided by cmake. @@ -54,10 +59,10 @@ RM = /usr/bin/cmake -E remove -f EQUALS = = # The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = /home/ben/Desktop/crumpet-engine +CMAKE_SOURCE_DIR = /home/ben/Programming/crumpet-engine # The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = /home/ben/Desktop/crumpet-engine +CMAKE_BINARY_DIR = /home/ben/Programming/crumpet-engine #============================================================================= # Target rules for target CMakeFiles/bin/crumpet-engine.dir @@ -66,7 +71,7 @@ CMAKE_BINARY_DIR = /home/ben/Desktop/crumpet-engine CMakeFiles/bin/crumpet-engine.dir/all: $(MAKE) -f CMakeFiles/bin/crumpet-engine.dir/build.make CMakeFiles/bin/crumpet-engine.dir/depend $(MAKE) -f CMakeFiles/bin/crumpet-engine.dir/build.make CMakeFiles/bin/crumpet-engine.dir/build - @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/ben/Desktop/crumpet-engine/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12 "Built target bin/crumpet-engine" + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/ben/Programming/crumpet-engine/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12 "Built target bin/crumpet-engine" .PHONY : CMakeFiles/bin/crumpet-engine.dir/all # Include target in all. @@ -76,9 +81,9 @@ all: CMakeFiles/bin/crumpet-engine.dir/all # Build rule for subdir invocation for target. CMakeFiles/bin/crumpet-engine.dir/rule: cmake_check_build_system - $(CMAKE_COMMAND) -E cmake_progress_start /home/ben/Desktop/crumpet-engine/CMakeFiles 12 + $(CMAKE_COMMAND) -E cmake_progress_start /home/ben/Programming/crumpet-engine/CMakeFiles 12 $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/bin/crumpet-engine.dir/all - $(CMAKE_COMMAND) -E cmake_progress_start /home/ben/Desktop/crumpet-engine/CMakeFiles 0 + $(CMAKE_COMMAND) -E cmake_progress_start /home/ben/Programming/crumpet-engine/CMakeFiles 0 .PHONY : CMakeFiles/bin/crumpet-engine.dir/rule # Convenience name for target. diff --git a/CMakeFiles/TargetDirectories.txt b/CMakeFiles/TargetDirectories.txt index e70e51b..a21b189 100644 --- a/CMakeFiles/TargetDirectories.txt +++ b/CMakeFiles/TargetDirectories.txt @@ -1,3 +1,3 @@ -/home/ben/Desktop/crumpet-engine/CMakeFiles/rebuild_cache.dir -/home/ben/Desktop/crumpet-engine/CMakeFiles/edit_cache.dir -/home/ben/Desktop/crumpet-engine/CMakeFiles/bin/crumpet-engine.dir +/home/ben/Programming/crumpet-engine/CMakeFiles/rebuild_cache.dir +/home/ben/Programming/crumpet-engine/CMakeFiles/bin/crumpet-engine.dir +/home/ben/Programming/crumpet-engine/CMakeFiles/edit_cache.dir diff --git a/bin/crumpet-engine b/bin/crumpet-engine index 01fff02589f7035f7cca7eaad97248f446a68ce6..c049294611e19a533309ac62600689ae4906a7da 100755 GIT binary patch literal 129040 zcmeFa4OmrG7C(IWGBQIlEi%iSnPHissbOlNf?f@c{E8_RP*5lYLNIEyG}OG|b;!{& zvxdqsYpj^255~+;8DX40u(7hniX5v;Iz{CamBss8Yp;FJxrckM*8e}x`#$gEDOqQ) zwf5R;t-bczALksnDgU^ho^E ze0G={4k9iMqgBy}0Hk`Gg>HvEgik}=Izg)EbXE3I6b+47Ri=7Tbeo{ccIdrX;Wf0@ zfr0^PA>yd9(99HxdKL)}YBI4SAih{Zxxr0cR|55nLp8{cm_)A0WPtuY8 z)d}4Wla&}lL*k_??URyhx}W|S7u&LI(oW%}${@uaeR~-2N=Ah5GQ-kZ7<{;;FhklQPpU;3!_N&rC{#-By^V^#adTw*z zk8|+n^A7zu&jJ6mgPt`G`rPUew|6+`xz9n)4G#PlILNPah?5wHetFwL&KC~$e&^8d zxek7w?4Zvq2YnVIUk2;1Cf8*eXTOIWDI`oUrK|aNf z%dQN{BOLHu9Qx~Ohj{zhLC^6He)|D>#v0v?q;ME+xdtJAdKodsrYwal6IvhGOZYox zDa4sl?LElpWvQ=kPd}aHpKD}B1j_#}`zOY@fC35EYUoGTv(TU9Pb^X8CloNkM2=n0 zJq~)#MxHza?P~s5-8|Mclao^iUN*3Q0i#f7&|$tf!- zEmo*;1$iY*8(o}}RgyC)r+`{2X4K@I5>-wv&bn=MVSb@PE8OV9qT88kY)(l^ak0?S z3iI<*7UUEtnTj*5IA^}bTwf~9i7Geb6=WCQW>G+N8&h03&#Jk!nV*xTbWqw#ZE;{m z-n^{2Ii?%OO&FVzT9}n>fIhz@d-kQ5l6!|388=QY$)7)N_T-WQ17_!D6=#$bXXTXu zkuo_8KT;-vaK)^w`FXQ53gNGuta;<6WK2oONSS8;&6qR`Udf?G z=I0;?vkI~^igRXVDN`~y zkSAa9EBk7|z>Jak`GvDHa`TWYMh{3yn~gyFwbDip_`jo-j%gJL0TG&=GrKrv9#W7) z;HtoJ7}bs;ONL+Tw>&#P4MP@rAuD4R5_Lhw?5vX6xsW`$WDtg0ez0^CBGU}9_suWL zAS&uv8MN(Jg>;`X+&P#qEZg>$hE$e{&}e~S5~8eXZ#P8!Woy!b#9 zwzWsFWH5UQ79E2#es#mh)QFS90xT#>XO|$)rlc(3?2kD{G!77Y9@3ZM~*oLeK{HC7Tumf%R0>Wv*A4a z&rTmSyRfw6*V)H0f~1g@A3O#AqTGxmg3iApV;q(#*I^Yl56dT3i&iLkboVP35QAr9 zx1bh{zrt^v*RV*Qr`E@~n>!lz2a^{!L%b~UOY*|M0(8Zpi3`_b2 z^9zcw2rijpu%Aluz^cafoIF}$-9bgFE4!L`S$PFUMh?v=Ak3OSU*Ul&$Tr4~9-VOo z_CaG)$Bi1DF|hx@{)3It>FFa!jmsF&|BC)YEd|Aso(}#&*8Bbg2dHftHl=b3Om`9Z zFC70O@spsUM#+67FzOirQRzRT$WsI6raBQg9oBLbl{iVFYKf#!SxLj@k;~XLGo5%N zaK=pkMG2&Pg}aaUzJ}ofZ(5(*v12^N=z@JFUBvZ_geE%yIzRHGoCo24A8@|WY3SVu*ub-yyH8%XJISOBE!yhbC_y!yP*nAZ1^JKZ?WOm3*L}=+CQ=K{3hClUnqWywc)o4-etqPL{7X7ze)U@ zV8ibde3A{HAadL`{2)5;!IfsiZx(!}4WA@(a&7nn(vL+pe8+2){KYnWn#fsU!*`N? zue9O&2)@dO&lEYEZTP!0RJ+wS{AR(|+VDjpr@@9ln4{!0+VI^a4x4QF#UjUN!#`K3 z`@Uf36e1e?wX?t~9k3TvlqamU5nzozpaTdHwnbPFC6uK&uk;Bf@)zj7^jOu+uD$b!c-?!U?` zc$s>cw%CG?@pI#S0t>#g1z%~wTc5M6v*4}IiK;C4Gc9s9Tkzd1_-YIOEDOHIf z;MZC3@=6m^t1NiEbR)uM3tpB`%wKK6%MzCHH5U9(#;6~)7W`Efe1io)%z|&U;D=lA z`z`np7JQQhFH0__`YiY)3xA6RKgxn{wctlv@P_1hivMH_KH7p$vEXAZ_;D6|oCQDL zf_GW)*IMu=Z%=yQqz6uV;G_pmdf=o7PI};^2mZGnaF-v6c2`7w@TOt7m(`Ypw>7%U z>!Nr08*LkW5Tv$?4&i6#o=Lc)axT%Eo7!+)^gfkoYv0_+<+rFzTl(f&F7Kf-ZRMM* zxxACgw1sc3;__B1)7HJYlFQFgnYQfBi@E$1m1!B;T*T$as7zb*=1eZHr!sBLo71?w zn#!~#Z%*R!y;P>Hcyj`m@1`AKwLD7 z%5+52+{EP@sZ3k$=0+}0qB3o@n`^l|p31bvZm#C?C@RxYPIDEPuc9(-wVNxsJdnz? z#cp2A(rY&)EHJ5i%nYO~sRb1XmW!eHaS919|D$~}tc`=utqB3oHn~S*o7?o+O+nmYe z^;D)UZgU!!S5uj`w#`XgzL(0hrEN~&^4(OXt!%T4%Xd(jwy@2yTrQ?^e<~YXzM0CG zQ@Q0B_dk_stJ>VeEH|ZB3hNxjdfAv?Xn>=JF^i(^j;(ipy6~nYN(K zm0TW3WjgX~Ud-i7s7zbY<{~clqB3nkn=`rGoyxTJY)<2H7b?@1vpI>&9jQ!P&E^Cy zhf|rhn9VLO|L{7>w6$!Gq)kcnMs=KnRO3DU@f-pp9?n8`={5~@j&|;ejV4e} zLZI6l^%#MnttH)%p8A7M>FLzArp`SVli*zf!GAmR4=yIq_h6;K^%svA2Y(o)mrr$kn*bH4y!{*0kSV_~HOmn>>+YlC5Z;h|hIu@8BWiri!Sy8F}bOpy#^mS(P+Rq(H4NFZCbAHr8j@T9O_hW zP6(OXNRDTx68jE08p+Y$N{0}duCYpmSN&eH-j^S7ArgIVPid38d{L88axGeFqGmGv z4TH)J|3ifiQ>QQ$FK>MdI-Ke|1;-JUmnQ>m^DB{9l2-bw57S{F4m4b0}S^JjxV+pe`pR6T_x0S|bl z`d~8tO%PAKK_V{;;6{!#=O9`}STutSe>Aj{n*#auzSM6m@fu)_=}~XDm|E^{bUy|s zqJV;(6kD=0fwGs1n-pvU6xFwwspUJN9Cu!C><5?>)dCHL7%jxT$V`f;gw^}TVfm*p zX(YZ~ORr!#d^pSPQ9T=_tA%4#co>TTL32|u@ma_>(dAGM$W2(WS&%9fzs$z$C;Id7 zOVId0UVN3c^XKs>RuXl#KrN`<>h^0?gmtUJXk~gSV-X)pkMp4ib4dP3gbF&Q?JJBD zoztsW&wAfSM^7ZD&%iwE+xTD3>6g(=;vGDmr{1W~cAx~sKl{cxr~AjQ8W=5>v8%$% z&p?)ADAT$vhE1Y^C#Ci9CseZ3Q;cy|MhsmWqt4^hthd|KuZWvC09)POGz1_;Fh=CN zzCU6}=n<*wVSQn%BOcz8;Oyb8+QVfOrtr)nc*eepQ;wjNi1s`uuOzjL`oFRmg!txk(LXGK}cHe;q&zn z5sxGjlV?Av`wHxpu;+f&-V|%LSgZ-ulVnrV${|;Q56z)i?^{Fn%W6BXtzBAMGEyl~ z@2ey%jnsg7WhG-H4tLiYqCQ8x(yk}PY0yzA`hCImt+VI?!U**e*y%L3Vv)QwEtF-C zD0ysIE8VxV>?rGCx2%P+j+Ui-?POW|SQ(@8tTh1d)+p)G5^Gks_2C?grT)1iV8&*D zVU_Qn)m-MpilpzQ$mY1en40y{Vr@c`>R6tjE&Uw5E} z^dY3d)_BP1rsO- zsd}H#fUNy1`( z=AYkU{qrCcnd;}YuLEF4y>E$sY{1R+zHBb?o^ly(gRf3>Y6brw=5M#BETp=}9pOLH z!3?JY({5X?CG!7`sO-dg^3XXTxTdyxloR`)g!gqmGtoCg`Va@z6?wDIe!Ms@qu%9{aJx%_LI;HND+0=R?v zU}rlYyuq0NcYLq{Z6DVM4+dCuJRej9aGTjuyiR*L)uKH%kvb&**ZY=&i}&jv`R<`x zb@&#rYNE(M^j7=j1+2cMwL1=~BuJbExJQ5nIXhIRTQz|@KAWA2XZ*i|$RJImy#&8D zp{(m|T6b}1>(c!40<42IRUZe@M9m#7WNpI2x*fG)V!f}F72_BhIfeSzRL7s_cE6elZr_(jIQBT-KaXY3I8PlEXd)?jG&h?& zj#Ly=@f6gAR18mYOHI8$2 z&dpB`_39X{NdLA!!RAQqM=Ny?W}tvW@~&`zId!Q(bZFuR_LU?e>U$)iQVckr^|^_$ zL7R9qpb2|L&SXcx;vSmP()j^8{EG6;{D3_L;f?OFT6b8Zdq-0gMNbsMLh@LUEJN#Y zo?9n!eGEU!O%z4tJJBwat^g_E+-wr@sz~~bg3iphBd4l3kB6=375|RAfi(F5ojlI- zH+RL1Mg;GxNfaWj%^d2fo-a~8pZRV;DmZ)&@pwL@@)1x|J?yAERYUOz*^x8MCo4gH zL)pmcn^6Z$-|T3LP|m?=KGqnp#2*8euB7~cO`F)y)sfOG(%>49JZUZofROgy5@;_D z>;BUkJu;~URC@z%ATit1NF^Y$;Bm8CoZdxf+5(66p;+{Gd-hML=^gw!Q0|JT zyeE~MJg6<&Y!Ch}g5 z>O>_t6TG8nX~L%63Y_+bWEu5r-!tJzGHuPh-SX{COhyy@*dHB(NB$L4k6_=9oq{I~ zFOw+o6^nco6OMphQF@e`8tLKIp6y_5O~n9FYe==f(vQH`C+@QFizoPO0IgI^ik8JS z9TqU66O>`Q{FqpEpnwq4JY88y*v^Y>p7|!bmmJxQrrn-b(y608FVNd{Ztt=}F4g;X z!Ctp_Ef*`6F^_lfjhI0w6ux~wfcG9MRxBe46*$cBE-S*F8m8Bsf*RhngaC(Xiu2dw zN(2)iam{{{!8`cqSk=xm?^y(Q!bxMo2n5gmKFBafG-?Az1fBLUdIKZv0|Gs0XLgCH1~D zfs-~iE33G(mef&{_@A2V2?X1}ilk^y$}uW zBbwT^BIVey6rZL>)gUPv=KK`vpY$PAY2ON^hVEQA11+|YSNq{qfnNn^_0wV9&>eRT zBMxO0>U2V#zPe6tOC3@jbf}Ixr*Qj+qgZvz>Q&bIYS*k3n8@N|xwbo635gAB7`pSW zK}=DDT{YaxigEi}B<6q?)%-*249o|M8a$X9K$oHyXn9^UPqTr!pCp7m(bO-V@Gq(u!g;@VSENr!9GHC#d>z{_@ZZ63kVIW zl`#&jaNkqsaO|OvVojNiIz}Y#`uo|^ZabbN8~~f=a{-dWz-)b%fPQPo>+iRAys_S{ zJk3!Uk+mwGY!dn0HYlaNUhP|_=ck28x~pKv7cq=q>9Ci~?CVJN4*DY%#p2Ka+&j1TBf&6@&NwfopNn@nJ&Zrd9T# z**}{0DxO!OsS(c$^e(*Hv$hq3-0ktU0Hk`BWdfP%@#X?xJ9A;@zC5va?mJ;|=e|=b zJNKPY)wyp@b?3hGYCHEWZS354Q4=OS7J>IQYFLeOUl>;QFVnr+=6&~#`xd-V+PBW_ z!FHy$GhXD4#I7jP?OB$HcIubK;in7i^~-wTE`jv+rXXW4qu2S}-epMyJj>#_UGW09UGWMDf+l2BTcc;$AS!y7T|od|Y=##r6mm8a95?Is4iCpNg;^?Ikow9s zc;xs4RZC}0{8E0u7jx)&YAV)}?*dNd&}=jU*({=B297M$D6{qO`EQyhKsx*R5d2Np zjqZ1QCO|z&lThG{Mv_j4wvDv^r4yNte8&h`LFcmpkK}3L9I!jQlZ}VWdf(qkOO4!!Dva9<0o+2QL6@1FzjZ^f&$zRR$i^5v41Q0f$Vg6kboPlSKdy{whi z;l*0eu^FmJIWqFEv;jjl^6WrwwDrVW;cY#ApWtN=^^6e8V6yOzxR0bf3@PP{4jH8v zK^ARKVz*)qWo$>Va*L}1szrk}%)&}J&CfbJkQFVAq85fJJxO--$Qr!)Zv6Eqer#P% zbw}X`8Fm8)MoQ~$Jf+b4LRkTHe$oH*-!gW=7^XEQ0lW90@6R9&yd#?NErzcSPSBDp z^+*fie-R!7xqVJxEumE~E&r^7jZGmTJJ6`T4R5!9-tX^o(vb8oZwccO#WPR6?{YZT zUQbBX4=4$# z(*&&APt$J>(iEj0HoX$}b6eZ1H z*P`5jvJ2&Sl#zKR>_->Z0;b!5W&ST%>r0 z3C}y4r$&)GDDwG2eo2#`SLDyAQSackM5W?7O|Dkt21Pz7Zq?QJArg0na$`X^a(ao+!WpK#sGQpLG)w^ z$?*<;Lv;Ft#bR5FxeYM{?Dm_`KU6sr8G-R+%tyXqs^TM3aSK# zG!&Ez{>HV`*1K;5HLWx|5BG;JwQP+$5rVhI!trCh-{4AeTzOr(lbI<$X~AUX&UG-; z%WVz*4BvN=Ek9F{cJFNF2f%LcDQ4bI%P~G2U^AzviZ4mUzi~yYnSarksE^nB&HRvS zDKkfr;$p-Q+^Z4PiM^vVfI{bi5MXX6)7(eFN@J5I@qq4}aZF1lJKui*cK(qY8{CE$ z(#g)VSUGLykHBtsiJkWmH0{h+72lMKA8_+lJO80EQQzas2kFjlxt6l?Mm(z0c22~7 zKzEKHgta^S5w|)@*+EKLyK~7A+NZm5B1U=Og(*BT*17>K$ztMPOa*X4=1)Ey@@9jM57cuMZ7EyiP?g`YMIza>R2DWE#!I z)c+OBSaL;DE>G83)<}MgC0AkU;4f-eRu0KJm1HH0tbe1RWc6WLYMy$Ls3MnNWnaeX zs)+atnd+esP^R#Nuo0U-vqmCrEj4~iiyEpyk0P;eNvXvah%0*s`|v3$8Gbzjl$vi z4xUGN=^T^O(*r5z--!3a5?ojfqHX#4sZx2M7V9o|Os;fvq)t8fS}fwDU1_%j&y7rt+WG$-2s zqTWoshk;%N`d%D=2W9DCI|=Yk)V#PKqVJ_1XLpBs1BusT4bPcsn~Z41yA-Oc*=w{k zaKq0v*n?JMuZn*uxaWZSnbR7-2MScZuPaNXg%1|uUjMQ3*+4I?Egh(8*8BPr8N{f1E!K7txe6w%`l37)+O zvIYIgYF>QNAL+v2qG}-4`(7eb=n;J2X}6Q*{nR+b)`OgZXSzJx+gW}ok4w|?5mZfD zoXjH71p$^%fF2mh_Op^;mZy@+-T=$bWBEZWUx?4C#PYMbUDI;Bk`Sx4Y6g`gczrNq@^$~u*Lnp;ZY8Oh<>ym-7{y8`8f6FMenAfRch@lUq z0>wNYAg0|K`kb#&kyq!mhQ5C#k{#RQ9Xz5RiNZUbY@S|24+Yl0hMs^|mQlG;IxU_! zy@OAeiVymIy;q;;&GS(=r5G|Gb>mvCupWj2%K)?gI>_h|DAw! z^~)6h8!VTz3xdu*nJ3^KeSAov6$c~X7dQk8QI_B*b8+?+IJeJU_|rb}f^OTzKB7MG z&>#sID5nO|(%)NtTjC`n}?1S4`9 z(dd4l_tOWd-C-^YIGwKGBV_Q_`#h+AI71u(jLKAW22;UvSCgPFIu!!3GF7j|EqRF< zNC{nMKaNOzr*d@e@(nPD%^12ZuS?@s{d6zH`gGS7S)^&Q@+!p&-pLkk=ae>e9E zd;`@jnZZe$akLUZ?^`0zpN%b%iVVOZ!b9ZEzwiSDTgGpnEnbHf)@%U@md6JZ0M{41?Llb{#)fum=wk4oNUs#Nc5qS_vQgz2t$IF1^T2ci(o zXOKg8;knP!+RjTGXg6dM-=LbvN6DziO_-#?9J-K;-}1up@d$7kH|)_*0SEoSPiXB6 z!*P}dzEp?8?s|USiN>)!^d^#qIPhg}@WN|3+pjPcYvVy^<}ZFKl&M-P?(X}++f46) zm^!n`Q1lE|6#f-Od0D;cd(yJ=(mA|&R9^Bdi)Am_oz;~Osgc^0ze-XqrnJf#rdFoj z_bFp`z!dd#7_rXQ+{{BtAuHCp$(mBiK;mPsY8?75V@CGzw9~-gY4794R;B&Ds^eH~ z)Z9x47}Iy=&QlUiDa8 zzvIQG&>xURl_C;Sv9^q=JjH$t(lI}EM91*A_5NUDxlp$Zq+r&4{hhL|UqIhPb8Gg# z+1Nljn0<4VrEgXc&9l>8pF&4EuxP?MH=ii65%JV|1rC@hrmko{%#Kvi?p069q2R@A zC-=l_G`&JrKoE^%MN9I5)izC}(>2`%{m``9=WA!;nGl~{u?CyelwAc4HXqK1!`Vcy zR{~+KmTfHf8AIq--Mz24eavy!;SvndX<#{QaLUAY_rVqeYm{vHP`Icke zR1-3ctM}c7F69pucu4+;orHZyxgzCDmgsdycYcxX>3Mi*E$U`GLmiLCDw5)Hq(zTF z(J*~Ejc0A&n(BSAEWdp&i-b4r-Hx(#zL?7X$3PA}Urgg=!imin)$o2Osis}r3sXtxZ#cm_Ga`JzyD%n8jGXTt=C`Qi;;b+@-}C(bX( zx)Yf%I#OP8m@mHI=O#|`MJq2ZLe3XIaYE;w=*7C)f`|@U5Zc!HV$G|TE;!D7u|R21 zg%lTRz6hgpvWk%N#dCB6`BIt>)HcC?;Arlgu{Woa5k0?+oTk4>O0a8< zbB`L;n0#@#=y?`gLz$%&8Dt#Id8B{6?_XTRms)CG-_FH4RlDBz9z81I9U!J;JU>No zf~O_b(`0s4fABk%Z*_e6uy~HvJl^LhAikIx>XbT$QdJN`uBh? zp0LRUI3@7XDFKV=LO$nhqyH?3_J>$71gQxtZ}><3v?aFING9iAY7kK(Sb)S zHK3n|LB@Vgb%ITcmYpT-lgm(f1u8E_4M6<9D>|d`q+mF!@&MK4>vpGn83tSxO{tUl z#*?xRv9vb402v5dz-f_FkCT4@x< zKXF4S($coPt}Jj}8`xveV-U-=_uTnbtiR_1PLb6l``H9P+reRBKAyD#sl2UBz3_u$;+R$ld3aGvXWYh9&R`s zDwAX#gTgcgx6354JX+0>{pF+Db*(D>hsXl6tJ?E&Fjx}?BJ011ILjF)&onqzx9=f+ zAT;rV1H6@wS(_FO4HTJ^;cm5DLT1EscJ@APTRCpe;UeuDn}G6}=Zy3_H0Tu*b;uY@ zu{$v}1;%fX88q;$d2I`O(&Ck%`R;i>;|a)j(0p|pRTiv2@0q)3M-N<&jAik_AQUYr z;A}1i@c{jfgwP(i(eyyDbpUi;7u1pliqv+N_-B>&=g}FYit@Eysih)cW`8?cOK#yHNY`|xo1FmQDzt?kJLf7yaDRqrdLR0Ft#A?L)Wa6+M9!IIHIv8;kn zf9v9%8Y?MmDr!m(qMt)?{x*OU^|89-b`^*4y^)Aa`rSRL7VUgRrmW$qH354|y z-f^1h#rHNaufncn3Er*rTXjbAyMlkE)VDRAW(Uu1^=*lWfUCUg1KR1&qEdcGUL446 zPW>I!$W#qxNQ1eG>s8|Fq_|$?^{{vFC}BxqmbI!PR@YuH>s8*onEUKaU)9^xFs-}m zebKB$3d`F)a0S!Rum~Q$^Y=~4W3?o7&pPl( z0|lx(16_2AasgRF{0HbP&Q$Sr6r2A@2AR=!3l@ZYrr*2|(aZ*@phNYW(44$&>JQKF z&`ZsDOHi?@PQAk9Q$70@ccqFY$T`zO=k9$D^urUBx7e_+9`LuM+*e5)>gDof+L{=s zuW{PzKOi?~9J>O|t$UoT-%k!0N={l*N5hYwIOah`WaP8;X>7Bipcr;+#zE*GU` z8OBt%_p(aB$*FzmFP}vF{<0QY?)WL9fF;v_56_P`8L_}<;b?K2i)bm!rVhY zDE%ChRrF0WXto+Tb7ThohKjL^dV&51Rlr}J;`UGeIO&0t9ysZNlOFgVdLYc81)yOJ z{$bVdkNfA0(oGFXDJaP+xxF22K!PHS%9@{}d98H^T%qU_vI?^1<`f6iA2c>=p1+b* z9x!N9&iumC;@LTjV{i~D#=l(NjU}CImNEgg#{%! zWhGpLg(>RP0#kgp;kwCS>BbC~kv4MTxY5SAiDRxa&b`T)N17!nS?oE#U#+@xWmoET zBa_EX9P64qb<&uTqf?YfKXyt=`jn}YQjFBXtn8d@SFw25Ww^5D<3}hB1`L`46H1Gz zJNz98y|gZ)i%aJf<&?Nm3g+e&JMjTn}W1@_HY z=+=4L+BV|;=zVQ%uK`BlIH3gabHGD@U4P%!7Kv9ot_JK4mfQJA*fRT7P=PkhAfIh&bz<0uOBoZ$gj0fxuSO%C3_&8wN8HRBLum~{xe&A6r z9xxj)8*nM$V!(}n8vyG7YXA=c?gPw*oK9HmEd`7RtOJ|{=mWeHFuJp0+zS{Fct4;U z@E9Qd70DPZy;cC81GpLRQoshls{wt0Wq{H6Z5TCx{Q$oJOanXySOnM|>$*z7B*1FG z0>DPV6@V>(>i}b6*EYZez&(J+x){cOEFyd3uTZ99?Vb#H8(`4|hEWSx3HUbP8t{Jx z_&ngZfcpS@VquHkp8;zC-v`_eXyA;w6)+Ys?kwmJmOn16&T+<80^;I2>>b;B>$=Y)uve&H}6gECH+qd>XI` z@Et%S&M-a&bOE*kCINQDhB_0l1W)2t04@jI3|Ix&0QelB5AZd>=yMQ{Pas|ZM**e* z<^vW1E(ELuTm@JSSOwS!*b(P4t$;lMj1kvhx`IK z6Yvn=8o)@5*YLlf9^hGkX@Hji?gPvPJPKG1*tHkNKj0w1{{l_{y!v^JSHLNN&x7w~ zf+*Jl?gQ-q0_p?K1nhbt@(|!4z%O1xJOe&ggYf{E_*cXQ;8TFx06T7lUjS19jo#n` z><#!1U^3tjfZ2eZUPc}O>;t$FFcGj0a1!7lz%szdi{LlF-hdkclL21@%m!=#TnhL; z;6}hn+fW~HA>bjvO@NVo4C5eRZ@|b`P#>@lU^ZYX;8MWb0N23I7Xde--2YX~OMv46 zj{xoj?0T_bv;YnQJiiwH101je_5+Rv+yGb#xDD_wzypBy1195Kv>GrQaQ{xU2lzSQ zM!;UXpfBJkz(at`0VA=d*$x;F*bLYNIIs?Wyu>iZ0v?0h-vIUif7jiZPeA_>un6$q z^%&oPdm50}0DJ9$T+}N9jJy>7c@231@KeAvz%H+&9^f>;bqDFcGj0a0=i)$XN+^6tE7kYd?%%z(l~-M#K-`*LyLp z03Un{;{vb=umSMme2Xq0Z0geGI0?Y)g1iTxt8gL_EBj8TJ7QiEbv6sUy@1Q`T`(5Ni zzyiQ^fR%tXfX@N$2W$jv1^faqF2OK5yoY=Mm;jgwcq8Cqz&U_bfW?5dfZG8N0r~(V z2S9(o-hkcTM?V850n%R=o(Q-Ca5~^-z?%UZ06zsh0+{#_^d1QLfC+$?G$CFAlL1Qr zD*@L5t_Q3EJnLh`D`4&?h_fpYw}39d8$U&V1C{`019toj?E>}&+zj|F;6A|f@fhGJ zU;<#*LC6mhorWM@0s8^|888*_HNbqp4*^#Kj{g$<444hr2v`i* z0=NM%_DaMbU;z#AX@92K{sGXpfj-PiUtrRYfxaJfEW6D5(@c7gaO`VB(1(NG7=k_>^w&br z7lLkt@ZSc|&j%gp+te@D)NdQ;{Xlo}?*Y(r(LRQ!S-;qF;D;1L)T-4W3I}km&=x1oU9JgqoyS>D0k6hTiKOEA;ybE(P7m zhE&kIgYJ~?^FhBb1brpw{XoZbX!>xz>4PnxCxh;k4_*U(66j9(;0Wk5LGNRgZ|UPs zr(it*x>G*v2YRMM{oar{2r)JX^p&`e+=a!tC6>eQR(22{efhl`^Wy1<>&RyV`6431 zn34Kp1KQhy{5Bu=ep%rKe)=}h4a9_#y$3*_lKgw|*NqrH$`&#w4tm)D~{{eKTF;)b+vC=t* zRD#}u`cCsW8@`e7)I+N5L}-q=nd=4HbfBQf`3c8cOqp`3E<%f9C$q&Keh5VgB@dP^i`&x^RHh&jE zPRHK`mqY%n1pU}5XMb0N{w?Ui^q~5Up!*!^yFlL$Jr9D;{@w+QWggQ0J_eqj!NdN3 z+`?n=cOo1a3p+9)(=Q|ZCjZ==4tiP$JIg>H6@tDF^g*D*98JoR1!+I7p#-&P@hssA6rePje8Qs=R;DhJqMc~O$wA%DONa)CcHEGYUfI@m3EK4Yuxs z`kO&t7NULw=#PMYt+oAdwP+%LHNuWPpwGg6SQbXUpALF4=mBF;<`8Nt8!@;-xAptbZEc3E zJ>Z3zW?R>p{%rt#dkDG@^tRiB?>k%&8GRP^U3Y{&ALs|3b*qE(kiDs(PlOIm=b`za z=Y#GvW>(ho0lheYK9A`x;0A&IDd?G2I*lXC*>O5}df}azkv1OMO1pq713ek^fPE&(P)jJz zT^qo&96U~Q$TraL4M9Hu`YO;dq)lI?vKcJ@80hpqkJB8`1A%x)i2B1p&ks?5I_Psi zcUq$?JWl-$Qr}7cZJ?)z(C+}~<3rGofj&G0y$2lAAN1R-{tH(J=oHVxL8tz4%K6hl zuM9z72>N=^hg;=a&RRBr{vznuO_=>R-R!?@pws(TPV@tyZw37#YkkY}kz=6Of*vfN z(0GePd~|#O_J`qq6tae%3uwIEZ0;eGF`e9q_ppMkl}Ju1{(~Ka=!*3CTk1i*_PTHT69TIZr?6yms%3&iw=E10mBd zLk)k{a}el%1|8c{lb&Ms%M{Qb0v+krq^mT^^-Dk>y&-t}WXD3pVzqLpqr zj~)*CG|-*az|)1EY^{Hn@{X@lNTS_K}b7~KpRb@0_^kQW(g zkwLNbf!QaG;46O^&&Y}I8(6H{0w4Lj1@vq2&K=A7Jdm#C5MLZ(r{f>+E*SOAdlo+G zn`_O!Nyo+{40;Efi(QaY2KptS2b+sQ<~Z2^p2CfIo=ym@?_ATSZJ;j%9V(f0%N%q7 z^s*52W1!P}cTV+tpks?d(1(MbAA&v|^da!o1gn1GZZ?2?nT`0%2K^xU@^NH&Z6o>e zZRJZB_%=e$`H!}>{oX2v`qyLnq5(Xsz~kgAAL#2rA8nO!r>akFv_O~bpl`!{J$-PX)c~ap&i)`Jh)i&_Oav5bK*kABy`(`qOXPAM%`mc&hPZ zJ9vJ;y`N6LXfbWs2c9+P7bhO_J-zF9Gv1|q0{4+iENzjjhfTk_F2K82;2R4*e|zDh z{60wnJ$6%YI<@0Qj9m#jkE@Gq?O4X=3ds2ud>DpiJC^5%n?Y|0L2m&4bI^NP>(4Ol z@PU2=bn>m=4)H7XT{J3oc%rQhZZYYyFCuz8=n783A|K&=3r}NnrpzlL{r?ui{(8)i+5}z@OePQX_QS!&lbpO zKtDS9DHg)s0Nu$C37|LH=@vhvf&Lcg!Stl|i==)qI!Hzt;*{EFJ4QR(Q3K}fo1M?Q z_k-RLg5C=HTcA6|V;mer@`KUgY9kT!r$7(b`%~^vse$LO>ENL@oceqr=m$U#wvM7U zmZB4OgHC4!kvDWQ`*gNBu4^G<4|ts7rU~>$(4EGufr@0O6Ws;+76&@%m<0NI(0_}2 ze_l~%P=%x=@zDFVUxQ~-q=kp(xRgjXgyLcacwA2hf3{CDHiO$)NXi z-vCdrG42AL-rsEiJyf5?UW_pU9;ZG@0R4T?L)lC31Jirqq3kUKPv&#Z_O1iH0Q6Ay z()-0Re{r^#-aC#4{eIZ)_Zh|LN;7^81lJu7GAQn%5kDoMzlHnA&rUVvT)Qg58@V#7 zyhHd-l1BbdMTPFqt9bRdXNlE((0hUIl*3no-WBxAAj@Ch^1jy=sXyFGm;Is(xYt0Z z_t+O82m0&7-iUm2UD^Vk$`|l1t5t@q$;pOT4A$pCcUt2lfL94ngk?dh}Ljzb1no4tg+KU1%~J^cKiZv$jupSk}M9vjRLlAS2bzV_8pZ0Z%e` zusbvDu$*VU2KwL-dL9A&@(}b+{SD*MHNp4nW012B za%j5H7nLmkP9KcWOpBUpET-SoiVL*!>30%d7ll7unjiJgFyqcByodcrSkxcGj3wcq zfTL4Sz#F2nj0LLP4hOD>&I{{yDag0nANFi`*x$lCz8P+OK=qY2ejQGj@0_rho1$ig zEsDB3%%~)7{bsd26oMw&UKKUcpx+{kcB4l{jWcGnzrSW=)Z-DxEm8MG8cV~XY9ov% z!_LF~yJ1oLB8>0({)zCYPa=%JhZFw0@ThMij0Yo#|K*5079IOVSh!)l6dv_@xbca0 zR&V61w5S{4P4e$U7lm~nGaD0KSX5J3*n4Eimth^h4>RsDoum5Uj3q>TD6A>W8)5u0 zLMcoJoJoH&?BdIJhZ&i}UI;V(MQkSe4MM*XX8b!4ZRhSh0<~_~5%yHLv6EU>ZT7h0 zXSj8Dc+~a?qbWS<=?LRUc+`dn{UyhD@;Fl^zanzOmHd$Ws zzrw=44U76Q%iat0Y zpfK(t$hbagcN7N9b5X|5uqgZ~!cW4YzKAlGhev%7WxNqSv$=!ukBF$ZI~earoV}xi zu{tuUx`VML^1MHEFusb60%i&QDe;rnNe`U#z)26B^uS3EobsD;MS@>%qsRWF=nJLY ztpas@m(VwfKKle}dVG%-i88L1_FeTlt<&f%WgRm7kHa0DQ=y_)ixtmabPf{EiK7SNy2T{G1oJZdEk+ z%n|pELZ|a0x}p^@{`+$qdpa6tLv-nV+~U(z8K;SSr3<~Ilz$_N2%CXdocQV{Py?xk zqH+L^8Td*N!TjDVFsBIqY=N0Bb))fdVu;q;E%i?oe%=0$ZOR^?ne}HWuMkJINm=XF zBIWl*!1q!XcZ>A@?|@1fA9js~h{9t8P7^ps-~xfm1>P@klfV}R?iTotz)uB!E3m@= z)$&;a`v@E&aE!od0_O-^AaJ?B`vqQ6u4X9 zI|4ry_^rSWgQR_deFP2>I7Xo2LfQz|8AxHqjvjrLD?T}AR$f+tE3yB;{t1^2?W=Bd z6-O9>F-(8W$9_c^;YM9he1vf*C_d8A`Nk?M0@+9BnLvC8L+7JF{3(VWw}JR*Lyz}B z{Hcb{BZ2sihR!#Ecw{$;`#^jr!xa>Nx{+q{Kh=vcVvNk7_|AsT5k@!vJQ0XL%h)gTMqHd!x*b2m@NtixuLW(a!%Z;#A7}npBeF_y>UOsa zK3ed2s>9bF{0zfWlulKutnu$K{#@gFoBp2&f2{Cp`9BE$3>*FwFpxk0HW&=J#wlQ2 zDR{je*6V<&z=yKSRiy;zcC}r-1+VqjcE#K9+OA0scJ;H#*LGcI!)v=f8Dj9I?aCIr z^!i@gb)^wjN6v9+u1&9d=pduQ43+TLuNUAo_MZFp_hKSvmR>HgX;cIo|>w(IC|?7C0n zgN-k3*HoKby4~xiDL&mUJ$|Bbq4#^b-QJl0g2n#;2mCMxyv_qvRjOUBr}o=M!Q10x zvkgyw#VMFRTE5RFU;AO2gCA1nD1Edau7`Z`gWm6IKiuljuGW9Uqe_ll|0)|^>$y?z zVXB&;^}NBRr;fvCZTvb8t8IAQzYi7#+O<^d())L9*Ygf`X+3*CrsUZ5On1=pA{)Qf zvyTn0{T45HyWjfR@Y=4wJQ!%#E8(iY^m&A~i}Vc^CwsvkW^^%*23c1G1uZ1|AFx_#@#a%-x&%Rr$#9` zbFNhg-PR+5PrOdywLbKBp1Yvk*YXwqpake&fG2(OM=Shr1&p!Sh!cMAY=zM00QU=i z+XRKDbroHMvHR9KD2)1fHSi?IU8c%?gm|Cemkw130mg^GUtpYN=yM~ijQKj^B>z+; zztOGuvz5c*ss z1~(+XyZHZn;lESxPc2jk?YD1$C;8KC{TqRWEXf(ZTJcM_8E*-G%NT{%I^TY};@_5{ z@Y>Jx`$ja6qNtx&LV;lT>w%|sUtFR1x=W?E1m7ZYK2Pwsc2@j#YZT%V!PD=xAURJ> zRESFjKN1~E_(7=(ktz5#;K>hNW-5e^^Uk;-{z;P+{#xO$1pWf7d-JOl0%6S8df|5! ztFn%(-Y}Nrd|}h`Mc}F3Inx#YNCk{N!vEhAg%~UNxHA>MK97~5nu0r&Ftf#8e0s(ioTHz84z{Nkw!0XDu8&Qjw=pX2KBk^(&O zPn39z7ye4%W3m6T@3S5dISD^0MlI)2k#o;g3Jod(yH3WF#zhjmv)3?WTJq*0oO<~l}mmTmOFH&+gUZ?orUcS}~ z-aA{Bwai_>Q$HFr6&~rAuYU@^eO+`ZCML31pD($D|4QIV|2?-W1l+~f6O5OF1?&P| z>tI0}XP|>f&d${en=Hi5g4fTtbiS$;{3S_>QIESDkT6M3gRCDgo$>X7;3r+J%6$cY z3T}wMdZj{W`E!9M|LEs>8oxmJ7f77I9KIR_zd`W*1%C-9R+7JRl0xWt_D_OeD)Fz! zQBO2P{6nr${969Kf-ke>fn$Q7Xv?c}F#t(UzSyPx`C7QL>w^20e0tZIu0Mi5Sik&7 z^&NdSij$^>fp0B7YU*rCi=M4V9yJhj_F`sFRrXVw+UUj3XJVaZn^@Wh`l0jTw-=Ou*S zJX-PP2)}obl4D;#tY^G1S->ISNzRQTr;E@^1}l8Q6oruP#|P!X?L8ZKl2biR@pltB z@q!O&#lt$ae{w|@QABKIS-E({AT2Jiig}Q6+(}fe~Ntj`ZfoAq)&(6 zD}J2^o&!EueEwbd?dyceSeKBT7b}$<-7njLCpqJ9RQO#A81D*y{Cx_c{h5R~WB=T$ z@M4DXuHYZLP2qJOOS($Q*Y8IlJ@R!O7%$P>`+WRNy6W;#$(a+!~ zeReNYe7_a`1H%=5`?U%o(|}QdfYE&+tPCClp5#oI@zq&~QJCj~@pl29_)iyp-7lLQ z_`enYRcT7FTjW0n#YoOdQC!QpI!WP&OCCO7_#X#8m_89BMIVW`?!x~k!LPhmA#@%d zGm7NkIi2|V0^y$lJoV!`8ILZ(&jp_J>?(QkT)}S;e5Fb){Ry2w@SYtT>07uJn7lv z230N){2}4rlcW&R4aRH)66ya1?4V2A^^@T3`?&Gr6u*6)^Mc@K+2U~Yc*P$l3dX2r zjJpN@?cE9?)r?zUC+U+ciLJNr-!AwBQC#P}4}lNnw^j#yJ_3g1Pb^V_pAh*k3;quh zKLZ8-li;_bAL!C;Jw8FnnduG0hhe;t{PDvSUfVkxc}PNvlRci(#CIuU%!WTso>`b zzZ>I^F71c!1aI%JDC8-UZ{Mfq3%<`SN)G-09lDwX|K%iAzC-~d|9U0o_Y$8vznum? zl5bykT`73`xkRNy-u^fE$^ZI2x>#wqRpcC$c25)h9g|Jl1;yZA;7Omw9)*2Ni1}Fe z5WY+%kUoMx2z(d0w}P)3A7j|(>oD{m$+4gJP89qX@Dp8+C}6}O0D{Ty#dw?>$NLtOyai0>P^Yc}66@QE*2F?GT;FGEOCHwp=L1i24pu1v9YoF|;DgC|L*$%arWpGQ|G76S`5Q+n#5lpf zDEQr2N6@9$;oWah{5LO9ciS&r|&U?oj;aDPXJ-{7SKxexDIt4;LtYcZw=&of8Wc{;3Ip_>X`mJv$&j z(Ur+R@w>u=|8sGemb0u#$+4dwo`$?Yc2!PP0<_<51D@pT_xp8zt`Po1ws`(t@b>3i z<;6<=o?(IVcL@IGs}%k;(Z3_cKj{;0lfPK-rNXc6`W$%D(|+z0UZUg-9IFI(7Ws<= zUnB9O$Kx5Lihq;fwfv_Azv4P2K*xC);*9i6Ua0VTynK2s>C^sNA^i69uDybP@wcju z_JbSqCCT3>_R26bwhBI8`d8y;BA$Y^`yAtO9wl+||1@_kK$2DE`35zh0R+mb@RF>e zfGFeiJa%T)BD*`&yW8ySGMR3d1q_#-?mM%s{i6HM?93)U5{W@$3?e25BUy#`h!Hiu z5TQb;NsNh+Qe%i3Q-xMxe+5Y_kH}#?mF~3y)X6ffkrJXAQCqDDK;|w@k;CU%O@pcC2^}S!2YHmlL zr_k*j0i60j0r^ayi}_*w2H~U+azN$3b_5x3UqZ(#V>4L)`=;Cim4>*{gpQ>gt5tQ#dROaJz6Y3Cn=fb_U72OUPW z;{s0o`L^KUbETp02;AH^U3&|cUoi0De!vO;uM~WEj^E{dhlOA1zI{yK zCV#v9Ofpp>9fEO>$QKt-5{XorjHf-gXMZ&3*C3C{OLbO!%j; zE$b#}=dltue4e!b+kg|DYW^=^>n+mG7e!CINPc)i;CDlQ(npW?)o&iR?Q1^vQ-MDwh$HB0mHwE^--7w0kEZL-2>cl`&tv?vHHUFh z`}*AI6#~Cr;JYE8>7)6{`S0ZUG3_3g0#5CGR|r(k!-oZ)xsuz_YxF5;N1sPMkAJrQ zTFRUI?)g9A_8$Ttr4OcEeNK57!yf^C(?`=?O~dywT+{pMcXIiU+{Ex1epq(_PV4>} znaE!e_`OozoX@lVl-n`)i8l(pnE1aN<@MO5Y4x~4+PP5purBi*Rld`H{v#=G@=51- zbo*}roYuvR<9Zx$vP+!xgrz=b@x$5!KC1YkAurB&H@EXjk&n8ccMANvgWSM&X=nd? zxcswT8is!waC+}Hnj2${y`u8-o1au?L6x+!|Co2`YZ!Z?VNdxzdxHF);|jT zoEsT%6!S};z3=7n8}s~KxBqp4n|6kC-WR>TF92N8oy_wyxjE}~syyuK*DzpQ;BS@k zcf5oFI|OdMpW@s)KNkW{?VI-1&jL>K`MevrjyG=#-r3H-$H0FCIO(Og9p^fyO4Xmo zlt1?aj6e52&IPwg`AYz&elCezyG-DB2>e`GUp>!1QSF>%Egt8B8vjrKb8hFMJq*|L zbFaY7xW{Wh7`-kZ0-XADO@-U}9zU$VRpnuyzk>mS4%RwgFD-W%AoGDR1ugKOpd((5L95@{Qto@E&g8#M^%rxM{bk ze3;8$bxbv5X}is(e0C`wX2;B7VKjUN3baWozgb&+x zaXYV<_TMLPGk)n`1U`2q7u0n9h``PG(ieX``n@^8qsDs&;MAWV3%%&|o%#gBAJ6f7 zD}tbBd{X99`g4W!|M>#{zjX#^zV}vvoAG8}7WgNZxV)yXl}~Z|rXKYG;IzKq7rw3e z%$KCRi4U{)ay#Zc{|(^O&VASLd#{!Le^bHbOW-l~X)b^J^$cvuZ+iu9#_iMvZpN9s z7I2zp^W4N&RQbRQ<8sPeGX<9vgD&@^{1jioWc7A-2OKW**m0E7wU0YchD_Lcy<*ZiPuG6yJnq8_k z>Q39T?Q+9jtu~g6RlDpqT5Y?ywqcbTwPw|Eo$}bsTYY( zT4@z)j$K}>)izNj@Xba^H&hfAD(>c3soAvb>+dTg*%?Iqk+;tK>o?UY4gb^+4RnF#equ45|Dz(O%46EgoxRsU^jA_zqNWI*3Hr%zA zbAq8x6}VVntX?x#tyrl?y^G+$t36A*4rJ}@!Fk)px4j2nZfExiaNqorWzS!GaMyv{ z9DWO7T{#Q@F0_C-vUFGP*^|!}?82_y3t8LB&o9{Xgb|I+Yby0}<0$aw;QqWjW80;T zjZ7vpfwc!Bp+u#=nk(hqOr~_C2(oGwD{ebi%I1ssCp$xARBSofrTzISd*{x*3%T8M zhY#D6V^d=j8TFdEmQ!>cZz=E|G&XB5Eu$^RvFnYpV-uof#_haaD{fS3YqjiR9wVoc zQ_W(fmD`WM`t2HUD?`JSb;x4v(8(RrZojP+^D#qIy_~ESo4F)?%um}GW7TQ5bNG`c z)f+PX1W-0x*~l(YziBW$nf{W2dP?qOq0t1*s-Acgo2)x}zVT*b`mktNAg7A=W!i2o zzYD!JdJa%Fld%ujRcFPmHQFwB3TSl_^lBHePK9lyY7U4%on6GBCPSF0#&vZ;AxXv{ z;mouaE*hm0uK3BZQZrbnQlq&^c)gbfjLFymjsoGSBn;$?v)X8F<`zp?3^X(C{USV| zU}rNk9#9vj<|c&5M!oD4gp8|>Yab*g;|WioCDGEattr8Zu}!;c&;@c=EhXYJ+3Z{< zx4y8P0j=g|I)?6g6zwjGhy~?@iD}9wCRZ^50J8HWi0$hNIbUul67QFFZ7(*PkZ;+= z{iRw5hfbMkC?;kMZq^^1`WZY9peRm}CZp)LC(s!bcZg&P=r0qkV)WiRY6i$_rg^8E z&tP~YZy3*5^ewiWHnb{kW@6mqI#5kOhDwMM?^mKA311;B^!RNDSJQn<(y}24vO7Rj z>&0r*ZK?M`GOsjRM~kg8`adWoWx;!wh}&$3g4I}e?3S|v4X$2t6lb1tH=B-H3MKfa z79ePN&{V}EaIK{%aXQqw$YytVx_mCb+Xf5CyAzoRP2UC|@McF5K>jK_cNGvNn_XYZ z&)bUyd%k&fVZ4KZBv~_$=Oh;7v(Uy`mDMAzA_$L@`}&%~WYSlLJHf2B&9Q)**x}Jl zrQUX0*l}TN({ix2D*{KBNuWn`H4k#jhqY7beMxcI5LaXh&CK|35{c-mW=U4Wq#}$f zrnl4q2;$ZHn$pE5>&{VMb`5>LgZMnB@Oh57*}8$A1L)<%ndc@TZS&jhED=Bt6f@t1 zwvh#a<*ve?hXyBpr;b6pF0y>Z}a~+E-OEIZ-+)#L?pZ ze9m5CMU{EsUdO$LdEu5Jk78rlS>d}*wzjxmX)JlQQ|A>*Z(Q;o2^wi+9`f!a6yn@M zZ9JP;-Bkj5Qt8Y#HiR{(HMzr}PhY?Zjb>S1FXa{c9vPMKPDd0uU{lq`QCL-%8*8+ah?q0%r(@*Vl5C3hZy8@Q z$Tgdtg^bmF!6qH1{xVz zR^sNFkj1oF%#VBOaoP$ENpIS7#H>1_?f~?n)P#&y6Nq6!Ss-;`Da2>ci6u9PGXuw(RN;w^?JzDutWAO%Ua$ONu2E$t{t!H7UM-ymgQi<_Y4X6X4sXJ6Nw>Dn{b@9Z!GODq7^(of90d6Ar zfN3*Ou}A%LJ17Y@9#YsN_og7BfCYtgj2QDlH-%x+R~T|v!)a5l)NMGq;1D7o%BWRv zWeG!1Xa>@jLdK$G>&g|in^iZw&32Ep8b{$^D)SzCJ;cIze)^`;i6|o)|0w>(q-si4q@^P}cOpDu*Y2F18Jm=~@3$AzDl8)#mSm!gC&JJqijje4hy+mq zMvcuJj6IkZn2Tw6f&O5am9|}9t5)qMf|_7drvQ>=Dd^cSuhk4-07cyB9F#$@XBGKT zI21sDIF_w-zBJ~=xryFQ`iQ~=1e8%&mLpn-J%M{wrjsEfk18VQMu|I~y%=I32PL)| zOZ2lZ7K!`j@^&i0HrSJAY<7vmj;6g@rrE`}PK<=d1jb%LFd$*B>asQ&2atD*oiOb5 zLY$Ub%P5x?$uPTy@UKv`RHOzn2s$hErdDH`6w>imt#5@lC<_A|gTkDkuFjATREFHI zDjjM$BxY5+7>5$ITco68D3JC6&&U#3fOH`7COXX3bgY2V1&y#V_4Y}M`H-lv#P3Aw z-Cm^P(*hn^aLmN7>T`H{Q<=W;EZh++qi;;;iK~M1<)=EBAEprt66xI`i)Ln$11=kg zxO9rOoU$orfwmp{)zNXK5LqoEWI~gzdA3-oj)gh!X@MK<=z5BeUp{^0FLtj(=%EBRk7Zk*1-5b+VqT&6U+wsz?!7@Um zK8Qjeg@Lq1@j_bkZV!>$Wd2Y=XRd^-Vfu%m7%NSJwP78D?P0=J##{ujF$NhaHgvI3 zt!CFHUQg{!X7Y|p!PeOdKFqk%>%YNu(6OFO6futNI194xHzS=0t}=3eke(9l1qbWU zUhsp;lc^QIEt5dZ%rp;8lYJ$daPr$BI=byBr>D7d!h8{4@F^9|vHCu?KwKn>5sZHH zVN>FkA%U?}L9JTF8?CqNO&n5jS3368v-{=PkEbh+#sWO*!y!2^$WGpTd#Or_4#lga>muyK zHxXxl@z)^nX0n%ktG_|khK*8+Fbiq-|8{B?P!bzlgEWg(Lti z5pbbjJMk0;JcXKKt+H_FAP|e9i;K&Z^$ai_QK-ds+ote(oGDysWKBD@=Q;AFabWq_ zbg0oYpne)>1rQQNIur(k*?Y$DsR1_y9&4y~l?@4-0 zqaW<0s5q=5j!F43g*~fYUhIFA4K@&ecoMM0%rpin)_r!-MfI7qA3B^|bt|}Ma$x`!w%7Al$XLaSJB zSHabde zV-=|?rbtoBL1TgaMEk7<*tF5eHPR3Pr5!1!*izYHmyp8g=_Pf(Px*)f0&}>&P8OEI zQ)at*J~g?6j8^-6qgC+4B&IAqHPF~BDWp1a?gLS{p?`pBP_7cvMEa*Wva={+TMX;M zCk>}p@mgKaOMA@z#Jq1J=d&v4av1~*s6DB|P)NUFm|Oc`GQ-$pB*U)I!9eo4a@GbQ z*nmuj+VVoyx8y*tc%?^8uhW4u7yzIPjR0*qu z1x?||7BUfmIY*`@ig&8h(TaG!3`ZRJgE~wZp=jsbK~HF^)0rSRWe5e{45F*BfEhLF z^>Q$cG@8_GnM##m116i3gXEVO5971NK#Y6#ukCA12xnHK5YP}vgQkoSInLHLyfa;5 zDQEF0U)WDQ)l^Q)WJ(7@Tlv`ekqT0#X+2cEMZ5h@0u3wdf?{4oDguvrsMccbL)t#q zs3KooW*PzO{HIeU%Vch166YJ*jjFQ;>G)P#bWoOmS387weiO^UC|jG(2GVz=U6S`1 zdI`)p{?UHQP@=+p0)le*mbH!^p%-yRHXSW_0z)H(Ie2#d0W>G0Yko?Ap&U%4Bg*MBy7ankYHrtA(JUH zqy#{-G^YU|qVUM&q~A^$t5U8mh65;wQp|udITpWlDGAu@5za#}G$r9AT1nrq&bob8 zbbGbu%!&8;1S~rV5~^qee_PwP^R&4@`SKz*039h7AWg#O-B}ycS`$Z3c@if*_Lz{g zg6W0Ob>E6G@}9+^$`IzR57E*+=8I2vf`?JEx*R3O@qBzeX3#~-9@NTo=DR~e9ZsL4 zV`dcd+~?pVGo{N_DSW!^W8?M8g=OT@fOH|pDR?9Fdau)c`KBh}xs3J*_>ouM;*Cgy z^&_F_P_#Z1O~Y1uo9(+BuG`@AEy|pLNj9trQPKG&%60_lW^f2YC+lKJN`fc`!DqKa zNa`evJenPz?<%{fHb>}C{b)EC#pvU3^+uL@!w^S(P_U;*VbR5PGp&M64ByR3zyP83 z1hc{I?I{}^v?AD)_UmkLX{v91%rdKN&CPxe>_R?gN8D|_7u>R~RGj}ybladyE6tTO zm`9I_cpzAw40s-e1dndO*=3&V1dkyt9E`_5>^z1$7Dg9o7!|7p*&Q9I5)QxGs_mXi z^R5$@_%mI0`ivCJH>!vr-LsT$*yTj!Q>c&t>G|ynte!$P%MtG^m7a;E7U>DR?6$GPQHW}IcNn) z`E3T<4eM-a^7lUGKj`)xQ5VPx6u9dnPO?Bt_88$-pAqX4$|gA4{WN00Ror24CMT;m zFkhDHv<$)231GDu+NBlpo(D>?ak_nl^y&x(pIBf4hfHgnjxC^{)M0PYTxOJ57uYVb*01QumamMWq|?xC(g%#9EEpMOf$XkbNtuI54}R z^d7t)R9Bw(Zr#iT$1!tKEV}TdUl|KGWM({%R-F0)1nCNu4r7t!kTRX!u?q)~Zig?5 z8e*2SFfM4@YIKYuHZmhz^a)DaXn<;)a5Qc9DS36vEJznEMHU{ zrlR^T83^#Z7cny;8P-csMw(qSP{ibuzzUOv(2m#dW&HkE(y;7|9}p z(`E*lZ!$8D;3mB{lw>|VbnXbrPE5zW9T%M%sg~GVAA#kp$@aSyfO!KO+)BHN)VjtN zT@G=u^KlLbz#X_yO?^4}-1{5KP$>156w ziBes>%xl1kX)o{95kyZoEeh$N+ZZ`1b|D|(zQXojUuu{v#-dxce(;r`?!;PJ92Qcl zR-BQFLdAsVL(Qe|&tLheT4_=`<4qOUnqjWRd3u4!rN){*nZXx7ZvlCjM?ZB&v3?mf zqP(zkip;!bkD1Oi`rj@MB>fF*rseAFZ8*&8<`QO(>- zrJ{n|37)75TQp)sWH(V8xELqNQEZBK*xxPO;l#2VY1Tb|9+urZ-@HY1W#BYa%RWeK zo;(cXr~|Vsw&d>W^stpwU6aUSEDMUSms^ddG6zMbmyz9CK%-6B0BTNUAc%l`UUMoH zlqgMmT8)~2EGDQ;Mk#Vy{ZGy~yIAUs%Otf3%=GB11qp z)@|#h9GPs})2GS$ovsWCPw$ElySTPNIY_)~LV(BiO0n8@RK^ifN|a6=$U1XaYa}OT zE$MCxx}}ZrX+E)O!npG=K&Hc0F2%wn2c=Rq6owJ2gO$bDAB>3@y#j+v)eqQo{gN0( z0$x+x)Y8Vdx_CM;%s81*hGv^qvAq9)?>I+AS3S;6uy z>xlMlkPJ~drg3*^Yra)HN~ed_VZSX>6+{IOrsmnvb7~$)-(YGUy6<8!7|X2K+>S-3 zRjE}XZJt|*B0XCG_eNR(MbX$gi8PGuU_wNWO1Y&ERm^~g6p;LJ_cRiVW`qlD8J{-> zgit6?3e&|tbm4a|*-%u9DKGqkZcd;;4t)$iJx0<8M>7)Zd3^|bM!oRB%%tS%lu#xx zW0gat<*00{!I*qz(}Q@4!I%9jd9k_ZVU8uc^lrYPcN~0!y5V(S2NI-^ZkldY7-MpaBy(>v zw$X)nnpXEt3tZyeL14y0j!TX4(2^_2fJz5nrzpiv$F7vHFOjVAh?2c-qPh;i6OHv^ z9$;51%O$(iUW1ZdQHGQb6TXTJRwjH%uY*6f&(|e+0 z;6N2)kfs$UX6w_j%6>M0)VB=j_R#0#{Tc*j$kW(bcVcqFdu~Qw-T@K2m~$q=&O?7m z6VqPz6YgH1M!GoZOXjU~FNAI|Q+pIxJycpF(+BKJVSk2`5FkW-lJf%t?a8r0(R*^v zJ|Swu*6t(yllP=kbAy zc?K9-WUUH|*LfkTsfp0?d)$M%IP4=9p_2(PDRjR!GKpvj zME{LEe531WbnIhj#@XJ&ac_q`);(^gmW+vb9mOU>Z&L;ah;uj!$tQEfsp4|D0g^r8 zg2yG;FDV;xXj6F@DU7bd+hC4Eh@n5s*+L`l;y%6AkQo;=oH}zem`k>dSZSK=z&0L} zfJm(k+gfETd~#YH99k+)sjEv{y3&`gh+w4Vg6L$afH zk5!0If!dcmzZHw380L>q5)~QhMVHW~QBI2=R7pT89f!jMQ`@`OHK;H6NVerK6nPV?Goc%@t70@gkxR%ux!ZLUEa|5>8WlF)$W1(Ni`{Q#I69 z4`uP;9EfTLr}jGTKAOOn*N;}9jV(FtHFcNP+?+i*Hg4q(?6nsf#WHZUkmt>lLR-oO z5M>Z6916>g;hKj*RucITyeZq@Is=)qOfHFFu}<-M60G-$@mA!D$1oCc8}hwO=$k#e zXC2olLF&o0%%ndc;M zNT*Lhv z9YDpo__h>ZcqJNkGUN)Y0hF0lhp!CDsb@@}WR-~4^E`%?-qaYc?{)oB$?xD@cY?P@ z+0B&yqRX`7_sIMX$#or5N02*EhGB+IHu1ehA#~4)l!Tg$-b(6uY!gfeT4p=NpWr5j zwU(2|4GkqHQ5F~82t;Cqrt2ibP?j7vp|YS;5!J|nRjG@X?pnOLJx|}o?qDOi~FTwpe*-m%l2yQdP-9||yI|Y7XB7-D?a!uQX z_{~DU?!E2BCT`^{$0Z9-QycBW8ok9*E*Wa*NKNePdp3;)aGkMT zyK`5-+%Ml&>uY1nYn5vGib~lUqi;uw?IYG$d9#l8`02LzmvyJr#-ZcT7aPB|oNAFO z$Y0H>YmKS!zA^kcw%Wi~7yA)wOc}JsS`9i%X^lBY?3EU72eyxt(TM(r)=MSZ*(f

)M`jFW2Nx90B!sN z{y#<9dcXXkpBEbMpt8Zw#rSe6{@3+CFMsIgwqRlW{Z!+72H%7Azbp0i^La*jv;I7O z|M8PgHuU>XdkR<3&jqRfG-vYKzJ6XN6@C$AXzaTFx%itthwwjD z(e+%Rps zniDBzS>s$^KYv-i>Ic0m_<19~1nX~;`uaI;R5(j2>*wu8{lzIRpr5+GQqAkXhQG_G zf1}jb&*!Y@n*7x7)zG_)`ZwRfzv$=FbwPO=!?8Xf_4WE$$EBb=ulIgnxcUB%0!;I# zi@oAKT+Vw6J~OnFe*em-fA5F5q<-#vv98HaJ#QNNclaat{-1n{f6>pogdTNybNt`L z4`hamic$gP;5O;r*-Mub+?NmuKRCUH>7e|B%$z<#Yr3yMF!%KT!X5{fDLg z!&3iV`Z4g)^*j)MC*0TdZ+(J)x%I#JIW7yM=|k7o>-Y{73%>usC%N8(|IN>x{P6zO z_4V`Vs2r@%-%$JqT;(#27}A2Sr=RB-^)EYxTC=Rn9^(p{Pw+RN{`L2BQJmV+smQni*Y)G%mu{Ax#t>CYH_H2Oxsn^c2oDmtdfa+kM4!6v lT$2C&-Z;PE$p?Z^Z+1Q4+4w7}{-fXL`j_aAN)6+y_5XRxpho}z literal 111528 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 +#include +#include + +typedef enum { + CONSOLE_COLOUR_FG_DEFAULT = 39, + CONSOLE_COLOUR_FG_BLACK = 30, + CONSOLE_COLOUR_FG_RED = 31, + CONSOLE_COLOUR_FG_GREEN = 32, + CONSOLE_COLOUR_FG_YELLOW = 33, + CONSOLE_COLOUR_FG_BLUE = 34, + CONSOLE_COLOUR_FG_MAGENTA = 35, + CONSOLE_COLOUR_FG_CYAN = 36, + CONSOLE_COLOUR_FG_LIGHT_GRAY = 37, + CONSOLE_COLOUR_FG_DARK_GRAY = 90, + CONSOLE_COLOUR_FG_LIGHT_RED = 91, + CONSOLE_COLOUR_FG_LIGHT_GREEN = 92, + CONSOLE_COLOUR_FG_LIGHT_YELLOW = 93, + CONSOLE_COLOUR_FG_LIGHT_BLUE = 94, + CONSOLE_COLOUR_FG_LIGHT_MAGENTA = 95, + CONSOLE_COLOUR_FG_LIGHT_CYAN = 96, + CONSOLE_COLOUR_FG_WHITE = 97 +} ConsoleForegroundColour; + +typedef enum { + CONSOLE_COLOUR_BG_RED = 41, + CONSOLE_COLOUR_BG_GREEN = 42, + CONSOLE_COLOUR_BG_BLUE = 44, + CONSOLE_COLOUR_BG_DEFAULT = 49 +} ConsoleBackgroundColour; + +class Colour { +public: + template + static std::string getColouredText(T colour, D text) { + std::stringstream output; + output << "\033[" << colour << "m" << text; + output << "\033[" << CONSOLE_COLOUR_BG_DEFAULT << "m"; + output << "\033[" << CONSOLE_COLOUR_FG_DEFAULT << "m"; + return output.str(); + } + + static void foregroundColour(ConsoleForegroundColour colour) { + std::cout << "\033[" << colour << "m"; + } + + static void backgroundColour(ConsoleForegroundColour colour) { + std::cout << "\033[" << colour << "m"; + } + + template + static void consoleColour(T colour) { + std::cout << "\033[" << colour << "m"; + } +}; diff --git a/include/logger.h b/include/logger.h new file mode 100644 index 0000000..a07c33e --- /dev/null +++ b/include/logger.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include + +class Logger { +public: + template + static void log(T obj) { + std::cout << getTime() << " " << obj << std::endl; + } + + template + static void info(T obj) { + std::cout + << getTime() << " [" << Colour::getColouredText(CONSOLE_COLOUR_FG_GREEN, "INFO") + << "] " << obj << std::endl; + } + + template + static void warn(T obj) { + std::cout + << getTime() << " [" << Colour::getColouredText(CONSOLE_COLOUR_FG_LIGHT_YELLOW, "WARN") + << "] " << obj << std::endl; + } + + template + static void error(T obj) { + std::cout + << getTime() << " [" << Colour::getColouredText(CONSOLE_COLOUR_FG_LIGHT_RED, "ERROR") + << "] " << obj << std::endl; + } + + template + static void panic(T obj) { + std::cout + << getTime() << " [" << Colour::getColouredText(CONSOLE_COLOUR_FG_RED, "PANIC") + << "] " << obj << std::endl; + exit(0); + } +private: + static std::string getTime() { + time_t t = time(NULL); + struct tm tm = *localtime(&t); + std::stringstream stream; + stream << "[" + << tm.tm_mday << "-" + << tm.tm_mon + 1 << "-" + << tm.tm_year + 1900 << " " + << tm.tm_hour << ":" + << tm.tm_min << ":" + << tm.tm_sec << "]"; + return stream.str(); + } +}; diff --git a/src/crumpet-engine/math.h b/include/math.h similarity index 100% rename from src/crumpet-engine/math.h rename to include/math.h diff --git a/src/crumpet-engine/entitymanager/entitybase.cpp b/src/crumpet-engine/entitymanager/entitybase.cpp index 4db1a60..6c3d113 100644 --- a/src/crumpet-engine/entitymanager/entitybase.cpp +++ b/src/crumpet-engine/entitymanager/entitybase.cpp @@ -1,6 +1,7 @@ #include "entitybase.h" -EntityBase::EntityBase() { +EntityBase::EntityBase() + : textureDimensions(0, 0) { } diff --git a/src/crumpet-engine/entitymanager/entitybase.h b/src/crumpet-engine/entitymanager/entitybase.h index c78726e..76a4994 100644 --- a/src/crumpet-engine/entitymanager/entitybase.h +++ b/src/crumpet-engine/entitymanager/entitybase.h @@ -1,12 +1,19 @@ #pragma once #include +#include + +#include "../resourcemanager/resourcemanager.h" class EntityBase { public: EntityBase(); - std::string texture; + SDL_Texture* texture; virtual ~EntityBase(); +private: + std::string textureRef; + std::string textureSource; + Vec2 textureDimensions; }; diff --git a/src/crumpet-engine/entitymanager/entitymanager.h b/src/crumpet-engine/entitymanager/entitymanager.h index e06a6b8..5187dca 100644 --- a/src/crumpet-engine/entitymanager/entitymanager.h +++ b/src/crumpet-engine/entitymanager/entitymanager.h @@ -4,16 +4,15 @@ #include #include "entity.h" -#include "../resourcemanager/resourcemanager.h" class EntityManager { public: EntityManager(ResourceManger* resourceManager); - + int registerEntity(Entity* entity); virtual ~EntityManager(); private: - std::map m_activeEntities; + std::map m_activeEntities; ResourceManger* resourceManger; }; diff --git a/src/crumpet-engine/renderengine/renderer.cpp b/src/crumpet-engine/renderengine/renderer.cpp index 884e079..3aaff97 100644 --- a/src/crumpet-engine/renderengine/renderer.cpp +++ b/src/crumpet-engine/renderengine/renderer.cpp @@ -6,17 +6,19 @@ Renderer::Renderer() { void Renderer::createWindow(std::string title, int width, int height, ScreenMode mode) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { - std::cout << "SDL could not initialize, SDL ERROR: " << SDL_GetError() << std::endl; + Logger::error("SDL could not initialize, SDL ERROR: "); + Logger::panic(SDL_GetError()); } - std::cout << "SDL initialized" << std::endl; + Logger::info("SDL Initialized"); m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN); - std::cout << "SDL window created" << std::endl; + Logger::info("SDL Window Created"); if (mode == SCREEN_MODE_DEFAULT) SDLRenderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_ACCELERATED); if (mode == SCREEN_MODE_VSYNC) SDLRenderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED); + Logger::info("SDL Render Context Initalized"); SDL_SetRenderDrawColor(SDLRenderer, 66, 134, 244, 255); m_isWindowClosed = false; @@ -30,7 +32,7 @@ void Renderer::destroyWindow() { m_isWindowClosed = true; SDL_DestroyWindow(m_window); SDL_Quit(); - std::cout << "SDL uninitialized" << std::endl; + Logger::info("SDL Uninitialized"); } void Renderer::clear() { diff --git a/src/crumpet-engine/renderengine/renderer.h b/src/crumpet-engine/renderengine/renderer.h index 685c3db..e505009 100644 --- a/src/crumpet-engine/renderengine/renderer.h +++ b/src/crumpet-engine/renderengine/renderer.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include diff --git a/src/crumpet-engine/resourcemanager/texturemanager.cpp b/src/crumpet-engine/resourcemanager/texturemanager.cpp index 97e4e98..14e1477 100644 --- a/src/crumpet-engine/resourcemanager/texturemanager.cpp +++ b/src/crumpet-engine/resourcemanager/texturemanager.cpp @@ -8,12 +8,14 @@ bool TextureManager::registerTexture(std::string textureSource, std::string text SDL_Texture* texture; SDL_Surface* loadSurface = IMG_Load(textureSource.c_str()); if (loadSurface == NULL) { - std::cout << "ERROR LOADING SURFACE " << SDL_GetError() << std::endl; + Logger::error("ERROR LOADING SURFACE"); + Logger::panic(SDL_GetError()); return false; } texture = SDL_CreateTextureFromSurface(m_renderer->SDLRenderer, loadSurface); if (texture == NULL) { - std::cout << "ERROR LOADING TEXTURE " << SDL_GetError() << std::endl; + Logger::error("ERROR LOADING TEXTURE"); + Logger::panic(SDL_GetError()); return false; } SDL_FreeSurface(loadSurface); @@ -21,6 +23,8 @@ bool TextureManager::registerTexture(std::string textureSource, std::string text m_textureSources[textureName] = textureSource; m_registerdTextures[textureName] = texture; + Logger::info("Loaded texture " + textureSource + " as " + textureName); + return true; } diff --git a/src/crumpet-engine/resourcemanager/texturemanager.h b/src/crumpet-engine/resourcemanager/texturemanager.h index ecb1812..3593df9 100644 --- a/src/crumpet-engine/resourcemanager/texturemanager.h +++ b/src/crumpet-engine/resourcemanager/texturemanager.h @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include