diff --git a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp index a0c0ebddf..852af5946 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp @@ -43,6 +43,7 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Tile::lapisBlock_Id) ITEM(Tile::diamondBlock_Id) ITEM(Tile::emeraldBlock_Id) + ITEM(Tile::rubyBlock_Id) ITEM_AUX(Tile::quartzBlock_Id,QuartzBlockTile::TYPE_DEFAULT) ITEM(Tile::coalOre_Id) ITEM(Tile::lapisOre_Id) @@ -51,7 +52,9 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Tile::ironOre_Id) ITEM(Tile::goldOre_Id) ITEM(Tile::emeraldOre_Id) + ITEM(Tile::rubyOre_Id) ITEM(Tile::netherQuartz_Id) + ITEM(Tile::netherGold_Id) ITEM(Tile::unbreakable_Id) ITEM_AUX(Tile::wood_Id,0) ITEM_AUX(Tile::wood_Id,TreeTile::DARK_TRUNK) @@ -84,6 +87,7 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Tile::monsterStoneEgg_Id,StoneMonsterTile::HOST_COBBLE) ITEM_AUX(Tile::monsterStoneEgg_Id,StoneMonsterTile::HOST_STONEBRICK) ITEM(Tile::mycel_Id) + ITEM(Tile::alphaGrass_Id) ITEM(Tile::netherBrick_Id) ITEM(Tile::endStone_Id) ITEM_AUX(Tile::quartzBlock_Id,QuartzBlockTile::TYPE_CHISELED) @@ -153,7 +157,9 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Tile::leaves_Id, LeafTile::EVERGREEN_LEAF) ITEM_AUX(Tile::leaves_Id, LeafTile::BIRCH_LEAF) ITEM_AUX(Tile::leaves_Id, LeafTile::JUNGLE_LEAF) + ITEM_AUX(Tile::leaves_Id, LeafTile::ALPHA_LEAF) ITEM(Tile::vine) + //ITEM(Tile::glowLichen_Id) ITEM(Tile::waterLily_Id) ITEM(Tile::torch_Id) ITEM_AUX(Tile::tallgrass_Id, TallGrass::DEAD_SHRUB) @@ -162,6 +168,8 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Tile::deadBush_Id) ITEM(Tile::flower_Id) ITEM(Tile::rose_Id) + ITEM(Tile::blueRose_Id) + ITEM(Tile::peony_Id) ITEM(Tile::mushroom_brown_Id) ITEM(Tile::mushroom_red_Id) ITEM(Tile::cactus_Id) @@ -396,6 +404,7 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Item::apple_Id) ITEM(Item::apple_gold_Id) ITEM_AUX(Item::apple_gold_Id,1) // Enchanted + //ITEM(Item::apple_ruby_Id) ITEM(Item::melon_Id) ITEM(Item::mushroomStew_Id) ITEM(Item::bread_Id) @@ -407,6 +416,8 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Item::porkChop_raw_Id) ITEM(Item::beef_cooked_Id) ITEM(Item::beef_raw_Id) + //ITEM(Item::mutton_cooked_Id) + //ITEM(Item::mutton_raw_Id) ITEM(Item::chicken_raw_Id) ITEM(Item::chicken_cooked_Id) ITEM(Item::rotten_flesh_Id) @@ -476,6 +487,12 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Item::hoe_diamond_Id) ITEM(Item::fireball_Id) + ITEM(Item::sword_ruby_Id) + ITEM(Item::shovel_ruby_Id) + ITEM(Item::pickAxe_ruby_Id) + ITEM(Item::hatchet_ruby_Id) + ITEM(Item::hoe_ruby_Id) + ITEM(Item::clock_Id) ITEM(Item::shears_Id) ITEM(Item::fishingRod_Id) @@ -508,6 +525,7 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Item::coal_Id,1) ITEM(Item::diamond_Id) ITEM(Item::emerald_Id) + ITEM(Item::ruby_Id) ITEM(Item::ironIngot_Id) ITEM(Item::goldIngot_Id) ITEM(Item::netherQuartz_Id) diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/items.png b/Minecraft.Client/Common/res/TitleUpdate/res/items.png index 5456083c0..ac045739a 100644 Binary files a/Minecraft.Client/Common/res/TitleUpdate/res/items.png and b/Minecraft.Client/Common/res/TitleUpdate/res/items.png differ diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/terrain.pdn b/Minecraft.Client/Common/res/TitleUpdate/res/terrain.pdn new file mode 100644 index 000000000..359416187 --- /dev/null +++ b/Minecraft.Client/Common/res/TitleUpdate/res/terrain.pdn @@ -0,0 +1,461 @@ +PDN3 OPaintDotNet.Data, Version=5.109.9343.2610, Culture=neutral, PublicKeyToken=nullPaintDotNet.Document +isDisposedlayerswidthheight savedWithuserMetadataItemsPaintDotNet.LayerListSystem.VersionSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][]   PaintDotNet.LayerListparentArrayList+_itemsArrayList+_sizeArrayList+_versionPaintDotNet.Document  System.Version_Major_Minor_Build _Revisionm$2 +System.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]System.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]keyvalue $exif.tag12[0] +/ $exif.tag13[0] 7$exif.tag14[0]7 $exif.tag8[0]D   OPaintDotNet.Core, Version=5.109.9343.2610, Culture=neutral, PublicKeyToken=nullPaintDotNet.BitmapLayer +propertiessurfaceLayer+isDisposed Layer+width Layer+heightLayer+properties-PaintDotNet.BitmapLayer+BitmapLayerPropertiesPaintDotNet.Surface!PaintDotNet.Layer+LayerProperties   -PaintDotNet.BitmapLayer+BitmapLayerPropertiesblendOp&PaintDotNet.UserBlendOps+NormalBlendOp PaintDotNet.Surfacewidthheightstridescan0PaintDotNet.MemoryBlock !PaintDotNet.Layer+LayerPropertiesnameuserMetadataItemsvisible isBackgroundopacity blendModeSystem.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][]PaintDotNet.LayerBlendMode +Background PaintDotNet.LayerBlendModevalue__&PaintDotNet.UserBlendOps+NormalBlendOpPaintDotNet.MemoryBlocklength64 hasParentdeferred System.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] = +̽tU=E!ԐNz# ! {ME+`HIyx?u̝;<>g2V\)XBΝdҥ2m4YhYXo{Xұ>~^ Ra uB4w獑ppוpqeH/t~%j*7իeڵb;sL^6oެtu{G}#޵qn>kx8&΍5=J1 +i{JK3$~,5ex<@+$g2#}Χ.xap{fRƽqF/Ey\_^ͧh Wd[d%^aseóIdwysX e¿{i릖zv%K_P8>9pgϝly});wly}aaV=z Ɯ@Vک۝GѰ9lx՚GvFQ=4ه^G➆k:%.Ch\$&LB^p$ + Ŗ^x=s}`Wqh0 n<ޫ9ے=>[1=V{t)셎!/rv|ʔ)2{leϟ/˖-SrJٰaz߶o߮qƩwo +ĴƺmQW辶88/sbu='뙾ʾKUK~|Z٭N9oX:#,b#e1m?"cE3>|;2 +{T܀}#~ͯ+'1wc:… upi5ҥK=q$:;ۏ`G1~1dD8v6/~K^6;?E5G7"nڦN[={#\s/o f#)w4vl?%Nb ;wiuM|ַ`]24<*=X{V[&AqbN ? Os +YӐ7e4Ǝ=tuM7k`4FbFߠ"mP^\q(qe'ٞ={b_-6vgIx=!k!ul1$b_+z7w–ȚSa>~·;R'u]mOs'c|vڥ h\qsh{>ˈOc#m~EyKQ?X0oߍ8nӱ'W|#mM$$95xc0Yc1{zL95Q8Ulc+WJŋM?ا?ys%8|+lKL|1g5<_rfuTjTyCUU7Q~߀U:-X{@֫ិ=h.m' ^[7!i#6mvB@ +Rx3 uoN:%E:7ab981('OgyFa8q?rg@ʳF1 9V~ږ[7x9-ĩܝbpg `΂&бFniܸ7~7*w?k' pxu L{}z@Akz7PkT}^Eݨ< TY6lV{>OPgqj;ZG?ACx6 -* C{(\6q)hᝤpc}:g8D{Ж3uVesbW^QV1V< ,-sL[og~"-tڼs@o.F8//oIaW}cA7_n}ym3gʕ˪U|zA^(޸yWu{AU}[}ei}꼀*-܁'WJ/J?FSGQR`Kk|4V ǑVX<,NIpLlR>AQvtgоۯ1x19?5{.bzAv<_vs-LjvyWdϯZ]zƭ,3ƺX} +>q/*6-=d|R>"?pVo|[qO̙Ӧ?[~ yq6^9FN<mhi ZnV Jc`z ڬF.Pu=*nùϠ-xh";퍭vF>=tBaއ7t-:yO< +~#.<-iktB4T ˀuPXJ*ʤxx2Tz~-zo :8 Q(Kb%H掸!],9T<í* TƯ40t,}~:NzӨ@'gO8Q-1Z@r{7sLc<1/ &gl'o ԵN9'bH>#-]b)&eDTB9 +VKGᵅxhMIo_WF]aK`Qx"#мw$eX<:'$Kc MѴx4=MCiTUO5~!g*c:WHg?K~yؼw뷄ޒoc-y;K˖?_zY8p@pl0jXd#b@"<.,Jվ]Q-5VVjdN~ Ƅ6/,FGYNR HyW0Ov#i.Zv\vk6Q΅1_;uzLDͨc2@ gm:}~U@36gRKz__܃FO}{&^}Ne<ׯs OF.*ux0 @~&>NO4eƍ}󑕕 '*|?#pN\\Iaadqqq)#clRjUՖ7o񾃲yddݱ3+3K92e,IȖMG-if#U驧Uܒ9[a-yDLz\Z9{JJ?@ +N="'?!=~K^\^k:<}ɫ+uj믿.{1 ۽xF춟ωÛUx!nGߊط ={K.|'qOٹ]!UrȾw?.j&V}\ɦ[dշdin.2ɺ듔rt$ lRRyxxS vvvJlll4c;w777qvvWww57\Ba2"rlP9;f'fFH4ʊCD4FpH C푑>FzᡶVo9 M1)1]|j⢳~^ >*cep[Ntkm˳ qɹ\ ?;> R'uЦkqp^~~y~F Oz m:}Q|odtE^<\'O]̧.xuٰY2ILI*\tOѸ~ ߯@8CL?L&Mm=u5&MXtu@ul#eɋ_#LX̽U{$7T>|r5%7nP~۷Mk_u[oIHE}Xo\,KŒKT,i?"H"?D( +ً}TcOݜ-3I5 ukY2jL#ӿIJ#mTkToXT"͟ӥZ-RҹRnnwkȑJ"""8[ V1 p +Sdb9=-3Q? 52P3uzAj8ŠiFMAt\beOal#Yz9rzM||}x|ܜk৲)W|tD6$+>>*O\Fn}IV>>Kdo0ky + &)SMWOJP=.*_ںTئO.@5ЖZ2Wf1u}Keŋ/>|r9{,~E/,n܇آ"bI,*E=X&Ho"A8.{߇¼}qcoP}s?M .Q VsQ۽Rz>&VUIbUwX7ZuuRͫR. |X&މm}1?l0lazJw٣'|"FMd!ZGAAhU1}<.-:%mӓ.;bѡ_ :Ġà ͐HtA}2 ~}tW$:`ltgLk!-1Oslpng vVB@Aah3m7^M\mju=lW9gݺu&>@s5rK7sx +ߴ8[bW<"~=9ON/o#~$m}}hNg0H@sLs6GO%v5H]:WH}ZhkOqNf_Ky7$qEEqHED$I# +!K_$?Cc= cRaܒ7==g%y]\^s䨲k*IiY2lgk}@kS< +uqNϖ>M[>14XaX9l=a3(sf(@܂gn_`?бV\,EE{QH".{D-ȻEqH~'%')ko.:G?0{=[\W' d?ϯ7M:ź2!cźRR _KT!5ֵ=|o7Kw/8z$oo1:yA; h$Z>ց Ѷd~蜜)N]^"%y@g{h1#!tx! # QшD\; asANи׼bZꃆQy+nt?G,gee~S| +18 ~|\-'7F?u^y%Y|}<}h W '/(@_ʰQdZ/T8u@q{d'G,7!Ҥ? 7'ӱsW)_?漟{-q-ؒ<ݻ+ w(Sz\$].}ݓ޿Iv\>cS~=Y3*.@yhYm =K-OKQO%X3,I{Zm%tUIlkNB|߹Cҥkw#.ޣne;;Fh mG:[B.!3N9pςl .@a#6j@1#o:B"ꏠ$7Lpgbw8&ݥQ7xrL G/FUuy2}ddf 33S<~?'(<&h s_>u}-~p5܀ +>q[ S])IU_:6xf_9F1> /`ya~TpnȟN\"ISvK {WI_{u''50 +N<')*M oU{g)G_q(?OUhU PwZkn.{zyy{#ݝ^@'۷оGh#s؇[a[0cR&\,Ca> "i$[U8!gNC$W%;c#Zg8X')y]ɀ}GiCac+*s8}{-.Hy O'ZK~K䩳-y7 +_I9V,2wg+]A 37|_kS85O^ u981N<{+9NϖQ+'8K[ 9>]3܀W Z!wEEuQ+knTfkID9|G^z$O|Ϻ.Ӯ'_`}Ӯ%ɠ3~ +G|$OYWj9bUg7\@;MիWlQ5Swvx{=^C5Om/Kh tvzt!9pK̀WV&ѫ`0 #~M\O"cH (|r2 tKBWIqFtg4vV:@)U)e0񁆩Ŝ׷h_zb|plG3_?9c?qOymu˲Ӳn?zD'q><:GiS9F X`ig?y^#ױ%=~CR\wErKbIW,EEZ\$)rOX%H"^n[g?ݧ#蜀 + 8/e μysM~#HGIj4hKtAi M?vݷcƳZ_<=?q]8kpBѲitZ p3ѹLʂ_fOH Ob8MیQ9`&F;+.ih=42 uc( ݶr/tu_̑1ޣߤXƛhੳdˉ2eٯdX{o|<k oܽ+|zy70y:u@gMcm0͡-H!uҙ"c |o͛eݻWߐQDFd ,.)~R$EU\,Y"YE"ID|W,.]S'oڪ}rO!u녶vQ`n t)^})#NGʰwG!HEa?}L(&_8 &JFu˧M?}X'4h u-}WW/'!0`&ADdf\EnŢ~+ҪhYtuz^ST\x'dgFz Axx$X~^; #^4&EcR$yy+Q3f;^3D:AA-GQ0p{p~>1͖X'`.5jj|kN0wm-qKc\!͗o}}hY k ޽#P#ʛzuUkN0r~#7/0}g˚@?jz1Bli>c7< 9 u|?o!Dɸb1"EFHINpbxX*}랄|8Zj웋ƿ=~rt;KJ8@@e[ $y°u'֝t@QL)͐ujs|=qNS̿ء'<<{"_ElI}#)ZMI'ѡc8.~C'1LC*aĽ2>t FxHtC 4fC{e>a=pA4LQ +㟘fnu$s)g\k=@s.`?`1N7ߩުO3ȴɂ /tDm2u~ (_R[\{z]11tmӾ0gtqePX/h_1-:{{2^,)"Dd=woEHصbxIO"o^3_y#8j +koWye7?O_?3oIdZ5Y׻G|ۭJ6Xkbߪo~>[}ylCHDX$%qJ6v2zxW|#RЌ; {}!48FE[T0l}&R{h18uCH4i }r}z?s:x:N@37 4rK9sEg(ӾSu'w53_U^?I3߯?tgO_k h32uµyΟ9M5朔%;Zr}]c:/P7K{-.~"}Eߊ${]|O.3w=?1}~?z|rNy:J}2JL 㿈Q”~6\G$c/{QaeW:+p QܾZ֍B_PRlxTswvrG "g /1m׶xxTwLx7$QIIED0DNF ,x'%4vAwfh爺H٠NJW4tCh= +ퟂuSfx/|}@3O=`<X/cP2g?K~쌬9|ZtX;~Qtd/d;Sg.W4~O\g}&lؿ u 6;m:?}jx8|?s}bp߼Y; I*[$IܯHB^Eb/{xg/կM?\t_1qgy 7 ?O)!ٟ'vsO8iP԰9Q=:{~UXk|5MZmqLGpw냰С^]0b(v]'G<@zJ@t_D@d+8no /@>h戺aQ;5l'ٯ׳+ZSxlzy?i~{Lu@ڮ3oG>x Ǵ?\\y?9R\QU8 c|/3'./x_Ϻ~1.hi|ب1kO3G\rLt-0krLu@0SnPվ fm%8Ÿ{}0<[ + +ka3m9u[Oc-8?q춸xA>+OE\?q9X$Nw- y[b|z>}Jw0Wfcі_cKCdDDGHF`bg,]{?8-p;s޾ o@/O@+„^Qߠxn>p<6~N +VK6MX;U~pC'h +tyY u_~fי>}pa^B[uuKֶy(~omx?x#<W#llTt|EU56SbU_AɵZ>[JE_70?u }v;_ދOo蕏`'0♗0d><I^Vqr7u/"nTt<>yb󿛟Vx>_hVz|}Az nnbTUA +?^O WC;׈]"j\/k>pϨ9wwwz=1C\W7+-W^$ߨIXS{i[o{ ~$::ZCԜ9YbNj`0MNhTmZZԯ/j2acUc̙عsҾ/Z\p!x2cV IV`MX)EKayO=?Ƨ͝?rdL=s/ô9ykyKXd_Ӧ3ZM'I?%׫gF A*BQ_;=togģƺ틿=-'-y'{7ԻZ7y1k*[5D=E/([pr%._7#CCCh5Z3ѮgP( վ9~gkKRӞ7RV 7SG[ԭ+K5SGm^thIwٳgט;w  XjU_H_}ԩ +qT1%:U-]˖\L#yS\y4,y)?+)"g9M W{˃_v} C|nRvI{Rzd=-\LxM8u-}{ߌϯ_ Jpߵ涘zqLk~o_Q߸8g1zr<_7\K.,bg).AċD?QW`@֕ժ)]@>@_ )z@aoĘ 2SLٳ̜9Sz`X0 +òKMX;f ϸߣ 6 |ا=\ 0;m{9'ky#ؿR,oF[z>-ӆ>7*lO|7$ Us,V:~ƿ%kQ,9Jy_E/hxV8{}mn5S4hO}ϵn-p}~%SU|s-5Փ)luH81OPqBkkhN Anf&bJ̘>]ٳ`ܹ;ws9s`<~С +Ç#dž >= xb5766|߸#q߰aC%ZpcFOlRCٖ6yi'-U>Jꀦ”?_V-ׯ87jHݣg|~yM]{@q߿_cqoc|Β/[^>KW=S/]<<@]@%iJ RxMKk"-408m֕ ¾sgGr|m1z6POkݠlҪQ#t'b#"!aј4iފ٘5>,L>C ?y'[➱#F(_6> Ny+䔋?gM(sz:g?ÿe5e?1o?1?hO_#?ck֛[BӾf߼Yx`b3Zzbi=1|_ߐ7k@~󚶀:::zv_rzh]7)vh^ԫZUa߸kqsCTh(0h9'Ly8q?cLSaԩJ7L6 ʮk]A5 ǜ[]@)F7>1g=o+-5gL} +o  v(j9fKb{W *3i[lK9񷿳^^zrzkyRqT_&ؿ1qV 0=8'tAKLk8>3P74+zT<@ `۱#zz{#>:*0??}:OS*q#cBm}񯱮ė2O x}Os{>O?;>)!^R9*WϪq߱^]ֈRP07;myyji?9ߨ}Pޝ0AyKyz=%?_(ջ졮9# p\bfsƎ[ծx~@w]#_C׮ ))ؿ?FaL6_^3f M^DžY̖@X5L?sa +qxcW;_5.T?kyDoUHvjQ? 0?`9r~Yo7rocFߒ]~FA~F|=c|_joe}^BU(PX;wP0'Ю:6uJR?_sVLUO_ڵ 11(#uߐc}0[SNQ/,,Uޟ3cFޯm16ݥ[XC"F{l)O+|bZwTm7z .WnЮ:k%4T.iӦ&i֬4iD9|?z %}g7Kx-/_'%fbJxgXcLSÜq͚%\Z5ܰ ZXA͚ҭ}{ +Ry?rɓ&a%5@%=g: ~u xbɬ|tاAu9\x s}j9Gϧ .]<`nݔ( lm-?@<8Rs~׷k//Ng zc_ǧc 3SCŽO1.k<`\{jJ9@+C]A Ɖ 0fHeY3GEFVx/1\7rqooN1Ҡ]jL0 +9a9B9䜑czME/z>tH^{M|j/Q_}%I/_\\lC}o[/`.{ڡd vP??#bĄ)]ݻwz^kz5r=p _ Wg˟zqp1cr{#  @A(8 +!o$D1w܂![틔 J +www%...JOOOӘ/BcGKQ6ܬ+Ks\7k +5k~+C~CDʷpkl *[]UnRPOJ6ÇKᡄc V:mܼu nRw'@|_2<\>oڕwq+{s>?1uk׀g27fdĤ;s:`q`|.^q=׳q#ֹ}z=X'gB.b_l䒺=mP^~_dGZ $".o8/gӦ({AQ?&"$s$f#(,>!_O!00HKKSRO A@D¿St?ycJ4mLҵguKcދ|Nsm;)RgֈwM/EP`/j7لqha ڌMB&NPA1&\ Kٳj}~IrE鄠O>~Rw+R_PEo__7gq=xuʾ{w_Ts~q~zrsŚ5QS{y⊕+z.րr%ۥ޲e 8zz=:VP'0:e @hfwE% +V=ҥcاL]\5:1HX!Dbb" *@3VHXE $& +_럜'vαO\o8ψ>JlMX1#vJb(}}7Y_`gfvf]&}ںk{U޶GZ9LC+Gi1:/E[eJa+|ͧ'j н N~{E +"!wo//?p :}w߯澾73Rl/}zVZuq[dݬ "cnsj͹^s|z7?m`DxE¾}ǣ{,w+1b~Sz}׷2͡>`;Aޯ( Ewn-E~W(,7w'W0oWc|:ocܝe˖9*q^_g_t_'u` Ͽ?%+9aPa&e.g.2]}m;ݣ-?zEXRrܼjK'srČ&WĴ٘??$,=i+WZfq̸~ڴ3e--41JlQ7Ǵ>}/rc0FN<׳o\k}glzƛ=u,?%3c`1ͣCi4`z[T!\g 12K9O|d#,)A +?b(M:1#mR׺ :5`}7zw6;cgt>m~P'կ^t#)pKqUy?wAok{(n?½?v ſCѯQA߯(s ſ߿[_SGw(oiӿhO۸Jߗ~6_O}LJOϜv;a}F833Sij^Ͼ^>q=uKzF?"^뽽w,\'EgƖRç4]?:ZCu;*4HB* ${7$TBD6`1`qlǎI'v_w Wc8{+Okuaoo{olZ2$@~~ۀb^[H-BLj|6.e5*F¯\_/=W_]j889^oŜO6@}dox'y;^w2Ͳ2ixOa}9=3;y}ozc|7ş_c)_⋿~M;߹2/]TpJ{[0dw oE}:=_KxW"ҧ}?O<᫄<ןS\Hm]H=N 6nngHL60eX x&"$QUH+GV~c? ؖ)_=O1ﴖ8'Ks':`ܽ<8)'O!w> 9D%*_^0Oy~g$7n(ꃊO!C/?/AyO/~mq=iN!}O٠qll ?TᗸrRLy}}B/әT$gϜ9G凤}{ǐ: +!Xgʌ_`EnoiҘPM-26XyU*(y"۳6/Hbwi?a.+@ᘾ[МHD{du>ׄ}@yp3?7iQ(쁬 }?%|}?~#s|o)_?黸s{_E_r>}y,0{Ȯ\ G_蹜 >Z\ׇZqq?qA7UuGy?e/4b߆5)lGDn jy%H.Bpl}^=U_/t?e}~/ܿz'+~3齎4Ҟ8Ӛ}ԋ.z<P/9:Q ?.n1>\3/,-y__q[UTKLu;|>~W__ >#ീO8;쳟ƍk"/}'O4nSSpE1q>}x }ЧgB_}?ro' 1P~H~ubk~#RJ_PųM(+/GyU5*j[- ' w«y;<4/|;q믿>_YGgw;_{{ݜ6d-q Ż"pD?lVoz˗R_ﲭsؘ +[!ݯw>~G9 __@?W|ͣ>{걧^OxpL 'M碞O  }'Dʸ^E )?\pMj5]WӍuz?^p!L7*a'w9/֯PQ׈ +ǧI2}#E.D +P.7]k{wǒVt;MOů?yUo׏op췷 m +[P:;^KG'k9~wzBO sOJOu#q7y/*>qap½&x;?>) /wGjO}B'$ +='YΌb1A0ڂUYp-NDPUQՋڽ{]ػ];ن{w?z{߇evOdsO]J_ +M ZИ-NDDq2r)DGE{#7^i +ߦ8.tO#uuvg§>(\W(ep|v)BH?,~7y{g֑Мml‚y;-av+ڔ[V2er޹rA77o.H(̇Cj΋MaLuM5a;71kaŖwq0e{ "Wљu\vs%.鎰]U˰lV)w}8%t=V`UrX.U֔٠'{zsٵsIv:ή9n\WOcq~>XsYX'%zŏcPb=؄Mu`v"V82gyf7'Wyke^eϾR;W8G#0*9Q X5a[YȌRg . KZԈJ\KyN *e;ۏu}Qb8eenF:5oܰ;I}5W͌WzO8E=>Yߟ|,.?Ow7x:{ml)ET otA6vVq^@p{Nap3_c cўץ~@3$)sPsi-ΔIYɔC{:nLu_be-*a)v${Yv~|gΰ7m d n͜ecOLqw)я-κ9OT7M"t^p’{YP|I$bF&6Nn\IYH-$)uKolJBFy,6% Q9ΫDSmk*f٩9ٙŬW~^jKJJ8)%ɲ5\]}$M5;Q։dhB@- +G]"6bUR8c֑ +l˅`FJ4Z{?/|l?.__|nX/1{)b>2a^k3/՛J񦌵/cOa'c_>2Z>{4wI]ߘcvE[aLk,Y1bV:Z ⾐%\gIz_6/NpSGH&>;G|N:Cun=3s=w +윟'.@B'@6g٥9ܵ6rf9RK^<7O+5M7"$?2c[{_:cA,8imפ#Osґ +]+pOדC}>4 ɩwIB̂RlCAy՗2P]FNܞ}3i/]sH*_'OהV +} K6FB6sg:<2+>{r] .EH֍qOO?UOR@k МD\O9rok+f^K`{Ki +.vw]ʼz!+Raʿ(-ҵ{@bK"=89X'iFS^sCY ,'g0ۮ$K $ɜ㟰}ݷ{ob']>*N\i +&٩ϟ9}=q~LWp} D,@i>2MϳW3#Q:,N.l}|7[ɱi# +F^L]'pojft.7"/7c\/uzv'🛝ͯeeӲYu~vJr[cΪ:YCq߯O8S-B\y.Kw~-U{f(ᇪ8Typs6d (ާR>|I(krfg/G+>r\$K7[s>qkp| n01Os\=)օ +[Gr +N^߄ KXkB?H=zAHm0LPu'l} +km q47v1>//e&r;@IvN}OT~GĿ~;XUq Ok1>~ Ë8^ !e>'>Aq)3d!5"n'O' +~A^54̥xU=FuI_p}O^Y?-5申b"#O$k8,@(Qx '܋XӜl)x?ۣJ> +!?O +_'K>8aZj 1'!{a1OǓ/9/Qkԡe.s"w~OVЙz`iS؃WOׇt88ᓰicF`Zc'ۂKvbNgadT?3H{ #+.ړ #*Tç$}$ S~Ω@qr@O{80d6`IB9;4]Bg7 /0My)IR;u#W (|օ=BX K[6U? :#Br_F#I6saO^yN@ ^)rp4{b;pQ|_i3Hү/E{"~4ޗrs"2E/D{ +)B NR/$tFBX-s~@ҧH~P)ף$Ķ-8T2_'!; pMX'.@=y"?@g3|vom--ƌ~N\15)XhlP]/~i^d3A0.x=<(]{~SƯg9P) +DTo"'l@NɁW&ק8b}4ax?ix? P(^[sܟ<͹2^+_@1-/Pƾ>9O\i$< /=ωӄALtH' A**?o,~E|v=s<9:=^bܾ)W䴼?lp^D;%/CwOϫT>l-T|4 j4R߾PO'TZ9wAx&7B  4 +_NB ս<.  bkE?@rn.B+ݙƱyo. 8@Ay^н5 |)'Oϳ'?v! ^SOi`ښy< _S+r2<@['=? E4y?%*@{cQ/²yOu>E_ W?PFɑ<g?+<={S.ਖ਼s܇ ~_Zz^?ww *E\Vmrù (_7$?s_p?ʿ¤#lGL.eSOsQq &Hv!( A5KsHD>/;ޝ +PO<_tFv8? Xni^nyێEoXuXk}ɾԷ+{U< \ O6AH:kչ.yN#ꠉ7@_b}_7Nc{xÜ ̞g\dw^d.QR, uw~8|:<]ݥW?@\g\ٿ?K +_+;OAn%yN)~SQš};*uѥj9@Μ\ D8&OrG~:'@اZ;w8_5 TvZ +O>.{kE\n˱{\Ld߱>Hs1- F U ſH{4~L{o)ͼƥ3qy?}RzhN[l0qֹG=O;{sA18tDOsQ\|.z`CF?6Y佾|tkw;vk$Q?W*] Sl j1`sy?oo7y-_=|b+\lẊj,"K)??P^kf_|GR($$aFr/x\)ci:856q?5>= +еdy/~;5rGl{f7^+ߑާC+)fkz#(0Qc@π@XJFf:YRz)Z%#H|.jOOv +I5o[3|{[` Pd6cE^VUaeM)VTaye!> ӄm S|@A!i/N>@q/K(\W){l }.??gzO|[m3' _8_xƻ#a-XE:& + lXZeVX9(ʁ{ArqMsv8aM68gmkN +:% +k3!otBPr|@D#{|B ԋ=H~k=S`A;:{~~1t&w\㦸wT~y >9iiBzf2$$flǶTe`k~ +v~ϓ?5ỤϭTĽd>W#^U XS Vص7#hNit*́UA>T¢K+/2g?o]_~s>;xyxƯ Č]V9 zG=+9w=[ݻ|$;E= +'S"_<?l7e&tvc8xpChڹ{fmn6f5`IP2#Y,㹈8#f5b6"QŨ`Q1l$gd#%u,zKۖJEae3"cfefAULn#ӵdԯD0MKO}Cu[V>l(k3 gb<ƞ#= 'p4^?N!?}Q\Lgu}] FȬ|&\ QƼ8Az_5]?2c8}vǧЩ8|z7LI}8:yG FZ/E>\F^@Vl܀5\eJD/At"N d e`0؅K+lC6x-l:W9eG5Xv^oavXa 6Xn!X+:+9be#b=Vay-`[犵O\~nDPm 0v3߱w "dwˠ}+ޗؗenMMlGs3܀&v#mg RkF[N- J†llD@֏4"tg5BUZ F51 +UøzU0j`ŏ tn4bqqژ,* ꡑP[ 7p噇 +.&ξ!Ns{WW8qpk+9=Oh'N/Ω= +U[ᇰL>|T#~ f^8m-`|!LBs4I1ܘ?)]CB9G" '\f]]4r2dAN~YDT ݼ v~qXc,{աL|-wBs/~~~֧Fp*J&}|BdgxW ~9U1xW)C5޽g}{Kq|ڿ=<?CyWwM3{\;xKZ=˰&_3yfwbMb VE6rO61Ι(݃3.6ls6ҵX&9ΟᘖƢcYfFG{i,$EEbq,|S,|c`αLݝ;1L{zfbm2KOfP;;11q@j @l܅dV#@) +Pz4e'sP~*9];]ډFTOtJ&ېx +q&WRt%3K\(\N/<``U+mˋl +l U[ (Z05quaتfWAyf0.iR/Q%B' 3m)#4ф)4i2ISX0=if0&ga68J١$n6OPy=1np4Sa0 y΃t>,'sax*Jt@R)NAJ6S۹z0LvczC`R 0.Nq=ۇVE#tJ`RJqfǟifgCL :|]EtE_6r![?@W{Cjqĵ bsN3 >? Ż4C^xG`889?8Ht+],7/!7y(mEqq1***PUUbcbXTl<x?.ۙ9cFiL~ 5|M6@ƒ)0o}h }|JǶDl? G"VL@֩B(CjEZ2Ğ)hx^z8]Eo؝s͔ VrQ[,[eXw9.ÒKaպVMKaٰKae Hf 0i6Q! zu[T3{A֪Y Ы7~ M;j٤gzSj75~] uqQjWeP9fp`2Qch^ҁMmh6捥К] +нzWPá= KMDxf&+_Yd'6CDds- :}5O03 x*23Y Z`dۡ}( Z9iT-aZ +Aj6+'N1 VI;F;;ώ09y 4O1YN-3ʭGc\wGٞSE#;_ ?"?q/c[b:csAl +oZ# agmA?<+ ֵz9|ܧz"~6S8/:{d'H98)ߪA5#3 ]1cXu,8=`,ޟ_mӡkF2SB*}m@a ]2_܏MffΜut=q)<rï ~eElL8݄pD +ƣrlbG!X<!y<)r IeH8Z4Dp8_'V_vEG,?oegWb:8GMa>b}&05n퐋i L{ag ]r17q1z`ЯQ!@gLfT3ՠQ nmЅ!=&u>+3X@ *Ok@T/`m,zBxU3!=YMY5T.ړиsP}%2sdN3P\Jffh +)P}9iw.gj7dTgs6qz6 *3н˴;ln3LX24&3`44&o4#]LY^L,2ՠ.B_T"EGG,TVVu,[Au;o׶^#ӵ cZK=(^¯'=c)օ-rHl[F%e­.ܵ^!oGx"o–mIl #vcy8I8_%wem`u%_15c^7ɬLLGu`_&u`Kƻu`OFu`4 C0: C:0с6tGe9X @c61L5Uk@& ;#&nh`ѳXt_xI_2E=pU.¢qpYT2e[_ƙ`NBN:Sg=6}fpv;S5f=9+LtɄl\σBNC~F[eLmh+ˬLv=8 NhTAL&zaqA N2Loza݋e%AOC [t;[`ZʴR@f7bw!jb*w#q.a;~ sU+9o=5"(uLpܘTh_S[(O\3r{|a!TwЙ'={ƐR߫v >E].Oq7JzPҏGvKE`^\@}=^*UPrޏlcG'naEխ<״_kʃ3]:A^_9P|U Ǥ\8Ro&8ta'8i.NpsϨC2 ظ? gaӁll@hd\aw֗tf,fb̮1o ` hXFH`xP#0WIuL`Jա7)5LB*d8 +ih\Y0n hA&4/C*4n&]T48W6ѱ(VlTFrnTxx|%Y Td@vv3/&1:Kr8^ku7!̀Q.Pv| Ƴм [P5P;<8ݘ^f8vn5,w9rb*D3d +x̠;jآp7Q=˛5dC^_Kz0,XjzyiDonl(ى/EhiJzAL>5 #i!riC؎ +O6 +vqphWq?ɴfsn_'N|ΝSOΝ;wsX۷3_~704~u~nUF@>4"BkKrW_?:&ffёJL"٥,nk,EuM YZrJg111O})W?>S=:?- HmD>l¶,[a=da3j [?F`ݮX'"?S~vH8On +ZL>nC +[ۀE?C*0]>0CDz'U7itϫ@ +.@ +4yLU +4oB%0:І4@MuhA6T.CS5=5K`fjCFPԄ4/a+}&ZW! ҙJ1^ǚi]ݑF&kbƳNT9[q~ xztl`Z'jZڕT8EWFH%meaЬ]p,SafO0p3KB8uazmL@Nt!h'{\܇~Dt!~-]Ăsj`]"y ]'A=yR ֤ýޕx3w5^{S50/'܋:asg8qO @vz:_ &Eo%WڣiH7( y80 +X\|2r +PRY29_m]Z10pÇ.AK|i簙i-'/ 9៮7X+)[+,JNHҡհ:lˣ&:jecr8e7|/"POvrOBszzby_ uG|~8gtód? k;^HkxwRM)ea[ؖxޣbr76T#d6E7Z7-f&>rr?}ZS=PHO9P_Hy[;l)MvVbXi]ai-X5IJaKk pmg4n_vtc8#3[:0|J5a* AUU M z49?K0{B:'gsqRjԠ>c~L>.i@(n3uw S/aZ }^:`@6Awau1iV932YtGkz!Ӻ57¡#Mϧ3I N@^0?Yy/Ky)_.8æ;la1mWavEfg4`~XV,XS -𬌇WM +VM̯ii20~FO:Fϫ Fa. 33cWdПUuM_чpetOh@"?@}*ԏ-yMȦ,at2i37dLf&k4dzF͡f{z-{ZZGt~L;df)3 e*zL Õ ,dfxl#= `j`~ށW-0aw324j"9׮ezC 茷1"hMtx@? US]݅kdr`-Ӡ?/a(WQxOnyx62Y|-a{(PMAPv v eV ĦqDe=޹m/ىXWGsi_7'm\?a| }19} T# O=CT/d7+z"4b{1*+ +d'WFX)tRU>Q5oGDbY8ֶv:̱^v]lj :;223XbJ:Q) S]Gt2S +$Z}Xvx& aqUΩlT}Xb *O8 n p/Ik],zc,9aa&g`a@&/%:Lo>g `p~1t>ӻ +LgzWØF6Ձ*feЬa]z׀lFsˡm\$3dj{܁;F.3g62й:OisO1>p5ӽ`Snt5F'M1N<^wisO{@g]eόJ{ %{tH!!{GAz;8:3VD. 2ܙ}5WZ׵:!y]y/}BaѰ'gG ~sv6JĠmM7QX)17 YX*[Vfd5'^ E |S6޲6_>q=2gyXTtq?n)hWV,- +-X-mjYFpMp_ +6Xd]K~)O\. G`~6ŋO9|Ԭ2U|]1c'`*;+ٙKUj (muvl. I'!!*>غ!IOMXTuw};u_猸fk|;@96  {GaŽQw?F?vF׏Ƥ9b9 ޘ +NUIF]0#Nƈ}ayOɘ3cd }a&`:0UH?X~ŀ]0YF'>Frv_2`8X? WƸs`s>ot  Э>[|X4˰힂>B1 mm0Z(NoZ(CQ3(XT  ;ASdȚ ?/ +C:>IJ>S}:U`G,+ST;h[mQ}39@~Ţ,]8J,?pga>9IJ.W腙O',2A0}Xe f.EAFR՜en NEv: nɕHWz)p [$I_-Eg >E;weJ,+y2ֹ ȘrgXf*nє.24Eт&=j0c`b b&!I!9}d|XdFN#-bIj~`+,s㔍OL|@,KR@pȎ&0 7P'ei`b8>b2^0x֣,o持Gr@})6T02$[2-+L#}aQ,X = S²4pߞL hF{"y`!Iт}ć?  _,2eSzc3IeL,G|Vd9"b0y)yaG)pmgA; +[L3ϯ}_x cN=#Kb +0?<6e̋j̋hbLt0'"$ Yٽ{$w5HҺ:j|iΓ۷%{ 6HT}DJjjGGn޼YRRRM6ƍ񇕌hxCy86$.Ƚqu-9s"dP%Uēj% E܂eX$+Wn%g9ʨ2ṉ[wJȯgm"Y-OOKǰDsMϙ֘9T\2Tkk݋R=Z}y#uMqO.%ժk.bY-NScsQh)/Yp,X@Ɍ3Ŵsg{{{alj Fg273SWWbKf7c| 7}&Zq{X +τ"xcJ'%8~aX8d-nupiGj?bļW6?c>q!:_lu z:?=xm-wM}L F[`Kɜ͘ІپXT5kL\qyyZSߥ$Y|r֍'??_IZZdffz^Anډo܅sg7'aakd +ߜ''^Vت~rdBM2s,bUV+e\0I²  bpi^cgWu~モ͗%tw4KVOKH!5\.u/oPgxx(.׭>O ^Zq>}z}}Nq^o'K.)++Sl嚟zOLל1X\ "Vrm'$)! m1}LZ]`:`L rx˃Ol6c2Ŧ! ! ɅNz½x-v[? )s{}89?t58 ZDZ&elK6,?91QL龧a6kՀ$6%qVcX4D߅(Y=k!߶m73~ʕ+%==]{4ƍ8i>`k=?|93dI!CfȀۻIP+O~\%"bGf+pMNu^"nj>!U^2SaZ\uz7ꊅ+rj_˺5 +oM/1qʵ5#٧pmHUUMkFݠW!tegvrV{o~yy?ϸ?u~ܟx?s挺K!g,B}CX r`y!EMFͽS/a^8Dwz,hGfIb׮]ƇVfpṄ5Dckܷoߵ<94}i"}lrrN\ŋM$? (k׮;v +?C?盟7~iS'2,X UV`֭xQ=wϟo>t_ʆ:T#YXyGS*M:3iHΫ@qy**+QTV +DVaYv¿{>OTOono]? ]_'g_'xͭ(_|70S ʰf~O/vVdʒTշx36=2Qi<?v_yk8|7%Z SXwv.Qxvt,}3?@O[oe !ÆS&)ʿj+e%lι< /.ho3BaL$ד<j^cs:{YymnjjRAcccMJ/s/k~N8Zg^#(0P-gn;{/_W72;Q܈z7ԢR_ *%X^ZU3ˮV h}S'''_{`M`Bw<3^`;ؿ~cnbb:VئrkKi %9gxINNVk<ñj_12S7S}sy}zb1:Ac->;'NsPx'u|˄َb_R +;^ |#dFNoxo1:&Oq,P[U&5]x eS<9k_@s{-u=@qO[[<3}'5Bykkk +{s@8qwe׭_իކԷ6jiIOZ5#lsY2dV+#%5ZeLuo׵?]ntvnEn ,]{_.FMߎ¿~)֯,|!"c5[S^rp,Qq=P/Ky`;7Q^9 j󊖰B /’ik+` {'h}eyWb{<+/u5}]#c>O ~rX:9ygϢqvvy ~O5󎎎_ؾm+kA_oZىuGZ۔࿦GRZ ju\x'+Ymgxn? :{ݟ]7b1={oQ5̛S8Oa\B~RWiyX\_0xԭ;8e1d|ҁ&d*ߩ*M+ST=;NGE[ + kkU@*yxw:$:s>Ũ)Tq*/EKeΜp5kP |><)o۫)'\i@ɔE*G@aX WjI;+/wHs_\S9=~k?}sO!0'Ubs֭AAARyℜŸß-sk5H]aOUL} S^lgLt> a +!-HiD~E?z*O{8Yc?`FOa^O-,:OT0NM>KV3g46x9<{HYܔk&eTN1s]L:|o6_y?N{xU*}-!;d%*<;W;s>nkiK9g~8m1Ǻ~<5rx#g K;;9!<<\Ύk=>)IC_ؾ}֬U\JS\ +8ƗbIL!lTx8-nw~ ZT?o^/ox9NƓF@LhkhI: ǐ'0I8${v}a \ބz$fգ ƺ_f*͟4c.+cL;$)Gm7cbРz?a0Hk߀g 883Gɾ'=ɕ&`YLQO]P@]=:rm +&[8&S\o?}^_57?okkTc 8va60ԩطw/֭]UXzJsM*sB)aSۈ,8)/Ct6\Vj[PڡyТ8?OȟӇ"&vsNr-9P]C+rʻ>)GrEW~W*ni%܂+]j7X^n #}ھѶwc~g8ϿP7ޫ0 Եu5}&V!h-s ~e;[=1{%ii>|"*yU&Ϝ?OUC7 ڶ <_xfK;;g+~?s?^8Ҥt=y|P|B#8UT"F@F._U!h*xq+ΐ%7L@ϸtTѠx8G= 7 +7H4F)-=Of~ޘ5K*k#|^R|WHY{Iz:w5/U}b >tH i7^=iyf]c]<@q\u޸^οw[XC~&Ycm(z]XTM΅O\<NӝC0%V.+` ;Xx#26ĩsgO^D?u yP(:G1m/0/Ysϒ5@=}WgNwbcwȲekdĈ/y=E!*QNً|$eJ.Gb KPg6YP jx= UpͅMxtޟg^6XTzcp3a?"2 +1[$8><Ṧ &-%a1) !p +ơWB׵>v43!ܔ7UuyƘ_o{uX_rIqgsKجfeu] 9XuOXLa~wZ +:t7y781eȯAAY=ZѱzW6?== eEsSm-JRK^\Ϥ"'-1X%ѹH*ҜzO7;>C0tH>| :\5j?Q %cLP2xPgJطmnnn^^^JyooouppP{NasnpZ +7p8D= +s]"1>zc\ K1&`R\䅩p12pB%Ujnr+_+\J̶[3NɔiOIWdGT_ˬ9eҔՙӟTG Hr^I= %eEV T)T˽Q%4kZ㹄H+]U4U((,A|B &'%u547)@O+Or1< + br \x& ( хnUl4Evy-Gx'L&S̐'Qc腑 +hsLH``>z8.:S\\\' ,v <L_s|1rMq=b|LZ V1y~4[ qMg:x!XNTgKŷ&7n}-o|\\{CWŭƧr_ǷoW_ޒO/n}+]|~<1>S_7gs\7?yO[3ϼƃݺ+*l +;W-#Ѱ "h2bS8uY\|:}cEz,wVV嵢s:wGQ.g+aQ(E\V,ŔKdڒØ817b->m2ryռ߫֨ YVa:2½{xƔ+Gm9]WCs7Hbn5>$=Ȯ݆҆o]5o{TX2K,eB{%=2txd! ѹH-EVED&L1yĩjL95:u(6L=1 8fK:} Ozmla8S-Øi~6CxbMș^3c\1j ?*ZIqsy|c_^\{kn_}-_~w[>%W._~{K޸\wkp|}S>{}y~3^9~@yQDb~Kqs5|%'<_^g~CgCסh0ʺdAwBÖhq [zヨzy t=ΡciTo8}Hف͈(وHގHޅ(ف-Xt#RĸwsAfqN=m?uÈQXb&b+?R*|ǗTCS+r.t; +wyn߲B׆Mho@mmQ^^ioKJL8bIhl<+KQІw)E ?qNί@.=>է+F=19SZ/p\A nKa9vA<7,h? #0d'Mșn9 æ.ƠsA>Q6E|}~F_7KF)Ng{Wrŗ*޾)}{[|M Z}^0?N/:rAĽQ'u>x%uwyN\Aס Ū=gб V={ϡcY:и$DX "q?w#bbv"d"#x'"K`y^G%#}ڄspOrx☶?{O&O}B +>xӪ1Yob-~BIo<=?b)+5WDm@Qn~ǡbزe :;WCC}O{i%IȃkTÒ(0~؄$ʲ)qtFߟB\\-y^==<{ߟBx:F׵ G3'Woy^kz{/E0?qn{;wEyBy9u>_{E,i6:83|!޺.^z <qqw >8v ;??G`Ӄ%t]д j7B(8H9.ލ]ۅ]݅=Kzsbbjԉ/{xoߩyqL7t~=m?N]Kg=}VWTGZ6}=c'̹ 8~8XhGss྽ҊR+&kqYV1ymGpO@;X^^ۦgM㯺o_t7W7f0WLO_v^rqqxiqzwjNcssߛO߈{xwϼsOӏ㗟ыs`ߩ'c:x.aT?UǑ|5_{!ٻ AٻKs僰O9 +؇Os>00r~絿9~ +\7(:ON)W@8D!$ >7;X!24çaLaS0dbڟ'. c)}>f}[rg77y;ӯ>nʅǟ얷} o\};nyr䋯/oÿy߸fǧ?/x9<׵za7_][WUL\W^s/߽<^x= +.>x9<vj4m:gP~Gp?w6DT~$?ĪcXQqK N6E=Ye5u :]}5c\8gX q/I5$!ՒPW跲yߏw}Q?~ [lV|[?kDT"* +JW2h6#vqEXkٮv]u\\y@0_ h=zv^f\wu0\Bv1ϧm@V2b?Ys0z'Ftin t.1B# '?kȓʶ|e\yrWjo\}yڻ53 n~ɔ y?ϫR\'gh0x5VO.+yz}{x{xw7Ǟy<4<$v=v<$6M/"\"6{b6#7\@Ѿ  v@_tzb\#Ϛ|]71}bmyP7P<#dPg\-B]@ߟxMM=yՈɭ@Zq5jL؏HS8+9XT BT?uޏ-::1qy?[r~U3ץpHKl!j 1&`|a9m:g9NF/1-絎7?>.|7'tˍo?-_~sCr[WLߜ+߯s|:ק{V:g8+/Cyp1}:}\u2N׈}r|#ʷ'`_r5% ֹ 6mV{(>ۺ:{|V"uhi_mhzX8d5.{;-qs>c=8==ߏ݅ox9`y? <pM,kF3 ++tS(;a`L8+7mU<3u +"uo/oȍo+OEzyk7Ϳ#|7?ZkWnTyޕӱ?b9G=kj3O:>B݆ͩ5СسkzGsbyz:%"Eȩh0a?2ʰ$&8w)N}6k@Lzgy:gtS< 4M +>.9ym)֞=s ,&s71Ϛ|';G(}1pw䋿}+{]~'*wߚ~)6x[>Sx{qcϘWec;~?>0_I@ouƽ/gГ!|>z`- 9wtX>ȨٍƱU/1qF(W3<Tse-38VSuWZ9t1^c-0E_kίfֵzX#Stwc,l=:a0P*.$(gP߸yKn||z|7ȕ|qܸu[~GjҥOﭞϨ?)1W5?/c^;ڱ(#:/y?m=k3k7_]~{z9|;tZ؆  3"i w{aԅpo{] y1?c7a7׿+\@xWntw緺o7ӯn|zo:<hkgg1c\hG?Zg0z㰎===]5C{eJ?6&p’ nisӺspXv 63@/KV@P$4ׅmhڋM߇u}և'|yny+9ȣr{ŷg_ܒϿ)N..c&M߅7 >s!w%u_u^xw3ŝW01x/qOX~caLӌqlZ`_~Ż}["|uyew|sGʻ>4gٽ׾AGOgP>v2^Z{]FK14{=».Ub G*.mFl:nAz6m5-H ݌H rG6!5l#ĻL@h@>8kz(5&Sr7CnVW!7EE`̿t?>>stdff"-- IIHLLDb~9ZW}d5¿f7["~?\O(] F_Nm6$W5)ceƚv%ΞYg/cdOv%_4Z;Q#3T9-~~P|||$22R޺gß#c?s[:[5αmԝ4^|C\_j̟MkYO9}Emll,/_TX7XAoIRUgB`] +ng,q"S&ӎ˨dke֌2X ^+voW_|Ix \{-y C&l>n²>afXogk'O}0纞7α?WC5 +1,~\zYyw^yB:AxWK &ksZ9wck|k`ʕ(++S9%U?OFߟbw&KV&]N1m< 8fKqp>t)lg^WcxQp̖rJWOAy~okߩȳ6nTf$} Wfe9ޡklhF;nF.6V;)aYY,q v/"32̙X[gK|E<qs,K[eyyYf~Pm@Ǘo"s7^{S](VgK+}l5soML.4pkU0O )O}//xgzyy^^UzkwK2EպcOʋ%x¼91MO9'5M6ߠ#uQ߹%3ǹ0hHNN_l*L?0)ޙu..دlƂ",lO/_Ӗ/?d mR~Wz~hiˏl91~\5ho7-<ۃviID]Ʒ(UUy^xo`;dIYbNΈY?+vdsbcsZ?)Vs"볲/)osJƎ%Q+^+b5s!\^y5/?o|̓Oe)Ψ+5֞M2,.>OOO1G)?Kc_W6n +/OOdz0777xx= ͱϷ(:lggghkO>-<;isO<߃;\+?fn܈Ve9[yyy|.0 f3T S1?"2kN +p}ئO]@ury Wu (NO $1oW(_>ST0.ifЗ3I_{^}r 9/_tUd{c 3{b l=I&)|3]<%9mmm +x6ԱS9?x`O]%6qLO&M#Goc7ɘQ]2bX acdذ2f9jX^+#möHLb=!1UX?%Vm-o\xRώ7 o. lo#0JS? {z*v{{(OO{/ӮļI.u9j}+W߻ h+p? ν@ uNQ) +Lq@5}UC_N O :gJl+OU)nS h9u^S} +([Z(cPcx̟p@s:AϠ?4{x2rvYtQ? n[־+k1EHE+ HW H"w MQ޻4K$t)_i&'N2>sse3Z{]sKVaWn [E d `@qhحSO($ Sٿ[ۯW_ޣᄌKxvu?rm̊ſ7t?ѧ'T9..pqq fm,ٳmq=+_r{eO~/uc{?l + \yS}^y2o?m>>\ArU||__>@qF9(*9u?\+?p~pm&e_뛫|8 Zg./yZ%g}^cHK$*83nݱߝ*֙ bYGHWFF&fkh +5%=ttW0 d1?Md`JFCph#42LG'c&zb 2/'}B>tE:qR$U/k%e/'c.@m߮ĿawuLW( %k+=Xaz_So1H+V ٙp] pL[פr?ny@m +ߪQ39WclY/&r|> +X/}y_'0!/uJ Ҿ+{IJXONo_ 2Pu[|fjBZz5dWGU]EC*iV5 =ݕ7d9诠!UJC+I[zlmi ]M8L/>Q7w{_K7^ΎtcZ?$9U/r,XdͯLρ~2.jD@_- YZyWZ//}}?&P_6XS~A}\j Ǭ8G'p_WZĿTxbjrfaV +Dd)Tk!}|s l%?H_~Cl%? W(w*_JZڽ5k$UZnFFH`֐viTvhA% &=ԫ&mZ/#-*zjP>M>L&#:R{d& C|>-q:EGU_ZB>s~_w!zj|gs0YOƽj=˺__v_YclUu@RŲUs%G>8? WUW\o|+氪5>B_!/;tC_ g_,~#4v.%.} A5n!d{ @ϼ:ga_^J?s~R'p_.`ze9'k8/kY0o`@=2/c|,󫞓nݺ|7x^X/O+/GT4P jҫ"]zӮ$}*6&Aӥ4HܡZRTE."}MBjHcP>yt Ig{:WW_^ecvӈꀝؗ9 J@P_fɱ|kXH}9(gK@Y{VdX'$W@VqJ!|9?#D_`n+U uDF҃=Ȟ;a^J_|\G鐰W3=}6cz9zz>/~敫Eݟ21nZMk5UUA>w)(^Qv^5h֐j45j~xӃZ-U!u2RȺc4x2zYtN҉N:pl7?q:{Tw:P߹Q;zk߲A1GdOG=+ טó`,s=_ >`g _zW>XGq̏?Yȵ?Xkx.dݟ S0vYKJ x$F#1%YI()-V٠yaAL\Jg1BYPgyl ~ˀg[pw25M;(M s"M}lw:>WDwqr>)mS;9xz{͉=zg 7Mkʕ?]7  Kƣ ` Ld$$^X`&d>`mm)Sl4 K!;^+``TA1X1P jԨhh`Z \Au4j>k0xP% `ibРR@z&?܁3g{݉8y$Nu`OW'Һ;0!ݾ 61 S0qJLl^۞0yfL\ӌ lح;1|8/ёoJdb>ʼnfdU3sN1-{`<秼+1ܿ*D>66cKyyyab<7O/磢i jW;T-Ƕ{ + +ο|'Oqfݖm8q ۀ\w$'!K CԴf )= O  #%%! è'.Ҟ":iIo!Sz&ĂQ|c:o%d{)m2ga3-滐e+8- 99Ma39q89[`R<Bgg%uuϧ4ےf3쏸om8v;soq{o{ҼII^)X /xL +Ƅsak9]&.e5+C0e\Lkxzϯ66502֐j R uJ V/z%4իه5 Rc=Q#d*!jskB[oM0v\<=Vp=SNdG;Ntı8~[;Qю'a޾ܵ!I=r{#6lnC]G=1/Z V>8/=[] f̘Co0#(psN`Λ"α`:%;7K"$&_ՀU-X؄M-(hq&+? m-(oX&fib3 X팅K<$qIsdoĦx)%!mrB D r' +HDLi meL +{`+t@Xmo? + +yS Nۂۋ[/ů+K/öm(+E\B1}ll0qR&OI.]9gabXbLL 1nl2ƎI19=ffThUcf45jhjkjUPS`TR|zh°-4y} !q'ĎpIttTgNtvlk@vԟ8cQzC(8z>܏ÇPx<ֺne c澀L}#ԇ1L'| =?^pi +qTdE.lΌw}yX^X>L>"DWW8~+++?&N9tff&uPVVߛ#0+Wrm'}1x̰wK.U>U3A nI9 _$l<S9/:~:E$❰(ű8(Nj㝰8㎹fB\1A/3ZbA `+3-g/>vb~+g[Μ_g +?Yyb݉n/,7v]Xr=2830vB),1|x%Wĸ0^07))K3B 7.A1uK[*i@[ZWa?5'CPZ56+g `;c BF~!Ys {v:NttDWuva_G7vwtcGG3Na˩vt3 +)v!ujqf ҷAfTҟBf*7 D4.&eDKQeul) xm?qN_F~n3g܁ rklY?L6 'Nz,͂3_ƍ}=—dglE-'{(sARdLBuĄfǂX-ߟ9Pg\F~/m,OmXg.fr>w*xK׏/W?gpa4@F n*X~j5Tz t4kU}V@ +zӭv9t*Y -*hWc*H6j +^ +kVBmH5ԴꠡzFͰ[ ir 1{^;׃ӧ{D|N NE8u4:z{Ӎ.!z{s,ϝv6DlUa쳀&`&$єrQ&># cSE> cy7,?mOwvr,WWx̞ oOOxyS/|`` Ҟݗf3=Gߧ#ﳎ _gKşXOxcf'θF!x,R?vƷh8Ow= $& +_`0_ a*ט{ۄF ܫ1=y{e\o. `}ivLg˸y{ 8.]1s|XzѢE3yǎN-/.2XUbk /[y]řY)^J>.l;c|RxoG~oOٱO)ˎ#')aZCR(ooB/ \X _KHIɟS]g V}^}x,ϾyrKu, s|'0Dckj{|vUwA|EaW_A{G'n8e{k1ܢZ+0xPAiz r ѬvttkۧؖkWA[Ka5WZlkQ zhiAW5RmJttW!P 0t5F 5hDb6?ލk7.k+/g^98,^|%\v/tϟ3g{ N>=/_ƫ7p 8{Y=r ^HRDDB\q,o *WbœmKa:@_} ;;a{yx`a^@E燹7 w3gmHhX p_G(:AM|g1#di4▅ W3>EER.4Wsޑiwi +~pO)v ZƛRg0Qלt6`=k,b|9τvU^fD]Yamz@ਰ*lYd_v>J/AĀ7܄+ϟ9~%rznIGm#6diבZw>UGCԫHMm9Ԓv=藑~-ikWV5iՐVf_^_S%-jQ']VqvQEVNդ7ԴkiuS4P&NAj6Knz uz3glwuSg7͛+Poo7:}Ou{{:Wo7ש,9K]ݢ~hv6cCX~<7ޑqA _W{볽gHߟ?wǟ5K~9!d$4$1:~O$!ṟA wK0??1s2$s4*؟!%ALFlg>_b^).6bҝGQG-1?K:>{Oĺ 0wӳхC钯)i.t%oC5w$ Y/s2ߗӓ?92E ?s2/sz"wp`܀\/; xc֋w%^ +?wo?)ի煟L +*!"n`1 \{;tEQ ]IM4Dv~*ը&j2n"aD'jph3^m!24j"ѭ J^9 tШ֒*8k!V';O_}tۯ7ש[胛7oW_~MO__~?J}}=7ӭ"9LsO`=WV\"0>ݑzy~c=zs,}q !X +G-\(zce{:cߣ*ƼζK1c?[XN\##ϒʵJ3%+4K`QC?Uϸ/QILIG_/sE50NP1+Hat˔vz1eoH/s}?9so:skE\פ#d}c ަx\{:>S<_ƍ8,6nBI,NߍA1zZՒnBcGigbY*H_ttIS{j+Fo B W~@m*ѭ&IG\0~7UPU4\`E޼B_~q>}&X__+bͽW~E? o7nPggF9_.dLdзQ&|X %}[G2;%^vuξ?c,8~#4d /_x{yc8}dng|cә3gēuĿj;0 +s,ĂXؾ*2l =%?PJ9g#/@var +u=} oE3c_aA{O8._i)gϊ_}uﳿ/}Y ̹Y86E3yOߗ }?i=ĕ+p]O?(o/bہӨY{I0/c\6oJ6)M䐱2֐s:LS6s=Hk%dH32[.k9f +X}2[&u9d%䘾lVU*JhzJ_Aid[6y%YiɍJ䔽Z|.l6VcZl$VLȷ(9⿿czgFr#MOj&J։+:f]L]"Hs}g/}}lN$-$cpӷvQD{ҟ䨼SNNy7s|yg_ۗ5=SL8 ?7aa!Cppu[___~s쟱lƏ}{~09O3ۏ/_Ƈᄑ_UܺsǮg|S; t'*v!lC;Y'IdNd9;f[ u +. =Fx(k%2q6uF==RȜ?LƳex1,gdp3I4|V{d{*8/Fy 2ssd3f'OZrMo&pWG2pK'38tK$ST2sK'G +YN᎑]3V3&Y!\{oX8VA 30gڛVCW~`RiVppCp,\аc\$kl9Ͼ=s qie񟐐 3n'gK/z1 $>1Ia_vEOKL7],?ϱ^x-!|vyTM%}M5SV3ѐRHZޟ徣UzUe}>U/y>c^s~ = ?'o}kn<~ |^ľhމƃٍ{(Y5pdK, c0)SB 1eAW1 Jz2֑|$"3;'0+ #2a93#fcwMuP*OMP<`&cgF +K01N0s +SL`W,c\ 1k-ZHs%f2u %s X+0٩0LyyNXn8$xppeg| 9V_ ()9Q-[g ]ތt,MGBJ<ӢegsJ3>9}e__⛱v_W1fX@~rm? >ZQnr~":~1J'9+v_'{7q?9_:_ݗ=A?Lfl߱=ݸve|?_֭qp"A#Xb/VCDC]"#^Y;'> +.1+׌VTNNdI7$dFS$b{Fgtj'drFfc{:\$~1_Lqӝ`6h- Gh01-GY2Zi{*o$gfH/9  p + +s`?z=h$& +IHER^ +9'{zbbbēk0?')k„_b2`cذa +7"z^?Krl܁zPTeQ` s,O5V/XG2׿C|_p\܃œǾH+t>ʣcH&}\vWؾ^@/y>#zv:+q/^z>7wVbh?Վ^޾w?_}x?6=gN"i!6aDdᑊ -ےZ`~>y;j09e%s[}דgy/̀q.;41rr&:5QUxmB8Ͽ:g:՗̦To1G#Blni,&<ABxl2ŋFnI'5[h4~I,ڸFmGēl:lJu +EF +^ +y+V)/X +7`j$Dt5-v%xO_RTߌ5hYwSyܾ>m|ɛwp8비OxkN`}pHjX- +sS5;tY'$ێbFDT'"Ԅ,_,b>#g5DGGja15gV{iԐRBC&%Aoz:bNƅaҒJLXX)k3%)PIȴ%4!{Fag$|lb-4F̋ŘdV)4>*&/Kqd[HYML]L 죗qR$&bf|2sY +?vK)c?~N\r哅ߛuB/w}|w6p PWNۻwoZCC#|]֭[mroF[[[ZAAA={w>T$#6=saH emr{#0/xQ{ lَ?}gg dnC⽿:S~QQ4ix7 +:qκg9:ƭ_%K7iRE1;a8g]sFl$t]GɭrC2_9|w!gkϔZuGۃ.?^{-|z=ܽ>>=-\:_}_ĺQ r6#nZ0o 7 gT;XN^Fh8v{:vP1cg?׾}>JxYV<А46] WI/` iLJ!9О eiy[1t' ;淑[V}2ZX3hX2 #1na&-͇^^EfCz)`zVlad8g`Vn.|J1IW_ɹ/dm=zb*~|'$$%);w~7$ߡ,K i^->[^^X,_(^ QܸqC"=#c !pu6(A=[k#ͳAryVvؗ19>z@ȼf#ߙsH +[(H1gk xOg]c/l{ν,lyu6]c6+pr^S[ xO6l{; z*nܽ!>cm~]-::^֎X{M;Nq1q[@8u^7Wǩ+ٗ|$6Ɗm73#Bx,lS팞GT\#ǂ4*MJ9A e_yеσѬ| Ŵ?o%E4t NΐG.2 O%t2 1.< SʔDӒgnmdS eIMTإe!33KM)~9W^y̘g+_59/))F^>:YY(,,D]m8/ĵ!u@ffB(,,LKMUܷͺEEEUT`ƍٳgyfsx/jQ8"MP>i.|\ gN@b_am<$W\ S?;?rsiy,:`̳qʄJ?v`S9_7z|>>..}G{?[}n7Ĺ7st8VxW_{o߽O}}w?/tê[i}Uޓ:?ߪ+.YMWܤmoRY:U^%*2CB6z.0 K,hg"ֳjhc.\ 8{`d@ +&,,ԸrLH7=&D'A~~NO",Xd*#6陘8Q=崴o9^Y/^Ye8VҲR;׬YCׯVe +vSť}iw񝙑 ޡCвz [,BTIc<iʱ[U_pv_gxqU_Kl3Υ/1Aɼ_ m,T7 +\>|fV,mhyaPmWŏ?W|O7iQD'ր}z~Ÿ}W ڳ+ɺ*垦dIRH)tBHcDiLH $ҘDC\+I˶4hGFœK~ri$ġ`|Xzt"p9uL)ʡBF/X ʒ)iŶu2d&c~KC=Ҵ4)T⟥?YT" z% ,壦V s= mCVZ%

