From 003d47fbbcfc4ac5e4eb8a2110ca9246657952a1 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Mon, 29 Mar 2021 20:48:11 -0900 Subject: [PATCH] Tanning Tweaks (#7965) * Tanning Tweaks * tanning racks remove from SSobj on destroy --- code/game/machinery/washing_machine.dm | 5 +- .../objects/items/stacks/sheets/leather.dm | 198 ++++++++++++++---- code/modules/food/kitchen/smartfridge.dm | 4 +- code/modules/materials/material_recipes.dm | 2 + code/modules/reagents/Chemistry-Holder.dm | 3 +- icons/obj/kitchen.dmi | Bin 15787 -> 16252 bytes 6 files changed, 160 insertions(+), 52 deletions(-) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 2401d20ab1..ae2238145d 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -68,9 +68,8 @@ //Tanning! for(var/obj/item/stack/hairlesshide/HH in washing) - var/obj/item/stack/WL = new HH.wet_type(src) - if(istype(WL)) - WL.amount = HH.amount + var/obj/item/stack/wetleather/WL = new(src) + WL.amount = HH.amount washing -= HH HH.forceMove(get_turf(src)) HH.use(HH.amount) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 3076d2dfb8..c48f57e693 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -1,14 +1,18 @@ /obj/item/stack/animalhide name = "hide" desc = "The hide of some creature." + description_info = "Use something sharp, like a knife, to scrape the hairs/feathers/etc off this hide to prepare it for tanning." icon_state = "sheet-hide" drop_sound = 'sound/items/drop/cloth.ogg' pickup_sound = 'sound/items/pickup/cloth.ogg' amount = 1 + max_amount = 20 stacktype = "hide" no_variants = TRUE - - var/process_type = /obj/item/stack/hairlesshide +// This needs to be very clearly documented for players. Whether it should stay in the main description is up for debate. +/obj/item/stack/animalhide/examine(var/mob/user) + . = ..() + . += description_info /obj/item/stack/animalhide/human name = "skin" @@ -18,7 +22,6 @@ no_variants = FALSE drop_sound = 'sound/items/drop/leather.ogg' pickup_sound = 'sound/items/pickup/leather.ogg' - amount = 1 stacktype = "hide-human" /obj/item/stack/animalhide/corgi @@ -26,7 +29,6 @@ desc = "The by-product of corgi farming." singular_name = "corgi hide piece" icon_state = "sheet-corgi" - amount = 1 stacktype = "hide-corgi" /obj/item/stack/animalhide/cat @@ -34,7 +36,6 @@ desc = "The by-product of cat farming." singular_name = "cat hide piece" icon_state = "sheet-cat" - amount = 1 stacktype = "hide-cat" /obj/item/stack/animalhide/monkey @@ -42,7 +43,6 @@ desc = "The by-product of monkey farming." singular_name = "monkey hide piece" icon_state = "sheet-monkey" - amount = 1 stacktype = "hide-monkey" /obj/item/stack/animalhide/lizard @@ -50,7 +50,6 @@ desc = "Sssssss..." singular_name = "lizard skin piece" icon_state = "sheet-lizard" - amount = 1 stacktype = "hide-lizard" /obj/item/stack/animalhide/xeno @@ -58,7 +57,6 @@ desc = "The skin of a terrible creature." singular_name = "alien hide piece" icon_state = "sheet-xeno" - amount = 1 stacktype = "hide-xeno" //don't see anywhere else to put these, maybe together they could be used to make the xenos suit? @@ -68,7 +66,6 @@ singular_name = "alien chitin piece" icon = 'icons/mob/alien.dmi' icon_state = "chitin" - amount = 1 stacktype = "hide-chitin" /obj/item/xenos_claw @@ -88,19 +85,28 @@ if(has_edge(W) || is_sharp(W)) //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message) user.visible_message("\The [user] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh") - if(do_after(user,50)) - to_chat(user, "You cut the hair from this [src.singular_name]") + var/scraped = 0 + while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide //Try locating an exisitng stack on the tile and add to there if possible - for(var/obj/item/stack/hairlesshide/HS in user.loc) - if(HS.amount < 50 && istype(HS, process_type)) - HS.amount++ - src.use(1) - return - //If it gets to here it means it did not find a suitable stack on the tile. - var/obj/item/stack/HS = new process_type(usr.loc) - if(istype(HS)) - HS.amount = 1 + var/obj/item/stack/hairlesshide/H = null + for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf + if(HS.amount < HS.max_amount) + H = HS + break + + // Either we found a valid stack, in which case increment amount, + // Or we need to make a new stack + if(istype(H)) + H.amount++ + else + H = new /obj/item/stack/hairlesshide(user.loc) + + // Increment the amount src.use(1) + scraped++ + + if(scraped) + to_chat(user, SPAN_NOTICE("You scrape the hair off [scraped] hide\s.")) else ..() @@ -110,31 +116,43 @@ /obj/item/stack/hairlesshide name = "hairless hide" desc = "This hide was stripped of it's hair, but still needs tanning." + description_info = "Get it wet to continue tanning this into leather.
\ + You could set it in a river, wash it with a sink, or just splash water on it with a bucket." singular_name = "hairless hide piece" icon_state = "sheet-hairlesshide" no_variants = FALSE - amount = 1 + max_amount = 20 stacktype = "hairlesshide" - var/cleaning = FALSE // Can we be water_acted, or are we busy? To prevent accidental hide duplication and the collapse of causality. - var/wet_type = /obj/item/stack/wetleather +/obj/item/stack/hairlesshide/examine(var/mob/user) + . = ..() + . += description_info /obj/item/stack/hairlesshide/water_act(var/wateramount) - ..() - cleaning = TRUE - while(amount > 0 && wateramount > 0) - use(1) - wateramount-- - new wet_type(get_turf(src)) - cleaning = FALSE + . = ..() + wateramount = min(amount, round(wateramount)) + for(var/i in 1 to wateramount) + var/obj/item/stack/wetleather/H = null + for(var/obj/item/stack/wetleather/HS in get_turf(src)) // Doesn't have a user, can't just use their loc + if(HS.amount < HS.max_amount) + H = HS + break + + // Either we found a valid stack, in which case increment amount, + // Or we need to make a new stack + if(istype(H)) + H.amount++ + else + H = new /obj/item/stack/wetleather(get_turf(src)) - return + // Increment the amount + src.use(1) /obj/item/stack/hairlesshide/proc/rapidcure(var/stacknum = 1) stacknum = min(stacknum, amount) while(stacknum) - var/obj/item/stack/wetleather/I = new wet_type(get_turf(src)) + var/obj/item/stack/wetleather/I = new /obj/item/stack/wetleather(get_turf(src)) if(istype(I)) I.dry() @@ -146,16 +164,34 @@ /obj/item/stack/wetleather name = "wet leather" desc = "This leather has been cleaned but still needs to be dried." + description_info = "To finish tanning the leather, you need to dry it. \ + You could place it under a fire, \ + put it in a drying rack, \ + or build a tanning rack from steel or wooden boards." singular_name = "wet leather piece" icon_state = "sheet-wetleather" var/wetness = 30 //Reduced when exposed to high temperautres var/drying_threshold_temperature = 500 //Kelvin to start drying no_variants = FALSE - amount = 1 + max_amount = 20 stacktype = "wetleather" var/dry_type = /obj/item/stack/material/leather +/obj/item/stack/wetleather/examine(var/mob/user) + . = ..() + . += description_info + . += "\The [src] is [get_dryness_text()]." + +/obj/item/stack/wetleather/proc/get_dryness_text() + if(wetness > 20) + return "wet" + if(wetness > 10) + return "damp" + if(wetness) + return "almost dry" + return "dry" + /obj/item/stack/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() if(exposed_temperature >= drying_threshold_temperature) @@ -164,17 +200,87 @@ dry() /obj/item/stack/wetleather/proc/dry() - //Try locating an exisitng stack on the tile and add to there if possible - for(var/obj/item/stack/material/leather/HS in src.loc) - if(HS.amount < 50) - HS.amount++ - wetness = initial(wetness) - src.use(1) - return - //If it gets to here it means it did not find a suitable stack on the tile. - var/obj/item/stack/HS = new dry_type(src.loc) + var/obj/item/stack/material/leather/L = new(src.loc) + L.amount = amount + use(amount) + return L - if(istype(HS)) - HS.amount = 1 - wetness = initial(wetness) - src.use(1) +/obj/item/stack/wetleather/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified) + . = ..() + if(.) // If it transfers any, do a weighted average of the wetness + var/obj/item/stack/wetleather/W = S + var/oldamt = W.amount - . + W.wetness = round(((oldamt * W.wetness) + (. * wetness)) / W.amount) + + + +/obj/structure/tanning_rack + name = "tanning rack" + desc = "A rack used to stretch leather out and hold it taut during the tanning process." + icon = 'icons/obj/kitchen.dmi' + icon_state = "spike" + + var/obj/item/stack/wetleather/drying = null + +/obj/structure/tanning_rack/Initialize() + . = ..() + START_PROCESSING(SSobj, src) // SSObj fires ~every 2s , starting from wetness 30 takes ~1m + +/obj/structure/tanning_rack/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/structure/tanning_rack/process() + if(drying && drying.wetness) + drying.wetness = max(drying.wetness - 1, 0) + if(!drying.wetness) + visible_message("The [drying] is dry!") + update_icon() + +/obj/structure/tanning_rack/examine(var/mob/user) + . = ..() + if(drying) + . += "\The [drying] is [drying.get_dryness_text()]." + +/obj/structure/tanning_rack/update_icon() + overlays.Cut() + if(drying) + var/image/I + if(drying.wetness) + I = image(icon, "leather_wet") + else + I = image(icon, "leather_dry") + add_overlay(I) + +/obj/structure/tanning_rack/attackby(var/atom/A, var/mob/user) + if(istype(A, /obj/item/stack/wetleather)) + if(!drying) // If not drying anything, start drying the thing + if(user.unEquip(A, target = src)) + drying = A + else // Drying something, add if possible + var/obj/item/stack/wetleather/W = A + W.transfer_to(drying, W.amount, TRUE) + update_icon() + return TRUE + return ..() + +/obj/structure/tanning_rack/attack_hand(var/mob/user) + if(drying) + var/obj/item/stack/S = drying + if(!drying.wetness) // If it's dry, make a stack of dry leather and prepare to put that in their hands + var/obj/item/stack/material/leather/L = new(src) + L.amount = drying.amount + drying.use(drying.amount) + S = L + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(!H.put_in_any_hand_if_possible(S)) + S.forceMove(get_turf(src)) + else + S.forceMove(get_turf(src)) + drying = null + update_icon() + +/obj/structure/tanning_rack/attack_robot(var/mob/user) + attack_hand(user) // That has checks to \ No newline at end of file diff --git a/code/modules/food/kitchen/smartfridge.dm b/code/modules/food/kitchen/smartfridge.dm index 03a1c33bef..c0baf8d580 100644 --- a/code/modules/food/kitchen/smartfridge.dm +++ b/code/modules/food/kitchen/smartfridge.dm @@ -186,10 +186,10 @@ for(var/obj/item/stack/wetleather/WL in I.instances) if(!WL.wetness) - if(WL.amount == 1) + if(WL.amount) WL.forceMove(get_turf(src)) + WL.dry() I.instances -= WL - WL.dry() break WL.wetness = max(0, WL.wetness - rand(1, 3)) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index e9e7d461c3..00568a6ecc 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -105,6 +105,7 @@ new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \ )) recipes += new/datum/stack_recipe("desk bell", /obj/item/weapon/deskbell, 1, on_floor = 1, supplied_material = "[name]") + recipes += new/datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]") /datum/material/plasteel/generate_recipes() ..() @@ -162,6 +163,7 @@ recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]") recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]") recipes += new/datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]") + recipes += new/datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]") /datum/material/wood/log/generate_recipes() recipes = list() diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 2e0db3877d..aa50a4b79f 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -313,7 +313,8 @@ if(spill) splash(target.loc, spill, multiplier, copy, min_spill, max_spill) - trans_to(target, amount, multiplier, copy) + if(!trans_to(target, amount, multiplier, copy)) + touch(target, amount) /datum/reagents/proc/trans_type_to(var/target, var/rtype, var/amount = 1) if (!target) diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 6c5a251283cef7139d5c16498316834a6281265d..f558d3fd493513ca14c494b064e57d59bfff0a01 100644 GIT binary patch literal 16252 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 literal 15787 zcmYj&Wk6I>*X|j*5mD(-xP`U)9yP2T`krpMSOO)=0K|s2@Ly%6XVTifM z_xk8+Iz3_thJuCCQ?g7nV5i@0002u=PC-?0004h0;_m9;OD+d9S+dz*Q2f>R^~WQ$K6~HJ zSv34GUVT@m4a7~86wJ)!oRl7+9+xT^fxmiqZ>aNrd;HU&+OWsSpGkSiU5Xp8LMJP~ z(*$(to8XQT-rGYp2W7YKV_UQFf9dL_J`4MFrq97)@g;yG>BbC;u7a7nN4wZR_$w1a zirbgmXF6U~uixcCfEib2_t9Ton5ZHG)x|LYOdJzx`;Ut#m)cH$z z@%g}kyoP*$l>^gv(W?%>(pdZ*O!;ObJ%3@2wcFX|I!^rSCz)m6O0`}45 z_wQRx=$|5m_Y=Q=XW!i%O0zo(pV}UL1(_~4)m&*8SB`t~ z$}t&2_koJ7ty_;s1}RpuYnbt`>$FCVT|SOa=Tp)!;_I+?H@?2UjwlqtM<7~fFhek6 z{`jCi9e3~?IuVr5?=`M+*4rn$A5Pp97KXKLI-|2DyRLrWI5Kk0(S8r&0BxqDLRf7B zW?PGmHK!Fg!f~eZ^6w6H{BgO-n$1IR_@6tml+o9rU$V-Dt(^(U?~obq*&s; zC&;TowvM(md~$vh`Va|z|MI+nJE-PoUWnfC)z>}HD>Hh2Fkeg9*Vp&a0V*W)`3Zv} z*5GKlDfFX#(PMC~pwHb7m`tZv9hQwQn#aHX4ZBDlU^rB6Xo`RN#57a*&)R!&OP9Y0 zVoIU@_abM|Iu`9vrN-3_I88;sJk!Tr!;m+>kH8r`Jw3nw_>o{7;do{z1|jynXNQM2ih*qR+@sIPW>WE!pgHF13vCW;-LG$A+77nolt$#z=zH)C*k|olRtFWP!lh0`FPN3^OI9d=CHFA zg|6tRyj>;z4!X7v^obu-3vhSPQ@_7tGqz-h@HTfL-2M=NDpHtoLY|(Hk@HQqp{c3p z+mgv@46xxB&f_Tos@r5{*5$+j;SWUq_M$P-nU7sgk|N8=4ep2HiGSk&c zS@w7C*UhVac&h_l3cGQRk(0@hk&}sJ;a3)QOcX}lg@)4{mbF!>v@ce^7;oYZP_Z9mO z7~k@{zp6dwley3V?9b);0vwK#HWe;0aDab>7xz|iKYN|UH$$AtuJWAv9NpNUrAKERC3UNC|zl;g&w=j)@V5i>UJ5CxzDG{5(dvy3asww=1Uq)r3 zQvWoba^~gM)U$OsXWH?vGUIJ*M&}vc{H6wAXvhN{wD$Bu#iY@VMc84MpWCpG$ko;L z>xq5ui?k2GZV0Eq#k9-WF&v>a2sjsb#fs2c4gn%vSjej(sAp^|&D_?&OTj@Tp;_`X6 z%CygA@V=Tt^XJsm!}Ig=?W|+=+#Y5OXW&?r8&PPO#67RJu6fmp3oEj14~M2faB(H4 z#zRQyX!+Y3sRD;FlK1==N!U)Tx)=jeQ&hyUu=}b=2a@@40d9jDJX}(G1s9i!T^9KB z=lFqlQ|+CdnBXMG$Hx^voZQ_7J$ENLfS{}_h9-}-LkQ=4<7Tgy>gwvHo8AZW4|#cc zN4fZ0jM7{HmbH3UZdXx1ga96h|8M!daKA07oR*oe-=)c?!Mw)D1VN;tx7q&o(}I&NCVy>7Xhewq$>!$v)Os*Qc0_*x z3CT7^zyN@Of#LJ#&$C7#u0J9nArUE$^7r+9%*>1hxSa34dP8TXqeD*bzb`P1hM{l0 z1JJjZA-NfXHpAIABbn@cd|Mf9*N4r|vSY-8+!cMp^p-oQVm3o0?j_G#_Wk$d4ZzGMQJe9)A7^G^YaD` z4Gk$b7pJH4j*dKD2lI;R>0&Q!W*h;~rpGm%e>=bWX->N8v-}WsI`yI4<<^f8Cql}s z%4iAoV(uA6?GtXI*zWQX(%VOPgq=gGY(r&FaLO*PlKD(y{|qEAyg$JV$7}EDiHOB= zAm+H5`T!`!(Z`JCDR&MG4E!a)=rd~(>K1`j3JD9Z?ax))+S$p;%ZK(Ief&rOUNZmP z71{9w_`x^5pDvLsrx5n}7T4wIDiB$8A{OBvcVW@}>!s1rEgZozv~l@)r*bwi{{3#h z66#0L=blh$V&Vqh9a2E*cy9ik&)c7Rl2@-tdV9l68B#-?5&g1ye;5Pmyr?r%{|Y#n zJj2flm#+90`GFGZTi}g6Uej|>hdpz{(t7pkJt)f?rl9a}93pzj*&;`)w{O?xY_cAD z#u-KflhlbL6El%_CiQJqua4S4@P|;+Vx_gonxCbGSV>qBK`L9Zpr#wK?ks^W$Wq{@ z$(76G^;=3{12kWfqI|d`LjymZ#luCh;Y$q{=Z>iT)q zc6Fhp85~KXZKzo_?xOQ@-Z|?>vB!#&YJTru?MnST8&F~XDuI6f_O`9>W5IY4EP>fT zCPvfHWdZaO9v_YK2LOZUR2%+$>=$T$XZMUarBvdm6=;LCKD;EP+l^|xLD#LD|2$aZ z0Nm}kT3T9G*VjYiD_*uCrQ!!xoR*0= zLf;RA4p>o{gTt47OnxDfPhLSL5T@;X#zAzSUuK&I>k%d%&()Olod^cDOsyp$Az|L6 z%HY`Iq8dadnb&y!#`BK{FqpRTbx>q)ro1qp5;A6589--TR85@xCV2}LS8}6=_EY|LrcDA-P&ihSF@!{d& zRkkED@_Cqf;s9|BN%STlB=n5`E9U6vcKiR|L3Gp%@U?`AMd?`F;pR9AX>D5@=cT%Go2BNH2poG2?fZYpKPynZtW1Q3w~?O*@-`vQqX zjxX5T_pB_RtJ4BxGf;6^FY^vULW;FH0eH{B=B6I{9qOXkR4;(`pD4sq;0P%K{+WGf zLF*CuHz%%0(gq41EMkJ>5_A?@_j)9HKPjNZ$QJbtmF@_<{ngWGZAg3~xk*9~JcX(D zTq5Y(KV7+sOxWahpA?sB4x>RCmQSI7PkyrMT);l91YD0ymKSZp;}9iCvEh~*k_(7W z7xFei_=r$iL%M4jUM4bWV==J4A z4a-49Eh?y~r~I2V{uTm#9<*@^-5iu*x+>bTe6Q&8ad1z|$aP+Sm|Qh` zbA%9nzCu&?kTzO3cuTHs&skEh;M_M0!((q+J)SYqu-<8Gg^-Pcx{Vt|dUo2COd zf&iaQII)5K>kH?QnV3xXUb{fK@igMxnMl*MCuwc9TUm|L?rkiyTZpD6gHgZC%uH4U z;Y+*~J5yahy(g4ES&83ozJPZ~1KvzeMu(76)HqBlG-SbJ;^MP3WRQq-+IA#EVoHbH z4Z=GHTGE1E<`6RKkpUpe zH*WRD=Y7{WL*rR0QGhj7ONbPf`WKm`Q@)pp&$os%$nM=UyXf?K(1pCJ&?Qh3ykK#e z7XsQ9r-i_8h0aw*pfhHLQ~RFp?GbebLE={Q#CY$y3n{&Aa#_%9VE-3Nys^_*rwne6qaY(3l$4tbOOukA;tnsA?{nj||vAL|x%-dSruGpI2Xi(jvM z+&21E?p;pV8xxg$>BRorhsVTzmOH1?dFoU6OLFEmpb zcsZrG)(jnulXN#vjxfdI(79vyfQ+3B{{fM$f(aZqHfR56aWUjEAm{7^0f+>KopZ{9 zo6Z^1&AIJMr4zRowH9eV#nCI1Yw7#M-wmh7N_+*j7PVl3gqK;r@K)z*?T;@mL?r%j z3Ws=O(MUh(WT-5l$|8?18VRFp^gqU{)>+9Gy*l?+nW^8rS!wc&y8AG-VbLB0VYiNs zvwe5mXNJ`|F+u(_-s|St%=2$h216QC0HQ4xrfx}XdvWf)G|A5H&8t1@L{p^n8E(I%Avx42=x z4+cbqg+{N(MYmR;(;q7ve$$+>g3Ff?T@<{drA#084T=RC4xu?H>r)K=J+q`2j9%YUzpzM4 ziRzEA|4bA2QbgtGEIov_@pjZ^N%?gS52~dn>&#kA|oK&KvZ2 zc)}G&Ms~xGQEZko@Zv=OQEB^-ioB00V8$3!rgVU@7zHRPz+(;TjhN{WQ)GbnRU(_F z$eVvI#F;YtQOl`D@qrQVd}s(mQg+!fBLVF7_^$k>Det^xtu)PJvVVd{r=1sa_l$JY z4?}^^NlCe2a8^(du55{ojm^%^F7xgkM|Uh;)cCkI3i?gjy}!$7N0Yje*3C^V7I8UU z8WIae(>O_sVlGJ)xc8**#5rs; zpaeO}87Lz61Xx)Wg#^sn85=4BAG6TGn1+F*czD?hz{UQY{0JW(pK}497qq*j4Ol_@ z0b{_$(^v*caAWS0yjQS8LQlrOURF976Zl!b{povVyFuxt_V*+!%@covC|(=6Sfc7P zjJy`7B>LOL*NqF>u1o+by$o20HCyu2HLmLPxMwwFz*>)xc)r5*-zvQ z2lv9ZBp4eYao_in? z_Vy^z%F4MH>U(@eiEewq&d!_-7*G-PCW>7kfB_b`Ysn_ks=zHK@WI{DU(0m46u#0&qX9ij&)JsN}BQbyHrH}WgZw!C_ z{J0Fqbmd#LN$zNGwQV;DY_B2Edi9#nVfXzvxx8w|l{p=*L#PQZV;yE+qx;t2opp!z z@eyJL6~ktYhFO1r$H~*4=I;oa*Y6t2#je{}@NH!+^_cG7;f>j7Gtd%M49i9fOtKvT zlY(-l1+nPB@bHw&lllJJo*kgqK0#ZczO6BoZBKv!mp7Fm!kyy1XzuGgKC9b{l7CkJ z?CHL55+f7Dn716uw>0I7;mUF7WQBvfOPcb<^N#YY5=AHwNO|hui|+fuXBF6ZZYU0j zXZ>>Ph&R@f5VtlEGW* zhu4}Kfo*|W+AB_pp>4?DQJ>?VRfRvD?Yvqkp3!M=GGid;7UI!p1CfnHD)K2P_XI4w$hv1UX1|=s`6crUQO9UhCP*E5` zV4$g~d|}>!Wj>cTJ~1)0yAX(_Wo*o2n53(zsri#)H4UE}#=NpsPzW8miyLGb5P%CN zvmxeAh3DzJjt`ex?VqBDGbC)^y~}|oUW$Q3j1_7!C@3jCk&-g5p%(~nc6J8ZhZ$hm z=}n&U>!pUsJBbUz-qNenL*pov7ac@bUtj0>^XFBLeA3b;AIU#pxqKe+p&AIX7yrft zF_0jSse=f>;BdI?K=PL_Ik~wQ*Ox~#3~1h)sb#5f?JWnV+(h48lc1SG=p4B7JhQDVRd?Vcx(F`Y%M0JMB1+? z3LR$r_quHDB6ko>9J7<(ze1Qmjqv{il0H=q5fhN_saY8@CgsXXN;qJIrUg>1U%yiS z+`A9zNA}E~qG-RZ?JSd`q9Vu#6#v1-ZohueK7X@6sH<+#Q*Q~<6}0J4I6WC{sv%E8 zVq$1}yA0S~E(#nSt-uA(;@*P?%(ipmQ4~D9oqIqo#7Kywl~&A=y27*gF`@l)d@15| z5#rW*Ct=rn%-Y+m`#uT@oe9mx@_9^a+uJIanDO_Ct1DCJW_NG)si~>GqUJaOK|#X7 z4Vwso`@mrVYn8};y+XN3s}H)_W9L)uJT?~7%h%W zHjc%DKYhA?X6=~gywYat;1HIWm^dfU-}t)4r!t#FCJWs}0*oTANX!P+1vbCvE4-_v z$c@IdwVrngkPQ4RE6Aj?Byfe2Dk*#c)Awfh7!~DM#HOG2$mU`D^wnH4kD(HeNlVJz zV5(pbiite9vM?(=+{(`0zS4J+eR6vG2`eiO^!6;#!k{OPK^crtxnW_WoEYFSUB}Rf z%0$CPGNm3RiLCzq9irbo=q$Wq^nzJ%|J|PR-dxoN+jrx?j^d?I(?)ZD$_hBM zm6g!e)eXzdeS&J{5uirD9>TX(`Ezr1dbX9}y)3Yx;%Gm+PQfo=h+Xjt<|QgBdUJPu z#ENKS=i&-QAfWyI{iBnU3YX#cQL%MY-NUMy$%Xb`lp?~!<>HEqxr~gB6VlQM+gl(n z6f4Wx?KW&otE?iQ)5RWf00J<86*Zkpg-|k-8w2|`ZP?;PA*rVrn3(F{_K!f|gQR(4 z>w${SU;qW9cuY4@47X=M?cZwmoYtR(W798-^h-u*!6t4$kRnfePs!&?R{EsGl-8<^Kq#t&eO;dQhe0|w`Ef4xlo zc3AAd7x4S{@1rU6mnAvxnhUR8M z1NcIn<3DIBZ<}iYY6JxTRwwGiQv<$h@zwnPZ9xl#86`O$EVt4uHF2DLs!~$U@jhB^ z%8>9Th<)LId00v#Z1>qpYW!lV7jMnGpa9gXn#RUjBERb?U zZ#e%k5EV>M1)px?$v^L8`yVQz0CxuDC1wNNw7?giNl0kYLEa1ogQfZQ=Y#YGF@!&+ zEhh&8lBBk_w)}6x2Q7K+kA`Lb8J0(Q#KZ-&-5SekZ%5ogmerLgCnx8#lmui5@;bYz zX})OrgTf9CNK5$;GUeEtvsuF}8u|We60EewTjEfpX-5O4Slv!9DXlQ8q zsG&aGuf~nS&i^;~#?}^yl^;HS{0OETA8Zgs7eGNZDlK}%{^oY{8OF)+KQQf&u_P0k zoQa}N4$4R}>K|GeI~P7o$jX9$4ggnScGzj8*IOry+m7i=_vRxRzw-&ugB zrlun67LD&^RFlU}c9kt+kfVA0K3g0hOP3Bb71HRH7ob8|ShKGez`C|7Qk#%qt9$uohg5wqQUL_tBqD9X+2 zq~h;|Q2_AfoS!a8t}DMof};&kb5lu6U~TQv4=l#Mmfsk+u{+*Lgk9y=XOK-SySg+G(ob&e4lq_nqT|WZl8{DDX944OfmXD=CT2JUTjx11-0o zRAsD;?W@joX?H0@UG@AYX`LcTsG`qzfEoAsg69q?B~kQ1FLJY9IPlv^V`F1#;IAag zXEV)LYQ0{w;kI!oIeaiTZUxJCQl7?>8A3s2Bp@+ffB?HYrYpay#YI4w=z7;#qP}4k z@jG0z?bI4Y-I)diH;0U5q#Cm3R%b}e%cIu6+ZJ8*Zzc!gY#8w zZsm&-aiGOb5>Y~AdbqL>kNA^oc9qA zmK;6Zn>LCKx-#6p__b~5rr@?qXlz>MH2M{jzjO6x=-Sp6TVuWisMp}L(I6uBU1wh` zc-ZYkd1A@c&*+^w)=D|5@ROK;=-Y3w&i2pWc=+(480@BD`@xo5t1_Rb3`y;Is!E^- zYjV!_(((siF;~q&M`w~p$-vrvd%85umWdJ54S98CetEc*o6)1n*QyZ10R1-#J1?)3 zJ1PKASfPMO(=o7dtO&3MpP>0b9&Z6y(P(q<^41j*|9j5SAd9f=8UHoBK+Dk7sRmCb zPd(4;(xCRd6x^+UF1VwX*8ih|KT$)bhU3cWV9Lq|r{#4pe>oSLpcJh4gTrJmBqJPc zZN+wf|GwXs2cP`)>sOJ78g*%9^`5i)?Zrn%+-#2!xnLA4pTuH=E7K?C6)SNN|K^l! z4s2)p&h^z1QcR5uK?YZ2R0hfe{rykoPCrk-lDN?|%re8BF?|?VJAzn5h0q0ky&8*I z$dAcTzzo0{G14RXJUFua=&bJ|^%|JHK^1>1zqr!ZHm$&{V1+hm5fd(ST{W#Yymoy= zxGpW!JT#)cEa!~4!}DNJBaPvHSazIfkH>x=_B2^Ic7xL&X|Ea>B4va={FAn}?9Xl# z!kT7Wmt%{&%S$h-K9V|ruKz@;Ax!dZ)kPAD`w!2{fq~MMmz|~|^D~GX+lcRfYWGIs zvSC1XFy0f0e7JTF4I4he9K9O1QlL?ZSk&caxng_Xl5aAxPmKfy{XuNhLmM(`Y69`I z)SYB}t8C?q_5`B=gQ$7bh1>0tKk2W~&P-(;b&jJdb>RZrB98a|M>+H76hRwG?WdkS z;?7|*mp?y>c74e#TJyvxC=7dB{xDQ33=zE>H~02W$z4jG|CRNyW$})<&dJ_Ntv^r> zCcmU)yrlda?q0ltD@X*zK;hwYiI0>H4U;?SRhYBWnO-+JL6*}Hk5p%Pv@A{^y_C3l z)r``q2;|NE=J25UgRK#@*?sftN zmk)1C0=PQY%HQ11VP-s=9q`BKs9z=>rnN;-wWeg}SdSyA$^EB?tq~oqms-nsKMe-o zqvh@>qFRmM1x3)0akz}$u(NR;;r8`!r{Go%)1bH#vRav5!AlemPe&g97M=S1H~j8} z5&A;+mh6;L>oV^9++>`M-s(apI>KAr&HZjYVXi9k?B*t5siT4P2YBus4vzk_jyPTZFAK|%l;7V&F#{@6m z2YBOu<-R_5j+bv$yW)V={)N@od@%wED(^5&{9?+# zjbMQ`i3jqgfCV0~i&(wewP$Ev*~Brenofsz8~26YRPJe>HJVW)?$02k^x$H2K?OJ4 zYDnt!l)b);tPIsO!h*lm#m2W#S zx}4BvE%|r}X!Bwq@rF!U;C=tw_lwcsjXB|rm!SHT2h*x773w(x`-zrLj5uEG8oNsY zn1cLkryX{CX`ydOZ8}Tt*i%1uXlu&YpZ`jS|L2anrn?v0|J&<(%X5zPpxF6@BdGCa zdmpw_H$37*80el-e8(PB3c3;!=(`f|YTI4isAxpvZrnKgJdTW(1hi=$m84b8)Bb4Q zE(>0J&XZ$p7-Tg6s2Bh)0jz+)=+dF2qPjMg-n)}mPzPb=&)TT}-Y0tzSB^3--s4M_ zc7_6FgllVSvRg0M*uO9s@5h+!2@UPvR-d;gzSy&$S&=;WgEHL5V?L96-C+tUxtX*C(p#cj}qo=z;Xg3{QI>xXS>>_rkdvm3o};B zAdv-TB^|kdc#Pl9H019V{e^h_Ql+pUy8_`te`C5&)l#l)l%swYnmY%|9xni#jdF z@9#59VQWd;=t;<~+mVv~!}IdZtC5ir(QEY1L?I9FMACUdd`5;kq`ktt)5<+uQ|kOd znQ=1?Nc>n?TfbONV#IAH;!2eld}E-;8;yVe$IZ=6-piLS6F|2)gcf){N=Zp+3znSR zP60{U51x8FJI?sazAi-GUfhipGre0Jcn1kx8%h@^PZM?Seosi@6SLp(o)8F16}0&c z`Vc-hCq3fH_Vy@k#_$yc9FD55)yS@>h^Kxw86Vucus}mkPY=5Oas~!p^KF&mF}1jE zgq1T)MyTeSZLHWcvjxa6i8A(}jW3%~m;m7;?$Hb=Jo76QE=^5CO4G86CKq z<%u6UwYt?P9WAY(U`*VOzCL`}DSZKtIm20GUwvuPV=NpT1FpVe_>V1DTED-9YD=~f zfvU$;cXf^n007p&DY>~-O}zww2NV<&u>b&uFwBlU7W!tNvTm4(*7!{Oa4BE>Vh7kD zihn0&cFq&nc(~oik!w-+N`5V#5MG&b+iexvJbgFLOeav0GqBu|z!L6?M@T@ht?BD4 zUR71a4|dH-G3%g56HQm05v^7_fznmg)jz;mks>(yt~44A7GC^|L3RQwML1pD-Q^7o zs6j#sEM$-ce}#mGI!@r(?j6qds5!fWf23=YC z&%ndhmy_cZ7RWFvLF*cnX>1+j2a7b#OA;9sWUFDSbSi`t4aAHXyPEZ ze35eK8A{~?t&k44!@6Zs2e3`@?BKa+^jaFz)2H{9Miqn1v@Cud~@c~DO_#xsHJqBTB! zwD;qJawDEqIow>UqeLT=oj#oVWK^Eie7@%0+0jIy=0XjP(~B1b%g?Xl`XrZhGyy%2 z_{Sx0s>3mYj*nd&7V3!A*cg8u_caqzxu&;oc3jbDIC5(D-aeD zF`*+v-wAS@5%UF5#xclub7a7=BGcgc=YCD+K77tES&dOI4mPTZiY(=E%TCeIpjpi3N(?z}uZtFeRrk*gyM-uQ?&d$q>%SRwJ<2Qc2S zHvI&qMb3PFZ4>@XiivX!F0dI`+ZbCaas*W$Ouhi^8*gA>S=Fzprjf2?;w;8l2>$}4 zA-?%eb1P`ehdkCp+4_hubwrduA_ex>Zm-%r6RtYNP>aJ@`G?Tlt;%|c`Xi-uFeMDE zXDfDpcPL)H94VB(~D$RcCKe?=_=sGe~teA(1{G11PFUA~EKR z*2opaf&1YYH*4kTYit72s^Pr~8l5_ZSuv#}(6q@(T_OhQmRCp3gcQ7Hd()+?1Dq#D z%jwc}scjFK^-RD2SH6Gh$*PtDWFLT1)-47Zz)%+%S((ut686*FvIB`@ejC(TV2s0C zR9wsfc%6u8a(Y2IE0VI7rNzKSU;_dI0wGDFBz-J~SwQXi0+-hjfM>TAp>JsFI9+C} z8cDaRIPCSG9!FNedjib0e>;my%SE(z&)n)Tzn89^U*M|6F}yu!i$xN3Nq2?Hr<&+zfJO;Ik2n!2vzkQM-^ zIz##7E2G16hD|87k9m2GR4@UfhWPNu*hd!Mt0~6w;Gy7ijWO}tE52?_lC%UrEOO^kv=Zxf?&O7cQ=6=yhxx6?1(89_KnzE&LAsXez4Z|%R1Ar?0izt=0T3$p}{3iO$i@51Ki?d(?DwVK^Ax{&Uq3>!D_-gTzq zp{80f9hVpGz@zwE;~-7w?Ssy6V)EMIZyQUx(>bk3zgtc^Kr$;{<(IVJL>Ceg3f63E z48OFp+P8mu6ENUH1x;M)EB=1aOgi2zCdHfN=P;?`;)fE?zeUphW^n7t^@Oy4aAYq@ ze?R{Ben36jKo^qll@YEBU3=>%w38*zZ%ZXNYDD^AdRx$Z%iGe!^Y^MhZdxSYL^A-A zl9Ha-*jJNac8H9I#-73vLoUWtp0Y|JXvV~!cy4Ykce?Lc4aJfaLpGi4zMvo(8ChhF zP-lfkzOK#R<4##XhLohQo+#@?P!$cz*D*8~>4k+(m!xj|6VsapCHDEv!CY|I)5XTn zS(bq?v)IQ(I*s5*M?DRjmCg(gmi50n&#qr`xg`M1jC3i>PX=D0M$(;Z3$i3GUvV-s zcNO_TDK0j!gw~T8=8A#o;{drQ!Z*%&f0ns{nx}W03+gI!PS5V|pEbO;>qnB!wp}wO zEtlc^z-aMCu=P8&1x0FZTFyA<9DCp0*XfRHx1pJ+aJkSqL+!7q&33PhyHTthsMYS$ ze)?p}v2K&=X>&QG9**)hI*VMG)6TsOM>70ZEkMj zvbzE3@Xf&B0#IWh zo6TyCT@QsxZh3oqDi2rQe!ye+@$rP*;SbjGn=>3m>Qm%swCS@);3{D4D5th0@NZYy z^v9Mbc&6$UHSLr6g<;>xsv>>PfBh zO}(}u+WO`<*?q{iiT{CcKhn68?l~y5q!e-YN@ve;G@@ves5?5Yr_xfq0al9#uAz7F z5)(+Flzc2D6(bU`>79eh7{%z($l&)Z$*EaJu1nwSUBOrF&WRls+_5sUJ4vtqo~U^U zxsl#dNG;L1g3|sDJfgZwSRr14MnN8Z(=%5=(7UvnqBAPtb6Yxlo_R#wBE*pFN{nyqVWfrbf!~-K_DjJQj5X~kX#yF zoczFRoH0uEtP&aLV8Od^Pr~2a#(h@GQV|z zBWLLkP4g+$i!%Hg^GNJzV~DLQOUQ`vIu zjBN~`2Wf699e(5Zz)h8y@6O6ph%!LC;PIJe5!MBKE&LVY5(f}d5gPzcv_QpKnRmTj zR0SFw5)uGXi=8tw6hlKpps-s0GeU!A6eL0FTBA%VpirQvprz}9BP$y>N)lW{%Kw-+ zK&{Y>m|Q7*9h5?D{lMDc#+AVuN~bP?)uVA4@~v9}zBZ$N*v{y^kM1B&+zidUxciAo z%J2hp>59=hXVMNUP3rnu9$1HEhhEM%Sfr$y84(eWUx_rbf+Bo~i<`lDSgEtmDbV|g zMfH1o1bzElF1N1URnGh0%8h?fD-DA|% zu>g!V5wF(EvtgY>Y`MZmSecmQ3upFz^!LAbb{`a~@Y5%QEO%nh%3?gTxvIBKrxaz` z@KG1gXZqRE)p&fq7kVe#IR>>A`!@Xg1DIe;^kh}@Ay``@^9bWN@6f3^N&aFil8O;d zA`=iAT!OmPZ`zxhqLex#6I)urMpv_9Yg~H&+|G$JI~!H5a6u*7UY(k}gY6BQ9v`fQ z8xNIjFJAFBdEOFQes6Z!K4V)R@pvE6%%zbeoKv>L=a+GI+oMZG*E?-xWwi}vIXw)R z%~oa=v0U<&&jhIOuOafDK{wVB$W6Js<72#anxKbgl5NXy(Ou^}`%B)lBk*y4b1R?X zogMdN_30>jmYZJ%Uui^H&hPB^;%(bO?IM!F95V8j%PD2p1OsgRZFl}VBE_bTpwk`q2de