From 039576834392da9eeeb4f9ed22134ab115de888f Mon Sep 17 00:00:00 2001 From: DTraitor <74188902+DTraitor@users.noreply.github.com> Date: Fri, 4 Aug 2023 17:26:33 +0300 Subject: [PATCH] QoL Changes (#116) --- code/modules/mob/camera/camera.dm | 2 +- daedalus.dme | 3 +- deadspace/code/corruption/action.dm | 10 +++ .../corruption/structures/bioluminescence.dm | 1 + .../code/corruption/structures/branch.dm | 1 + deadspace/code/corruption/structures/cyst.dm | 1 + deadspace/code/corruption/structures/eye.dm | 1 + .../code/corruption/structures/harvester.dm | 1 + deadspace/code/corruption/structures/nest.dm | 1 + .../code/corruption/structures/propagator.dm | 1 + deadspace/code/corruption/structures/root.dm | 1 + deadspace/code/corruption/structures/snare.dm | 1 + .../code/marker/abilities/bloody_rune.dm | 1 + .../code/marker/abilities/bloody_scrawl.dm | 1 + .../code/marker/abilities/false_sound.dm | 2 +- .../code/marker/abilities/psy_ability.dm | 9 ++- deadspace/code/marker/hud_marker.dm | 2 + .../code/marker/{hud.dm => hud_signal.dm} | 6 +- deadspace/code/marker/marker.dm | 20 ----- deadspace/code/marker/marker_defines.dm | 4 +- deadspace/code/marker/markernet/marker_eye.dm | 74 +++++++++++++++--- .../code/marker/markernet/marker_static.dm | 4 +- deadspace/icons/hud/action_corruption.dmi | Bin 0 -> 12440 bytes deadspace/icons/hud/signal_icons.dmi | Bin 3798 -> 4401 bytes 24 files changed, 106 insertions(+), 41 deletions(-) create mode 100644 deadspace/code/marker/hud_marker.dm rename deadspace/code/marker/{hud.dm => hud_signal.dm} (93%) create mode 100644 deadspace/icons/hud/action_corruption.dmi diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index e4394770cac..77bc82db77b 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -39,7 +39,7 @@ if(zMove(DOWN, z_move_flags = ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move down.")) -/mob/camera/can_z_move(direction, turf/start, turf/destination, z_move_flags = NONE, mob/living/rider) +/mob/camera/can_z_move(direction, turf/start, z_move_flags = NONE, mob/living/rider) z_move_flags |= ZMOVE_IGNORE_OBSTACLES //cameras do not respect these FLOORS you speak so much of return ..() diff --git a/daedalus.dme b/daedalus.dme index de9fd34c744..1570f1f48ae 100644 --- a/daedalus.dme +++ b/daedalus.dme @@ -4729,7 +4729,8 @@ #include "deadspace\code\game\objects\structures\obstacles.dm" #include "deadspace\code\game\turfs\floors.dm" #include "deadspace\code\game\turfs\walls.dm" -#include "deadspace\code\marker\hud.dm" +#include "deadspace\code\marker\hud_marker.dm" +#include "deadspace\code\marker\hud_signal.dm" #include "deadspace\code\marker\marker.dm" #include "deadspace\code\marker\marker_defines.dm" #include "deadspace\code\marker\abilities\absorb.dm" diff --git a/deadspace/code/corruption/action.dm b/deadspace/code/corruption/action.dm index d19a7b2bb43..441dfc3a45a 100644 --- a/deadspace/code/corruption/action.dm +++ b/deadspace/code/corruption/action.dm @@ -1,5 +1,6 @@ /datum/action/cooldown/necro/corruption name = "Generic corruption placement ability" + button_icon = 'deadspace/icons/hud/action_corruption.dmi' cooldown_time = 0.1 SECONDS click_to_activate = TRUE var/cost = 0 @@ -25,6 +26,15 @@ owner.client.images -= template template.loc = null +/datum/action/cooldown/necro/corruption/InterceptClickOn(mob/living/caller, params, atom/target) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + if(unset_after_click) + unset_click_ability(caller, refund_cooldown = TRUE) + caller.next_click = world.time + click_cd_override + return + return ..() + /datum/action/cooldown/necro/corruption/Activate(atom/target) var/mob/camera/marker_signal/signal = owner var/current_biomass = istype(signal, /mob/camera/marker_signal/marker) ? signal.marker.marker_biomass : signal.marker.signal_biomass diff --git a/deadspace/code/corruption/structures/bioluminescence.dm b/deadspace/code/corruption/structures/bioluminescence.dm index 0e99a76576d..3a36fdcd94a 100644 --- a/deadspace/code/corruption/structures/bioluminescence.dm +++ b/deadspace/code/corruption/structures/bioluminescence.dm @@ -11,5 +11,6 @@ /datum/action/cooldown/necro/corruption/lamp name = "Bioluminescence" + button_icon_state = "bioluminescence" place_structure = /obj/structure/necromorph/lamp cost = 10 diff --git a/deadspace/code/corruption/structures/branch.dm b/deadspace/code/corruption/structures/branch.dm index 46e1c60a531..4a29f7c4fa0 100644 --- a/deadspace/code/corruption/structures/branch.dm +++ b/deadspace/code/corruption/structures/branch.dm @@ -11,5 +11,6 @@ /datum/action/cooldown/necro/corruption/branch name = "Branch" + button_icon_state = "minigrowth" place_structure = /obj/structure/necromorph/node/branch cost = 5 diff --git a/deadspace/code/corruption/structures/cyst.dm b/deadspace/code/corruption/structures/cyst.dm index 005b74d571b..448d3683e64 100644 --- a/deadspace/code/corruption/structures/cyst.dm +++ b/deadspace/code/corruption/structures/cyst.dm @@ -71,6 +71,7 @@ /datum/action/cooldown/necro/corruption/cyst name = "Cyst" + button_icon_state = "cyst" place_structure = /obj/structure/necromorph/cyst cost = 50 diff --git a/deadspace/code/corruption/structures/eye.dm b/deadspace/code/corruption/structures/eye.dm index c127b687b54..273458b8ab6 100644 --- a/deadspace/code/corruption/structures/eye.dm +++ b/deadspace/code/corruption/structures/eye.dm @@ -54,6 +54,7 @@ /datum/action/cooldown/necro/corruption/eye name = "Eye" + button_icon_state = "eye" place_structure = /obj/structure/necromorph/eye cost = 50 diff --git a/deadspace/code/corruption/structures/harvester.dm b/deadspace/code/corruption/structures/harvester.dm index 79ee55eb7bf..4a40f1ec832 100644 --- a/deadspace/code/corruption/structures/harvester.dm +++ b/deadspace/code/corruption/structures/harvester.dm @@ -108,6 +108,7 @@ /datum/action/cooldown/necro/corruption/harvester name = "Harvester" + button_icon_state = "harvester" place_structure = /obj/structure/necromorph/harvester cost = 50 marker_only = TRUE diff --git a/deadspace/code/corruption/structures/nest.dm b/deadspace/code/corruption/structures/nest.dm index 43c241e8bfb..b50f210332d 100644 --- a/deadspace/code/corruption/structures/nest.dm +++ b/deadspace/code/corruption/structures/nest.dm @@ -113,6 +113,7 @@ /datum/action/cooldown/necro/corruption/nest name = "Nest" + button_icon_state = "nest" place_structure = /obj/structure/necromorph/nest cost = 110 marker_only = TRUE diff --git a/deadspace/code/corruption/structures/propagator.dm b/deadspace/code/corruption/structures/propagator.dm index 0f6240df6aa..266f550a033 100644 --- a/deadspace/code/corruption/structures/propagator.dm +++ b/deadspace/code/corruption/structures/propagator.dm @@ -11,6 +11,7 @@ /datum/action/cooldown/necro/corruption/propagator name = "Propagator" + button_icon_state = "propagator" place_structure = /obj/structure/necromorph/node/propagator cost = 20 marker_only = TRUE diff --git a/deadspace/code/corruption/structures/root.dm b/deadspace/code/corruption/structures/root.dm index 38f698f2324..0c3ef5815f8 100644 --- a/deadspace/code/corruption/structures/root.dm +++ b/deadspace/code/corruption/structures/root.dm @@ -11,5 +11,6 @@ /datum/action/cooldown/necro/corruption/root name = "Root" + button_icon_state = "minigrowth" place_structure = /obj/structure/necromorph/node/root cost = 10 diff --git a/deadspace/code/corruption/structures/snare.dm b/deadspace/code/corruption/structures/snare.dm index b641eeec33a..e357c81e0ba 100644 --- a/deadspace/code/corruption/structures/snare.dm +++ b/deadspace/code/corruption/structures/snare.dm @@ -10,5 +10,6 @@ /datum/action/cooldown/necro/corruption/snare name = "Snare" + button_icon_state = "snare" place_structure = /obj/structure/necromorph/snare cost = 40 diff --git a/deadspace/code/marker/abilities/bloody_rune.dm b/deadspace/code/marker/abilities/bloody_rune.dm index b6f025f2549..193b031093b 100644 --- a/deadspace/code/marker/abilities/bloody_rune.dm +++ b/deadspace/code/marker/abilities/bloody_rune.dm @@ -1,6 +1,7 @@ /datum/action/cooldown/necro/psy/rune name = "Bloody Rune" desc = "Creates a spooky rune. Has no functional effects, just for decoration. Should be at least 3 tiles away from another bloody rune!" + button_icon_state = "rune" cost = 16 /datum/action/cooldown/necro/psy/rune/Activate(atom/target) diff --git a/deadspace/code/marker/abilities/bloody_scrawl.dm b/deadspace/code/marker/abilities/bloody_scrawl.dm index 94cf1521cc2..c120ccb1641 100644 --- a/deadspace/code/marker/abilities/bloody_scrawl.dm +++ b/deadspace/code/marker/abilities/bloody_scrawl.dm @@ -1,6 +1,7 @@ /datum/action/cooldown/necro/psy/scrawl name = "Bloody Scrawl" desc = "Writes a message in blood. Should be at least 3 tiles away from another bloody scrawl!" + button_icon_state = "writing" cost = 15 /datum/action/cooldown/necro/psy/scrawl/Activate(atom/target) diff --git a/deadspace/code/marker/abilities/false_sound.dm b/deadspace/code/marker/abilities/false_sound.dm index 6e6fc841d43..37a71a24819 100644 --- a/deadspace/code/marker/abilities/false_sound.dm +++ b/deadspace/code/marker/abilities/false_sound.dm @@ -11,7 +11,7 @@ if(!target) return //Add more necromorphs here, perhaps we should make it a define to make sure it's updated - var/list/category = GLOB.necromorph_sounds[tgui_input_list(owner, "Pick a necromorph type", "False Sound", GLOB.necromorph_sounds)] + var/list/category = tgui_input_list(owner, "Pick a necromorph type", "False Sound", GLOB.necromorph_sounds) if(!category) return TRUE var/list/picked_sound = tgui_input_list(owner, "Pick sound type to play", "False Sound", category) diff --git a/deadspace/code/marker/abilities/psy_ability.dm b/deadspace/code/marker/abilities/psy_ability.dm index dcfa7adac4d..9afddbd68fe 100644 --- a/deadspace/code/marker/abilities/psy_ability.dm +++ b/deadspace/code/marker/abilities/psy_ability.dm @@ -13,6 +13,14 @@ /// Intercepts client owner clicks to activate the ability /datum/action/cooldown/necro/psy/InterceptClickOn(mob/camera/marker_signal/caller, params, atom/target) + var/list/modifiers = params2list(params) + + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + if(unset_after_click) + unset_click_ability(caller, refund_cooldown = TRUE) + caller.next_click = world.time + click_cd_override + return + if(!IsAvailable()) return FALSE if(!target) @@ -24,7 +32,6 @@ if(istype(target, /atom/movable/screen/cameranet_static)) if(!click_through_static) return FALSE - var/list/modifiers = params2list(params) var/new_target = parse_caught_click_modifiers(modifiers, get_turf(caller), caller.client) params = list2params(modifiers) if(!new_target) diff --git a/deadspace/code/marker/hud_marker.dm b/deadspace/code/marker/hud_marker.dm new file mode 100644 index 00000000000..7892e0a4619 --- /dev/null +++ b/deadspace/code/marker/hud_marker.dm @@ -0,0 +1,2 @@ +/datum/hud/marker_signal/marker + var/atom/movable/screen/marker_control diff --git a/deadspace/code/marker/hud.dm b/deadspace/code/marker/hud_signal.dm similarity index 93% rename from deadspace/code/marker/hud.dm rename to deadspace/code/marker/hud_signal.dm index a8b6a13cf70..9fa5a452753 100644 --- a/deadspace/code/marker/hud.dm +++ b/deadspace/code/marker/hud_signal.dm @@ -1,4 +1,4 @@ -/datum/hud/marker +/datum/hud/marker_signal var/atom/movable/screen/meter/background/psy/background_psy var/atom/movable/screen/meter/foreground/psy/foreground_psy var/atom/movable/screen/meter/background/bio/background_bio @@ -7,7 +7,7 @@ var/atom/movable/screen/meter/biomass/biomass var/atom/movable/screen/cameranet_static/cameranet_static -/datum/hud/marker/New(mob/camera/marker_signal/owner) +/datum/hud/marker_signal/New(mob/camera/marker_signal/owner) cameranet_static = new(null, owner) background_psy = new foreground_psy = new @@ -32,7 +32,7 @@ infodisplay += foreground_bio ..() -/datum/hud/marker/show_hud(version, mob/viewmob) +/datum/hud/marker_signal/show_hud(version, mob/viewmob) if(!..()) return FALSE var/mob/screenmob = viewmob || mymob diff --git a/deadspace/code/marker/marker.dm b/deadspace/code/marker/marker.dm index e5878999657..2fadaeb450b 100644 --- a/deadspace/code/marker/marker.dm +++ b/deadspace/code/marker/marker.dm @@ -7,8 +7,6 @@ markernet = new markernet.addVisionSource(src, VISION_SOURCE_RANGE) - marker_ui_action = new(src) - for(var/datum/necro_class/class as anything in subtypesof(/datum/necro_class)) //Temp check to see if this class is implemented if(initial(class.implemented)) @@ -22,7 +20,6 @@ START_PROCESSING(SSobj, src) /obj/structure/marker/Destroy() - QDEL_NULL(marker_ui_action) STOP_PROCESSING(SSobj, src) for(var/datum/biomass_source/source as anything in biomass_sources) remove_biomass_source(source) @@ -209,20 +206,3 @@ /obj/structure/marker/proc/remove_biomass_source(datum/biomass_source/source) biomass_sources -= source qdel(source) - -/datum/action/marker_ui - name = "Open Marker UI" - -/datum/action/marker_ui/Trigger(trigger_flags) - if(!..()) - return FALSE - target.ui_interact(owner) - return TRUE - -/datum/action/marker_ui/IsAvailable(feedback) - if(!istype(owner, /mob/camera/marker_signal/marker)) - if(feedback) - to_chat(owner, span_warning("You can't open the marker UI!")) - return FALSE - return ..() - diff --git a/deadspace/code/marker/marker_defines.dm b/deadspace/code/marker/marker_defines.dm index f5d184789f6..cca3e92b9b2 100644 --- a/deadspace/code/marker/marker_defines.dm +++ b/deadspace/code/marker/marker_defines.dm @@ -15,8 +15,9 @@ GLOBAL_LIST_EMPTY(necromorph_markers) move_resist = MOVE_FORCE_OVERPOWERING density = TRUE var/active = FALSE - ///Whether we should us necroqueue when spawning necromorphs + ///Whether we should use necroqueue when spawning necromorphs var/use_necroqueue = TRUE + var/list/necroqueue = list() var/mob/camera/marker_signal/marker/camera_mob var/datum/markernet/markernet var/list/marker_signals = list() @@ -43,4 +44,3 @@ GLOBAL_LIST_EMPTY(necromorph_markers) var/list/corruption_eyes /// When was the last time all signals were alerted by an eye var/last_eye_notify - var/datum/action/marker_ui/marker_ui_action diff --git a/deadspace/code/marker/markernet/marker_eye.dm b/deadspace/code/marker/markernet/marker_eye.dm index 2defc1a55ee..7dd3b680abb 100644 --- a/deadspace/code/marker/markernet/marker_eye.dm +++ b/deadspace/code/marker/markernet/marker_eye.dm @@ -10,7 +10,7 @@ GLOBAL_LIST_EMPTY(markers_signals) sight = SEE_MOBS|SEE_OBJS|SEE_TURFS mouse_opacity = MOUSE_OPACITY_ICON movement_type = GROUND|FLYING - hud_type = /datum/hud/marker + hud_type = /datum/hud/marker_signal interaction_range = null var/psy_energy = 0 var/psy_energy_maximum = 900 @@ -185,6 +185,46 @@ GLOBAL_LIST_EMPTY(markers_signals) qdel(src) +/mob/camera/marker_signal/verb/switch_necroqueue() + set name = "Join/Leave Necroqueue" + set category = "Necromorph" + + if(!marker.active) + to_chat(src, span_notice("Marker is not active yet!")) + return + if(src in marker.necroqueue) + to_chat(src, span_notice("You have left the necroqueue.")) + marker.necroqueue -= src + else + to_chat(src, span_notice("You are now in the necroqueue. When a necromorph vessel is available, you will be automatically placed in control of it. You can still manually posess necromorphs.")) + marker.necroqueue += src + +/mob/camera/marker_signal/verb/jump_to_maker() + set name = "Jump to Marker" + set category = "Necromorph" + + forceMove(get_turf(marker)) + +/mob/camera/marker_signal/verb/jump_to_necro() + set name = "Jump to Necromorph" + set category = "Necromorph" + + if(!length(marker.necromorphs)) + to_chat(src, span_notice("There are no necromorphs to jump to!")) + return + + var/mob/living/carbon/human/necromorph/necro = tgui_input_list(src, "Select necromorph to jump to", "Jump To Necromorph", marker.necromorphs) + if(necro) + forceMove(get_turf(necro)) + +/mob/camera/marker_signal/verb/jump_to_span_locs() + set name = "Jump to Necromorph Spawn Locs" + set category = "Necromorph" + + var/atom/location = tgui_input_list(src, "Select object to jump to", "Jump To Spawn Loc", marker.necro_spawn_atoms) + if(location) + forceMove(get_turf(location)) + /mob/camera/marker_signal/verb/possess_necromorph(mob/living/carbon/human/necromorph/necro in world) set name = "Possess Necromorph" set category = "Object" @@ -201,13 +241,13 @@ GLOBAL_LIST_EMPTY(markers_signals) /mob/camera/marker_signal/proc/change_psy_energy(amount) psy_energy = clamp(psy_energy+amount, 0, psy_energy_maximum) if(hud_used) - var/datum/hud/marker/our_hud = hud_used + var/datum/hud/marker_signal/our_hud = hud_used var/filter = our_hud.psy_energy.get_filter("alpha_filter") animate(filter, x = clamp(HUD_METER_PIXEL_WIDTH*(psy_energy/psy_energy_maximum), 0, HUD_METER_PIXEL_WIDTH), time = 0.5 SECONDS) our_hud.foreground_psy.maptext = MAPTEXT("[round(psy_energy, 1)]/[psy_energy_maximum] | +[psy_energy_generation] psy/sec") /mob/camera/marker_signal/proc/update_biomass_hud(hud_override) - var/datum/hud/marker/our_hud = hud_override || hud_used + var/datum/hud/marker_signal/our_hud = hud_override || hud_used our_hud?.foreground_bio.maptext = MAPTEXT("[round(marker.signal_biomass, 1)] | +[marker.last_biomass_income*marker.signal_biomass_percent] bio/sec") /mob/camera/marker_signal/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null, filterproof = null) @@ -256,7 +296,7 @@ GLOBAL_LIST_EMPTY(markers_signals) icon = 'deadspace/icons/signals/mastersignal.dmi' invisibility = INVISIBILITY_OBSERVER see_invisible = SEE_INVISIBLE_OBSERVER - hud_type = /datum/hud/marker + hud_type = /datum/hud/marker_signal/marker interaction_range = null pixel_x = -7 pixel_y = -7 @@ -270,16 +310,18 @@ GLOBAL_LIST_EMPTY(markers_signals) /mob/camera/marker_signal/marker/Initialize(mapload, obj/structure/marker/master) . = ..() - master?.marker_ui_action.Grant(src) icon_state = "mastersignal" - verbs -= /mob/camera/marker_signal/verb/become_master + remove_verb(src, list( + /mob/camera/marker_signal/verb/become_master, + /mob/camera/marker_signal/verb/switch_necroqueue, + )) /mob/camera/marker_signal/marker/Destroy() marker?.camera_mob = null return ..() /mob/camera/marker_signal/marker/update_biomass_hud(hud_override) - var/datum/hud/marker/our_hud = hud_override || hud_used + var/datum/hud/marker_signal/our_hud = hud_override || hud_used our_hud?.foreground_bio.maptext = MAPTEXT("[round(marker.marker_biomass, 1)] | +[marker.last_biomass_income*(1-marker.signal_biomass_percent)] bio/sec") /mob/camera/marker_signal/marker/verb/downgrade() @@ -292,6 +334,12 @@ GLOBAL_LIST_EMPTY(markers_signals) signal.change_psy_energy(psy_energy) qdel(src) +/mob/camera/marker_signal/marker/verb/open_marker_ui() + set name = "Open Marker UI" + set category = "Necromorph" + + marker.ui_interact(src) + /mob/camera/marker_signal/marker/ClickOn(atom/A, params) if(check_click_intercept(params,A)) return @@ -364,9 +412,15 @@ GLOBAL_LIST_EMPTY(markers_signals) marker.biomass_invested += marker.necro_classes[spawning_necromorph].biomass_cost var/path = marker.necro_classes[spawning_necromorph].necromorph_type_path var/mob/living/carbon/human/necromorph/mob = new path(A, marker) - if(marker.use_necroqueue && length(marker.marker_signals-src)) - var/mob/camera/marker_signal/signal = pick(marker.marker_signals-src) - signal.possess_necromorph(mob) + if(marker.use_necroqueue && length(marker.necroqueue)) + var/list/necroqueue_copy = marker.necroqueue.Copy() + //If current signal has no key and there are other signals in the queue, pick another one + while(length(necroqueue_copy)) + var/mob/camera/marker_signal/signal = pick_n_take(necroqueue_copy) + signal = pick_n_take(necroqueue_copy) + if(signal.key) + signal.possess_necromorph(mob) + return return if(!spawnloc_cantsee) to_chat(src, span_warning("There are no possible spawn locations nearby!")) diff --git a/deadspace/code/marker/markernet/marker_static.dm b/deadspace/code/marker/markernet/marker_static.dm index b51fc047292..4a7829a60f1 100644 --- a/deadspace/code/marker/markernet/marker_static.dm +++ b/deadspace/code/marker/markernet/marker_static.dm @@ -52,7 +52,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/cameranet_static) /mob/camera/marker_signal/reload_fullscreen() if(..()) - var/datum/hud/marker/our_hud = hud_used + var/datum/hud/marker_signal/our_hud = hud_used our_hud.cameranet_static.update_o(client.view) /mob/camera/marker_signal/proc/update_static(turf/previous_turf) @@ -71,7 +71,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/cameranet_static) if(!offset_x && !offset_y && !force) return - var/datum/hud/marker/our_hud = hud_used + var/datum/hud/marker_signal/our_hud = hud_used var/atom/movable/screen/cameranet_static/cameranet_static = our_hud.cameranet_static var/glide_rate = round(world.icon_size / glide_size * world.tick_lag, world.tick_lag) diff --git a/deadspace/icons/hud/action_corruption.dmi b/deadspace/icons/hud/action_corruption.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9d3f9d217f67c0b38294a65048eb7348052c9fa4 GIT binary patch literal 12440 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 HFzEjPoMQa$ literal 0 HcmV?d00001 diff --git a/deadspace/icons/hud/signal_icons.dmi b/deadspace/icons/hud/signal_icons.dmi index 1d9f992374c0890e6b5f57c1671106a3cfa8601e..5ad67674effad2a6284adbaecf40ee2af4c0163c 100644 GIT binary patch literal 4401 zcmV-15zg+3P)V=-0C=2@&P@t~Fc1acb#jV9_oaW^Y>HA`=oKV2(F~1AnTeI&z6+td5_j|9 zu3po z%Sx!b3aYk|UrcO+coL`J*#H0#KS@MERCt{2U2SL_#~FTBPEs4kGDZR0ctt6K8fqJY zW3cNY-JNTNRa;dyH8sc_I8H9Kn2P4ZP*F*iC8he|)CGee`eXN9&Cc!D?XILdX&*TDYj$?;o@d^9=i{A|^7%a0 zG7{-D1AxNlsI=PeQjL(RRRB>CM|luxMFb6*iwpqv?3<1xzkmF_5dbikJy-VqpNZrN z5rZdgJe6Xt6BD6{>(Ml{hRtM!@V$rs0{}>`yr`czcs5u@cSrR6#%BQllQv1}g5?|> zqA1C(v(|AewyuW^Alu>1onw<|G0l->u{)u3giG)Y(}TLTJcbWMuN86aPo! z6FHjOhYtZb0pKkF_-w~B!36MT@}ybHF6FQL`XRl{I1w|H$)G2j#W8I&V3H3U(>7yF zb{2sh`S-CKJ=z1@$8PM!0}N#{`h{E$=_9C8aqD%B zhxnX5`=*0CftT{vrABER8l`QHB1oju%$Ea~%jx7BrB@{HjfwY6;ZVtUtLu58S@H@& ze&Ws*X1Dda78R(P5Vu~}yx>^{5V?G*Kb1UYe!&CM4m3*J%yS>+$0V~vW67EG<9rRt zG76)kQY(Nzq<+DGCGtfPhyoDFe`Df3iSjV-57W1B@GOAGVnPzF zjaMGk4&Fhm>)wvU;wFZ%0VEcoZ|{ug-AvBjgCsF53VsR5IYF})W*6UgrG-NKa=JsLM z+&;{3cf?xq51vKh&K1V*1Dpjg?sIAq5^S4+JfS@KgnNz80jZSf3lMngag}YY_zU~R zk^1@zfKL4F`FZnrtzj;EPMW;gElu9+mH?oz;jx6fBPbj`V{Z9<+#S)=0HFKa%s=4b z15B}pI3Vo+ayh&-{a*l_Gbj*Gn8i0ZEq!gYy&ner+TJLPj`kl(r!B|J_AmpV?Rds^ z>vgT#;rgb$H_zAccHsL40KI=8Y9!L>{@e5O=K+9s0v9_v&I7t-SS~S8NfNhS*TSI8 z30&M{nER2XEda~8MKA#2n}HwZ$0VfFj7q;9$RQ;1PfK6pD%*+!lCw}k;yeH{`{qgR z_&k9A<#_OFz|jdjd`2S258$0ZMBEH)YXgL~{-ykN>80dJcF*YOnZ-8%bn*#rOuT1y z9{C+C@ z^{0}@*oXNs=~VI<+m3I6w+uu+@A&aOh!Kh4JOB*I@`WBvJ1<@wlI06VnkcNmiIDd@ zp&|jST1SxC%a+UGUgL9+r~d=MTF2%rofOspSd_=rmN#a%M2mwo$7p^{HW2RX*g0}j}68#nS8N7 z;P(7{&2;s8fwut7?Za&H=3`0UcAH!MTA$@y^YE;B%?o7$paB(rbd5^>0ZA|EG$6zi z9(A2Bf&^JGj)`m@N9yZwq`uxv6BN{p+cWj4eqt&UGQURm1ct9*B7$B-U(bOc0Dd%$ z?=vT&X++Sjq%T9AFM{fL082y1Hj_U?cM6foEP5qeK`d84ge5M(YvxXnsbI^2@l=Y5 z0;r`y9v*gc0xNAT_=T@Ifo?w}m2yBA!)l6PEn~Twp?0Xa&oU-GTJVk@p}Bqd-Q{@J zvGf{{qY=l9!!6VIjX)2qmW~AxhLa%z&;2jHgnJcaVdiY6M`XUS0%5 zy42QYo*&F)(8r0uPBebtr`}&FD?q^>Etk7opGPC2078YmS6wS$kei7lg2M`RCNOIf>`(W*^C9W z1QdaoS6K53*hewjrsK)S(tN*yK{_EQ`7M{bm~=p2c8-5e#R8z2r(x6Bfl7bx%#41# zYnN?0GWC6$h5_Rq+NW($5kv{UQOwprPlI@lBv%-}g*YfCT8<(oB>s7k`v5dMH7Jf7 z>i`k?W%YV42ML^5G!4C)hQUk*y~dBwt7%}UtlsVuRv4ku|J0*?^{T6bz=?c|pJXhn zx5%0G?zDL0S&<&di{9W(F*mD-%MGK{5by^{=5!#w?YIL<8*M}a7IEe4*% zO4{&lroT_qOhNI)lT+n{!suxKk^1@z^l=MWYq{K2R{DA3#Zpe^#rGElA@&mTVr5gG zR#pZ06#<{tFZczWc;ZP6fGz@BD^OfY&JBL8fZudp#3$0}{>6?Cw%F0ZuoSL#p3YI6 zqs#qeUAwIl6Oz+xEjrJOfESHZFJZCkva~E6K|xDCuvF4-$d4@K6ZYZ(_Tqt=*0Ow@ zQ5BH)U&(T?Jo#ej7eRHl3(P2H9^A3x3?|-e6Nz@jlNAuJi9+FpV6L}(_>5`Ad^ZE< zvgf3R%th9axyUGRLJUy?tmFrclc#!|a6^7%sR9692rD&zk$+Chg!6Y+&+9Lap%gR#GNaL0RN=& z>F9pS&+A?i0k!GJg~vPvNF67?7V9yhtF&60wQYg_&)O-8{dh< z{#mf`ojCgKqt^UB*=~NwLL~OjqVP%in!`PsRwiUO3vfdC0Pq%p&2`&++~Bmr=UAr2 z+^4ob5#Q^e@F?Im%qlkFdNj?p?Ju6Q^VVs9fHU6&HogWl#(0xtwW7lHUc13W7IZveZ}KOoDtf4L%J zIii@Q*3SU|2|96O$x_fYLPFTuy&wPFsu>OzK|j7(EDZC^li!ogT1r0MBX-Y*>8=eh z$-+|i56LoGCnhAD(pTmq5UIr%7})quNC#fD{S3Xcv_hIw8vf&C5daqpAO82-Uh7`6B5#C#sEmr2`AHE=}eDY^9l z3~)V*UNGwTevdSEK7#~7Y9drMTS&_vCm)BWX+U5HP?DKQJR1*RKmU{PSRLpI1h1=jt5coC!Q9|_g zMSNUAS}{G3nh^lOYe{*#ff~P)D<*B~;jrY>{}cF$Vz&F!3nvUb|1$a(ZUOMF1}L3f zpGM6Izza^L-)*d&M(84b|4YfWOQ&CD^Lxv>)($8($(LV{RV4N z05SZdYCD2rtPIwi4^SzR$>eIk!m1*+0P7sF0Mv;a0HldrAzJJdRAP5=Vw z&VMx?!xw6*6|gaxWKZ(>n(5G~1=NfM*qBT*02%H$HvbWzCIn!Rk0<&32g0T3mjqd7 zsQM~^O1h2d&&Jh3cvNHoN{X^+xn9HtS;QrM*-&W}@XL~-jFc4R*^;9Cn!iv|lr1Gi ziL^v=^?a79ff&)E(kkFr0Db_V0YH06QT_?w&j9WL_#1%zB}JJB@Z%;`U2x9EH?n|k z{x>F*uf?r^=;7M}loVw{ld68FNmc&^;L9de{ULylpo`%Z0MA1IH;S1iRb414$`>x# zd4enb8NhS^GqELz7QW{LloVw%fTsX{3gCADe$=F@4~%OYn^g5lNm1$mJP+UqfMS!X zei`(|IL}|QIiEp9PGCG5=pQKnR{^NdtAg*B6y@ELqHG0FC@D%afGz-AnpAZRz*ixC z0w>2WgSZDUGK88DR8o|NCRLp)Da!i*eg@!609&D3h=nFq72E9D6u@7?zMLKT23(tkpJpn-HeiHV@g2Es?3n23(pZ~xRft#4tH3D}98-%Y4h)jplo#oTS%|>_B z#8`j>%BlgbiDK4PwImqpAf^VW$s?As#oV098F2NL|3-$Q4Vs za6K;l6{2P$gG8e35X9k&`vGbMPxAQ>41(=Ud?xnxgP~?DfD^)w5XKfD#=1rV=-0C=2@&dmygFc1XbbMh36-b??kxfDe_=qpHS)+RKXvKuRX`yPbeN^+Zl z4`xcZ)lJ(&)wS}C#4aqL;CeVpu{jehD7c)Zu;?B(?uDa{2nq@w=~GBy95E<3NimV0 zanC;#NsmZLHhDKbGu*71hg^L3VGCKposQU`4u9aV$ z%WZzNjqnHn01fU*L_t(|ob6p*Xd6c!|BVxRgtR__3vP(aJ>3PG1db%&Vz6X|y2Kp8 z4wMEQ7E%|Lf+3K*=E2lov3>X?APq<>i<16|Cwb=OH0_v$QT9(fKs8rn*A<1v^4t# zypS;rPQ}WUxq7by&dq{hdN^}_wXF%`bqOUDp z$YurMWCDgYNxCvrPh8p*CmPCtAOd7=-*#Ppg2Q-%!<8~VOrUF{rs-*NGPiGY-E*3S zNDTOE&pA%Nu=j)|{!A_h02na$I|x5u?yr>9FhM3h;Rz07)HFpsR5yynu&-TrL}I|T zr8~lmgkb^^-^=_6i7XZ|n$LUIBQqfgGV>hA2_imFg9*B}bcc1Y1L$A}JeiO&3?9nv z7K;|~ZRu5scWLpaU>wEsezsm_w4<&Xh@W|Ii|e*Q*Mh);8e&9TS?bUC42TDuWN!cf zR`_!Oz!yt%OqOWCB8;E&m5E6N{xtg$2b{!L?~xlk|wjmCNzK(pMB{l*O4y+0OnFJ#JRB2relI1bXpTe%SKHTy%)oF{{jFWeb^5Gf(hg!R{2j2dGTscDim0$P+&C?|KSb&Ht1RaTnr#WcCZ7& ziIKe@$d?^bKbLxeRsNI1K?A^1Jgs}*%l(ZF?S8$mHM^$W23-q+)&$7}m5EPy)bR?C z%?e*Yki*f>`R_x&M7228+Ij`B2!DTLLmY2Mcsk(~{@e;Ni$!5}gfmtMPgujRxWIn4 zWAEp6d0_x36$+E548w6;w};vI;f=l8ZP2wK_?DETnIIc4w+(C#>NBy zptV(;-|X+704&X@7c5}A8IUmyhpj)~Gr+%Cnq%jC26#Ju z=gvZ ztN#JuwDW!J-=ch_!|S;)T>xC+X&fjO3X{lYT?{A{3X>Vbh|2{1Ev9-@e5{_(GGNp+ zF_TJ(W3%Hmah@Pc`$=Zme3|%hW7ITps|-)HYJ1@R#zvyL8iL?r0Ci}|UArXt zCz&Pba?dB-7q`t|^-kBQhaPPMk;RBNj!6BQIj9$ER$IhgUwe#HXeY*5bD5FTHQ4_$|#I12NjF~S`*~gXR^wFf)|nNCH;VCY)uA~ zNmNH$7`WO2e#EbKC~_CU2;XM5QBNuVEyAGzx>2QF)E8Bmpd>+;ytN&X$lTB{uv@-j zyIm2O6|sx@V%uuKPJuQGYRg^a0C42kYAg@={;|~(tfrqlNsx0%`MrAp0CxH`#`1Z* zU8B#`GT_bU|Fa(Q{-3QAHFn3oxnOt4MysW1Ai~Q;XQxj)%6y&8@>-a%Yl1vLJ;MCn zJtyJMeE^*M0K8blw4Lnxbq%4rS3~TdQ7haDps^4lzQDN;TxE#~V-YohJ^tfgIGG$+ zg#Q;E#62Qp<6YSO?LWM+H*tPpA)DpXsT7!!c)*KAu+J^h@C)y{t^7sU6E0W-WpsWlpBEYcSlUo+S9r^jW2PJOnFXRQC1w#b-{2c!I+57`ufEA>0A!u(tHLUA^knH6DBjIZiB9EH%v<-fhvgj ztgjDa`8;^Bh%2d-*dI4dq^q0`YndRIjgM$@f}lR9#*wCGKs8I_n!c#CVeoRuu?gSq z=(gNd;hiMnOP3R?`XqJeyC=Ggbb4Yv1iY$ z<3oqE<;c{GnY@Sk43hBfGqZeoexxqU7Mfs7yvzu>8=Pie&g637#iC$J z82CEj_55YFJU_yg=SLVihe3b3wC5$m!y71d4Y5+!khL#g>l_B%SI;<~%p7eAQOwU1 z9L8C5KklYpVEWJ@hZ&-MF3ow9?<)-sisy})CZ zyy2Am&S7L8+~V>+AZdVopI1m)EvTL#;>y>fK6~uhGd$sca`=F=(iB-rMAJn~@_<&0 zM;5t^@EQQ8~ZWBbBB-clpDLY~LdQ|OG zo#w4+>*^!u5i&^};mb`7OHFWJ_> zcx7w*0LQsKFWJ`YTEl!my+HB2Py^cp$;2Pc=N%54?nz(2=+GYZScatm>dbB$NQoO& z%pg~D^p6~i_DH_6YS-tTqwj^@#YG0g;2Z#hMQ}1brNKegJ2;4iY?hBnOCY4LU*znh zmCTU7evy|iUKawW9s^Y*=hkbUtQQ)Yqwj}up}?q*ex&g)hYZ@q_P>1nLxduejqKNAcde~gjQ7RHBECnqb#k|MYD4} z%PMBZ4}0ZMlhA!;_8$@7(-+J0BOk*G14Bn5Nkh;q9CEm_w5ysR!^>DVY?|gygO~JY z9^B$OM%3;tci}=cTA*b>Bd2NZL{#GgcIO8)8NYcG)YH?`)aUQW0h#TDT?RB6E(UZ< zsde2|rrGVHdN>%MBlvb;Lg+QB69~ZoBD9>zMf-_oLSG+dQmI6Kpdko>J|IkPOS7<$ z%_iz&3{lVmgtPmN(gMn~@EgPcEaHnrr4sf{fNJ1s2aGpyacf6^Ntbm_W(2h`1@RNC zonhf%fST(bhkEN)IoFm`I;&{Bxui7fqY_^psq*WcY&7cH65j0Z=kfxp>PHvEd5QRf z@L`FhNtgxPnj`nmc=b#+1A+nL(i(9Zek!?+H-$hDfDE zg$dsOurY8g*d!n8q+cdH?R)*1u&bQ=X^{K@H<{2u>jmjP{FVfXS0NbSXL`m>Q)r1y zc)!tpz+UCNwe<@9{FW3>U%%**eyOV9>RQmHfXLV6EisIk;nhlx+jm8QV1P_~Rr*zgketY?oXci| zh^QkxX@Po8Wt7Ya@foYGAr{ooYZO9-q4FP+qaMEUooFx-qONi-OCu3%>eY9w6ZZUs za@!WvGW^2dU4%@px1gKu1u*{0SB|BalY|x^ob;0l6QN{ADA9{pAXt|RHw;$ ze-yuR+ZHm%t^6W+ZR^bOHStTYw;;XVf^yrIt6F>)HGd!)NF(r5%cTj zRsYDSX=-DC^_(tRq5Ubzd=U7;L6qCJkY0DbGD*EG{e0n|_Fa=`hO|CFC;d~YRH!A# z>aof>>-`Y`kf9TIE1E*r2pMIod%v*HZ3F_HaD+jQD~PztIbAQm&XHa?=(%*x%*j7v z^pgUB;E))g+|7qD{O{n`Li(#-E5L|x^)R46bg%np;(TTSAx`eBMBz~uwf zxPPiiFI;{-oZ^lD@>NxJC2fg&VS-A7gRHw)Ohn@Z+tdD$1(mlLW_`>j+&d@vB+oyqcBUr<9hiALx1#SB9_q^7Zvx<$UVZ zcLXDXn4mV`l7d8LN9+1`;sE>n6PIu`J2^Lz+0i;e?Nsb0=QbJt2W#8vc5%j_c>n+a M07*qoM6N<$f@oY(hX4Qo