Iܫ~?xȖKr'ʳx1=|{s3B_1gL-_-/=^,ۄ.Ս +; 5Ug7Ɲ>f|Gy;;_?w_Zȝ;wpmo~~YOW8&R +K?a_^)޻]2_XKԴD,Ă9ѐXt! lo}|2khVeP/1D޺h8 <q>/+_6O=ד2>{lYq=w_vkO1>.#\_5fa5P?3ߔv>YrX?+?χP7$`-U9*+U|P 'As'@wV tgWa}>4rn&_!3 +X&K8B#3?3/1'0f~Fgr^Dd?y\$ʍ;ͧaYQYI9 mK7xy|_~8Wx=^c+? .c^ݻw 993??a0d\0mӡ\!Er-c+x&S |Etgpf +Ng2,|S02 30j^I +-M3 Zȫy2AYI19 E/(yۢ|Jɤ҇}|J}<:~/AAIr W(r}Wp/~I) +$sr,f 9%ɩOLA\B2b㓰4>KXD-bI^EP rxG?4(ڈUؖ=r}7yy?Wcl|=|;ܽ{w|"w?+okv Oǿ`u뎆'4-U4 5dK:A+osM2x,`Қ]85ᛂQs"`NΑG^#.Oͽg@s0f~:ƅeb|x&&Eecj2Xazr> U e%p-({y%]ZyH,)U9/2WR^*!r%V fY"2`n:GiUȭCAY +Jʑ_Td!#sҳ $$#.!KSKK$#|",Dhd(/`w񷅗8%gܿ?;wCP ۮ_}T~P?'y2^kl`O}Kz@ W=_f+v qq> Ub=?9~ߋ8= |yG}$x]x֛x[xpۅ~|gZ M!PFP3DOrpd%fAӲOm4<xȅzS0n \ca鑀މ0#hRt!Yt2v #Sd !i Sfj2LnjB85e-,G`IJ]R%W_I{8g?3mKmIJ1"9#HQDŀ( 9sQD9GغQ19Ꜻk},r6ʺw9s4Z뽏9Kh^27TfcO^6AbZ#*51IiNHBdL<#c'4 +A{"; ۹[wa@xo Nl }Ei zynKvV~7G5Hn,BÛpG7Z4iNȃJ)_"9'c!Ƌ⽈|- L2ON\>^`3to]920{[@5iJ-BBaJ[c߱sw O_ǏgQsA7_;?o?+<x'Ou&nkpQtt  /IKߏ dd0En&M[I3b6LډI{0ea(),Me}"_`e*k!OyCj+40۠a궛܃>af;`/ VW8L6Gbk,aw"\B*2  ؒ (GGQ +K^t!/~u$Adl “s':ٝX >q߬g#21)ILATl£b',{";C A ޅvbX凵뼷cV{x`Ūepr4'p# +xH cœp +^Ǐu=0z=O8& pb(WPE۳0zPOZCuEư2 ߼O_w"?g>|oիA<Oqܺs _pQ8҅zT7!<i{\-hTy*·#fo?,LM5eS™ʺv6& OMQ^ Y0}=1b fnl;_hnEޘiN[1g? +{ tVΊmYums ջa6&"`)qpڑ64^Qqd K9ziLSSUzv!(vT3 O`[vBU'#&!1Hl-~{w}S VymcVn *]X ^{mޅu;q Vr-̍Pg:*f6V.5FXT6dU5q(tz_;U?I̛JDs_ƫf1' =}Bm8?A Әjک# `Hz)KPڃ.}<xo8b7+aW4+@x#ܾ{߼׮38z@sG- +QTPdlCA/,3y +aUiY&a0 ̰NS.4J˳n UÝP 9<j:0؈f0z3l1iً1\A{Kб]Go,pކv-&`> +v^pʝNĖx숉E`|8y^B~O{5,oJz:rST>gX!*HGJFR8 +VPxm%an, 絁X6\t 'Ϝơеuj(BqUrK#Qҍ(]1H)N mXs]3aVUX + 7`c-6VdcLCy +t1_-uk,<0r=Z5в\90oh/^E+m-atsa +U[X=]QNDHsoZzRs +RTfWuaOal8?YHq;jQPdd"5#C> $" J]p^p QX +b}6l _6m.X86Vt<Zo=?R$/9QO':+t7X? }wc[w I\P!>71̃D{b[3a?0 +_׉8~}'_z(߼_OO?q 셋8v9hjk@U})+[@d{# i%v|Wm a0_pö:XomXt6;ڷN;lW=U|]. Ck mo&6]m3.|S-rXbM` ,\CGh!&!ph8o- ؑDL@HB,"x$~33RT!i-8@RirJ*[Xlz679Fzf3>{n;` \, (hn廰3({b)$# 6v 0\Cdɇ٪:7<68/)`BWTc{^ĺ?/Xlˏkx9ue{eM^Yˏ GvY˵\RMtXVbj|\dĪmXK5[l 8X%y[u/q#S=g'ob7|H2] se ؽn4݄H1gas7Aǵ`sk@mhhF)"+xϩiGmK7x';_~jg!KW8z>}]hlkBU}+[0P@F3 +MDu%QN0cƄp=:@T5v/b%ZϚ.b`i[w42 tV_W]}m]k.Yh< ͹-00v/mZLk,t-{ZXGC?Țd?oC~a>J- 8;X5x/F>pN S]3ݢ=l=Ox}|ݟ tbעݹϸDq揎K/859IӞ=<" yN]> ~/lϿ ?|Sܾ{}8s~n?bYǬ>guz~d޸؄c`)+1 TyYkOs 螮dr10a_͟&I)E-EfUZ{r7>x=^zx 7oʵ>xOӃ6գ %K@RF(w 1nȩv@n%2LP`G\ cИB #E %ܱ\;>z00V8ypL)MʦOd3t1i#a[㿷Nwx4UEbܛFs+ po};蚬f[60uŒhX-k,+ILCrZǿWwK R{ -w J_|I6Ƣu[/Iwax}EE6o*-~TV\L9uu))g]/?֧=dY룗+o}5>yjo?f-߰?o&?rȷ\uݓ( W{ˉ ~,?tq sА#Q!ObE)gF;: ?-(iFc>yփx9gx=|[wq_އ8|$B{WZQYWBd#%3q)ANElz,GV2+Q9fH.q.wlL "0ej)G@p7VoDhr$8#8vjq 3fsim6.|LiL%04؎(97̶gd|t}@ߔ-pIanls"7dKјB3 tZ&Fv0qc ̜ba h,Zk72/Q0!FKKbZߺ?<6)Yφ+֋ϟw ly_lVGco0c%W`ւR4.~'(tC^lkw' S.`绰VVT={Wvkv +o:uc22شi:gӦ233}5f5w/X3a{jo?amoyn ;3NqpN&?@Fz?p>J9a?=C1x<ᜰM~%5uHt ÿn̶oZ_[)5H+oBa^=#gp=.Fpܼ{7nM\އ \8|{GKG;jP^]ڀrFg 7@rZbi23ua&QlI{hf ;XٔKȢW:#|;%8x!-C#G#BŹ#~<Rߠ3uʡnP*W8Yœ ZῬihX X]#w?fdK +SR6cb O_lw߭OYt k~6(7#;'v͏'8O:p.`x?{GW rdB^|'O^ѕ?q/@Tϔ¿I0lm.C}?YʭFBQ-WӊҦnۏѲ:žCǰq!;k|¾N4U5(-/C~Q2rґDaW'= 2sX0I95yyOu;݄md_op?}Q,lktBڠd'b?}SntDFKr ma8hq$G.!!v;4Y9ejMữ~kkk9~)o@Ieaq ++%:5򄦙٘nPr6'cW4$Y4u1Cr7? >`cι<|YBua6OO?-vll"fzM +x33k~-װOXg<Phue?x /X7X׬٠߄u1WMqx%׿P] _/z5_X[=L[oƋr}N̘![EA1 +Wbw2s_nB&#B,/BZnRH_i2 NNzҝ­g@Ӛknasw +<c.fz`Y_Udrb QcgXoC̗$](ӷbk3_ {ۜ\d*WRKe`do];+ܢ@؟2%ao r2I7t\זW{I"}<)-ky8/>[Xãd(?dMxbd/0 +'SXOY~\ / L2zۨ>7۫3L8")g~Η~SCuɭ@BAҊS^6UmnC]K;ZH҂fkyܯw..)F~a>r8DņcOx|i9giԷGT0]nOVfb/ ^wI} ?hLQz&.0C8̝aqol5tf9+~K:rYBΎqy6QPm%(W6z21%sxǀ1Qh 0_[=iq)i^_eF}l&@KJϯ jwS<=Lú;;J[.R6q:30TT,YQ%ηaobjj/L`TUM8=|ͺkxj?e7GSVV{ >/9 O=~'/~2>*=OFا|g{AgRE*T\KUr$T +e(EIu=kPYׄ&44u&5Pᾪsr~ |n^sJ*/.q F`zb尵Oߣ)5s>q*慨?}H~?j|\]ڤ{ysB $Hb._ K23%;Fʀ cBnc0XOq18 Q8Ə~0<Ffk13̈́3eWVwJ!yg8ȇ|_uz,h~>ٵ}>?Z]mr|t%ϙΊjβ/?1em&#xl ĺgX>{ͺ` y/_ۣZ|Q BOP#O~AFc2Vx> +=}Bm8?AƤC֏OI86b?4q9eH-(GVqJ+QX^WעU&瘯Gm]jjkb~JJQ\\ ++HJND|B`οMhm9b/͒ctݍ4 jC^g'/')Ͽ,[;L80_@.2.K}jiؔ|/٧/:O:{xܖ o'QX/G\LLwؔ)"e]STldwd]Gnמ 2Gdj^dO_K{96}k~M_A>x3? HuA})B) g 76X9kyW3A^@Hdm~I$!)-.CQYJ+PZQ +W5hhlVOqUQRZ¿ WXX񟗗t$%Ox$$"2*f Ewt9ǧ<+N"'2ijb +VPu9?O x:3Zr@B_} }}XO@ ¹!:G^u@[! ByX$o;ZzXlOlK>b2 +WBQ +յ< +;hlloqa Y\~~~>yy97d"##7b_' /?;]Vwe#5EMkf{=#3[`b=sg[o?po`f).)_)l'iyݒ2޷'/?7ƨ_b5ܲ[Va=*XQߏCeh䌞P聦k5wD*W|p-;'L{4ӇMu˫c\W氮Y1uu[abNeg?oa_|`_~`vßǿ{XưV ly$뱈f9|e8]f-{XElfav;N;bWWa}ؙ%ycwyukgkr.׭͡u}P6lCJ4n{jecKHQĿ"##U0ݻ#GpF9#wssc~}09n^樓γmÌȶv/mNlYx/`Ey8`o1;tҾǪ^Jk96f[!Bbid;F昣19tL,clmn柯F12]MLmam[K8Cw+-BA0vXX#QJC|f"s8ĥ!=7Ey*FZ~:2 +3Y4 -/HIGjf +R3Sy615Ie7ﳦGYӃ~D;'vOy4euwi>I$n h4 >̢vuA>v2'O /v:v̾+nYahkpjC0? z#VWVw/NF +/_~p zFD{i*ip3Gk!87.XK39 <%*& V19+s\1s`>-lzZZKt夋9K\ZF2? re6Covo ;`c;%|] 2_l)wfl.܂m~ +l+ێm۱[+a[v,ۉ AXnsBf ,'1QH,Cba, RhfG8=5{p4n+Z 1Fp:VoGSq+ye]doċ߳ȋ},+},b/{K6{b~O1=]n,a?)cۯplo)+٭kNp/\[2L?i/Z:yStjoss3jkky'!b?I!]j,Pb,N-mV&?V(I^ vB? R6b~+"C3L03;BtE]Gd۴u>}C}|hmЈֆz.ԋB3 -1+m1fG;cW \ݡ bV }9aVov[Xu.u-lZmv Mou]l`Ky9Թór|JK}W;*aWZȊ+߉lCMf$m@_rg4 8?ؙ?3?ݸnbï웟Xؙ+ƧINb9q~N:IɄ+=?p$tO:hL&<Ϲ¶ˬje JC*N̷ œ +TMȨ{bf,u)H)m-=}!`Wh9) inM6&䳆.b#$|v}l'V7byR9>3r` èW:0Z%,¬BshaFBe@5c>TB5eT4* xM΂JτJՠܮ#*P>1*ֲe&mEf E*JlՃP>=5rZ5ڡQY53kB&4kan6 p^5UnX[ +jWc};6ԯWZԭŎuZ5H/\8[a6eU:~ wާ/;χ=y3kzE\eG_}=?'tOO(S'ޯ3dG9 das-hYƊ=^ +4&f}'m[8xO=\}'m7aPF! X7t$DR&Q; ͭ\~Kj{iK d_öR^k&K΍ؑwmXY.ҍ0\:4[b^1٣YBԏƌcP;> gBTCB WO ]JP;Jӡ1 ;-2Anp4ތ˱Px8 tB*աzH*Gf`qeȝVijS0x#'0 +$C4W6C3|,aLZt`֪ 0ЃE;`׶[tU-3Qy̜sm#q$l߼_p;=;8w?Ko9Iߒ<׉'OZ'@1\ e\qx?qu di=ӽx'Ox?y6>ɮ\˸?Q CFz;rU-ȮoA} '46Tz6~I _ ϐ 鏠jz~$}/Fdźz86{7,`T +[h7cN404A +fW%e]QU^LWre:T.MiP9sP9#2 +P:-igBd1{ }>rގ P9z0Wzeܘ 0w1@9bpzȺEEotJ2)MV4W~Ua5,دj0QA%=0sUlSBT*gnFǍSIl^~_Dr翲wOWn<X}>7׹B^O) Z =u2 HSx/hMrvU=*B-O:Ҋ8pY'ŧ2A ynk4OqqQ?un I_K^:/{|D5NYWCsZaV:4*aq%Y^ Yޖ]yWnzG^ToA{9Ao*!kd›!d?roFC~`,q>rϿԁ1x^%?ᚰPqg ѵa4hP}c~l4OII}uvfMڹP1= [dА3}H\[i bGdO^7,"z:{Ċ>| Kz_ /`x?{O>?q~y}G&|I1'@ܟS֎[Ab \\|3= +,G>'8#=㿮~|A2/i$uHI#\KHI~$NᙰOuL +\Way :P~EʩP>?W&@ P3J&Ad(= )"{>dϦ@d<Sr +TMIvo<|ǣ0) P 3@5q ~h~'|=:G5`hC߉Az(ё@a{F(|93.ƌG9B0Q84 +>jkyox ~`=DdE]N3ysΎ|.C/߉MX'`h]Og@7a~m3\z  ~/hL=G)~_ Ë*|z\$/]H/4H_:74pOQ4':FyK[n9; 'C8L?9Ύ1PyOI f,LX(˱P|>ӞŴctw}02Ap/|m@f`?S2C@~O@+!S'ь>FCt`j#0ۄgգ`tOqv0X0c99aWsn1},Mw>r~c>٩w?ƧXkw{E_["PX,/~[9^@^OZ_|ާ9zA{Tl yӓ~\$94 Ja=tJU?ꝲPGCp ?= +rWFA(L}6 +2GA=0 aޏQ}Ⱦdl? }L</FAnd.ˣ so^~yN(L<0 +J Cx'S`5rG8`cb %2Y?="Ukdcu(M: k#?h_ vx#B\f1Wnr#]vǿpĮ7nc(@\>뀋3y{1s|夨uZy> +Yu` ٰܘ iu[Vm \Df#%M=#Y}߲_#~u1XY%[BJ S9ӺFA 1P8nqP|;rGCG@X(}O߉;wO{;c08L81Z3) pv,1s;~`k`KWP9J&A~gLD.?(#UimbXWNJD9 +=a\pOcٯɏfcԏ}#<7l߸N]3;1a^=~ ( h|@TPx?a-h +kn,۝ 6Lkr;GU~O>bOl2B9c@tLff8(p{K/x$B_2K|d`GQ0]8khġff4NrXLoźѐoqP=*k0QI P| 77GaMhV환]&Ch4SMbX(#0~ Y(Rj L>C_=yq(q=ӊd0QsyBf' 8b ?s;Rz w<` `3篳P:>^COk4&1 O}BOP#O~AhLFcTM%`K=qEzj +ss^~17;[{K?R}k?m-=p[B/J҄rdFA;L+1PlUau.iЊnAQx=D~!¯lߒ[W.{p)7 LjhFeΊ>Ղ-9֦MĂ\=X8`V1?T/uMIU\}´$\Fߩkv;r{'v;w*#wOr?z*d>_ASQ_$_@r-/ +:p&B/ ?":,7_8{-5~@#$JyJzqLBxDztkzPZ.<`y` ؼ04VlLϝ #`3'`fc1-e2ǟiBl<Bz>E:(O O7`q_ bD!yG`y' ˦4f*<$O`-'߈%Wlߧgghc]':bYnʑM)-ZM}Ms쒹|]+y.LRr7ˍK Z5F2(\ؗ0Z҇_عz_gٽ_e^"_gy7ﳓ~eg|]>>'N@ sCt=}¶G~8zA sCA/ 1ja-sگ3eXb  {9^e03ZkҧcB*:΋W?7yC?o> ;0C9T|j`lŽij&rhپر?$Wڦi<J{khܸؒѻ$\?܃;aF?Uݻ׸Ar?H=>_<|![$JC<1P )/m.5#By^Ns{L^n-sq,ǍNȭG69iEN|9%s0}g?ظZq71vZ~/^!EEE\XXsr^簇2UD$NKK㌌ ̔6m۶dqqqO-{7C(::8>>SSq۶9,,Rd,22كf:>}םˏw}qJ!;|ϳ6Woë'#[5Qa ڣa3f n",/SspT7QcMh6Z\hMeGHl<"3+֌&]g{d>֬#ggzʟCoO~5hAІa_z%s+W*ڏ}zzn;t MM61߻9*6[QN(%%]Xh[症/ +/~nUK +A+=ڧ.]3'/\h>>K6>rǟE臆w +hpǎ~;|hs/o}h +)Jla7{i 3 .Ivmq`ʸaG7$ PNvoɏ0eF>#.:_\XqpO4n`gϞ$ٜ#mj6I]p죭a\U/::"!11ަMyhwL,1@ll"2YC\W6mo/o*5 }ܲ#P۸:u)C\VߺukJJOݡܟ|}QXx'Ư/ɞߥOqs6_NW2h#@!:1я6^+~k7Aد4j؆pSZ Ůvɟr~#\EW6<(S_o{wktջ1`Yh_f6Myy.bx߸7owddEPTxoq=bAC}#`L[P.=U#0Zͮ |>|yY!|ߦMߗ^!fK;Zjԫ`#JZ+d!ۓ ɧF՛Dq֟s{ru?<?`# 25x*9qN6C$G, q!NJ܏~\81 鹚u)G+Z-3At͍;͑SCv3ĩK.3'Zv𗦺ョqďy'fGG^g(#.߯kpǤju7PE!zУXA3 s0w츩Avr~xE%yWR<<`_'%Y'md{puAmq@~b ?pG[|ސ32W0om>׌zmZ:r dcޣA-H7}3F I8v/c^p?7b[h deeaxr؃I|oa˻M{}?0GܯjէpDE>b4a>#CtM[oO%J|y_s>*|=V>(^1+""[la ml#ϼpF_>i`L/kzQ[tx +o;¾$ r{rui?AvÇCu=>1H:Qǫf@9Bag?uxU(?e\kƠoPW}~Y>Z 3`^j# bAl1Mv{=w. Z^8;K??`'ywt*zUxlj[xЛ{K8euOG܏^pE@Qк>7~]hّ3wrLbz~wrvrn[;ֵ>yԢ0SxyY䀴X?}y9>oQcIBA5XKR9)-GDHCҥC4_r 3ZWߌ5k1͹k5w6k̤C/ozsf+h0G1]<f=<xy^{pl%&eOϾq&s7"goX7gh܏oX>zK hܯkG3vL~4t}#zؾ[eN(MWsЎz߆s̑>NnJq +2޺? +1ofܯ9?P~Wf߱^.)::Vh 6昘0x(--^M~r%_g}ʿ+z5(MJu@|ʿ~ogq栍ܩI&5G߻ܮ>NJ+c#qV~}Ik|?7,1ǟgjN_t*;[J,qi1C {i]8vA֋Ffrah` ŹY\/}7eesOI_PQܰj17"}͆m=@k]cz?zhc7^~(7 7~hk~ؿvPxx$7W_P &7mMkn,\)?&j'̟kмysn֬K&9%{KߧdZ1o1}+אX٫O뀸b؆/S ߇ q 9hcxz 7F|ha{H;tgfrDB/κ\v?Ԃtƙ; }67z2X}<)/qܳ4,}gu_s{oyXVofy(RʐΝ ?(a,>-|1]g?_9me?=s{4ܨb.wxzc/!sn?ZuB-ЎQvkQBn?Ès ׽%}`7׼ec_8c r{y~t=]~~uAzSV|2g OVܰT3T7ɜfK>OKl*E?iK.r1#⓿0g,l6|Mfx5{U4U}>~Z6yGOnүwZR|vLWG-̿^ eC >^\-]?YGߢE a>ߏ=Vq1 QQԿ_?cOaJrPJaQ7n2}4i*Ӟ]o7ƛ\5|O'ue_|`'y@]/@ P|5vAs~{yӧk{au0+gyj'p>Vˎ&vNy;F n1ӈ 7en=n/wYrE3n-MX|~2X׽ϼ^t|ʔ)tOikoRkR?\>L[XQ?!aaQN-[Qk`b]x.\V׭fǺؕDUD#732X.'R;ۚ_o/a6şh,S W8'!u7-@܀Cw g^@ gy_\';8Ӭ4κmK=:kvQ^k/s@a=QG\ќ,ڏxs_~e~uLHH1m37n +f59mc]܆χh[wt㦛7%73@Wzkover2=¼gx3Xr[^ƺ?WlՉRpox]+mtO!Wu_6{/b^xAXF=OUЧfqsn?`v#{k¤?hZchU0#P\pI<`hʦ}8WW*%ؿZҶ~>"|>>#|!W5~:n!D*J &Wn +L{B07ozD-?~l Am`΁,YREE yhl^_{m/_>7o^[Y& Dp_X8LAݧ~F'1(b{R'q(zYsƜ&4Ŏ@?zCBU'؃D>H>6HJ0QEroI~Q`4 +<UEAϓԉ\QԜ*'S`p + ~zoG^yzfzyv= Wn~g?N} + +K^pDFĜ#sr>a(rQ >BSߣϬ:YP#[`Zޔ춆dGuSl>ۈPr[A6{9\]) `Mcߊ"vdzkHGO|??7rp4:z]Jb쥨^Qxw{3Ph8c#5hLZ-Sz/Q=(J7Ѕ2ߙJ.{9QEM~DwS%G&Urv!?{%-r itNDp'

    W[gױr7{[Uچ/ߺuaI6| +۷o%KӤe4x:zvf賅JQݷRX-*c35ODMRQĕT?f=f: +C5eST ZeU G)Urt%?{ё){S/-`u8x|!۷`ױ\\&ʓ?Ȯ뿈_!/\w./c;vSQr}k>=LIm)%5R۶INI~ݤ+ĬoYޞc5AnĿ~AA_~ʚIobf%wT7#w@lUh->q<8a O:WX dsΤqeԣ +Jツb3( +jBcR0lkYHuC NITUw$լK5R\CUSs_"so/R?Uq \ȥ {G~il{bg]Mgpgy̾CimmZ{JO@gRZz0MBתU?9u9Wο{"<ꁨC%{xWXg{Pt\|5BTLKk]P۸Gl0gTżh|8i 8v/9=ͦfQ3ah:ԟBuC&Q'S:cvTUe C5Pu| +r ӛl}(9WI6Ke8?>щo5O3x¦Sy۩ /8X!Jx6uEqIm=+hia JOK@i@oЯ_,?\տ+jV߹<s<TP5Bj`0h8ZrүД*5WUPQ%Ԍ-@.gۼmf! Q8!1^bM0z*mPDԬjXկ7Lu'P:)8[c=Ycթ>jWG:ncۿ {oU WRokW#ǘs4f9w^? x*yN3V+Nu7b}KӇ;9؇qq"?o?9`.}=tWCx߯=uoI]@ýo5׸>7n8@UZy󖫛yr+{ +P:bZdd|4:o&6"PhH +KuғUnR}$ի:BSHh< '>fXmmc)g(UseёKd|wl՗+؟c\zq *_󌏏϶ +޳[^Q}4awQ#)*.k{%q +Fc/KgN锒F)ޡCGIḃо#7lX[j-:z,ʿV7Cti>.gF=Ko @kfѺ>`|#G}a#6@-MC)Y52j3j:)$(RyT/0BGSJ39#Y鬒@?=Hal~~}uߣW2 +̦FV*`bOo9зmgmMQxTg 0ߏK"8Om};N~駟~< }V,*ך̃K/qS8կ[ּ_5NPO>Qz۴iF{{Xp A]RXlzU(R>jeQ݀T?0TΧTR>rQU{6Uζ>|!8Ї9:^A?8Eu[qڀ\)(4.΀\k|¡<|~q\16tF}*V[7w즎( %8|*N#)_}o=~cO؟kY Wr-0:+k4t +5~S^_vE_|-"<'*S9|U2}_=7>޼wO5aDD7z +xh s?sǻes;Y=#u@]} cms&N.{5w֒Wm3`k܏x{cOkL>+Q=<z|~x(Sx8Pp=3FyN{У?M|Cҝ\ugjO{q]8v{Y Ŵ?\}Ax'Jxx~V>u/޼Pu߯yߥ9-G}i^u8zuO!]Мy= NB) >ρz$⋄;yl=M!>|:uz+Z@jN\-p1O=ێ?#7!Lgc,zO[䚍pH8ߪ# \}#rCX/Gxq7{g/ƿ^U˙[CWߺty{/uΧxDv~߇o4Xg<ۥgrM8$\ߧ hcu}io+V5޷<\m5|[o[rx߼ߺ[!uX3A^@ fLA] :/TaW#]p{=N3=|LJfԍvdi ̩0ȘH&_R+\n j/r惥kuC39N7Jf.#υ6 {6ymwR(.%}s?p7#y]ۀv~iG{뇵5;W7q 8 )z.Zz=Oma'mYl]4k_>zl &G~{0_ ͜1z=;"/׎%?F)cU|$lu%{D¾6tǟfgWJn9hGdHF/ l#>kӈnLʉ= lbmwMgΥ^}>g~ٿqq񔚚Fڵ}Y9!Chj:x|_ z3>iA?XV߯q=^`[]ߔ[薓>3? +~{Xu~iڶî{S#f4~";woIZq\.;'c%zӝ_>{;A|5ey~з7@$w{wڕt"ų?p{;q9M\6'k7YΙQ +Ilۊ?d׬_Uw)ս_}s0J㻴_m*^qis1~; r剳عa?;F[ͼt+,ɅM zg,r)7~K߻os.%}2q_s}v,+Wٶ#=E˞~ws&v͕ p/{{~vyGe~[V}O.M_y6y9Yg#w;fbv )1j);sYC +1HL[;"߻E.yF:=}IIII_lL Ǡf˝:umvǶŻ6u=Wg%l_m m!G.yΑ <{>w<_|5+oNhq-GKG8 a?䀘og9 ľ/s#7A>{pobK,|ǁJ88}\9h-7|̶Sm>auSo2/e+xeʴ7蟑]~iAKfY}o~׬o}f~?>0BH7]>r'3BL+}um4@>}3:{A_qq?(}w:"50fm}f~7 %WTMO^?Jտ]ofʪoUo)>G"veǒ7ّ@a1e#}BO[αKٹ}uf1|k|>衖X/a_|~Yb{a֟Ancy[sWY]pu{Iv,~v {9p.옹diع8x]k?0fP3TKQdd$EPtL,EQL|b x^j5Bj~{)?{ݯzٝt,eK#b-(~`~~[3k8p@~(h{GN[{׌=࿤W@I?ޱ(facRcWWvW~d*;7VV=֛CE_y=_ ^_/{O~2?|+̕;V<K}/.N>>k~>DTe;}{¾ck^ ]{of.e!¾7;9SLueG|vY̎1ؙU96r=#_|'6K +r,y;J +>S߽k%$&&QBb%Il[.;}na~*Yao>v,|˝O.ᶺ5^7_??XY)-^xBY9oܯ~I7 S~?~́˹ErPg-Ws%4qWy6E\`>yb7.}k!s@zTGòWYwM^->U¸We/|mQ]EҴyWymśSo3VdgG?x(v#'4* +Uy ٵn;X!n˟vxș+z9}[=C1W*΁py(L +wtTƦH EͨMѨьf4H݀m0%qI\b;5ӸIn~]3s4 bYY9@L>]LWtwwmGi~2"ȩ_dUۊOEVyqZZZO$d1Zj=kuc#5obdV'oƶ\ ͰKQZYz7܍>45چ@;wjFgw/zzgo? bh ĉ8~Б#! qQ9yN>ӧ(8u4Nҟ1|ǎC0 c?|)Пs4?s1 <>tvv{?Ǐ9.s]tM=ٳgq}}{P[["dffu.׏EFF؎]ٙضs;ru5pAtQeGv~vf@9Ue=؋CQFZa13vbFw/fvu`^L;vqCbƞӘvNLi;=(~ooĻ~%>-?ǟ+՗x/_k-C0X킮 ByEzQ`,@!Ey葛C^}YEXWz,#iystd[!_/N/KE܊-,bG,)-"nVJъTy"EĭNq3Yӣϊooq}E/_Ͼ^? 牔_-s .qbe%9UDnB_zVlwb9OegEvYyNN$Nsa|$m.ltw(6,JZk7"u[a/DEu=CpX +Ǐ3C7p8r$qu$QL96LR8'Oɓ,s::<߁潧]]Aߞp70}`1pCC,b9C<;|8:&s:rDƞÇ߲}}AGyo޳{cERػA?g !;=hjDU pբ.W +[1,E(21jymn݁]miՕ̽ۑ9 ;d#H6VF1(FLςi{S/VcC.=ƴ1}Ji;n8_~x gpӈko/.'pS8!yO4 +؎P?۱=;Z6co#<ڄu:H)MF$2O%;-֘kKkEQWjFgc辪uz~bG|M8>/tEbWY> Gs +/߈ė_~&O^<,G裢` CW|m+>1lkV>Ņh@Uv{ҳ"~jܾy<UzIgDX"Y{2zҬG}xH^!i:|&^ӳ#V%ʪjQ]BncTmG#+hmD;qӋ}={X{b޽۷ӿ q?d 8t1gݷ~{ڽtvm]tu=ջݻ*'ջ]{ѽ{?w@ݏ@>ҍ_;jZQY׌jJ|(GYlu0VevW[`ޗldwĮ4l߻izx6[ 'z_ڂmݗ0vL$qea/s1WzLU~m'̘s`6,-UxBv9r>0!,& ۊP o]uZmwuzOa~D3sf+v݀Cke*l[˱c9ַĺHnLXU۱  ;CAl,Pc~ŎˋC/ʣ/@_#cp wյ\n?+Dh+p#zO(k-[ Dvc\om8T?<˱#@&9#ݧO5f}*6gc{V!-(0R\gYʫjQU[:jPrs< 74\n/\&x|hlnMmw.V8F{wOH̡"]Gzwgw{o^ٻ{U>Sz)PM<;;{;v/Сٍus7:X=>4 TkCYM+J[ +l0W`FAM).rEjήضg RX|9֞Mª`CK$$r)z9>^ϬŴg! FL݌[|:_؆/kHz%k^aӛyۉCҗH,~6Vi&#]i@ɧV8lBA+;Fll-Z"? X bB,]eHj\ŕhJǂ;1gFW=:7eq'U(.Q*l!)]^>1u@sos-gԞ1Ix +bX,?>~J2<$zb)лVd1t$$#Oл+֦0Ҳ-z3 9+,BYe *kQYSDZ@UuAM}jݨqQAu/}py}p w3OK [I,ok˧HƎ6ۨhG+_Ź{77.Rpl{Zh +M(ok;|m: tFS@/ ok/i._ݨmBU @ymJkQRՎURSe#jW_\ͅޞӰyZ5'`Ź,8 / 1xyS_Y)$a+K1e{e9fݯ&#w X^2~ ޅcϑ $e1ҿ\`Gu*^N†H~^yd.V=4+YH:9 D8,< g1WcA&ܻsŝb:?{|{Xpj @nN17á+c|.9N둗7]]y9'8N<>.(v>_e\5D(S_/,=?3"<(>-vZ!(;DZB^[k=Z;j')- KgІBs1v(.@Iy%J+PZY2EU5RյP^CGyTE .TXU nTݨxX5m^&xҊ6PftEHf%@1H |KhloEUQv4t(DCKZw܍z_7nxQЍ*W*P^ׅ.t ŕwVKyVPP놮blo)Bjg&6قb履Xzv?8 Ǽ_gg` 3Lzmf63~7߼q{0`"y||sfOļ?&b;XB,/0[1{H b_oǼb7`WyX\,l$%f 4,Ò`'cc82 M˓0ʝqϹ;1H<]{07]zJ/Ycr> !橯"9ژO {[|$z|w=G,or>ʼnmzc6Gk}6.?'{ +\EVeHTS-YGƫވUR1- ikDNF; V',؜Q*cAtU¡vV*ਬjj%աTWҺzջPrn7j=76󡱩 f4hoifh7>.~?[X5VPQ܁NTPBuc<ݨrwՍnu5(FIe7=pVKi7e0/\-V6ueb8 +KN,B…y&r*f?=/M'a1)T)Sߛ&RNG;30흙,|kߚoœ?0IOwW&;0o|sg⧘O1b?y/{~v~19o~ܓ31ם ±@|ls 1`EQn^1v(^Dq`!a{bL,hNW?O/sc ߯~#d?_PwH?3+roH"PȬGkXmn\:υ35#;s Χ"F+NXK~ $&(AQT +TCI 0T^3*XaFqM JjkQVWzT\ih@ x||h5jRmjnZ MknBMs3Q܌fT4QjAYS6Q@yc=(wwne5=(EiU/J*z,l7}\u!"&dԻX3u`վT$ B,d? x様OOO0b{?S>;1;1;1;1]I]11[0`3A瓿Oo)3fl[C׳s^sޗfs-b=yWg|̿6Bn~7.iuG4PϩV :U|7{pX~vɿ5ȩ}PV]޺O,XzߺP2y36nD_|El0X(00kbGَɆ| yFFtF+r嘬1ېKؑkCgs@gw@(F^y䗔 r**` +5(AE]Qrn4z44yQCm5M>T5P܄&67 M,/mۆv8ݝ(iB=(Ai qQRч>큣t/l%{aqɹ솮YQ׈jl۱3aQp柝Cc?Ì_߁nÔn䫷boowno/ooHwH}}&u&y&~&z|#LGm-%0W9.0|7ϿV} y]M79v?ΏW; +7h5fr;o8<2f|om-Yާ9gן[sQlDvc9o@=;2+E7!ȌEf)"&+ +,Єr7"3π]z2g|vЄE&4a2#l.6vd;,ĉ`(*TuuoMn=&> >/|^4yQEy%^7{ao셥s&_Lf~[`N8AIM/JPZه=(-ۋ}pع:8~;"*:[[#@‘d{v><431VL}----on\=oo} L 0kg&gg^z '`w~ `'{f^^城tMqϡ1^b/ SrxV~UTe[GUE&K/M?GzC(_c|'Y#P| މeZtλ>ŧ?P Ohu~=zG׬߂LlC#(4ZPd,&3 + f/4"7߀l}[؞myHۥ]z2ؒ'| 5[ Vd@шt ,flYn. N;t%((uP^ +KE9U(BeM5jjk᪫z]n4xnDGc@^xQkDM(ij֦FahMy!ۄF? +-04jn8jzڍ=(-ߋҲ~GY:,q6Aap "qν(Aze;RZ΍U%XңG¡{* #?Gܕ1eVL&=#L>%&wVϿ^yqSx &6L~6Lm-bac識 _d{3޾3_=ωWӹ,5\3T4EܪjO$\;$ uܲwy=Z}4#]ݗ?`_WH}3@~^bW%/)}h_{TwMHޘYCyF(2a0Uh4!}9yd=S\lݑ-۳y[6gacz6ga=i[o9X+r!Gz=6cSa6 +T-fRFLn7#aEV Sy)(BMu5jj᭫Gs .73L3Ly.=iMô?M/~,=_nÔ~_/oCy/3~3 3Oމw*&_S.݁)o!(&LzUy[1UӮފ1f_ s_O쫜9_ċ1W{@swvë|S~'@=?m /@RϐC3?S< x٧'5<m&/8ϗe`i[{N);RA tN uOu?qΧ:WjO7mŶd +W``΍f33LLF rw=7;tHߙ-]ذ%RvbXiV+ZEڼRvbUjVX+ksV|= PBl0a)VRm2[8RVҊ +TWU]]z5ލnW#zENjN%T{=(akjy N ;;4CjCA]=V|JKdUŇPBATڃE(֣ڂ(A02l+&,<6;MqGnSwl&Ig"e53$s7\O~31՟r̻-ż }A;GI/g_~ow@x,N +(ZU }PV*ș?ZC;δ3Y1ב3 }`zƶYgѡu̟zcvhof|@>\}s29+Ls8@sBw>ITKKvd_X"&*3d1h@^A!r=#)iXk6lǪu۰"9֦cڴ1JJ&#i}:nچ;l{Vdfaen6VbU yXmS>֚ l.:K!6X(jD݂|RVVW]@ nv5bo>^TLJ^J p5zPk} z#[[ +߀l؈fPXkPZ8jlQm= +0J,`E(2DZgv2csgc;1 |b3t5fIԁECq|$ڐxR{[3ޛNuO+|*^\ZHê۰`(w8vNL? c˱\)a Zrdo!-ώ|ѱ Nx1smIr/򻟒^?ʽ&tO>GW#~yMϾbD1yFFbD15~2kߛ:O'D[r#%'\L%zܪ-9Iit+sB넵ybZ}Ht.O,P D:@ybjk_;,a7Tl*J.(R:ȲL|tXViYH\E$,".,4 lJK :]/7 +KXn{"ϗJrIrB:nC~q&-'BM`/$^V'[CZZ'6׋M]-۪NɭubJ=_'(ז]ah ɒv.a"0;[zeQrKPbuڰXXXk)[eXSuEà(w5(܃{XT5 DU|Pr뇞P\zꃐzC1G яťg>#t<(.>AHtpUŐ_Ģïă_^^ y{__KY3b2~SΧ/0Ij I%izQ'JT'&oUbN:Km(dtOX/*K%(-ubQ,Np"VQRf+ܳf|H\*ERmUd H {%K T VbQ FXj 'o3O`_EZe |N6uz=bs{XV|'HnC'M ~A4sm>zo,GRb2sO|'/Ded{X,Ãr;q/t'5b"ږj_Gj9&m^2|R4󑮽NGyϊ08Ŗ+[._l &eQ@|]N|u ‚ˢ2BÈ/a$}!ލ-¸Gfw kvajƬvr(X2G'4:/8ϯ~\L;.V J⻡?;0(*=JϠ<E dž{!/>w|(.~,.?<<ҽ>=G" >ߋ8:a0pM$ ^WEkbL׉Iϵagg$ +V{{bۑ2Cž@+˗r> VS׋;.kyb g>P$ ޞ؞ٟ7*\S<|M*k}8HLPaϵA|8Hߐ(szZ}sv(+} Bs`r/s}:7em0xAܗs/sMXfQZV*.r,!S %@+R@ܜ<_jkKA(xc{[eY7q?b_Z=bc4Wr}_+ֵ/:Yڨ6 |\V\߻̧Lब vc/$9כGĂ_X $e%*@ƋK=e/a.| G8{{{9g Îf;[9c#elXbW_돋eq}<X4kabq?zAQV}k@T8pm@@?~#q8!(\yS8^0_ļ=~޾b>XtuB%{}@UI/>쳿ױZ!)>%W:J}%cK=y{;}p=Ò1e5^J[uTfcjJfXf?H4uKs hwOnUz=z'ݖSqۙP'3X2л>2e1bKEW$#\*@s.O,۲;ۛ2Z%pg(6d w}byuqשHoz=vsO,Wy*`@2!3sg0$@s/0 +J@1%SNgƕ<y@2j^  +O`/z\+^-y\bBnO +ӊWɅcC{|9D2-{|sM^{ +5\kH>!T/(ߜ=9Ћ\`R+^󿷅"5= zdM2gWXA9z˾zyBz>űs~dZ/zg&Z, +VZj`H2>*k eXd^E+"՞y ?5OBQâ + +׳׊gO|gvsM^[+*s6Z=?[[O|Y+z8 +׫R{PI|ezjO< FFWXA9zOP{~E^㚀eH^ae|sıZϒm<'1@"sk9#ι.P=/Pⴍ.K좤DW?Ьp /ʾìZ″Ts/@[Nu髽G}.")9sOu* b 8T8@y<#ɸ 9^}u#|>!wHs]2.3XNq,֧8 ϋf?P|b+<̽eG9_$~\_%xHsG̿3j?I=yHBg Ŀá+Jx@uOq, eNYQX } +jnP9O}?zpDG^q9k?/(Wyk 8kg= 9YYTmT X~AD ($Ԛ!i3a^TK9VpO 4C?H@z&kf߯|bu{%>?4ǣ^̾Y/ͧ~{}7h$z}_ wGSާgiO$yp?WwI+3#7X!O>jW2Z?ȼOϚ?4S{}~'o?#?Xf'eo0-C_^QTޠsI + |JyFHAj-?9I쓽Ň_}~~>'{|j//=\ۇs~hׇ<z^ l@_8zT[z%f?)uaz[1M_@@=yr>Hp??}eWxPx]`W<''_|^NP\ހxWc@w}:rAϧ8]ee }N,3סO=*=~bJ_] xĀPJbUQu joO2x'OPp?].wS<~OޟפOPxW〶OuYK4> :?T{9\;|_:_Us;iFbH_=5FHe=_^NoK=jP29˶*^5Fh|<WZi>X?%F|?\}p(@(1j9] )]bCOڠ6Dj9]3b~ywO/^/p,XR*{pZ_z}md|L2Hpj9g2}GXw~hLJga~i:xD=au>QCAHp=G^T\,)F|_9 P_IC*/ +dv~Lwюׅ۫vx`KRWF@^ϵ ;Z^!a[= [Vn}7x`8&9rGeP EOڨ)$:fW +k^hOr r'P[/eoG|j<t{%CM\>HK);խ7B+lv_R?HYߧ-Goz)4_Ki7d̾@=@;B0dWe/|0K;>e-e whW`xԵWWoh G`>¿dv{){W⡗~L8&9!IwM@/B-¶Ih=R(ޟ\'oB^?g{od{#/ο4'y\K @iq`%_\D3g/ <E3~P%KYh=µJ9rި4@3uhNyLKb~eO~ `DCqT A icd9!qea;os!g]2МPqϗno?Y!y:ucwPrEx!=gdkiwUܳf}OiOahNGY2Gޗcch}5#PxE~$G@~@3 eK K| ➁O9dwZz 8_>8s;5}!INJgK;,w#>}_ `9<-٦Ifgs;O>v_GlS}%]?9S` 8@0o|iG3Ae@Zy7&VQD>v ߆CN0s}~_#_N0q&>8yNsr>@~ɶGW֧;AtNN0S{oǏj4CzY}2iTZҨF#147IhYhH%j4CzsQFbh4Bo4H F/ϒF5iT_ҨF#147M#j4Cz#9iTαF5! j4Cz#$j4CRٯTk'g{*ǵPqOv?קGS9z?qԟW돸r\;qqOvS?qY= ? = 돸r\;?珸r\;''GS9ϝ;珸r\; !Tk'qOxGL,<(~ 3GL,<(~ 3GL,<(~ 3GL,<(~ 3?|oo ~ A77y ߀?|oo ~ A77y ߀~ #7`?265j]Ԝu},#cCPs؏ A͹Zb?265j]Ԝu},#cCPs؏ A͹Zb?265j]Ԝu},#cCPs؏ A͹Zb?265j]Ԝu},#cCPs؏ A͹׋~4Eɿh=-{$Z)HGSkُ#ײMGe?"_~4Eɿh=-{$Z)HGSkُ#ײMGe?"hhhhhhhhhhhhhhhh0 ~pc'0 ~pc'0 ~pc'0 ~pcGvO1<@ ?O1<@ ?O1<@ ?O1<@ x?Z\PgZ:?Ǐԙ<~u&<-.3A-yhqA jG LPx?Z\PgZ:?Ǐԙ<~u&<-.3A-yhqA jG LP$&D7~ bIMo@"d?1$&D7~ bIMo@"d?0&؏ oh?`?&؏ oh?`?&؏ oh?`?&؏ oh?`?H7~&#$d?xor?MGH7~&#$d?xor?MGm/MFExih{4oho7_4m/MFExih{4oho7_47Q[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|;k,@|>k֬fav|<(Vͻ'Z<[gtk.9$z.n]>RuXE]5Ω& +SDl7V]opWpn8+Ot\?ݓ:)`J +tAAAszs=77::m,:uUam_- kvWꮊk{nw I3j 35\ >'|~?8Qq3|rE|oZ=>Ŀ;Ya;tw}ﺮ݊f`߁xya}{ӹi:^ W?} +'gY~5 һ>/sZRX3:^_}nL3̖|}uH ݐ +޻-ɸW\e +l: ! !!RuKl˜aܚc?z(-{!3=3pq0\F-l0ܴ0PAt_]~~|*6c =F 9& :>Y>>/xUp5rivq0coKq;q{8:݇>a>Ioo/];;;ǍF#-[˗sM6a;_J/r+~8oé~@7>gь3g:nwȸɓp0l~occ3脇G'`ʤG`ljIPL{S|Llàe }_A6˝A +W)*p$WAK&;UpP#XP%F$#<>h* BG?: +t1;.ZK1rɱD" 9 +d$)@Pr+m wO._XX*QbV {mI⸓NwC +U@^d֧5uCc +>I2p%&ԣƞe4\2`́"8U'wu6J'oTb8Xm^ۆؙ0BGQ(b w_NJ1|mǫ;#E߅řB^='A8q%mK;jY1 Gm8Rytb:Vaq%/ (=E' almų޵2[z{= XQUUuAk=Գ[ W#{do/ok: gg#{1wn/,CXX/؋^tvmDO/_r%׭ޏ;ø~|?p%^:~oppqpoP}ϟٳp;sOéS}O>;~vtp66w)G0O?"bƟ$S6g:b-ev<ldX-;sW,D0c0O7ydɰ@:R$#( ؤXF8; UX2:4rtiam~XR,Cb*sdȑcQrDH@𢡄cA?;&s"(.q8ɰ/SNV;)HEO +j(jLAӒiM5^T.>Ra +zx;Q[UYhEDTM zS x==ޣ?c k@ІH턮=%1;6!|0KW1WṰމPmdd·x/]eS7g8cSGT0c +#.:ΩBuX^*4BҀK +̳]`o {?kV<qǏSo{(l&NmLؘ1FɏNbޓ!|0%SP>l /31gFv 2'\,| +(!G@!/Kɔ`'W$ M@@tc(%䆠jqLv뻴2t~/2GtUr'ȡ#N?@f_&Lf>0@Wb8SٹpZ$ؗ&sm1(Wr=uJV*T5kQcSϵj +;US}JR@ +>ZcRj}rP5/"b!(Óoi0r¼VNfm͐TL)"uG;|Y Тne,]J/.>Y066'QX2çs1eȣS MVJT9עpv#Rg-Ac+ڰо^vp넃[3>nnXۅаn$& #=j{P]݃ntoO5U0<<_|yܙ3rn\P_՗_r41N5[͛vV^ƫWQt2/"||gI2Oۙ`_`#xFǎO4'!ǡEB;Oc9XrA?[KoH;X6 MP%/Fw(ܷyScgn$+ʜwo[<y~1l ]q/J:Ar)9e{}+g_EP&%S_ +e^jJ3nub@6=a1c1: +^zA_CK%tuș݄dplܡv]m.+;,GdNDFuCFNNJJzPaA]eq^x啗ɡC8y8שy;O)H7n70t^eKyſ deF|*>{ه@5v?l[?l?E(tP?,5\B +`* Oǀr6nPFW`L։2cs+1Ǩ(}nZ4TA\YMHpZ6w`}'\y{m s'=<: Wt":)zUU{҃vBW/?e ^݅>xN/=LxYeX(5d̒@=\mFeO(KJ^.M?B_}Ql )q2$De$m WbS""_dߞ\ש`Ss8;'%/UaM;TxKף5ʵi-QXDt0;ڠ1x%6d:8?Crb #4ߚ2)o #s7bއ?{Vta;; ,{H,?lIhtgQ?V%)k7Nn7nP,èc e^-̩48p(sCƬF;-Ec:t˾ .p끽],t[11XڃS_SӃ]=1]O¥q i=۟?pZ\AŋH9Yx9ӧH3'aGy9CyW2 =?~r_YoD9'"߉{gs(#ߜk zgfC%Mkg?!yp*J{]yGWAMJ wCF5ܟ?| +צ~s8F6ؘZ?)^3\?C/pp|g/a{]nL 4a$A tѦ^e_5 ױ޼[o0MucY mP2c*τުעɥZd& ر`RW(x_Nhk3ӈnܟvR]`{OpI\o߲Gŏt5߸פ2z]UG1u`dA3ՙ71)ͮ(wE$ZV:ˡ?~w4kn2e7jjb+/Cqq?k׮Yw~+?C)ulz/E#9ΞϜyoo>c?=zc@g&:q<Gdz +n5}|o_/%2e'A)D< ryqp'a6 Ex\N EIv0*tG~(I!G%â#,D !TE==9qp.H$8ipЪ`OXKFTYuJXD +[UxSj|)KK{X: KP2zs^.Ly[<⿴\|64 ѠY9k0^qN0>Ao{9p "GwNT^C^[Hy!`a^Z:c@0b5#OJ{K]r^ >GXzM. o~=VYܟtXZ k r<Z sjc'1ۡ玳?<<:!w!*jurs{PVփJ#hm5??ŀUWahd/| o~{GٳD[~9S 8z&޺~#We.^D8bϝ㻿y4;sNVb?m#tݻ2>a:? d;>rh|]3jL Zjk)E +7 +H#ZycI3E25-  cĤd, +Eaf0ty- R[T\J3dM!5QX9b"#8|@;.sL{V,\\Yep,WYzI:%XD- P7hУ~:+VvXY"mK"a%pUowh罱Q}-iB07!:cN) +PvD](J})Y>?g=4!|hgHbqO,ڵѧRo?`mX~džAl ^M +#}[1L?:8'S_C[% 5(pGsg/E68uӱ .?ݽ~.DDtCAvvJioD}-K03_j ;[o?¡O?ű'qE\~_{kn75,|.`|g",ߙ+GH?|GI8yOy*ܟF˜ .s*?'P-bB列!D?yH5u+$',шK"uCP4`S'd(˔!o ir$%GD!!t4X}t'P@̋ wr8,gf Vw]F5W?r3;j9uxǀ;;*൹a˗"^̵Unx;b@ŀ;c ێ1/9i4@f;};5!|HͧPk@(5'P[~ +-ڳ֞r%_A5YП6^ĺYe(%G;@`K`+uhsD[ \ڄxunlvguT8pgwso7{ԃL# +iEsS/ڨeD_+WĦvk=x9g+~k>$u {ns׮ahpe!YD> ӧ1)E1/;j#G 6x~?Mϔ6 (D)кMCttx?ÿпypeN蔹N>rdeH B^KWy"fɓh$]1?4Q1JE!(.75h*Vn&P/&KTҕr䈏#*B0@n}X`O +wJfD+'p-J1vp^dZ%hRe ++ZUԮsj>KM}Yek2Q!P"l[1(|OwSpS_PV-ŵFs``:lK܈]ћN> +1=` φ>5/5>x ʜ݈(xb5俛f?|59 eg.eGQ9(? )(vJh3@4@or/hZ@<0䑘',.t< $xCH$%#]`e2:.A-CAj9ԉr$*@x!!rJ17@߰, Ob#0/= +sb <.5S J%kȪWQ%TUv5oWs=,\nTclyVDӺmGP!bNJ῭swaN fZojn=H+6\KَnTꖡm*Ǡj= `W&@T0mϡ?t$j(Ji .=1cH?Psae 02K?CQ0E}qhNSs<_s_xsbuX +VnŚX}X/¥<C޵SwRCN +{Tܣ HqoFRA܎; .8gRj?$F"?e}0MF,]b,_ro܈gv7Ϗȉ8}.^7nY?s>q;\Ƌ=~g΢i<'||ǜ'r,?N0x`?M'O I8NA4hܦsy]|1ώ?*A H/@<p,Eb,~q-KLǝL0<& X EvJ0 +Q\.VX2˹:r)I +$)@Dr@2\>H oL0&a*>iQ XɏGa\)$`_z%J(^Bq +j,QcYY`vH1ST7)[U+3tmt󑻩+߶2x>KLU'b;ZS߭3bM3ڐ mEW'g S1 Mx7xsG +؂ma۰.zvN ei#;-$Fd{(z K>ZN{݁q:9H,=X\)ʎ$4[~+~5E'J.+*tVZyaÂflW!: l>n|]hγ HlFRD"ȭ ~.7Npv삣}7޾{ͭ  $Ĉ^-E^nJ uh6ǀ6 m;^ Ww;Ç?/gpy\toW_}o׮K1xΞCө3(?q +9O@yGcXx'<GBEE+**xVYii)KOOgmmm^ѽe2YoOm̂DE7|?),|l䄅-go2B6uj(2%Qä<=A~: r/^n_~nϙ[l[Lvp'Hȡ/` ,;+Y"dQQe6/+gijLPL eaA,#1GlfCccl``=slg]m۷-[0{n~z6e ۱mfnXY VYMU[faY٬Uh4-fڊ +YCm _tU}`/uz>guYt kw@.sf),DXJ YwK! r<''%%%8sU62Rߓx {ӗK6SlXm(D36Ktн7'y.`AA졇&q>yO?7,2_tmspP1z{L>_z_R K_WĀTVpVQWɴ_\2ҕ,>)-.cw+3hXuC h33;㢙_h( ȟ>]z6V[[jXCM bMulIC`M55hzW.g}}+L_UʛYys3)+775tV̴4R~|-VfгRurF-X;-ݣgR!n>, 3lɺCׅ^iv +|c)<RNyrE<\Odff{k `<&x̶vW3M}x'~&Nf=d3pg?y-cwx./=G?ӳt={%;K$,b,(4)$$Z0O/f?ˁED-KNR9?o[l=?]Xğ۲W`]"P[:Yw{b TYɖ6YME[58*0YgfZ˖YvVb6ofkmj*+%a)H{9m;9x3Isw^ {RM@ӕ6>0_%~9 uݧzn  4iW6g(>},O){ꩅag'6yr(KL\][6yMc&z <| Svܷ߱_ϝӏq5UM,*.,/7尸h5׃)%(^PP)cy= Qpuk2-#w}| "#BYNv:dYl?[6nj~dfhh`MMJc55ꂺZ~fRVjkj\TJ%EkKKYNn FYFf&3TWir_ JE[>5Kłn .i&`]P@K$RO ?f%='o0K N\8ؤI v2z3{q3? yrZZrz{edrc#YrE%E|xPa(aU& x{6m K'4U5& *C##WU +ֱt)dM}DBOޣg@JQ/T+o)ֳzvN?T}\յ{}eZn端jU󾽆5Tżob* *zVӱ*x1{7XuLR^ZZ*hg#ì}N4w5,=3edd͛][x](=ֳy۹__ulg;98..)wK&wq̏?(H__?=-khGs@RW)y?@yf lʌqq}-RK,3cwvR-̜x_{]C=ձFVt jnflY[WQPUcFrr2k,Cd,Efo|ƿl[g4LnȖodz +GysoK%RysOzGK> kkkkNx\ݟ# u5A}Ab z & 6κb] >or]B?46sf8g?sof=~gx-a7:,N[]\/ # +YQamT/JW9|`i<< 469:rSX^ie'nv's#_)77i'PYjXeUeʘ +32qcu53? YRn.`&sҼ /#Xe|gۉšpTP9K@5$(<:R?w/ (ǓT˼MW?]mr7cOsmvr~?K k1~g{T9?g3,|/(SeزzORl~z"f1a_6+ݧo3=S|@ ,妙 hŒ}}TW@WTjhXWږ,a==T'4Գd:-[E|m SB le]mm={Rj~y4T#K(륺=~i/( N1R/nfE^g_}?bn3gAg-l 65d +0{  `PoiG3}@.oĉ}i/AS^ ggw?wإDSOy?H{(SM@~msKJI} )ϕ-d^^ޗ\Sl++yΧ+ױ ]U% |9bbb؆֠׳l6[Ƕn†6mg+ lhx uIK dzyrr@Bs;'ip3x7%rr{R,xj)H<'tz63>&ȼ3}6ۙMr6٦T3X6զg??r~?1{A?;r- hHSo0{v{X6esvVxCٜ9e?I; =$/|/iҲә2Uk:C1uEL(.ЌrVo*YҢTƔ5uu\x ۷ގf(*bzU |by*ӜDžڊ +~5׳]]lٺ~hb,({E>'qaXӿm}'*TK_ P/=?Ag(ߓ4|:A<yFZfu ڀo[j^Ss(H?cD} wgkc}ؓ)f'<,0%sϥ`Bj~T74wy:Ѝ_siYXT8+.6U{ PM@|~:iu)T''ųxS^|jUw]' {eδ4߫al 9^S:z~f~v6{YV,?}Vz:۸qhf@5c}[34 |ΟjXg46{{fO_Nr?a(3{/}B:$)+62R6[٣6-y\اxw'G1@:K~t'274y{wz߭{C׿~|mcxOSO; йi3Ƀ-4 T/::3 686JJx5׳:~G[gh԰+X̢ltE*_X}mUV+V0z-c5e%giHߺYwy ϥ{A_xX|Ou.4K󿸐&xN;cü'd66M6Ƽ\ɼyϿ,ǀ?kڒㇸRԩj6ay^w{׾e\/ L/5>)й: 3E8A|ڒr_34kaiL +YNQ1Y3w[*U67J)?]I P< +t:önʚ++*9 +kj +eggPWNJrsYsS#+.-e)))%Xy^錿)bk8'@17r_] R@ +z>$$g|ߓ' y 1{=(owx_`=gv4߬YKK€ 3=,#Xttkd߶ww{Ͽ;=w#A]A{>֧sX*hO=}R/?W&cA,:1u\ΌkxotG mT -;>uwtSOg;@KYGCS+P]ͿC,DGQ7Xue%ؼ~={vVVö YC]X#a).H{X<}LNsyOOyKUO^~QzK{R@P\)x^~MnextInt(3)-1; i++) + { + int x = xo + random->nextInt(16) + 8; + int z = zo + random->nextInt(16) + 8; + islandFeature->place(level, random, x, (level->getTopSolidBlock(x, z)), (z)); + + } + PIXEndNamedEvent(); + PIXBeginNamedEvent(0,"Decorate sand/clay/gravel"); for (int i = 0; i < sandCount; i++) { @@ -130,19 +147,38 @@ void BiomeDecorator::decorate() hugeMushroomFeature->place(level, random, x, level->getHeightmap(x, z), z); } - for (int i = 0; i < flowerCount; i++) + for (int i = 0; i < flowerCount*2; i++) { - int x = xo + random->nextInt(16) + 8; - int y = random->nextInt(Level::genDepth); - int z = zo + random->nextInt(16) + 8; - yellowFlowerFeature->place(level, random, x, y, z); + if (random->nextInt(1) == 0) + { + int x = xo + random->nextInt(16) + 8; + int y = random->nextInt(Level::genDepth); + int z = zo + random->nextInt(16) + 8; + yellowFlowerFeature->place(level, random, x, y, z); + } + + if (random->nextInt(2) == 0) + { + int x = xo + random->nextInt(16) + 8; + int y = random->nextInt(Level::genDepth); + int z = zo + random->nextInt(16) + 8; + peonyFlowerFeature->place(level, random, x, y, z); + } + + if (random->nextInt(3) == 0) + { + int x = xo + random->nextInt(16) + 8; + int y = random->nextInt(Level::genDepth); + int z = zo + random->nextInt(16) + 8; + roseFlowerFeature->place(level, random, x, y, z); + } if (random->nextInt(4) == 0) { - x = xo + random->nextInt(16) + 8; - y = random->nextInt(Level::genDepth); - z = zo + random->nextInt(16) + 8; - roseFlowerFeature->place(level, random, x, y, z); + int x = xo + random->nextInt(16) + 8; + int y = random->nextInt(Level::genDepth); + int z = zo + random->nextInt(16) + 8; + blueroseFlowerFeature->place(level, random, x, y, z); } } @@ -324,5 +360,9 @@ void BiomeDecorator::decorateOres() decorateDepthSpan(8, redStoneOreFeature, 0, Level::genDepth / 8); decorateDepthSpan(1, diamondOreFeature, 0, Level::genDepth / 8); decorateDepthAverage(1, lapisOreFeature, Level::genDepth / 8, Level::genDepth / 8); + decorateDepthSpan(3, emeraldOreFeature, 64, Level::genDepth *8); + + decorateDepthSpan(10, rubyOreFeature, 0, Level::genDepth / 6); + level->setInstaTick(false); } diff --git a/Minecraft.World/BiomeDecorator.h b/Minecraft.World/BiomeDecorator.h index 01560045a..2e449cec7 100644 --- a/Minecraft.World/BiomeDecorator.h +++ b/Minecraft.World/BiomeDecorator.h @@ -47,6 +47,12 @@ protected: Feature *reedsFeature; Feature *cactusFeature; Feature *waterlilyFeature; + + Feature *rubyOreFeature; + Feature *emeraldOreFeature; + Feature *blueroseFlowerFeature; + Feature *peonyFlowerFeature; + Feature *islandFeature; int waterlilyCount; int treeCount; diff --git a/Minecraft.World/Boat.cpp b/Minecraft.World/Boat.cpp index 60d0c807e..68419be0a 100644 --- a/Minecraft.World/Boat.cpp +++ b/Minecraft.World/Boat.cpp @@ -323,13 +323,13 @@ void Boat::tick() if (!level->isClientSide && !removed) { remove(); - for (int i = 0; i < 3; i++) + for (int i = 0; i < 5; i++) { spawnAtLocation(Tile::wood_Id, 1, 0); } for (int i = 0; i < 2; i++) { - spawnAtLocation(Item::stick->id, 1, 0); + //spawnAtLocation(Item::stick->id, 1, 0); } } } diff --git a/Minecraft.World/CaveFeature.cpp b/Minecraft.World/CaveFeature.cpp index edd817882..c84635a48 100644 --- a/Minecraft.World/CaveFeature.cpp +++ b/Minecraft.World/CaveFeature.cpp @@ -7,7 +7,7 @@ using namespace std; bool CaveFeature::place(Level *level, Random *random, int x, int y, int z) { float dir = random->nextFloat() * PI; - double rd = 8; + double rd = 8 + random->nextDouble() * 8; double x0 = x + 8 + Mth::sin(dir) * rd; double x1 = x + 8 - Mth::sin(dir) * rd; diff --git a/Minecraft.World/ClothDyeRecipes.cpp b/Minecraft.World/ClothDyeRecipes.cpp index c0625d2e1..f2fd84438 100644 --- a/Minecraft.World/ClothDyeRecipes.cpp +++ b/Minecraft.World/ClothDyeRecipes.cpp @@ -55,6 +55,10 @@ void ClothDyeRecipes::addRecipes(Recipes *r) new ItemInstance(Item::dye_powder, 1, DyePowderItem::RED), new ItemInstance(Item::dye_powder, 1, DyePowderItem::WHITE),L'D'); + r->addShapelessRecipy(new ItemInstance(Item::dye_powder, 2, DyePowderItem::PINK), // + L"tg", + Tile::peony,L'D'); + r->addShapelessRecipy(new ItemInstance(Item::dye_powder, 2, DyePowderItem::ORANGE), // L"zzg", new ItemInstance(Item::dye_powder, 1, DyePowderItem::RED), @@ -81,6 +85,10 @@ void ClothDyeRecipes::addRecipes(Recipes *r) new ItemInstance(Item::dye_powder, 1, DyePowderItem::WHITE), new ItemInstance(Item::dye_powder, 1, DyePowderItem::WHITE),L'D'); + r->addShapelessRecipy(new ItemInstance(Item::dye_powder, 2, DyePowderItem::LIGHT_BLUE), // + L"tg", + Tile::blueRose,L'D'); + r->addShapelessRecipy(new ItemInstance(Item::dye_powder, 2, DyePowderItem::LIGHT_BLUE), // L"zzg", new ItemInstance(Item::dye_powder, 1, DyePowderItem::BLUE), diff --git a/Minecraft.World/DyePowderItem.cpp b/Minecraft.World/DyePowderItem.cpp index 3392da982..61750bfd8 100644 --- a/Minecraft.World/DyePowderItem.cpp +++ b/Minecraft.World/DyePowderItem.cpp @@ -285,10 +285,18 @@ bool DyePowderItem::growCrop(shared_ptr itemInstance, Level *level { if (Tile::flower->canSurvive(level, xx, yy, zz)) level->setTileAndUpdate(xx, yy, zz, Tile::flower_Id); } - else + else if (random->nextInt(3) != 0) { if (Tile::rose->canSurvive(level, xx, yy, zz)) level->setTileAndUpdate(xx, yy, zz, Tile::rose_Id); } + else if (random->nextInt(3) != 0) + { + if (Tile::peony->canSurvive(level, xx, yy, zz)) level->setTileAndUpdate(xx, yy, zz, Tile::peony_Id); + } + else if (random->nextInt(3) != 0) + { + if (Tile::blueRose->canSurvive(level, xx, yy, zz)) level->setTileAndUpdate(xx, yy, zz, Tile::blueRose_Id); + } } // 4J - Stops infinite loops. diff --git a/Minecraft.World/FoodRecipies.cpp b/Minecraft.World/FoodRecipies.cpp index e78700f46..4b9703776 100644 --- a/Minecraft.World/FoodRecipies.cpp +++ b/Minecraft.World/FoodRecipies.cpp @@ -17,6 +17,14 @@ void FoodRecipies::addRecipes(Recipes *r) L'#', Item::goldIngot, L'X', Item::apple, L'F'); + //r->addShapedRecipy(new ItemInstance(Item::apple_ruby, 1, 0), // + //L"ssscicig", + //L"###", // + //L"#X#", // + //L"###", // + //L'#', Item::ruby, L'X', Item::apple, + //L'F'); + r->addShapedRecipy(new ItemInstance(Item::apple_gold, 1, 1), // L"sssctcig", L"###", // diff --git a/Minecraft.World/FurnaceRecipes.cpp b/Minecraft.World/FurnaceRecipes.cpp index f0a4c770e..febb2461b 100644 --- a/Minecraft.World/FurnaceRecipes.cpp +++ b/Minecraft.World/FurnaceRecipes.cpp @@ -19,10 +19,12 @@ FurnaceRecipes::FurnaceRecipes() { addFurnaceRecipy(Tile::ironOre_Id, new ItemInstance(Item::ironIngot), .7f); addFurnaceRecipy(Tile::goldOre_Id, new ItemInstance(Item::goldIngot), 1); + addFurnaceRecipy(Tile::netherGold_Id, new ItemInstance(Item::goldIngot), 1); addFurnaceRecipy(Tile::diamondOre_Id, new ItemInstance(Item::diamond), 1); addFurnaceRecipy(Tile::sand_Id, new ItemInstance(Tile::glass), .1f); addFurnaceRecipy(Item::porkChop_raw_Id, new ItemInstance(Item::porkChop_cooked), .35f); addFurnaceRecipy(Item::beef_raw_Id, new ItemInstance(Item::beef_cooked), .35f); + //addFurnaceRecipy(Item::mutton_raw_Id, new ItemInstance(Item::mutton_cooked), .35f); addFurnaceRecipy(Item::chicken_raw_Id, new ItemInstance(Item::chicken_cooked), .35f); addFurnaceRecipy(Item::fish_raw_Id, new ItemInstance(Item::fish_cooked), .35f); addFurnaceRecipy(Tile::cobblestone_Id, new ItemInstance(Tile::stone), .1f); diff --git a/Minecraft.World/HellRandomLevelSource.cpp b/Minecraft.World/HellRandomLevelSource.cpp index 26127dde8..87eed33cf 100644 --- a/Minecraft.World/HellRandomLevelSource.cpp +++ b/Minecraft.World/HellRandomLevelSource.cpp @@ -496,6 +496,16 @@ void HellRandomLevelSource::postProcess(ChunkSource *parent, int xt, int zt) quartzFeature.place(level, pprandom, x, y, z); } + OreFeature netherGoldFeature(Tile::netherGold_Id, 13, Tile::netherRack_Id); + for (int i = 0; i < 16; i++) + { + int x = xo + pprandom->nextInt(16); + int y = pprandom->nextInt(Level::genDepth - 20) + 10; + int z = zo + pprandom->nextInt(16); + netherGoldFeature.place(level, pprandom, x, y, z); + } + + for (int i = 0; i < 16; i++) { int x = xo + random->nextInt(16); diff --git a/Minecraft.World/IslandFeature.cpp b/Minecraft.World/IslandFeature.cpp new file mode 100644 index 000000000..99229a9f7 --- /dev/null +++ b/Minecraft.World/IslandFeature.cpp @@ -0,0 +1,178 @@ +#include "stdafx.h" +#include "IslandFeature.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.tile.h" +#include "net.minecraft.world.level.biome.h" + +IslandFeature::IslandFeature(int tile) +{ + this->tile = tile; +} + +bool IslandFeature::place(Level *level, Random *random, int x, int y, int z) +{ + x -= 8; + z -= 8; + while (y > 5 && level->isEmptyTile(x, y, z)) + y--; + if (y <= 4) + { + return false; + } + + y -= 4; + + bool grid[16*16*8] = {0}; + + LevelGenerationOptions *levelGenOptions = nullptr; + if( app.getLevelGenerationOptions() != nullptr ) + { + levelGenOptions = app.getLevelGenerationOptions(); + + int minX = x; + int minY = y; + int minZ = z; + + int maxX = x + 16; + int maxY = y + 8; + int maxZ = z + 16; + + bool intersects = levelGenOptions->checkIntersects(minX, minY, minZ, maxX, maxY, maxZ); + if(intersects) + { + //app.DebugPrintf("Skipping reeds feature generation as it overlaps a game rule structure\n"); + return false; + } + } + + int spots = random->nextInt(4) + 4; + for (int i = 0; i < spots; i++) + { + double xr = random->nextDouble() * 6 + 3; + double yr = random->nextDouble() * 4 + 2; + double zr = random->nextDouble() * 6 + 3; + + double xp = random->nextDouble() * (16 - xr - 2) + 1 + xr / 2; + double yp = random->nextDouble() * (8 - yr - 4) + 2 + yr / 2; + double zp = random->nextDouble() * (16 - zr - 2) + 1 + zr / 2; + + for (int xx = 1; xx < 15; xx++) + { + for (int zz = 1; zz < 15; zz++) + { + for (int yy = 1; yy < 7; yy++) + { + double xd = ((xx - xp) / (xr / 2)); + double yd = ((yy - yp) / (yr / 2)); + double zd = ((zz - zp) / (zr / 2)); + double d = xd * xd + yd * yd + zd * zd; + if (d < 1) grid[((xx) * 16 + (zz)) * 8 + (yy)] = true; + } + } + } + } + + for (int xx = 0; xx < 16; xx++) + { + for (int zz = 0; zz < 16; zz++) + { + for (int yy = 0; yy < 8; yy++) + { + bool check = !grid[((xx) * 16 + (zz)) * 8 + (yy)] && ((xx < 15 && grid[((xx + 1) * 16 + (zz)) * 8 + (yy)])// + || (xx > 0 && grid[((xx - 1) * 16 + (zz)) * 8 + (yy)]) + || (zz < 15 && grid[((xx) * 16 + (zz + 1)) * 8 + (yy)]) + || (zz > 0 && grid[((xx) * 16 + (zz - 1)) * 8 + (yy)]) + || (yy < 7 && grid[((xx) * 16 + (zz)) * 8 + (yy + 1)]) + || (yy > 0 && grid[((xx) * 16 + (zz)) * 8 + (yy - 1)])); + + if (check) + { + Material *m = level->getMaterial(x + xx, y + yy, z + zz); + if (yy >= 4 && m->isLiquid()) return false; + if (yy < 4 && (!m->isSolid() && level->getTile(x + xx, y + yy, z + zz) != tile)) return false; + + } + } + } + } + + int height = random->nextInt(32); + + for (int xx = 0; xx < 16; xx++) + { + for (int zz = 0; zz < 16; zz++) + { + for (int yy = 0; yy < 8; yy++) + { + if (grid[((xx) * 8 + (zz)) * 8 + (yy)]) + { + level->setTileAndData(x + xx, y + yy+100+height, z + zz, tile, 0, Tile::UPDATE_CLIENTS); + level->setTileAndData(x + xx, y + yy+98+height, z + zz, Tile::dirt_Id, 0, Tile::UPDATE_CLIENTS); + level->setTileAndData(x + xx, y + yy+96+height, z + zz, Tile::stone_Id, 0, Tile::UPDATE_CLIENTS); + } + } + } + } + + for (int xx = 0; xx < 16; xx++) + { + for (int zz = 0; zz < 16; zz++) + { + for (int yy = 4; yy < 8; yy++) + { + if (grid[((xx) * 16 + (zz)) * 8 + (yy)]) + { + if (level->getTile(x + xx, y + yy - 1, z + zz) == Tile::dirt_Id && level->getBrightness(LightLayer::Sky, x + xx, y + yy, z + zz) > 0) + { + Biome *b = level->getBiome(x + xx, z + zz); + if (b->topMaterial == Tile::mycel_Id) level->setTileAndData(x + xx, y + yy - 1, z + zz, Tile::mycel_Id, 0, Tile::UPDATE_CLIENTS); + else level->setTileAndData(x + xx, y + yy - 1, z + zz, Tile::grass_Id, 0, Tile::UPDATE_CLIENTS); + } + } + } + } + } + + if (Tile::tiles[tile]->material == Material::lava) + { + for (int xx = 0; xx < 16; xx++) + { + for (int zz = 0; zz < 16; zz++) + { + for (int yy = 0; yy < 8; yy++) + { + bool check = !grid[((xx) * 16 + (zz)) * 8 + (yy)] && ( + (xx < 15 && grid[(((xx + 1) * 16 + (zz)) * 8 + (yy))]) + || (xx > 0 && grid[(((xx - 1) * 16 + (zz)) * 8 + (yy))]) + || (zz < 15 && grid[(((xx) * 16 + (zz + 1)) * 8 + (yy))]) + || (zz > 0 && grid[(((xx) * 16 + (zz - 1)) * 8 + (yy))]) + || (yy < 7 && grid[(((xx) * 16 + (zz)) * 8 + (yy + 1))]) + || (yy > 0 && grid[(((xx) * 16 + (zz)) * 8 + (yy - 1))])); + + if (check) + { + if ((yy<4 || random->nextInt(2)!=0) && level->getMaterial(x + xx, y + yy, z + zz)->isSolid()) + { + level->setTileAndData(x + xx, y + yy, z + zz, Tile::stone_Id, 0, Tile::UPDATE_CLIENTS); + } + } + } + } + } + } + + // 4J - brought forward from 1.8.2 + if (Tile::tiles[tile]->material == Material::water) + { + for (int xx = 0; xx < 16; xx++) + { + for (int zz = 0; zz < 16; zz++) + { + int yy = 4; + if (level->shouldFreezeIgnoreNeighbors(x + xx, y + yy, z + zz)) level->setTileAndData(x + xx, y + yy, z + zz, Tile::ice_Id, 0, Tile::UPDATE_CLIENTS); + } + } + } + + return true; +} \ No newline at end of file diff --git a/Minecraft.World/IslandFeature.h b/Minecraft.World/IslandFeature.h new file mode 100644 index 000000000..835f8fac3 --- /dev/null +++ b/Minecraft.World/IslandFeature.h @@ -0,0 +1,14 @@ +#pragma once +#include "Feature.h" +#include "Material.h" + +class IslandFeature : public Feature +{ +private: + int tile; + +public: + IslandFeature (int tile); + + virtual bool place(Level *level, Random *random, int x, int y, int z); +}; \ No newline at end of file diff --git a/Minecraft.World/Item.cpp b/Minecraft.World/Item.cpp index ffb310704..52f9f0940 100644 --- a/Minecraft.World/Item.cpp +++ b/Minecraft.World/Item.cpp @@ -16,6 +16,7 @@ #include "HangingEntityItem.h" #include "HtmlString.h" + typedef Item::Tier _Tier; //const UUID Item::BASE_ATTACK_DAMAGE_UUID = UUID::fromString(L"CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); @@ -25,6 +26,7 @@ wstring Item::ICON_DESCRIPTION_PREFIX = L"item."; const _Tier *_Tier::WOOD = new _Tier(0, 59, 2, 0, 15); // const _Tier *_Tier::STONE = new _Tier(1, 131, 4, 1, 5); // const _Tier *_Tier::IRON = new _Tier(2, 250, 6, 2, 14); // +const _Tier *_Tier::RUBY = new _Tier(3, 67, 15, 3, 27); // const _Tier *_Tier::DIAMOND = new _Tier(3, 1561, 8, 3, 10); // const _Tier *_Tier::GOLD = new _Tier(0, 32, 12, 0, 22); @@ -60,6 +62,13 @@ Item *Item::shovel_diamond = nullptr; Item *Item::pickAxe_diamond = nullptr; Item *Item::hatchet_diamond = nullptr; +//Item *Item::sword_ruby = nullptr; +//Item *Item::shovel_ruby = nullptr; +//Item *Item::pickAxe_ruby = nullptr; +//Item *Item::hatchet_ruby = nullptr; +//Item *Item::hoe_ruby = nullptr; +//Item *Item::ruby = nullptr; + Item *Item::stick = nullptr; Item *Item::bowl = nullptr; Item *Item::mushroomStew = nullptr; @@ -259,30 +268,35 @@ void Item::staticCtor() Item::sword_iron = ( new WeaponItem(11, _Tier::IRON) ) ->setBaseItemTypeAndMaterial(eBaseItemType_sword, eMaterial_iron) ->setIconName(L"swordIron")->setDescriptionId(IDS_ITEM_SWORD_IRON)->setUseDescriptionId(IDS_DESC_SWORD); Item::sword_diamond = ( new WeaponItem(20, _Tier::DIAMOND) ) ->setBaseItemTypeAndMaterial(eBaseItemType_sword, eMaterial_diamond) ->setIconName(L"swordDiamond")->setDescriptionId(IDS_ITEM_SWORD_DIAMOND)->setUseDescriptionId(IDS_DESC_SWORD); Item::sword_gold = ( new WeaponItem(27, _Tier::GOLD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_sword, eMaterial_gold) ->setIconName(L"swordGold")->setDescriptionId(IDS_ITEM_SWORD_GOLD)->setUseDescriptionId(IDS_DESC_SWORD); + Item::shovel_wood = ( new ShovelItem(13, _Tier::WOOD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_shovel, eMaterial_wood) ->setIconName(L"shovelWood")->setDescriptionId(IDS_ITEM_SHOVEL_WOOD)->setUseDescriptionId(IDS_DESC_SHOVEL); Item::shovel_stone = ( new ShovelItem(17, _Tier::STONE) ) ->setBaseItemTypeAndMaterial(eBaseItemType_shovel, eMaterial_stone) ->setIconName(L"shovelStone")->setDescriptionId(IDS_ITEM_SHOVEL_STONE)->setUseDescriptionId(IDS_DESC_SHOVEL); Item::shovel_iron = ( new ShovelItem(0, _Tier::IRON) ) ->setBaseItemTypeAndMaterial(eBaseItemType_shovel, eMaterial_iron) ->setIconName(L"shovelIron")->setDescriptionId(IDS_ITEM_SHOVEL_IRON)->setUseDescriptionId(IDS_DESC_SHOVEL); Item::shovel_diamond = ( new ShovelItem(21, _Tier::DIAMOND) ) ->setBaseItemTypeAndMaterial(eBaseItemType_shovel, eMaterial_diamond) ->setIconName(L"shovelDiamond")->setDescriptionId(IDS_ITEM_SHOVEL_DIAMOND)->setUseDescriptionId(IDS_DESC_SHOVEL); Item::shovel_gold = ( new ShovelItem(28, _Tier::GOLD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_shovel, eMaterial_gold) ->setIconName(L"shovelGold")->setDescriptionId(IDS_ITEM_SHOVEL_GOLD)->setUseDescriptionId(IDS_DESC_SHOVEL); + Item::pickAxe_wood = ( new PickaxeItem(14, _Tier::WOOD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_pickaxe, eMaterial_wood) ->setIconName(L"pickaxeWood")->setDescriptionId(IDS_ITEM_PICKAXE_WOOD)->setUseDescriptionId(IDS_DESC_PICKAXE); Item::pickAxe_stone = ( new PickaxeItem(18, _Tier::STONE) ) ->setBaseItemTypeAndMaterial(eBaseItemType_pickaxe, eMaterial_stone) ->setIconName(L"pickaxeStone")->setDescriptionId(IDS_ITEM_PICKAXE_STONE)->setUseDescriptionId(IDS_DESC_PICKAXE); Item::pickAxe_iron = ( new PickaxeItem(1, _Tier::IRON) ) ->setBaseItemTypeAndMaterial(eBaseItemType_pickaxe, eMaterial_iron) ->setIconName(L"pickaxeIron")->setDescriptionId(IDS_ITEM_PICKAXE_IRON)->setUseDescriptionId(IDS_DESC_PICKAXE); Item::pickAxe_diamond = ( new PickaxeItem(22, _Tier::DIAMOND) ) ->setBaseItemTypeAndMaterial(eBaseItemType_pickaxe, eMaterial_diamond) ->setIconName(L"pickaxeDiamond")->setDescriptionId(IDS_ITEM_PICKAXE_DIAMOND)->setUseDescriptionId(IDS_DESC_PICKAXE); Item::pickAxe_gold = ( new PickaxeItem(29, _Tier::GOLD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_pickaxe, eMaterial_gold) ->setIconName(L"pickaxeGold")->setDescriptionId(IDS_ITEM_PICKAXE_GOLD)->setUseDescriptionId(IDS_DESC_PICKAXE); + Item::hatchet_wood = ( new HatchetItem(15, _Tier::WOOD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hatchet, eMaterial_wood) ->setIconName(L"hatchetWood")->setDescriptionId(IDS_ITEM_HATCHET_WOOD)->setUseDescriptionId(IDS_DESC_HATCHET); Item::hatchet_stone = ( new HatchetItem(19, _Tier::STONE) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hatchet, eMaterial_stone) ->setIconName(L"hatchetStone")->setDescriptionId(IDS_ITEM_HATCHET_STONE)->setUseDescriptionId(IDS_DESC_HATCHET); Item::hatchet_iron = ( new HatchetItem(2, _Tier::IRON) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hatchet, eMaterial_iron) ->setIconName(L"hatchetIron")->setDescriptionId(IDS_ITEM_HATCHET_IRON)->setUseDescriptionId(IDS_DESC_HATCHET); Item::hatchet_diamond = ( new HatchetItem(23, _Tier::DIAMOND) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hatchet, eMaterial_diamond) ->setIconName(L"hatchetDiamond")->setDescriptionId(IDS_ITEM_HATCHET_DIAMOND)->setUseDescriptionId(IDS_DESC_HATCHET); Item::hatchet_gold = ( new HatchetItem(30, _Tier::GOLD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hatchet, eMaterial_gold) ->setIconName(L"hatchetGold")->setDescriptionId(IDS_ITEM_HATCHET_GOLD)->setUseDescriptionId(IDS_DESC_HATCHET); + Item::hoe_wood = ( new HoeItem(34, _Tier::WOOD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hoe, eMaterial_wood) ->setIconName(L"hoeWood")->setDescriptionId(IDS_ITEM_HOE_WOOD)->setUseDescriptionId(IDS_DESC_HOE); Item::hoe_stone = ( new HoeItem(35, _Tier::STONE) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hoe, eMaterial_stone) ->setIconName(L"hoeStone")->setDescriptionId(IDS_ITEM_HOE_STONE)->setUseDescriptionId(IDS_DESC_HOE); Item::hoe_iron = ( new HoeItem(36, _Tier::IRON) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hoe, eMaterial_iron) ->setIconName(L"hoeIron")->setDescriptionId(IDS_ITEM_HOE_IRON)->setUseDescriptionId(IDS_DESC_HOE); Item::hoe_diamond = ( new HoeItem(37, _Tier::DIAMOND) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hoe, eMaterial_diamond) ->setIconName(L"hoeDiamond")->setDescriptionId(IDS_ITEM_HOE_DIAMOND)->setUseDescriptionId(IDS_DESC_HOE); Item::hoe_gold = ( new HoeItem(38, _Tier::GOLD) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hoe, eMaterial_gold) ->setIconName(L"hoeGold")->setDescriptionId(IDS_ITEM_HOE_GOLD)->setUseDescriptionId(IDS_DESC_HOE); + Item::door_wood = ( new DoorItem(68, Material::wood) ) ->setBaseItemTypeAndMaterial(eBaseItemType_door, eMaterial_wood)->setIconName(L"doorWood")->setDescriptionId(IDS_ITEM_DOOR_WOOD)->setUseDescriptionId(IDS_DESC_DOOR_WOOD); Item::door_iron = ( new DoorItem(74, Material::metal) ) ->setBaseItemTypeAndMaterial(eBaseItemType_door, eMaterial_iron)->setIconName(L"doorIron")->setDescriptionId(IDS_ITEM_DOOR_IRON)->setUseDescriptionId(IDS_DESC_DOOR_IRON); @@ -315,7 +329,6 @@ void Item::staticCtor() Item::ironIngot = ( new Item(9) )->setIconName(L"ingotIron") ->setBaseItemTypeAndMaterial(eBaseItemType_treasure, eMaterial_iron)->setDescriptionId(IDS_ITEM_INGOT_IRON)->setUseDescriptionId(IDS_DESC_INGOT); Item::goldIngot = ( new Item(10) )->setIconName(L"ingotGold") ->setBaseItemTypeAndMaterial(eBaseItemType_treasure, eMaterial_gold)->setDescriptionId(IDS_ITEM_INGOT_GOLD)->setUseDescriptionId(IDS_DESC_INGOT); - // 4J-PB - todo - add materials and base types to the ones below Item::bucket_empty = ( new BucketItem(69, 0) ) ->setBaseItemTypeAndMaterial(eBaseItemType_utensil, eMaterial_water)->setIconName(L"bucket")->setDescriptionId(IDS_ITEM_BUCKET)->setUseDescriptionId(IDS_DESC_BUCKET)->setMaxStackSize(16); Item::bowl = ( new Item(25) ) ->setBaseItemTypeAndMaterial(eBaseItemType_utensil, eMaterial_wood)->setIconName(L"bowl")->setDescriptionId(IDS_ITEM_BOWL)->setUseDescriptionId(IDS_DESC_BOWL)->setMaxStackSize(64); @@ -495,6 +508,20 @@ void Item::staticCtor() Item::lead = (new LeashItem(164)) ->setBaseItemTypeAndMaterial(eBaseItemType_pockettool, eMaterial_undefined)->setIconName(L"lead")->setDescriptionId(IDS_ITEM_LEAD)->setUseDescriptionId(IDS_DESC_LEAD); Item::nameTag = (new NameTagItem(165)) ->setIconName(L"name_tag")->setDescriptionId(IDS_ITEM_NAME_TAG)->setUseDescriptionId(IDS_DESC_NAME_TAG);} + Item *Item::ruby = (new Item(166)) ->setBaseItemTypeAndMaterial(eBaseItemType_treasure, eMaterial_ruby)->setIconName(L"ruby")->setDescriptionId(IDS_ITEM_EMERALD)->setUseDescriptionId(IDS_DESC_EMERALD); + Item *Item::sword_ruby = ( new WeaponItem(167, _Tier::RUBY) ) ->setBaseItemTypeAndMaterial(eBaseItemType_sword, eMaterial_ruby) ->setIconName(L"ruby_sword")->setDescriptionId(IDS_ITEM_SWORD_DIAMOND)->setUseDescriptionId(IDS_DESC_SWORD); + Item *Item::shovel_ruby = ( new ShovelItem(168, _Tier::RUBY) ) ->setBaseItemTypeAndMaterial(eBaseItemType_shovel, eMaterial_ruby) ->setIconName(L"ruby_shovel")->setDescriptionId(IDS_ITEM_SHOVEL_DIAMOND)->setUseDescriptionId(IDS_DESC_SHOVEL); + Item *Item::pickAxe_ruby = ( new PickaxeItem(169, _Tier::RUBY) ) ->setBaseItemTypeAndMaterial(eBaseItemType_pickaxe, eMaterial_ruby) ->setIconName(L"ruby_pickaxe")->setDescriptionId(IDS_ITEM_PICKAXE_DIAMOND)->setUseDescriptionId(IDS_DESC_PICKAXE); + Item *Item::hatchet_ruby = ( new HatchetItem(170, _Tier::RUBY) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hatchet, eMaterial_ruby) ->setIconName(L"ruby_axe")->setDescriptionId(IDS_ITEM_HATCHET_DIAMOND)->setUseDescriptionId(IDS_DESC_HATCHET); + Item *Item::hoe_ruby = ( new HoeItem(171, _Tier::RUBY) ) ->setBaseItemTypeAndMaterial(eBaseItemType_hoe, eMaterial_ruby) ->setIconName(L"ruby_hoe")->setDescriptionId(IDS_ITEM_HOE_DIAMOND)->setUseDescriptionId(IDS_DESC_HOE); + //ArmorItem *Item::helmet_ruby = static_cast((new ArmorItem(172, ArmorItem::ArmorMaterial::RUBY, 3, ArmorItem::SLOT_HEAD))->setBaseItemTypeAndMaterial(eBaseItemType_helmet, eMaterial_ruby)->setIconName(L"ruby_helmet")->setDescriptionId(IDS_ITEM_HELMET_DIAMOND)->setUseDescriptionId(IDS_DESC_HELMET_DIAMOND)); + //ArmorItem *Item::chestplate_ruby = static_cast((new ArmorItem(173, ArmorItem::ArmorMaterial::RUBY, 3, ArmorItem::SLOT_TORSO))->setBaseItemTypeAndMaterial(eBaseItemType_chestplate, eMaterial_ruby)->setIconName(L"ruby_chestplate")->setDescriptionId(IDS_ITEM_CHESTPLATE_DIAMOND)->setUseDescriptionId(IDS_DESC_CHESTPLATE_DIAMOND)); + //ArmorItem *Item::leggings_ruby = static_cast((new ArmorItem(174, ArmorItem::ArmorMaterial::RUBY, 3, ArmorItem::SLOT_LEGS))->setBaseItemTypeAndMaterial(eBaseItemType_leggings, eMaterial_ruby)->setIconName(L"ruby_leggings")->setDescriptionId(IDS_ITEM_LEGGINGS_DIAMOND)->setUseDescriptionId(IDS_DESC_LEGGINGS_DIAMOND)); + //ArmorItem *Item::boots_ruby = static_cast((new ArmorItem(175, ArmorItem::ArmorMaterial::RUBY, 3, ArmorItem::SLOT_FEET))->setBaseItemTypeAndMaterial(eBaseItemType_boots, eMaterial_ruby)->setIconName(L"ruby_boots")->setDescriptionId(IDS_ITEM_BOOTS_DIAMOND)->setUseDescriptionId(IDS_DESC_BOOTS_DIAMOND)); + //Item *Item::mutton_raw = (new FoodItem(172, 3, FoodConstants::FOOD_SATURATION_LOW, true)) ->setIconName(L"mutton_Raw")->setDescriptionId(IDS_ITEM_BEEF_RAW)->setUseDescriptionId(IDS_DESC_BEEF_RAW); + //Item *Item::mutton_cooked = (new FoodItem(173, 6, FoodConstants::FOOD_SATURATION_GOOD, true))->setIconName(L"mutton_Cooked")->setDescriptionId(IDS_ITEM_BEEF_COOKED)->setUseDescriptionId(IDS_DESC_BEEF_COOKED); + //Item *Item::apple_ruby = ( new GoldenAppleItem(174, 4, FoodConstants::FOOD_SATURATION_SUPERNATURAL, false) )->setCanAlwaysEat()->setEatEffect(MobEffect::regeneration->id, 5, 1, 1.0f) + // ->setBaseItemTypeAndMaterial(eBaseItemType_giltFruit,eMaterial_apple)->setIconName(L"appleRuby")->setDescriptionId(IDS_ITEM_APPLE_GOLD);//->setUseDescriptionId(IDS_DESC_GOLDENAPPLE); // 4J Stu - We need to do this after the staticCtor AND after staticCtors for other class // eg Recipes diff --git a/Minecraft.World/Item.h b/Minecraft.World/Item.h index 22d0a9d15..4a74f8937 100644 --- a/Minecraft.World/Item.h +++ b/Minecraft.World/Item.h @@ -45,6 +45,7 @@ public: eMaterial_iron, eMaterial_gold, eMaterial_diamond, + eMaterial_ruby, eMaterial_cloth, eMaterial_chain, // 4J Stu - It's available in creative in 1.8 eMaterial_detector, @@ -158,6 +159,7 @@ public: static const Tier *IRON; // static const Tier *DIAMOND; // static const Tier *GOLD; + static const Tier *RUBY; private: const int level; @@ -217,6 +219,22 @@ public: static Item *pickAxe_diamond; static Item *hatchet_diamond; + static Item *sword_ruby; + static Item *shovel_ruby; + static Item *pickAxe_ruby; + static Item *hatchet_ruby; + static Item *hoe_ruby; + static Item *ruby; + + static Item *mutton_raw; + static Item *mutton_cooked; + static Item *apple_ruby; + + static ArmorItem *helmet_ruby; + static ArmorItem *chestplate_ruby; + static ArmorItem *leggings_ruby; + static ArmorItem *boots_ruby; + static Item *stick; static Item *bowl; static Item *mushroomStew; @@ -618,6 +636,22 @@ public: static const int lead_Id = 420; static const int nameTag_Id = 421; + static const int ruby_Id = 422; + static const int sword_ruby_Id = 423; + static const int shovel_ruby_Id = 424; + static const int pickAxe_ruby_Id= 425; + static const int hatchet_ruby_Id = 426; + static const int hoe_ruby_Id = 427; + + static const int helmet_ruby_Id = 428; + static const int chestplate_ruby_Id = 429; + static const int leggings_ruby_Id = 430; + static const int boots_ruby_Id = 431; + + static const int mutton_cooked_Id = 432; + static const int mutton_raw_Id = 433; + static const int apple_ruby_Id = 434; + public: const int id; diff --git a/Minecraft.World/LeafTile.cpp b/Minecraft.World/LeafTile.cpp index f8f5deae4..6cb9c264d 100644 --- a/Minecraft.World/LeafTile.cpp +++ b/Minecraft.World/LeafTile.cpp @@ -11,9 +11,10 @@ const unsigned int LeafTile::LEAF_NAMES[LEAF_NAMES_LENGTH] = { IDS_TILE_LEAVES_O IDS_TILE_LEAVES_SPRUCE, IDS_TILE_LEAVES_BIRCH, IDS_TILE_LEAVES_JUNGLE, + IDS_TILE_LEAVES_OAK, }; -const wstring LeafTile::TEXTURES[2][4] = { {L"leaves", L"leaves_spruce", L"leaves", L"leaves_jungle"}, {L"leaves_opaque", L"leaves_spruce_opaque", L"leaves_opaque", L"leaves_jungle_opaque"},}; +const wstring LeafTile::TEXTURES[2][5] = { {L"leaves", L"leaves_spruce", L"leaves", L"leaves_jungle", L"alpha_leaves"}, {L"leaves_opaque", L"leaves_spruce_opaque", L"leaves_opaque", L"leaves_jungle_opaque", L"alpha_leaves_opaque"},}; LeafTile::LeafTile(int id) : TransparentTile(id, Material::leaves, false, isSolidRender()) { @@ -48,6 +49,10 @@ int LeafTile::getColor(int data) { return FoliageColor::getBirchColor(); } + if ((data & LEAF_TYPE_MASK) == ALPHA_LEAF) + { + return FoliageColor::getDefaultColor(); + } return FoliageColor::getDefaultColor(); } @@ -68,6 +73,10 @@ int LeafTile::getColor(LevelSource *level, int x, int y, int z, int data) { return FoliageColor::getBirchColor(); } + if ((data & LEAF_TYPE_MASK) == ALPHA_LEAF) + { + return FoliageColor::getDefaultColor(); + } int totalRed = 0; int totalGreen = 0; @@ -313,6 +322,11 @@ Icon *LeafTile::getTexture(int face, int data) { return icons[fancyTextureSet][BIRCH_LEAF]; } + if ((data & LEAF_TYPE_MASK) == ALPHA_LEAF) + { + return icons[fancyTextureSet][ALPHA_LEAF]; + } + return icons[fancyTextureSet][0]; } diff --git a/Minecraft.World/LeafTile.h b/Minecraft.World/LeafTile.h index e6c39a7f3..66b4809d3 100644 --- a/Minecraft.World/LeafTile.h +++ b/Minecraft.World/LeafTile.h @@ -9,7 +9,7 @@ class LeafTile : public TransparentTile friend class Tile; friend class ChunkRebuildData; public: - static const wstring TEXTURES[2][4]; + static const wstring TEXTURES[2][5]; static const int REQUIRED_WOOD_RANGE = 4; static const int UPDATE_LEAF_BIT = 8; @@ -18,8 +18,9 @@ public: static const int EVERGREEN_LEAF = 1; static const int BIRCH_LEAF = 2; static const int JUNGLE_LEAF = 3; + static const int ALPHA_LEAF = 4; - static const int LEAF_NAMES_LENGTH = 4; + static const int LEAF_NAMES_LENGTH = 5; static const unsigned int LEAF_NAMES[LEAF_NAMES_LENGTH]; private: diff --git a/Minecraft.World/Minecraft.World.vcxproj b/Minecraft.World/Minecraft.World.vcxproj index b6af91538..38b37a41a 100644 --- a/Minecraft.World/Minecraft.World.vcxproj +++ b/Minecraft.World/Minecraft.World.vcxproj @@ -3143,6 +3143,7 @@ + @@ -4086,6 +4087,7 @@ + diff --git a/Minecraft.World/Minecraft.World.vcxproj.filters b/Minecraft.World/Minecraft.World.vcxproj.filters index bf872596b..bb11f35ea 100644 --- a/Minecraft.World/Minecraft.World.vcxproj.filters +++ b/Minecraft.World/Minecraft.World.vcxproj.filters @@ -476,6 +476,9 @@ net\minecraft\world\level\levelgen\feature + + net\minecraft\world\level\levelgen\feature + net\minecraft\world\level\levelgen\feature @@ -3346,6 +3349,9 @@ net\minecraft\world\level\levelgen\feature + + net\minecraft\world\level\levelgen\feature + net\minecraft\world\level\levelgen\feature diff --git a/Minecraft.World/MycelTile.cpp b/Minecraft.World/MycelTile.cpp index 76b742e34..6192a23d0 100644 --- a/Minecraft.World/MycelTile.cpp +++ b/Minecraft.World/MycelTile.cpp @@ -32,6 +32,12 @@ void MycelTile::registerIcons(IconRegister *iconRegister) icon = iconRegister->registerIcon(L"mycel_side"); iconTop = iconRegister->registerIcon(L"mycel_top"); iconSnowSide = iconRegister->registerIcon(L"snow_side"); + + if (id == Tile::alphaGrass_Id) + { + icon = iconRegister->registerIcon(L"alpha_grass_side"); + iconTop = iconRegister->registerIcon(L"alpha_grass_top"); + } } void MycelTile::tick(Level *level, int x, int y, int z, Random *random) @@ -64,7 +70,7 @@ void MycelTile::tick(Level *level, int x, int y, int z, Random *random) void MycelTile::animateTick(Level *level, int x, int y, int z, Random *random) { Tile::animateTick(level, x, y, z, random); - if (random->nextInt(10) == 0) level->addParticle(eParticleType_townaura, x + random->nextFloat(), y + 1.1f, z + random->nextFloat(), 0, 0, 0); + if (random->nextInt(10) == 0 && id != Tile::alphaGrass_Id) level->addParticle(eParticleType_townaura, x + random->nextFloat(), y + 1.1f, z + random->nextFloat(), 0, 0, 0); } diff --git a/Minecraft.World/OreRecipies.cpp b/Minecraft.World/OreRecipies.cpp index 387d059b1..dab7acd18 100644 --- a/Minecraft.World/OreRecipies.cpp +++ b/Minecraft.World/OreRecipies.cpp @@ -20,17 +20,20 @@ void OreRecipies::_init() ADD_OBJECT(map[3],Tile::emeraldBlock); ADD_OBJECT(map[3],new ItemInstance(Item::emerald, 9)); - ADD_OBJECT(map[4],Tile::lapisBlock); - ADD_OBJECT(map[4],new ItemInstance(Item::dye_powder, 9, DyePowderItem::BLUE)); + ADD_OBJECT(map[4],Tile::rubyBlock); + ADD_OBJECT(map[4],new ItemInstance(Item::ruby, 9)); - ADD_OBJECT(map[5],Tile::redstoneBlock); - ADD_OBJECT(map[5],new ItemInstance(Item::redStone, 9)); + ADD_OBJECT(map[5],Tile::lapisBlock); + ADD_OBJECT(map[5],new ItemInstance(Item::dye_powder, 9, DyePowderItem::BLUE)); - ADD_OBJECT(map[6],Tile::coalBlock); - ADD_OBJECT(map[6],new ItemInstance(Item::coal, 9, CoalItem::STONE_COAL)); + ADD_OBJECT(map[6],Tile::redstoneBlock); + ADD_OBJECT(map[6],new ItemInstance(Item::redStone, 9)); - ADD_OBJECT(map[7],Tile::hayBlock); - ADD_OBJECT(map[7],new ItemInstance(Item::wheat, 9)); + ADD_OBJECT(map[7],Tile::coalBlock); + ADD_OBJECT(map[7],new ItemInstance(Item::coal, 9, CoalItem::STONE_COAL)); + + ADD_OBJECT(map[8],Tile::hayBlock); + ADD_OBJECT(map[8],new ItemInstance(Item::wheat, 9)); } void OreRecipies::addRecipes(Recipes *r) { diff --git a/Minecraft.World/OreRecipies.h b/Minecraft.World/OreRecipies.h index f2bef1f7d..0c675f3f1 100644 --- a/Minecraft.World/OreRecipies.h +++ b/Minecraft.World/OreRecipies.h @@ -1,6 +1,6 @@ #pragma once -#define MAX_ORE_RECIPES 8 +#define MAX_ORE_RECIPES 9 class OreRecipies { diff --git a/Minecraft.World/OreTile.cpp b/Minecraft.World/OreTile.cpp index bd656541c..7f3899e3e 100644 --- a/Minecraft.World/OreTile.cpp +++ b/Minecraft.World/OreTile.cpp @@ -14,6 +14,8 @@ int OreTile::getResource(int data, Random *random, int playerBonusLevel) if (id == Tile::lapisOre_Id) return Item::dye_powder_Id; if (id == Tile::emeraldOre_Id) return Item::emerald_Id; if (id == Tile::netherQuartz_Id) return Item::netherQuartz_Id; + if (id == Tile::rubyOre_Id) return Item::ruby_Id; + return id; } @@ -65,6 +67,10 @@ void OreTile::spawnResources(Level *level, int x, int y, int z, int data, float { magicCount = Mth::nextInt(level->random, 2, 5); } + else if (id == Tile::rubyOre_Id) + { + magicCount = Mth::nextInt(level->random, 2, 8); + } popExperience(level, x, y, z, magicCount); } } diff --git a/Minecraft.World/RandomLevelSource.cpp b/Minecraft.World/RandomLevelSource.cpp index a0e7a94bb..8fd4a7705 100644 --- a/Minecraft.World/RandomLevelSource.cpp +++ b/Minecraft.World/RandomLevelSource.cpp @@ -33,6 +33,7 @@ RandomLevelSource::RandomLevelSource(Level *level, int64_t seed, bool generateSt level->getLevelData()->getMoatFlags(&m_classicEdgeMoat, &m_smallEdgeMoat, &m_mediumEdgeMoat); #endif caveFeature = new LargeCaveFeature(); + caveLargeFeature = new LargeCaveFeature(); strongholdFeature = new StrongholdFeature(); villageFeature = new VillageFeature(m_XZSize); mineShaftFeature = new MineShaftFeature(); @@ -68,6 +69,7 @@ RandomLevelSource::RandomLevelSource(Level *level, int64_t seed, bool generateSt RandomLevelSource::~RandomLevelSource() { delete caveFeature; + delete caveLargeFeature; delete strongholdFeature; delete villageFeature; delete mineShaftFeature; @@ -487,6 +489,7 @@ LevelChunk *RandomLevelSource::getChunk(int xOffs, int zOffs) delete [] biomes.data; caveFeature->apply(this, level, xOffs, zOffs, blocks); + caveLargeFeature->apply(this, level, xOffs / 4, zOffs / 4, blocks); // 4J Stu Design Change - 1.8 gen goes stronghold, mineshaft, village, canyon // this changed in 1.2 to canyon, mineshaft, village, stronghold // This change makes sense as it stops canyons running through other structures diff --git a/Minecraft.World/RandomLevelSource.h b/Minecraft.World/RandomLevelSource.h index ef145df0b..b79f851b0 100644 --- a/Minecraft.World/RandomLevelSource.h +++ b/Minecraft.World/RandomLevelSource.h @@ -16,7 +16,7 @@ class RandomLevelSource : public ChunkSource public: static const double SNOW_CUTOFF; static const double SNOW_SCALE; - static const bool FLOATING_ISLANDS = false; + static const bool FLOATING_ISLANDS = true; static const int CHUNK_HEIGHT = 8; static const int CHUNK_WIDTH = 4; @@ -63,6 +63,7 @@ public: private: LargeFeature *caveFeature; + LargeFeature *caveLargeFeature; StrongholdFeature *strongholdFeature; VillageFeature *villageFeature; MineShaftFeature *mineShaftFeature; diff --git a/Minecraft.World/Sheep.cpp b/Minecraft.World/Sheep.cpp index f06308f49..6e10d8369 100644 --- a/Minecraft.World/Sheep.cpp +++ b/Minecraft.World/Sheep.cpp @@ -110,6 +110,16 @@ void Sheep::dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel) // killing a non-sheared sheep will drop a single block of cloth spawnAtLocation(std::make_shared(Tile::wool_Id, 1, getColor()), 0.0f); } + + // and some meat + if (this->isOnFire()) + { + //spawnAtLocation(Item::mutton_cooked_Id, 1); + } + else + { + //spawnAtLocation(Item::mutton_raw_Id, 1); + } } int Sheep::getDeathLoot() diff --git a/Minecraft.World/Tile.cpp b/Minecraft.World/Tile.cpp index de113714d..f74144543 100644 --- a/Minecraft.World/Tile.cpp +++ b/Minecraft.World/Tile.cpp @@ -17,6 +17,7 @@ #include "net.minecraft.h" #include "Tile.h" + wstring Tile::TILE_DESCRIPTION_PREFIX = L"Tile."; const float Tile::INDESTRUCTIBLE_DESTROY_TIME = -1.0f; @@ -220,6 +221,14 @@ Tile *Tile::woolCarpet = nullptr; Tile *Tile::clayHardened = nullptr; Tile *Tile::coalBlock = nullptr; +Tile *Tile::rubyOre = nullptr; +Tile *Tile::rubyBlock = nullptr; +Bush *Tile::blueRose = nullptr; +Bush *Tile::peony = nullptr; +Tile *Tile::glowLichen = nullptr; +Tile *Tile::netherGold = nullptr; +MycelTile *Tile::alphaGrass = nullptr; + DWORD Tile::tlsIdxShape = TlsAlloc(); Tile::ThreadStorage::ThreadStorage() @@ -442,6 +451,14 @@ void Tile::staticCtor() Tile::clayHardened = (new Tile(172, Material::stone)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_clay, Item::eMaterial_clay)->setDestroyTime(1.25f)->setExplodeable(7)->setSoundType(SOUND_STONE)->setIconName(L"hardened_clay")->setDescriptionId(IDS_TILE_HARDENED_CLAY)->setUseDescriptionId(IDS_DESC_HARDENED_CLAY); Tile::coalBlock = (new Tile(173, Material::stone)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_block, Item::eMaterial_coal)->setDestroyTime(5.0f)->setExplodeable(10)->setSoundType(SOUND_STONE)->setIconName(L"coal_block")->setDescriptionId(IDS_TILE_COAL)->setUseDescriptionId(IDS_DESC_COAL_BLOCK); + Tile::rubyOre = (new OreTile(174)) ->setDestroyTime(3.0f)->setExplodeable(5)->setSoundType(SOUND_STONE)->setIconName(L"ruby_ore")->setDescriptionId(IDS_TILE_EMERALDORE)->setUseDescriptionId(IDS_DESC_EMERALDORE); + Tile::rubyBlock = (new MetalTile(175)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_block, Item::eMaterial_emerald)->setDestroyTime(5.0f)->setExplodeable(10)->setSoundType(SOUND_METAL)->setIconName(L"ruby_block")->setDescriptionId(IDS_TILE_EMERALDBLOCK)->setUseDescriptionId(IDS_DESC_EMERALDBLOCK); + Tile::blueRose = static_cast((new Bush(176))->setDestroyTime(0.0f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"flower_blue_rose")->setDescriptionId(IDS_TILE_FLOWER)->setUseDescriptionId(IDS_DESC_FLOWER)->disableMipmap()); + Tile::peony = static_cast((new Bush(177))->setDestroyTime(0.0f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"flower_peony")->setDescriptionId(IDS_TILE_FLOWER)->setUseDescriptionId(IDS_DESC_FLOWER)->disableMipmap()); + //Tile::glowLichen = (new VineTile(178))->setDestroyTime(0.2f) ->setSoundType(SOUND_GRASS)->setLightEmission(0.33f)->setIconName(L"glow_Lichen")->setDescriptionId(IDS_TILE_VINE)->setUseDescriptionId(IDS_DESC_VINE)->sendTileData(); + Tile::netherGold = (new OreTile(178)) ->setDestroyTime(3.0f)->setExplodeable(5)->setSoundType(SOUND_STONE)->setIconName(L"gold_ore_netherrack")->setDescriptionId(IDS_TILE_NETHER_QUARTZ)->setUseDescriptionId(IDS_DESC_NETHER_QUARTZ_ORE); + Tile::alphaGrass = static_cast((new MycelTile(179))->setDestroyTime(0.6f)->setSoundType(SOUND_GRASS)->setIconName(L"alpha_grass_side")->setDescriptionId(IDS_TILE_GRASS)->setUseDescriptionId(IDS_DESC_GRASS)); + // Special cases for certain items since they can have different icons Item::items[wool_Id] = ( new WoolTileItem(Tile::wool_Id- 256) )->setIconName(L"cloth")->setDescriptionId(IDS_TILE_CLOTH)->setUseDescriptionId(IDS_DESC_WOOL); @@ -1702,4 +1719,6 @@ const int Tile::netherQuartz_Id; const int Tile::quartzBlock_Id; const int Tile::stairs_quartz_Id; const int Tile::woolCarpet_Id; +const int Tile::rubyOre_Id; +const int Tile::rubyBlock_Id; #endif diff --git a/Minecraft.World/Tile.h b/Minecraft.World/Tile.h index 307c4106a..a3464cd4a 100644 --- a/Minecraft.World/Tile.h +++ b/Minecraft.World/Tile.h @@ -365,6 +365,14 @@ public: static const int clayHardened_Id = 172; static const int coalBlock_Id = 173; + static const int rubyOre_Id = 174; + static const int rubyBlock_Id = 175; + static const int blueRose_Id = 176; + static const int peony_Id = 177; + //static const int glowLichen_Id = 178; + static const int netherGold_Id = 178; + static const int alphaGrass_Id = 179; + static Tile *stone; static GrassTile *grass; @@ -541,6 +549,14 @@ public: static Tile *clayHardened; static Tile *coalBlock; + static Tile *rubyOre; + static Tile *rubyBlock; + static Bush *blueRose; + static Bush *peony; + static Tile *glowLichen; + static Tile *netherGold; + static MycelTile *alphaGrass; + static void staticCtor(); int id; diff --git a/Minecraft.World/ToolRecipies.cpp b/Minecraft.World/ToolRecipies.cpp index 82b02df1c..6ce4fce24 100644 --- a/Minecraft.World/ToolRecipies.cpp +++ b/Minecraft.World/ToolRecipies.cpp @@ -34,30 +34,36 @@ void ToolRecipies::_init() ADD_OBJECT(map[0],Item::ironIngot); ADD_OBJECT(map[0],Item::diamond); ADD_OBJECT(map[0],Item::goldIngot); + ADD_OBJECT(map[0],Item::ruby); + ADD_OBJECT(map[1],Item::pickAxe_wood); ADD_OBJECT(map[1],Item::pickAxe_stone); ADD_OBJECT(map[1],Item::pickAxe_iron); ADD_OBJECT(map[1],Item::pickAxe_diamond); ADD_OBJECT(map[1],Item::pickAxe_gold); + ADD_OBJECT(map[1],Item::pickAxe_ruby); ADD_OBJECT(map[2],Item::shovel_wood); ADD_OBJECT(map[2],Item::shovel_stone); ADD_OBJECT(map[2],Item::shovel_iron); ADD_OBJECT(map[2],Item::shovel_diamond); ADD_OBJECT(map[2],Item::shovel_gold); + ADD_OBJECT(map[2],Item::shovel_ruby); ADD_OBJECT(map[3],Item::hatchet_wood); ADD_OBJECT(map[3],Item::hatchet_stone); ADD_OBJECT(map[3],Item::hatchet_iron); ADD_OBJECT(map[3],Item::hatchet_diamond); ADD_OBJECT(map[3],Item::hatchet_gold); + ADD_OBJECT(map[3],Item::hatchet_ruby); ADD_OBJECT(map[4],Item::hoe_wood); ADD_OBJECT(map[4],Item::hoe_stone); ADD_OBJECT(map[4],Item::hoe_iron); ADD_OBJECT(map[4],Item::hoe_diamond); ADD_OBJECT(map[4],Item::hoe_gold); + ADD_OBJECT(map[4],Item::hoe_ruby); } void ToolRecipies::addRecipes(Recipes *r) diff --git a/Minecraft.World/WeaponRecipies.cpp b/Minecraft.World/WeaponRecipies.cpp index 1dbe6bdab..a67b6736f 100644 --- a/Minecraft.World/WeaponRecipies.cpp +++ b/Minecraft.World/WeaponRecipies.cpp @@ -23,12 +23,14 @@ void WeaponRecipies::_init() ADD_OBJECT(map[0],Item::ironIngot); ADD_OBJECT(map[0],Item::diamond); ADD_OBJECT(map[0],Item::goldIngot); + ADD_OBJECT(map[0],Item::ruby); ADD_OBJECT(map[1],Item::sword_wood); ADD_OBJECT(map[1],Item::sword_stone); ADD_OBJECT(map[1],Item::sword_iron); ADD_OBJECT(map[1],Item::sword_diamond); ADD_OBJECT(map[1],Item::sword_gold); + ADD_OBJECT(map[1],Item::sword_ruby); } void WeaponRecipies::addRecipes(Recipes *r)