From 54ce9c57c232f0baa371ae7320f1f575338aed84 Mon Sep 17 00:00:00 2001 From: Skiedrake Date: Wed, 8 Sep 2010 19:03:08 +0000 Subject: [PATCH] Made nettles less lethal. Now death nettles don't stun always, but on 20% chance, as it was supposed to be. Improved plant analyzer, now you can also analyze harvested plants with it. Modified hydroponics layout: added a blue toolkit, anti-toxins kit and changed floor textures some. Added more drug effects to max potency drugs. This required a minor hud modification. (overlay effect scaling) Made foods heal less, as eating almost anything instahealed you before. Fixed minor hydroponics issue with plant-b-gone and adjusted some mutation/growth rates. Mushrooms will now yield minimum one mushroom always when harvested. (sensible!) Made the Hydroponics instructions paper a bit better. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@83 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/Chemistry-Tools.dm | 11 +- code/defines/obj/hydro.dm | 54 + code/defines/obj/weapon.dm | 2 +- code/game/machinery/hydroponics.dm | 51 +- .../game/objects/items/weapons/hydroponics.dm | 36 +- code/modules/mob/living/carbon/human/hud.dm | 4 +- icons/turf/floors.dmi | Bin 215914 -> 217188 bytes maps/trunkmap.dmm | 6626 +++++++++-------- 8 files changed, 3427 insertions(+), 3357 deletions(-) diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index bd250cb1a1..b715d9a7de 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -614,13 +614,13 @@ if(!H.organs[A]) continue affecting = H.organs[A] if(!istype(affecting, /datum/organ/external)) continue - if(affecting.heal_damage(src.heal_amt, src.heal_amt)) + if(affecting.heal_damage(src.heal_amt/2.0, src.heal_amt/2.0)) H.UpdateDamageIcon() else H.UpdateDamage() else - M.bruteloss = max(0, M.bruteloss - src.heal_amt) - M.fireloss = max(0, M.fireloss - src.heal_amt) + M.bruteloss = max(0, M.bruteloss - src.heal_amt/2.0) + M.fireloss = max(0, M.fireloss - src.heal_amt/2.0) M.updatehealth() @@ -675,14 +675,17 @@ C.see_invisible = 15 sleep(300) C.emote(pick("blink", "blink_r", "twitch_s", "frown", "blush", "shrug", "pale", "sniff", "whimper", "flap", "drool", "moan", "twitch")) - if(prob(20)) + if(prob(15)) C.see_invisible = 0 i = 0 + C.client.view = world.view // Return view range back to normal if(drug_temp > 75) C.confused += drug_temp // Hard to move where you want C.weakened += rand(0, drug_temp/4) // Fall on your back // Add cool stuff here later, like everything starting to look different etc. + C.client.view = min(C.client.view + rand(0,4), 14) // FUCK YE + proc burn(var/mob/M) var/temp_heat = src.heat_amt diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index 994fb8ccfa..0a899e50fc 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -1,3 +1,14 @@ +// Plant analyzer + +/obj/item/device/analyzer/plant_analyzer + name = "Plant Analyzer" + icon = 'device.dmi' + icon_state = "hydro" + item_state = "analyzer" + + attack_self(mob/user as mob) + return 0 + // ******************************************************** // Here's all the seeds (=plants) that can be used in hydro // ******************************************************** @@ -21,6 +32,7 @@ var/growthstages = 0 var/plant_type = 0 // 0 = 'normal plant'; 1 = weed; 2 = shroom + /obj/item/seeds/chiliseed name = "Chili plant seeds" icon_state = "seed-chili" @@ -369,6 +381,48 @@ // *********************************************************** +obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/O as obj, var/mob/user as mob) + if (istype(O, /obj/item/device/analyzer/plant_analyzer)) + user << "This is a \blue [name]" + switch(plant_type) + if(0) + user << "- Plant type: \blue Normal plant" + if(1) + user << "- Plant type: \blue Weed" + if(2) + user << "- Plant type: \blue Mushroom" + user << "- Potency: \blue [potency]" + user << "- Yield: \blue [yield]" + user << "- Maturation speed: \blue [maturation]" + user << "- Production speed: \blue [production]" + user << "- Endurance: \blue [endurance]" + user << "- Healing properties: \blue [heal_amt]" + user << "- Amatoxins: \blue [poison_amt]%" + user << "- Psilocybin: \blue [drug_amt]%" + user << "- Capsaicin: \blue [heat_amt]%" + user << "" + + return + +obj/item/weapon/grown/attackby(var/obj/item/O as obj, var/mob/user as mob) + if (istype(O, /obj/item/device/analyzer/plant_analyzer)) + user << "This is a \blue [name]" + switch(plant_type) + if(0) + user << "- Plant type: \blue Normal plant" + if(1) + user << "- Plant type: \blue Weed" + if(2) + user << "- Plant type: \blue Mushroom" + user << "- Acid strength: \blue [potency]" + user << "- Yield: \blue [yield]" + user << "- Maturation speed: \blue [maturation]" + user << "- Production speed: \blue [production]" + user << "- Endurance: \blue [endurance]" + user << "" + + return + //Grown foods /obj/item/weapon/reagent_containers/food/snacks/grown/ //New subclass so we can pass on values var/seed = "" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 4dff39ea92..f8b06bbb78 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -740,7 +740,7 @@ ASC: Aux. Solar Control
/obj/item/weapon/paper/hydroponics name = "paper- 'Greetings from Billy Bob'" - info = "Hey fellow botanist!
\n
\nI didn't trust the station folk so I left
\na couple of weeks ago. But here's some
\ninstructions on how to operate things here.
\nYou can grow plants and each iteration they become
\nstronger, more potent and have better yield, if you
\nknow which ones to pick. Use your botanist's analyzer
\nfor that. You can turn harvested plants into seeds
\nat the seed extractor, and replant them for better stuff!
\nSometimes if the weed level gets high in the tray
\nmutations into different mushroom or weed species have
\nbeen witnessed. On the rare occassion even weeds mutate!
\n
\nEither way, have fun!
\n
\nBest regards,
\nBilly Bob Johnson.
\n
\nPS.
\nHere's a few tips:
\nIn nettles, potency = damage
\nIn amanitas = potency deadliness + side effects
\nIn Liberty caps, potency = drug power + effects
\nIn chilis, potency = heat
\nNutrients keep mushrooms alive!
\nWater keeps weeds such as nettles alive!
\nAll other plants need both." + info = "Hey fellow botanist!
\n
\nI didn't trust the station folk so I left
\na couple of weeks ago. But here's some
\ninstructions on how to operate things here.
\nYou can grow plants and each iteration they become
\nstronger, more potent and have better yield, if you
\nknow which ones to pick. Use your botanist's analyzer
\nfor that. You can turn harvested plants into seeds
\nat the seed extractor, and replant them for better stuff!
\nSometimes if the weed level gets high in the tray
\nmutations into different mushroom or weed species have
\nbeen witnessed. On the rare occassion even weeds mutate!
\n
\nEither way, have fun!
\n
\nBest regards,
\nBilly Bob Johnson.
\n
\nPS.
\nHere's a few tips:
\nIn nettles, potency = damage
\nIn amanitas, potency = deadliness + side effects
\nIn Liberty caps, potency = drug power + effects
\nIn chilis, potency = heat
\nNutrients keep mushrooms alive!
\nWater keeps weeds such as nettles alive!
\nAll other plants need both." /obj/item/weapon/paper/flag icon_state = "flag_neutral" diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index cb8d6a96b5..b895d787aa 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -97,7 +97,7 @@ obj/machinery/hydroponics/process() src.mutate() else if(prob(30)) src.hardmutate() - else if(prob(20)) + else if(prob(10)) src.mutatespecie() // Just testing this here until mutagens are in place m_count++; if(src.yieldmod > 0 && src.myseed.yield != -1) // Unharvestable shouldn't be harvested @@ -234,6 +234,8 @@ obj/machinery/hydroponics/proc/mutate() // Mutates the current seed src.myseed.yield = 0 else if(src.myseed.yield > 10) src.myseed.yield = 10 + if(src.myseed.yield == 0 && src.myseed.plant_type == 2) + src.myseed.yield = 1 // Mushrooms always have a minimum yield of 1. if(src.myseed.potency != -1) //Not all plants have a potency src.myseed.potency += rand(-10,10) @@ -271,6 +273,8 @@ obj/machinery/hydroponics/proc/hardmutate() // Strongly mutates the current seed src.myseed.yield = 0 else if(src.myseed.yield > 10) src.myseed.yield = 10 + if(src.myseed.yield == 0 && src.myseed.plant_type == 2) + src.myseed.yield = 1 // Mushrooms always have a minimum yield of 1. if(src.myseed.potency != -1) //Not all plants have a potency src.myseed.potency += rand(-20,20) @@ -463,30 +467,39 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) else if (istype(O, /obj/item/device/analyzer/plant_analyzer)) if(src.planted && src.myseed) user << "*** [src.myseed.name] ***" - user << "-Plant Age: [src.age]" - user << "--Plant Endurance: [src.myseed.endurance]" - user << "--Plant Lifespan: [src.myseed.lifespan]" + user << "-Plant Age: \blue [src.age]" + user << "-Plant Endurance: \blue [src.myseed.endurance]" + user << "-Plant Lifespan: \blue [src.myseed.lifespan]" if(src.myseed.yield != -1) - user << "--Plant Yield: [src.myseed.yield]" - user << "--Plant Production: [src.myseed.production]" + user << "-Plant Yield: \blue [src.myseed.yield]" + user << "-Plant Production: \blue [src.myseed.production]" if(src.myseed.potency != -1) - user << "--Plant Potency: [src.myseed.potency]" - user << "--Weed level: [src.weedlevel]/10" - user << "--Pest level: [src.pestlevel]/10" - user << "--Toxicity level: [src.toxic]/100" + user << "-Plant Potency: \blue [src.myseed.potency]" + user << "-Weed level: \blue [src.weedlevel]/10" + user << "-Pest level: \blue [src.pestlevel]/10" + user << "-Toxicity level: \blue [src.toxic]/100" user << "" else user << "No plant found." - user << "--Weed level: [src.weedlevel]/10" - user << "--Pest level: [src.pestlevel]/10" - user << "--Toxicity level: [src.toxic]/100" + user << "-Weed level: \blue [src.weedlevel]/10" + user << "-Pest level: \blue [src.pestlevel]/10" + user << "-Toxicity level: \blue [src.toxic]/100" user << "" else if (istype(O, /obj/item/weapon/plantbgone)) if(src.planted && src.myseed) src.health -= rand(5,20) - src.pestlevel -= 1 // Kill kill kill - src.weedlevel -= 2 // Kill kill kill + + if(src.pestlevel > 0) + src.pestlevel -= 1 // Kill kill kill + else + src.pestlevel = 0 + + if(src.weedlevel > 1) + src.weedlevel -= 2 // Kill kill kill + else + src.weedlevel = 0 + src.toxic += 5 // Oops src.visible_message("\red \The [src] has been sprayed with \the [O][(user ? " by [user]." : ".")]") playsound(src.loc, 'spray3.ogg', 50, 1, -6) @@ -572,14 +585,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) -/obj/item/device/analyzer/plant_analyzer - name = "Plant Analyzer" - icon_state = "hydro" - - attack_self(mob/user as mob) - return 0 - - // BROKEN!!!!!! /datum/vinetracker diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index 511a45d25b..7354a4f951 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -19,24 +19,29 @@ Deathnettle return /obj/item/weapon/plantbgone/afterattack(atom/A as mob|obj, mob/user as mob) - if (src.reagents.total_volume < 1) + + if (istype(A, /obj/item/weapon/storage/backpack )) + return + + else if (locate (/obj/table, src.loc)) + return + + else if (src.reagents.total_volume < 1) src.empty = 1 user << "\blue Add more Plant-B-Gone mixture!" return - else if (istype(A, /obj/item/weapon/storage/backpack )) - return - - else if (istype(A, /obj/machinery/hydroponics)) // We are targeting hydrotray - return - - else if (istype(A, /obj/blob)) // blob damage in blob code - return else - var/obj/decal/D = new/obj/decal/(get_turf(src)) // Targeting elsewhere - if (locate (/obj/table, src.loc)) + src.empty = 0 + + if (istype(A, /obj/machinery/hydroponics)) // We are targeting hydrotray return + + else if (istype(A, /obj/blob)) // blob damage in blob code + return + else + var/obj/decal/D = new/obj/decal/(get_turf(src)) // Targeting elsewhere D.name = "chemicals" D.icon = 'chemical.dmi' D.icon_state = "weedpuff" @@ -71,7 +76,7 @@ Deathnettle /obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user as mob) if (force > 0) - force -= rand(0,(force/10)+1) // When you whack someone with it, leaves fall off + force -= rand(1,(force/3)+1) // When you whack someone with it, leaves fall off else usr << "All the leaves have fallen off the nettle from violent whacking." del(src) @@ -90,14 +95,15 @@ Deathnettle if(istype(M, /mob/living/carbon/human)) M << "\red You are stunned by the powerful acid of the Deathnettle!" M.eye_blurry += 4 - M.paralysis += 5 - M.weakened += 2 + if(prob(20)) + M.paralysis += 5 + M.weakened += 2 M.drop_item() ..() /obj/item/weapon/grown/deathnettle/afterattack(atom/A as mob|obj, mob/user as mob) if (force > 0) - force -= rand(0,(force/10)+1) // When you whack someone with it, leaves fall off + force -= rand(1,(force/3)+1) // When you whack someone with it, leaves fall off else usr << "All the leaves have fallen off the deathnettle from violent whacking." diff --git a/code/modules/mob/living/carbon/human/hud.dm b/code/modules/mob/living/carbon/human/hud.dm index de7dda595a..b3db6a954d 100644 --- a/code/modules/mob/living/carbon/human/hud.dm +++ b/code/modules/mob/living/carbon/human/hud.dm @@ -396,13 +396,13 @@ mymob.blind = new /obj/screen( null ) mymob.blind.icon_state = "black" mymob.blind.name = " " - mymob.blind.screen_loc = "1,1 to 15,15" + mymob.blind.screen_loc = "WEST,SOUTH-1 to EAST,SOUTH-1" mymob.blind.layer = 0 mymob.flash = new /obj/screen( null ) mymob.flash.icon_state = "blank" mymob.flash.name = "flash" - mymob.flash.screen_loc = "1,1 to 15,15" + mymob.flash.screen_loc = "WEST,SOUTH-1 to EAST,SOUTH-1" mymob.flash.layer = 17 mymob.hands = new /obj/screen( null ) diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index bed7692d7176de262e2a75e3623234de830eb8f1..8dd72a21580021dc63cb32e8a13bde674f1b81dd 100644 GIT binary patch delta 7180 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 delta 5896 zcmX|lc{mj8_dY^ovP_aK`!MFUPEs^>V;N#bGevgtG9pAH>&U(nlPz0D_H_u^vTuV4 zS?5JrlVnTw{Jd|U@9(*;=ef>b&vmYIpL3u4oTc2$-%>6ois5s7(WYM74xaW;vF=`2 zw()soC&XiG& z)_|ZEyAZ9a9H*rGMET+Nj%Uq{^~t*)kMw02YoKJ={cbz=XHSL(V5*!kDOs+&2Ox(5 zm-{OP+wuc^@sEvzX&rR9Y!b`;XE*zsqJQOA*5rlX zh!Mp+^tc#6+p!nn)9PFTej!UTw=#RNX?D4OUnOL_Ozz^%+^Z`zIw9<8T54EiddUavLF!i3sq2`@Un ztodof%P9QYof}a%RduQtSlg_7pU=&u0ZF^M zFu7nNJ(t{;)0+nKmK5`rMDvzt^OkqiN@btX{##kF^`$$=M!z{@&e-Bmf|R`P|3W-%8{YU11rID$7pY6?pnv_eP-^abNdo^2LUQ= z;B};){>8iv+p!jO@04SpsUT|c4GWW z*wyO8nPUIb_FhV0%p$K;a8QYf@Q>R@@9~?$g3V`XPy8;g&Ey{jix@<85c(BtyuH~5 zf^m<77V&$S3mI#XLYcc;?{aK-6g@bRQG}S?)h-Y9^i+$JPBjt=?{V$jvz-U(EK?W5 z_YSzWm=o#v+8C-VDb_TK>=XNvRpvS5qwD)YY^d%Gm=GOfTf}CCvdC}AgGuXf>nE`v zofLTERw$h5oDB7K6VC&8II-wV%S@r6q>KBTp7=nIa93)r`Sl(ma|%dOFWoA^%zQmD z^(xxk(K`Yz*9nz&;eloin;Pnzd{@Kw82{e6J^;YE2|mU7YGaoUq$^oDR-0M*iG!}x zp$NKGw#?kF?m!ippvfRno5JjRb!N5~Kz?dlZD39rC0BdU(uTEm{ev0ZaEZiK{gcCE zd?mTwvU23y$Dz_-Sc7-pc8#dZShuGN&f6P2kT$k^W#X2bC(b{XQ)V_kPR@0wxntjw z1e1sd=6jjZdp>kE-k7{)$8WsjcJ^D)Yx1}mcP1cBu~mi@KrlJM?x-M1NlA9_n~%E8 z!R%Ml_14z`SKGhRDIwfxVqe@OY^C968&dZCR2c-uA7|+4#{)&`*VoynzPClhY*yb_ z3Fq6dtQW*D3vN>@CjW~gMk~@}bmJ#G)6oWPL6u%|Y`3fUd4_ z_4Sys#VamkQ6nIPm1)4X; zvo#MEX3raiC_)h1w20ejZJ2;ET1WLDpjZF_Nehw#-p6KA!5T@EjxVCa%f@#X_#Rtx zvRFTW`BV3J<8+84&CY$q!p&rHX1)+%%pk&6Zy9I$?v%*b+m#q|vOSg6Wg0^{xEj{|}*hL3a|oA%FIp4X-%9K$4^21;`U1>ZkydcxWY5mRZY$ z-B&3o=}KX(SWkY-P`Ahq7dD#iSZ@GSRy4HS6p}U3NxtFV>!^CCkh+fI;_-k=@D6|V zYSKera_E4FY;$crwuu4?a6mMZh}t@#Ku&wY!Bk~sYFjTD-&Yp+fYoBcev{U1a+3+A zxr{&Cb#XF|JP)6fg6zdLQ?5KJi0ny%6bglk^wcr9M>4bV%Aok!_0(3DmNJgjn(^#$v|b6*sNf*N5nqa4##eLwk~kf$R2 z2UUyEwjNHdcB$MCt#FK(-k6Oln;ZZW=~SIL##gJq6G~EuTnN5BlqSn%VQD2An^a2n zoRJostlM^B3jx{^n1l?V04-9irWCoLql;6qVqAxg4T*~K3D6@HF(L6UqZLbNQ`LD4 z?9tBRj_<~C!>jkC_sw{W9QSyyfo$qfFR!c`1afXL|68MRE6XCgBA{3;099-##pbry zHYep7)5<-Odv+PDY^?iAcRu9yc@`{6)<2mSiRJp~7Z9D7Kf9f7w#@o7K@aR6G}kK_9r7S2tdV68XY;mDvMDXCE@INcBW(YfUV2ApA2wJ*I+% zNkao{Pc5yj>DbJev)I-JKePEL)=Fsq3tPsffTZ*lihEJep?~~pBfZB91-w|>3QX?tVkCFqs{xz2xpye zxL$^rao?t&LhYv3e=emaC_rArqL_jiPOadCS5tL&xx=`_Ayn$xbUxNFOg)XgM>2wK zJ|BvQq|_+cHZ1*Uv0Q2Aq&~xXA8FgFTmAjh_qyTQy(Q4wm$po%ItGf9$Abkilu@uM zLeC3{O=cLVr-k^Apw;i1y)}9AM!T0C1P#O_;+VuQ0+&ZX1v&%eg9?LJd`yrXkzP(lhnLCtWgcvS2oD@%mqzztR$N~**sRS(m8kX=$}7FL zUnjYnxxJOqo*QGYuQ;*Ke2ph%8CCq_t4l@Yy%igw^b0EYbx?vJfnO+&SYbq3?6=js z#d~|c{%o(Jm2@}qrz<8Cknq9mTtHzxa^w}+*XkPPM~lX>>Uk#V5DyoH--7UwM9#G- z?r>(EC=>!lc>{(Fl;lGo6ZMMEkG6Ha>b)Coe^{97)a}})oA>TZ;ui))=PiByeAkGg z>fpIb%fLFe#*al<6o$$3m~aNi{g&<_8dy-ewcrZ8v^zoLI4Uh9Z~OkKlnuu2Izd)U zGhKhRh;TO&qBx;#XoM{IgvYfMtX&u@I}=F={}u3WitFq?eOd9BeqO9idQEG!29T>Z zAOUQ#aO|3-ppg;$WiK)-OC?EcdG3p4UX@Mxhd3}qe2t0f@zo8$-mx;*d8^2MdS+&I zXMvvji>Z^wHo9>lGEUgAF-u1DKI0feiB&`#kl&Rcx%Z5adm9eN8|)l)<`6|hBFePM zl8EPq-;|pCTWx2BOYZlfPETGR+^jYJljUv^gn}@F%mqr9qH94rL-vN{0GfKf^8xw4ZvUPmSR`u89*_0T^> z%PXm1t@V{_pJ)%ER^i6^2Fsn|pzR|2&C{{T8!&X04 zgrc8Bs2N+$Z__PmyqKTaS&GWyWi)+aT6R|#vPSquULE%1{ zyn<2c<6MWzPC0+*eEu?Nxk#qY;g#(}MwLm4=zCJVJ=Of94Q|qfhWsnPb zAV|Obh30C%-a0YL>mOa_xSk86Kk@x2frOJDKMV9TjG5pyu*axE4Yhdw6-}qx*U68n z9RCHXRfz;P0MrP{+DSEqxn?ZkF@|Jsy<|E`=@VQ|OUvZJM&%g`SxR0yrnyg&6x(i- zrJ%2**3y;41(NTjsM%Cod{#~>>616S9r&AmlGAHOx}vgDK2-e@3-dqr%U_&`p}keD zPk2AR-`it=42if6_Mdzalzkg8X9HxibDvDZ<+uuOzkBcDa4fM`$&)Xd!6QPF(s>yWO6bwW{5UrgixJHM)b z$lQ^l8|+BFZdn+ROd6~%2V!|FEUbj`+uCx+cR0!n^XNeQs>Ny+g0Gyh&Y^mreoc#C zAJcj39B=x{;S7F?Z^fw;YQJ^OCej;30hQyNroWfPS8uma0@GH0uk5OM`6vHR-9$5C z^|c+?rA11BQU(iCT*hk3cJHO!zb7TA9f9iZC0;ApMWm@q ze9mBce4*5efp5#*4shY5rK3_Da{))4gOE1dN=%A~Pn1D0d7kKU=8~k37P!oxQ z;>Bw~BVT!irA8kOh%jwa1AMbC8>#w)qtabAzax{r)WaG#Xs-}%Pw7O(cmzDj80J-NwH7dnI2jrWHf5x(dyHSixvDDpBFN9SEECp8()wMx*yep+!$L-G=Yp@4l;lcX z?jd?Y5QbXNY~zFWCbjMqna*{Vyhq{o^>Tn@7PM{EWi;nviE0AM+-)DJDf(!9eVN+< z;c5c8tCj{DFm1e;1HZ4%ocQj@mrwQhwO`x#wsfv=RrM}JPYIiOM(x32xz+6RHGIwkskIiugX}156mk#|w-(A6r;uF1~|VPzt0V(Ro7gCWhqhJrw}T z)(=Qc(zeyka1bKAzR7w|s1E?g;a7j{Of? znCI6@&z*d^!;KD&A;i17djy6#m=hed&A2SAtUTNgf`rmIbU5N&?K8x$GMZ>sr7boJ zU>wvz>=+G@p-ZpOLzy*PePk!$cJ$V%fKN*Ds!~f}!alNt*g3$m^CfPbA3u()2muOe zp$Wv|@Jk4<%yG{EH2pI7c$G}q>diZ@IHY7YC#K+Z)q1S-P0Jri>hHJoC1i6^StbF$ z&jQdwih<5Q6_Kr)V3fLMP*+z+6H-D$eHuxmr|g?C%FkBBOh1u-Eo&y|Vk6R*7pg$< zfbn7P=$Xl90p#WIk)s4$VJGy`8ejs8c=-&)5v7Cxd!el2E~9HZD_39b)rb#?ps?u- z1FK&q7Vi=kn*)0VAOm*u&+!8fb{{!y{;9@!>7Avo_JR8c0dt4jcf>}LBK0YD$46yg{$eNpHp!~w;t;?)GTHB!| zU-uQ|01>mNS_4qsw5uq78zq_e&1(EUZ712&NKK_f%k|Cm8fbPf@bW^>vnXeQ`WT=v z$eC}WwlyKh5j--2q+>&A{v8XH!6yXOn~pPLpQF^e|SOjhe~GF zZ~;#cCC6am+A+BLqrHPb!1b%$2bW8Go<0V@*l9Ylm^;WjF8V}{#dwe|f3CM4Nq*BJ z_}_r!@2xlKp++K zkKy>!S0#z-H%=ykrrlX}!fd(G4)B-Pm?Vpf*a>3Ta6AY^25a^KDZ70!z%iUWAVe;+ z+Pk6OAC|B7Rg0leV)f_IdTqv#(MEZ_-XwaCB zS1fXbHQ`mRsV;NcJKtfyBG(4*#JcwooYH>7~L!T4d5#izQU_gXo2 z;wA-eW%0l5OQaMzsf6x|entWMd~x=kNmvfiM+zntMUp}xSO1xwEv(_%`TmtT-f#`) z_q^4Z8*ZqZTE;eE#>kSQ(UH{>;6jmL0!9zm1_WGNOZRHB%vKH1TKbzoal$o0i)m}e