From 815644afb7183cd2c0c82881dc56e7a16a5ea5ee Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 25 Aug 2022 15:45:43 +0200 Subject: [PATCH] [MIRROR] adds sheep [MDB IGNORE] (#15826) * adds sheep (#69318) * adds funny sheep (need non-placeholder sprites still) * indent this * code suggestions * components all the way down * async * sprites + reference * think i did this right * Update code/datums/components/mob_harvest.dm Co-authored-by: san7890 * steal shiz's suggestion pt1 Co-authored-by: ShizCalev * steal's shiz's suggestion pt2 Co-authored-by: ShizCalev * steal's shiz's suggestion pt3 Co-authored-by: ShizCalev Co-authored-by: san7890 * adds sheep Co-authored-by: MMMiracles Co-authored-by: ShizCalev Co-authored-by: san7890 --- .../signals/signals_mob/signals_mob_living.dm | 3 + .../basic_subtrees/speech_subtree.dm | 6 + code/datums/components/mob_harvest.dm | 130 ++++++++++++++++++ .../items/stacks/sheets/sheet_types.dm | 9 ++ code/modules/antagonists/cult/runes.dm | 11 ++ code/modules/cargo/packs.dm | 8 ++ .../mob/living/basic/farm_animals/sheep.dm | 77 +++++++++++ icons/mob/sheep.dmi | Bin 0 -> 4829 bytes icons/obj/stack_objects.dmi | Bin 52973 -> 53599 bytes tgstation.dme | 2 + 10 files changed, 246 insertions(+) create mode 100644 code/datums/components/mob_harvest.dm create mode 100644 code/modules/mob/living/basic/farm_animals/sheep.dm create mode 100644 icons/mob/sheep.dmi diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 0eb855dfc50..d060c569b18 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -96,3 +96,6 @@ #define COMSIG_LIVING_MOB_PAINTED "living_mob_painted" ///From mob/living/proc/wabbajack_act #define COMSIG_LIVING_WABBAJACKED "living_wabbajacked" + +/// From /datum/component/mob_harvest: (amount_ready) +#define COMSIG_LIVING_HARVEST_UPDATE "living_harvest_update" diff --git a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index 2bca31b4551..2298a1b061b 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -42,6 +42,12 @@ speech_chance = 15 emote_hear = list("flutters.") +/datum/ai_planning_subtree/random_speech/sheep + speech_chance = 5 + speak = list("baaa","baaaAAAAAH!","baaah") + emote_hear = list("bleats.") + emote_see = list("shakes her head.", "stares into the distance.") + /datum/ai_planning_subtree/random_speech/cow speech_chance = 1 speak = list("moo?","moo","MOOOOOO") diff --git a/code/datums/components/mob_harvest.dm b/code/datums/components/mob_harvest.dm new file mode 100644 index 00000000000..ac3f64a3aad --- /dev/null +++ b/code/datums/components/mob_harvest.dm @@ -0,0 +1,130 @@ +/** + * Harvesting component. Useful if you want to be able to harvest items from living mobs. + * + * Used currently on sheep. + */ +/datum/component/mob_harvest + ///item used to harvest + var/obj/item/harvest_tool = /obj/item/razor + ///item used to reduce wait between items + var/obj/item/fed_item = /obj/item/food/grown/grass + ///typepath of the item you want to harvest + var/produced_item_typepath = /obj/item/food/bait + ///stand-in name for the item + var/produced_item_desc = "funny worm" + ///how much is ready to harvest + var/amount_ready = 1 + ///max amount that can be stored between harvests + var/max_ready = 1 + ///time between item creation + var/item_generation_wait = 10 SECONDS + ///tracked time + var/item_generation_time = 0 + ///time to reduce when fed + var/item_reduction_time = 2 SECONDS + ///how long it takes to harvest from the mob + var/item_harvest_time = 5 SECONDS + ///typepath of harvest sound + var/item_harvest_sound = 'sound/items/welder2.ogg' + +//harvest_type, produced_item_typepath and speedup_type are typepaths, not reference +/datum/component/mob_harvest/Initialize(harvest_tool, fed_item, produced_item_typepath, produced_item_desc, max_ready, item_generation_wait, item_reduction_time, item_harvest_time, item_harvest_sound) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + src.harvest_tool = harvest_tool + src.fed_item = fed_item + src.produced_item_typepath = produced_item_typepath + src.produced_item_desc = produced_item_desc + src.max_ready = max_ready + src.item_generation_wait = item_generation_wait + src.item_reduction_time = item_reduction_time + src.item_harvest_time = item_harvest_time + item_generation_time = item_generation_wait + START_PROCESSING(SSobj, src) + +/datum/component/mob_harvest/vv_edit_var(var_name, var_value) + var/amount_changed + if(var_name == NAMEOF(src, max_ready)) + var_value = max(0, var_value) //no negatives allowed + if(amount_ready != min(amount_ready, var_value)) //check to max sure max_ready isn't lower than the amount ready. + amount_ready = var_value + amount_changed = TRUE + if(var_name == NAMEOF(src, amount_ready) && var_value != amount_ready) + amount_changed = TRUE + . = ..() + if(amount_changed) + SEND_SIGNAL(parent, COMSIG_LIVING_HARVEST_UPDATE, amount_ready) + +/datum/component/mob_harvest/process(delta_time) + ///only track time if we aren't dead and have room for more items + var/mob/living/harvest_mob = parent + if(harvest_mob.stat != DEAD && amount_ready < max_ready) + item_generation_time -= delta_time + if(item_generation_time <= 0) + item_generation_time = item_generation_wait + amount_ready++ + SEND_SIGNAL(parent, COMSIG_LIVING_HARVEST_UPDATE, amount_ready) + +/datum/component/mob_harvest/RegisterWithParent() + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/on_examine) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/on_attackby) + +/datum/component/mob_harvest/UnregisterFromParent() + STOP_PROCESSING(SSobj, src) + UnregisterSignal(parent, list(COMSIG_PARENT_EXAMINE, COMSIG_PARENT_ATTACKBY)) + +///signal called on parent being examined +/datum/component/mob_harvest/proc/on_examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + if(amount_ready < 1) + examine_list += span_notice("[parent] seems like they could use a bit more time.") + if(amount_ready > 1) + examine_list += span_notice("[parent] looks like they can be harvested about [amount_ready] times.") + if(amount_ready == 1) + examine_list += span_notice("[parent] looks ready to be harvested.") + +///signal called on parent being attacked with an item +/datum/component/mob_harvest/proc/on_attackby(datum/source, obj/item/used_item, mob/user) + SIGNAL_HANDLER + + if(istype(used_item, harvest_tool)) + INVOKE_ASYNC(src, .proc/harvest_item, user) + if(istype(used_item, fed_item)) + remove_wait_time(user) + qdel(used_item) + return COMPONENT_NO_AFTERATTACK + +/** + * Proc called from attacking the component parent with the correct item, reduces wait time between items + * + * Arguments: + * * mob/user - who is trying to do this + */ +/datum/component/mob_harvest/proc/remove_wait_time(mob/user) + if(amount_ready >= max_ready) + to_chat(user, span_warning("[parent] looks too full to keep feeding!")) + return + item_generation_time -= item_reduction_time + to_chat(user, span_notice("You feed [parent].")) + return + +/** + * Proc called from attacking the component parent with the correct item, handles creating the item + * + * Arguments: + * * mob/user - who is trying to do this + */ +/datum/component/mob_harvest/proc/harvest_item(mob/user) + if(amount_ready < 1) + to_chat(user, span_warning("[parent] doesn't seem to have enough [produced_item_desc] to harvest.")) + return + to_chat(user, span_notice("You start to harvest [produced_item_desc] from [parent]...")) + if(do_after(user, item_harvest_time, target = parent)) + playsound(parent, item_harvest_sound, 20, TRUE) + to_chat(user, span_notice("You harvest some [produced_item_desc] from [parent].")) + amount_ready-- + SEND_SIGNAL(parent, COMSIG_LIVING_HARVEST_UPDATE, amount_ready) + new produced_item_typepath(get_turf(parent)) + return + diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 961ca917ad3..7a4a8ffdd73 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -528,6 +528,15 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \ loom_result = /obj/item/stack/sheet/durathread grind_results = list() +/obj/item/stack/sheet/cotton/wool + name = "raw wool bundle" + desc = "A bundle of raw wool ready to be spun on the loom." + singular_name = "raw wool ball" + icon_state = "sheet-wool" + merge_type = /obj/item/stack/sheet/cotton/wool + loom_result = /obj/item/stack/sheet/cloth + grind_results = list() + /* * Cardboard */ diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 7e4a72c1183..167f02d0024 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -303,6 +303,17 @@ structure_check() searches for nearby cultist structures required for the invoca log_game("Offer rune with [sacrificial] on it failed - tried sacrificing pAI.") return FALSE + if(istype(sacrificial, /mob/living/basic/sheep)) + var/mob/living/basic/sheep/sacrificial_lamb = sacrificial + if(sacrificial_lamb.cult_converted) + for(var/cultists in invokers) + to_chat(cultists, span_cultitalic("[sacrificial] has already been sacrificed!")) + return FALSE + for(var/cultists in invokers) + to_chat(cultists, span_cultitalic("This feels a bit too cliché, don't you think?")) + sacrificial_lamb.cult_time() + return + var/big_sac = FALSE if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && length(invokers) < 3) for(var/M in invokers) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 86424ac4620..ecea5fe4e40 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -2185,6 +2185,14 @@ contains = list(/mob/living/basic/cow) crate_name = "cow crate" +/datum/supply_pack/critter/sheep + name = "Sheep Crate" + desc = "The sheep goes BAAAA!" + cost = CARGO_CRATE_VALUE * 6 + access_view = ACCESS_HYDROPONICS + contains = list(/mob/living/basic/sheep) + crate_name = "sheep crate" + /datum/supply_pack/critter/pig name = "Pig Crate" desc = "The pig goes oink!" diff --git a/code/modules/mob/living/basic/farm_animals/sheep.dm b/code/modules/mob/living/basic/farm_animals/sheep.dm new file mode 100644 index 00000000000..e97f4874c48 --- /dev/null +++ b/code/modules/mob/living/basic/farm_animals/sheep.dm @@ -0,0 +1,77 @@ +/mob/living/basic/sheep + name = "sheep" + desc = "Known for their soft wool and use in sacrifical rituals. Big fan of grass." + icon = 'icons/mob/sheep.dmi' + icon_state = "sheep" + icon_dead = "sheep_dead" + gender = FEMALE + mob_biotypes = MOB_ORGANIC | MOB_BEAST + speak_emote = list("baas","bleats") + speed = 1.1 + see_in_dark = 6 + butcher_results = list(/obj/item/food/meat/slab = 3) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + attack_verb_continuous = "kicks" + attack_verb_simple = "kick" + attack_sound = 'sound/weapons/punch1.ogg' + attack_vis_effect = ATTACK_EFFECT_KICK + health = 50 + maxHealth = 50 + gold_core_spawnable = FRIENDLY_SPAWN + blood_volume = BLOOD_VOLUME_NORMAL + ai_controller = /datum/ai_controller/basic_controller/sheep + var/cult_converted //were we sacrificed by cultists? + +/mob/living/basic/sheep/Initialize(mapload) + . = ..() + AddComponent(/datum/component/mob_harvest, /obj/item/razor, /obj/item/food/grown/grass, /obj/item/stack/sheet/cotton/wool, "soft wool", 10, 3 MINUTES, 30 SECONDS, 5 SECONDS) + RegisterSignal(src, COMSIG_LIVING_HARVEST_UPDATE, .proc/update_harvest_icon) + update_appearance(UPDATE_ICON) + +/mob/living/basic/sheep/proc/update_harvest_icon() + SIGNAL_HANDLER + update_appearance(UPDATE_ICON) + +/mob/living/basic/sheep/update_icon_state() + . = ..() + var/datum/component/mob_harvest/harvest_comp = GetComponent(/datum/component/mob_harvest) + icon_state = "[initial(icon_state)][harvest_comp.amount_ready < 1 ? "_harvested" : null]" + +/mob/living/basic/sheep/update_overlays() + . = ..() + if(stat == DEAD) + return + if(cult_converted) + . += "hat" + +/mob/living/basic/sheep/proc/cult_time() + if(cult_converted) + return + cult_converted = TRUE + say("BAAAAAAAAH!") + update_appearance(UPDATE_ICON) + +/mob/living/basic/sheep/vv_edit_var(vname, vval) + if(vname == NAMEOF(src, cult_converted)) + if(vval == cult_converted) + return FALSE + if(vval) + cult_time() + ..() + if(!cult_converted) + update_appearance(UPDATE_ICON) + return TRUE + return ..() + +/datum/ai_controller/basic_controller/sheep + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/sheep + ) diff --git a/icons/mob/sheep.dmi b/icons/mob/sheep.dmi new file mode 100644 index 0000000000000000000000000000000000000000..690dd4a136817f69b6e7b6abc3db77e1cee8772b GIT binary patch literal 4829 zcmaJ_byQSsw?7Ou(CV9q=MS2EO*Cp#p## zR9b5H9{PU3W(9Z{&t?sDYN7{IT`!ci)pl+#xITW%Apy-a2$$gHc~JYcFhh$aaq;=& zeDS<&?K8RcASwsPB)7~N)l}YF%7alE#jF^K2MfA2%34-k2{gzq=nW`YLuA(6y`IF! zIvT0i+TcNqCwB$hG*x^nd+aUgV!)VE=dwH|0N&DqA)W6GMiTu}ms+5PK4rWGq;L`C zdPV>b<7h&LX(0ykDuAFSRCyCh@R1D^CeaX_h_xJ&zFf>ndfi53%FqY7)Aai)F>d+N zJA&pHR|HxcYNd$Sf)fuKs(g&5@mG~(qr!*YP!YJ53;}K>!+*R$K4@5Ud6!PC3>D#w zKv%CViDbc#(;ktU!}U9xYxXPqHN-xgjeNR(>lYQtQ(9UYE+8O)jTp~&xHBT>kM*Q* zPP0&k7S)f4q*>_~2U+{Riwg}gJ5{_*CS&y7*L6Te7s46AVl4e0_JyLe!4`7X#&Lnk z5l2tFsnqD`>8TWnK+Hz$x%)GU&YJQ!+1(38eRAWASStMdjwvv=PyOk%Xk+en**uTM z7r-ZG{$BLHHqOE$oEVEHPfOI26O#0%3Z|&AkWEBP$l~zoozEQBhmL_E*XPt|j-7Gb z=O>}Au5Oo;bl0|bx07@}`kOWz7O`8HyrC)NAzTId&Q8rlMKZ@uy|J~yDI!7ztQ?=O zdbSq1XoM4Bv#fHH6MV6Uf93%Id;xGGkg)$$HY4aN@b{H0p!~u_UiP|<0XZM2HXJ;% z-ncTVx%~R)6bM>Jbfs5tS4a3xQwo4d7mqo?{~ zPiEL(=3~c6ap#wFe|k`^LA&z12nev9_JoPF&G}LHTqg*_X>TX7ogtpx+QHS_PJBYb z@_D0owtHafA~o0mv*U5mwu4(ydL@K_gQMg6Zfgg-tlORClY=&c z(`S@;Xn4vyBVz!X zS1*xvm;3?;|8B9M&>F@f_Hf&9Sj+$1b+Y{ni8~{7_Zel!fQ)RJ#`<^vrXSDi*b!lT zvTkZte)53r%DO)8b8)N@EVbZ8Fl+W)9W5b8Fa-E0BsOp}Q#K!qqXkz;SCqrvLr!R; zyW@2!QF1$h?l}+MliaQ#faY^^%Bbmn zbW(|J?R=s27jc%@@!v-^SH6ny;bK_S?C;2VSB)p?j|{E=Zi0w2?nd}pv>&LktF=n) zjO>h}Ax1H$r>C3|wl5a7=@=P%U1bZZs%X^J)jwJ^Ls()-4h{%^BT7ahD>XFC5a0QI z9P*MA{)|@SW)BG|7_Bd`Q}-D|J~1`C-;!XV^k`lLP4pi9s9@$XHX!);(l>^cHkD6^ z>)_RK->%2~D;#c<3`;pdR8`dUk)It}CSAh#^8SMd_b&fVnQL%kMYnGI&U+-Pw@v12KcvUr+8QcSP@V8S=M@ zZ_KDq%mACr%*?@(R>6x@5i~R^30Wz`u^NPzC!$W0F8A8qm{>gTnc}#VlZfMI-wX|D zH7!2BWA)rX`wc%&LzPB;SLJx9&O!DFmij!STg>NiJ+bB4Ot)BFPtX`iSO9y@)gOgj zHDlwXSk&#Ty?2)2U zH_hDyqXM#flb5605(mU1T|YD`B&4OinV2wa!*5ySm^@65|8>-&Ai#53O{e%asO9Az zLUF&h6K4Llx`&`U-}YIoB)nvnAY=z3H%)q#emVl3Wq#~OcTqlJIQBrVFK9L6ebz0nyPD~RoS)BbAL=+xo+vAq|DLVnbM08}STD+r!cepZ z4d{RrsN$YO^^X8Ajj%tDO9O~t_-1+eNlaZ`U2bVWb=&l~H(q z&-0$ZkM@8_u^4bY}$G+A*D{b^{Y*k3~F$4YUVi-aql)TMC+McjRCY zqrNI#J=~T8AWECPaRq3D5@%47=F_<4BwfP?_tvp&)VY4Sv5u z?(>uoTgrI5y*+DkK`t5^&H$2b7Nt6=A3h6mVY~0RwrmImc)}|?Pf?qv2N*+ZYrV-S zsiqt@sDPm0ZFDEct0iO@Od&2iM#hHcVyjUE2$`Imao*wRI@jKp`^sMd`p`pr+asy-O0th`U4ct3$cO0-FCu zS9drmmv!U3Yt_6fzley*uK^RsoH3!9!1ZQ6mcWdH6l8Y5XPrDjzF%HIcYQ1q!T%8o z{VPuTi!3A_1_1DqSon{lu6ZGP4%-H-jSl|};MO5U4(39fgJUIs;GXI_A@|7qd;?Oh?8!a{>%``ZQpLZcX3`ZeTf7C&s#6_sr`~fa;Fx3c4lq;xPTBU*~dsC!14d z_2u{pfN!(wUE0=11%~(z_gj0JvT<;-O{@`ev%Xpns}l&req&{Ay;GpLxkkv3_0!EA zdJF4vXE8LY@LeY)%A5VIWoSrC77NRraKi131&8M6-%c!B8e1S0#rCc@>h!rFjRJw9 zE9Th#!amaUp`Q$*h>$h8u&Agge!y2l^IhV5a&3YB{{94HyU?72B+n7C)>9-K{yXNC z7BH152C?|@NpKhdW|CHyee@qZNZCoH6D#D?%kBZ4)mlBf*cwigBd?;3?f4RBr+7LY zto{QI-_0J5kvu%iPTI{(PlsB-@~(=Diiq4^zL7^L^Q)?=N`tl5bVXv+D;L&8$8ev3jaKk{+A z+@Z*;Y|TaZo7uz18k(kZfe4$)HNulX1h_!+F!a@NkOxkuG%%2*?;HX;Uz~ot+-kKT3tH)#p0*yZE183%eSrS1oaL|9Q*gb2r?d8Ts9*-WL{2ZX#X3_(wu{cZnuQhEt6Ll}g}nWk{BtPV4P zT~&G&J=8KUXP|z?<;27rF9D~TYH4!yRwv9ByNBSuU`FT;pu`M424CvWsX{QYhESRfjim|l$V#^Q_6i2Y>{v&HnvdUNJohJL?27_$xbrk^*86p z1#BF@VA7Bp3oA-zyA0*hvqorEj!M_%UGr(>$+>;H>eE^j01A7Z>!a%FYXM!}oAQ49 z_CUgx+0~fDC9be>EH&AYfHx_+YOlr>kyLBb`Xf>Nyz_cpVG<*A^uln;-OtBm9KSot z^OJ+=-u1RAT`WMVx2S!l-x+olO1rabd1E4qt*tVUdE@nO!zxQ+zH7x9Yt^NnP4OzP|C_|!MkrJIMV|m+E)29B%A2og|0kjQ7mI<}o}(VQ zZEw`M=((HK?vHwBR(WCcTD&l$RnGA~N`{L5vqwOP7|APK-wF+|5^7?K7MEh8ga+yF zJBO3We8}n`A-k=gtnQi^+%0f7htUe*Iuc zSO+2lR%S@WvMkQKQW}wrzPKUPIiHc)UhAAB2+imItoV+5{{CZmMVs|i&(_Qd2i*{_ zU#b?{`b7H?F|n}Z)6?sK;jY8W6_%zILXeRTwcB__)8%7|L#ib>SXfyJh*%W8UCiw5 zxyUJWnS5Fj*UC8Y{7Y=V4o(eB45R8z7Ww(D-}I<(r7|5ul&3?;!#=^(AxtNVxbY{T z8E3~yj#u|`GWAx6k_a#n==7>WvvL3%Vl8ESBhUc52FYQLm-zLah;oaZf&3e_WdM<> zSPZfFj`tcUI_d6>C(63U$8)HIi8HGnAQcDWzEABXct05gVNM9@r=+AL1Q;(aQ7xIe zB_(y!`)(7e32K#(ue7E^LM1bF3#T1={$LjXz}VP$?r8ryx213+#+8? ztc<_+X}qbemM6Iog+aIxNb%?c(GA14ip!{(pp5x-&JhO2WapC%eH#cCvrn1|S0 zI?#iz-k{Z$>m>bHYyQE|zDWWR9a)!8MX)$M95Z@t7Jo>|zV&3RxB1Eo z*A#`@H-5<}_Y#h{evCVCkQchI7(=8i(0uPxr>ISi*X7UmRG9g42C?zKQ zLu6W)t=Qr@L2mopY*A?Y*nIW+$6yv4ALn5m+K6hCm>J zlgJbZgs8{Qz}Q3C%Kf#Q-CGYk7iS2>CoB7-g3GKbP1wkI&F!QLgY>wGNfI-1k}zsA zEOjWS_fvtkIZkUM!y@=15o>gk%2DjA&f4HTT9?%L?%%8H%OiV$EdD_bLPij7@*&OG zF)Dmwi76e5d{KFEceu zYXzSrTyZcp51<@Rd0}Xsr^l1RVi@LU7@$>Z(`yv!XP7Li+M7=Q0N~}L3YmrrZxeK{ zRT#S3$-=9mG|)E#Q@s=CubB!k#u2ecX&qpkpCj=m0?DUxUmX}1qBYGP>r@D2Q;JTrXp^}*RLto0QXK42B)M4e)nmW>ybj^=Hm$ zAbVJ%YkpZ&&*Q#^@?-q>?gee~$qz@9PqL`o`6V$)(OL&zz6u%vM(-F$Q9fMX{DI`dvrndPZbYgOoyuQsJc|Lv;tYwqYdV&zapp4Drvb zBUSO)v!kFHhxQ}i*@MZpBZ--enq8w+`+sKD9EQ|;ItB;9AIZvqYa@({PtDK$ma86@ zui!SjR__&O{T6uihpF`kK6?lnzaR7`UadO-JiTeltNyS7*qNd^IoDSiWs(kVgl#r- z$V#NVAJg_Pt_!^Hqd#;mJ-!<@wSGph5qqsI>z6NyXfJPF0nJ*oFxRcO!o^y03C+v#u$9vq^%*e}bWmv|>;qZGMjwS&q-_^L+m-3FSEk!%KsYlIetq2FQwd>TON6&=e zT}772r~z?Gpv1BKZxnIqT82Hcz@a>|oRH&NW%3J0GHqVnGtwMEpKBv1U#XBe!{jyA z;|L@8^L_Q2)`(-ga16k}{`Q|k2wWU8z29OvT5f=4l?}P3_gm1nd0u;p7)6*s{9$F%TzPQgy~Wz z<~#AW?;#>0Vq#Fn%Gh?sgn`H+RQfMOYF%(~SaHQin!I~jf317~c3Rx5-5LcuUM zzFyiC!vCuD+)v=LsjFcNlM=SH*j*k;A8*>CPAzoHzsFiF92vt> zCtWaVuqd3pJ_lOu12%RNDvTNVwfG_d`wVaxJ%t)!1<-(=7%fi_r(V?tkJzrD+VrwS zKG&URlGg>o2t(ua5O{5%l@btO0QPgdh>uE?MOb4la#&1e0Dk@>i$NIy7RYK}0KOY~PiJR8r{p2TuvJqL4eHps zu5lN~Dpk$#_*?171MCgcj-@SlKH5ePuSTH$Si+(h>~%X;{=N0phTFb=AK0ccvNgo) zS~RWK1jJcXV_5*J41p2rsO0GpS`^%&EW*G~@#VD{1mYzm38^0Ti8B1uq(c}uR^fYO zJ?XMJd2;lJcy97n(07?>M($sezm}p2`mx0*;1{;w^6V2-6^DA3t;iLBOjM4y!*b36 zmB;O+_`)}ZBE?Y{LUnYn*lTEwkCWJ*VS4^tyn~2wFyQ#((BsaE*yrRX85`zNZ0ye3 z{Z`iGsaN%LRC!WPPFsU&kJy(PhyxFu+-*CAmGeKQ&If%`l13n#a%T3|+KHeD)4knl&We|c!SY;8viFvwn z$Le=&EI{m_tR2tFN?Cs}Bg;HE)$qyqZW0RtD$*c&G{y@;xgeLVGVRiz2X)XnQHs&T z8Efzqh+)T!r87$R7Ehrk7}z+b2x)Di!}N3mi$DQ|h-W%X8TeDEf1n^5o@fG;%>k@E z4Yxm^^?fg$wmp7ixwyP+IUg`YY{9JN-I@)g(%ZF&ShAg2i?b~{u%W3VZ;@*NwhhX- z+Zd&eOSJ@KU5BgjhQAMvQY}y%<3gVxxh$euYMDJY`WJKPJ5+qV-|kff{TJbPsqv3b z4x-#!w1U^)tN49CDignD{7H>mr6Usi2Z6VM~y3P*Rro;9*hT!r>(a$_ig7Q2?o)<=I^5kK=5 zHwqDM$T~Py2|?K};WH3#r|`W*Pf{zGbz<85Q|D)HYsdH3C@^I@INGXQKn~aUWiC#g zWXTBdUO@NFG#*#!tgycuhq_VrZ`%I$unPH{dF$?UCS_i|AH|#W`}rTrI!pDB zUS|k$-gRL<9F!tB_11@(0gK@W+{`*j{Snd8(HN@(m{G{*=!n>mhM17@Q0CSr!E}o1 z3*)8bet_-v%+j9Oq>;YP+@ay(L4Re8@h;cN%u;Ca;{CUZq?~tc-Qsku+>g7L3@eTE ziBkx9LTMD=-QjtCv*X@&^S9qcpK$76ZJ_IqD=7wkM&LBB?f_1N@Pk;sAM_HOU~!78 zEO4^7KU~fq25(8Pp8fYz5(As4Cip157T?>;2gy29gCRGdJ?Tl7$!0GJ>!{>s4jFMF zrA+WBhcp-Ozf~fyzzTYTgcf&6nu#Fvn?`PQ{Ukys)V6qyB-nPvO8_DVZ>E6=;gP6E zSaiZ75%-nJ{WF~=C4&85CV7@3wUzWt0c*s0E)d@Auq0%2@VE&isP0#EPO5BYca6pP zN;G>mjEBh3RHp=y#~G0uULXhdZQzzZ>^4rBHmGD8q9I;zE|cJ6LFpyaN*BG`!T_nY zvSQ^^ZMGP@0XV#+daPG(2Qi*4E-87O*ho-ORWfC)VKd{F04K!gR3uVuF*YE6q2R%& z4iLm~SP&3fn|1uhPQ@~stHw|_j%3}Xs&~B2rAj?+1&Q^ssC@KxRjn+V_)C%;QaFm? zVxJVW#nsky5Y_-;)mOY2atXFp)uOi(>vu~*06dx=%tx?$J58RN9QL@0q}kPYgMJ20 z3qByWw(5FJL>y#WDLW~cKZ+sv|GHufPcL;NknqNHWOZvo$|9P#$K8_6UQo$25}T$v zU!w|uK+<)u_1(AaBd%=9G3v_zdeQ+xHyuu^tEh4cK@jSifQ&@>R{em*F z#?p6aB(ZL{Z}m$G?y1699MmdxkEP#Dq@9~?9|wCWOO@`mASbYlO^6>Dm}B4qpgN3O z{|Uq9zZ?ZrWnEr=rDZ4#ZiyE}iCwaF4v2Z=k_=-g^DMCj56<_A?(QyzT;AyXbWjv0 zQm?Jh_d<#`wo$1nUW0!&zsZm&mXd~HI(|AK1tBsW_kG%4L{#kd+GnJf!rwGG8YJ=s zoHCD~pex20m#V$vC#Z`HsKi^K!_DyB)6mV+++EHt-my~k|6`-8LGHEA zdC+Qr|A*ugTYJZ#7f`jzB7Hnv3Z!_mZu@Papg>nKOV; zbKj-?TZ-!YSH2zPMsD2z$qbkbjc;F6OicHEiiV3ix@*v%PZd7^xfTRc zGK1L#b9(3Qz3?+Rb7c(@6LHBVNFMG=En?MkMXCM_43HcU0I)Z(f{=SHlwC8qsp2TC zz7*z$)bw~HuhbCLwY(yZ3>MaUgw&JCJi%j@BW3t`QWd80Mz?feK92xz2Y8u_O~pQB zK7PH^k5G?4ro@bR;}X!I9BIS<^~D{T!ur9n2I>4YuJ`3A$IbC2_70yaQM7+~k^q@qJUbAMqnvC4ht>#R(19jIy6f!{OgQ|Lg+2P=&AU3pHo_c}LMYH#K(9D9x|MJBchyL?B}%;R!1`i4x$ zvBl`Aj}#$BANwT4v*^lv3<^M?*Japk)346=x6!aC-Y(FaDx<1$r|p!-?Xgx+M3DQb z!~M0=SOYFxZJn|6!tx- zu;B6PrY?sj7!$Rn)H4CBxh9F5KQ63l4|5gQBA84DGGC3MXO$OUC}kNNpr(*#=;eq0 zqc4do+0$fpgTq>2QIE#m?359;jf=RdN$=7=%X_vbK2o;tguz##EFVBhl#iK-%5r zdr8F7#h;kc<$=m-uuBrf5H;}d+9}d#)DQ`74N~J?ziETt1sJ;%~DtXp1NuqpD zsa*5$$kLOg-sP_DV*MqNr60|)r`<^O^vIuFBybU6NqfL-cc=@m#)p-H`~%<7&0KQyAm3Ls^N1-tnzPEurrBG0--u&UgyJb2Jh)?8qjgPeW|0up>EC(eSJON9v zv|Tq=r~XBYbW4BHizIhqWwIHTxH$iq`8aToqX2<`0|egjzE2hy6KFKXpBWI8^Z{kL z)liR9gPcv01z8o`ehr{Vo}>EwJkhy(1zifQl_NJ@{P$0Fi=+ZNgVFi#TI9b;lj|xA z!)Y`4WlM(9oQ^XU{O#|_^o85YHzPbD_8x^iuRfR%6JZ<>F@R1_}*s>8bLk0mM5z$ot|_PEc-k0Krh)sr63poMw%W14tWql z2A>9hvvG!CiG#*XcsKo7d9$y}pDXI7F;yqBv5PqA!+a0BR+VRDB2k};Vf0D(~ zKn(Nv?e3=>*NsuzX?T|S0G_7@`@?Cp>H@a%E{68nCJ z8`wAhK8yu*M<{#Cw(H`?-=h+E3Hdn8VuV--LciSGATwxXh7-g*E5JN>=K&40~<4Kf;NF7@R~K=Q2C-mO#(qBD4YuCSqg_vX{+ z=248A-!;GUBxqTQAN3~Xjr{vD3z{{}>&bGY8d=?gBk~k7Qm)I&FR;&1X_}<_h_}!3 z(L~eMe;ecIhWefbnL>NUIJf9K<%X>X#2kH zZ{#Yk|34MTs8$^SDOIQX={DGcBzPIK&q`oTdSs`Aq?!pOHvvAW<=N2&y4V}I3u+Sx z0YLqM;me{SHky#SHX)1OK9KZ`c=KCOtjY~D_$wP#1?60>AxL(Dde-$gFMH$4A;is1LD>`$$ep2F%B?+1coWl|KDN zl6OMvB^eehw;?+K74b%B&IdEvyr(M9^ppD$?T^`*YlUwDQ$HDP7o>@IyXB_b^aPQ8){t=<<~Llo>2}8P#Mg4;9^SjKEf%R1f(o9?fr+6ij%=_3>c%PRfd{fY zt#_iHmAoiw$4ydM(WE}VTTUIcLI^_*oO{O5J!Z3`*sOSKpkl%^;))AP6>| z2!v0OzI|r`vn6^~X3}y0E>4rS6gm<2E>3>uxToG0a!r<|RpUs6PgtL7nKK1%79O|+%6hh&8eeqhk7#(XlYG2iKq+2#~c zf_GJ4kjou~NNC;}`@cl+%tUcAw3)zm0&5vYw$MoH4u!{o`UH4)c|$&O@DjDVAeTqF z0iS;_3^QZ0=jx<*d_;=}mxFuu>?FfJ;n!RctRMYv7`(Do-bg#hup6k!R?TxBuqm-i z$)I{Il*)FU{GCXSB8rEL|N0)Uq(hAIURwzpYZ|gtC6loPuSokUJ^V)AooEGPt9Sv` z(~wyuhik@QP=K;;{Xys7MihO)WoE~j(=|w_LZlT;*nZ$&3VHLy&ysJ(s&wQtKICS( zFAlj=E zGm}_+R4E76Akr<*u0L;^7SH4*{Qg(BGr;y5%^iK- zvbTy69TGX5{AvX=c|3XRgh4kTQ3*}eEf1!6q}PJOBw=BE+o}-GGexGWqOdRJwO0h0 zdJmYCkK+yd7DeLClol4e7B#wuc-!i{56Jf83v`St`I%GfuLU5r9j?uN#TvCKB+`aN zyzh?qLB`qgc$?4p7wGQ)Lj3$s%QRPo6aL(Qj;KF!TYc_{72FTFKq)0UqNv54w)Asp zV6GPq>Ys#K4uNv1M#L6<&j{v#SJkFb!BdDaY>3nm?~f#R00wjy1m;&p9cPCRJ%Ui2|3$)u;7S zcEt|2oZh_H^JKn;Nc$GsWcIOsDo3P+eD$>k=BRfB^XJ!?z!$T#lF<&3qk(i~{V#0poPm30#(;uD(j|IfO&t-F8lDg?7Ldu^g zaf5A#Fo|KP#;}IY40qv-@;81Tvo~M(=*!p%`dl~JRcSm>mS?`^^r@-dGlp+EPC()1 zc{r8bqDm5I+aA58i1L0`od|}w>tE)g*7tE%*ltn`(B6G^6kLseX5O3jlwEx1`TrwoNkbp^Q5~ zzhtIHdiq>?aS~33GYV-c8K??H z43k=Q9q`(UGjwYFg1-_y4%&ZzwnFX{ua*bxXpL8@;Q$;<} zj=y*}>3!JZQlEawKXAaS@tAmw@h@P7xa0^f|v-)~2tUoG4yip1q%p`x$4@G}@>)$w!?A3v zD$hnNS|wuqwdH~&kIW~q>qL``s4qg2zQ1es08`r^sF|-Mh#*Rs|1&(bd^{pM^&T1w zfYNWkL_A2rSRsWIx&R<4x&}}Rx?$C@B$8kgP8R9q##8d$hL8u*bEEq9&k{@EYc}r> z5Vs8e*6^-)gv2_}XIUfrC{TI&FR8l@{YUkyznZ7<{CpIOyF9X^F-#}}w!#;2v`qkl z+fUm|<((Lue}fHrZoJ=&fa0Q;cYGd(tLJ&Cr)k+$$-P zs};yR#8z^{Y8-XkublWbP11g1{uNP0E-xK(#H+4=O3m*Bn)R~IUp84$HZ!}1xim=~ zq)KzR@s2a|T!-r1s%cGpam8!fp5gvh>VbiPYlhZIJFeX-i?-DV?tyl*gMFzPyX%Iz z6fOb){Ojt{fz!}LmjKBD$LkJiA2!H-V+E@aVp%z0HEIyE1K|ID zS*>g5(IFm}XWBJJ$Xk4R6}$GK|4onNXV9GusPxQrU)=m@)#R|LdG$_Or#3w`XbzTfKIoe&)j9qNaN(Vs(8Z z9<@RW(r>z@+xFN;G{3B2f7@F%O$r+&?hmqlvte{+au z9mlhS&^}9$=e4GJq1T|<`zSB7rZX17UHQ{?w|xmb>20e^6lwNujdg;Hhvf0L*Q80IlB_WCOwmqimb|(q&x6=8NY0A zGdwvWm`l!k z@9o{ZiWM?xv`^u?{EKN`L`dIyU>t-&11J(PK!hc>d}?YcC&zsZhj)}B@w(`VWP-Wg zS$kkoOincP9vlqlHGbBIdCWD&r(kEU;9wn@)_!30827)=-d`nWE{9~g*FyLCf&w^z z((9IHua2(@M5E39ljh#B9NE!siTN9}wVCvlY-3R?^BguYp>&a-b%A78h{y+%)9;fiDU6rr;A~5jJ^1P;1E1+vm$3yf8Bil@_bKCJ4+%MCgUZ(Ap2Gx zC2ES_4JHc45Y)gs%(I1GtImAY5NNs9-rl~kv(r1AEse=Mt7=|gIotj`;x-)vMqh2# z3QXFHWZe4mQRS7B8 z?puUO%Ke=ql-y8iQ` z#fdF!5B+;hU3RX%!)fL&JrNaL$Kuro-oI}_wQr(Ru*$vVDnv$pShwcXVdi8?wHS9)6|&Zk4*6QmEJJ z`xV}@d?>=zG&533pzDqU96_F>i1eA8RJP(0JEu^V>^*yoAf@s}SIygF7@n6R3&@R7 zI^D;cl;s7yy7bp4O2kXS2NTV!tz_tjt7LQ_WHFbhm7+QR1#c3#iQHS~|u#kU@i9j>~Bo?J2?dT}jZEN1wc z8Dh1|s;ZtdI{7j5!4V(>uH(*Ki}QQkC;C5~T_xQ+-oaIkW;RFU>ABA)aFHej`B!2C z*NAQdxAE+|%r+5>{+!`A3*K-LvyTdfTcbb6zEfGO$}&Wpt)@MPq|5j|s_wY-3&epL zIkf`xH8zxHVHwuJ&_3IYOpnOg472rFMX46rD=87p%+5{>v&X7VUG)kE1&7unE-%i0 zH9DlN236RKl!H|;x**T2zblyBVW+SqimNPMNG~#pwKL|qzcg5^sULR6tOn&@U9}8i z(Dv}WLmQ7iavS<#ZBRd7YLovE;7|p6BkyVoF>x{ z>3*NbobB}Vbh$OUU7-6)Ti81|Ozq9N4JKT^O1ycZG^;(~7}#WI`&(jl3>a|ZJNtLA zQf$pn;eWb2U+&n@)pp%`&NaNy&4jt?m$k?nf2W?|7!}|Eg!qSpiFQ;EmVWvW zeEFDLF@UR*ABa#%wmZ?KSYdk^{PAF*k15wMrHtVA>kG{u;bmL~b4?5@T`JcvR+lU~ zTD!F!{Q7ebMAE>8>|um;ClIMj2>io2A7@F0JyPla9a?pKy5kVf)NJK`DFR09vOQLn z8UD%b`geok*_G{>(Sgv<*@c-^XKRBY5;5zv+>XlWE=^c%veyeP$e*IsVCL}i^J9W_ z_BbSh&_=M3Bck=dC$h74yT&+KACuH8SnfEV--AFFal76Vnt%kzJy8XDRaFlkO5NIC zXg7UMe;pclOdI4;$WZ10vT--`a`d3_w4W!pbbTZjdb4gIqYnjEsZ~7|SUFxWt#XJSid|TD@d<`ifdfYV=hg}x~^w$g3;=ear zk35N%Z`TwJFM|DjVtloDNylwicGzYRoE>THpGD{Pu@L>i^~qPUgZi9c(x@)v9yR-Tu))q=yTbV%#eViKr+`NW1Yq^xVbKztI~mSf_lI~jP{#c`dZ zNsjZ44~?Zkj-cI{#YpW%&;`?ml^3F!d++(mZP37vea^~K8J%(9u$u*;dn;7-KW0f? z6>~nVlKs!yp8gM}g6}%V_Qa8xX=j|cwM(0;_8aUmF$3h}Kj7jER|ac*^EYt}5L)ze zXnql>!TKRNf4%L{Ywhx_y)b4 zb;6!hpi3;k;Y;+&;A&5n#5dP#FN=AZWc@^tqW)B3PBYh3d%@S#Pu|RvIEwty;PAT! z+5fGCFMz5YU45SX$(#b%kyH>EPZ=5HAAJxA>`+^PkwVnxJRV=}pU-bddj5xduOy3I z*HuMQP2V@XAk!c`{3iL2#ZC;bZE*(JUi2OMQ{EG(UiHf#zwc@LH{{yh3I5z+Q delta 12071 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